■スプーフとは?
スプーフとは、気づかれないように他のプログラムやクライアントを装うプログラムのことです。ユーザや他のコンピュータをだまして、入力してくる情報などを手に入れます。
■信頼と認証
信頼と認証はインターネットセキュリティーでよくでてきます。信頼とは、相互接続を認めるマシン間の関係であり、認証は信頼関係にあるマシンが相互を識別するための手順のことです。
信頼と認証は互いに反対のことで、信頼が高ければ認証は低くてもよく、信頼が低ければ認証は高くなければなりません。
■rhosts
UNIXは、rhostsシステムを使用してマシン間の信頼関係を構成できる。rhostsの初期のマニュアルページには、次のように書かれている。
「/etc/hosts.equivファイルと.rhostsファイルは、rlogin(1),rsh(1),rcp(1),rcmd(3N)で使われる「リモート認証」データベースを提供する。これらのファイルは、「信頼関係にある」とみなされるリモートホストとユーザーの一覧である。信頼関係にあるユーザは、パスワードを入力しなくてもローカルシステムへのアクセスが認められる。」
以下に、.rhostsファイルの例を示しておきます。
----- .rhosts start -----
node1.sams.hacker.net hickory
node2.sams.hacker.net dickory
node3.sams.hacker.net doc
node4.sams.hacker.net mouse
----- End -----
上の例では、信頼関係にあるホストの名前とユーザ名(hickory,dickory,doc,mouse)が4つ指定されている。.rhostsファイル内のこの指定によって、上の4人のユーザは、rサービス(rサービスについては、次の項目を参考にしてください)を経由して、パスワードの認証無しでローカルホストにアクセスできるのです。
ゆえに、Attackerは、ソースアドレスを偽るだけで侵入できるのです。
■rサービス(詳細は、特別講座<rコマンド編>を参考にしてください)
rサービスには以下の4つがあります。
この4つのrサービスは、信頼確認手段rとして、/etc/hosts.equivまたは.rhosts allow/denyスキームを使用する。もちろん、これらのファウルの中が空だったりしたら信頼は成立せず、これを利用するスプーフィング攻撃は発生しない。
■仕組み
攻撃側の問題は2つあります。第1にソースアドレスを偽造、第2に標的のシーケンス対話を維持しなければならないのです。
■IPスプーフィングの方法
1、攻撃者はホスト201.123.0.123(以下、IP-Aと呼ぶ)と197.120.0.120(以下、IP-Bと呼ぶ)が信頼関係にあることを知る。(このIPは本物ではないですよ)
2、IP-Aに侵入する計画をする。そのために、アドレスを偽造してIP-Bになりすます。
3、本当のIP-Bを停止させる。そのために、IP-Bに対してsyn-flood攻撃する(syn-flood攻撃に関しては、基礎syn-flood攻撃講座をみてください)。これは、IP-Bになりすます前に行うこと。
4、標的が求める正確なシーケンス番号を推測。
(@)、標的に接触して接続を要求。
(A)、標的は、シーケンス番号を応答する。
(B)、攻撃者は、このシーケンス番号をログに記録し、接続を切断。
(C)、そのログを分析して、パターンを見つける。それから、推測する。
5、標的に侵入完了。
6、ついでに、セキュリティーホールを開けとく。
例;.rhostsファイルを書き直す。これで、次に侵入するときに認証なしで接続できます。
■シーケンス番号
シーケンス番号とは、各パケットに割り当てられる識別用のインデックス値である。2つのホストでは、エラーチェックと報告にシーケンス番号を利用する。シーケンス番号を引き渡す処理は、仮想回線が成立した時点で開始される。
以下に、Rik Farrowの「Sequence Number Attacks」というシーケンス番号システムの記事を紹介します。
「シーケンス番号は、データの受信を確認するために使われる。TCP接続を始める時に、クライアントは初期シーケンス番号を付けたTCPパケットを送信するが、このパケットには確認応答番号はない(この時点ではつけようがない)。接続の相手側でサーバアプリケーションが動作していれば、サーバは、自分の側の初期シーケンス番号と確認応答番号(クライアントの初期シーケンス番号に1を足した値)を付けてTCPパケットを送信する。このパケットを受信したクライアントは、確認応答番号(サーバの初期シーケンス番号に1を足した値)をサーバに返す。」
ゆえに、Attacerは、2つの問題がある。
この2番目の問題について、Morrisは、次のように言っている。
「4.2BSDでは、グローバルな初期シーケンス番号が管理されている。シーケンス番号は、毎秒128ずつ増えて、接続が開始されるたびに64ずつ増える。新しい接続は、このシーケンス番号で開始される。ソースを偽ったSYNパケットが送信されると、宛先ホストは、クラッカーの使っているホストではなく、偽のソースホストに応答を返送する。攻撃ホストでは、確認応答を返して宛先のTCPポートをESTABLISHED(確立)状態にするために、応答パケットのシーケンス番号を調べるか推測しなければならない。」
よって、シーケンス番号の推測に成功すれば、ターゲットと同調し、有効なセッションを確立することができる。それ以降は、攻撃ホストは信頼関係にあるホストとして扱われます。この時点でやっと、Attackerは攻撃を次の段階に薦めることができる。例えば、rhostsファイルの項目を改竄したり、ログイン不可能攻撃などです。
■標的
■その他のスプーフィングの紹介
●ARPスプーフィング(ARPについて詳しくは、ARPを参照せよ)
●DNSスプーフィング
攻撃者は、ネットワークのネーム・サーバーであるシステムへのアクセスを取得します。次に、攻撃者は、標的のシステムの""ファイル内に定義されているホストの名前にマップする名前から自分のシステムのアドレスを設定します。こうすることによって、攻撃者は、rloginを使って、標的のシステムにアクセスすることができます。
●UDPスプーフィング(UDPについて詳しくは、UDPを参照せよ)
●Mailスプーフィング(Mail Spoofing)
これは非常に初歩的なスプーフィングの手法で、ヘッダ情報の発信者名(FROM)フィールドに他人の名前を書き込んで送付することで、偽のメッセージを広めるというものである。仕掛けは単純でも、多くの企業が電子メールを重要な業務連絡に使用しているため、ビジネスに相当の悪影響を与える場合もある。
例;標的とする企業の重要得意先に、その企業への信頼を失わせるようなメールが送られれば、取引関係に深刻な打撃が及ぶこともあると考えられる。
●ログインスプーフ
ログインスプーフは、ログイン画面を装います。PasswdトロイやSuトロイ(詳しくは、標準Trojan講座を参照せよ)のログイン画面版だと思えばいいでしょう。
このスプーフを避けるためには、ログインする前に一度ブレークキーを入力する習慣をつけることです。単純なスプーフでは、ブレーク信号が送られてくるとプログラムが中断するからです。また、Enterキーを何度か押して本物のログイン画面かどうか確認するのも良いかもしれません。
■防御方法
IPスプーフィングの検知やクラッカーの追跡は事実上困難である。ただ,社内のIPアドレスを不正利用された場合は,ホストを攻撃される前に,IPアドレスのフィルタリングで攻撃を防げる場合がある。内部犯行でない限り,クラッカーはインターネットなど外部のネットワークからアクセスしてくる。社内のIPアドレスがインターネット側で利用されるのはおかしい。そこで,社内用IPアドレスを使った社外からのアクセスをすべてフィルタリングする。ルーターとファイアウォールのどちらでも実現できる。
また、無作為の数字(乱数)を生成するロジックの推測がどの程度難しいかによって、攻撃の成功率がかなり左右されます。Linuxの乱数生成ロジックは、かなり優れているらしいが、それだけで執拗なAttackerを退けることは不充分だろう。
■まとめ
いままでは、スプーフィングの理論でした。次は、実際の攻撃方法を紹介しましょう。
■関連リンク
|
|||
|
|