Author: BIBI
ハッカーについて考えるとき、多くの場合、ハッカーは次のようなものです。他人のサーバーに静かに侵入して、他人の機密情報を破壊したり盗んだりする孤独な人です。もしかしたら、彼は私たちのホームページを変更したり、顧客のクレジットカード番号やパスワードを盗んだりするかもしれません。さらに、ハッカーは当社の Web サイトにアクセスした顧客を攻撃する可能性があります。同時に、私たちのサーバーも彼の共犯者になりました。 Microsoft はこの攻撃を「クロスサイト スクリプティング」攻撃と呼んでいます。これらの攻撃のほとんどは、Web サイトが Web ページを動的に生成するときに発生しますが、ハッカーのターゲットは Web サイトではなく、Web サイトを閲覧する顧客です。
クロスサイト スクリプト攻撃の説明
<<ADVISORY CA--2000-02>> という雑誌で、CERT はすべての人に警告しています: サーバーが顧客の入力を効果的に検証しない場合、ハッカーは悪意のある HTML コードを入力します。コード入力は SCRIPT プログラムで使用されるため、不快な画像や音声が挿入されるなどの損害を与えるために使用される可能性があると同時に、お客様の Web ページの正しい閲覧を妨げる可能性もあります。
一部の友人が疑わしい無料 Web サイトに誘導され、それらのウィンドウには 10 ~ 20 個の小さなウィンドウが表示されることがよくあります。これはマウス トラップと呼ばれます。これらのウィンドウを閉じても無駄です。ウィンドウを閉じるたびに、さらに 10 個のウィンドウが表示されます。この状況は、管理者が不在の場合によく発生します。マウス事件は、ハッカーがクロスサイト SCRIPT 手法を使用して顧客を攻撃する典型的な例です。
悪意のあるタグやスクリプトは単なるいたずらではなく、データを盗んだりシステムを破壊したりする可能性もあります。賢いハッカーでも、それほど賢くないハッカーでも、SCRIPT を使用してサーバーへのデータ入力を妨害したり、サーバーへのデータ入力を変更したりする可能性があります。 SCRIPT コードは、顧客のシステムを攻撃し、ハードドライブを完全に損傷するために使用されることもあります。そして、サーバーを使用している間、ハッカーのスクリプトもサーバー上の安全な場所で実行されていることを知っておく必要があります。顧客がサーバーを信頼する場合、悪意のある SCRIPT コードも信頼することになります。このコードも、ハッカーのサーバーから <SCRIPT> または <OBJECT> の形式で送信されます。
ファイアウォール (SSL) を使用しても、クロスサイト SCRIPT 攻撃を防ぐことはできません。これは、悪意のある SCRIPT コードを生成したデバイスも SSL を使用している場合、サーバーの SSL がコードを識別できないためです。かつて顧客が非常に信頼していたウェブサイトをハッカーに引き渡すだけでしょうか?そして、この種の破壊が存在すると、Web サイトの評判が完全に傷ついてしまいます。
1. クロスサイト SCRIPT 攻撃の例:
CERT 情報によると、動的入力は通常、URL パラメーター、テーブル要素、COOKISE、およびデータ リクエストの形式をとります。たった 2 ページのこの Web サイトを分析してみましょう。Web サイト名は MYNICESITE.COM です。最初のページでは、フォームまたは COOKIE を使用してユーザー名を取得します。
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<TITLE>MyNiceSite.com ホームページ</TITLE>
</HEAD>
<BODY>
<H2>MyNiceSite .com</H2>
<FORM method="post" action="page2.asp">
MyNiceSite.com のユーザー名を入力してください:
<INPUT type="text" name="userName">
<INPUT type="submit" name= "submit" value="submit">
</FORM>
</BODY>
</HTML>
<% End If %>
2 番目のページは、歓迎するユーザー名を返します。
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName" )
End If %>
<HTML>
<HEAD></HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %> </H3>
</BODY>
</HTML>
通常時テキストを入力すると、すべてが正常に動作します。スクリプト コード: <SCRIPT>alert('Hello.';</script>) を入力すると、JavaScript の警告ラベルがポップアップ表示されます。
次回アクセスしたときに、この警告ラベルも表示されます。これは、スクリプト コードがこれは、最初にアクセスしたときにすでに Cookie に含まれています。これは、クロスサイト攻撃の単純な例です。
インターネット上の他の場所を調べて、自分で試してみるとよいでしょう。大規模な政府の Web サイト、教育 Web サイト、商用 Web サイトでも上記のような状況が発生しており、私がよくクレジット カードを使用する Web サイトでも入力がフィルタリングされていないことがわかりました。考える
たびに
本当に恐ろしいです。ハッカーの多くは次のようなものです。他人のサーバーに静かに侵入して、他人の秘密情報を破壊したり盗んだりすることもあります。さらに、顧客のクレジット カード番号やパスワードを盗むこともあります。ハッカーは、当社の Web サイトを訪問する顧客も攻撃します。Microsoft は、この攻撃を「クロスサイト スクリプト」攻撃と呼んでいます。これらの攻撃のほとんどは、Web サイトが Web ページを動的に生成するときに発生しますが、ハッカーの標的は Web サイトではなく顧客です。
クロスサイト スクリプト攻撃については
、
雑誌「<<ADVISORY CA.--2000-02>>」に記載されており、サーバーが顧客の入力を効果的に検証しない場合、ハッカーが侵入する可能性があると警告しています。これらの HTML コード入力が SCRIPT プログラムで使用されると、不快な画像や音声が挿入されるなどの損害が発生する可能性があり、同時に顧客に迷惑をかける可能性もあります。 ' Web の正しい閲覧。
一部の友人が疑わしい無料 Web サイトに誘導されたことはわかっていますが、彼らが得たのはわずか 10 個でした。これらのウィンドウには、JAVA または JAVASCRIPT によって生成された無効なボタンが付いていることがよくあります。これらのウィンドウを閉じると、さらに 10 個のウィンドウが表示されます。この状況は、ハッカーが使用する典型的な例です。顧客を攻撃するクロスサイト SCRIPT 手法は、
単なるいたずらではなく、賢明なハッカーでも、SCRIPT を使用してサーバー データの入力を妨害したり、システムを破壊したりする可能性があります。 SCRIPT コードを使用するとクライアント システムも攻撃される可能性があり、顧客がサーバーを非常に信頼している場合、ハッカーの SCRIPT はサーバー上の安全な場所でも実行されることを知っておく必要があります。コードが <SCRIPT> または <OBJECT> で始まっている場合でも、それらの悪意のある SCRIPT コードを信頼します。フォームはハッカーのサーバーからのものです。
ファイアウォール (SSL) を使用しても、クロスサイト SCRIPT 攻撃を防ぐことはできません。これは、悪意のある SCRIPT コードを生成したデバイスも SSL を使用している場合、サーバーの SSL がコードを識別できないためです。かつて顧客が非常に信頼していたウェブサイトをハッカーに引き渡すだけでしょうか?そして、この種の破壊が存在すると、Web サイトの評判が完全に傷ついてしまいます。
1. クロスサイト SCRIPT 攻撃の例:
CERT 情報によると、動的入力は通常、URL パラメーター、テーブル要素、COOKISE、およびデータ リクエストの形式をとります。たった 2 ページのこの Web サイトを分析してみましょう。Web サイト名は MYNICESITE.COM です。最初のページでは、フォームまたは COOKIE を使用してユーザー名を取得します。
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<TITLE>MyNiceSite.com ホームページ</TITLE>
</HEAD>
<BODY>
<H2>MyNiceSite .com</H2>
<FORM method="post" action="page2.asp">
MyNiceSite.com のユーザー名を入力してください:
<INPUT type="text" name="userName">
<INPUT type="submit" name= "submit" value="submit">
</FORM>
</BODY>
</HTML>
<% End If %>
2 番目のページは、歓迎するユーザー名を返します。
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName" )
End If %>
<HTML>
<HEAD></HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %> </H3>
</BODY>
</HTML>
通常時テキストを入力すると、すべてが正常に動作します。スクリプト コード: <SCRIPT>alert('Hello.';</script>) を入力すると、JavaScript の警告ラベルがポップアップ表示されます。
次回アクセスしたときに、この警告ラベルも表示されます。これは、スクリプト コードがこれは、最初にアクセスしたときに既に Cookie に含まれています。これは、クロスサイト攻撃の単純な例です。
インターネット上の他の場所を調べて、自分で試してみるとよいでしょう。大規模な政府の Web サイト、教育 Web サイト、商業 Web サイトの一部では、上記のような状況が発生します。私がよくクレジット カードを使用する Web サイトでは、入力がフィルタリングされていないことがわかりました。
パート 2。 : クロスサイト スクリプト攻撃の防止。
1. クロスサイト スクリプトによるサーバーの攻撃を防ぐ方法
幸いなことに、クロスサイト スクリプト攻撃を防ぐテクノロジーはますます完成してきています。現在、クロスサイト スクリプト攻撃を防ぐためにいくつかの方法を採用できます。
1. 動的に生成されたページの文字をエンコードする
最初に行う必要があるのは、動的に生成されたページの文字をエンコードすることです。ハッカーは非常に脆弱になります。防御を簡単に突破するためにキャラクターの設定を変更することが可能です。 Web サイトが英語 Web サイトの場合、文字エンコーディングをラテン文字 ISO-8859-1 に設定するだけで済みます。具体的な状況は次のとおりです。
<META http-equiv="Content-Type" content="text/html" ;charset= ISO-8859-1">
2. すべての入力データをフィルタリングして制限します。
これは、クロスサイト スクリプト攻撃を防ぐ 2 番目の方法です。ログインするときは、これらの特殊文字の入力を許可しないでください。したがって、JAVASCRIPT プログラムを ONSUBMIT メソッドに追加して、この機能を完了できます。この例では、入力を 15 文字に制限します。これにより、長いスクリプトの入力が防止されます。
<<ナレッジベース記事 QA252985>>の中で、Microsoft は入力データのフィルタリングを完了するための短い Javascript プログラムを提供しています。
また、
次のような特定の状況に応じて、このコードを例に導入しました。
function checkForm() {
document.forms[0].userName.value = _
RemoveBad(document.forms[0].userName.value);
;
}
// マイクロソフトのコード
関数 RemoveBad(strTemp) {
strTemp = strTemp.replace(/</>/"/'/%/;/(/)/&/+/- /g ,"");
return strTemp;
}
このメソッドを使用すると
、入力に含まれる次の文字をフィルタリングできます。
%
< > [ ] { } ; & + - " '( )
入力をフィルタリングおよび制限する上記の方法は非常に重要な防御方法ですが、電子メールベースの攻撃に対してはまだ無力です。 URLパラメータをメールに直接入れているからです。この状況に対応するには、より強力なセキュリティ対策を講じる必要があります。 ASPを使えば比較的簡単に解決できます。動的に生成された Web ページを HTML と URL だけでエンコードします。この例の状況では、最初の入力ページのリダイレクト URL に次の変更を加えました:
strRedirectUrl = strRedirectUrl &
_server.URLEncode(Response.Cookies("userName"))
実行ページに次を追加しました:
strUserName = server .HTMLEncode(Request.QueryString("userName"))
および
strUserName =server.HTMLEncode(Request.Form("userName"))
Microsoft では、動的ページのすべての入出力をエンコードすることをお勧めします。これは、データベースにデータを保存したり、データベースからデータを取得したりする場合にも当てはまります。これにより、クロスサイト スクリプト攻撃を大幅に回避できます。
これを行うには、Page1.asp に次のように追加します。
<%@ 言語=VBScript %>
<% If Request.Cookies("userName") <> "" then
'Cookie を検出した場合はリダイレクト
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl &
_server.URLEncode(Request.Cookies("userName"))
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<META http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<TITLE>MyNiceSite.com ホームページ</TITLE>
</ HEAD>
<script LANGUAGE="javascript">
<!--
function checkForm() {
document.forms[0].userName.value =
RemoveBad(document.forms[0].userName.value)
;
}
//*********************************************** ******
//プログラマ: オリジナルのコードではありません - MICROSOFT からのものです
//コード ソース: Microsoft Knowledge Base Article Q25z985
//説明:
//************* ***** ****************************************
function RemoveBad(strTemp) {
strTemp =strTemp.replace(/</>/"/'/%/;/(/)/&/+/-/g, "");
return strTemp;
}
//-->
</SCRIPT>
<BODY>
<BR>
<H2>MyNiceSite.com</H2>
<BR>
<FORM method="post"action="page2.asp" onsubmit="return checkForm ();">
MyNiceSite.com のユーザー名を入力してください:
<INPUT type="text"name="userName" width="10" maxwidth="10">
<INPUT type="submit"name="submit" value=" submit">
</FORM>
</BODY>
</HTML>
<% end if %>
Page2.asp に以下を追加します。
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<>"" then
strUserName =server.HTMLEncode(Request.QueryString("userName"))
Else
Response.Cookies("userName") =Request.Form("userName")
strUserName = server.HTMLEncode(Request.Form("userName"))
End If %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/ html;charset=ISO-8859-1">
</HEAD>
<BODY>
<H3 align="center">こんにちは: <%= strUserName %></H3>
</BODY>
</HTML>
これにより、攻撃は効果的に阻止されました。これらの悪意のあるタグとスクリプトがエンコードされると、以下に示すようにテキストの形式で表示されます。
IIS コンポーネントを追加して、動的入力からすべての特殊文字をフィルターすることもできます。すでに開発されている Web サイトの場合、この方法を使用してクロスサイト スクリプト攻撃を防ぐのは非常に簡単です。私たちのコントロールは、ASP ページから REQUEST ターゲットをインターセプトし、テーブル、Cookie、リクエスト文字列、およびプログラムの内容を検出できます。
ログ ファイルを書き込むことで、このコンポーネントに統計データを追加することもできます。クライアントが不正な文字を入力するたびに、このコンポーネントはその IP アドレスと時刻を記録します。詳細については、Doug Dean の記事 <<ASPToday で独自の IIS アプリケーションをロールする>> を参照してください。
いくつかの簡単な手順を実行するだけで、クロスサイト スクリプト攻撃を効果的に防ぐことができます。上記の 3 つの方法に加えて、Microsoft と CERT は、「健全性チェック」と呼ばれる方法の使用も強く推奨しています。たとえば、数字の入力のみを許可する入力ウィンドウがある場合、0 ~ 9 の数字の入力のみを許可するように制限します。 Microsoft と CERT が入力文字を制限するために使用している方法は、特殊文字のみをフィルタリングするよりもはるかに優れています。これらの手順を実行することで、Web サイトにアクセスしている顧客を保護できます。
2. ハッカーの攻撃からブラウザを保護する方法:
インターネット上でローミングしているときに攻撃を回避するにはどうすればよいですか? Microsoft と CERT は、オンラインでいじらないようにアドバイスしています。この状況に対して、PC Magazine のコラムの著者 John Dvorack が興味深い答えを示しました。同氏は、これはマイクロソフトによる計画的な行為であり、インターネット サーファーを怖がらせて、America Online や MSN.com などの安全なサイトを閲覧させるためのものであると考えています。
この例では、インターネット上を徘徊していなくても、オンライン上でハッカーによる攻撃を避けることはできません。皮肉なことに、危険のほとんどは私たちが最も信頼している Web サイトから来ています。 Web サイトを問題なく運用したい場合は、動的コンテンツや Cookie をダウンロードしないようにする必要があります。詳細については、お使いのブラウザの関連情報をご確認ください。
Microsoft はまた、ブラウザのアクティブ スクリプトを厳しく制限された状態に設定し、電子メールを厳しく制限された受信モードに設定するよう警告しています。メール内のリンクをクリックするときは注意してください。詳細については、<<Microsoft サポート技術情報 Q253117>> という書籍を参照してください。念のため、オンラインでの経験を積んで、常に注意を払ったほうがよいでしょう。
結論
元 UNIX プログラマであれば、クロスサイト スクリプティングが何を意味するのかわからないかもしれません。多くのサイトの管理者がログインするためのユーザー名とパスワードはそれぞれ root と root であることがわかります。同様に、多くのデータベース管理者の名前とパスワードはそれぞれ sa とパスワードです。 Webzine (Phrack や Alt2600 など) を使用すると、特定のサーバーの弱点を段階的に知ることができます。この種のハードウェアでは、多くの Web サイト データベース サーバーや Web サーバーが自身を保護しないこともご存知でしょう。ハッカーに遭遇すると、マシンは麻痺してしまいます。
ハッカーからシステムを保護するための措置を講じることは簡単ですが、システムは常にハッカーにさらされています。来年中にいくつかの新たなセキュリティ脆弱性が出現すると考える十分な理由があります。 CERT 社のジョン・ハワード氏の指導の下に完成した論文には、「現在の調査によると、インターネット上のドメイン名を持つすべての Web サイトは、平均して少なくとも 1 年に 1 回、
サーバーに対して
ハッカーによる攻撃を受けています。」と述べられています。攻撃は耐えられない。クロスサイト スクリプティング攻撃は、ハッカーが利用できるもう 1 つの手法です。ただし、上記の簡単な処理を実行する限り、この形式の攻撃の発生を防ぐことができます。