Gdzie entropia tam szkodliwe oprogramowanie
Napisał: Patryk Krawaczyński
24/04/2020 w Bezpieczeństwo 1 komentarz. (artykuł nr 732, ilość słów: 334)
E
ntropia może być wykorzystywana jako miara stopnia losowości. Wiele plików wykonywalnych złośliwego oprogramowania jest spakowana, aby uniknąć wykrycia i utrudnić inżynierię wsteczną (ang. reverse engineering). Twórcy szkodliwego oprogramowania często wykorzystują pakowanie lub zaciemnianie, aby utrudnić wykrycie lub analizę plików. Większość standardowych plików binarnych systemu Linux nie jest spakowanych, ponieważ nie próbują ukryć tego, czym są. Wyszukiwanie plików wykonywalnych o wysokiej entropii to dobry sposób na znalezienie programów, które mogą być złośliwe. Dla danych binarnych wskaźnik 0.0 określa nielosowość, a 8.0 pokazuje zupełną losowość. Dobre szyfrowanie wygląda jak losowy biały szum i będzie bliskie wskaźnika 8.0. Dobra kompresja usuwa zbędne dane sprawiając, że wydają się bardziej losowe niż gdyby kompresja nie miała miejsca i zwykle wynoszą 7.7 lub więcej.
Do wykrywania tego typu plików możemy wykorzystać narzędzie o nazwie sandfly-filescan
, które służy do szybkiego skanowania plików typu ELF i raportowania o ich entropii (jako miarze losowości):
wget 'https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz' tar -xvf go1.14.2.linux-amd64.tar.gz rm go1.14.2.linux-amd64.tar.gz cd go/bin export GOPATH=/root/go/bin export GOROOT="/root/go" git clone https://github.com/sandflysecurity/sandfly-filescan.git \ /root/go/src/sandfly-filescan cd /root/go/src/sandfly-filescan ./build_linux.sh cd scripts ./testfiles.sh
Testowy skrypt wygeneruje przykładowe pliki i zaraportuje ich poziom entropii:
Creating high entropy random executable-like file in current directory. Creating low entropy executable-like file in current directory. Running sandfly-filescan to generate entropy and hash values. filename: high.entropy.test path: high.entropy.test entropy: 8.00 elf: true md5: 55d8e3aa4292b8f00c4d38ef6beb599b sha1: 233f8c6ddb7b0e51aa08e5df25aff027a4ba8845 sha256: ebd60a747c2c3a895da20ded0c5bb652306c31907626c91684643bab1d8f2bbb sha512: ac087e26b3d4cf223b248bdc2615eb0cf78a889555654942b2d551376c44d6bf76c44d6bf filename: low.entropy.test path: low.entropy.test entropy: 0.00 elf: true md5: 859504f6efc3fd8d984d464cb9749a80 sha1: 2027de47e30ea6014bb7054577350fdcf750d709 sha256: 05f51e69615fde66335a83305e7eea1f01e79585a648a77b643467e4fcd251b7 sha512: d8df7342064d2a70f73f223ed56ef6556277332bcd54ea0bdf29cd1fc3742afe76c44d6bf
Cały system możemy przeskanować przykładowym poleceniem:
./sandfly-filescan -dir / -elf -csv -entropy 7.7 > raport.csv cat raport.csv
kheaders.ko, /lib/modules/5.3.0-45-generic/kernel/kernel/kheaders.ko, 8.00, true, c46b1eb5a36e4fe0ef5c7e074b95d323, cf8d1ed24a9778eb2dccf6ee78a11d1d47861208, cc84b6d2c5908b88127c72920378545201bc7073edd718a624e8debecd245c07, a24ffd8b40555fb198d6375251708e48853948220d93c0cd835387d665cf3b7ff172110e6de
W Linuksie niektóre biblioteki (.so
) oraz moduły jądra (.ko
) mogą zostać oflagowane podczas skanowania katalogów systemu. Istnieje również prawdopodobieństwo oznaczenia innych plików, które mogą mieć wysoką entropię ze względu na skompresowane formaty np: .zip, .gz, .png, .jpg. Na szczęście program podczas raportowania również wypisuje sumy kontrolne dzięki czemu jesteśmy w stanie zbudować sobie bazę błędów pierwszego rodzaju (ang. false positives) i odrzucać już sprawdzone przez nas przypadki.
Więcej informacji: sandfly-filescan, Entropia
Zmiana nazwy: sandfly-filescan to teraz sandfly-entropyscan