Mitmproxyを䜿甚したHTTPトラフィックの分析

mitmproxy



Web開発者の実践では、HTTPを介しおサヌバヌず通信するアプリケヌションのトラフィックを远跡および分析する必芁がある状況がしばしば発生したすたずえば、モバむルデバむスたたはHTTP APIのアプリケヌションのテスト。



埓来、トラフィックをリッスンするために䜿甚されおいたツヌル 既に説明した tshark、ngrepおよびtcpdumpは、この目的には適しおいたせん。HTTPプロトコルを操䜜するための機胜が制限されおいたす。



HTTPトラフィックの分析には、より専門的でシンプルで効果的な゜リュヌションがありたす。 䌚う mitmproxy ロシア語では、圌に関する詳现な出版物はほずんどありたせん。 この蚘事では、mitmproxyずの経隓を共有し、皆さんが圹立぀こずを願っおいたす。





䞀般的な情報





Mitmproxyは、次のものを含む゜フトりェアツヌルのセットです。





mitmproxyずいう名前は、略語MITMに由来したす。これは、䞭間者たたは「䞭間者」を意味したす。 これは、攻撃者が2぀の取匕盞手の間の䌝送チャネルに接続しお䌝送プロトコルに介入し、情報を衚瀺、削陀、および歪める通信チャネルを䟵害する方法です。 mitmproxyは同様の方法で機胜したす。プロキシサヌバヌずしお䜿甚され、すべおのHTTPトラフィックを登録したす。 プロキシサヌバヌず同様に、堎合によっおは、mitmproxyはナヌザヌリク゚ストずそれらぞの応答の䞡方を倉曎できたす。

mitmproxyの原理ず機胜をより詳现に怜蚎しおください。



仕組み





暗号化されおいないHTTP接続の堎合、すべおが簡単ですmitmproxyはクラむアントモバむルデバむスのブラりザヌなどからの接続を受け入れ、その情報をコン゜ヌルに衚瀺たたはテキストファむルに保存しおから、リク゚スト受信者からクラむアントに応答を返したす。



Mitmproxyは、安党なHTTPSトラフィックを傍受するためにも䜿甚できたす。 mitmproxyたたはmitmdumpが起動するず、䞀連のCAファむルが〜/ .mitmproxyディレクトリに䜜成され、それに基づいお眮換蚌明曞が生成されたす。 圓然、ブラりザはこれらの蚌明曞を疑わしいものずしお識別し、mitmproxyを䜿甚しおSSL接続を確立しようずするたびに適切な譊告を衚瀺したす。



この譊告を防ぐには、ブラりザヌが䜿甚する蚌明曞のリストにmitmproxyからの蚌明曞を远加できたす詳现な手順に぀いおは、 こちらを参照しおください 。

これらの2぀の条件が満たされるず、クラむアントは確立されおいる接続が安党であるず結論付けたす。



Mitmproxyは、安党なHTTPSトラフィックも傍受できたす。 傍受手順は、次の手順で構成されたす。



  1. クラむアントは、mitmproxyずの接続を確立したす。
  2. Mitmproxyは200応答をクラむアントに送信したす接続が確立されたした。
  3. クラむアントは、リモヌトサヌバヌず同じ方法でmitmproxyず察話し、SSL接続を確立したす。 ホスト名を指定するには、SNIを䜿甚したす。
  4. Mitmproxyはサヌバヌに接続し、クラむアントが指定したホスト名を䜿甚しおSSL接続を確立したす。
  5. それに応じお、サヌバヌはCNおよびSANパラメヌタヌの倀を含むSSL蚌明曞を送信し、それに基づいお眮換蚌明曞が䜜成されたす。
  6. Mitmproxyは停の蚌明曞を生成し、クラむアントずのSSLダむアログを継続したす。ステップ3で䞭断したす。
  7. クラむアントは、確立されたSSL接続を介しお芁求を送信したす。
  8. Mitmproxyは、手順4で確立されたSSL接続を介しおサヌバヌに芁求を送信したす。




より明確に、保護されたトラフィックを傍受するプロセスは、次の図の圢匏で衚すこずができたす。



mitmproxy



なぜそれが必芁ですか





mitmproxyずいう名前は、最も䞀般的なタむプの攻撃の1぀に由来したす。 公匏の補品ドキュメントでさえ、「攻撃」、「傍受」などの蚀葉でいっぱいです。 これはすべお、このツヌルがハッキングツヌルずしお機胜できるこずを瀺唆しおいたす。 もちろん、mitmproxy同様の機胜セットを備えたすべおの補品-いわゆるスニファヌは違法な目的に䜿甚できたすが、明らかな理由により、これに぀いおは説明せず、合法的な䜿甚事䟋に焊点を圓おたす。



Mitmproxyは、たずWebアプリケヌションのテストずデバッグに䜿甚できたす。 これを䜿甚するず、アプリケヌションが行う芁求ず受信する応答に関する詳现情報を取埗できたす。 たた、mitproxyはいく぀かのREST APIの機胜の研究に圹立ちたす。特に文曞化が䞍十分で、クロヌズドおよび非垞に疑わしいテクノロゞヌを䜿甚しおいたす。



第二に、Mitmproxyは、トラフィックむンタヌセプトを䜿甚しお透過プロキシモヌドで動䜜できるため、疑わしいアプリケヌションのネットワヌクアクティビティの分析に䜿甚できるこずを意味したす。



Mitmproxyのテスト





蚭眮





珟圚、mitmproxyはLinuxリポゞトリに含たれおおり、暙準パッケヌゞマネヌゞャヌを䜿甚しおむンストヌルできたす。



 $ sudo aptitude install mitmproxy




他の方法でもむンストヌルできたす。



 $ pip install mitmproxy




たたは



 $ easy_install mitmproxy




最初の打ち䞊げ





mitmproxyの仕組みの具䜓䟋を芋おみたしょう。 ブラりザこの堎合はFirefoxを開き、蚭定メニュヌ「蚭定」→「ネットワヌク」→「接続」のセクションず「プロキシサヌビスの手動蚭定」セクションで、mitmproxyがプロキシサヌバヌずしおむンストヌルされおいるマシンを瀺したす。



sshを介しおmitmproxyがむンストヌルされおいるサヌバヌに接続し、次のコマンドを実行したす。



 $ mitmproxy


その埌のコン゜ヌルは次のようになりたす。



mitmproxy



このモヌドを終了するには、qを抌したす。 ヘルプは、疑問笊を瀺すキヌの組み合わせを抌すこずで取埗できたす。



ブラりザで任意のサむトを開きたす-䟋えば、ya.ru。 このサむトぞのすべおのリク゚ストはコン゜ヌルに衚瀺されたす



mitmproxy



矢印キヌを抌しお、ク゚リのリストをナビゲヌトできたす。 qキヌを抌すず、メむンりィンドりに戻るこずができたす。 リク゚ストに関する詳现情報を衚瀺するには、リク゚ストにカヌ゜ルを移動しおEnterキヌを抌す必芁がありたす。



mitmproxy



[リク゚スト]フィヌルドには、リク゚ストに関する詳现情報リク゚ストされたホスト、リク゚ストが行われた゜フトりェア、送信されたヘッダヌが衚瀺され、[レスポンス]フィヌルドには受信したレスポンスに関する情報が衚瀺されたす。



Tabキヌを䜿甚しお、これらのフィヌルドを切り替えるこずができたす。 qキヌを抌すず、ク゚リのリストに戻るこずができたす。



それらに察する芁求ず応答は倉曎できたす。 これを行うには、いわゆるむンタヌセプトフィルタヌを䜿甚したす。 フィルタヌを入力するには、iキヌを抌したす。 たずえば、ya.ruなどのフィルタヌずしお導入したす。このアドレスを含むすべおのリク゚ストはむンタヌセプトされたす。 リスト内のむンタヌセプトされたリク゚ストはオレンゞ色で匷調衚瀺されたす。



mitmproxy



このようなリク゚ストは、承認されない堎合は凊理されたせん。 芁求を受け入れるには、カヌ゜ルをその芁求に移動しおキヌaを抌し、傍受したすべおの芁求キヌAを受け入れる必芁がありたす。



カヌ゜ルを芁求に移動しおEキヌを抌すず、芁求に関する詳现情報を衚瀺できたすEは英語のむベントの最初の文字-「むベント」です。 この芁求の凊理䞭に発生したむベントログが開きたす。



mitmproxy



芁求ず回答の䞡方を線集できたす。 線集機胜は、テスト䞭に圹立぀堎合がありたす。たずえば、特定の状況をシミュレヌトし、サヌバヌから特定の応答を受信したアプリケヌションの動䜜を確認できたす。



目的のク゚リにカヌ゜ルを移動し、カヌ゜ルを移動しおEnterキヌを抌したす。 次に、カヌ゜ルを「芁求」フィヌルドに移動し、Eキヌを抌したす単語線集の最初の文字はeditです。 コン゜ヌルの䞋郚に線集メニュヌが衚瀺されたす。



mitmrpoxy



リク゚スト党䜓Qキヌず個々のパラメヌタヌパスPキヌ、URLU、ヘッダヌH、フォヌムF、ボディ®およびメ゜ッドMの䞡方を倉曎できたす。



同様に、応答の線集。 コヌドキヌC、メッセヌゞM、ヘッダヌH、およびbody®を線集できたす。



远加機胜





プロキシ認蚌





mitmproxyでは、プロキシを䜿甚する前にナヌザヌ認蚌モヌドをアクティブにできたす。 認蚌ヘッダヌはリク゚ストから削陀され、䞊䜍サヌバヌに転送されたす。 珟圚たで、基本的なHTTP認蚌のみがサポヌトされおいたす。 認蚌は、次のオプションを䜿甚しお構成されたす。

 匿名ナヌザヌによるプロキシの䜿甚を犁止
 $ mitmproxy --nonanonymous 

 指定したナヌザヌのみがプロキシを䜿甚できるようにする
 $ mitmrpoxy --singleuser <ナヌザヌ名> 

 ファむルで指定されたパスワヌドのいずれかを入力する堎合のみ、プロキシの䜿甚を蚱可したす。
 $ mitmproxy —htpasswd <パスワヌドファむルぞのパス>




Cookieバむンディング





Cookieバむンディング機胜スティッキヌCookieは、認蚌が必芁なサヌビスを䜿甚する堎合に䟿利です。 このようなサヌビスに䞀床ログむンすれば十分であり、mitmproxyは各リク゚ストに適切なCookieを自動的に远加したす。 その埌、すべおのリク゚ストは再認蚌なしでサヌバヌに送信されたす。



Cookieバむンディングモヌドは、次のようにアクティブになりたす。

 $ mitmproxy -t <フィルタヌ>




プロキシされたすべおのリク゚ストに認蚌ヘッダヌを远加するこずもできたす。 これには-uオプションが䜿甚されたす。



リバヌスプロキシモヌド





このモヌドでは、すべおの芁求がアップストリヌムサヌバヌに送信されたす。 この堎合のMitmproxyは、芁求を監芖およびむンタヌセプトするこずにより、䞀時的なレむダヌずしお䜿甚できたす。

次のコマンドを䜿甚しお、リバヌスプロキシモヌドをアクティブにしたす。

 $ mitmproxy -P http [s]//ホスト名[ポヌト]




アンチキャッシュ機胜





Mitmproxyは、リク゚ストからif-modified-sinceおよびif-none-matchヘッダヌを削陀できたす。 これにより、芁求されたドキュメントがキャッシュにあるずブラりザが報告した堎合でも、サヌバヌからの完党な応答をい぀でも衚瀺できたす。



この機胜は、次のコマンドを䜿甚しおアクティブにしたす。



 $ mitmproxy --anticache 




クラむアントリク゚ストを再生する





クラむアント偎の再生機胜を䜿甚するず、以前に保存したHTTPダむアログからの芁求を再生できたす。 芁求は次々に実行されたす。1぀の芁求を送信するこずにより、mitmproxyはサヌバヌからの応答を埅機し、その埌だけ次ぞ進みたす。 したがっお、クラむアントの動䜜は、保存されたダむアログに蚘録された動䜜ずは異なる堎合がありたす。保存されたダむアログでは、いく぀かのリク゚ストを同時に実行できたす。



次のコマンドを䜿甚しお、クラむアントリク゚ストを再生できたす。



 $ mitmproxy -c <保存されたダむアログぞのパス>




Mitmdump





前述のように、Mitmdumpはtcpdumpずたったく同じように機胜するナヌティリティであり、HTTPプロトコルに察しおのみ機胜したす。 すべおのHTTPトラフィックをむンタヌセプトし、それに関する情報を別のテキストファむルに曞き蟌みたす。



mitmdumpを開始するには、mitmproxyをプロキシモヌドで実行しおから、次のコマンドを実行する必芁がありたす。



 $ mitmdump -w <ファむル名>


保存された情報は、正芏衚珟を䜿甚しおフィルタリングし、新しいファむルに保存できたす。

 $ mitmdump -nr <file1> -w <file2> "〜m post"




䞊蚘の䟋では、mitmdumpはファむル1から特定の基準に䞀臎する芁求この堎合はPOST芁求を遞択し、ファむル2に曞き蟌みたす。



Mitmdumpは、ファむルからクラむアントリク゚ストに関する既に保存された情報を読み取り、これらのリク゚ストを再床再生し、結果を新しいファむルに保存できたす。

 $ mitmdump -nc <ファむル1> -w <ファむル2>


この機胜は、䞀郚のWebアプリケヌションをテストするずきに圹立ちたす。



おわりに





この蚘事では、mitmproxy機胜の抂芁を簡単に説明したした。 詳现を知りたい人のために、ここにいく぀かのリンクがありたす





䜕らかの理由でここにコメントを残すこずができない読者は、私たちのブログを歓迎したす 。



All Articles