本日の勉強内容
- クロスサイトスクリプティング(XSS)
- SQLインジェクション
- OSコマンドインジェクション
- HTTPヘッダインジェクション
- メールヘッダインジェクション
- ディレクトリトラバーサル攻撃
- サーバサイドリクエストフォージェリ(SSRF)
クロスサイトスクリプティング(XSS)
ユーザの入力データを処理するWebアプリケーションや、JavaScript等に存在する脆弱性を悪用し、ユーザのPC上で不正なスクリプトを実行させる攻撃。
Webサイトを閲覧したユーザの個人情報が盗み出される、クライアントPC上のファイルが破壊される、バックドアが仕掛けられるなどの被害。
反射型XSS
ユーザからのリクエスト内に含まれるスクリプトに相当する文字列を、WebアプリケーションがレスポンスとしてWebページ内に実行可能なスクリプトとして出力してしまう脆弱性。
格納型XSS
ユーザからのリクエスト内に含まれるスクリプトに相当する文字列を、Webアプリケーションの内部に永続的に保存することにより、当該文字列をWebページ内に実行可能なスクリプトとして出力してしまう脆弱性。
DOM-based XSS
Webページに含まれる正規のスクリプトにより、動的にWebぺーじを捜査した結果、意図しないスクリプトをWebページに出力してしまう脆弱性。
対策
Webアプリケーションでの対策
- レスポンスヘッダのContent-Typeフィールドに文字コードを指定
- タグの属性値を必ずダブルクォートで囲む
- タグの属性値等に含まれるメタキャラクタのエスケープ処理を行う(サニタイジング)
HTTPレスポンスヘッダによる対策
- X-XSS-Protection:反射型XSS攻撃を検出したときにページの読み込みを停止
- Content-Security-Policy:スクリプトの読込を許可するドメインをポリシとして指定することで、悪意のあるスクリプトが読み込まれるのを防ぐ。
HttpOnly属性によるCookieの漏洩対策
発行するCookieにHttpOnly属性を設定することで、Cookieの適用範囲をHTTP/HTTPSに限定し、ブラウザ等で実行されたスクリプトが"docment.cookie"を用いてアクセスすることを禁止する。
通信経路上での対策
WAFを用いて反射型XSS脆弱性を突いた攻撃を遮断
DOM-based XSSの対策
- docment.writeやinnerHTMLを使用しない
- 代わりにcreateElementやcreateTextNode等を用いる
- 使用する場合はエスケープ処理を組み込む
メタキャラクタ
Perl, Java, ECMAScriptなどのスクリプト言語やプログラム言語で用いられる正規表現、UNIXで用いるシェル、SQL文などで、何らかの特別な働きをする文字。
次のような種類がある
\ | ( ) [ ] { } < > ^ $ * + . & ; ` ' ~ "
SQLインジェクション
ユーザの入力データをもとにSQL分を実行・表示するWebページにおいて、不正な入力をすることでデータベースの操作等を行う手法。
原因
- ユーザの入力データのチェック不備
- データベースのアクセス権が必要以上に与えられている
- Webサーバのエラーメッセージが詳細すぎる
対策
- バインド機構の使用
- 入力データのエスケープ処理
- クライアントに詳細なエラーメッセージを送らない
- WAFを用いてSQLインジェクションを遮断
- Webアプリからのクエリを必要最小限の権限のみを持つアカウントで処理
OSコマンドインジェクション
ユーザの入力データをもとにOSコマンドを実行するWebページにおいて、不正な入力をすることで任意のファイル読出し、変更、削除、パスワードの不正取得を行う手法。
対策
- OSコマンドの呼び出しが可能な関数を極力使用しない
- 入力データに使用可能な文字種や書式などのルールを明確に
- 上記のルールに従って入力データをチェック
- ルールに従わないデータはエラーとして扱う(エスケープ処理は行わない) →OSコマンドのエスケープ処理は複雑になりがちなため、一切処理しない方が安全
- WAFを用いてOSコマンドインジェクションを遮断
HTTPヘッダインジェクション
ユーザの入力データをもとにHTTPメッセージのレスポンスを生成するWebページにおいて、不正な入力をすることで任意のヘッダフィールドやメッセージボディを追加、複数のレスポンスに分割する(HTTPレスポンス分割)手法。
HTTPヘッダインジェクションにより、ユーザのブラウザ上に偽の情報を表示、不正なスクリプトの組み込み、任意のCookieの発行、キャッシュサーバのキャッシュを汚染する、などの攻撃が可能。
対策
- HTTPレスポンスヘッダ出力は、ヘッダ出力用のAPIやライブラリを使用
- ユーザ入力データに対して改行コードのチェック、削除
- Cooki発行の際にはURLエンコードを確実に行う
メールヘッダインジェクション
ユーザの入力データをもとにメールを送信するWebページにおいて、不正な入力をすることで意図していないアドレスに迷惑メールを送るなど、メール送信機能を悪用した攻撃手法。
対策
- メールヘッダを固定値にする
- メール送信用のAPIを使用
- hiddenフィールド等、改ざんが容易な場所にメール送信先のアドレスを設定しない
- 入力データに対して改行コードのチェック、削除
ディレクトリトラバーサル攻撃
ユーザの入力データをもとにWebサーバ内のファイルにアクセスするWebページにおいて、ファイル名の先頭に上位のディレクトリを意味する文字列を用いることで、公開を意図していないファイルに不正にアクセスする攻撃手法。
対策
- パス名からファイル名のみを取り出すbasename()等の使用
- ファイルへのアクセス権を正しく設定
- ファイル名を指定した文字列に不正な文字列が含まれていないかをチェック、エラー処理
サーバサイドリクエストフォージェリ(SSRF)
Webサーバ等の公開サーバを通じ、通常ではアクセスできない内部のサーバや、公開サーバと連携している別のサーバ等に攻撃を仕掛ける手法。
対策
- 公開サーバから内部サーバ等へのリクエスト内容のチェック
- SQLインジェクション、OSコマンドインジェクション、ディレクトリトラバーサルの脆弱性チェック、対処
メモ
フィッシング(Phishing)
銀行、クレジットカード会社、ショッピングサイトからの連絡を装ったメールを送付、本物のサイトに酷似した悪意あるページのリンクを貼り付け、口座番号やクレジットカード番号、パスワードなどを入力させて盗んでしまうという詐欺行為。
ユーザのURLタイプミスを狙って偽のサイトを立ち上げるケース、XSS脆弱性を利用して偽の入力項目をWebページに作り出すケース、DNSキャッシュポイズニング攻撃によって誘導するケースなどもある。
標的型攻撃
明確な目的を持つ攻撃者が、特定の組織や団体等をターゲットとして、その取引先や関係者、公的機関など騙ってマルウェアや不正なリンクが埋め込まれたメールを送信することで情報を盗む手法
クリックジャッキング攻撃
Webサイトのコンテンツ上にiframeなどで透明化したレイヤに標的サイトのコンテンツを重ねて配置することにより、利用者を視覚的に騙して不正な操作を実行させる手法。
クリプトジャッキング
悪意を持った第三者がコンピューターをハイジャック、またはWebサイトを通じて、暗号通貨を無断でマイニングする行為。
SEOポイズニング
検索エンジンの順位付けアルゴリズムを悪用し、閲覧者をマルウェアに感染させるような悪意あるサイトを検索結果の上位に表示させるようにする行為。
SEO(Search Engine Optimization:検索エンジン最適化)
対象サイトのHTMLに検索キーワードを効果的に埋め込むなどして、検索結果の上位に表示されるようにすること。