| 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 ×552
- http://secure.ddo.jp/~kaku/tdiary/ ×484
- http://www.tokumaru.org/ ×186
- http://b.hatena.ne.jp/HiromitsuTakagi/ ×119
- http://bakera.jp/ebi ×58
- http://www.tokumaru.org/JavaScript/ ×55
- http://okyuu.com/ja/tips/1546 ×39
- http://b.hatena.ne.jp/HiromitsuTakagi/20080503 ×35
- http://d.hatena.ne.jp/sonodam/ ×24
- http://secure.ddo.jp/~kaku/tdiary/20080508.html ×20
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×18
- http://secure.ddo.jp/~kaku/tdiary/200805.html ×16
- http://stressfulangel.cocolog-nifty.com/stressful_... ×15
- http://yamagata.int21h.jp/d/?date=20080503 ×14
- http://d.hatena.ne.jp/ockeghem/20071210/p1 ×14
- http://yamagata.int21h.jp/d/ ×13
- http://del.icio.us/popular/security ×12
- http://www.kt.rim.or.jp/~kbk/zakkicho/index.html ×10
- http://d.hatena.ne.jp/sonodam/20080503/p3 ×10
- http://d.hatena.ne.jp/hasegawayosuke/20071226/p1 ×9
- http://www.hash-c.co.jp/ ×8
- http://press.eek.jp/result/アップローダー/age アップローダー ×8
- http://b.hatena.ne.jp/t/sqlinjection ×7
- http://stressfulangel.cocolog-nifty.com/ ×7
- http://press.eek.jp/result/gif/gif ファイル ×6
- http://b.hatena.ne.jp/t/SQLインジェクション ×6
- http://b.hatena.ne.jp/ockeghem/ ×6
- http://nogue.cocolog-nifty.com/diary/2007/05/refiz... ×5
- http://b.hatena.ne.jp/hotentry?cname=web ×5
- http://b.hatena.ne.jp/keyword/SQLインジェクション ×5
- http://stressfulangel.cocolog-nifty.com/stressful_... ×5
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×5
- http://d.hatena.ne.jp/ockeghem/about ×5
- http://press.eek.jp/result/gif/gif 変換 ×5
- http://bloger.x0.com/result/iis/iis asp.net ×4
- http://www.tokumaru.org/d/20080502.html ×4
- http://www.math.sansu.org/u/diary/?date=200706 ×4
- http://search.live.com/results.aspx?q=プログラムの実行 遅くな... ×4
- http://www.tokumaru.org/JavaScript/index.htm ×4
- http://www.409n.com/ ×4
- http://b.hatena.ne.jp/HiromitsuTakagi/?of=20 ×4
- http://press.eek.jp/result/log/log c言語 ×3
- http://www.tokumaru.org/techterm/ ×3
- http://press.eek.jp/result/gif/gif jpeg ×3
- http://b.hatena.ne.jp/entrylist?sort=hot&of=100&th... ×3
- http://bakera.jp/ebi/2008/5/8 ×3
- http://www.kt.rim.or.jp/~kbk/zakkicho/ ×3
- http://b.hatena.ne.jp/t/sql injection ×3
- http://press.eek.jp/result/gif/gif 画像 ×3
- http://labs.cybozu.co.jp/blog/kazuho/archives/2007... ×3
- http://secure.ddo.jp/~kaku/tdiary/index.rdf ×3
- http://d.hatena.ne.jp/ockeghem/20071021/1192986523... ×3
- http://d.hatena.ne.jp/ockeghem/ ×3
- http://tokumaru.org/ ×3
- http://labs.ceek.jp/hbnews/list.cgi ×3
- http://d.hatena.ne.jp/kazuhooku/20080623/121418874... ×3
- http://b.hatena.ne.jp/keyword/ASP.NET ×3
- http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0... ×3
- http://press.eek.jp/result/ie7/ie7 マイクロソフト ×2
- http://www.tokumaru.org/was/ ×2
- http://a.hatena.ne.jp/yamagata21/ ×2
- http://d.hatena.ne.jp/black_knight/ ×2
- http://b.hatena.ne.jp/entrylist?sort=hot&of=300&th... ×2
- http://b.hatena.ne.jp/r-yam/favorite ×2
- http://b.hatena.ne.jp/keyword/JavaScript ×2
- http://www.hash-c.co.jp/index.html ×2
- http://b.hatena.ne.jp/t/セキュリティ ×2
- http://tokumaru.org/d/20070614.html ×2
- http://www.tokumaru.org/index.htm ×2
- http://db.designiddatabase.net/data/frame_125718.a... ×2
- http://labs.ceek.jp/hbnews/ ×2
- http://b.hatena.ne.jp/entrylist?sort=hot&of=350&th... ×2
- http://b.hatena.ne.jp/keyword/スクリプティング ×2
- http://b.hatena.ne.jp/keyword/ASP ×2
- http://b.hatena.ne.jp/entry/5892458 ×2
- http://hatebladder.inucara.net/url/http://www.toku... ×2
- http://d.hatena.ne.jp/bgvillea/20080510 ×2
- http://b.hatena.ne.jp/kaiton/favorite ×2
- http://postgresql.g.hatena.ne.jp/iakio/20080627/12... ×2
- http://tokumaru.org/d/20070717.html ×2
- http://b.hatena.ne.jp/sasahira/favorite ×2
- http://press.eek.jp/result/gif/gif jpg ×2
- http://fastladder.com/subscribe/http://www.tokumar... ×2
- http://d.hatena.ne.jp/ockeghem/20071126/p3 ×2
- http://d.hatena.ne.jp/teracc/20070715 ×2
- http://bloger.x0.com/result/buzz/buzz clip ×2
- http://reader.livedoor.com/subscribe/http://www.to... ×2
- http://labs.ceek.jp/hbnews/list.cgi?k=5 ×2
- http://d.hatena.ne.jp/ockeghem/20071010/1192009917... ×2
- http://www.kt.rim.or.jp/~kbk/zakkicho/?20080424024... ×1
- http://yamagata.int21h.jp/d/?date=20080603 ×1
- http://tokumaru.org/d/ ×1
- http://search.www.infoseek.co.jp/Web?qt=ieee754 有効... ×1
- http://search.www.infoseek.co.jp/Web?qt=DNSを使った攻撃&... ×1
- http://tokumaru.org/d/20071210.html ×1
- http://yamagata.int21h.jp/d/?date=20080509 ×1
- http://www.tokumaru.org/techterm/index.html ×1
- http://yamagata.int21h.jp/d/?date=20080506 ×1
- http://search.www.infoseek.co.jp/Web?svp=&qt=対策 co... ×1
- http://tinyurl.com/preview.php?num=66zltx ×1
- mod_imagefight ×34 / javascript break ×18 / 徳丸浩 ×17 / 徳丸 日記 ×17 / 画像 XSS ×9 / javascript switch ×7 / SQLの複文 ×7 / Java DNS Rebinding ×6 / SQL 複文 ×6 / キーワード不明 ×6 / 徳丸 ×5 / sql 複文 ×5 / mod_imageFight ×4 / 徳丸 浩 日記 ×4 / <script src<script src=http:// ×4 / 改ざん SQL インジェクション ×4 / SQLインジェクション sqlserver ×4 / PHP 画像XSS ×4 / DNS Rebinding ×4 / ループ ラベル ×4 / 画像 スクリプト 埋め込まれた 実行 ×3 / asp;DECLARE%20 ×3 / 徳丸 XSS ×3 / http://www.tokumaru.org/d/20080502.html ×3 / クロスサイトスクリプティング 画像 埋め込み ×3 / .asp injection Sqlserver ×3 / image ファイト ×3 / dns rebinding ×3 / 正規表現 &のエスケープ ×3 / PostgreSQL SQL Server ×3 / gif xss ×3 / 画像 スクリプト 埋め込まれた alert ×3 / javascript ラベル ×3 / iis sqlserver xss ×3 / 金床 DNS Rebinding ×2 / gif サニタイズ php ×2 / DB 予約語 物理名 ×2 / sql あるか ×2 / sql インジェクション ASP 対策 ×2 / javascript for break ×2 / Content-Type マジックバイト ×2 / 徳丸 浩 ×2 / Remote File Inclusion Attack ×2 / SQL Server 暗黙 型変換 性能 ×2 / html content-type 画像 拡張子 ×2 / javascript if 抜ける ×2 / FizzBuzz プログラム ×2 / XSS 対策 入力チェック サニタイズ ×2 / SQLインジェクション 複文 ×2 / asp.net postgres 利用 ×2 / ウェブアプリケーションセキュリティ ×2 / SQLインジェクション 末尾 ×2 / プログラム書法 ×2 / SQLサーバ サニタイズ ×2 / C言語 16進ダンプ プログラム ×2 / Mysql 複文SQL ×2 / oracle 暗黙の型変換 ×2 / Microsoft SQL Server SET インジェクション ASP ×2 / javascript gif 実行 表示 アップロード ×2 / javascript label ×2 / oracle sql 数値チェック ×2 / SQL DATABASE 内容改竄 ×2 / javascript break; ×2 / 複文 SQL ×2 / DNS pinning TTL ×2 / twitter ×2 / bmp画像形式のヘッダ 16進数 ×2 / SQL インジェクション セミコロン 改ざん ×2 / Webアプリケーション PRG ×2 / oracle SQLインジェクション エスケープ ×2 / データベース 実行速度 ×2 / html . イメージ 拡張子 埋め込み ×1 / SQLServer SQLインジェクション対策 ×1 / SQL 暗黙の型変換 VARCHAR2 ×1 / SQLインジェクション 対策 ×1 / sqlインジェクション 対策方法 ×1 / javascript if break ×1 / 複文 SQL ×1 / PostgreSQL SQL SERVER 2008 処理速度 ×1 / Oracle 文字列として エスケープ ×1 / SQL 複文 SQLServer ×1 / SQLインジェクション 対策 パラメータ ×1 / Oracle SQLインジェクション エスケープ ×1 / DECLARE%20S%20NVARCHAR(4000); ×1 / ブロック break ×1 / 画像 gif script挿入 php ×1 / 画像 フォーマット 判別 ×1 / データベース web mysql postgresql ×1 / 複文 ×1 / javascript switch 配列 ×1 / パラメータ SQLインジェクション 対策 ×1 / JavaScript 画像変換 Gif ×1 / ASP.NET SQLインジェクション ×1 / XSS対策 ×1 / DNS rebinding ×1 / DECLARE SQL インジェクション ×1 / java sqlserver 画像 ×1 / SQL文の作り方 ×1 / IIS PHP SQL-Server ×1 / pg_escape_string インジェクション ×1
| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |