Webアプリケーションの脆弱性対策はどうするべきか?

2017年9月28日(木) ノウハウ

<ちょい読み>
・webアプリケーションの脆弱性は開発段階から脆弱性を出さないように取り組むことが重要
・定期的な脆弱性診断ツールでの、脆弱性の有無をチェックすることでリスクを軽減
・脆弱性が発覚した場合は直ちに対処法を検討し、脆弱性を無くす


Webアプリケーションという言葉を聞いたことはありますか?
その単語自体はあまり聞き覚えがないものかもしれません。
Webアプリケーションとは、ブラウザを通して利用できるサービスやアプリケーションのことを指します。gmail、インターネットバンキング、検索エンジンなどが想像しやすいのではないでしょうか。
WebアプリケーションはWebブラウザをHTTPを通じてWebサーバにアクセスして利用されています。
サービスによって様々ではありますが、Webサーバに重要な情報が置かれている場合もあり攻撃者にとって標的となる可能性があります。
Webアプリケーションに脆弱性がある場合は、攻撃者にとって真っ先に狙われてしまうでしょう。そういった事態を避けるためにもWebアプリケーションを提供する人々は脆弱性を出さないための対策が必要になってきます。
ここでは、Webアプリケーションの脆弱性対策について、対策の基本的な考え方、ツールまたは脆弱性診断サービスといったことについて説明します。

Webアプリケーションの脆弱性とは

いずれも、脆弱性の存在する安全でないWebアプリケーションが、インターネットに公開されることで、攻撃者に利用されます。
IPA(独立行政法人情報処理推進機構)では、主なWebアプリケーションの脆弱性として以下の11個を挙げています。

①SQLインジェクション

②OSコマンドインジェクション

③パス名パラメータの未チェック/ディレクトリ・トラバーサル

④セッション管理の不備

⑤クロスサイト・スクリプティング

⑥クロスサイト・リクエスト・フォージェトリ

⑦HTTPヘッダ・インジェクション

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

⑨クリックジャッキング

⑩バッファオーバーフロー

⑪アクセス権限や認可制御の欠落

IPAではそれぞれの脆弱性で発生しうる脅威や、特に注意が必要なウェブサイトの特徴を解説し、脆弱性の原因そのものをなくす根本的な解決策、攻撃による影響の低減を期待できる対策を示しています。
「安全なウェブサイトの作り方」
https://www.ipa.go.jp/security/vuln/websecurity.html
例えば、⑤クロスサイト・スクリプティングはWebアプリケーションにスクリプトを埋め込むことが可能な脆弱性がある場合、攻撃者によって不正に埋め込まれたスクリプトがユーザーのブザウザで実行されてしまう、といったものです。
この場合、偽物のページを表示する、任意のCookieをブラウザに保存させられるといった脅威が発生します。
主に検索のキーワード表示画面、個人情報登録時の確認画面などユーザーの入力内容を処理してWebページとして出力する際に問題が発生し脆弱性として攻撃されてしまいます。

クロスサイト・スクリプティングを防ぐために提案されている対策は
・URLを出力する時は「http://」や「https://」で始まるURLのみ許可する。
・<script>…</script>要素の内容を動的に生成しない。
といったものがあります。
これはあくまで一例ですが、開発を行う段階で脆弱性を出さないようなシステム作りをすることが大切です。

脆弱性対策の考え方

ユーザーの安全を守るためにサービス提供側が行わなければならないことは潜在的な脆弱性を明らかにし、対策するために脆弱性診断を行うこと。
それに加えて、脆弱性攻撃が発生した際に、その被害を防止するためにWAF(Web Application Firewall)のを利用することです。
どちらか一方では不十分であり、2段階での対策が必要でしょう。

脆弱性診断ツールについて

無料で利用可能な脆弱性診断として、以下の2つを紹介します。
MyJVN セキュリティ設定チェッカー
MyJVN脆弱性収集ツール
いずれもIPAが提供しています。
まだ何も脆弱性診断が行われていないのであれば、上のツールをまず試してみることをおすすめします。

JVNと呼ばれる脆弱性対策情報をベースとしているので、情報の品質は高いといえます。
ただし、ツールから出力された情報の内容によっては、専門技術者の判断が必要になる場合があります。
もし自前で専門技術者を用意できない場合は、次の商用サービスの利用も検討する必要があります。

脆弱性診断の商用サービスについて

しかし、上のツールの場合、企業などの組織では不十分な場合があります。
複雑なシステムでは専門技術者による診断が必要になるでしょう。また、例えばクレジットカードの取扱を必要とする場合にはPCI DSSといったように、コンプライアンス対応のツールが必須となるなど、商用サービスを選択が不可欠です。
また、商用サービスでは、ツールによる診断だけでなく、攻撃者の視点で擬似的な攻撃を実施し、ログ解析を実施することにより潜在的な脆弱性を発見するなど、きめ細かい診断が受けられます。

Webアプリケーションの脆弱性を出さないようアプリケーション開発は非常に重要な取り組みの一つです。皆さんも脆弱性を出さないようなシステム作りを心がけましょう。

Writer:SecurityTIMES編集部