PHP
Security
Web

Webアプリケーションにおけるセキュリティ問題まとめ(基礎編)

Webアプリケーションにおけるセキュリティ問題まとめ(基礎編)

Webアプリケーションの特性

まずWebアプリケーションのセキュリティの話をする前に, Webアプリケーションの特性について説明します.

いまや, アプリケーションといえば, Webアプリと思ってもいいくらいWebアプリケーションが台頭しています.

ここで, Webアプリケーションとその他のアプリケーションの違いを少し説明します.

Webアプリケーションの特性は,

  • Webブラウザ(Chrome, Safari, IE, edge, など)とWebサーバーが相互にやり取りするクライアント・サーバーの構成
  • サーバーから送られるHTML, XML形式のファイルをWebブラウザ上で表示. ユーザーは, HTMLソースやHTTPリクエストの内容を書き換える機会がある.
  • Webブラウザの多くは, スクリプトエンジンを備えている(JavaScriptCoreなど)
  • WebブラウザとWebサーバーの間に, プロキシサーバーなど, キャッシュ機能をもつ設備が, 通信する際にかませる場合がある

こういった独特な特性がセキュリティの問題を誘発する場合がある.

セキュリティ問題は, 以下のように分類できる

  • 暴露問題
  • エコーバック問題
  • 入力問題
  • セッション問題
  • アクセス制御問題
  • その他の問題(メールの第三者中継や偽ページの問題)

この記事では, Webアプリケーションには, どのような問題があるかだけをまとめたもので, 解決案などは, 書いていないです.

この上の5つの問題について少し詳しく見ていく.

暴露問題

Webサーバーが, 公開すべきでないファイルを漏えいしてしまうこと.

例えば, ユーザーから収集したデータを公開されているディレクトリに置いておくと, URIに, そのデータのファイルのパスを指定するだけで, 見えてしまう.

具体的には, /var/www/data/user_data.txtにユーザーデータが, 保存されているとしたら,

http://www.sample.com/data/user_data.txtとURLを入力すると, データが見れてしまう(ドメイン名をwww.sample.comとした)

また, ../../../etc/passwdといった想定外のパスを挿入される「ディレクトリトラバーサル攻撃」も暴露問題の一つである.

エコーバック問題

Webサーバーが, ユーザーの入力をそのままコンテンツに出力して起きうる問題.

エコーバックとは, オウム返しという意味.

エコーバック問題の名前は, ユーザーの入力を特に加工せず, そのままオム返しで出力することで起きることに由来する.

攻撃者から, 悪意のあるスクリプトを埋め込まれてる危険性がある.

ほかのユーザーがそのサイトを見に行くと, そのスクリプトが実行されてしまうような問題が起きる.

この攻撃を, XSS(Cross site scripting)と呼ぶ.

具体的な例だと, 掲示板で, ユーザーからの入力をサイトにそのまま乗せるばあいです.

このばあい,

<script>
    alert('悪意のあるメッセージ');
</script>

と投稿すると, 次に来た人は, alertが飛びます.

入力問題

悪意のあるパターンを入力されて, サーバーにある情報を注入したり, 改ざんする問題です.

SQLインジェクションなどは, この問題に分類されます.

具体的には, ユーザーから入力を受け取ってそれを使って, SQL文を構築する場合です.

UPDATE user_table SET password='XXX' WHERE id='YYY' AND password='ZZZ';

ユーザーのパスワードを変更するため, 新しいパスワードXXXと, 既存のidpassword, YYY, ZZZを受け取るとします.

このとき, ZZZに, ' OR 'a' = 'aという文字列を受け取ると, WHERE以下は, 常にTRUEになります.

よって, すべてのuser_tableのpasswordがXXXになります.

セッション問題

セッションは, ユーザーごとに状況が違う場合を表現するときに使います.

HTTPは, ステート(ユーザーがログインしているかなどの状態)を持てないので, セッションを利用することが多い.

セッションは, セッションIDで管理されている.

つまり, どのユーザーがアクセスしているかは, セッションIDで判別する.

なので, セッションIDを奪われると, そのユーザーに成りすますことができる.

これがセッションハイジャックと呼ばれ, セッション問題の一つである.

ほかにも, 攻撃者が, セッションIDを, Webサーバーの代わりに発行する.

ユーザーは, 攻撃者から発行されたセッションIDをもつ.

攻撃者が知っているセッションIDを使って, ログインしたりしてしまうとする.

攻撃者は, そのセッションIDを使って, ログインした状態になる.

これをセッションフィクゼーションと呼ぶ.

アクセス制御問題

ユーザー認証と, アクセス認証が不十分で起こる問題.

例えば, ログイン後に飛ぶURLを, ログインすることなく, 直接URLをたたくことで, 入ることができる場合などがある.

ログイン後に, sample.com/userのような, URLに飛ぶとする.

もし, sample.com/userに入る際, アクセス権があるか確認する処理がないと, 直接ブラウザから, sample.com/userを入力すればアクセスできてしまう.

その他の問題

メール第三者中継などこの5つに分類されてない問題のこと.