Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
sandsifter — x86プロセッサファザー | Kitploit
ツール/GitHubGitHub/battelle/sandsifter
脆弱性分析リバースエンジニアリングファジングハードウェアセキュリティバイナリ解析論文と研究学習と教育
GitHubbattelle/sandsifter

sandsifter

x86プロセッサファザー

リポジトリを見る
5314128年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

s a n d s i f t e r

: x86プロセッサファザー

概要

sandsifterは、プロセッサの命令セットを検索するためのマシンコードを体系的に生成し、実行時の異常を監視することで、x86プロセッサの隠し命令やハードウェアバグを監査します。sandsifterは、主要なすべてのベンダーの秘密のプロセッサ命令、逆アセンブラ・アセンブラ・エミュレータにおける広範なソフトウェアバグ、エンタープライズハイパーバイザーの欠陥、そしてx86チップにおける良性およびセキュリティ上重大なハードウェアバグの両方を発見してきました。

多数のx86プロセッサが存在する中で、このツールの目的は、ユーザーが自分のシステムに隠し命令やバグがないかを確認できるようにすることです。

プロセッサに対する基本的な監査を実行するには:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

demo_sandsifter

コンピュータは、異常な命令がないか体系的にスキャンされます。上半分には、sandsifterが現在プロセッサ上でテストしている命令が表示されます。下半分には、sandsifterが見つけた異常が報告されます。

検索には、プロセッサの速度と複雑さに応じて、数時間から数日かかります。完了したら、結果を要約します:

root@kitploit:~
./summarize.py data/log

demo_summarizer

通常、プロセッサ上で数百万の未公開命令が見つかりますが、これらは一般的に少数の異なるグループに分類されます。異常をビニングした後、summarizeツールは各命令を問題カテゴリに割り当てようとします:

  • ソフトウェアバグ(例: ハイパーバイザーや逆アセンブラのバグ)、
  • ハードウェアバグ(CPUのバグ)、または
  • 未公開命令(プロセッサには存在するが、製造元によって認識されていない命令)

'Q'を押すと終了し、システムスキャンのテキストベースの要約を取得できます:

スキャンの結果は、ツールが自動的に分類するのが難しい場合があり、手動での分析が必要になることがあります。結果の分析についての支援が必要な場合は、./data/logファイルを[email protected]に送信してください。このログには、プロセッサの製造元、モデル、リビジョン(/proc/cpuinfoから取得)以外の個人情報は含まれません。

結果

sandsifterでのスキャンにより、数十のオペコードカテゴリにわたる未公開のプロセッサ機能、エンタープライズハイパーバイザーの欠陥、ほぼすべての主要な逆アセンブリおよびエミュレーションツールのバグ、そしてプロセッサ自体にセキュリティ上の脆弱性をもたらす重大なハードウェアバグが発見されました。

結果の詳細は、プロジェクトのホワイトペーパーに記載されています。

(TODO: ここに詳細な結果の列挙)

ビルド

sandsifterは、最初にCapstone逆アセンブラのインストールが必要です: http://www.capstone-engine.org/。Capstoneは通常、次のようにインストールできます:

root@kitploit:~
sudo apt-get install libcapstone3 libcapstone-dev
sudo pip install capstone

sandsifterは次のようにビルドできます:

root@kitploit:~
make

その後、次のように実行します

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

フラグ

フラグは、--flagでsifterに渡され、-- -fでインジェクタに渡されます。

例:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

sifterフラグ:

root@kitploit:~
--len
	search for length differences in all instructions (instructions that
	executed differently than the disassembler expected, or did not
	exist when the disassembler expected them to

--dis
	search for length differences in valid instructions (instructions that
	executed differently than the disassembler expected)

--unk
	search for unknown instructions (instructions that the disassembler doesn't
	know about but successfully execute)

--ill
	the inverse of --unk, search for invalid disassemblies (instructions that do
	not successfully execute but that the disassembler acknowledges)

--tick
	periodically write the current instruction to disk

--save
	save search progress on exit

--resume
	resume search from last saved state

--sync
	write search results to disk as they are found

--low-mem
	do not store results in memory

インジェクタフラグ:

root@kitploit:~
-b
	mode: brute force

-r
	mode: randomized fuzzing

-t
	mode: tunneled fuzzing

-d
	mode: externally directed fuzzing

-R
	raw output mode

-T
	text output mode

-x
	write periodic progress to stderr

-0
	allow null dereference (requires sudo)

-D
	allow duplicate prefixes

-N
	no nx bit support

-s seed
	in random search, seed value

-B brute_depth
	in brute search, maximum search depth

-P max_prefix
	maximum number of prefixes to search

-i instruction
	instruction at which to start search (inclusive)

-e instruction
	instruction at which to end search (exclusive)

-c core
	core on which to perform search

-X blacklist
	blacklist the specified instruction

-j jobs
	number of simultaneous jobs to run

-l range_bytes
	number of base instruction bytes in each sub range

キー

m: モード - sifterの検索モード(ブルートフォース、ランダム、トンネル)を変更します

q: 終了 - sifterを終了します

p: 一時停止 - 検索を一時停止または再開します

アルゴリズム

スキャンは4つの異なる検索アルゴリズムをサポートしており、コマンドラインで設定するか、ホットキーで切り替えることができます。

  • ランダム検索は、テストするランダムな命令を生成します。一般的に迅速に結果が得られますが、複雑な隠し命令やバグを見つけることはできません。
  • ブルートフォース検索は、ユーザー指定の長さまで命令を段階的に試行します。ほとんどすべての状況で、ランダム検索よりも性能が劣ります。
  • ドリブン(突然変異駆動)検索は、遺伝的アルゴリズムを通じて新しく、ますます複雑な命令を作成するように設計されています。有望ではありますが、このアプローチは完全には実現されず、将来の研究のためのスタブとして残されています。
  • トンネリングは、プレゼンテーションとホワイトペーパーで説明されているアプローチであり、ほとんどすべての場合において、網羅性と速度の最良のトレードオフを提供します。

ヒント

  • sudo

    最良の結果を得るには、ツールをrootユーザーとして実行する必要があります。これは、プロセスがアドレス0のページをメモリにマップできるようにするために必要であり、root権限が必要です。このページにより、多くの命令がメモリアクセス時にセグメンテーションフォルトを発生するのを防ぎ、より正確なフォールト分析が可能になります。

  • プレフィックス

    命令検索の深さの主な制限は、探索するプレフィックスバイトの数です。プレフィックスバイトが1つ増えるごとに、検索空間は約10倍に増加します。プレフィックスバイトは-Pフラグで制限します。

  • 色

    sifterのインターフェースは256色ターミナル向けに設計されています。詳細はターミナルによって大きく異なりますが、おおよそ次のように設定できます:

    root@kitploit:~
    export TERM='xterm-256color'
    
  • GUI

    インターフェースは、ターミナルが少なくとも一定のサイズであることを前提としています。インターフェースが正しくレンダリングされない場合は、ターミナルのサイズを大きくしてみてください。これは多くの場合、ターミナルのフォントサイズを小さくすることで実現できます。

    場合によっては、グラフィカルなフロントエンドなしでツールを実行することが望ましい、または必要になることがあります。これは、インジェクタを直接実行することで行えます:

    root@kitploit:~
    sudo ./injector -P1 -t -0
    

    直接のインジェクタ呼び出しの結果をフィルタリングするには、grepを使用できます。例えば、

    root@kitploit:~
    sudo ./injector -P1 -r -0 | grep '\.r' | grep -v sigill
    

    これは、プロセッサと逆アセンブラが命令長について一致しなかった(grep '.r')が、命令が正常に実行された(grep -v sigill)命令を検索します。

  • ターゲットを絞ったファジング

    多くの場合、ファザーを特定のターゲットに指向させることが有益です。例えば、エミュレータに繰り返しの'lock'プレフィックス(0xf0)に関する欠陥があると疑われる場合、-iフラグと-eフラグを使用して、ファザーにこの命令空間の領域を検索させることができます:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick -- -t -i f0f0 -e f0f1 -D -P15
    
  • レガシーシステム

    はるかに古いシステム(i586クラスのプロセッサ、低メモリシステム)をスキャンするには、--low-memフラグをsifterに、-Nフラグをインジェクタに渡します:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick --low-mem -- -P1 -t -N
    

    スキャンの完了が速すぎる場合(例えば、スキャンが数秒で完了する場合)、これは通常、スキャン対象のプロセッサにこれらのフラグが必要であることを示しています。

  • 32ビット vs. 64ビット

    デフォルトでは、sandsifterはホストオペレーティングシステムのビット数を対象としてビルドされます。ただし、一部の命令は、32ビットプロセスで実行した場合と64ビットプロセスで実行した場合で動作が異なります。これらのシナリオを調査するには、64ビットシステム上で32ビットのsandsifterを実行することが有益な場合があります。

    64ビットシステム上で32ビットのsandsifterをビルドするには、Capstoneを32ビットとしてインストールする必要があります。これに関する手順は、 にあります。

参考文献

  • 技術と結果の考察は、Black Hatのプレゼンテーションにあります。
  • 技術的な詳細はホワイトペーパーに記載されています。
  • Black Hatプレゼンテーションのスライドはこちらです。

著者

sandsifterは、Christopher Domas(@xoreaxeaxeax)による研究プロジェクトです。

ツールをダウンロード
http://www.capstone-engine.org/

次に、sandsifterを32ビットアーキテクチャ向けにビルドする必要があります:

root@kitploit:~
make CFLAGS=-m32

これにより、64ビットシステム上で32ビットの命令空間を探索できます。