重要な要約:sslsplitのインターフェースミラーリングを使用してこれを行うことはほとんど可能ですが、ミラーリングされたインターフェースでsslsplitが送信したARP要求にカーネルが応答しないという問題に直面しました。
私のコンピュータで実行されているプログラムでSSL / TLS接続を傍受し、Wiresharkで復号化されたコンテンツを表示したいと思います。 sslsplitのインタフェースミラーリングが私にぴったり必要なようで、ずっと設定してみました。
このコマンドはミラーリングなしで傍受を正しく設定し、標準出力にいくつかの情報のみを印刷します。
sudo sslsplit -D -l /dev/stdout -c ca.crt -k ca.key tcp 192.168.10.1 9090 ssl 192.168.10.1 9091
192.168.10.0/24
veth リンクのサブネットです。 vethの一方の端を新しいネットワーク名前空間に配置し、もう一方の端をその名前空間のデフォルトパスに設定しました。編集2:つまり、私は次のことをしました。
ip link add veth0a type veth peer veth0b
ip address add 192.168.10.1/24 dev veth0a
ip netns add sslsplitns
ip link set veth0b netns sslsplitns
ip netns exec sslsplitns ip address add 192.168.10.2/24 dev veth0b
ip link set veth0a up
ip netns exec sslsplitns ip link set veth0b up
ip netns exec sslsplitns ip route add default via 192.168.10.1
ip netns exec sslsplitns $cmd
アイデアは、対応するネットワーク名前空間(たとえば、.sslsplitはNATエンジンを使用して機能するため、この設定が必要であることを知りました。INPUTチェーンを介さないとパケットを受信できないようです)。
とにかくネットワークミラーリングを使用するには、当然ミラーリングしたいインターフェースを選択する必要があります-I
。しかし、sslsplitは次のよう-I
に依存すると言います-T
。
-Tアドレス-Iで指定されたインターフェイスの宛先アドレスaddrのシミュレートされたパケットで接続内容をミラーリングします。現在、IPv4宛先アドレスのみがサポートされています。 SSLsplitがミラーサポートなしで構築されている場合、このオプションは使用できません。
編集4:これは、私が1.2.3.4に対してHTTPSリクエストをすると、sslsplitがこのオプションに提供するすべてのものに対して同等のHTTPリクエストを行うことを意味するようです。誰かが私がこれを間違って理解した場合は、修正してください。これがどのように機能するのか完全にはわからないからです。 sslsplitは提供されたこのアドレスを送信元および宛先IPとして使用できますか?実際に聞いている間、他のプログラムがこれらのミラーリングされたパケットを受信しないようにしますか? sslsplitに物理物理リンクと他の物理システムのIPを提供すると、このミラーリングはどのように機能しますか?これらのミラーリングされたパケットは、実際にWiresharkやtcpdumpなどのツールでチェックするのではなく受信されるようになっていますか?
だから私はダミーインターフェイス(ip link add dummy0 type dummy
)を作成し、ここにアドレスを与え、そのアドレスをsslplitの-T
。
編集:コマンドは次のとおりです。
sudo sslsplit -D -l /dev/stdout -T 192.168.12.2 -I veth1a -c ca.crt -k ca.key tcp 192.168.10.1 9090 ssl 192.168.10.1 9091
Wiresharkを介して復号化されたSSLパケットを表示する準備をしている間、sslsplitは私が提供したIPアドレスのハードウェアアドレスを照会するためにARP要求を送信するのを見ました。いくつかの試みの終わりに、sslsplit
彼は結局このメッセージを残して死亡したfailed to lookup target ether
。おそらく送信されたアドレスと同じであるため、カーネルが応答しない可能性があるので、真剣に受け入れるには愚かすぎると思いました。そのため、同じ/ 24サブネットの両端に異なるアドレスを持つ別のvethリンクを作成し、それらの1つをsslsplitに供給しました-T
。別のアドレスを正しく使用してハードウェアアドレスを提供したIPをARPクエリしましたが、カーネルはまだ応答しません。 ARPリクエストに。
ARPにsysctl
関連するすべてのオプションを有効にしようとしました。rp_filter
この回答。
しかし、さまざまなプログラムがSSLKEYLOGFILE
Wiresharkで解読されたSSLを見つけるために環境変数を使用することをサポートしていることがわかっていますが、接続を傍受したいプログラムはその環境変数をサポートしません。
以下はARPリクエストを含むWiresharkの写真です。これが失敗すると、SSDPパケットも表示されますが、それが何であるかわからず、関連性がないようです。
編集3:記録にip link
カーネルが応答しなければならないイーサネットアドレスを示すいくつかの出力は次のとおりです。
46: veth1b@veth1a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 4a:36:55:f8:e1:d2 brd ff:ff:ff:ff:ff:ff
答え1
私はあなたの問題を解決できませんが、少しでも役に立つことを願っています。
ご存知のように、ミラーリングにはパラメータ-I
とが必要です。-T
パラメータはアナライザ-I
(ミラーリングされたパケットをキャプチャするノード)として使用されるインターフェイスを指定し、パラメータはミラー化された-T
データターゲットのIPv4アドレスを指定します。
SSLsplitは、実際に提供されたインターフェイスとIPv4アドレスのMACアドレス(L2ヘッダ)を確認します。 SSLsplit はインターフェイスで送信元 MAC アドレスを検索し、宛先 IPv4 アドレスへのインターフェイスから ARP 要求を送信します。 SSLsplitは、宛先MACアドレスを含むARP応答を待ち、すべてのアドレスがパケットを満たすことを可能にします。
SSLsplit 仮想インターフェイスを提供している場合は、宛先 MAC アドレスを確認できません。だからあなたはそれを持っていますfailed to lookup target ether
。
-X
この場合、.pcap
パラメータを使用してトラフィックをファイルに記録し、問題を解決する必要がない方が良いでしょうか?