超高速ペネトレーションテストスイート。
インストール · 使い方 · モジュール · ドキュメント · 貢献
高速で同時実行可能な偵察からエクスプロイトまでを1つのバイナリで。すべてのスキャナは1つのコネクションプールされたHTTPクライアントを共有します。
sifは、サブドメイン列挙、ポートスキャン、クローラー、nuclei、フレームワーク/CVE検出、JavaScriptシークレット抽出、Web脆弱性プローブ(CORS/XSS/リダイレクト)、クラウドおよび乗っ取りチェックなど、チェーン全体を1つのバイナリで実行する偵察およびエクスプロイトスキャナです。25種類以上のスキャンタイプを1つのコマンドで実行できます。
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
nucleiとcollyは外部コマンドとしてシェルアウトするのではなく、ライブラリとしてコンパイルされています(ツリー内にexec.Commandはありません)。そのため、実行時依存関係がなく、接続の手間も不要な単一の静的バイナリです。
すべてのスキャナは1つの共有HTTPクライアントとワークスティーリングワーカープールを介して実行されます。-proxy、-H、-cookie、-rate-limitは一度に全体の実行に適用され、接続はスキャン全体でプールされ再利用されます(単一ホストの実行では、50回ダイヤルする代わりに1つの接続を約50リクエストで再利用します)。また、遅いホストがあっても他のホストをブロックしません。この共有クライアントこそが、個別のツールをパイプでつなぐよりも実用的である理由です。ポートスキャンはconnect()ベースであるため、生のポートスキャンではrustscanやnmapの方が依然として高速です。
stdinからターゲットを読み取り、-silentでは1行に1つの発見を出力するため、パイプラインでの連携が可能です:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diffは再スキャンをモニターに変え、変更があったものだけを報告します。-notifyはSlack/Discord/Telegram/Webhookに投稿し、レポートはSARIFとMarkdownにエクスポートできます。
brew tap vmfunc/sif
brew install sif
お好みのAURヘルパーを使ってインストール:
yay -S sif
# または
paru -S sif
# nixpkgs(宣言的:configuration.nixまたはhome-managerに追加)
environment.systemPackages = [ pkgs.sif ];
# または命令的に
nix profile install nixpkgs#sif
# インストールせずに実行する場合
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
リポジトリにはflakeも同梱されており、ソースからビルドすることも可能:
nix run github:vmfunc/sif
curl -1sLf 'https://dl.cloudsmith.io/public/sif/deb/setup.deb.sh' | sudo -E bash
sudo apt-get install sif
最新のバイナリをリリースページから入手してください。
git clone https://github.com/vmfunc/sif.git
cd sif
make
Go 1.25以上が必要です。
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# 基本スキャン
./sif -u https://example.com
# ディレクトリファジング
./sif -u https://example.com -dirlist medium
# サブドメイン列挙
./sif -u https://example.com -dnslist medium
# ポートスキャン
./sif -u https://example.com -ports common
# JavaScriptフレームワーク検出 + クラウドの設定ミス
./sif -u https://example.com -js -c3
# Shodanホストインテリジェンス(SHODAN_API_KEY環境変数が必要)
./sif -u https://example.com -shodan
# SecurityTrailsドメイン発見(SECURITYTRAILS_API_KEY環境変数が必要)
# サブドメイン+関連ドメインを発見し、それらすべてをスキャン
./sif -u https://example.com -securitytrails -headers
# SQL偵察 + LFIスキャン
./sif -u https://example.com -sql -lfi
# Web脆弱性プローブ(CORS、オープンリダイレクト、反射型XSS)
./sif -u https://example.com -cors -redirect -xss
# フレームワーク検出(CVEルックアップ付き)
./sif -u https://example.com -framework
# 広範囲スイープ
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
すべてのオプションを表示するには ./sif -h を実行してください。
スキャンを行わずに実行するサブコマンドもいくつかあります:
# バージョンを表示(リリースビルドはスタンプ済み;ローカルビルドはgit describeを使用)
./sif version
# 最新のリリースノートを表示(-pnも可)
./sif patchnote
新しいリリースを初めて実行すると、そのリリースノートが一度だけ表示されます。SIF_NO_PATCHNOTES=1 を設定するとこれをオフにできます。
sifはモジュラーアーキテクチャを採用しています。モジュールはYAMLで定義され、ユーザーが拡張できます。
| フラグ | 説明 |
|---|---|
-dirlist | ディレクトリおよびファイルのファジング(small/medium/large) |
-mc | dirlist: マッチさせるステータスコード(カンマ区切り、例:200,301) |
-fc | dirlist: フィルタリングするステータスコード(カンマ区切り) |
-fs | dirlist: フィルタリングするボディサイズ(カンマ区切り) |
-fw | dirlist: フィルタリングするワードカウント(カンマ区切り) |
-fr | dirlist: ボディがこの正規表現にマッチする応答をフィルタリング |
-ac | ソフト404ワイルドカードベースラインの自動調整(dirlist、sql) |
-w | dirlist: カスタムワードリスト(ローカルファイルまたはURL;-dirlistサイズを上書き) |
-e | dirlist: 各ワードに追加される拡張子(カンマ区切り、例:php,bak,env) |
-dnslist | サブドメイン列挙(small/medium/large) |
-ports | ポートスキャン(common/full) |
-nuclei | nucleiテンプレートを使用した脆弱性スキャン |
-dork | 自動Google Dorking |
-js | JavaScript解析+シークレットとエンドポイント抽出 |
-c3 | クラウドストレージの設定ミス |
-headers | HTTPヘッダー解析 |
-sh | セキュリティヘッダー解析(不足/脆弱なヘッダー) |
-st | サブドメイン乗っ取り検出 |
-cms | CMS検出 |
-whois | Whoisルックアップ |
-git | 露出したGitリポジトリの検出 |
-shodan | Shodanルックアップ(SHODAN_API_KEYが必要) |
-securitytrails | ドメイン発見+ターゲット拡張(SECURITYTRAILS_API_KEYが必要) |
-sql | SQL偵察 |
-lfi | ローカルファイルインクルージョン |
-jwt | JWT発見+オフライン脆弱性分析(alg:none、弱いHMAC、exp、機密性の高いクレーム) |
-openapi | OpenAPI/Swagger仕様公開プローブ(パス+認証不要エンドポイントを列挙) |
-favicon | Faviconハッシュフィンガープリンティング(Shodanスタイルのmmh3、テクノロジーマッチ+ピボットクエリ) |
-cors | CORS設定ミスプローブ |
-redirect | オープンリダイレクトプローブ |
-xss | 反射型XSSプローブ |
-framework | CVEルックアップ付きフレームワーク検出 |
-crawl | Webクローラー(同一ホストのリンク/スクリプト/フォームをスパイダー) |
-crawl-depth | 最大クロール再帰深度(デフォルト2) |
-passive | パッシブサブドメイン/URL発見(ターゲットへのトラフィックなし) |
-probe | ライブホストプローブ(ステータス、タイトル、サーバー、リダイレクトチェーン) |
これらはすべてのスキャナが行うすべての発信リクエストに適用されます:
| フラグ | 説明 |
|---|---|
-proxy | すべてのトラフィックをプロキシ経由でルーティング(http/https/socks5 URL) |
-H, --header | 送信するカスタムヘッダー(繰り返し可能またはカンマ区切り、"Key: Value") |
-cookie | すべてのリクエストとともに送信するCookieヘッダー |
-rate-limit | 1秒あたりの最大リクエスト数(0 = 無制限、デフォルト0) |
# socks5プロキシ、カスタムヘッダー、Cookie、20 req/sの制限でスキャン
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20
ヘッダーを明示的に設定するスキャナ(例:APIキー)は、常にグローバルデフォルトよりも優先されます。
実行結果をファイルに書き出して、CI/CDやトリアージに利用できます:
| フラグ | 説明 |
|---|---|
-sarif | SARIF 2.1.0レポートをこのファイルに書き込む |
-markdown, -md | Markdownレポートをこのファイルに書き込む |
-silent | プレーン出力:クローム(進捗等)はstderrへ、各発見は1行ずつstdoutへ(パイプライン用) |
-diff | 各ターゲットの前回スナップショット以降に追加/削除された発見のみを表示 |
-store | -diff用のスナップショットディレクトリ(デフォルト:ログディレクトリ、なければ <user-config>/sif/state) |
# スキャンし、SARIFとMarkdownレポートの両方を出力
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
SARIF出力はGitHub Code Scanningで取り込めます。Markdownはターゲットごとに可読な要約です。
-diffは再スキャンをモニターに変えます:sifは各ターゲットの正規化された発見をJSONファイルにスナップショットし、次回の実行ではそのスナップショットに対する差分(+ new / - gone)のみを報告し、スナップショットを上書きします。最初の実行時はベースラインがないため、すべてが+ newになります。スナップショットは-storeに保存されます(ターゲットごとにサニタイズされたファイル)。未設定の場合はログディレクトリを再利用し、さらにない場合は<user-config>/sif/stateにフォールバックします。
# ベースライン実行、後で再スキャンして変更のみを確認
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
スナップショットは常に上書きされるため、各実行は前回の実行と差分を取ります。差分はクローム(進捗表示)であり(-silentでは通常の出力先のstderrに出力)、発見ストリームには含まれません。