今、見直すWebアプリケーションのセキュリティ
Webサイト防御のためにできること
Webサイトへの攻撃が後を絶たない。改ざんや悪質サイトへと誘導するその手口はさらに巧妙化し、従来のIPSなどでは防ぎきれなくなった。サイトを脅威から守るために、今すぐできるセキュリティ対策を紹介する。
2005年春、2007年春に猛威を振るったSQLインジェクション(※注1)の検知数が、2008年の3月上旬から当時の何倍もの規模にまで増えてきた(図1)。正直なところSQLインジェクションは「過去の遺物」であり、ほとんどのサイト運営者が何らかの手を打ち、もう絶滅したと思われていたが、現在も被害に遭うサイトは後を絶たない(図2)。
※注1 第三者がWebアプリケーションなどのセキュリティ上の脆弱性を悪用してデータベースの不正な操作を可能とする攻撃手法
ここではWebアプリケーション(以下、Webアプリ)の脆弱性対策の話が中心であるため、攻撃の詳細にまでは触れないが、一連の攻撃で厄介だったのは、攻撃コードが難読化されていたことである(図3)。攻撃コードの難読化により、既存のベンダー製シグネチャが適用されたIDS/IPS(不正侵入検知/防御システム)などでは検知できないため、自組織では攻撃があったことに気付かなかった。利用者や第三者からの指摘があるまで放置されていたのである。
その結果、Webページに利用されているデータベースの値(HTMLの一部になる値)が改ざんされ、ページを改ざんされたのと同じ状態となった。そのサイトにアクセスしたユーザーは知らないうちに悪質なプログラムをダウンロード・実行し、Webブラウザや音楽プレーヤーなどのプログラムの脆弱性を突いて攻撃者に情報を送信したり、ウイルスに感染したりしてしまう。さらに各サイトの攻撃コード(スクリプト)も難読化されていたため対応が遅れ、被害規模が大きくなってしまったのだ。
皆さんのサイトは本当に大丈夫だろうか? もし不安なら、以下に挙げるようなIPA(情報処理推進機構)やわれわれのようなセキュリティベンダーが提供する無償ログチェッカーで、攻撃の有無を調べてみることをお勧めする。仮に攻撃があったと判定されたとしても、誤検知の場合もあるので慌てず内容を確認し、攻撃が本物か誤検知かを判断する。攻撃が本物ならその攻撃が成功していそうか否か、また攻撃されているWebアプリの脆弱性(設計/プログラミング上の欠陥)の有無などを調べてみるとよい(自組織で調べられない場合は後述を参照)。そのほか、とにかく不安なら最初から身近なセキュリティベンダーに相談するのもよいだろう。
対策の大前提――セキュリティ対策の要件化
まず、セキュリティ対策を発注する側が注意する点を考える。Webアプリのセキュリティ対策に限らず、セキュリティ対策を考える際に重要なことは、発注者側が満たすべき要件をシステムインテグレーター側に要求することである。「インテグレーターの技術者は言われなくてもきちんと対策をやってほしい」と彼らの良心に期待するのは自由だが、セキュリティ対策はほとんどの場合、要求しなければ実装されない。なぜなら、アプリケーションの機能を追加したときと同様、セキュリティ対策にはお金が掛かるからである。
では、どのように要求すべきか? まずは自社のセキュリティポリシーやシステム開発標準などを確認し、その上で日本ネットワークセキュリティ協会(JNSA)の「Webシステム セキュリティ要求仕様(RFP)」編 β版やPCI DSS(クレジットカード業界のセキュリティ基準)などを参考に提案依頼書(RFP)を作成してみてはいかがだろうか。
次に対策を行う側、つまり開発者側にとってWebアプリのセキュリティ対策の中心は、セキュアなアプリケーションを開発することである。しかし、そのアプリケーションが稼働するサーバが欠陥だらけでは、下位レイヤーのOSやミドルウェアから攻められてしまう。従って、従来言われている「サーバの要塞化(ハードニング)」「セキュリティパッチ適用の徹底」などの基本的な対策を怠ってはいけない。どの分野においても基本は大事である。
Webアプリを脅威から守る対策の実践
Webアプリケーションのセキュリティ対策といっても、読者の皆さんすべてがITマネジャーやセキュリティ担当者などのアプリケーション開発者ではないだろう。そこでここでは、アプリケーション開発者向けのセキュアプログラミングの具体的な手法については触れず、システムインテグレーターから納入されたシステムを受け入れ検証したり、既に運用中のシステムに欠陥がないかどうかを確認するための「脆弱性検査」と、多層防御の観点からWebアプリを防御するために導入する「WAF(Web Application Firewall)」の2つを中心に説明する。
2つの脆弱性検査
まず脆弱性検査について説明する。一昔前は脆弱性検査といえば、サーバレベル、実際にはOSやミドルウェアの検査を目的に、ネットワーク越しに検査対象のサーバに対して疑似侵入攻撃を実施していたが、ここでいう脆弱性検査はWebアプリに対する脆弱性検査である(図4)。
検査の手法は、大きく2種類に分かれる。1つはWebアプリのソースコードをチェックする方法、もう1つは動作しているWebアプリに対して、Webブラウザや専用ツールなどにより、疑似攻撃をする形で検査する方法(ブラックボックス検査)である。
それぞれの検査手法ともに、表1にあるような無償ツールや製品が販売されているので、興味があれば利用してみるとよいだろう。これはあくまで筆者の私見だが、ソースコード検査はWebアプリ全体を対象にして検査を実施できるが、検出できる脆弱性が限られているのが課題だろう。また、検査の精度を向上させるにはそれなりのプログラミングとセキュリティに関する知識が要求されるのも、一般企業にはつらいところだ。一方、疑似攻撃による検査は、プログラミング知識がなくてもツールを利用することで誤検出を減らすことが可能だが、ソースコード検査に比べてコストが高くつくはずだ。
| ツール名 | URL |
|---|---|
| AppScan | http://watchfire.com/jp/products/appscan/ |
| WebInspect | http://www.scs.co.jp/spi/ |
| Web Vulnerability Scanner | http://www.acunetix.com/vulnerability-scanner/ |
| WebScarab | http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project |
| WebProbe | http://www.softek.co.jp/Sec/WebProbe/ |
| Achilles | http://packetstormsecurity.nl/web/ |
| Burp Proxy | http://www.portswigger.net/proxy/ |
| Paros | http://www.parosproxy.org/index.shtml |
| ツール名 | URL |
|---|---|
| Coverity | http://www.coverity.com/html_ja/products.html |
| Fortify | http://www.fortifysoftware.co.jp/ |
| Lightweight Analysis for Program Security in Eclipse(LAPSE) | http://suif.stanford.edu/~livshits/work/lapse/ |
| Rough Auditing Tool for Security(RATS) | http://www.fortifysoftware.com/security-resources/rats.jsp |
ツールで行う検査は、人間が実施する場合に比べて低コストだが、半面、検査の質が低く、ツールの特性上単一のツールでは検出できない脆弱性もあるので、ツールの特性を理解した上で利用していただきたい。具体的には検査で使うツールが、要件で求められているセキュリティ対策が実施されていることを確認するツールなのか、見つけたい脆弱性を検出できるツールなのか、といったことを検討した上で利用しないと、後で「時間と費用の無駄だった」ということになりかねないので気を付けてほしい。
では、セキュリティベンダーの検査サービスはどうか。まず、市販の検査ツールを使ってスキャンするだけのサービスは、あまり検査品質が高いとは言いにくい。理由は先ほど検査ツールのところで述べた通りで、現時点では万能のツールは存在しないからだ。やはりツールに加えて、相応の技術者が対象のWebアプリの特性を考慮しながら、経験と勘を駆使して検査をしているようなところは、検査の品質が高い。ただし、それと同時に料金も高額になってしまう。
※手前みそであるが、ラックのWebアプリ診断サービスは、自社開発のツールに加えて、検査スペシャリストによる手動診断を実施している。
Webアプリの欠陥が見つかるのなら早い方がよいと考えるのに異論の余地はないだろう。読者の関係するシステムがまだリリース前なら、ぜひソースコード検査の実施を推奨したい。
ソースコード検査では、アプリケーションの設計に依存するセッション管理の不備やエラー処理の不備、CSRF(クロスサイトリクエストフォージェリ ※注2)などを見つけるのは不得手だが、XSS(クロスサイトスクリプティング ※注3)やSQLインジェクションなどの入出力処理に関する脆弱性を検出することは得意である。これらの脆弱性はプログラマーによって作り込まれることが多く、確認すべき個所も膨大だ。そのため、ツールによって早い時期に、全プログラムを対象に検査を行うことで、機能面の不具合と同じように修正することがポイントとなる。脆弱性を速やかになくすことは、リリース後に対応することに比べて、手戻りコストを大幅に削減できるだろう。いずれにしても早期に、ソースコード検査とブラックボックス検査を組み合わせて実施することで、最小のコストでのセキュアなWebアプリ構築に役立ててほしい。
※注2 Webサイト間を横断して悪意のある不正スクリプトを埋め込み、サイトを閲覧したユーザーとサーバ双方に被害を与える攻撃手法。
※注3 WebサイトにHTTPリクエストや不正スクリプトを仕込むことによって、閲覧したユーザーに別のサイト上で意図しない操作を実行させる攻撃手法。
Webアプリの防御に特化したWAF
次にWAFについて説明しよう。まず、ファイアウォール(以下、FW)、IDS/IPS、WAFの簡単な役割、対象レイヤーの違いを説明しておく(図5)。FWは、送信元とあて先のIPアドレス(レンジ指定も可)やプロトコル別に通信を許可/遮断させることができる。通常は、各サーバが提供しているサービスのみに接続できるよう設定されている。IDS/IPSは、FWが許可している通信の範囲で各デーモンやミドルウェアなどを対象とした攻撃を検知、遮断することができる。WAFは、プロトコル上はHTTP、HTTPSに特化しており、ミドルウェアに対する攻撃ではなく、Webアプリそのものに対する攻撃を検知、遮断することができる。
公開されているWebシステムの構成の中には大抵、通常のFW、IDSまたはIPSが既に含まれているはずである。それなのに、さらにWAFなるものが必要なのだろうか? 常に「Yes」というわけではないが、WebアプリはFWでは守れないし、IDS/IPSを普通に導入しているだけでも守れない。自社のWebアプリにはセキュリティホールはないと考えるユーザーもいるが、残念ながら人間のやることにミスは付きものである。業界内における自社の地位、Webアプリが扱う情報の重要性などを考慮したときに万が一にも止まっては困るということであれば、“もしも”に備えておくことを検討する必要はあるだろう。
WAFと聞いて読者が想像するのはネットワーク型だと思うが、実はホスト型もある(表2)。一般的にホスト型の方が安く、導入しやすいのだが、これまで無事に動作していた環境に新たなプログラムをインストールするのはちゅうちょしてしまうものだ。実際、対象サーバのリソース消費、パフォーマンス低下、WAFプログラムの異常終了などのリスクは高まる。しかし、テスト環境における各種のテストを行い、通常の障害対応のようにシステム運用を整備しておけば、それらのリスクと向き合うことができるだろう。
| ホスト型 | ネットワーク型 | |
|---|---|---|
| サーバOSとの依存性 | 依存する | 依存しない |
| サイト内に複数Webサーバが存在する場合 | 各サーバにインストールが必要 | 1台でOK(冗長性を考慮しなければ) |
| ネットワーク構成の変更 | 不要 | 必要 |
| サーバ負荷 | 掛かる | 掛からない |
| 導入に必要な知識(※) | 比較的容易 | ネットワーク知識が必要 |
| 製品価格 | 安い | 高い |
| ※詳細な制御をする場合はWebアプリの特性を考慮する必要あり | ||
どちらのタイプのWAFを導入するにしても、対象のWebアプリの特性を考慮して検知、遮断のルールを設定することには変わりない。製品によっては学習モードを装備し、ホワイトリストを自動作成してくれるものもあるが、一般的にはパラメータのレングスの上限を設定し、しきい値を超えた場合を不正アクセスと見なす設定から始め、例外のページ(Webアプリ)のみ個々に適切な値をセットし、運用しながらそれらをチューニングしていくのだ。
余談だが、WAFはアプリケーション層専用の機器だが、価格的にはまだまだ高い。もし皆さんの関係するサイトにIPSが既に導入されているのであれば、機器の種類、運用体制、トラフィック状況など多少制限はあるが、われわれを含む一部のセキュリティベンダーが提供している監視サービスに切り替えることで大きな追加投資をせずにIPSをWAFとして活用することもできる。
Webアプリ対策の神髄は、セキュアなWebアプリを作ることである。しかし、これは思っているほど簡単なことではない。なぜなら、ほとんどの部分を人間が作り、しかもミスが1つも許されないからである。現実的な手段としては、欠陥がどこかにあるという前提で、定期的に欠陥を検出するための対策や、それらの欠陥を攻撃されたときにいち早く検知して被害を小さくするための歯止め策、あるいは遮断する対策などを、バランスよく実施することである。
<筆者紹介>
大野祐一
ラック サイバーリスク総合研究所 データベースセキュリティ研究所 所長、CISSP
約10年間にわたり、情報系システム開発部門にてクライアント/サーバシステム、Webアプリケーション開発業務を経て、2004年からデータベースに対する脅威・脆弱性およびそれらに対する防御手法の研究、啓発活動に従事。著書に『最新!!データベース不正アクセスレポート』(SRC出版)がある。
Copyright © ITmedia, Inc. All Rights Reserved.
この記事の著者
関連記事
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
急増する「AIはこう言ってる」マン 判断を狂わせる「AI忖度」を防ぐには?
-
2
取手市がVDIと決別した理由 更改費用「4倍超」を約1.7倍に圧縮
-
3
「Excel至上主義」の終わらせ方 丸2日の手作業地獄から情シスと現場を救うには
-
4
221人調査で分かった「情シス最大のストレス」は?
-
5
「データストレージの活用方法」に関するアンケート
-
6
「AI時代の統合基盤・エンタープライズAI管理」に関するアンケート
-
7
自宅のWi-Fiが「遅い」「途切れる」本当の原因は? Dellが推奨する鉄則
-
8
本当に安いPCで十分か? “すぐ重くなる”を防ぐノートPC選びの絶対条件
-
9
100億円の「Linux更新」を回避 みずほ銀行が選んだ“おきて破り”のRHEL延命策
-
10
Claudeの不可視透かしに批判殺到 著作権消失や誤判定に潜む企業リスク
ホワイトペーパーランキング PR
-
1
年収2000万「クラウドセキュリティのプロ」になれる資格とは
-
2
セキュリティソフトをすり抜ける標的型攻撃メール、不審メールの見破り方とは?
-
3
Windows Updateの通信集中で回線が逼迫、ネットワーク刷新事例に学ぶ解決策
-
4
財務を戦略的組織へ進化させるAI活用術、4つの主要な障壁と解消方法
-
5
「NAS」「SAN」「DAS」は何が違う? いまさら聞けないストレージの基礎
-
6
“あのファイル転送”で暗躍するノーウェアランサム
-
7
標的型攻撃メールを見破るには? サンプル文面を例に傾向を解説
-
8
商用利用の安全性を確保し大量のコンテンツを高速で生成する、AI活用の秘訣
-
9
マンガで解説、1日で生成AI環境を構築できるワークショップの中身とは?
-
10
Dark AIが台頭する時代の新発想、「より高度なAIで対抗する」具体的方法とは?
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー