web-dev-qa-db-ja.com

IPアドレスは「偽造するのは簡単」ですか?

Googleの新しいパブリックDNSサービス に関するメモの一部を読みました。

私はセキュリティセクションの下でこの段落に気づきました:

DNSSEC2プロトコルなど、DNSの脆弱性に対する標準のシステム全体のソリューションが一般的に実装されるまで、オープンDNSリゾルバーは、既知の脅威を軽減するための対策を個別にとる必要があります。多くの手法が提案されています。それらのほとんどの概要については IETF RFC 4542:偽造された回答に対するDNSの回復力を高めるための対策 を参照してください。 Google Public DNSでは、次のアプローチを実装しており、推奨しています。

  • マシンリソースのオーバープロビジョニング リゾルバ自体に対する直接のDoS攻撃から保護します。 IPアドレスは攻撃者にとって偽造が容易であるため、IPアドレスまたはサブネットに基づいてクエリをブロックすることは不可能です。そのような攻撃を処理する唯一の効果的な方法は、単に負荷を吸収することです。

それは憂鬱な実現です。 Stack Overflow/Server Fault/Super Userであっても、あらゆる種類の禁止およびブロックの基礎としてIPアドレスを頻繁に使用します。

「才能のある」攻撃者が自分の好きなIPアドレスを簡単に使用して、必要なだけの固有の偽のIPアドレスを合成できると考えるのは本当に怖いです!

だから私の質問:

  • 攻撃者が実際にIPアドレスを偽造することは本当にそれ簡単ですか?
  • その場合、どのような緩和策が可能ですか?
66
Jeff Atwood

他の多くの人が述べたように、IPヘッダーは、応答の受信を気にしない限り、簡単に偽造できます。 TCPには3ウェイハンドシェイクが必要です)。これは主にUDPで見られる理由です。1つの注目すべき例外は SYNフラッド で、TCPであり、受信ホストのリソースを拘束しようとします。ここでも、応答は破棄されるため、送信元アドレスは重要ではありません。

攻撃者が送信元アドレスを偽装する能力の特に厄介な副作用は、 後方散乱 攻撃です。素晴らしい説明があります ここ ですが、簡単に言うと、これは従来のDDoS攻撃の逆です。

  1. ボットネットの制御を獲得します。
  2. 悪意のあるパケットに同じソースIPアドレスを使用するようにすべてのノードを構成します。このIPアドレスが最終的な被害者になります。
  3. 制御されているすべてのノードからインターネット上のさまざまなアドレスにパケットを送信します。通常は開いていないポートをターゲットにするか、既存のトランザクションの一部であると主張する有効なポート(TCP/80)に接続します。

(3)で述べたいずれの場合でも、多くのホストはICMP到達不能またはTCPリセット、悪意のあるパケットの送信元アドレスをターゲットとして)で応答します。攻撃者は、なりすましのソースIPアドレスを使用して、選択した犠牲者に対してDDoS攻撃を実行する、ネットワーク上に潜在的に何千もの妥協しないマシンを持っています。

軽減という点では、このリスクは実際にはISP(特にトランジットではなくカスタマーアクセスを提供するISP)のみが対処できるリスクです。これを行うには、主に2つの方法があります。

  1. 入力フィルタリング -ネットワークに着信するパケットが、着信インターフェースの反対側にあるアドレス範囲から送信されることを確認します。多くのルーターベンダーは ユニキャストリバースパス転送 などの機能を実装しています。これは、ルーターのルーティングテーブルと転送テーブルを使用して、着信パケットのソースアドレスのネクストホップが着信インターフェイスであることを確認します。これは、ネットワーク(つまり、デフォルトゲートウェイ)の最初のレイヤー3ホップで実行するのが最適です。

  2. 出力フィルタリング -ネットワークを出るパケットが、所有するアドレス範囲からのみ送信されるようにします。これは、イングレスフィルタリングを自然に補完するものであり、本質的には「良い隣人」になるための一部です。悪意のあるトラフィックによってネットワークが侵害された場合でも、そのトラフィックがピアリングするネットワークに転送されないようにします。

これらの手法はどちらも最も効果的であり、クライアントがプロバイダーとインターフェイスする「エッジ」または「アクセス」ネットワークで実行すると、簡単に実装できます。複数のパスと非対称ルーティングの複雑さのために、アクセスレイヤーの上に入力/出力フィルタリングを実装することはより困難になります。

これらの技術(特に入力フィルタリング)が企業ネットワーク内で大きな効果を発揮するのを見てきました。おそらく、サービスプロバイダーの経験が豊富な人であれば、インターネット全体でのイングレス/エグレスフィルタリングの展開に関する課題についてより深い洞察を得ることができます。ハードウェア/ファームウェアのサポートは大きな課題であり、他の国の上流のプロバイダーに同様のポリシーを実施するよう強制することができないと思います...

51
Murali Suriar

攻撃者が実際にIPアドレスを偽造するのは本当に簡単ですか?

もちろん、実際に応答を受信する必要がない場合は、好きな送信元アドレスを使用して非常に簡単にパケットを送信できます。多くのISPは実際には良い下りルールを持っていないので、私が偽造したものはすべて配信されます。

攻撃者が実際に双方向通信を必要とする場合、それは非常に困難になります。双方向の通信が必要な場合は、何らかのプロキシを使用する方が簡単です。これは、自分が何をしているのかを知っていれば、非常に簡単に設定できます。

サイトは双方向通信を必要とするhttp/httpsを使用しているため、IPアドレスでユーザーを禁止することはSF/SO/SUで中程度の効果があります。

46
Zoredache

Zordecheの回答の概念実証(ubuntuを使用):

$ Sudo apt-get install hping3
$ Sudo hping3 -1 --spoof 11.10.10.20 www.google.com
HPING www.google.com (eth0 64.233.169.105): icmp mode set, 28 headers + 0 data bytes

次に、別のコンソールで:

$ Sudo tcpdump -i eth0 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:30:19.439737 IP 11.10.10.20 > yo-in-f105.1e100.net: ICMP echo request, id 31297, seq 0, length 8

さてささいなことですが、11.10.10.20にアクセスできるか、www.google.comと11.10.10.20の間のどこかにスニファがない限り、前述のように応答を受け取ることはできません(そして、前に置く必要がありますパケットのルートを予測できないため)また、スプーファーのゲートウェイ(ISP)は、何らかのIP検査が行われていて、ソースの臭いが気になる場合、そのパケットをドアから出さない可能性があります。

23
Kyle Brandt

一方向のIPアドレスは簡単に偽造できます[〜#〜] udp [〜#〜]トラフィック。 TCPパケットの場合、偽造できるのはハーフオープンTCP SYNパケットとの接続です。これは一種のDOS攻撃の基礎でもあります。 。ただし、スプーフィングされたアドレスを使用してHTTP接続を偽造することはできません(たとえば、同じIPアドレスを使用するようにセッションをフィルタリングしている場合)。そうですが、パケット内のIPアドレスをスプーフィングできますが、これは特定の種類にのみ役立ちますサービス拒否攻撃の。

13
FryGuy

GOOGの記事では、DNSについて明示的に論じていました。 DNSはUDPとTCPパケットの両方を使用します。UDPは偽造できますが、TCPは偽造できません。TCPには ウェイハンドシェイクが必要です =。TCPパケットのIPアドレスが偽造されている場合、偽造しているコンピュータは応答を受信せず、接続は失敗します。他の回答で述べられているように、UDPは「ファイアアンドフォーゲット」です。このため、DoS攻撃はUDPパケットの形でのみ行われます。

Stack Overflowおよびファミリーサイトのコンテキストでは、Takaun Daikonによって提起された問題は非常に有効です。 ISPから新しいIPアドレスを取得する方法はたくさんあります。 MACアドレスの変更は明らかに最も簡単で、多くのISPで機能します。さらに、愚かなことをする人の多くは、パブリックプロキシまたはTORを使用している可能性があります。これらのパケットの発信元IPを明らかにブロックすると、プロキシまたはTOR終了ノードがブロックされるだけです。

それで、ブロッキングIPアドレスは有効ですか?地獄そうです。しかし、エラーが発生します。実際に問題の原因ではない一部のIP(プロキシなど)をブロックし、IPを変更することでブロックを回避する人もいます。禁止されたIPを後で取得するのに十分不運な人は、SOファミリーのサイトにアクセスできません。しかし、エラーrateは小さくする必要があります。IPの巨大なセットをブロックしているのでない限り、1日に1つまたは2つをブロックしている場合は問題ありません。

あなたがブロックする少し洗練されたスキームを導入したいかもしれませんが、年のような期間だけです。ネットワークが帯域幅スロットルまたは接続制限に対応している場合は、サイトでApache Benchmarksを実行しているdoucheバッグが帯域幅が非常に制限されたケージに入れられるスキームを検討することもできます。

10
JD Long

ISPが遅延しているため、IPスプーフィングは継続されます。

私のISPは、私が特定のアドレス、または少なくとも私がいるサブネットにいることをよく知っています。それでも、任意の送信元アドレスを使用できます。何故ですか?単に、コスト。

あちこちにいくつかのアドレスを偽装したとしても、ISPには何もかかりません。私のISPのすべてのユーザーが1:00から2:00までの間に1つのパケットを偽造したとしても、それはまだレーダーの気まぐれではありません。ただし、ボットネットが多くのISP上の多くのホストから多くのなりすましパケットを送信すると、ターゲットマシンまたはネットワークがフォールオーバーします。

財務上の現実として、攻撃されたのでない限り、なりすましの費用はかかりません。顧客の近くでフィルタリングを実装するにはお金がかかります。お金を費やした人は、彼らが優れたネットワーク市民であることを知る以外に、ほとんど利益を実感しません。

UDPとICMPは偽造が最も簡単ですが、TCPも可能です。悪用するには予測可能なシーケンス番号を使用する安全でないリモートOSが必要です。シーケンス番号を変更して作成するのは、負荷分散マシンです。したがって、TCP=は可能ですが、より困難です。

DNSのなりすましは、主に、誰かが再帰リゾルバに誤った回答を送信するのを防ぐというセキュリティ面に焦点を当てています。 UDPのフラッディングの側面は、単一の小さなクエリ(たとえば、「。」)がかなり大きな応答を引き起こすことを除いて、DNS固有ではありません。したがって、それはニース増幅ベクターを作る。他にも多くのUDPプロトコルが機能していますが、DNSは至る所で使用されており、攻撃の拡大に使用するマシンを簡単に見つけることができます。

DNSSECはこれをさらに悪化させ、UDPパケットはサイズが4kに達する可能性があります。

10
Michael Graff

IPアドレスは通常、Fire-and-Forget UDPパケットのケースであるため、DNSベースの(D)DOS攻撃に関する限り、簡単に偽造できます。 HTTPトラフィックの場合はそうではないので、Webサーバーと同じローカルネットワーク上にあるか(もちろん、サイトがホストされている場所に応じて完全に可能)、または中間ルーターを制御する必要があります。

6
Mo.

あなたは誰にでも手紙を送ることができ、封筒に返信アドレスを入れない(または間違ったものを入れない)場合、彼らは世界中のすべての迷惑メールフィルターを雇うことができ、開封せずにメッセージをフィルターにかけることができません(処理) それ。

ただし、送信者が応答を必要とする場合は、返信アドレスを正しくするか、正しいアドレスを取得するためのアプリケーションレイヤーメカニズムを用意する必要があります。だから私はあなたがナナからの手紙を開封していると思わせることができますが、私が手紙の内容であなたをだましても、ナナがナイジェリアのいくつかの住所にCASH宛てに作られた小切手を送ることはありません(ナナがナイジェリア人でない限り) )。したがって、チャレンジ/レスポンスは、あなたが中途半端な人間でない限り、効果的な防御策です。

6
noah

データグラムに任意の送信元IPアドレスを設定できます。
私のISPがそのようなパケットを実際に公開するかどうかは、別の問題です。

5
Martin Beckett

これは確かに対処する必要のある現実ですが、根本的な問題は実際には技術的なものではありません。悪意のある人々が悪意のあることを行おうとしています。したがって、本当のソリューションは、非技術的でなければなりません。

Stackoverflowが行ったことは、第2防衛線を処理するためのまさに正しい解決策だと思います。あるレベルの「信頼性」を達成する前に、プラットフォームと対話する能力を制限するさまざまな方法を通じて潜在的なスパムユーザーを制限する手法。

これらの手法は、サイトの全体的な品質を向上させるのに役立つだけでなく、実際にユーザーにインセンティブを与え、より関与してもらい、より信頼できる/信頼できる回答を提供します。

技術的な観点から見ると、Googleが提案するように、最善の方法は次のようにすることです。追加の負荷を吸収/処理するのに効率的です。

すばらしい仕事であり続けます!

5
Joshua

UDPがこれが簡単な理由の主な部分です。実際、SkypeとSlingboxは、UDPでIPアドレスを ' punch 'からNATおよびピアツーピアを容易にします。

TCPは完全なSYN/ACKサイクルを必要とするのでより困難ですが、サーバーをIPアドレスに何ホップも離れて行き、本質的にプロセス内の膨大な数のルーターを拘束するぶら下がっているSYNパケットでサーバーをあふれさせる可能性があります。

3
Justin

上記のように、プロキシを使用することは簡単であり、非常に多くのオープンな匿名プロキシを利用できます。

プロキシを使用しなくても、ファイアウォールのMACアドレスを新しい任意の値に設定し、ケーブルモデムをリセットすると、ISPから新しい光沢のあるIPアドレスが割り当てられます。

そしてそれは初心者のためだけです。 IP禁止を回避する方法は他にもたくさんあります。

2
user16820

その場合、どのような緩和策が可能ですか?

受信側でできることは多くありません。

偽造者のISPは、顧客が異なるネットワークからIPを偽装できないように、発信トラフィックをフィルタリングする必要があります。

これはルーター設定のほんの数行なので、それを行わないための良い言い訳はありません。

攻撃者を追跡する方法はありますが、上流のプロバイダーの協力が必要です: http://www.cymru.com/Documents/dos-and-vip.html

2
TonyB

他の人が指摘したように、UDPは偽造するのはかなり簡単です。TCPそれほど多くはありません。

推奨される防御策は、残念ながら普遍的に配備されているわけではありませんが、出力フィルターです。

DSLなどのサービスを実行しているISPの場合、各仮想回線はip verify unicast reverse-path(またはシスコ以外の同等のもの)は、送信元IPアドレスがそのラインにルーティングされることがわかっている範囲にないパケットをブロックします。

2
Alnitak

90年代後半に、おそらくVisual Basicでソケットプログラミングを行ったことを覚えています。接続にソースIPを設定できました。試してみたところ、netstat -anには実際のソースIPが表示されていましたが、Apacheログには偽装されたIPが表示されていました。 Apacheは偽装されたIPをPerlモジュールなどにも渡していたと思います。

1
Kyle Hodgson