
gimphash は、Go バイナリ向けの imphash 相当値を計算するための提案手法です。その名前は Go-import-hash に由来します。
Golang バイナリは、依存関係を実行可能ファイルの一部として含んでいます。これらの依存関係には標準ライブラリのパッケージとサードパーティの依存関係の両方が含まれ、従来の imphash と同様に、Golang プロジェクトを識別するために使用できます。
依存関係は、各 Golang バイナリに含まれる pclntab を使用して列挙できます (Mandiant によるこのブログ記事も参照してください)。pclntab にはリバースエンジニアリングにとって興味深い要素が多数含まれていますが、gimphash ではそこに含まれる関数名を使用します。
go. または type. で始まる関数名を無視する (コンパイル成果物、ランタイム内部)vendor/ が含まれる場合、その部分文字列とそれより前をすべて破棄する
(例: vendor/golang.org/x/text を golang.org/x/text に変換)internal/ を含む関数名を無視するruntimesyncsyscalltypetimeunicodereflectstrconv/ を探す。/ が見つからない場合は、代わりに先頭を使用する。その位置から開始して、次の . を探す。. より後を ベース関数名 として抽出する。. が見つからない場合は、前のステップで計算した / のインデックスより後をすべて使用する。. が存在する場合、その . の後の最初の英数字が小文字のときは、その関数を無視する。このリポジトリには、以下の言語による概念実証コードが含まれています:
リリース セクションには、Windows と Linux 向けのビルド済みバイナリが含まれています。
単一のファイルに対して Gimphash 計算機を実行する
./c_gimphash_linux /mnt/malware-repo/Godoh/godoh-windows64.exe
8200e76e42c4e9cf2bb308d76c017cbdcde5cbbf95e99e02b14d05e7b21505f3 /mnt/mal/Godoh/godoh-windows64.exe
マルウェアリポジトリに対して Gimphash 計算機を実行する
find /mnt/malware-repo/ -type f -exec ./go_gimphash_linux {} \; 2>/dev/null
...
