파일이 어떤 파일인지 분석할때는 보통 Magic 값을 사용한다.

Linux 기준으로는 file 또는 binwalk 등의 명령으로 판별할 수 있다.

하지만 파일에서 패턴이나 Signature로 판별하기 어려운 경우가 있다.

파일의 패턴이 보이지 않을 경우는 압축 파일 또는 암호화되었거나 serialization 된 경우가 많다.

이런 경우 File entropy를 이용하면 파일의 편향성을 판별할수 있다.

Shannon’s entropy는 데이터가 얼마나 무질서한지를 0-8 사이의 값으로 나타낸다.

리눅스에서는 ent 명령으로 확인할 수 있다.

AES를 통해 암호화된 파일의 경우는 패턴이 반복되는 빈도가 낮기 때문에 7 이상의 높은 entropy를 가진다.

실제 암호화된 파일을 통해 확인해보자.

dd if=/dev/zero bs=4096 count=256 | openssl enc -aes-128-cbc -in - -out - -K "000102030405060708090a0b0c0d0e0f" -iv "000102030405060708090a0b0c0d0e0f" | ent
...
Entropy = 7.999820 bits per byte.
...

다음은 출력가능한 random 값에 대한 경우의 entropy를 보여준다.

cat /dev/urandom | tr -cd '[:print:]' | dd bs=4096 count=256 | ent
...
Entropy = 6.569796 bits per byte.
...

암호화된 파일의 경우 높은 entropy를 확인할 수 있다.