Webの脆弱性

1.SQL インジェクション

 SQL(Structured Query Language)はデータベースサーバを操作する命令文
 インジェクション(injection)は注入するという意味
  本来の意図ではない不当な「SQL」文が作成され、注入され
  意図しないデータ操作が実行され、データを不正に使用される

  ユーザがWebサイトに入力情報を送信する際に悪用される
    入力された情報をチエックするアプリケーションの不備により
    入力情報に不当な命令文が付与され実行される

 対応策
  ・Web アプリケーションの開発時に脆弱性を取り除くテストを行う(無料)

  ・脆弱性診断とペネトレーション(侵入)テストを行う(有料)
    市販の脆弱性診断製品やソースコード分析製品を使用する

2.クロスサイトスクリプティング(XSS:Cross Site Scripting)

 不正なスクリプトをユーザーのWeb ブラウザで実行させる
  攻撃者は正当なエンドユーザーになりすますことができる

 特権を持つアカウントを乗っ取ることで、
  コンテンツの改ざん、遠隔操作でのプログラム実行等の操作を実行する

 対応策
  ・サニタイジング(スクリプトの無害化)(無料)
    スクリプトを実行させないようにサニタイジングを実施する
      スクリプトの構成に必要な&,<,>,”,’の5文字に着目し、
      これらが文字列としてそのまま画面に表示されるように置換する
      スクリプトが入力されても、攻撃者が意図する内容にはさせない
      Webアプリケーションの画面には無害なスクリプトが表示される

  ・入力値を制限する(無料)
    ユーザーの入力できる値を制限する
      文字の種類を制限する(数字に限定する)
      入力値の長さに制限する

  ・WAF(Web Application Firewall)で防御する(有料)
    ユーザが送信するリクエスト内容を監視する
      Webサーバの前面に配置され、
      Webアプリケーションへのすべての通信を検査・解析する

3.バッファオーバーフロー

 限度以上のデータをバッファに入力するとデータがあふれる
  攻撃者はオーバーフローを悪用しシステムを制御または変更する

  あふれても強引に書き込むのでスタック領域が破壊される
    スタック領域のSA(save area)が破壊される
      使用中のエリアが破壊される
      プログラムの戻り先のアドレスが書き替わる
        プログラム終了時に、悪意のあるアドレスに制御が渡る

 対応策
  ・プログラム開発時の対策
    入力データの長さチェック、書き込み上限バイトや境界のチェック
    Javaなどの言語に置き換える

  ・利用者側の対策
    ウィルス対策ソフトを常に最新状態にする(無料、有料)

4.クロスサイトリクエストフォージェリ(CSRF:Cross-Site Request Forgeries)

 攻撃者は段階的に罠を仕掛ける
  ・攻撃用Webページを準備し、ユーザがアクセスするよう誘導する
  ・ユーザが攻撃用Webページにアクセスすると、
    あらかじめ用意されていた不正リクエストが攻撃対象サーバに送られる
  ・攻撃対象サーバ上のWebアプリケーションは不正なリクエストを処理し、
    ユーザが意図していない処理が行われてしまう

 具体例(ログインが必要な処理の場合)
  ・ログインしたままの状態で他のサイトに移る
  ・攻撃用Webページにアクセスする(不正処理が仕掛けられる)
    ログイン状態の情報が盗まれ、悪用される

 ユーザーは自分の操作が攻撃につながっていると認識していない
  そのためユーザーが意図的に送信したかどうかの判別は難しい

 CSRF攻撃によって起こり得る被害は、
  不正な送金、利用者が意図しない商品購入、利用者が意図しない退会処理
  不正な変更(管理者画面、パスワード等)、掲示板への不適切な書き込み 
  ファイアウォールの設定変更、不正な金銭取引等

 注意が必要なサイト
  Cookieを用いたセッション管理
  Basic認証
  SSLクライアント認証
  ログイン必須処理(金銭処理、管理画面、会員専用サイト、日記サイト)

 対応策
  ・頻繁にパスワード認証を要求する・・・操作性が落ちるので評判が悪い
  ・POSTメソッドの「hiddenパラメータ」をプログラムで生成して使用する
  ・処理結果を事前登録先に送り返す・・・早めに対策が打てる

5.アクセス制御の不備を突く攻撃

 アクセス制御を行う際の注意点
  アクセス権限を特定のエンドユーザーにのみ与えることでの規制は
  アクセス権限を適切に管理できていない場合には障害が発生する

 IT 部門はアクセス可能なデータやシステムの範囲を最小限にとどめ、
  エンドユーザーの役割に基づいたアクセス制御を導入する