【おーえすこまんどいんじぇくしょん】

OSコマンドインジェクション とは?

💡 入力欄から「サーバーの操縦席」に乗り込む攻撃
📌 このページのポイント
正常な入力 vs 悪意ある入力 ✓ 正常な入力 ファイル名→ report.pdf cat /files/report.pdf PDFが正常に表示される ✗ 悪意ある入力 ; rm -rf / --no-preserve cat /files/; rm -rf / ↑ 2つのコマンドが実行 サーバーのファイル全削除 「;」「|」「&&」でコマンド連結 → 入力値の検証が必須
OSコマンドインジェクションのイメージ
ひよこ ひよこ

OSコマンドインジェクションって、SQLインジェクションの仲間?

ペンギン先生 ペンギン先生

考え方は似ているよ。SQLインジェクションデータベースを狙うのに対して、OSコマンドインジェクションはサーバーのOSそのものを狙うんだ。被害の深刻度はさらに高いことが多いね

ひよこ ひよこ

具体的にはどうやって攻撃するの?

ペンギン先生 ペンギン先生

たとえばファイル名を入力するフォームに「report.pdf; rm -rf /」と入れると、セミコロン以降が別のコマンドとして実行されてしまうんだよ

ひよこ ひよこ

えっ、そんな簡単に!?

ペンギン先生 ペンギン先生

プログラムが入力値をそのままシェルに渡している場合はね。「;」「|」「&&」などのメタ文字で複数コマンドを連結できてしまうんだ

ひよこ ひよこ

どうやって防ぐの?

ペンギン先生 ペンギン先生

一番いいのはOSコマンドを直接呼ばない設計にすることだね。どうしても必要な場合は、入力値をホワイトリストで厳しく検証して、シェルを介さずにコマンドを実行する方法を使うんだよ

ひよこ ひよこ

実際に大きな被害が出た事例ってあるの?

ペンギン先生 ペンギン先生

有名なのはShellshock(2014年)だね。Bash脆弱性を突いてWebサーバー経由でOSコマンドを実行できてしまい、世界中のサーバーが影響を受けたんだ。OWASP Top 10にも常連の、非常に危険な脆弱性だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「OSコマンドインジェクション」って出てきたら「Webの入力欄からサーバーのコマンドを不正実行する攻撃」と思えればだいたいOK!
📖 おまけ:英語の意味
「OS Command Injection」 = OSコマンド注入
💬 injection は「注入」の意味。Webアプリの入力欄という「注射口」からOSコマンドを注ぎ込む攻撃だよ
← 用語集にもどる