web-dev-qa-db-ja.com

ワイヤーシャークでSSLトラフィックをスニッフィングするwhatsapp

私はwhatsappトラフィックをスニッフィングすることについて多くのことを読んでいます、そして私はすでにsslを超えていることを知っています。しかし、whatsappが暗号化に使用している秘密鍵がわからなくなったら、このsslトラフィックを復号化する方法があるかどうかを知る必要があります。

では、どの証明書が使用されているか、またはそれらのメッセージを復号化する別の方法が存在するかどうかをどのように見つけることができますか?

私は誰かのチャットを読みたくありません、私の意図は本当にネットワークを介してプロトコルメッセージを取得することです。理解するには、リバースエンジニアリングを作成し、個人的な仕事の目的に合わせて単純なJava apiを作成します。

私はsslトラフィックを読み取るためにwiresharkを使用しています。

screenshot of a capture of a whatsapp chat

4
thiagoh

偽のSSL証明書を生成できるプロキシソフトウェアを使用してman-in-the-middle攻撃を試みることはできますが、常に機能するとは限りません。これらのアプリの一部は、証明書のピン留めを使用して、このタイプの攻撃を正確に防止します。

HTTPプロキシ:
http://fiddler2.com/get-fiddler
このソフトウェアは、アプリで許可されている場合に受け入れることができる明らかな偽の証明書を生成します。

証明書ピンニング:
https://security.stackexchange.com/questions/29988/what-is-certificate-pinning

7
WMIF

サーバー(RSA認証スイートの特権、サーバーアプリまたはプログラムメモリ)またはクライアント(アプリまたはメモリ)のいずれかを制御しない限り、メッセージを復号化することはできません(まあ、または両方が弱い暗号をネゴシエートしますが、それは別のトピックです)

最も簡単な方法ですが、サーバーとクライアントの両方で最も侵襲的で簡単に見つけることができます:ssl/tls man-in-the-middle with fake certs。これにより、クライアントアプリがクライアントアプリに表示するサーバー証明書が変更されるため、接続が拒否される可能性があります(証明書のピン留め、ハードピン留め)。そうでない場合は、サーバーを制御し、ネゴシエートされたキーにアクセスできます。

Why?クライアントとサーバーは両方とも、クライアントとサーバーのセッションキーのセットを取得する共有マスターシークレットをネゴシエートします(対応するrfcで指定されたtls prfを使用します(例:rfc2246 --tls1.0))。

そうは言っても、サーバーをいじりたくない、またはいじることができず、クライアントプロセスにアクセスできる場合は、どういうわけか-への道を見つけることができます。 メモリからマスターシークレットを抽出そしてrfcで指定されているようにクライアント/サーバーセッションキーを再計算します。抽出は、アプリケーションをデバッグするか、メモリアーティファクトを検索するか、パッチを適用してからプロトコルメッセージを復号化することで実行できます。マスターシークレットは時々再生成されるため、wiresharkがキーを再ネゴシエーションに一致させるために、マスターシークレットネゴシエーションまたは正確な時刻につながるクライアントhello(クライアントランダム)も追跡する必要があることに注意してください。キーはこのクライアントセッションでのみ有効であり、暗号を復号化できます制限なしマスターシークレットは、tlsキーネゴシエーションが終了した後に両者が合意する最終的なシークレットであるため、RSA認証になります。

マスターシークレットを取得し、それをクライアントhelloにマップしたら、それを nssキーログ形式 でwiresharkにフィードできます。

メモリ内のmaster_keyを見つける方法の例を次に示します。 pymemscrape は、プロセスメモリイメージからmaster_keyを見つける方法を示すPoCです。

3
tintin

セッションキーロギングを使用すると、セッションのキーに到達できます。その後、wiresharkはそれを使用してパケットを解決できます。

  1. マシンでセッションロギングを有効にします。

    Windowsの場合:「高度なシステム設定」->「環境変数」

    「SSLKEYLOGFILE」という名前の新しい変数と、指定されたファイル/path/to/sslkeylog.logを追加します。

    Linux、MAC OS:

    $ export SSLKEYLOGFILE =〜/ path/to/sslkeylog.log

  2. Wiresharkにセッションログファイルを追加します

    編集->設定->プロトコル-> SSLを選択

    「sslkeylog.log」ファイルを(Pre)-Master-Secretログファイル名まで参照して保存します。

詳細な手順はこちら: https://jimshaver.net/2015/02/11/decrypting-tls-browser-traffic-with-wireshark-the-easy-way/

2
ozust

不可能です。誰もがサーバー証明書と公開鍵を持っていますが、情報を復号化するには秘密鍵が必要です。秘密鍵はサーバー(whatsapp)にのみ存在します。

この情報を復号化できる唯一の方法は、whatsappサーバーにハッキングして秘密鍵を盗むことです(これは行わないでください)

1
gerrytan

あなたが鍵を持っているなら、多分このプラグインはあなたを助けることができます!見てください

https://github.com/davidgfnet/wireshark-whatsapp

1