
「攻撃対象領域こそが脆弱性だ。そこでバグを見つけるのは単なる詳細にすぎない。」
-- Mark Dowd
「ある詳細は、他の詳細よりも重要である。」
-- Fedor G. Pikus
脆弱性調査を容易にするための私のSemgrepルール集です。
# high priority scan (quick wins)
semgrep --severity ERROR --config "p/0xdea"
# high and medium priority scan (recommended)
semgrep --severity ERROR --severity WARNING --config "p/0xdea"
# full scan (might include marginal findings and more false positives)
semgrep --config "p/0xdea"
あるいは、このGitHubリポジトリをローカルにクローンして、次のように実行することもできます:
# full scan
semgrep --config semgrep-rules/rules /path/to/source
# specific rule scan
semgrep --config semgrep-rules/rules/c/command-injection.yaml /path/to/source
[!TIP]
--no-git-ignoreスイッチを指定すると、Gitの追跡ステータスや.gitignoreルールに関係なくファイルをスキャンできます。
よりスムーズに進めるには、Semgrepスキャン出力をSARIF形式で保存し、VS codeでSARIF Explorerを使用することをお勧めします:
semgrep --sarif --sarif-output=/path/to/source/SEMGREP.sarif --config semgrep-rules/rules /path/to/source
code /path/to/source # then open the SEMGREP.sarif file in VS code with SARIF Explorer
同梱のSARIF出力の例も参照してください。
Semgrep CLI 1.169.0でテスト済み。
実戦で検証済みのC(場合によってはC++)ルールセット。
getsの使用。strcpy、stpcpy、strcatの使用。sprintfおよびvsprintfの使用。scanfファミリーの潜在的に安全でないAPI関数の使用。strncatに渡すサイズ引数の誤り。strncpy、memcpy、snprintfおよびその亜種に渡すサイズ引数の誤り。sizeof演算子を誤って使用。strncpyおよびstpncpyの後に明示的なNUL終端がない。snprintfおよびvsnprintfの戻り値の潜在的に安全でない使用。strlcpyおよびstrlcatの戻り値の潜在的に安全でない使用。strlenの戻り値をshortにキャストすると危険な場合がある。allocaの使用。free後の潜在的な使用。free。freeを呼び出している。malloc、calloc、reallocなどの戻り値をチェックしていない。putenvを呼び出している。systemまたはpopenによる潜在的なOSコマンドインジェクション。