はじめに
本記事は安全なウェブサイトの作り方(IPA)の第一章「ウェブアプリケーションのセキュリティ実装」に解説を加えた記事です。
長いので分割して投稿しています。
画像はすべて上記サイトから引用してます。
目次
概要
ウェブアプリケーションによっては、外部からの攻撃により、ウェブサーバのOSコマンドを不正に実行されてしまう問題を持つものがあります。このような問題を「OSコマンド・インジェクションの脆弱性」と呼び、問題を悪用した攻撃手法を、「OSコマンド・インジェクション攻撃」と呼びます。
引用:[1]
脅威
-
サーバ内ファイルの閲覧、改ざん、削除
重要情報の漏えい、設定ファイルの改ざん等 -
不正なシステム操作
意図しないOS のシャットダウン、ユーザアカウントの追加、変更等 -
不正なプログラムのダウンロード、実行
ウイルス、ワーム、ボット等への感染、バックドアの設置等 -
他のシステムへの攻撃の踏み台
サービス不能攻撃、システム攻略のための調査、迷惑メールの送信等
対象
外部プログラムを呼び出し可能な関数(perlのopen関数等)を使用しているウェブアプリケーション
根本的解決
(1)シェルを利用できる関数などの利用を避ける。
webアプリケーションに利用されている言語の中には、シェルを起動できる機能を持つものがあります。
代表的なもので、perlのopen関数(引数のファイルパスに「|」(パイプ)を使うことでOSコマンドを実行できる)などがあります。これらの関数をそもそも使わないことで、不正な利用をされた時の被害を抑えられます。
前述の例ではopen関数の代わりにsysopen関数を使うことでシェルの起動を防げます。
保険的対策
(1)シェルを利用できる関数の引数に対してチェックを行う。
前述のopen関数を使わなければいけない場合、引数に対してチェックを行うことが重要です。
例えば数値を引数として取る場合は、入力が数字のみからなる文字列であることをチェックする必要があります。
リンク
1.SQLインジェクション
2.OSコマンド・インジェクション←本記事
3.パス名パラメータの未チェック/ディレクトリ・トラバーサル
4.セッション管理の不備
5.XSS(クロスサイトスクリプティング)
6.CSRF(クロスサイト・リクエスト・フォージェリ)
7.HTTPヘッダ・インジェクション
8.メールヘッダ・インジェクション
9.クリックジャッキング
10.バッファオーバーフロー
11.アクセス制御や認可制御の欠落
