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

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

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

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

ツールディレクトリ

カテゴリ

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

sandsifter

x86プロセッサファザー

リポジトリを見る
5.1k3558年前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でシフターに、-- -fでインジェクターに渡されます。

例:

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

シフターフラグ:

root@kitploit:~
--len
	すべての命令の長さの違いを検索(逆アセンブラが期待したのと異なる実行をした命令、または逆アセンブラが期待した時点で存在しなかった命令)

--dis
	有効な命令の長さの違いを検索(逆アセンブラが期待したのと異なる実行をした命令)

--unk
	未知の命令を検索(逆アセンブラが認識していないが正常に実行される命令)

--ill
	--unkの逆で、無効な逆アセンブリを検索(正常に実行されないが逆アセンブラが認識している命令)

--tick
	現在の命令を定期的にディスクに書き込む

--save
	終了時に検索の進行状況を保存

--resume
	最後に保存した状態から検索を再開

--sync
	検索結果が見つかったらすぐにディスクに書き込む

--low-mem
	結果をメモリに保存しない

インジェクターフラグ:

root@kitploit:~
-b
	モード:ブルートフォース

-r
	モード:ランダムファジング

-t
	モード:トンネルファジング

-d
	モード:外部指向ファジング

-R
	生出力モード

-T
	テキスト出力モード

-x
	定期的な進行状況をstderrに書き込む

-0
	null参照を許可(sudoが必要)

-D
	重複プレフィックスを許可

-N
	NXビットサポートなし

-s seed
	ランダム検索におけるシード値

-B brute_depth
	ブルートフォース検索における最大検索深度

-P max_prefix
	検索する最大プレフィックス数

-i instruction
	検索を開始する命令(含む)

-e instruction
	検索を終了する命令(含まない)

-c core
	検索を実行するコア

-X blacklist
	指定された命令をブラックリストに追加

-j jobs
	同時に実行するジョブの数

-l range_bytes
	各サブ範囲の基本命令バイト数

キー

m: モード - シフターの検索モードを変更(ブルートフォース、ランダム、またはトンネル)

q: 終了 - シフターを終了

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

アルゴリズム

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

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

ヒント

  • sudo

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

  • プレフィックス

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

  • カラー

    シフターのインターフェースは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フラグを、インジェクターに-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ビットの命令空間を探索できます。