web-dev-qa-db-ja.com

アプリケーションの暗号API呼び出しをフックできる場合、WireSharkでTLSを復号化するにはどうすればよいですか?

実行可能ファイルのBCryptEncryptおよびBCryptDecrypt呼び出しをフックしました。これらの関数の入力引数と出力値を取得できます。このプログラムはBCryptEncryptを呼び出してTLS経由で送信されるデータを暗号化し、BCryptDecryptを呼び出してTLSから受信したデータを復号化します。そのため、このフックにより、TLSチャネル経由で暗号化されていない大量のデータが提供されました。

ただし、1つのHTTPSリクエストが複数のTLSパケットに分割される可能性があるため、上記の関数を呼び出すたびに、フックはHTTPSストリーム全体の一部しか取得できません。

TLSパケットのすべての暗号化されたデータのプレーンテキストを既に取得しているので、WireSharkでTLSキャプチャを「復号化」する方法があるかどうか疑問に思っています。キャプチャーの分析に役立つように、フォローHTTPストリーム、Gzip解凍、およびWireSharkの他の多くの便利な機能を利用できるようにします。

1
vaxiv

Wiresharkに、取得したアプリケーションレベルのデータを直接操作させる方法はありません。ただし、これらのデータに基づいて新しいpcapを作成し、Wiresharkを使用してこのpcapを分析できます。たとえば、これは少しのPerlと Net :: PcapWriter モジュールを使用して行うことができます。これにより、pcapを簡単に作成し、独自のアプリケーションデータとTCP接続を追加できます。それに:

use strict;
use Net::PcapWriter;
my $pcap = Net::PcapWriter->new('test.pcap');
my $conn = $pcap->tcp_conn('1.1.1.1',1234,'2.2.2.2',80);
$conn->write(0,"GET / HTTP/1.0\r\nHost:..."); # HTTP request from client
$conn->write(1,"HTTP/1.1 200 ok\r\n...");     # HTTP response from server

Pythonと有名な scapy ライブラリでも同様のことができるでしょう。

0
Steffen Ullrich