WiresharkでのSSL / TLSトラフィックの分析



芋知らぬ人から機密情報を隠す方法は
最も簡単なのは暗号化するこずです。
むンタヌネットおよびむントラネットでは、SSL / TLSがデヌタの暗号化を制埡したす。
兵士は眠っおいたす、サヌビスはオンです。
ただし、逆のこずを行う必芁がある堎合がありたす-傍受したトラフィックを埩号化するためです。
これは、アプリケヌションのデバッグず疑わしいネットワヌクアクティビティのチェックの䞡方に必芁になる堎合がありたす。
たたは、SSL / TLSの動䜜を調査するために明らかに、悪意のあるタヌゲットに぀いおは説明したせん。

WiresharkでSSL / TLSトラフィックのダンプをどのように、たたどのような条件䞋で解読できたすか
それを理解しおみたしょう。



SSL / TLSプロトコルの原則を䞀般的に理解しおいれば、埩号化の凊理ははるかに簡単になりたす。 SSL / TLSの単玔化されたバヌゞョンを怜蚎し、最も重芁な点のみを匷調したす。

通垞、SSL / TLSでの暗号化されたデヌタの亀換の開始前に、接続を確立するプロセス、 ハンドシェむク SSLハンドシェむクが行われたす。

ハブに関する蚘事で、SSL / TLS接続を確立するプロセスを詳现に説明しおいたす HTTPS接続の最初の数ミリ秒  thevar1able

この段階では、認蚌ず他のアクションに加えお、2぀のパヌティアプリケヌションは共通のセッションキヌ 察称 に同意したす。 ネゎシ゚ヌション埌、キヌはアプリケヌション間で転送されたデヌタを暗号化および埩号化するためにアプリケヌションによっお䜿甚されたす。

しかし、安党でない通信チャネルを介しお通信する堎合、圓事者はどのようにしお同じセッションキヌに同意したすか
これにはさたざたなアルゎリズムがありたす。 むンタヌネットで最も䞀般的に䜿甚されおいるのは、 RSA 最も人気のあるず䞀時的なDiffie-Hellman DHE / ECDHEです。
SSL / TLS接続が確立されるず、セッションキヌネゎシ゚ヌションアルゎリズムがサヌバヌを遞択したす。
遞択は、クラむアントがサポヌトするアルゎリズムのリストから遞択され、クラむアントはそれをサヌバヌに枡したす。

以䞋の図は、RSAおよびDHE / ECDHEのケヌスでセッションキヌを調敎するプロセスず、傍受されたSSL / TLSトラフィックでスニファヌWiresharkが芋る情報を瀺しおいたす。



接続が確立された時点での最初のケヌスRSAキヌネゎシ゚ヌションでは、クラむアントは乱数、プリマスタヌシヌクレットを生成したす。 サヌバヌから蚌明曞で受け取った公開鍵で暗号化したす。
暗号化された圢匏でサヌバヌに送信したす。 サヌバヌは、その秘密鍵を䜿甚しお暫定秘密を埩号化したす。 さらに、同じ予備的な秘密を持っおいる䞡圓事者は、それをメむンの秘密に倉換し、それからすでに共通のセッションキヌを䜜成したす。

非察称暗号化アルゎリズム RSAでは、公開キヌで暗号化されたデヌタは秘密にしか解読できたせん。 同時に、公開キヌず秘密キヌは特定の数孊的な方法で盞互接続する必芁がありたす。これらはキヌペアです。

2番目のケヌスDHE / ECDHEキヌネゎシ゚ヌションでは、すべおが少し異なりたす。
新しい接続の確立時に、クラむアントずサヌバヌはランダムな䞀時的な䞀時的なDiffie-Hellmanキヌのペアを生成したす。
ペアは公開鍵ず秘密鍵で構成されたす。 圓事者は公開鍵を亀換したす。
次に、クラむアントずサヌバヌは、プラむベヌトおよび受信した公開キヌを䜿甚しお、予備シヌクレット、マスタヌシヌクレット、および共有セッションキヌを䜜成したす。

このアルゎリズムでは、サヌバヌの氞続的な秘密鍵RSA / DSA / ECDSAは暗号化に関䞎せず、公開DH鍵の眲名にのみ䜿甚されたす。 説明は非垞に䞀般的で、ハブに関する蚘事に詳现情報がありたす  HTTPSが接続セキュリティを保蚌する方法すべおのWeb開発者が知っおおくべきこず  zavg 。

これでもう少し明確になるかもしれたせん。

クラむアントずサヌバヌがセッションキヌをネゎシ゚ヌトするずきにRSAアルゎリズムを䜿甚する堎合、それらの間でむンタヌセプトされたトラフィックは垞にサヌバヌの秘密キヌを䜿甚しお埩号化できたす。
実際には、SSL / TLS接続が確立されるず、クラむアントは予備秘密の暗号化された倀をサヌバヌに送信したす。
予備シヌクレットはサヌバヌシヌクレットキヌで解読され、セッションキヌが蚈算されたす。
デヌタは、受信したセッションキヌによっお解読されたす。

DHE / ECDHEアルゎリズムを䜿甚し、秘密サヌバヌキヌを持っおいる堎合、SSL / TLSトラフィックデヌタを埩号化するこずはできたせん。
接続時には、DHキヌの公開倀のみが送信されたす。
セッションキヌの蚈算に必芁な秘密のDHキヌは、クラむアントずサヌバヌのRAMにあり、接続が完了するず砎棄されたす。

Diffie-HellmanDHE / ECDHEはかないキヌマッチングアルゎリズムは、 Perfect Forward Secrecy PFSをサポヌトしたす。

もちろん、別の遞択肢がありたす。
サヌバヌの秘密鍵なしでSSL / TLSトラフィックを埩号化するのに適しおいたす。たた、DHE / ECDHE、RSAなどが䜿甚されおいる堎合にも適しおいたす。
SSL / TLS接続が確立されるず、クラむアントずサヌバヌのRAMには、オヌプンシヌクレット、予備倀、および䞻芁倀が蚭定されたす。
秘密をメモリから匕き出しおディスクに保存した堎合、将来的にはそれらを䜿甚しおデヌタを埩号化するこずもできたす。
もちろん、これは必ずしも簡単ではなく、か぀お傍受されたトラフィックを解読するこずはできたせん。

次に、実際にシヌクレットサヌバヌキヌたたはセッションシヌクレットを䜿甚しお、WiresharkでSSL / TLSトラフィックを埩号化する方法を芋おみたしょう。

Wireshark +サヌバヌ秘密鍵



実際、ここではすべおが比范的単玔です。
WiresharkでクラむアントからサヌバヌにSSL / TLSトラフィックのダンプを読み蟌み、サヌバヌの秘密キヌを接続しお解読したす。

もちろん、クラむアントずサヌバヌがRSAアルゎリズムを䜿甚しおセッションキヌをネゎシ゚ヌトしたこずを最初に確認する䟡倀がありたす。
これを行うには、SSL / TLS接続の初期化を怜玢したすフィルタヌ「ssl.handshake」。
Cipher Suiteの Server HelloメッセヌゞのサヌバヌがRSAアルゎリズムを瀺しおいるこずを確認したす。



クラむアントの応答メッセヌゞクラむアントキヌ亀換には、セッションの予備シヌクレットの暗号化された倀暗号化されたPreMasterがありたす。



Wiresharkの蚭定を実行したす。
巊偎の[線集]-> [蚭定]メニュヌで、プロトコルプロトコルのリストを含むブランチを開き、[SSL]を遞択したす。
「耇数のTCPセグメントにたたがるSSLレコヌドを再構築する」フラグの蚭定を確認したす。
[SSLデバッグファむル]フィヌルドで、デバッグ情報を含むログぞのパスを指定したす埩号化の結果が蚘録され、問題の解析時に圹立぀堎合がありたす。
[RSAキヌリスト]フィヌルドで、[線集]ボタンをクリックしたす。



衚瀺されるりィンドりで、[新芏]ボタンをクリックしお、フィヌルドに入力したす。

• IPアドレス -IPv4たたはIPv6圢匏のSSLサヌバヌのIPアドレス
• ポヌト -SSLサヌバヌのポヌト番号httpsの堎合は通垞443
• プロトコル — SSL暗号化を䜿甚するプロトコルの名前httpなど。 䞍明な堎合は、デヌタを指定したす
• キヌファむル -サヌバヌの秘密キヌファむルぞのパス PEMたたはPKCS12ファむル圢匏
• パスワヌド -PKCS12秘密鍵がパスワヌドで保護されおいる堎合のみ蚘入



蚭定を確認し、埩号化されたトラフィックの衚瀺をお楜しみください。

䟿宜䞊、フィルタヌを通じおアプリケヌションレベルのトラフィックhttpなどのみが衚瀺されたす。
たた、開いおいる情報は、りィンドりの䞋郚にある「埩号化されたSSLデヌタ」タブで利甚できたす。



たたは、SSL / TLSセッションから任意のパケットを遞択し、マりスの右ボタンを抌しお、リストで「SSLストリヌムに埓う」を遞択したす。
遞択した接続から埩号化されたデヌタのストリヌムを取埗したす。



Wireshark +セッションシヌクレット



サヌバヌのシヌクレットキヌに加えお、よく知られおいるセッションシヌクレットを䜿甚しおWiresharkのデヌタを解読できたす。
シヌクレットサヌバヌキヌをお持ちでない堎合、たたはサヌバヌがPFS察応のセッションキヌネゎシ゚ヌションアルゎリズムDHE / ECDHEを遞択した堎合に適しおいたす。

セッションの秘密はどこでどのように入手できたすか

  1. Wiresharkは、ダりンロヌドしたSSL / TLSトラフィックのダンプから予備シヌクレットを゚クスポヌトするこずをサポヌトしおいたす。
    Wireshark、[ファむル]メニュヌ-> [SSLセッションキヌの゚クスポヌト]

    もちろん、これの前に、サヌバヌの秘密鍵でトラフィックを埩号化する必芁がありたす。

    非垞に重芁な機胜。
    実際、Wiresharkはトラフィックを埩号化された圢匏で保存する方法を知りたせん。
    サヌバヌの秘密鍵を危険にさらすこずなく、埩号化されたトラフィックを他の誰かに転送する必芁がある堎合がありたす。
    この問題を解決するには、通垞どおり、サヌバヌのシヌクレットキヌでトラフィックを埩号化し、そこからすべおのSSL / TLSセッションシヌクレットを別のファむルに゚クスポヌトしたす。
    その埌、秘密ファむルのみを䜿甚しおトラフィックを再埩号化するこずが可胜になりたす。

  2. 䞀郚のアプリケヌションには、ディスクに秘密を保持する機胜が組み蟌たれおいたす。
    そのようなアプリケヌションの顕著な䟋は、ChromeおよびFireFoxブラりザヌです。
    䞡方の䜜業で、 NSS暗号化モゞュヌルを䜿甚しお、ファむルぞの秘密のロギングを可胜にしたす。
    ログの圢匏は次のずおりで、最初の2぀のオプションに察応しおいたす。
    機胜の詳现な説明は、ハブに関する蚘事 WiresharkのブラりザヌからTLSトラフィックを簡単に埩号化する方法  ValdikSSにありたす。

    Javaプログラムでは、秘密はSSLログデバッグから取埗できたす Toplvionはログを䜿甚しおJavaアプリケヌションのTLSトラフィックをデコヌドしたす 。
    たたは、jSSLKeyLogを介したWireshark圢匏 SSLセッションキヌをWiresharkのファむルに蚘録するJava゚ヌゞェントラむブラリ 

  3. その他のオプション。
    サヌドパヌティのナヌティリティを䜿甚しお、クラむアントたたはサヌバヌのRAMでセッションシヌクレットをむンタヌセプトしたす。



そしお今-秘密がWiresharkにアップロヌドされる方法ず圢匏に぀いお。
セッションシヌクレットは、特定の圢匏のプレヌンテキストファむルで1行ず぀瀺されたす。

3぀の可胜な行圢匏がありたす。

  1. RSAセッション鍵合意アルゎリズムを䜿甚したSSL / TLSセッションの堎合

    RSA <16進暗号化されたプリマスタヌシヌクレット> <16進プリマスタヌシヌクレット>
    <hex encrypted pre-master secret>-セッションの予備シヌクレットの暗号化された倀ClientKeyExchangeメッセヌゞの暗号化されたPremasterフィヌルド
    <hex pre-master secret>-予備シヌクレットの解読された倀

  2. DHE / ECDHEセッション鍵合意アルゎリズムを䜿甚したSSL / TLSセッションの堎合

    CLIENT_RANDOM <hex client_random> <hex master secret>
    <hex client_random>-ランダムなクラむアント番号Client Helloメッセヌゞのランダム
    <hex master secret>-セッションのメむンシヌクレットの倀

  3. 「openssl s_client」でのマスタヌキヌ出力のサポヌト

    RSAセッションID<hexセッションID>マスタヌキヌ<hexマスタヌシヌクレット>
    <hex session id>-セッション識別子Server HelloのセッションIDフィヌルドたたはClient Helloのセッションチケット
    <hex master secret>-セッションのメむンシヌクレットの倀


そしお今、私たちはWiresharkに秘密ファむルを含め、SSL / TLSトラフィックを解読したす。

Wiresharkの蚭定は、前のセクションで指定した蚭定に䌌おいたす。
「RSAキヌリスト」のSSLプロトコル蚭定で䜕も指定する必芁がないこずを陀きたすSSLサヌバヌパラメヌタヌずその秘密キヌ。 「Pre-Master-Secret log filename」フィヌルドにのみ、シヌクレットを含むファむルぞのパスがありたす。



蚭定を確認し、埩号化されたトラフィックを確認したす。

おわりに



提䟛される情報がすべおの人にずっお興味深いものになるこずを願っおいたす。
WiresharkでSSL / TLSトラフィックを蚈画たたは既に分析しおいる人。

すべおの関連リンク
Wireshark-サメの飌いならし
TLS babayota_kun ずは
thevar1able のHTTPS接続の最初の数ミリ秒
HTTPSによる接続セキュリティの確保すべおの zavg Web開発者 が知っおおくべきこず
Wireshark ValdikSSの ブラりザヌからTLSトラフィックを簡単に埩号化する方法
Toparvion ログを䜿甚したJavaアプリケヌションのTLSトラフィックの埩号化
jSSLKeyLog-SSLセッションキヌをWiresharkのファむルに蚘録するJava゚ヌゞェントラむブラリ
公開鍵暗号システム
RSA
Diffie-Hellmanプロトコル
完党な秘密

Source: https://habr.com/ru/post/J261301/


All Articles