TOUCH THE SECURITY Powered by Security Service G
2017年頃、IoTの界隈においては、各社より発売となったAIスピーカーが大きな注目を集めていました。しかし、BlueBorneやKRACKsといった脆弱性が明らかとなることもありました。
1つひとつの無線通信アクセスポイントが安全であるかをどう判断すべきなのでしょうか。おそらく、判断する方法を知っている方は、あまりいないのではと筆者は思っています。
そこで今回は、アクセスポイントと端末が接続する過程を振り返りつつ、「偽(罠)のWi-Fiアクセスポイントって有りえるもの?」について解説します。それらの脅威から、どのように身を守っていけば良いかについても併せてご紹介していきます。
また、番外編として、Wi-Fiアクセスポイントで通信中の情報を、プログラムを使用して実際に取得し表示してみたいと思います。もちろん、これはプライベートな環境でのみ許される行為である旨ご了承ください。公共の場で行った場合、法律に触れてしまう可能性があるため、真似して実践するのはやめましょう。
目次
外出先のアクセスポイントは安全?
近年フリーWi-Fiが増えてきたこともあり、世の中には無数のアクセスポイントが存在しています。
公衆無線LANサービスには、多くのリスクが存在します。たとえば、SSID(Wi-Fiアクセスポイントの識別名)とパスワード、認証方式くらいしかアクセスポイントを識別する材料が無く、それらを公開している公衆Wi-Fiアクセスポイントは、簡単に偽装することが出来てしまう実情があります。また、偽装Wi-Fiアクセスポイントは、簡単に作れてしまいます。
たとえば、スマートフォンやタブレットの自動接続といった機能は、何を根拠に、前回接続したアクセスポイントと同じだと判断しているのでしょう。果たして自動接続されるアクセスポイントに危険性はないのでしょうか。
公衆Wi-Fiにおける盗聴、通信傍受のリスク、そして万が一実際に悪意の第三者に不正アクセスがされた場合、平文のhttp通信ではどのくらい情報が露呈してしまうのか、https通信ではどのように秘匿されているのか、といった部分も気になるところでしょう。
野良Wi-Fi、なりすましWi-Fiとは?フリーアクセスWi-Fiとの違い
フリーWi-Fiは、多くの場合、お店の事業者や交通機関などが提供しており、その大元がはっきりとしているのですが、なりすましWi-Fiと呼ばれる提供元の正体が不明のフリーWi-Fiも存在します。
野良Wi-Fiとは、提供元が分からないフリーWi-Fiの総称です。パスワードがかかっておらず、誰でもアクセスすることができるものを呼びます。悪意のあるもの、悪意のないもの両方含めて、誰がどんな目的で提供しているのか分からないフリーWi-Fiのことをいいます。
なりすましWi-Fiは、提供元が分かっているフリーWi-Fiと似た名前(ネットワーク名:SSID)を作成し、その場にいるお店などが提供しているWi-Fiだと勘違いさせてアクセスさせることを目的としています。
フェスなどの大きなイベントや、カフェ、商業施設などで、その名称とよく似た、または全く同じネットワーク名にしたWi-Fiを作成している場合があります。
Wi-Fiの提供元をしっかりと確認してからアクセスし、盗聴などのリスクを防ぎましょう。
また、最も悪意のあるフリーWi-Fiとしては「悪魔の双子」と呼ばれるものがあります。なりすましWi-Fiと同じですが、巧妙な手口で正規の提供元が提供するWi-Fiと同じネットワーク名でWi-Fiを作成しています。
スマホやPCは、設定によっては1度つないだことのあるWi-Fiに自動でその場所に行くと接続する機能がついています。しかし端末は残念なことに、ネットワーク名が同じだと、正規で提供されているフリーWi-Fiも悪意で作成されたフリーWi-Fiも、どちらが正しいものかというのを見分けることができません。
アクセスポイントと端末が接続するまでのプロセス
ここで、アクセスポイントと端末が接続するまでのプロセスを確認します。
プロセス1
アクセスポイントは、周囲の端末に自身の存在を知らせるために、ビーコン(Beacon)と呼ばれるブロードキャストを送信します。ビーコンには、SSIDの他にチャンネル周波数、サポート伝送速度、セキュリティ方式など、多くの情報が含まれています。
プロセス2
端末でユーザーが接続したいSSIDを選択すると、プローブ要求、プローブ応答を行います。プローブ要求/応答では、アクセスポイントと端末が互いに存在し、通信が行えるかを確認します。
プロセス3
プローブ要求/応答が完了すると、アソシエーション要求/応答を行い、インターネット通信などで利用する実際のデータ通信を行える状態にします。
プロセス4
セキュリティ方式がWPA、WPA2の場合は、アソシエーション要求/応答の後に4ウェイ・ハンドシェイク、グループ鍵ハンドシェイクと呼ばれる手順で、共有鍵の認証や一時鍵と呼ばれる暗号鍵を生成します。
参考: WPA2 における複数の脆弱性について:IPA 独立行政法人 情報処理推進機構 https://www.ipa.go.jp/security/ciadr/vul/20171017_WPA2.html
偽アクセスポイントの脅威
アクセスポイントの管理者は、接続された通信内容を取得できてしまうので、盗聴などの通信傍受が可能になります。例えば、通信内容の接続先のドメインやIPを改ざん、フィッシングやウイルス感染といった被害をもたらすといった手口を想定すると、利用者にとっては深刻な影響が考えられます。
偽アクセスポイントへの対策
では利用者は偽のアクセスポイントに騙されないように、何に気を付ければよいのでしょうか?
怪しいアクセスポイントには繋げない
野良Wi-Fiはもちろんのこと、提供されているネットワーク名とパスワードの異なるなりすましWi-Fiに繋げないようにしましょう。行った先のお店などで、似たようなネットワーク名が複数ある場合は、フリーWi-Fiの提供元に確認するなどして、対策しましょう。
現実としてアクセスポイントを偽装することは容易であり、見分けるのは非常に困難だと思います。
デバイスの自動接続の設定内容次第では、利用者自身が判断する間もないまま勝手に怪しいアクセスポイントに接続されてしまうことも考えられます。極論かもしれませんが、アクセスポイントの真偽を判別することが困難である以上、外出先ではWi-Fi接続設定をオフにして全く利用しないのも選択の一つです。
デバイスを最新の状態に保つ
セキュリティの観点から考えると、デバイスファームウェアやOS、アプリケーションを常に最新のバージョンに保つのが最初の一歩かもしれません。
常用しているアプリケーションが動かなくなることを懸念して、アップデートを見送る利用者も見受けられますが、事前に別デバイスやクラウドへバックアップを取るなどしておくことで、アップデート後に動かなくなったりバグが起こってしまった場合のリスクを軽減できます。
SSL/TLS接続のサイトを利用する
SSL/TLS接続、いわゆるhttps通信なら、盗聴されても内容を見られる可能性は非常に低いと考えられます。
近年では、個人情報を扱うサイトはほとんどhttps通信が実装されていますが、きちんとURLを確認し、暗号化されていないhttp通信で重要な情報を送信しないように注意することもフリーWi-Fiを利用する上では大事です。また、https通信は暗号化による情報の隠蔽だけでなく、電子署名による改ざん検知や認証局証明書、サーバ証明書によるサーバ認証が大きな役割を果たしています。
VPNサービスを利用する
VPNとは、公衆回線であるインターネットを、仮想的にプライベートネットワークのように利用する技術です。VPNを大きく分けると「インターネットVPN」や「IP-VPN」、「広域イーサーネット」などがありますが、プライベートで利用するVPNは、ほとんどのケースで「インターネットVPN」になります。
「インターネットVPN」はセキュリティは弱い反面、費用が安く済みます。具体的な例として、バンドルされているVPN設定や、何らかのVPNサービスアプリを利用し、スマホからVPNサービスを利用した場合、VPNサーバとデバイスとの接続が暗号化され、トンネリング(外部からは見えないようになっているが、内部では直結された状態のように見えること)されることよって情報の機密性が保たれることになります。
ただし、VPNサービスを利用するということは、VPNサーバと接続をするということになります。ですので、サーバの管理者は利用者がやり取りする情報を、その気になればすべて閲覧することが出来てしまいます。そのため、管理者の技術とモラルをどれだけ信用できるかが「利用する/しない」の重要なポイントになります。
サービスを利用する場合は、「無料だから」「聞きなじみのある会社が展開するものだから」といった安易な判断基準で飛びつくのではなく、「誰(どんな組織)が何のために提供していて、情報をどのように扱っているか」を、利用規約などでよく確認して、納得の上で利用するべきです。情報セキュリティの世界においては、あらゆる物事を懐疑的な視点で考えてみる事も重要です。
偽アクセスポイントは簡単に作れるのか
大雑把な方法ですが、Windows10とiPhoneを使用して偽アクセスポイントを作れるか、実験してみました。
検証の大まかな手順
- あるアクセスポイントに対して自動接続するiPhoneを用意。
- Windows10の「モバイル ホットスポット」機能(※)を利用して、iPhoneの自動接続先と同じSSIDのアクセスポイントを作成。
- iPhoneが手順(2)で作成したアクセスポイントに自動接続されるか確認します。
(※)Windows10「モバイル ホットスポット」の設定方法
[スタート]→[ネットワークとインターネット]→[モバイル ホットスポット] の順に選びます。そして[編集]を選び、SSID(ネットワーク名)とパスワードを入力して、[保存] を押下後、[モバイルホットスポット]のオンオフのつまみを[オン]に設定します。
検証結果と考察
下記画像の通り、SSID・暗号化パスワード・セキュリティ方式が全て一致した場合、自動接続が実行されてしまいます。
SSID | 自動接続設定は反応しない。 |
---|---|
セキュリティ方式 | パスワードの入力を求められる。 |
パスワード | パスワードの入力を求められる。 空文字や辞書に載っている単語、人名の場合は推測可能。 |
チャンネル | 一致しなくても自動接続される。 端末は1〜14全てのチャンネル受信可能。 ※5GHz帯は実験未実施 |
MACアドレス | 一致しなくても自動接続される。 アクセスポイント側の個体識別は不問。 |
パスワードに関しても、未設定、辞書に載っている単語の使用、桁数が短すぎる、強度が弱いWEPのセキュリティ方式が使用されているといった場合は、容易に破られる可能性を考慮すると、セキュリティ強度が低いアクセスポイントへの"乗っ取り"や"なりすまし"には注意が必要です。
Wi-Fiアクセスポイントで自分の通信を盗聴してみた実験の概要
パケットキャプチャとパケット
インターネット通信で扱われる通信情報はパケットと呼ばれますが、もう少し詳しく説明すると、「フレーム」と呼ばれる通信データの中に「IPパケット」と呼ばれる情報が入っています。さらに「IPパケット」の中に「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 ...等 |
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が使用されていたりすると、暗号化されているように見えても解読されてしまう危険性があります。
まとめ
フリーWi-Fiを利用する際の心構えはおそらく下記でしょう。
- デバイスのOS、アプリケーションのバージョンは最新にしておく。
- 悪意のアクセスポイントは見分けが困難。これらに接続してしまう可能性は留意すること。
- 個人情報を送受信しないこと。メールやメッセージなど、自動的に受信するアプリケーションは手動受信への切替えも検討すること。
- 止むを得ず重要情報のやりとりを行う場合、信用できる組織や個人が提供する、SSL/TLSで保護されたサイトやサービスを利用する。
- VPNサービスについては、提供元の身元や利用規約はよく確認し納得の上で利用すること。
また、実験的におこなった自作のWi-Fiアクセスポイントでの通信傍受の件では、下記が要点になるかと思われます。
- 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 |