情報処理において、悪意あるデータの混入によって、誤った処理結果が得られる場合がある。このような、悪意あるデータを与えることをポイズニングと呼ぶが、必ずしも、これが定義とは言い切れない。この論文では、ポイズニングの定義を決定すること並びに、ポイズニングをカテゴライズすることを目的に据えている。
ポイズニングという用語が誤用されることを防ぐ。また、この技術を学ぶ際における理解の手助けにする。さらに、ポイズニングを避けたり、有益に利用する方法を見出す際の資料としたい。
SEOとは、“Search Engine Optimization”の略称で、「検索エンジン最適化」と日本語に訳される。検索エンジン最適化とは、対象のウェブコンテンツが検索結果の上位に表示されるように、工夫することである。これは全文型の検索エンジンを対象にする。ウェブコンテンツは検索結果の上位に表示されるほど、検索エンジンの利用者の目につき易いために、訪問者が増えると言われている。[1]
検索エンジンとは、インターネットで公開されている情報を検索することができるWebサイトである。検索エンジンには、キーワードによって検索する全文検索型と、カテゴリから検索するディレクトリ型の2種類に大別できる。[2]
SEOを悪意あるウェブコンテンツに適用することである。[3]
特定のキーワードによる検索結果の上位に、悪意あるウェブコンテンツを表示させる。これにより、検索エンジンの利用者を悪意あるコンテンツへと誘導する。悪意あるコンテンツにはフィッシングサイト等が選ばれる。
悪意あるコンテンツへの訪問者を増やして、それによる被害を拡大させること。
SEOの検索キーワードに多くの利用者が検索するであろう、人気のキーワードを選択する。これにより、悪意あるコンテンツを多くの人の目に入れることができる。実際には、クリスマスの時期に“christmas gift shopping”といった検索キーワードでSEOポイズニングが確認された。[4]
話題のニュースに関連して捏造した情報を検索キーワードにする。なぜなら、捏造した内容であるために、検索結果の順位を競うウェブコンテンツがほとんど無いからである。そのために、位へ表示されることが期待できる。実際に、有名俳優の訃報のデマに便乗して、それを伝える記事やニュース映像を装ったSEOポイズニングが行われた。[5]
DNSとは、“Domain Name System”の略称である。Domain Name Systemはホスト名とIPアドレスを対応させるシステムである。これは全世界のDNSサーバーが協調して動作する、分散型データベースである。[6]
個々のドメインを管理するサーバー。個々のDNSサーバーは自身が管理するドメインとIPアドレスの対応表を持っており、外部からの問い合わせに応答する[7]。再帰問い合わせを受け付けた場合には、管理していないドメインに関しても、自身で新しく問い合わせを行いIPアドレスを応答する[8]。そして、その解決したIPアドレスを自身のキャッシュに蓄える機能がある。
DNSキャッシュポイズニングとは、DNSサーバーのキャッシュに偽のIPアドレスを蓄えさせることである。[9]
DNSサーバーには再帰問い合わせを行った場合に、その解決したIPアドレスを自身のキャッシュに蓄える機能がある。そして、再び同じドメインが問い合わせられると、そのキャッシュを基にIPアドレスを応答する。間違ったIPアドレスがキャッシュに蓄えられた場合には、正しくない接続先を応答されることになる。そのため、異なる接続先へ誘導することができる。
ホスト名に偽のIPアドレスを対応させて、接続先を変更する。
かつて、DNSサーバーが持っていた脆弱性を利用する手法である。BIND8.1.1より前のDNSサーバーは、送信元に構わず応答の内容を鵜呑みしていた。そのため、第三者のDNSサーバーよるIPアドレスの変更が可能であった。現在のDNSサーバーは応答を受け取った時に、問い合わせ先のDNSサーバーが管理するドメイン、又は、それより下層のドメイン以外の情報を無視するようになっている。そのため、現在この手法は利用できない。[10]
ドメインを管理するDNSサーバーが応答を送信するより先に、偽の応答を送りつける手法である。受け取ったDNSサーバーは正式な応答として取扱い、その中に記載されたIPアドレスをキャッシュに蓄える。ただし、その偽の応答には問い合わせに含まれたものと同じID付加しないと正式な応答としては扱われない。また、ポートも正しく指定しなければならないが、現在はランダムに設定することが推奨されている[11]。そのため、IDを換えた偽の応答を大量に作成して、様々なポートへ送りつけなければこの手法はできない。
偽装応答型の亜種である。通常の偽装応答型は、キャッシュが破棄されるまで問い合わせが発生しないために、連続して行うことができない。カミンスキーアタックは偽のIPアドレスを対応させたいURLと同ドメインでランダムなホスト名を作成して、問い合わせる。キャッシュが存在し得ないために、連続して行うことができる。応答には、問い合わせたランダムなホスト名のIPアドレスと共にURLのIPアドレスを追加しておく。[12]
ARPとは、“Address Resolution Protocol”の略称である。Address Resolution ProtocolはIPアドレスとMACアドレスを対応させるためのプロトコルである。解決したいIPアドレスを付加したEthernetフレームをブロードキャストすると、そのIPアドレスを持つ端末がMACアドレスを含んだEthernetフレームを応答する。それを受け取った端末は自身が持つIPアドレスとMACアドレスの対応表であるARPテーブルに記録する。その後ARPテーブルはEthernetでの通信の際にMACアドレスを参照される。[13]
ARPポイズニングとは、ARPテーブルに間違ったMACアドレスを記録させることである。[14]
DNSキャッシュポイズニングとは、DNSサーバーのキャッシュに偽のIPアドレスを蓄えさせることである。[9]
IPアドレスを解決する際に、ARPはEthernetフレームの宛先にブロードキャストを表す“FF-FF-FF-FF-FF-FF”を設定して送信する。そのため、同ネットワーク上の送信者を除く全ての端末は応答をすることができる。ARPキャッシュポイズニングは解決したいIPアドレスを持つ端末の応答より先に、その端末を騙って応答することで行う。これにより、受け取った端末のARPテーブルには間違ったMACアドレスが蓄えられ、Ethernetフレームの送信先を変更することができる。
Ethernet上を流れるEthernetフレームの奪取、盗聴、改変すること。
2つの端末にARPインデックスポイズニングを行い、お互いの送信先を攻撃者の端末が持つMACアドレスに書き換えて行う。これにより、2つの端末間に入り込む中間者攻撃が可能となる。互いの通信を把握することができ、また、正しい端末へ通信内容を転送することで盗聴していることを気付き難くすることができる。
RIPとは、“Routing Information Protocol”の略称である。Routing Information Protocolはディスタンスベクタ型ルーティングプロトコルである。[15]
ディスタンスベクタ型ルーティングプロトコルとは、隣接するルーターー同士でルーティングテーブルを交換して、経路情報を得るルーティングプロトコルである。そのネットワークへたどり着くまでに経由する他ネットワークの数をメトリックと呼ぶ。ルーターはメトリックが小さい経路情報を選択してルーティングテーブルに記憶する。到達不可能かは各ルーターが判断する。
ルートポイズニングとは、ルーティングプロトコルを用いて他のルーターの経路情報に到達不可能を設定すること。
ディスタンスベクタ型ルーティングプロトコルのメトリックには、到達不可能と同義になる値が存在する。その値をメトリックに設定した経路情報をルーターに送ることで、外部からルーティングテーブル上の経路情報に到達不可能を設定できる。
外部から、望みのタイミングで経路情報を到達不可能を設定すること。
RIPの経路情報は180秒間更新が途切れるとメトリックに到達不可能を表す“16”が設定される。そして、送信できないと判断される。それは、ルートポイズニングはメトリックに“16”を設定した経路の情報を送信することで行う。これを行った場合、180秒待たずにルーターへその経路が利用できないと気がつかせることができる。この例はポイズニングを有効的に活用している。
P2Pとは、“Peer to Peer”の略称である。Peer to Peerはサーバーを介さずに端末が相互に直接接続するネットワーク、または、そのような通信網を持ったソフトウェアのことである。[16]
Winnyとは、P2Pファイル共有ソフトの一つである。P2Pファイル共有ソフトとは、P2Pネットワークにつながる端末の間でファイルを交換、共有するソフトである。[17]
P2Pインデックスポイズニングとは、P2Pネットワークにつながる端末に偽のインデックス情報を送信すること。
P2Pネットワークはインデックスを一元管理する存在が無い。そのために、不特定多数の端末から送られる情報を取捨選択しつつも、信頼せざるを得ないシステムになっている。嘘のインデックス情報をプロトコルに従って送りつけて、各端末が持つインデックス情報を変更、一部消去することができる。
各端末が持つインデックス情報を変更、一部消去すること。
参考文献[18]では、共有ファイルのダウンロードの妨害を目的にしている。Winnyでは、共有ファイル毎のインデック情報を「キー」、ネットワークにつながる各端末を「ノード」と呼ぶ。キーはノード同士でやりとりされ、それを基にダウンロードを行う。Winnyには同一ファイルのキーを新たに取得した場合には、そのキーの内容を更新する性質がある。キーには寿命が設定されているが、その寿命を“0”に設定したキーを送りつけることでP2Pインデックスポイズニングを行う。これにより、キーは上書き後破棄されるため、共有ファイルのダウンロードは不可能になる。
調査した全てのポイズニングの間で、共通する特徴には、次のようなものがある。
前述の4つの共通点を踏まえて、ポイズニングの定義を次のように決定した。
「ポイズニングとは、システムに対して想定されていないデータを与えることで、異常な処理結果を出力させることである。ポイズニングはその対象とするシステムの挙動を把握して、異常な処理結果を引き起こすデータを規格に沿った形式で作成して行う。対象となったシステムはそのデータを通常のと同じく処理をして、正常に動作をしたまま、異常な結果を出力する」
調査した全てのポイズニングを利用目的の類似性に合わせて、次のようにカテゴライズした。
このポイズニングは接続先に関する内容を処理するシステムに対して行う。間違ったアドレスを記録させることや偽の接続先を目立たせることで誘導する。次のものが当てはまる。
既存のシステムへ新たな機能を追加するために用いるポイズニングである。ポイズニングは行う側だけの実装で可能なため、システム全体の変更をせずに、データを消す等の新たな機能を追加できる。次のものが当てはまる。
悪意ある接続先へ誘導するポイズニングは他の接続先を掲示するシステムに対して応用できると考えられる。例えばWEBサイトに表示されるランキングを操作してそれに関するコンテンツへ誘導するといった手法もこのポイズニングに含まれると考えられる。
互換性を保持して機能を追加するポイズニングは他の変更が容易でないシステムに対して応用できると考えられる。利用者が多数であるため刷新が容易でない大型のシステムや端末が独自に動作するために代表者による変更が可能である領域が限られるP2Pネットワーク等が挙げられる。
調査したポイズニングから4つの共通点を見出し、それを踏まえて、ポイズニングの定義を決定した。そして、調査したポイズニングのカテゴライズを行い、ポイズニングを2項目に分類した。
決定したポイズニングの定義は簡素にまとめられて考えられる。そして、導出の方法からも十分に信頼できる内容であると考えられる。そのため、ポイズニングの定義の決定の意義を十分に果たせるであろう。また、ポイズニングの元々のイメージである“中毒”や“汚染”等とも合致する内容となったので、その点からもとても満足のいく結果であった。
しかし、調査対象の数が決して多いとは言えないのではないかとも考えられる。カテゴライズでも同様に、絶対数が少ないためか2つのカテゴリーしか作れなかった。また、現在のカテゴライズは項目が複数のカテゴリーに跨いだ場合を考慮していないため後に改正を必要とするかもしれない。
今後の課題としては、調査対象にするポイズニングを追加することで、定義の信頼性を向上させると共に、カテゴリの種類や項目を充実させることが考えられる。さらに、カテゴリを参考にして、新たなポイズニングを提案することにも取り組みたい。