忍者ブログ
   
分からない人のクロスサイトスクリプティング文系的理解
2019/09/19 18:15 | Comments(2) | 学習勉強インプット
今日の一言「久しぶりの学習カテゴリ」「創作ネタとして……」

前書き

 何度勉強しても、「分かった」という気持ちになれない事柄というのがある。
 ある程度類似の問題を複数解くことで、「正解」を導くことはできるようになっても、「理解」した気持ちになれない。

 理解とは、正しく分類できることであるので、問題が解ければ、理解したと言えるかもしれない。しかし、その根拠が自分の中でしっくりくる……この表現も曖昧なわけだが、あやふやな状態では理解したとはいえないだろう。

 そんな事柄は多くあるわけだが、その一つの「クロスサイトスクリプティング」というクラッキング手法について解説を試みることで、「理解」に近づくことを目的とする。

クロスサイトスクリプティング

 とりあえず、辞書的に引用。

クロスサイトスクリプティングとは、ネットワークを通じた攻撃手法の一つで、保安上の弱点(脆弱性)のあるWebサイトを踏み台に、悪意のあるプログラムをそのサイトの訪問者に送り込む手法。また、そのような攻撃に利用される脆弱性のこと(XSS脆弱性)。
IT用語辞典e-words

 クロスサイトスクリプティング(以下「XSS」)とは、クラッキングである、という理解はまず簡単にできる。
 問題は、その中身だ。いろんなネットワークを通じた攻撃手法(DoSとかセッションハイジャックとかSQLインジェクション)というものがある中で、XSS特有の「手がかり」は何かを理解する必要がある。

WEBサイトの基本

 ポイントとなる要素として、「WEBサイトを踏み台に」という点だ。
 WEBサイトの理解をまず確かめよう。このブログもWEBサイトである。昔はホームページという言葉の方がよく用いられていたと思う。「ホーム」でもなくなってきたから、WEBという表現が主流になったのだとか聞いたことがあったような。

 で、脆弱性のあるWEBサイト、ということだが、基本、単にブラウザ(WEBサイト閲覧に使われるアプリ)に表示するだけのサイトは、基本問題にならない。

 もっと分解して表現すると、端末(クライアント)とサーバという概念がある。
 要はパソコンが端末。サーバはネットワークの先にあるすごい機械だ(かっこわらい)。

 で、表示だけするサイトとは、クライアントからサーバに「見せて」って要求して、サーバから「はいどうぞ」ってやりとりがあって、それだけである。
 で、その「見せて」ってのは、URL(アドレス)で示される。もっといえば、URLは、IPアドレス+ファイルの場所を示す情報である。その文字列を数値(IPアドレス)に変換してくれるのが「DNSサーバ」である。――わきみちにそれた。

 要は、「見せて」→「どうぞ」だけのやりとりのサイトは、脆弱性もない(と言い切ってしまうのは危険なんだろうが)。


 問題になるのは、端末とサーバで、双方向なやり取りがあるサイトである。

双方向なサイト

 双方向なサイトとは、このブログのようなものである。
 もちろん、単なる読者、閲覧者にとっては、基本一方向であるが、コメントとか投稿できる。そして筆者も、端末で書いた記事を、ネットワークを通じてサーバに送り込んでいる。

 これらの双方向な情報のやりとりのためには、「フォーム」が使われる。要は「入力欄」。

 このフォームに、データベースを操作する言語のSQLを入力して、データを破壊したり抽出したりするのが「SQLインジェクション」だ。
 これは分かりやすいと思う。

 では本題の、XSSとは、どういったものなのか。

XSSの手法

 先ほどの辞書の続きを引用。

典型的なXSS攻撃では、攻撃者はターゲットとなる脆弱なサイトへのリンクを設置した罠サイトを設け、閲覧者がリンクをクリックするよう仕向ける。その際、リンクのURLのパラメータ部分にスクリプト(JavaScriptコード)やHTMLタグの断片を埋め込み、閲覧者が脆弱なサイトを開くとページ内に自動的にそれらの悪質なスクリプトが埋め込まれ、即座に閲覧者のWebブラウザで実行される。

 あれ、そうすると、僕は、「一方向のサイトは大丈夫」と書いたが、URLに埋め込みができるのなら、どんなサイトも危ないってことになりはしないか。

 また、国家試験問題(H25秋応用情報)で、こんな問題↓がある。
クロスサイトスクリプティングの手口はどれか。

正解:WEBアプリケーションに用意された入力フィールドに、悪意あるJavaScriptコードを含んだデータを入力する


 あれ、やっぱり、そうすると、僕が書いてきた、「フォーム」(入力欄)=入力フィールドに悪意あるスクリプトを埋め込む、という「理解」が正しい気がしてくる。

要するに

クロスサイトスクリプティング(XSS)のセキュリティ対策とは?
https://www.shadan-kun.com/blog/measure/1052/


 上の記事を参照するに、やはり、フォームを使ってスクリプトを埋め込む手法が紹介されている。しかし、納得がいかなかったのでさらに調べると、以下サイトで少し分かった気がした。

とほほのWWW入門
http://www.tohoho-web.com/ex/xss.html

 ――ってか、懐かしい!(笑)
 僕がWEBサイトの基礎を学び始めた十数年前によく参照させて頂いていた。
 コピーライトが2019年になっていて、まだ運営されていたんだなぁとしみじみ。(個人運営だと思ってたけど、どうなんだろ)


 ――要するに、両方の手法があるということだ。
 URL埋め込み型(反射型)と、掲示板埋め込み型(格納型)があるということだ。


 なるほど。ここまで調べてようやく分かってきた(理解してきた)気がする。

 ちなみに、問題を解くことに関しては間違えはなかった、という点が、本記事の裏の主旨である。
 複数の問題を解くことはできても、なんとなく分からなかったXSSという概念。要は僕の言葉で理解すれば、以下のようになる。

「簡易プログラム(スクリプト)を利用した攻撃手法。正規のWEBサイトにスクリプトを仕掛けることに特徴がある」

あとがき

(かっこ書きである。XSSについて、他書籍とかの説明で、「(スクリプトを使って)別のWEBサイトを表示し……」とかって説明しているから分けわからなくなったのである。ひどい。まぁその、人によって(知識とか頭の回転とか語彙力とか)分かりやすさは異なるから、上の僕の説明が分かりやすいかというと一概ではないだろうが、少なくても僕にとっては分かりやすい。先日の人類普遍の6原則(他者を傷つけない、報復できる、善行には返礼、強者は弱者に配慮、約束守る、嘘つかない)も、とりあえず暗記して~自分の言葉で表現して~を繰り返さないと覚えられない。ちなみに、教養とは、「概念知識」の多さだと思ってる。概念ってのは抽象のことだ。その抽象的な表現ができる事柄が多い人を、教養がある人という。モノ・コトの知識がたくさんあっても、教養があるとは言わない。かといって、具体的なことが不要なわけはない。大事だ。だから別に教養が大事だというわけでもない。ただ、創作する上では、たくさんあった方がいいだろう)

拍手[1回]

PR

コメント

まじで理解したいんだったら、仮想環境にLinuxインストールして、webサーバ上げて、脆弱性があるサイト作って、実際に攻撃してみるのが一番だと思うけど、やり方いまいちわからんよなぁ
posted by イミフat 2019/09/22 13:32 [ コメントを修正する ]
Re:No Title
 自分でしかけるのが一番の理解ですね。ホワイトハッカーですね(笑)。ハッカーってもともと悪い意味とは限らなかったのに、クラッカーの意味が強くなってしまったがゆえにあえて「ホワイト」と言われたりするということだそうな。
 ちなみに、掲示板とかの入力フォームにJavaScriptしかけたりするというのは何となく分かるのですが、URLにもスクリプトしかけられる、というのがイマイチ分かってなかったりします。URLに、GETとかPOSTメソッドでサーバサイドで受け取れる情報があるのは基本なんですが、スクリプトも実行させられるなら、双方向のWEBサイト以外でも、何でも攻撃対象になりそうな。――其処ら辺はブラウザで対策されてるのかなぁ。まぁそのスクリプトってのがjavascriptなら、オフっておくのが一番セキュリティ対策な気がしますが。
2019/09/23 14:00
C言語なんかだと、入力データのオーバフローを利用して、スタック上の復帰情報を書き換えて任意コードを実行するとかありますけど、具体的にどうやってするのか不明

サーバ系の場合でも、受け取ったデータをどのように扱うかによるのではないでしょうか
javascriptはよくわかりませんが、メモリ破壊で任意コード実行なのか、それとも別のものなのか
posted by イミフat 2019/09/29 00:29 [ コメントを修正する ]

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<コミュ力の前に他者に興味があるか | HOME | 今しかできないことをするべき>>
忍者ブログ[PR]
アクセスランキング