
Stringsifterは、マルウェア分析との関連性に基づいて文字列を自動的にランク付けする機械学習ツールです。
Stringsifterには、Pythonバージョン3.9以降が必要です。次のコマンドを実行して、コードを取得し、ユニットテストを実行し、ツールを使用します。
pip install stringsifter開発のために、詩を使用してください。
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with devStringsifterインストールディレクトリからユニットテストを実行するには:
poetry run tests -vpip installコマンドは、2つの実行可能なスクリプトflarestringsとrank_strings Python環境にインストールします。ソースから開発するときは、 pipenv run flarestringsとpipenv run rank_strings使用します。
flarestrings 、Gnu Binutilsのstringsの特徴を模倣し、 rank_stringsパイプされた入力を受け入れます。
flarestrings < my_sample > | rank_strings rank_strings 、多くのコマンドライン引数をサポートしています。ポジション引数input_strings 、ランク付けする文字列のファイルを指定します。オプションの引数は次のとおりです。
| オプション | 意味 |
|---|---|
| - スコア(-s) | 出力にランクスコアを含めます |
| -limit(-l) | 制限出力は、 limitランクの文字列になります |
| - マインスコア(-m) | スコアのある文字列に出力を制限> = min-score |
| - バッチ(-b) | バッチ処理用のstrings出力のフォルダーを指定します |
ランク付けされた文字列は、 --batchオプションが指定されていない限り標準出力に書き込まれ、ランク付けされた出力は<input_file>.ranked_stringsという名前のファイルに書き込まれます。
flarestrings 、デフォルトの4ではなく、少なくともmin-len文字の文字のシーケンスを印刷するオプション-n (または--min-len )をサポートします。
flarestrings -n 8 < my_sample > | rank_strings長さ8以上の文字列のみを印刷してランク付けします。
docker build -t stringsifter -f docker/Dockerfile .flarestringsまたはrank_strings引数を使用してコンテナを実行します。コンテナ化されたコマンドは、パイプラインで使用できます。 cat < my_sample > | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings-vフラグを使用してホストディレクトリをコンテナに公開するために、シェルプロンプトを取得するために引数なしでコンテナを実行します。 docker run -v < my_malware > :/samples -it stringsifterたとえば、 <my_malware>に分析用のサンプルが含まれています。
docker run -v $HOME /malware/binaries:/samples -it stringsifterflarestrings /samples/ < my_sample > | rank_strings < options >すべてのコマンドライン引数は、コンテナ化されたスクリプトでサポートされています。
弦楽器は、文字列の任意のリストに適用でき、ライブメモリダンプ、サンドボックスラン、および難読化された文字列を含むバイナリなどの代替インテリジェンス収集ソースから洞察を収集しようとする実務家にとって有用です。たとえば、Fireeye Labsは文字列ソルバー(Floss)を抽出しますが、弦と同様に印刷可能な文字列を抽出しますが、さらに、スタックにエンコード、梱包、または手動で構築された難読化された文字列が明らかになります。文字列のインライン代替品として使用できます。つまり、弦楽器は次のコマンドを使用してフロス出力で同様に呼び出すことができます。
$PY2_VENV /bin/floss –q < options > < my_sample > | rank_strings < options >注:
–q引数は、ヘッダーとフォーマットを抑制して、抽出された文字列のみを表示します。追加のフロスオプションの詳細については、その使用ドキュメントをご覧ください。flossまたはrank_stringsの少なくとも1つがPython仮想環境を参照する相対パスを含める必要があります。stringsに関するメモこの分布には、プラットフォーム全体で予測可能な出力を確保するためのflarestringsプログラムが含まれています。システムのインストールされているstringsを実行することを選択した場合、そのオプションはバージョンやプラットフォーム間で一貫していないことに注意してください。
ほとんどのLinux分布には、Gnu Binutilsのstringsプログラムが含まれます。 「広い」文字列と「狭い」文字列の両方を抽出するには、プログラムを2回実行する必要があります。
strings < my_sample > > strs.txt # narrow strings
strings -el < my_sample > >> strs.txt # wide strings. note the ">>" macOSでパッケージ化されたBSD stringsの一部のバージョンは、広い弦をサポートしていません。また、ファイル全体をスキャンする文字列の-aオプションは、デフォルトの構成で無効になる場合があることに注意してください。 -aがない場合は、有益な文字列が失われる可能性があります。 HomebrewまたはMacPortsを介してGNU Binutilsをインストールして、幅広いキャラクターをサポートするstringsのバージョンを入手することをお勧めします。ケアを使用して、正しいバージョンのstringsを呼び出します。
strings 、デフォルトでWindowsにインストールされていません。 Windows Sysinternals、Cygwin、またはMalcode Analyst Packをインストールして、作業stringsを取得することをお勧めします。
このバージョンのStringsifterは、最初のEmberデータセットに関連付けられたサンプリングされたマルウェアバイナリからの文字列出力を使用してトレーニングされました。順序ラベルは、弱い監督手順を使用して生成され、監視された学習は、ランクトゥランク目的関数を備えた勾配ブースト決定ツリーによって実行されます。詳細な詳細については、クイックリンクを参照してください。将来のリリースでこのアプローチを再考する場合がありますが、ラベル付きデータもトレーニングコードも現在利用できないことに注意してください。
Githubの問題を使用して、バグと機能リクエストを投稿します。
flarestringsは、優れたツールフロスから派生しています。