TOUCH THE SECURITY Powered by Security Service G

コラム

2018.03.14

無線通信とセキュリティ ~その4 Wi-Fiアクセスポイントで自分の通信を盗聴してみた~

無線通信に潜む危険性とセキュリティについて考えるシリーズ4回目。前回は、偽Wi-Fiアクセスポイントが簡単に作れてしまうことや、公衆Wi-Fiにおける盗聴のリスクに関する言及でした。では、もし実際に悪意の第三者に盗聴された場合、平文のhttp通信ではどのくらい情報が露呈してしまうのか、https通信ではどのように秘匿されているのか、とても気になるところだと思います。

そこで今回は、Wi-Fiアクセスポイントで通信中の情報を、プログラムを使用して実際に取得し表示してみたいと思います。もちろん、これはプライベートな環境でのみ許される行為である旨ご了承ください。

1.実験の概要

2.パケットキャプチャとパケット

インターネット通信で扱われる通信情報はパケットと呼ばれますが、もう少し詳しく見ていくと、「フレーム」と呼ばれる通信データの中に「IPパケット」と呼ばれる情報が入っています。さらに「IPパケット」の中に「TCPパケット」という情報が入っているといった感じで、いわゆる入れ子のような構造になっています。

イメージ

WEBサイトへアクセスした際にやりとりされるURLやブラウザに画面として表示されるHTML等の情報はhttpやhttps通信としてTCPパケットに格納されます。

「フレーム」「IPパケット」「TCPパケット」それぞれに、ヘッダーと呼ばれる情報が付与されており、デバイスMACアドレスや、IPアドレス、プロトコル番号、ポート番号といった通信の送信元や宛先、内容の種別などを示す重要な情報が格納されます。

ヘッダー情報の数値が示す通信の種別の例
ETHERNETヘッダ フレームタイプ 0800(16進数):格納情報がIPプロトコルであることを示す
IPヘッダ プロトコル番号 1:ICMP 2:IGMP 4:IP 6:TCP 17:UDP...等
TCPヘッダ 宛先ポート番号 20,21:FTP 22:SSH 23:TELNET 25:SMTP 80:HTTP 443:HTTPS ...等

尚、WireShark等の優秀なフリーソフトを利用すれば、簡単にパケットの構造や内容を閲覧することが出来ますが、今回は筆者自身の学習のために簡単なパケットキャプチャを自作しました。自作したプログラムに関する情報は、参考として筆末に掲載します。

3.http通信とhttps通信を実際に取得した結果

http通信を盗聴した結果

イメージ

http通信の内容がすべて閲覧できてしまうことがお解りいただけると思います。WEBサイトのURLや、スマートフォンのブラウザの製品名、OSのバージョン情報が確認できてしまいます。上記はWEBサーバへのリクエスト通信を選出しましたが、WEBサーバからのレスポンス情報も盗聴することも可能です。個人情報を表示するためのレスポンス情報を盗聴されてしまった場合は、それらの情報がすべて第三者に渡ることになります。

https通信を盗聴した結果

イメージ

通信の内容が判読できない状態にあることがご確認頂けると思います。ちなみにこちらは、先ほどのhttp通信と同じ内容のパケットを選別したものです。尚、https通信自体は暗号化されますが、IPアドレス、MACアドレス、ポート番号など、ヘッダに含まれる情報は暗号化されないことに注意が必要です。

さらに言及すると、https通信だから安心だというわけではありません。https通信が利用するセキュアプロトコルであるSSL/TLSにもバージョンがあります。SSL1.0 → SSL2.0 → SSL3.0 → TLS1.0 → TLS1.1 → TLS1.2 とこれまで進化を続けていますが、進化してきた理由は過去のバージョンに脆弱性があったからに他なりません。2014年にSSL3.0がPOODLE攻撃で止めを刺されてしまったことはまだ比較的記憶に新しいと思いますが、https通信であっても脆弱なSSL3.0が使用されていたりすると、暗号化されているように見えても解読されてしまう危険があります。

4.まとめ

今回は、キャプチャした通信を視覚的に眺めて頂きました。以下が要点になるかと思われます。

  • http通信は情報が丸見え。
  • httpsの通信データは暗号化されますが、IPアドレス等ヘッダーに含まれる情報は隠蔽されません。
  • httpsであれば安心というわけではなく、安全なバージョンのセキュアプロトコルTLS1.2を使用したほうが良い。

また、今回は自作のパケットキャプチャプログラムを用いての検証でしたが、その際の環境や参考情報などをかるく抜粋しておきます。コードそのものの掲載は避けますが、同じことにトライされる方のお役に立てれば、、、。

IDE NetBeans IDE 8.2
※コンパイラはMinGWのgccを利用
ライブラリ ♦WinSock2
WS2_32.Lib
※Windows10の場合、下記ディレクトリにLibファイルが存在します。
> C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x64

♦winpcap
Packet.lib、wpcap.lib、libpacket.a、libwpcap.a
インクルード ダウンロードしたWpdPackフォルダ配下のIncludeディレクトリ
※WinSock2関連のヘッダーファイルはMinGW内に存在していたので暗黙でインクルードされました。
参考にした書籍・サイト ♦書籍
TCP/IP ソケットプログラミング C言語編 オーム社 小高知宏 監修

♦サイト
WinSock で簡易パケットキャプチャを作ろう - Web/DB プログラミング徹底解説
Winpcap

記事一覧に戻る