[PR]小規模ECサイトに最適なWAF、SiteGuard Lite

徳丸浩の日記


2008年05月02日 複文が利用できるデータベースの調査

_SQL Serverが狙われるには理由がある

SQLインジェクションを利用したWebサイトの改ざん事件が頻発している。標的となったサイトの多くがIIS(ASP)とSQL Serverの組み合わせを利用していることから、今回の攻撃がIISやSQL Serverの脆弱性を利用したものだと言う報道があるらしい。
これに対して、マイクロソフトが反論している。 「SQLインジェクション攻撃とIISは無関係」とMicrosoft

 しかしMicrosoftはセキュリティ対策センター(MSRC)のブログで、今回のWebサーバ攻撃では「未知の脆弱性や新しい脆弱性は悪用されていないことが当社の調査で分かった」と説明。攻撃はIISやSQL Serverの脆弱性を突いたものではなく、アドバイザリー951306の脆弱性とも無関係だとした。

これはまぁ、もっともな内容だと思う。しかし、疑問は残る。なぜ、IISとSQL Serverの組み合わせが狙われるのか。これに対する理由は色々と憶測できるが、私はSQLインジェクションによるデータ改ざんを行う上で重要となる「SQLの複文」に注目している。 SQLインジェクションによるサイト改竄 2008-03-20 - T.Teradaの日記によると、 Neil Carpenter’s Blog : Anatomy of a SQL Injection Incident, Part 2: Meatを引用する形で、今回の攻撃を以下のように説明している。

非常におおざっぱに言うと、以下のような感じです。

1. リクエストを送ってみて、SQLインジェクション脆弱性があるか調べる。
2. 脆弱性がある場合、それを突いて、全テーブルの、全カラムの、全レコードの値を改竄する*1。具体的には、DB格納値の末尾に「<script src=http://www.211796...(省略)」のような攻撃コードを追加する。
3. DBのデータをエスケープせずにHTMLに出力している箇所があると、挿入されたJavaScriptがユーザのブラウザ上で動作して、これが悪さをする。

この2番目のフェーズでは、T-SQL(Transact-SQL)というSQL Serverの拡張SQLが利用されているのだが、SQLインジェクションにより以下のようなリクエストでこれを実行している。

d=z';DECLARE%20@S%20NVARCHAR(4000);SET%20【略】

すなわち、セミコロンにより複数のSQLを記述する「複文」が利用されている。

ところで、SQL Injection Cheat Sheetという文書によると、言語とデータベースの組み合わせにより、この複文が利用できるか否かが異なっている。

SQL Server MySQL PostgreSQL Oracle
ASP
ASP.NET
PHP ×
Java ×
凡例:
○:複文に対応
×:複文に非対応

ごらんのように非常に不完全な表であるので、手元の環境で補完してみることにした。ただし、自宅のPCがWindowsXP Home Editionなので、IISを実行することができない。そのため、ASPとASP.NETは調査から除外し、代わりににPerlを追加して、SQL Server、MySQL、PostgreSQl、Oracleについて、調査を行った。

SQL Server MySQL PostgreSQL Oracle
PHP × ×
Java × ×
Perl × ×
凡例:
○:複文に対応
△:更新系のSQLであれば複文に対応
×:複文に非対応

事前の予想では、言語依存もあるのかなと思っていたのだが、確認してみると言語依存はほとんどなく、データベースの種類によって決まるようだ。

SQLインジェクションによって複雑なことを行う(とくに更新系)ためには、複文が利用できるかどうかが問題となる。広く利用されているデータベースでは、SQL ServerとPostgreSQLで複文が利用できることは、攻撃者の立場から考えると、ターゲットにしやすいプラットフォームということになる。PostgreSQLは日本では人気があるが、世界的には他の三種のデータベースほど普及していない。このように考えると、SQL Serverが狙われる背景には、(Microsoftの責任とは言えないにしても)、それなりの理由があるのだと考える。



[PR]小規模ECサイトに最適なWAF、SiteGuard Lite

ockeghem(徳丸浩)の日記はこちら
HASHコンサルティング株式会社

最近の記事

最近のツッコミ

Google