情報処理

一般的なWebアプリケーションの脆弱性対策まとめ

2019年12月6日

Webアプリケーションの脆弱性対策まとめ

Webエンジニアであれば、一般的な知識であるWebアプリケーションの脆弱性対策。

本記事では、Webアプリケーションの脆弱性対策を図解で分かりやすく解説していきます。

スポンサーリンク

[対策1] クロスサイト・スクリプティング

クロスサイトスクリプティング(XSS)とは、Webサイトの掲示板など閲覧者が投稿できる入力フォームから「悪意のあるスクリプト」を投稿することで、Webサイトのページ内に悪意のあるスクリプトを埋め込む攻撃

そして、悪意のあるスクリプトを埋め込まれたWebサイトに知らずに訪問すると、埋め込まれた罠が勝手に動き出す仕組みです。

クロスサイトスクリプティングイメージ図

クロスサイトスクリプティング(XSS)の主な対策は、悪意のあるスクリプトを無害な文字列に置き換えるサニタイジング(エスケープ)を実施することです。

 

クロスサイトスクリプティング(XSS)の詳細は以下の記事をご覧ください。

[対策2] SQLインジェクション

SQLインジェクションとは、Webサイトの入力フォームから「SQL文を不正に操作する文字列」を入力することで、アプリケーションが想定しないSQL文を実行させ、データベースを不正操作する攻撃

SQLインジェクションとは

SQLインジェクションでは、SELECT文やINSERT文を不正操作し正常であれば見ることができない情報を閲覧(情報漏洩)、DELECT文やUPDATE文を不正操作することで、データを「改ざん」したりすることが可能です。

SQLインジェクションの主な対策は、SQL文の組み立てを「プレースホルダ」を利用して実装することです。「プレースホルダ」を利用することで、Webサイトから入力された文字列は「ただの文字列」と判断されSQLインジェクションによる攻撃を防ぐことができます。

 

SQLインジェクションの詳細は以下の記事をご覧ください。

[対策3] セッション・ハイジャック

セッションハイジャックとは、Webサイトなどで利用されるセッションIDを盗聴や推測で盗み出し、利用者に「なりすまし」不正アクセスを行う攻撃。

セッションハイジャック

「セッションID」を盗み取ることで、利用者に「なりすまし」会員サイトなどにアクセスすることが可能です。その結果、会員サイトなどに登録してある"個人情報"が盗み取られたり、不正操作されたりする可能性があります。

セッションハイジャックの主な対策は、「暗号論的擬似乱数生成器」などを使用して推測困難な手法でセッションIDを生成することです。

スポンサーリンク

セッションハイジャックの詳細は以下の記事をご覧ください。

[対策4] OS コマンド・インジェクション

OSコマンドインジェクションとは、Webサイトの入力フォームや掲示板などで「OSコマンド(※コンピュータへの命令文)」を含む文字列を送信することで、Webサーバに意図しない「OSコマンド」を実行させる攻撃

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

OSコマンドインジェクション攻撃の主な対策は、OSコマンドインジェクション攻撃の原因となる「OSコマンド」が実行できるシェルを起動する機能を使用しないことです。

 

OSコマンドインジェクションの詳細は以下の記事をご覧ください。

[対策5] ディレクトリ・トラバーサル

ディレクトリトラバーサルとは、Webサイトからファイル名を直接指定するようなWebアプリケーションに対して、ファイル名を不正に書き換え、本来閲覧することができないファイルにアクセスする攻撃

ディレクトリトラバーサル

上記のイメージ図ではURLに指定してあるファイル名を「file=../pass/password.txt」と相対パスでpassword.txtを指定しています。このように相対パスで指定することでWebサーバが意図していないファイルにアクセスすることに成功しています。

ディレクトリトラバーサルの主な対策は、外部からのパラメータでWebサーバ内のファイル名を直接指定しない もしくは ディレクトリを固定するなどです。

 

ディレクトリトラバーサルの詳細は以下の記事をご覧ください。

[対策6] クロスサイト・リクエスト・フォージェリ

クロスサイトリクエストフォージェリ(CSRF)とは、会員サイトなどでログイン状態を保持したまま「悪意のある攻撃者」が作成した罠サイトのボタンやリンクを押下することで、利用者の意図しない形でリクエストを送られてしまう攻撃

 

会員サイトにログイン成功した利用者が、会員サイトからログアウトせず(ログイン状態を維持したまま)、別のサイトを閲覧します。会員サイトなどにログインした状態で、他のサイトを閲覧することはよくある操作だと思います。

もし、たまたま(もしくは「なりすましメール」等で誘導された)閲覧したサイトが「悪意のある攻撃者」が用意した罠サイトだったらどうなるでしょう。

[CSRFの流れ2] セッションIDを発行する

 

会員サイトにログインした状態のまま「悪意のある攻撃者」が用意した罠サイトを閲覧、そして罠サイトにあるリンクやボタンをクリックすると、会員サイトのWebサーバに利用者が意図していない情報が送られてしまうのです。

そしてこの時、クライアント側(利用者側)のCookieに保存されていた「セッションID」も自動的に送られます。その結果、会員サイトのWebサーバは「セッションID」が正しいので、正常のリクエストと判断しリクエストを受理

スポンサーリンク

「悪意のある攻撃者」が作った罠サイトにより、利用者の意図しない情報が会員サイトのWebサーバに送信され、会員サイトからの強制退会、SNSの強制投稿、ネットショップの強制購入、不正な送金などの操作が行われてしまう可能性があります。

[CSRFの流れ5] 退会や送金、購入といった利用者の意図しない操作が行われてしまう

 

クロスサイトリクエストフォージェリ(CSRF)の主な対策は、セッション管理とは別に機密情報を保持するという手法です。

 

クロスサイトリクエストフォージェリの詳細は以下の記事をご覧ください。

[対策7] HTTP ヘッダ・インジェクション

Webアプリケーションには、HTTP レスポンスヘッダのフィールド値を、外部から渡されるパラメータの値等を利用して動的に生成するものがあります。

この仕組みを利用してHTTPヘッダを不正に書き換える攻撃をHTTP ヘッダインジェクションという。

[対策8] メールヘッダ・インジェクション

メールヘッダインジェクション攻撃とは、Webサイトにある「お問い合わせフォーム」や「アンケート」などのように特定の相手にメールを送信する機能に対して、入力データを"改ざん"することで、メールの送信先を「悪意のある攻撃者」によって操作する攻撃

メールヘッダ・インジェクション

上記図のイメージ図では、悪意のある攻撃者により「メールヘッダ・インジェクション」の脆弱性を突いた攻撃により、システム側で固定されている宛先であるWebサイトの管理者以外にも、複数人にメールが送信されています。

メールヘッダインジェクションの主な対策は、外部からの入力は全てメール本文に設定する もしくは 「メールヘッダ・インジェクション」対策されているメール送信APIを利用することです。

 

メールヘッダインジェクションの詳細は以下の記事をご覧ください。

[対策9] クリックジャッキング

クリックジャッキングとは「透明で見えない罠ページ」と「真正なWebページ」を重ねて表示し、利用者に意図しない操作を行わせる攻撃

一般的に知名度のあるWebページや無害なWebページをiframeで読み込みます。そしてスタイルシート(CSS)などを利用して透明で見えない罠ページを作り、iframeで読み込んだ「真正なWebページ」と「罠ページ」を重ねて表示させます。

その結果、利用者は「罠ページ」が隠れていることに気がつきません。重ねて表示されている「真正なWebページ」しか見えていないのです。

クリックジャッキングの主な対策は、HTTPレスポンスヘッダーにX-FRAME-OPTIONSを付けることです。X-FRAME-OPTIONSをつけることで、他のサイトのフレームから呼び出されないようになります。

 

クリックジャッキングの詳細は以下の記事をご覧ください。

[対策10] バッファオーバーフロー

バッファオーバーフローとは、Webアプリケーションに負荷をかけることでプログラムが確保したメモリの領域を超えて、意図しないコードを実行させる攻撃。

バッファオーバーフローは基本的に C、C++、アセンブラなどの直接メモリを操作できる言語を使用している場合に発生する可能性があります。(ただしPHP やPerl、Java のライブラリの中にもバッファオーバーフローの脆弱性が存在する物もある)

helpful