Inhaleは、多くの静的解析操作を自動化およびスケーリングできるマルウェア分析および分類ツールです。
これはベータリリース版であり、テスト目的、フィードバック、コミュニティ開発のためのものです。
Inhaleは、私が多様なソースから大量のマルウェアを収集・分析する際に使用した一連の小さなスクリプトから始まりました。 同様の作業を行うフレームワークやツールは多数ありますが、大量のファイルに関する情報を迅速に見つけ、分類し、保存するという私のワークフローに本当に合うものはありませんでした。また、高額なAPIキーや費用のかかるサービスを必要とするものもあります。
これらのスクリプトを、研究サーバー、ラップトップ、Raspberry Piのような低コストのコンピューターのいずれで実行する場合でも、人々がすぐにセットアップして使用できるものにしました。
このツールは、Python3、ElasticSearch、radare2、yara、binwalkを使用してLinux上で動作するように構築されています。データベースからの出力を整形表示するためにjqも必要です。以下に基本的なインストール手順を示します。
config.ymlファイルには実際にはまだ設定されていない項目がたくさんあります。このドキュメントで特に指示がない限り、そのままにしておいてください。
必要条件のインストール
python3 -m pip install -r requirements.txt
Inhaleを使用するためにデータベースは必須ではありませんが、設定したい場合は、以下の手順に従い、config.ymlのオプション"enable_database"をTrueに設定してください。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo service elasticsearch start
手動でインストールするには、このドキュメントに従ってください。
さらに、可視化およびデータ分析のために完全なELKスタックをセットアップすることもできます。このツールを使用するために必須ではありません。
radare2はパッケージマネージャーではなく、リポジトリからインストールすることが重要です。パッケージマネージャーのバージョンには、inhaleに必要なすべての機能が含まれていません。
git clone https://github.com/radare/radare2
cd radare2
sys/install.sh
sudo apt-get install automake libtool make gcc
wget https://github.com/VirusTotal/yara/archive/v3.10.0.tar.gz
tar xvzf v3.10.0.tar.gz
cd yara-3.10.0/
./bootstrap.sh
./configure
make
sudo make install
共有オブジェクトに関するエラーが発生した場合は、次のコマンドを試して修正してください。
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig
binwalkはリポジトリから単純にインストールするのが最善です。
git clone https://github.com/ReFirmLabs/binwalk
cd binwalk
sudo python3 setup.py install
binwalkの追加機能のインストールに関する詳細はこちらにあります。
これはマルウェアファミリー分析のためにELFファイルのセクションをハッシュ化するライブラリです。telfhashはtlshに依存しているため、両方のインストール手順は次のとおりです。
tlshのセットアップ
git clone https://github.com/trendmicro/tlsh
cd tlsh
./make.sh
cd py_ext/
python3 ./setup.py build
sudo python3 ./setup.py install
telfhashのセットアップ
git clone https://github.com/trendmicro/telfhash
cd telfhash
sudo python3 setup.py install
inhaleの出力を共有するためにウェブサーバーを使用したい場合は、config.ymlの変数を適切なパスに設定し、ディレクトリが存在することを確認してください!
web:
gen_html: False
webdir: "/var/www/html/" # 実際のウェブディレクトリ
fqdn: "http://threat.land" # あなたのウェブサイト
in_path: "/var/www/html/inhaled/" # inhaleの出力へのパス
ex_path: "/var/www/html/exhaled/" # DBクエリキャッシュ出力へのパス
HTML出力を使用するには、次のようにinhaleを実行します:
python3 inhale.py [すべての引数] --html
スクレイピングするファイルをタイプで指定します:
-f INFILE 単一ファイルを分析
-d DIRECTORY ファイルのディレクトリを分析
-u URLFILE リモートファイル(URL)を分析
-r RDIRECTORY リモートディレクトリ(URL)を分析
-l URLLIST テキストファイル内のURLリストを分析
その他のオプション:
-t TAGS 出力に追加タグを追加
-b binwalkシグネチャをオフにする
-y YARARULES カスタムYaraルールを指定
-o OUTDIR スクレイピングしたファイルを特定の出力ディレクトリに保存(デフォルト: ./files/<日付>/)
-i 情報を表示するだけで、データベースにファイルを追加しない
--html 出力をhtmlとしてwebdirに保存
inhale.pyを実行すると、指定されたファイル/ディレクトリ/URLに対してすべての分析が実行され、ターミナルに出力されます。
/bin/lsの情報を表示するが、データベースには追加しない
python3 inhale.py -f /bin/ls -i
ディレクトリ'malwarez'をデータベースに追加
python3 inhale.py -d malwarez/
このファイルをダウンロードしてデータベースに追加
python3 inhale.py -u https://thugcrowd.com/chal/skull
このリモートディレクトリ内のすべてをダウンロードし、すべてに"phishing"タグを付ける:
python3 inhale.py -r http://someurl.com/opendir/ -t phishing
プロのヒント:興味深いオープンディレクトリ(マルウェアを含む可能性あり)を見つけるには、このTwitterハッシュタグ検索を使用してください。自己責任で使用してください。
-yを使用して独自のyaraルールを渡すことができます。これは大規模な進行中の作業であり、"YaraRules"のほとんどは https://github.com/kevthehermit/PasteHunter/tree/master/YaraRules からのものです。@KevTheHermitに感謝します。
db.shを使用してクエリを実行します(近いうちに素敵なスクリプトになります)
db.sh *something* | jq .
以下はelasticsearchデータベースで使用される現在のデータモデルです。これらのすべてがすべてのファイルに使用されるわけではありません。r2_*タグは通常、何らかのバイナリ用に予約されています。
このプロジェクトには既知の問題がいくつかあります(主にパッケージマネージャーからのバージョンに関するもの)。ここでは、解決策があるものについて追跡します。
次のようなエラーが発生した場合:
elasticsearch.exceptions.RequestError: RequestError(400, 'illegal_argument_exception', 'Limit of total fields [1000] in index [inhaled] has been exceeded')
elasticSearchの古いバージョンを使用している可能性があります。アップグレードするか、次のワンライナーでフィールド制限を増やすことができます。
curl -XPUT 'localhost:9200/inhaled/_settings' -H 'Content-Type: application/json' -d'{ "index" : { "mapping" : { "total_fields" : { "limit" : "100000" }}}}'
PRは歓迎します!特定のフィードバックがある場合は、Twitterで@netspookyにDMを送ることもできます。
このツールのテストを手伝ってくれた皆さんに感謝します。また、コードの初期整理を行い、少しきれいにしてくれたPlazmazにも感謝します。
グリーティング:hermit, plazmaz, nux, x0, dustyfresh, aneilan, sshell, readme, dnz, notdan, rqu, specters, nullcookies、ThugCrowd、およびThreatLandとTC Safari Zoneに関わるすべての人に。
| Name | Description |
|---|
| filename | バイナリの完全なパス |
| file_ext | ファイル拡張子 |
| filesize | ファイルサイズ |
| filetype | マジック値に基づくファイルタイプ。binwalkシグネチャほど信頼性は高くありません。 |
| md5 | ファイルのMD5ハッシュ |
| sha1 | ファイルのSHA1ハッシュ |
| sha256 | ファイルのSHA256ハッシュ |
| added | ファイルが追加された日付 |
| r2_arch | バイナリファイルのアーキテクチャ |
| r2_baddr | バイナリのベースアドレス |
| r2_binsz | プログラムコードのサイズ |
| r2_bits | アーキテクチャのビット数 - 8/16/32/64など |
| r2_canary | スタックカナリアが有効かどうか |
| r2_class | バイナリクラス |
| r2_compiled | バイナリがコンパイルされた日付 |
| r2_dbg_file | バイナリのデバッグファイル |
| r2_intrp | 動的リンクの場合にバイナリが呼び出すインタプリタ |
| r2_lang | ソースコードの言語 |
| r2_lsyms | デバッグシンボルがあるかどうか |
| r2_machine | マシンタイプ。通常はバイナリが対象とするCPU |
| r2_os | マシンが動作するOS |
| r2_pic | 位置独立コードがあるかどうか |
| r2_relocs | 再配置があるかどうか |
| r2_rpath | ランタイム検索パス(該当する場合) |
| r2_stripped | バイナリがストリップされているかどうか |
| r2_subsys | バイナリのサブシステム |
| r2_format | バイナリフォーマット |
| r2_iorw | ioctl呼び出しが存在するかどうか |
| r2_type | バイナリタイプ。実行可能ファイル、共有オブジェクトなど |
| yara | yaraマッチのリストを含む |
| binwalk | binwalkシグネチャとそのバイナリ内の位置のリストを含む |
| tags | -tフラグで渡されたユーザー定義のタグ |
| url | ファイルがリモートダウンロードされた場合のオリジンURL |
| urls | バイナリから抽出されたすべてのURL |