SQLインジェクションをWAFで対策する際の失敗例①

セキュリティ

前の記事でWAFの説明をしましたが、フリーのWAFについては、以下の勉強会で話した内容です。

第9回ゼロから始めるセキュリティ入門 勉強会(発表・LT大歓迎)

この勉強会ではWAFの話をしていますが、きっかけとなったのはとあるSQLインジェクションを検出の仕方が印象的だったからです。

今回は勉強会で話した内容を記事にしていきます。

なお、内容については、個人的な見解であることをあらかじめご了承ください。

検出したSQLインジェクションについて

SQLインジェクションそのものについては、そんなに珍しい脆弱性ではなく、今でもなお、月に一度は見る脆弱性です。
※この話をすると結構驚かれるんですが、一般的にはそんなに見かけないんですかね。

ただ、以下のように印象的なパターンで検出したのです。

あるサイトの診断を実施、そのサイトはホスト毎にHTTPとHTTPSを使用しており、個人情報を含まない箇所はHTTPを、個人情報を扱う箇所はHTTPSの使用していました。
※HTTPを使用している方をAホスト、HTTPSを使用している方をBホスト仮定します。

SQLインジェクションは、その両方のホストで見つかっています。

SQLインジェクションは以下の記事で書いたとおり、「sqlmap」を使用するとDBから情報をごっそり取得することが可能です。

sqlmapを使ってデータベースの中身をのぞいてみよう!

しかし、「sqlmap」でのDBから情報取得はA、Bサイトの片方でしかできませんでした。

クエスチョン

さてここで問題です!

AサイトとBサイトどちらのSQLインジェクションで「sqlmap」を使用して情報を取得できたのでしょうか?

<ヒント>

問題の肝となるのはWAFです。

また、ここで使用されていたWAFは「ModSecurity」ではないです。

WAFの挙動として、サイトでWAFを使用している場合、SQLインジェクションの挙動が見つかってもsqlmapで情報を取得できない場合があります。(脆弱性診断をしているとちょこちょこ見かけます。)

関数やselect、from等が入った場合にWAFで遮断されてしまうためかと考えています。
例:「and 1=1」、「and 1=2」のようなみたいな文字列は遮断しないが、concat()や、from dual等は遮断するWAFもあります。製品やその設定によって変わってきます。

勉強会でもこの話をして、回答を求めたのですが、正解はありませんでした。(そもそも回答してくれる人も少なかった・・・

IPAの情報処理安全確保試験士の勉強をしているorしていた方ならなるほどね~となると思います。

同じ話を知り合いにしてみたところ

私の知り合いの脆弱性診断、ペネトレーションとかをやっている人と飲んだ際にこの話をしましたが、結構面白い話題だったらしく、大きな勉強会で話してみたらとのことでした。
※人が多いところで話す予定は今のところありません。

答えについては次回に載せます。次回までにコメントとかで回答をいただけたら嬉しいです。

正解者は実際にお会いして飲みにでも行く際に一杯奢ります!

また、不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

コメント