OSコマンド・インジェクション(安全なウェブサイトの作り方)

IPAの「安全なウェブサイトの作り方」を読み進める第1回!
この記事は上記の文書を個人的にまとめた防備録となるので注意。

セキュリティについて勉強したい人は実際に読んでみよう!

この文書の目次は以下。

1) SQL インジェクション
2) OS コマンド・インジェクション
3) パス名パラメータの未チェック/ディレクトリ・トラバーサル
4) セッション管理の不備
5) クロスサイト・スクリプティング
6) CSRF(クロスサイト・リクエスト・フォージェリ)
7) HTTP ヘッダ・インジェクション
8) メールヘッダ・インジェクション
9) アクセス制御や認可制御の欠落

順番通りに見ていく・・・予定がSQLインジェクションの項目が予定外に長くなったので、OSコマンド・インジェクションから始めて行く!

1.OSコマンド・インジェクションとは

安全なウェブサイトの作り方より、OSコマンドインジェクションとは。

ウェブアプリケーションによっては、外部からの攻撃により、ウェブサーバの OS コマンドを不正に実行されてしまう問題を持つものがあります。このような問題を「OS コマンド・インジェクションの脆弱性」と呼び、問題を悪用した攻撃手法を、「OS コマンド・インジェクション攻撃」と呼びます。

ウェブサーバのOSコマンドを不正に実行!?
ウェブアプリケーションからそんなことまでできんの!?ファイル丸ごと消されるやん!?

発生する脅威は以下。色々まずいな・・・
・サーバ内ファイルの閲覧・改ざん・削除
・不正なシステム操作(アカウントの追加など)
・不正なプログラムのダウンロード・実行(ウィルスなど)
・他のシステムへの攻撃の踏み台

注意しなければならないサイトは、「外部プログラムを呼び出し可能な関数」などを使用していること。
PHPの外部プログラムを呼び出す関数として挙げられた例が以下。
・exec():指定されたコマンドを実行する
・passthru():指定されたコマンドを実行し、ブラウザへ直接返す
・shell_exec():シェルコマンドを実行する
・system():指定されたコマンドを実行する
・popen():プロセスのファイルポインタをオープンする

使ったことないな・・・
こんな関数初めてみた。

資格の勉強って、強制的に一つの分野を網羅的に学ぶ必要があるから、こういう出会いがあるよね。

2.OSコマンド・インジェクションの対策

以下が解決策として示された。

シェルを起動できる言語機能の利用を避ける

つまり、上記の関数を使用するなということ。
なんて簡単!

でも、どうしても使いたいときがあるよね!
そんなときどうすればいいかが以下引用。

シェルを起動できる言語機能を利用する場合は、その引数を構成する全ての変数に対してチェックを行い、あらかじめ許可した処理のみを実行する

上記の関数には全て引数が必要。
その引数を埋め込む前に、全ての変数に対してチェックを行う。

チェック方法には、その引数に許可する文字の組み合わせを洗い出し、その組み合わせ以外は許可しない「ホワイトリスト方式」をお勧めします

正規表現が試されそうだな・・・

参考

安全なウェブサイトの作り方

コメント

タイトルとURLをコピーしました