| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
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の責任とは言えないにしても)、それなりの理由があるのだと考える。
昨今の改ざん事件で MS-SQLサーバが狙われているのは、マルチステートメント(複文; multiple SQL statements) がサポートされているからだというご指摘。 マルチステートメントは、Microsoft SQL Server と PostgreSQL と Sybase がサポートしていて、Oracle と MySQL ..
SQLインジェクションによって複雑なことを行う(とくに更新系)ためには、複文が利用できるかどうかが問題となる。広く利用されているデータベースでは、SQL ServerとPostgreSQLで複文が利用できることは、攻撃者の立場から考えると、ターゲットにしやすいプラットフォームと
複文を記述するには、セミコロン「;」で複数のSQL文を区切ると説明していたが、マイクロソフトの公表している文書によると、SQL Serverにおいては、複文の区切りにセミコロンは必要ないことが分かったので報告する
PostgreSQLでは、複文が利用可能かどうかはAPIによって(というかプロトコルによって)決まります。拡張問い合わせでは複文を使うことはできません。 PQexecと異なり、PQexecParamsは、文字列内
- http://bakera.jp/ebi/topic/3133 ×581
- http://secure.ddo.jp/~kaku/tdiary/ ×484
- http://www.tokumaru.org/ ×350
- http://b.hatena.ne.jp/HiromitsuTakagi/ ×119
- http://okyuu.com/ja/tips/1546 ×111
- http://bakera.jp/ebi ×58
- http://www.tokumaru.org/JavaScript/ ×55
- http://secure.ddo.jp/~kaku/tdiary/200805.html ×42
- http://www.hash-c.co.jp/ ×40
- http://b.hatena.ne.jp/HiromitsuTakagi/20080503 ×35
- http://d.hatena.ne.jp/ockeghem/20081112/p1 ×34
- http://d.hatena.ne.jp/ockeghem/ ×32
- http://db.designiddatabase.net/data/frame_125718.a... ×26
- http://d.hatena.ne.jp/sonodam/ ×24
- http://secure.ddo.jp/~kaku/tdiary/20080508.html ×21
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×18
- http://d.hatena.ne.jp/teracc/20080914 ×17
- http://yamagata.int21h.jp/d/?date=20080503 ×16
- http://postgresql.g.hatena.ne.jp/iakio/20080627/12... ×15
- http://stressfulangel.cocolog-nifty.com/stressful_... ×15
- http://d.hatena.ne.jp/ockeghem/20071210/p1 ×14
- http://yamagata.int21h.jp/d/ ×13
- http://del.icio.us/popular/security ×12
- http://db.designiddatabase.net/data/frame_123541.a... ×11
- http://d.hatena.ne.jp/sonodam/20080503/p3 ×10
- http://www.kt.rim.or.jp/~kbk/zakkicho/index.html ×10
- http://d.hatena.ne.jp/teracc/ ×10
- http://d.hatena.ne.jp/ockeghem/20090302/p1 ×9
- http://tokumaru.org/ ×9
- http://d.hatena.ne.jp/hasegawayosuke/20071226/p1 ×9
- http://press.eek.jp/result/アップローダー/age アップローダー ×8
- http://www.tokumaru.org/d/20080502.html ×8
- http://www.tokumaru.org/was/ ×7
- http://b.hatena.ne.jp/t/sqlinjection ×7
- http://stressfulangel.cocolog-nifty.com/ ×7
- http://b.hatena.ne.jp/t/SQLインジェクション ×6
- http://b.hatena.ne.jp/ockeghem/ ×6
- http://press.eek.jp/result/gif/gif ファイル ×6
- http://d.hatena.ne.jp/ockeghem/about ×5
- http://d.hatena.ne.jp/kazuhooku/20080623/121418874... ×5
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×5
- http://nogue.cocolog-nifty.com/diary/2007/05/refiz... ×5
- http://press.eek.jp/result/gif/gif 変換 ×5
- http://b.hatena.ne.jp/keyword/SQLインジェクション ×5
- http://okyuu.com/en/tips/1546 ×5
- http://b.hatena.ne.jp/HiromitsuTakagi/SQLインジェクション/... ×5
- http://www.tokumaru.org/index.htm ×5
- http://b.hatena.ne.jp/hotentry?cname=web ×5
- http://stressfulangel.cocolog-nifty.com/stressful_... ×5
- http://d.hatena.ne.jp/teracc/searchdiary?word=*[セキ... ×4
- http://search.live.com/results.aspx?q=プログラムの実行 遅くな... ×4
- http://bakera.jp/ebi/2008/5/8 ×4
- http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0... ×4
- http://b.hatena.ne.jp/HiromitsuTakagi/?of=20 ×4
- http://www.math.sansu.org/u/diary/?date=200706 ×4
- http://www.409n.com/ ×4
- http://www.tokumaru.org/JavaScript/index.htm ×4
- http://bloger.x0.com/result/iis/iis asp.net ×4
- http://b.hatena.ne.jp/ockeghem/SQL Server/ ×3
- http://b.hatena.ne.jp/entrylist?sort=hot&of=100&th... ×3
- http://reader.livedoor.com/subscribe/http://www.to... ×3
- http://clip.livedoor.com/page/2171236/SQL Serverが狙... ×3
- http://www.tokumaru.org/techterm/ ×3
- http://labs.ceek.jp/hbnews/list.cgi ×3
- http://www.kt.rim.or.jp/~kbk/zakkicho/ ×3
- http://www.hash-c.co.jp/index.html ×3
- http://press.eek.jp/result/gif/gif 画像 ×3
- http://press.eek.jp/result/gif/gif jpeg ×3
- http://press.eek.jp/result/log/log c言語 ×3
- http://fastladder.com/subscribe/http://www.tokumar... ×3
- http://b.hatena.ne.jp/t/sql injection ×3
- http://b.hatena.ne.jp/cnomiya/sqlserver/ ×3
- http://d.hatena.ne.jp/ockeghem/?of=5 ×3
- http://b.hatena.ne.jp/keyword/ASP.NET ×3
- http://d.hatena.ne.jp/ockeghem/20071021/1192986523... ×3
- http://clip.nifty.com/entry/aa202f42f3cdc64a8c4626... ×3
- http://labs.cybozu.co.jp/blog/kazuho/archives/2007... ×3
- http://secure.ddo.jp/~kaku/tdiary/index.rdf ×3
- http://press.eek.jp/result/gif/gif jpg ×2
- http://b.hatena.ne.jp/keyword/JavaScript ×2
- http://tokumaru.org/d/20070614.html ×2
- http://d.hatena.ne.jp/ockeghem/20071126/p3 ×2
- http://d.hatena.ne.jp/ockeghem/20071010/1192009917... ×2
- http://b.hatena.ne.jp/kaiton/favorite ×2
- http://b.hatena.ne.jp/keyword/スクリプティング ×2
- http://b.hatena.ne.jp/keyword/ASP ×2
- http://hatebladder.inucara.net/url/http://www.toku... ×2
- http://d.hatena.ne.jp/teracc/searchdiary?of=10&wor... ×2
- http://postgresql.g.hatena.ne.jp/iakio/?word=*[PHP... ×2
- http://tokumaru.org/d/20070717.html ×2
- http://labs.ceek.jp/hbnews/ ×2
- http://b.hatena.ne.jp/sasahira/favorite ×2
- http://b.hatena.ne.jp/r-yam/favorite ×2
- http://d.hatena.ne.jp/bgvillea/20080510 ×2
- http://b.hatena.ne.jp/t/セキュリティ ×2
- http://d.hatena.ne.jp/black_knight/ ×2
- http://press.eek.jp/result/ie7/ie7 マイクロソフト ×2
- http://labs.ceek.jp/hbnews/list.cgi?k=5 ×2
- http://d.hatena.ne.jp/teracc/20070715 ×2
- http://bloger.x0.com/result/buzz/buzz clip ×2
- mod_imagefight ×32 / SQL 複文 ×19 / javascript break ×18 / 徳丸浩 ×16 / 徳丸 日記 ×15 / SQLの複文 ×10 / sql 複文 ×9 / 画像 XSS ×9 / mysql 複文 ×8 / sqlserver 攻撃 ×7 / Java DNS Rebinding ×6 / キーワード不明 ×6 / postgres 複文 ×5 / 徳丸 ×5 / sql server 複文 ×4 / 複文 SQL ×4 / PHP 画像XSS ×4 / 徳丸 浩 日記 ×4 / javascript switch ×4 / <script src<script src=http:// ×4 / DNS Rebinding ×4 / ループ ラベル ×4 / mod_imageFight ×4 / SQLインジェクション sqlserver ×4 / oracle 複文 ×4 / 改ざん SQL インジェクション ×4 / http://www.tokumaru.org/d/20080502.html ×4 / "SQL インジェクション" PQexecParams ×3 / クロスサイトスクリプティング 画像 埋め込み ×3 / 画像 スクリプト 埋め込まれた alert ×3 / MySQL 複文 ×3 / 複文 SQl ×3 / gif xss ×3 / oracle sqlserver 脆弱 ×3 / 徳丸 XSS ×3 / asp;DECLARE%20 ×3 / IIS Server 5.0 改竄 ×3 / 画像 スクリプト 埋め込まれた 実行 ×3 / 正規表現 &のエスケープ ×3 / iis sqlserver xss ×3 / image ファイト ×3 / .asp injection Sqlserver ×3 / dns rebinding ×3 / PostgreSQL SQL Server ×3 / sqlサーバー 画像パス ×2 / gif サニタイズ php ×2 / PQexecParams ×2 / XSS 対策 入力チェック サニタイズ ×2 / Microsoft SQL Server SET インジェクション ASP ×2 / twitter ×2 / Mysql 複文SQL ×2 / Multiple SQL ×2 / SQLインジェクション 複文 ×2 / javascript for break ×2 / sqlinjection 複文 ×2 / FizzBuzz プログラム ×2 / Content-Type マジックバイト ×2 / sql server 複数のSQL文 ×2 / javascript label ×2 / sql servevr エスケープ ×2 / Webアプリケーションが狙われる理由 ×2 / Remote File Inclusion Attack ×2 / oracle 暗黙の型変換 ×2 / sql マルチステートメント ×2 / 金床 DNS Rebinding ×2 / 暗黙の型変換 sqlserver ×2 / SQL DATABASE 内容改竄 ×2 / DB 予約語 物理名 ×2 / sql server 攻撃コード ×2 / sql あるか ×2 / データベース 実行速度 ×2 / ASP.NET sqlserver ×2 / SQL Server 暗黙 型変換 性能 ×2 / asp.net postgres 利用 ×2 / javascript if 抜ける ×2 / html content-type 画像 拡張子 ×2 / SQL 複文 oracle ×2 / SQl 複文 ×2 / SQLサーバ サニタイズ ×2 / javascript ラベル ×2 / サニタイズ sql java ×2 / oracle php sqlサニタイズ ×2 / SQLインジェクション Sybase 複文 ×2 / SQL インジェクション セミコロン 改ざん ×2 / session_set_save_handler postgresql ×2 / bmp画像形式のヘッダ 16進数 ×2 / oracle マルチステートメント ×2 / データベース できること ×2 / SQLインジェクション SQLServer IIS ASP ×2 / DNS pinning TTL ×2 / Webアプリケーション PRG ×2 / ウェブアプリケーションセキュリティ ×2 / SQLインジェクション 末尾 ×2 / sqlインジェクション 複文 ×2 / javascript gif 実行 表示 アップロード ×2 / SQL マルチステートメント ×2 / DECLARE%20@S%20NVARCHAR(4000) ×2 / SQLインジェクション Microsoft SQL Serverが狙われ ×2 / マルチステートメントSQL ×2 / javascript break; ×2
| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |