サイバー攻撃手法・脆弱性分析 重要度:★★★出題: AM2・PM1
OSコマンドインジェクション と ディレクトリトラバーサル
おーえすこまんどいんじぇくしょん / でぃれくとりとらばーさる / OS Command Injection / Path (Directory) Traversal
シェルを起動する関数に外部入力値を渡して任意のOSコマンドを実行させる攻撃と、相対パス(../)を入力して公開ディレクトリ外の機密ファイルを読み書きさせる攻撃。
3行速習ポイント
- OSコマンドインジェクション対策:シェルを起動できる関数(system, exec等)を使用せず、言語標準ライブラリAPIやシェルを介さない配列引数指定(execFile等)を使用する
- ディレクトリトラバーサル対策:外部からファイル名を直接指定させない設計、またはパス名からベース名のみを抽出(basename)・正規化後に許可ディレクトリ配下かを検証する
- 万一突破された場合の被害極小化として、Webアプリケーション実行プロセスのOS権限を最小化し、chrootやコンテナでアクセス可能範囲を隔離する
図解
図OSコマンドインジェクション と ディレクトリトラバーサルの根本対策
OSコマンドインジェクション対策シェル起動の排除
シェルを起動する関数(system / exec等)を使用しない
言語標準のライブラリAPIで代替するか、シェルを介さず引数配列を直接渡す関数(execFile等)を使用し、セミコロンやパイプ等のシェルメタ文字解釈を根絶
ディレクトリトラバーサル対策パス正規化と制限
ファイル名直接指定の廃止・basename抽出・正規化後パス検証
固定IDとファイル名の対応表を用いるか、パスからファイル名のみを抽出(basename)・絶対パス正規化(realpath)後に公開ディレクトリ配下かを前方一致検証
💡 ブラックリストによる「;」や「../」の文字列削除は「....//」やエンコードで容易に突破されるため、必ず下記アプローチを採る
概要と本質
どちらもサーバの乗っ取りや設定ファイル(/etc/passwd や .env、秘密鍵ファイル)の窃取に直結する危険度の高い脆弱性です。ブラックリスト方式(セミコロンや「../」の文字列削除)はエンコードや二重指定(....//)で容易にバイパスされるため、安全なAPIの利用とホワイトリスト検証が鉄則です。
重要ポイント・コア概念
- シェルメタ文字の危険性:; | & $() `` などの記号がシェルに解釈されると、本来のコマンドに続けて任意の外部通信やリバースシェルが実行される
- パスの正規化(Canonicalization):シンボリックリンクや相対パスを解決した絶対パス(realpath)を取得した上で、公開ベースディレクトリの前方一致を検証
- ファイルアップロード脆弱性との複合:任意の拡張子(.phpや.jsp)やパスでWeb公開領域にファイルを書き込まれるとWebシェル設置による遠隔操作(RCE)に至る
午後記述・情報セキュリティ対策での攻略ポイント
午後試験のセキュアプログラミング問題で頻出。「ブラックリストで『../』を除去する処理がなぜ『....//』で突破されるのか」「シェルを起動する関数を使わない根本対策」を正確に記述できるようにしましょう。
午後記述で使える加点キーワード(クリックでコピー)
関連する重要用語
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着情報処理安全確保支援士 過去問演習で実践力を鍛える