
Linux向けパッカーまたは暗号化されたマルウェア関連バイナリを検出するエントロピースキャナー。悪意のあるファイルやLinuxプロセスを検出し、暗号化ハッシュとともに出力します。
sandfly-entropyscanは、ファイルや実行中のプロセスを迅速にスキャンし、そのエントロピー(ランダム性の尺度)とLinux/UnixのELFタイプ実行可能ファイルであるかどうかを報告するユーティリティです。一部のLinuxマルウェアはパックまたは暗号化されており、非常に高いエントロピーを示します。このツールは、高いエントロピーを持つ実行可能ファイルやプロセスを素早く見つけることができ、それらはしばしば悪意があります。
エントロピーはランダム性の尺度です。バイナリデータの場合、0.0は非ランダム、8.0は完全にランダムです。優れた暗号はランダムなホワイトノイズのように見え、8.0に近くなります。優れた圧縮は冗長データを削除するため、非圧縮時よりもランダムに見え、通常は7.7以上になります。
多くのマルウェア実行可能ファイルは検出を避け、リバースエンジニアリングを困難にするためにパックされています。ほとんどの標準的なLinuxバイナリはパックされていません。なぜなら、自分が何であるかを隠そうとしていないからです。高いエントロピーのファイルを検索することは、高いエントロピーと実行可能という2つの属性を持つプログラムが悪意がある可能性を見つける良い方法です。
sandfly-entropyscan の使用方法:
-csv
結果をCSV形式で出力(ファイル名、パス、エントロピー、elf_file [true|false]、MD5、SHA1、SHA256、SHA512)
-delim
CSVファイルのデフォルトの区切り文字「,」をお好みのもの("|"など)に変更します
-dir string
分析するディレクトリ名
-file string
分析する単一のファイルへのフルパス
-proc
実行中のプロセスをチェック(デフォルトはELFのみチェック)
-elf
ELF実行可能ファイルのみをチェック
-entropy float
この値以上のエントロピーを持つファイル/プロセスを表示(0.0最小~8.0最大、デフォルト0ですべてのファイルを表示)
-version
バージョンを表示して終了
/tmp下で実行可能なファイルを検索:
sandfly-entropyscan -dir /tmp -elf
/var/www下で高いエントロピー(7.7以上)の実行可能ファイル(多くの場合パックまたは暗号化されている)を検索:
sandfly-entropyscan -dir /var/www -elf -entropy 7.7
すべての実行中プロセスのエントロピーと暗号学的ハッシュをCSV形式で生成:
sandfly-entropyscan -proc -csv
エントロピーが7.7より高いプロセスを検索(パックまたは暗号化されている可能性が高い):
sandfly-entropyscan -proc -entropy 7.7
/bin下の全ファイルのエントロピーと暗号学的ハッシュ値を生成しCSV形式で出力(例:ハッシュを保存・比較するため):
sandfly-entropyscan -dir /bin -csv
エントロピーが7.7より高いすべてのファイル(ELFかどうかに関わらず)をスキャン: (圧縮ファイル、png、jpg、オブジェクトファイルなど、多数のファイルがリストされる可能性あり)
sandfly-entropyscan -dir /path/to/dir -entropy 7.7
ファイルを素早くチェックし、エントロピー、暗号学的ハッシュ、実行可能かどうかを表示:
sandfly-entropyscan -file /dev/shm/suspicious_file
マルウェアの問題があると思われるシステムでスポットチェックを実行します。または、スキャンを自動化して、予期しない場所に高いエントロピーのファイルが出現した場合に出力を得ることができます。あるいは、通常とは異なる場所(/tmpやユーザーのHTMLディレクトリなど)にある実行可能なELFタイプのファイルにフラグを立てるだけです。例えば次のようにします:
高いエントロピーのバイナリが/var/wwwディレクトリに出現しましたか?誰かがあなたのウェブサイトにマルウェアドロッパーを仕掛けた可能性があります:
sandfly-entropyscan -dir /var/www -elf -entropy 7.7
cronタスクを設定して、/tmp、/var/tmp、/dev/shmディレクトリをスキャンし、エントロピーの高低に関わらず実行可能ファイルを検出します。tmpディレクトリ下の実行可能ファイルは、マルウェアドロッパーであることがよくあります。
sandfly-entropyscan -dir /tmp -elf
sandfly-entropyscan -dir /var/tmp -elf
sandfly-entropyscan -dir /dev/shm -elf
別のcronまたは自動化セキュリティスイープを設定して、実行中の高度に圧縮または暗号化されたバイナリをスポットチェックします:
sandfly-entropyscan -proc -entropy 7.7
git clone https://github.com/sandflysecurity/sandfly-entropyscan.git
go build
./sandfly-entropyscan
複数のプラットフォーム向けにビルドする基本的なビルドスクリプトがいくつかあります。これらを使用するか、必要に応じて変更してください。インシデントレスポンダーにとっては、事前にコンパイルされたバイナリを調査用ボックスに準備しておくと便利かもしれません。
build.sh - 実行時の現在のOS向けにビルドします。
ファイルが実行可能なELFタイプである可能性があるかどうかを確認するために、シンプルな方法を使用しています。複数のプラットフォーム向けのELF形式ファイルを検出できます。マルウェアがIntel/AMD、MIPS、Armのドロッパーバイナリであっても、それらすべてを検出できます。
コンパイル方法や正当な理由でパックされた結果、高いエントロピーを持つ正当なバイナリにフラグが立つ可能性があります。.zip、.gz、.png、.jpgなどのファイルも、圧縮形式であるため非常に高いエントロピーを持ちます。圧縮はファイルの冗長性を削除するため、よりランダムに見え、エントロピーが高くなります。
Linuxでは、ライブラリディレクトリをスキャンするといくつかの種類のライブラリ(.soファイル)にフラグが立つ可能性があります。
しかし、経験上、高いエントロピーを持つ実行可能バイナリはしばしば悪意があります。特に、通常実行可能ファイルが存在すべきではない場所(/tmpやhtmlディレクトリなど)で見つかった場合に顕著です。
エントロピーの計算には、ファイルのすべてのバイトを読み込んで集計し、最終的な数値を算出する必要があります。非常に大規模なファイルシステムや非常に大きなファイルでは、CPUとディスクI/Oを多く消費する可能性があります。プログラムには内部制限があり、2GBを超えるファイルではエントロピーを計算せず、通常のファイルタイプでないファイル(例:/dev/zeroなどのデバイス)でもエントロピーを計算しません。
その後、MD5、SHA1、SHA256、SHA512ハッシュを計算します。それぞれファイル全体を処理する必要があります。最近のシステムでは妥当な速度ですが、非常に大規模なファイルシステムをクロールする場合は完了までに時間がかかることがあります。
プログラムにELFファイルのみをチェックするように指示した場合、ELFタイプでない限りエントロピー/ハッシュ計算は行われず、大幅な時間短縮になります(例:実行可能でない巨大なデータベースファイルを無視します)。
このプログラムを自動化する場合、特に必要でなければルートファイルシステム全体をクロールしない方が良いでしょう。対象を絞ったアプローチの方が速く、スポットチェックに有用です。また、ELFフラグを使用することで、実行可能ファイルタイプのみを処理するため検索時間が大幅に短縮されます。
インシデントレスポンダーにとって、sandfly-entropyscanをトップレベルの「/」ディレクトリ全体に対して実行することは、調査すべきパックされた候補のリストを迅速に取得するために良いアイデアかもしれません。これによりCPUとディスクI/Oが急増します。しかし、管理者が気づくまでにボックスが598時間も暗号通貨マイニングを行っていた場合、おそらくその時点では気にしないでしょう。
繰り返しになりますが、ELFフラグを使用して問題の候補となる実行可能ファイルに絞り込み、ノイズを無視してください。
scripts/testfiles.shというスクリプトがあり、2つのファイルを作成します。1つはランダムデータで満たされ、もう1つは全くランダムではありません。スクリプトを実行するとファイルが作成され、sandfly-entropyscanが実行可能検出モードで実行されます。2つのファイルが表示されるはずです。1つは非常に高いエントロピー(8.0またはその付近)、もう1つは非ランダムデータでエントロピーが0.00の低エントロピーです。例:
./testfiles.sh
Creating high entropy random executable-like file in current directory.
Creating low entropy executable-like file in current directory.
high.entropy.test, entropy: 8.00, elf: true
low.entropy.test, entropy: 0.00, elf: true
また、upxユーティリティをロードして実行可能ファイルを圧縮し、返される値を確認することもできます。
Sandfly Securityは、Linux向けのエージェントレスのエンドポイント検出およびインシデントレスポンスプラットフォーム(EDR)を提供しています。自動化されたエントロピーチェックは、Linuxエンドポイントにソフトウェアをインストールせずに侵入者を発見するために当社が検索する数千もの項目の1つにすぎません。
無料ライセンスを取得し、詳細を以下でご確認ください:
https://www.sandflysecurity.com @SandflySecurity