SSLKEYLOGFILEをサポートしていないプログラムのWiresharkで復号化されたTLS / SSLトラフィックを調べるにはどうすればよいですか?

SSLKEYLOGFILEをサポートしていないプログラムのWiresharkで復号化されたTLS / SSLトラフィックを調べるにはどうすればよいですか?

重要な要約: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/24veth リンクのサブネットです。 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この回答

しかし、さまざまなプログラムがSSLKEYLOGFILEWiresharkで解読されたSSLを見つけるために環境変数を使用することをサポートしていることがわかっていますが、接続を傍受したいプログラムはその環境変数をサポートしません。

以下はARPリクエストを含むWiresharkの写真です。これが失敗すると、SSDPパケットも表示されますが、それが何であるかわからず、関連性がないようです。

Wireshark arpリクエスト

編集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パラメータを使用してトラフィックをファイルに記録し、問題を解決する必要がない方が良いでしょうか?

関連情報