IPv6がルーターを破る方法

画像



まえがき



今日私は、NATを構成 するための膨大な 数の 指示が次の形式の行を使用することを推奨しているという考えで目が覚めました。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      
      





多くの人がこの設計の問題を理解しており、以下を追加することをお勧めします。

 iptables -A FORWARD -i ppp0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
      
      





ただし、多くの場合、FORWARDテーブルをデフォルトのDROPアクションに設定することを忘れるか、テーブルの最後にREJECTルールを追加します。

一見、すべてが正常なようです。 ただし、これは事実とはほど遠い。 実際には、 WANポートからWANポートへのトラフィックのルーティングを禁止しない場合、 WANネットワークの誰かが(プロバイダーが入口全体を1/24に設定すると仮定して)IPを登録するだけでトラフィックをルーティングできますゲートウェイとして。 最新のすべてのSOHOルーターはこれを考慮に入れていますが、通常のLinuxでルーターを作成する経験の浅い管理者はそれを知らないか、忘れないかもしれません。 私のプロバイダーのサブネットにはそのようなルーターはなく、世界を引き継ぐという私の計画は失敗しました。 ただし、この記事ではそれについてまったく説明しません。



魔法のコロン



ご存知かもしれませんが、多くの最新のプログラムとサービスはIP : :(2つのコロン)にバインドされており、以前のように0.0.0.0にバインドされていません。 IPv6アドレス::は、IPv4 0.0.0.0と同じ意味です。 「すべてのインターフェースを聴く」。 多くの人は、プログラムが::をリッスンする場合、このソケットはIPv6接続のみを受け入れることができると考えていますが、これはそうではありません。

IPv6には、いわゆるIPv4アドレスのIPv6範囲へのマッピングがあります。 プログラムがソケット::でリッスンし、IPv4アドレス1.2.3.4からアクセスされる場合、プログラムはアドレス:: ffff:1.2.3.4から接続を受け取ります。 これは次の方法で回避できます。

 sysctl -w net.ipv6.bindv6only=1
      
      





しかし、これは必ずしも必要ではありません、なぜなら 通常、プログラムが1つのソケットでリッスンし、2つのプロトコルを介して接続を一度に受信できると便利です。 ほとんどすべてのディストリビューションでは、IPv6ソケットはそのように動作します。 bindv6only = 0。



fe80と彼の友人ff02



90年代で立ち往生していない場合は、自分で知らなくてもIPv6に遭遇することが保証されています。 現代のすべてのオペレーティングシステムでは、IPv6サポートがデフォルトで有効になっています。つまり、すべてのインターフェイス(まれな例外を除く)に対して、 fe80 ::で始まるIPv6リンクローカルアドレスが自動的に割り当てられます。 さらに、場合によっては、このアドレスはMACアドレスをエンコードするだけで取得されます。

Link-Localアドレスを見つけることは問題があるように思えますが、それでも長くて恐ろしいですが、ここではマルチキャスト範囲ff02 ::が助けになります。



このようなクールなアドレスがあります: ff02 :: 1 pingを実行すると(これはリンクローカルアドレスであるため、必ずインターフェイスを指定してください)、ネットワーク上のすべてのコンピューターが応答します。

 % ping6 ff02::1%enp4s0 PING ff02::1%enp4s0(ff02::1) 56 data bytes 64 bytes from fe80::21f:d0ff:fea2:46a3: icmp_seq=1 ttl=64 time=0.056 ms 64 bytes from fe80::fe8b:97ff:fe66:9100: icmp_seq=1 ttl=64 time=1.60 ms (DUP!) 64 bytes from fe80::226:9eff:fe6d:22a0: icmp_seq=1 ttl=64 time=1.62 ms (DUP!) 64 bytes from fe80::f2de:f1ff:fe27:3685: icmp_seq=1 ttl=64 time=1.70 ms (DUP!) 64 bytes from fe80::62a4:4cff:fe7b:1c90: icmp_seq=1 ttl=64 time=2.95 ms (DUP!) 64 bytes from fe80::fac0:91ff:fe32:5bbe: icmp_seq=1 ttl=64 time=3.02 ms (DUP!) 64 bytes from fe80::226:18ff:fe9e:4b3a: icmp_seq=1 ttl=64 time=3.09 ms (DUP!) 64 bytes from fe80::ba70:f4ff:fe8b:8dda: icmp_seq=1 ttl=64 time=3.14 ms (DUP!) 64 bytes from fe80::62a4:4cff:fea2:aee0: icmp_seq=1 ttl=64 time=3.27 ms (DUP!) 64 bytes from fe80::224:54ff:fedb:d17d: icmp_seq=1 ttl=64 time=3.93 ms (DUP!) 64 bytes from fe80::2a1:b0ff:fe40:904: icmp_seq=1 ttl=64 time=4.21 ms (DUP!) 64 bytes from fe80::76d0:2bff:fe69:31d8: icmp_seq=1 ttl=64 time=6.09 ms (DUP!)
      
      





ご覧のとおり、11台のデバイスが応答しました。 ところで、このアドレスは、たとえば、DHCPを介してアドレスを受信するようにサーバーが構成されていて、DHCPが落ちた場合、またはサーバーポートに直接接続しているが、DHCPを上げたくない場合に使用すると便利です。 sshでfe80アドレスに移動するだけです。



アドレスff02 :: 2pingすると 、ネットワーク上のすべてのIPv6ルーターが応答します。 残念ながら、私の場合は何もありませんでした。



ルーターをスキャンします



私はこれらのアドレスをnmapでスキャンすることにしました。

 % nmap -6 -T4 --open -n -iL list.txt
      
      



非表示のテキスト
 Starting Nmap 6.46 ( http://nmap.org ) at 2014-06-07 16:53 MSK Nmap scan report for fe80::f2de:f1ff:fe27:3685 Host is up (0.0014s latency). Not shown: 999 closed ports PORT STATE SERVICE 53/tcp open domain Nmap scan report for fe80::fe8b:97ff:fe66:9100 Host is up (0.0012s latency). Not shown: 998 closed ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http Nmap scan report for fe80::226:9eff:fe6d:22a0 Host is up (0.0012s latency). Not shown: 998 closed ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http Nmap scan report for fe80::62a4:4cff:fea2:aee0 Host is up (0.00099s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::226:18ff:fe9e:4b3a Host is up (0.00094s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::62a4:4cff:fe7b:1c90 Host is up (0.00085s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::76d0:2bff:fe69:31d8 Host is up (0.00072s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::fac0:91ff:fe32:5bbe Host is up (0.00037s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::ba70:f4ff:fe8b:8dda Host is up (0.00059s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::2a1:b0ff:fe40:904 Host is up (0.00077s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap scan report for fe80::224:54ff:fedb:d17d Host is up (0.0012s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet Nmap done: 11 IP addresses (11 hosts up) scanned in 4.04 seconds
      
      





IPv4では、これらのポートはすべて閉じられます。

ご覧のとおり、多くのルーターには、外部からIPv6を介してTelnet、Webインターフェイス、およびDNSがあります。

これはどういう意味ですか? それは簡単です-ルーターのファームウェアの開発者は、単にIPv6を忘れていました。



telnetルーターを開きます。



Webベースのルーター:





それらの多くには、標準の管理者/管理者パスワードがありました。

これらのルーターのほとんどで、ip6tables(IPv6のiptables)が欠落していました。 開発者は、カーネルのIPv6サポートを完全に無効にするか、httpおよびtelnetデーモンが::ではなく0.0.0.0でリッスンしていることを確認する必要がありましたが、何らかの理由でそうではありませんでした。



もし…?



ルーターでIPv6が何らかの方法で構成され、それに応じてIPv6パケットルーティングが有効になっており(net.ipv6.conf.all.forwarding = 1)、ip6tablesがまったく構成されていないか、正しく構成されていない場合、確実に可能ですIPv4と同様に、このルーターを介してパケットをルーティングします。



おわりに



私はすでにこれらの脆弱性についていくつかの企業に手紙を送っていますが、私はまだ何人かを管理していません。 いずれにしても、手紙は全員に送られます。

IPv6を使用します。忘れないでください。



PS



ブラウザーがインターフェースでアドレスを開くことができないことに驚きました。 すべてのブラウザでhttp:// [fe80 :: a:b:c:d%enp4s0]のようなリンクを開くことができませんでした。 彼らは、パーセント記号をエスケープする必要があると言います。 http:// [fe80 :: a:b:c:d%25enp4s0]ですが、それでもうまくいきませんでした。 ポート転送を使用する必要がありました。



All Articles