【悪用厳禁】mitmproxyを使えばSSL通信でも傍受できる

【悪用厳禁】mitmproxyを使えばSSL通信でも傍受できる サーバー

最初に言っておきます。
mitmproxyは、開発の生産性をUPさせるモノです。
上手く使えば、開発の生産性がかなり向上します。

しかし、悪用しようと思えば悪用も可能です。
SSL通信であっても、通信を傍受できてしまいます。

つまり、パスワードをのぞき見することが可能になります。
でも、これは確実に犯罪です。

したがって、決して悪用はしないください。
今回は、そんな危険な可能性を持ったmitmproxyを紹介します。

本記事の内容

  • mitmproxyとは?
  • mitmproxyのシステム要件
  • mitmproxyのインストール
  • mitmproxyの動作確認

それでは、上記に沿って解説していきます。

mitmproxyとは?

mitmproxyとは、SSL/TLS対応のインターセプトプロキシです。
わけがわからないですね。
もうすこしわかりやすく説明します。

インターセプトとは、通信の傍受という意味で使われます。
つまり、mitmproxyは通信の傍受を行うプロキシと言えます。

それも、mitmproxyはSSL/TLS対応した通信を傍受可能ということです。
いやー、かなり恐ろしいです。
なぜって、パスワードがのぞき見されるわけですからね。

折角、SSL/TLSによって暗号化しているのにそれがのぞき見されるなんて。
と言っても、安心してください。

普通にネットをしているだけは、そんな恐ろしいことにはなりません。
意識してPCやスマホの設定を変更しない限り、大丈夫です。

では、なぜそんな危険なmitmproxyが公開されているのでしょうか?
それは、暗号化された通信をのぞき見したい人がいるからです。

どういう人かと言うと、 プログラマーです。
プログラムがどのようなデータを送受信しているのかを確認したいのです。

この確認が簡単にできるなら、mitmproxyはそこまで必要ではないでしょう。
しかし、確認作業が簡単にできないケースが多々あります。

すぐに思いつくのは、以下のケース。

  • サーバー間通信
  • スマホアプリ
  • 外部ライブラリ

他にも、確認が困難なケースはあるでしょう。
そもそも、プログラマー以外でも通信の傍受をしたい人がいるかもしれません。

以上、mitmproxyの用途をメインで説明しました。
次は、mitmproxyのシステム要件について説明します。

mitmproxyのシステム要件

現時点(2021年3月28日)におけるmitmproxyの最新バージョンは、6.0.2となります。
この最新バージョンは、2020年12月16日にリリースされています。

サポートOSに関しては、以下のクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

それぞれのOS毎にバイナリが用意されています。
しかし、今回はバイナリを利用しません。

PyPI(Python Package Index)を使ってインストールします。
なぜなら、mitmproxyとPythonを連携させたいからです。

ここでは、「連携させると拡張性がある」とだけ説明しておきます。
また、PyPIによるインストールでは、Pythonのバージョンが重要になります。

PyPIの公式ページでは、上記のバージョンが記載されています。
ただ、Python 3.6以降なら動くような記載もあります。
でも、可能ならば新しいバージョンにした方がよいでしょう。

あと、PyPIによるインストールは、pipxを使うことが推奨されています。
でも、これは使い慣れたモノを利用すればよいでしょう。

個人的には、Pythonの仮想環境の利用をおススメします。
なお、私はvenvを利用しています。

以上、mitmproxyのシステム要件の説明となります。
次は、mitmproxyをインストールしていきましょう。

mitmproxyのインストール

mitmproxyのインストールの前に、システム構成を決めておきます。
システム構成と大げさに聞こえますが、登場人物を決めましょうということです。

mitmproxyのインストール先とmitmproxyをプロキシとして利用する側が必要になります。

mitmproxyのインストール先mitmproxyをプロキシとして利用する側
PCスマホ(iOS、Androidの場合10以降)

よく見かけるパターンは、上記のパターンです。
でも、私は以下のシステム構成とします。

mitmproxyのインストール先mitmproxyをプロキシとして利用する側
Linux(Ubuntu)PC

このパターンなら、PCとスマホの二刀流も可能です。
もしLinuxマシンを用意できないなら、PC上の仮想OSでも問題ありません。

システム構成も決まったので、Linuxにmitmproxyをインストールしていきます。
最初に、現状のインストール済みパッケージを確認しておきます。

# pip list
Package    Version
---------- -------
pip        21.0.1
setuptools 49.2.1

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip

では、mitmproxyのインストールです。
mitmproxyのインストールは、以下のコマンドとなります。

pip install mitmproxy

インストールは、しばらく時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

# pip list
Package          Version
---------------- ----------
asgiref          3.3.1
blinker          1.4
Brotli           1.0.9
certifi          2020.12.5
cffi             1.14.5
click            7.1.2
cryptography     3.3.2
Flask            1.1.2
h11              0.12.0
h2               4.0.0
hpack            4.0.0
hyperframe       6.0.0
itsdangerous     1.1.0
Jinja2           2.11.3
kaitaistruct     0.9
ldap3            2.8.1
MarkupSafe       1.1.1
mitmproxy        6.0.2
msgpack          1.0.2
passlib          1.7.4
pip              21.0.1
protobuf         3.14.0
publicsuffix2    2.20191221
pyasn1           0.4.8
pycparser        2.20
pyOpenSSL        20.0.1
pyparsing        2.4.7
pyperclip        1.8.2
ruamel.yaml      0.16.13
ruamel.yaml.clib 0.2.2
setuptools       49.2.1
six              1.15.0
sortedcontainers 2.3.0
tornado          6.1
urwid            2.1.2
Werkzeug         1.0.1
wsproto          1.0.0
zstandard        0.14.1

たくさんのパッケージが、インストールされました。
依存関係の多さからも、仮想環境へのmitmproxyのインストールが望ましいです。

以上、mitmproxyのインストールを説明しました。
最後に、mitmproxyの動作確認を行いましょう。

mitmproxyの動作確認

動作確認には、プロキシや証明書に対する理解が前提となります。
プロキシや証明書の理解が不足していると、厳しい道のりになるかもしれません。

中途半端な理解でプロキシを設定してしまうと、ネットにつながらなくなることもありえます。
そのあたりを注意して、自己責任で作業を進めてください。

作業は以下の順番で行います。

  • mitmproxyの起動
  • プロキシの設定
  • 証明書のダウンロード
  • 証明書のインポート
  • http/https通信

それぞれを下記で説明します。

mitmproxyの起動

mitmproxyをインストールしたマシンのIPは、192.168.33.10です。
各自の環境におけるIPアドレスをメモしておいてください。

では、mitmproxyの起動をしていきます。
以下のコマンドを実行します。

mitmproxy

そうすると、以下のように表示が切り替わります。

これでmitmproxyが起動しました。
起動させたままにしておきます。

コンソール画面は、開いたままにしておきましょう。

プロキシの設定

この時点で次のページにアクセスしてみてください。
http://mitm.it/

上記のような表示が出ているはずです。
これでOK。

では、プロキシの設定を行いましょう。
今回は、PCからプロキシを利用します。

そのため、PC(Windows)上でプロキシ設定を行います。
「プロキシ」画面の行き方は何通りもあります。

ファイル名を指定して実行が楽チンです。
「ms-settings:network-proxy」

この状態で「OK」と押します。

「プロキシ」画面を開いたら、「手動プロキシ セットアップ」を確認。
未設定なら、以下のような状況です。

以下のように設定します。

アドレスは、mitmproxyをインストールしたマシンのIPアドレスです。
ポートは、mitmproxyの起動時に指定していないなら、デフォルトで8080となります。
(この場合、ポート8080の開放は必須)

設定したら、「保存」ボタンをクリック。

証明書のダウンロード

再度以下のページをアクセスしましょう。
http://mitm.it/

その前にブラウザはすべて閉じておきます。
そして、再度ブラウザを立ち上げてアクセス。

先ほどと表示が変わっていないなら、「Ctrl + F5」でスーパーリロードをします。
適切にプロキシの設定が反映していれば、次のような画面が表示されます。

以下のOSに向けた証明書が、存在しています。

  • Windows
  • Linux
  • macOS
  • iOS
  • Android
  • Firefox
  • Other Platforms

今回は、Windows用の証明書をダウンロードします。
ダウンロードが完了したら、「mitmproxy-ca-cert.p12」というファイルが保存されています。

証明書のインポート

mitmproxy-ca-cert.p12を適切な場所へ移動しておきます。
保存場所に問題なければ、mitmproxy-ca-cert.p12を実行(ダブルクリック)します。

「現在のユーザー」でいきましょう。
必要があれば、「ローカルコンピューター」に変更すればいいだけです。
「次へ」ボタンをクリック。

証明書のパスが、設定されています。
そのまま「次へ」ボタンをクリック。

「パスワード?」と一瞬悩みますが、未入力で構いません。
そのまま「次へ」ボタンをクリック。

そのまま「次へ」ボタンをクリック。

「完了」ボタンをクリック。
すると、以下の警告が表示されます。

「はい」ボタンをクリック。

以上より、証明書がインポートされました。

http/https通信

http/https通信と難しく書いていますが、ブラウザでページを見るだけです。
「Example Domain」を見ましょう。
https://example.com/

ページが表示されたら、開いたままのコンソール画面を確認しましょう。
そうすると、次のような内容が表示されます。
ブラウザにプラグインを入れていれば、それらがアクセスするURLが出ている可能性があります。

URLがズラズラと表示されていれば、http/https通信は成功です。

まとめ

以上まで確認できれば、mitmproxyの動作確認はOKと言えます。
まだ、本格的に通信の傍受という感じはしません。

しかし、これでも十分に通信をのぞき見しています。
のぞき見するために、PC側での処理は面倒じゃなかったですか?

まずは、プロキシの設定を変更しています。
その状態で証明書を特定のページ(mitm.it)からダウンロード。
そして、その証明書をインストールという流れでした。

のぞき見される側が、ここまでの段階を踏まないとのぞき見は行われません。
ワンクリックなどでのぞき見されたら、それこそ犯罪者の思うツボです。

そうならないために、ここまで複雑な設定が必要となっています。
でも、第三者が触れるPCなら・・・

例えば、社内PCやネカフェのPCなどは危険です。
この記事の設定を行えば、パスワードなどをのぞき見できるわけですからね。
SSLで暗号化されていても、関係なく傍受されます。

極論かもしれませんが、共有PCを触らないことが一番です。
触るとしても、パスワード類は絶対に入力しないことでしょうね。

あと、動作確認後には プロキシ設定を元に戻しておきましょう。
「プロキシサーバーを使う」をオフにするだけです。

タイトルとURLをコピーしました