Webアプリの脆弱性

1.HTTP ヘッダインジェクション

 Webサーバに対しのHTTPリクエストに、
   改行コードを含む不正な文字列を紛れ込ませHTTPレスポンスを改竄する

 HTTPレスポンスに含まれるパラメータ等を、
   そのまま格納して返信するWebアプリケーションが該当する
     (例)Cookie等にセットして返送したり使い回しするもの 等

 例えば
   何度かWeb上でやり取りし、下記のようなことが判明した場合
     https://●●●/index.html?status=1 で返信すると「OK」が返る
   そこで下記のような返信をする
     http://f5.com/index.html?status=1「改行」「改行」<html><body><script>~</script></body></html> 
   そうすると下記のような結果が返ってくる
     「OK」(空行)<html><body><script>~</script></body></html>

   <html>以下に悪意を持ったプログラムを埋め込んでおくと
     簡単に悪意を持ったプログラムがサーバー上で動くことになる
       ※こういった規約があります
         レスポンス ヘッダの後2回改行を行ったら
         改行の後の部分がレスポンス ボディとなって返ってくる

 対策としては
   パラメータ渡しを止める
     再考して止めるのが手っ取り早くて一番良い
   パラメータ内容(長さや改行コード)をチエックする
     手間だし完璧とは言い難い
   GETよりPOSTを使ってパラメータを渡す
     パラメータの内容が外部から見えなくなります

2.OS コマンドインジェクション

 入力時にシェル機能を操作する文字列を混入させ、OSを不正に操作する
   情報漏洩、ファイル改竄や削除、ウィルス感染、他サイトへの攻撃等

 例えば
   自動的にメールを送るWebアプリケーションの場合
     「user@●●●.com」と入力すると「sendmail 」を実行する場合
     「user@●●●.com; rm –rf/」と入力する
     そうするとLinux系であれば、全データが削除される
       「sendmail」が実行された後に「rm -rf/」が実行される

 対策としては
   サイト内で実行コマンドの発行を止める
     悪用される心配がない
   実行コマンドを使う場合には入力パラメータは使わない
     入力パラメータを使う場合には特殊文字のチエックを行う
   プログラム内で特定の関数を利用しない
     シェルを用いてのコマンド実行を準備しない

3.クロスサイトリクエストフォージェリ

 掲示板や問い合わせフォームなどを処理するWebアプリケーションが、
   本来拒否すべき他サイトからのリクエストを受信し処理してしまう

 例えば
   攻撃用Webページを準備し、ユーザがアクセスするよう誘導し
     アクセスすると用意されていた不正なリクエストが処理される
       ・いたずら的書き込み、不正サイトへの誘導、犯罪予告
       ・書き込みを大量に行うことによるDoS攻撃

     ユーザには直接的な被害は発生しないが
       不正なリクエストを送信した攻撃者として認識される

 対策としては
   ユーザ側・・・ユーザ側では攻撃用Webページにアクセスしない
          不正サイトへのアクセスをブロックする
          電子メール内やWeb上の不審なURLをクリックしない

   Web管理者側・・・サイト外からのリクエストは受信、処理しない
            推測されにくい任意の情報を照合する処理を組み込む
            「キャプチャ」機能を実装する
              画像化されたモノを表示しユーザに入力させる

   IT管理者側・・・エンドポイントへ総合的なセキュリティソフトを導入する
           ゲートウェイ上で攻撃メールの受信をブロックする
           内部から不正サイトへのアクセスをブロックする

4.セッションハイジャック

 セッションを乗っ取る行為により別人になりすますことが可能となる
   クレジットカードの不正利用や情報漏えいなどの被害につながる

   直接的にIDやパスワードを窃取するフィッシング攻撃とは異なり
     セッションIDを取得することで、第三者になりすますだけ

 例えば
   セッションIDを推測する
     セッションIDの生成ルールがある規則に基づいたものであった場合、
     総当たり攻撃などで推測して悪用することが可能
       日付やユーザー名に基づく生成ルールの場合も推測できる
       アカウント登録して得られたセッション情報を解析し
         他のセッションIDを推測する
   セッションIDの窃取
     不正にユーザーとWebサイトの間に介入し、
       ユーザーからセッションIDを窃取する
   セッションフィクセーション
     攻撃者が取得した正規のセッションIDを、
       ハイパーリンク経由などで別のユーザーに利用させる
     別のユーザーがログインしてしまうと、
       攻撃者は利用させたセッションIDを用いて、
       別のユーザーのログイン状態に便乗することができる

   被害としては
     ・機密情報、プライベート情報の漏洩
     ・サーバーへの不正侵入
     ・オンラインバンキングの不正出金
     ・登録情報の漏洩や改竄
     ・クレジットカードの不正利用

 対策としては
   セッションIDをURLに含めない
     攻撃者が容易にセッションIDを取得できてしまうため、
     Cookieを用いてセッションIDを管理する方法に切り替える
   推測が困難なセッションIDにする
     擬似乱数を組み合わせる等の解析が困難なセッションIDを生成する
   セッションIDの変更
     ユーザーがログインしたら既存のセッションIDを無効化し、
       新しいセッションIDで管理するようにする
       その前に取得した古いセッションIDではアクセスできなくなる