Webアプリケーションの脆弱性、、、怖いですよね。
何かあった時の責任を考えると、慎重に取り組まなければならない課題です。
そもそも脆弱性って
下記、引用(http://it-trend.jp/words/zeijaku)です。
脆弱性とは、コンピュータやネットワークなどにおいて、システム上の欠陥や仕様上の問題点の事を指す。 ハードウェアの欠陥やソフトウェアのバグを始め、開発者が予想しなかった利用形態や設計の際の見落としなど、潜在的な問題点もある。
Webアプリケーションでのバグは、簡易なものから潜在的なものまで存在していると思われますが、それらにどんな危険性があるかを下記にまとめてみました。
XSS(クロスサイトスクリプティング)
Webアプリケーションの中には、利用者からのリクエスト(GETやPOSTなどでのパラメータ)やHTTPヘッダの情報をもとにページを表示するものがあります。
ここでページへの出力処理に問題があると、そのページにスクリプト等が埋め込まれてしまい、ページを閲覧している利用者、しいてはサイト全体へ影響していきます。
脆弱性によるリスク
-
本物のサイト上に、存在しない偽ページが表示される
-
ブラウザが保存しているCookieを取得される
-
悪意のあるCookieをブラウザに保存させられる
セッション管理に関する脆弱性
Webアプリケーションの中には、セッションID(利用者を識別するための情報)を発行し、セッション管理を行っているものがあります。
セッション管理に関する脆弱性については、下記2つが有名なものです。
セッション・ハイジャック
セッションIDの発行や管理に不備がある場合、悪意のある人にログイン中の利用者のセッションIDを不正に取得され、その利用者になりすましてアクセスされてしまう可能性があります。
セッションフィクセーション
悪意のある人があらかじめ用意したセッションIDを、何らかの方法で利用者へ使用させ、利用者がこれに気付かずにパスワードを入力するなどしてログインすると起こりうる問題です。
この攻撃に成功すると、あらかじめ用意したセッションIDを利用し、利用者になりすましてサイトにアクセスすることができてしまいます。
脆弱性によるリスク
- 利用中のサービスの悪用
- 情報の改竄(変更や削除)、新規登録
- 非公開情報の閲覧
SQLインジェクション
Webアプリケーションにて、データベース(OracleやMySQLなど)が使われることが多いです。
そのデータベースへ利用者からのリクエスト(GETやPOSTなどでのパラメータ)をもとに、SQL文(命令文)や条件を設定することになると思われますが、SQL文の組立て方法に問題がある場合、攻撃によってデータベースの不正利用が可能となる場合があります。
脆弱性によるリスク
- 非公開情報の閲覧
- 不正ログイン
- 情報の改竄(変更や削除)、新規登録
- ストアドプロシージャ等を利用したOSコマンドの実行
CSRF(クロスサイト・リクエスト・フォージェリ)
Webアプリケーションの中には、サービスの提供に際しログイン機能を設けているものがあります。
ログインした利用者からのリクエストについて、その利用者が意図したリクエストであるかどうかを識別する仕組みを持たないウェブサイトは、外部サイトを経由し悪意のあるリクエストを受け入れてしまう場合があります。
このようなWebアプリケーションにログインした利用者は、予期しない操作を行ってしまう可能性があります。
脆弱性によるリスク
- 利用中のサービスの悪用
- 情報の改竄(変更や削除)、新規登録
今回記載したもの以外にも、たくさんの脆弱性があります。
システムやアプリケーションを作るだけではなく、これらの内容にも対応していくために、セキュリティ関連の情報にもアンテナを張り続ける必要だと思われます。
次回は脆弱性を発見するための手段を紹介していきます。