
Webéçºè ã®å®è·µã§ã¯ãHTTPãä»ããŠãµãŒããŒãšéä¿¡ããã¢ããªã±ãŒã·ã§ã³ã®ãã©ãã£ãã¯ã远跡ããã³åæããå¿ èŠãããç¶æ³ããã°ãã°çºçããŸãïŒããšãã°ãã¢ãã€ã«ããã€ã¹ãŸãã¯HTTP APIã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãïŒã
åŸæ¥ããã©ãã£ãã¯ããªãã¹ã³ããããã«äœ¿çšãããŠããããŒã«ïŒ æ¢ã«èª¬æãã tsharkãngrepããã³tcpdumpïŒã¯ããã®ç®çã«ã¯é©ããŠããŸãããHTTPãããã³ã«ãæäœããããã®æ©èœãå¶éãããŠããŸãã
HTTPãã©ãã£ãã¯ã®åæã«ã¯ãããå°éçã§ã·ã³ãã«ã§å¹æçãªãœãªã¥ãŒã·ã§ã³ããããŸãã äŒãïŒ mitmproxy ãã·ã¢èªã§ã¯ã圌ã«é¢ãã詳现ãªåºçç©ã¯ã»ãšãã©ãããŸããã ãã®èšäºã§ã¯ãmitmproxyãšã®çµéšãå ±æããçããã圹ç«ã€ããšãé¡ã£ãŠããŸãã
äžè¬çãªæ å ±
Mitmproxyã¯ã次ã®ãã®ãå«ããœãããŠã§ã¢ããŒã«ã®ã»ããã§ãã
- mitmproxyèªäœã¯ããªã³ã¶ãã©ã€ã§ãã©ãã£ãã¯ãã€ã³ã¿ãŒã»ãããã察話åã³ã³ãœãŒã«ããã°ã©ã ã§ãã
- mitmdumpã¯ãHTTPãããã³ã«ã®tcpdumpã®é¡äŒŒç©ãšããŠèª¬æã§ãããŠãŒãã£ãªãã£ã§ãããã©ãã£ãã¯ãååããããã«é¢ãããã¹ãŠã®æ å ±ãããã¹ããã¡ã€ã«ã«ä¿åããŸãã
- libmproxyã¯ããã¹ãŠã®mitmproxyæ©èœãå®è£ ããPythonã®ã©ã€ãã©ãªã§ãã
mitmproxyãšããååã¯ãç¥èªMITMã«ç±æ¥ããŸããããã¯ãäžéè ãŸãã¯ãäžéè ããæå³ããŸãã ããã¯ãæ»æè ã2ã€ã®ååŒçžæã®éã®äŒéãã£ãã«ã«æ¥ç¶ããŠäŒéãããã³ã«ã«ä»å ¥ããæ å ±ã衚瀺ãåé€ãããã³æªããéä¿¡ãã£ãã«ã䟵害ããæ¹æ³ã§ãã mitmproxyã¯åæ§ã®æ¹æ³ã§æ©èœããŸãããããã·ãµãŒããŒãšããŠäœ¿çšããããã¹ãŠã®HTTPãã©ãã£ãã¯ãç»é²ããŸãã ãããã·ãµãŒããŒãšåæ§ã«ãå Žåã«ãã£ãŠã¯ãmitmproxyã¯ãŠãŒã¶ãŒãªã¯ãšã¹ããšããããžã®å¿çã®äž¡æ¹ãå€æŽã§ããŸãã
mitmproxyã®åçãšæ©èœããã詳现ã«æ€èšããŠãã ããã
ä»çµã¿
æå·åãããŠããªãHTTPæ¥ç¶ã®å Žåããã¹ãŠãç°¡åã§ãïŒmitmproxyã¯ã¯ã©ã€ã¢ã³ãïŒã¢ãã€ã«ããã€ã¹ã®ãã©ãŠã¶ãŒãªã©ïŒããã®æ¥ç¶ãåãå ¥ãããã®æ å ±ãã³ã³ãœãŒã«ã«è¡šç€ºïŒãŸãã¯ããã¹ããã¡ã€ã«ã«ä¿åïŒããŠããããªã¯ãšã¹ãåä¿¡è ããã¯ã©ã€ã¢ã³ãã«å¿çãè¿ããŸãã
Mitmproxyã¯ãå®å šãªHTTPSãã©ãã£ãã¯ãååããããã«ã䜿çšã§ããŸãã mitmproxyãŸãã¯mitmdumpãèµ·åãããšãäžé£ã®CAãã¡ã€ã«ãã/ .mitmproxyãã£ã¬ã¯ããªã«äœæãããããã«åºã¥ããŠçœ®æ蚌ææžãçæãããŸãã åœç¶ããã©ãŠã¶ã¯ãããã®èšŒææžãçããããã®ãšããŠèå¥ããmitmproxyã䜿çšããŠSSLæ¥ç¶ã確ç«ããããšãããã³ã«é©åãªèŠåã衚瀺ããŸãã
ãã®èŠåãé²ãã«ã¯ããã©ãŠã¶ãŒã䜿çšãã蚌ææžã®ãªã¹ãã«mitmproxyããã®èšŒææžãè¿œå ã§ããŸãïŒè©³çŽ°ãªæé ã«ã€ããŠã¯ã ãã¡ããåç §ããŠãã ãã ïŒã
ãããã®2ã€ã®æ¡ä»¶ãæºãããããšãã¯ã©ã€ã¢ã³ãã¯ç¢ºç«ãããŠããæ¥ç¶ãå®å šã§ãããšçµè«ä»ããŸãã
Mitmproxyã¯ãå®å šãªHTTPSãã©ãã£ãã¯ãååã§ããŸãã ååæé ã¯ã次ã®æé ã§æ§æãããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ãmitmproxyãšã®æ¥ç¶ã確ç«ããŸãã
- Mitmproxyã¯200å¿çãã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãïŒæ¥ç¶ã確ç«ãããŸããïŒã
- ã¯ã©ã€ã¢ã³ãã¯ããªã¢ãŒããµãŒããŒãšåãæ¹æ³ã§mitmproxyãšå¯Ÿè©±ããSSLæ¥ç¶ã確ç«ããŸãã ãã¹ãåãæå®ããã«ã¯ãSNIã䜿çšããŸãã
- Mitmproxyã¯ãµãŒããŒã«æ¥ç¶ããã¯ã©ã€ã¢ã³ããæå®ãããã¹ãåã䜿çšããŠSSLæ¥ç¶ã確ç«ããŸãã
- ããã«å¿ããŠããµãŒããŒã¯CNããã³SANãã©ã¡ãŒã¿ãŒã®å€ãå«ãSSL蚌ææžãéä¿¡ããããã«åºã¥ããŠçœ®æ蚌ææžãäœæãããŸãã
- Mitmproxyã¯åœã®èšŒææžãçæããã¯ã©ã€ã¢ã³ããšã®SSLãã€ã¢ãã°ãç¶ç¶ããŸããã¹ããã3ã§äžæããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ã確ç«ãããSSLæ¥ç¶ãä»ããŠèŠæ±ãéä¿¡ããŸãã
- Mitmproxyã¯ãæé 4ã§ç¢ºç«ãããSSLæ¥ç¶ãä»ããŠãµãŒããŒã«èŠæ±ãéä¿¡ããŸãã
ããæ確ã«ãä¿è·ããããã©ãã£ãã¯ãååããããã»ã¹ã¯ã次ã®å³ã®åœ¢åŒã§è¡šãããšãã§ããŸãã

ãªããããå¿ èŠã§ãã
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
ãã®åŸã®ã³ã³ãœãŒã«ã¯æ¬¡ã®ããã«ãªããŸãã

ãã®ã¢ãŒããçµäºããã«ã¯ãqãæŒããŸãã ãã«ãã¯ãçå笊ïŒïŒïŒã瀺ãããŒã®çµã¿åãããæŒãããšã§ååŸã§ããŸãã
ãã©ãŠã¶ã§ä»»æã®ãµã€ããéããŸã-äŸãã°ãya.ruã ãã®ãµã€ããžã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯ã³ã³ãœãŒã«ã«è¡šç€ºãããŸãïŒ

ç¢å°ããŒãæŒããŠãã¯ãšãªã®ãªã¹ããããã²ãŒãã§ããŸãã qããŒãæŒããšãã¡ã€ã³ãŠã£ã³ããŠã«æ»ãããšãã§ããŸãã ãªã¯ãšã¹ãã«é¢ãã詳现æ å ±ã衚瀺ããã«ã¯ããªã¯ãšã¹ãã«ã«ãŒãœã«ã移åããŠEnterããŒãæŒãå¿ èŠããããŸãã

[ãªã¯ãšã¹ã]ãã£ãŒã«ãã«ã¯ããªã¯ãšã¹ãã«é¢ãã詳现æ å ±ïŒãªã¯ãšã¹ãããããã¹ãããªã¯ãšã¹ããè¡ããããœãããŠã§ã¢ãéä¿¡ãããããããŒïŒã衚瀺ããã[ã¬ã¹ãã³ã¹]ãã£ãŒã«ãã«ã¯åä¿¡ããã¬ã¹ãã³ã¹ã«é¢ããæ å ±ã衚瀺ãããŸãã
TabããŒã䜿çšããŠããããã®ãã£ãŒã«ããåãæ¿ããããšãã§ããŸãã qããŒãæŒããšãã¯ãšãªã®ãªã¹ãã«æ»ãããšãã§ããŸãã
ãããã«å¯ŸããèŠæ±ãšå¿çã¯å€æŽã§ããŸãã ãããè¡ãã«ã¯ãããããã€ã³ã¿ãŒã»ãããã£ã«ã¿ãŒã䜿çšããŸãã ãã£ã«ã¿ãŒãå ¥åããã«ã¯ãiããŒãæŒããŸãã ããšãã°ãya.ruãªã©ã®ãã£ã«ã¿ãŒãšããŠå°å ¥ããŸãããã®ã¢ãã¬ã¹ãå«ããã¹ãŠã®ãªã¯ãšã¹ãã¯ã€ã³ã¿ãŒã»ãããããŸãã ãªã¹ãå ã®ã€ã³ã¿ãŒã»ããããããªã¯ãšã¹ãã¯ãªã¬ã³ãžè²ã§åŒ·èª¿è¡šç€ºãããŸãã

ãã®ãããªãªã¯ãšã¹ãã¯ãæ¿èªãããªãå Žåã¯åŠçãããŸããã èŠæ±ãåãå ¥ããã«ã¯ãã«ãŒãœã«ããã®èŠæ±ã«ç§»åããŠããŒaãæŒããååãããã¹ãŠã®èŠæ±ïŒããŒAïŒãåãå ¥ããå¿ èŠããããŸãã
ã«ãŒãœã«ãèŠæ±ã«ç§»åããŠEããŒãæŒããšãèŠæ±ã«é¢ãã詳现æ å ±ã衚瀺ã§ããŸãïŒEã¯è±èªã®ã€ãã³ãã®æåã®æå-ãã€ãã³ããã§ãïŒã ãã®èŠæ±ã®åŠçäžã«çºçããã€ãã³ããã°ãéããŸãã

èŠæ±ãšåçã®äž¡æ¹ãç·šéã§ããŸãã ç·šéæ©èœã¯ããã¹ãäžã«åœ¹ç«ã€å ŽåããããŸããããšãã°ãç¹å®ã®ç¶æ³ãã·ãã¥ã¬ãŒããããµãŒããŒããç¹å®ã®å¿çãåä¿¡ããã¢ããªã±ãŒã·ã§ã³ã®åäœã確èªã§ããŸãã
ç®çã®ã¯ãšãªã«ã«ãŒãœã«ã移åããã«ãŒãœã«ã移åããŠEnterããŒãæŒããŸãã 次ã«ãã«ãŒãœã«ããèŠæ±ããã£ãŒã«ãã«ç§»åããEããŒãæŒããŸãïŒåèªç·šéã®æåã®æåã¯editã§ãïŒã ã³ã³ãœãŒã«ã®äžéšã«ç·šéã¡ãã¥ãŒã衚瀺ãããŸãã

ãªã¯ãšã¹ãå šäœïŒ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æ©èœã®æŠèŠãç°¡åã«èª¬æããŸããã 詳现ãç¥ããã人ã®ããã«ãããã«ããã€ãã®ãªã³ã¯ããããŸãïŒ
- å ¬åŒã®mitmproxyããã¥ã¡ã³ã ã
- ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ãã©ãã£ãã¯ã®è¿œè·¡ã«é¢ããèšäº ã
- éçºè ã®Altm Cortesiã«ããMitmproxyã®ååã®èª¬æ ã
äœããã®çç±ã§ããã«ã³ã¡ã³ããæ®ãããšãã§ããªãèªè ã¯ãç§ãã¡ã®ããã°ãæè¿ããŸã ã