前編に続き、講演内容を中心に、Webアプリケーションのセキュリティに関する国際的なカンファレンス「OWASP AppSec USA 2013」の模様をお伝えします。
2013年11月18日から11月21日の4日間にわたり、米国ニューヨークでWebアプリケーションのセキュリティに関する国際的なカンファレンスである「OWASP AppSec USA 2013」が開催されました。前回の記事に続き、そのトレーニングや講演の模様を紹介していきます。
筆者らが受講した2つ目のトレーニングは、「Web Application Defender’s Cookbook: LIVE」です。このコースはModSecurityを利用していかに攻撃を防ぐかについてのレクチャーです。
「ModSecurity」はオープンソースで開発されているWeb Application Firewall(WAF)の1つです。2002年に最初のバージョンがリリースされ、2011年より、トラストウェイブ(Turstwave)のスパイダーラボ(SpiderLabs)が開発を行っています。
ModSecurityでは、攻撃を検知するための基本的なルールセットが準備されており、「Core Rule Set」(CRS)と呼ばれています。現在はOWASPがCRSをメンテナンスしています。
トレーニングはハンズオン形式で行われました。まず、講師が典型的なWebアプリケーションへの攻撃手法を解説し、その後ModSecurityを使い、解説した攻撃をどう検知するかについての演習を行いました。ハンズオンではOWASPが開発した脆弱なアプリケーションをインストールした仮想マシン、「OWASP Broken Web Applications」を利用しました。
講師は2012年に出版された「Application Defender's Cookbook: Battling Hackers and Protecting Users」の著者でもある、トラストウェイブのライアン・バーネット氏で、トレーニングもこの本に沿って進められました。
ModSecurityは前述の通りオープンソースとして開発されてきており、ユーザーからのフィードバックが直接開発者に届きやすいこともあって、WAF製品の中でも機能が充実している部類に入ります。また、無償であるため、セキュリティ対策にコストを掛けにくい中小企業や個人にとっては導入しやすいといえます。
しかし、日本語の文献が少ないこと、また、高機能であるが故に攻撃を検知するルールが複雑でメンテナンスにはスキルを要することから、特に国内のユーザーにとっては導入のハードルが高いように思えます。
WAFとしての基本的な機能については、IPAの「WAF読本」などを参照していただくこととして、ここでは、比較的新しい機能として3つの機能をピックアップして紹介したいと思います。
この機能は、サーバーへのリクエストに含まれるパラメーターの値を学習しておき、通常パラメーターが取るべき値と異なる値が来た場合、アラートを上げる機能です。
例えば、以下のようなパラメーター「id」を受け取るWebアプリケーションがあったとします。
http://localhost/index.php?id=0001
Real-time Application Profilingでは、まず通常のアクセスパターンを学習する必要があります。ここでは例として、以下のようなアクセスを通常のものとして学習させたとします。
http://localhost/index.php?id=0001 http://localhost/index.php?id=0002 http://localhost/index.php?id=0003 ……
これにより、ModSecurityは「idの正常な文字列長は4であること」を学習します。この状態で、このアプリケーションに対して
http://localhost/index.php?id=<script>alert(1);</script>
というアクセスをすると、idに入る文字列の長さが26であるため、異常として検知し、以下のようなログを出力します。
ModSecurity: Warning. Match “.*” at TX:ARGS:id_max_length_violation. [msg "Invalid Parameter Length ? Value is Above Normal Range"] [data "Normal Maximum Length for Parameter (ARGS:id): 4 and Current Length: 26"] [tag "POLICY/PARAMETER_VIOLATION"] [uri "/index.php"]
msg欄には「Invalid Parameter Length」と出力されており、通常のアクセスに比べてパラメーター値の文字列長に異常があることが分かります。また、data欄には異常に関する詳細として、(文字列長が)通常は最大でも4であるにもかかわらず、26であるようなアクセスが生じたことが出力されています。
このルールではパラメーター値の長さを特徴として検知しましたが、他にも「パラメーターの名前の重複」「パラメーターの個数」「パラメーター値のタイプ(数値、アルファベット、メールアドレスなど)」についての異常を検知してアラートを上げるルールもあります。
通常ならば、管理者が手動でWAFに設定を加え、サーバーに対する各リクエストの各パラメーターのルールを追加しなければ異常を検知できません。しかし、このReal-time Application Profiling機能ではそういった設定も必要もなく、非常に容易にパラメーター異常を検知できるようになります。
この機能は、Webサーバーが出力するデータをチェックして、Webサーバーやデータベースなどの設定が漏えいしていないかどうかを調べることができます。
例えば、SQLインジェクション攻撃によってデータベースの情報が出力された場合、ログには以下のようなアラートが出力されます。
[msg "SQL Information Leakage"] [data "Matched Data: You have an error in your SQL syntax found within RESPONSE_BODY: <pre>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1</pre>"] [tag "OWASP_CRS/LEAKAGE/ERRORS_SQL"]
msg欄とdata欄から、MySQLへのアクセスで発生したSQLシンタックスエラーの発生がそのままWebアプリケーションの外部に漏えいしていることが分かります。
現在のModSecurityでは、「IPブラックリスト」と連携し、クライアントのIPアドレスがブラックリストに含まれているか確認し、その結果に応じてアクセスを拒否したり、ログに記録したりすることが可能になっています。その他にも、「GeoIPデータ」(IPアドレスの地理情報)と連携して、同一セッション中におけるIPアドレスの地理情報の変化から異常を検知することも可能です。
このように高度な機能を多く備えたModSecurityですが、使いこなすにはかなりのスキルを必要とします。まずは、シンプルな設定で利用可能なReal-time Application Profilingから試してみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.