web-dev-qa-db-ja.com

自分のブラウザで送受信されたHTTPSトラフィックをWiresharkで復号化するために使用する秘密鍵を取得する方法

APIリクエストを送信するWebサイトを使用しています。リクエストを自分で作成するクライアントを作成したいのですが、そのためには、まずリクエストペイロードを確認する必要があります。ただし、接続は保護されているため、wiresharkでデータを表示することはできません。

WiresharkがSSL復号化をサポートしていることがわかりました: http://wiki.wireshark.org/SSL

ただし、秘密鍵ファイルを取得または生成する方法は説明されていないため、調べてみて次のブログエントリを見つけました: http://blog.stalkr.net/2010/03/codegate-復号化-https-ssl-rsa-768.html

画像に示されているように適切なパケットを見つけた後、証明書をエクスポートしましたが、それらが行っていたチャレンジとは異なり、私のために確立された接続はRSA-2048を使用し、因数分解を提供しません(実際の証明書はそれを提供しないと仮定しています) 、ゲーム用などのみ)。

サードパーティのWebサイトに送信されたHTTPSパケットを復号化できますか?必要な鍵ファイルをどのように生成しますか?

18
MxLDevs

Wiresharkは非常に強力なツールです。ほとんどの場合、ブラウザのFirefox(アドオンなし)デバッグコンソールとchromeで十分です。どちらにも十分な時間のネットワークモニターがあります。FirefoxのモニターはtはまだWebSocketをサポートしています。

それでもWiresharkを使用したい場合は、SSLKEYLOGFILEファイルの利用を検討してください。 this および this のヘルプ、およびリンクされたWireshark Wikiページを参照してください。

14
user10008

秘密鍵はWebサーバーに秘密です。 Webサーバーを制御しないと、それを取得できません。証明書は公開鍵のみを保持しているため、あまり役に立ちません。プロキシhttpsサーバーをセットアップして、中間者攻撃を試みることができます。その場合は、プロキシサーバーのキーを取得します。

ソフトウェアからプロトコルをクラックしようとしているのですか、それとも通常はブラウザを使用してサービスにアクセスしていますか?

2番目のケースでは、user10008によって提案されたように、ファイルにキーを記録するようにFirefoxを構成することにより、セッションに一時を使用できます。リンクしたWikiページでSSLKEYLOGFILEを探し、そのuser10008のリンクを投稿しました。

11
pqnet

できません。ただし、サードパーティのWebサーバーを管理する権限がない場合、または他の悪質な手段で証明書を取得する場合を除きます。 SSL/TLSは、プライベートのままであるプライベート証明書に依存しています。

さらに、サーバーの秘密鍵があったとしても、 Perfect Forward Secrecy が使用されていると、以前のセッションからのトラフィックを復号化できない場合があります。その場合、単一のセッションで使用される特定の秘密鍵を知っている必要があります。

原則として、youはクライアントなので、master_secretを導出するために必要なpre_master_secretを知っています。 master_secretは、セッションの暗号化に実際に使用される対称鍵です。 @pqnetが言ったように、 FireFoxとChromeでこれを利用する方法はあります ですが、クライアントソフトウェアに依存しており、Flashについてはわかりません。ただし、独自のHTTPSトラフィックを検査する簡単な方法があります...

ローカルプロキシ

それはあなた自身の接続なので、あなたがプロキシサーバーを介してウェブサイトを渡すことができない理由はありません。多くのプロキシサーバーはSSLパススルーを許可するように構成されており、エンドツーエンドの暗号化を提供しますが、プロキシサーバーで接続を終了することでこれを破ることができます(プロキシのSSL証明書が信頼できる場合)。プロキシは、サードパーティのWebサイトへの独自のSSL接続を確立し、送信するトラフィックを渡します。企業は同じ方法を使用して、ユーザーの発信HTTPSトラフィックを検査する場合があります(これは問題のあるトラフィックです)。本質的には中間者です。

Browser <---> Local Proxy <---> Website
          ^                 ^
        HTTPS             HTTPS

ローカルプロキシは独自のマシンで実行され、通過するトラフィックを検査して変更することもできます。攻撃者がこれを試みた場合、ユーザーはブラウザの警告を表示して、要求されたWebサイトの有効な証明書を受け取っていないことを示します。ただし、ローカルプロキシのCA証明書を信頼するようにマシンを設定できます。

HTTPSトラフィックで機能する2つの一般的なローカルプロキシは次のとおりです。

Burp Suiteには AMFシリアル化サポートが組み込まれています があります。 Fiddlerは extension があるように見えます。

8
itscooper

そのクーパーのメッセージに加えて、デバイス/ブラウザーにインストールされている信頼できる証明書でチャールズプロキシを使用し、チャールズがSSLを復号化してトラフィックを読み取れるようにすることもできます。 SSLを介して通信しているデバイスをテストするとき、私はこれをかなり頻繁に行います。

http://www.charlesproxy.com/documentation/proxying/ssl-proxying/

2
JasonG

SSLは、試行していることを正確に実行できないように構築されています。 Wiresharkの有無にかかわらず、プライベート通信にアクセスするにはキーが必要です。

いくつかの回答は中間者攻撃を示唆しており、これは多大な労力で機能するはずです...しかし、これがパブリックAPIである場合は、おそらく文書化されています。特に、WebサービスAPIの場合、 [〜#〜] wsdl [〜#〜] を取得できますブラウザーから、エンドポイントURLに?WSDLを追加します。メソッドと戻り値の型の完全なリストが表示されます。

1
Mashmagar