
YARAと正規表現のマッチ結果を、バイナリデータとテキストデータの両方で色をふんだんに使って視覚的に検査し、強制的にデコードします。

バイナリデータやテキスト内で見つかったすべての正規表現マッチ(およびそのセクシーでより秘密めいた親戚、YARA マッチ)を視覚的に検査します。それらのマッチしたバイトに様々な文字エンコーディングを強制した場合に何が起こるかを確認できます。色付きで。
pipx install yaralyzer
# ファイル内のYARA定義に対してスキャン:
yaralyze --yara-rules /secret/vault/sigmunds_malware_rules.yara lacan_buys_the_dip.pdf
# 任意の正規表現に対してスキャン:
yaralyze --regex-pattern 'good and evil.*of\s+\w+byte' --regex-modifier wide the_crypto_archipelago.exe
# 任意のYARA hexパターンに対してスキャン
yaralyze --hex-pattern 'd0 93 d0 a3 d0 [-] 9b d0 90 d0 93' one_day_in_the_life_of_ivan_cryptosovich.bin
'/.+/' をスキャンすることで、ファイル内でスラッシュで囲まれたすべてのバイトをすぐに把握できます。同様に引用符、BOMなどにも対応。YARAが扱える正規表現なら何でもサポートするので、可能性は無限大です。chardet は文字エンコーディングを推測するための洗練されたライブラリで、ここで活用されています。chardet を活用して、バイトが何らかの既知のエンコーディングのパターンに合致するかどうかを確認します。chardet の信頼度が十分高い場合(設定可能)、そのエンコーディングを使ってバイトをデコードした結果が表示されます。Yaralyzerの機能はPdfalyzerから抽出されました。バイナリ内のパターンマッチの可視化とデコードがPDF解析ツールだけでなく、より広いユーティリティを持つことが明らかになったためです。
YARAは、知らない方のために説明すると1、マルウェア分析/警告ツールとしてブランド化されていますが、実際にはそれ以上でもそれ以下でもあります。一つの考え方として、YARAは強化された正規表現マッチングエンジンです。バイナリ内で正規表現のマッチを他の正規表現エンジンと同じように見つけることができますが、さらに驚くべきこともできます。例えば、正規表現を論理的にグループ化したり、バイナリの256通りのXORバージョンすべてに対して正規表現を比較したり、パターンのbase64やその他のエンコーディングをチェックしたりなどです。そして最も重要なのは、YARAが標準のテキストベースのフォーマットを提供しており、人々が「ロイド化された」正規表現を世界と共有できることです。これらの機能は、特にマルウェアの分析やリバースエンジニアリングにおいて有用です。マルウェアの作者はしばしば、発見されにくくするために多大な労力を費やします。
しかし…YARAができるのはそれだけです。それ以外はすべてユーザー次第です。YARAは単なるマッチエンジンであり、何をマッチさせるか(あるいはどの文字エンコーディングでマッチできるかさえ)分からなければ、そこまでしか役に立ちません。いくつかの重要なパターンのすべてのマッチをYARAで見ようとしたとき、私は少しもどかしさを感じました。
\".+\" や \'.+\')/.+/)。スラッシュは多くの実装で正規表現の区切り文字であり、このパターンにマッチするバイトが実際に正規表現であるかどうかを調べたかったのです。YARAはバイト位置とマッチした文字列だけを教えてくれますが、それらのバイトがUTF-8、UTF-16、Latin-1など(あるいはそれ以外)なのかを教えてくれません。また、マッチしたバイト自体だけでなく、その周辺で何が起こっているのかを理解したいとも思いました。つまり、マッチしたものの直前と直後のバイトをスコープしたかったのです。
そこでYaralyzerの登場です。マッチ周辺の領域を素早くスキャンできるだけでなく、それらの領域を様々な文字エンコーディングに強制した場合の見え方も表示します。
Yaralyzerはマルウェアリバースツールではありません。CyberChefのようなツールができることはできませんし、そのようなことを目指してもいません。どちらかというと、バイナリ内の疑わしい領域を素早く視覚的に把握し、より本格的なツールで検査したい領域に絞り込むためのものです。
pipx または pip3 でインストールします。pipx は、インストールされたパッケージをローカルのPython環境から分離することが保証されるため、やや優れたソリューションです。もちろん、ローカルにPython環境がなければこの議論は無意味で、pip/pip3 で自由にインストールして構いません。
pipx install yaralyzer
yaralyze -h を実行するとコマンドラインオプションが表示されます(下のスクリーンショット)。

SVG画像、HTMLなどのエクスポートについては出力例を参照してください。
ホームディレクトリまたはカレントワーキングディレクトリに .yaralyzer というファイルを配置すると、その .yaralyzer ファイルに指定された環境変数が、yaralyzerが呼び出されるたびに環境に追加されます。これにより、さまざまなコマンドラインオプションを恒久的に設定し、毎回入力する手間を省くことができます。詳細はサンプルファイル .yaralyzer.example のコメントを参照してください。
読み込まれる .yaralyzer ファイルは1つだけで、作業ディレクトリの .yaralyzer がホームディレクトリのものより優先されます。
Yaralyzer がメインクラスです。Yaralyzer のさまざまなクラスやメソッドの自動生成ドキュメントはこちらにあります。以下のような様々な代替コンストラクタをサポートしています。
.yara ファイルからYARAルールを読み込みbytes をスキャンYaralyzerで使用される BytesMatch(re.Match オブジェクトのようなYARAマッチ用)および BytesDecoder(デコード試行の統計を追跡)オブジェクトを反復処理したい場合は、次のように行えます。
from yaralyzer.yaralyzer import Yaralyzer
yaralyzer = Yaralyzer.for_rules_files(['/secret/rule.yara'], 'lacan_buys_the_dip.pdf')
for bytes_match, bytes_decoder in yaralyzer.match_iterator():
do_stuff()
数値エラーコードを含む yara.Error が発生した場合、そのコードの意味をこちらで確認できます。
Yaralyzerは、Rich に付属するファイルエクスポート機能と(やや制限のある)プレーンテキストJSON形式を使用して、可視化結果をHTML、ANSI色付きテキスト、およびPNGおよびSVGベクター画像にエクスポートできます。
Yaralyzerから直接以下のような .png 画像をエクスポートしたい場合は、次のいずれかを行う必要があります。
brew install --cask inkscape でインストールできます)。img エクストラを指定して cairosvg をインストールする:pipx install yaralyzer[img]。また、CairoSVG実行可能ファイルを手動でインストールする必要があります。詳細は CairoSVGドキュメント を参照してください。私たちの経験では、InkscapeとCairoSVGはどちらも動作しますが、YaralyzerがレンダリングしたSVGに対してCairoSVGを使用すると、出力に不具合が見られることがあるため、Inkscapeを推奨します。


chardet.detect() があなたのバイトが特定のエンコーディング/言語である可能性についてどう考えているかを確認:
貢献は大歓迎です。環境設定やテストスイートの実行などについては CONTRIBUTING.md を参照してください。また、やるべき作業のTODOリストもあります。