携帯電話ネットワークのハッキングは簡単か?

2015年12月14日

携帯電話ネットワークに対する新しい攻撃方法が発見されたのは、2014年のことです(英語記事)。高価な無線スキャナーも高性能PCも不要で、誰でも手に入れられる機器があれば攻撃できます。しかも、通信事業者はこうした攻撃を防御する実用的な対策を講じていません。

cellular-ss7-featured

その手口はSS7を攻撃するというものです。SS7は携帯電話ネットワークで使用される信号方式であり、電話交換機の黎明期ともいえる1970代に開発されました。

驚くことに、SS7には基本的な防御機能が実装されていません。トラフィックは暗号化されず、正規のコマンドと不正なコマンドの判別もできない始末です。発信元に関係なく、すべてのコマンドが処理されます。

理由はとても単純です。40年前にSS7プロトコルを開発した人たちは、音声レイヤーを信号レイヤーから切り離せば、電話交換機の関係者以外は誰も信号用チャネルにアクセスできないと考えていたのです。

たとえ誰かがこのチャネルにアクセスしたとしても、実際の使い道はありませんでした。加入契約者に通話をつなげるコマンド以外は伝送されないので、信号レイヤー上で不正なパケットが流れることなど考える必要はなかったのです。

しかし、2000年にSS7コマンドをIP上で処理するプロトコルが登場すると状況は一変し、SS7レイヤーは外部からのアクセスにさらされるようになりました。

良い面は、どのコンピューターからでもインターネット経由で通信事業者ネットワークに接続できるわけではないこと。接続するには、SS7ハブという特殊な機器が必要です。

悪い面は、こうしたネットワーク機器の購入規制が緩いこと。国によっては通信事業者のライセンスが簡単に発行されるので、誰でも合法的にハブを設置してトランスポートノードに相互接続できてしまいます。そんなわけで、闇市場はSS7ハブへの「接続サービス」を提供する違法業者で溢れています。

ハブの設置場所はどこでも構わず、世界中の携帯電話ネットワーク上のコマンドを送受信できます。そうなっているのには、もっともな理由があります。特定のネットワーク中継器でコマンドがブロックされると、ローミングサービスが中断したり、国際通信が切断したりする可能性があるからです。その反面、こうした攻撃をかわすのは非常に難しくなっています。

では、攻撃者が利用可能なものには何があるのか、考えてみましょう。まず、標的の国際携帯機器加入者識別情報(IMSI)です。これは携帯電話ネットワークでSIMカードを識別するための一意の情報であり、攻撃を仕掛けるためには欠かせません。攻撃はSMSを介して行われます(おかしな話ですが、SMSは当初、GSMプロトコルの規格化されていない機能でした。メッセージは信号チャネルを通じて転送されます)。

特定の電話番号宛のSMS送信リクエストを発行すると、携帯電話事業者ネットワーク(厳密にはHome Location Register、略称HLR)からは、IMSIと、現在の移動通信交換局(Mobile Switching Center:MSC)およびVisitor Location Register(VLR)に照会した情報が返されます。HLRは、携帯電話ネットワークの加入者情報を管理するメインのデータベースです。一方VLRは加入者の位置情報を一時的に格納するデータベースであり、この位置情報はMSCが加入者にサービスを提供する際に必要です。

応答のイメージは、こんな感じです。「こんにちは。IMSIと、加入者の現在地を示すネットワークセグメントのアドレスをお渡します。それでは、このIMSI宛てのメッセージをあちらのMSC/VLRに送信してくださいね」。この処理の中で、HLRデータベースのアドレスまで判明してしまいます。これらのアドレスとIDがわかれば、さまざまなコマンドをHLRに送信できます。

たとえば、攻撃対象の加入者が通信している携帯基地局の識別情報を、何者かが問い合わせる可能性があります。この固有の識別情報とインターネット上で利用できる無数の加入者データベースを使えば、加入者の正確な位置情報を誤差数十メートルの高精度で割り出すことができます。簡単なプログラムをいくつか組み合わせて処理を完全に自動化し、携帯電話番号を入力したら地図上に加入者の位置が点で示されるようにすることもできます。

このほか、別のVLRと接続して不正な値を入力するようにHLRに対してリクエストすれば、受信する通話やメッセージをブロックすることも可能です。

他にも興味深い手口があります。誰でも自由にダウンロードできる「SS7 for Linux」ソフトウェアパックを使って、標的のMSC/VLRアドレスを自分(つまり攻撃者)のコンピューター上で模倣するというやり方です。こうすれば、誰にも知られずに通話やメッセージをハイジャックできるようになります。

たとえば、こうした不正な設定のコンピューター上でSMSを受信したら、配信通知サービスのメッセージを返さず、代わりにVLRを正規の値に切り替えるのです。切り替えが済むと送信サーバーは中継を再開し、最終的には意図した相手へメッセージを送信します。このようなSMS乗っ取りは、さまざまな2段階認証システムで使われるワンタイム認証コード(SMSで送信される)を傍受するのに、これ以上ない手口です。

通話の場合、話はもっと簡単です。HLRにアクセスし、正規の受信者へ通話を転送する前に中継する電話番号へ通話を無条件で転送するように設定すればよいのです。

同じ方法に少し手を加えれば、発信通話の傍受も可能です。標的の通話先の電話に対する転送パスを確立し、目的の電話番号を含むリクエストが発信通話から発行されたら、その番号を課金システムに転送します。こうすれば、通話料金が発生し、発信者に請求がいきます。

正規の課金システムのアドレスを、攻撃者が使う任意のアドレスに書き換えれば、標的の番号を知ることができます。一方の標的は、2回かけないと電話がつながりません。1回目は単に失敗しただけだと思い、なぜ失敗したかも考えないでしょう(ちなみに、いつも2度目の発信でないとかからないのであれば、それは明らかに盗聴されているということです)。

最近よくみかける政治家の秘密の電話が世界中に暴露される事件などからも明らかなように、建物や機器に盗聴器をしかけたりスパイを送りこんだりする必要はなくなりました。いずれ、選挙活動の中で対立候補があまりお金をかけずにこうした行為に走るようになるでしょう。

一般の人がこれらの手口の影響を受けたとしても、モバイルプランから数ドル盗られる程度のものでしょう。不正なUSSDコマンドを使って小口送金する、有料電話に通話を転送してトラフィックを生成する、などの手口が考えられます。

ここまで見てきたとおり、この問題には100%確実な対策がありません。プロトコルが使われるようになったその日から、ずっと続いている問題です。携帯電話の通信の仕組みを根本から見直さないかぎり、問題を完全に解決することはできないでしょう。

別の解決方法もありますが、そのためには加入者の活動を監視する複雑なシステムを導入して、悪意があると思われる加入者の活動を検知しなければなりません。多くのIT企業が自動化システムを提供していますが、実のところは詐欺対策プラットフォームであり、銀行で導入されるケースが多くみられます。

問題は携帯通信事業者

携帯通信事業者は、このようなシステムの導入を特に急いでいません。そのため、加入者は自分たちがこうした攻撃から守られているかどうかわからない状態です。ですが、メインで利用する通信事業者が安全だとわかったとしても、ローミングを利用している場合は、確実に安全とは言えなくなります。

犯罪者に秘密が漏洩しないようにする方法は、いたって単純です。電話では重要な話をせず、個人的に会って話すのです。また、2段階認証システムから送られてくるSMSを保護する場合は、自分しか知らない電話番号のSIMカードを別途用意し、この目的だけで使用するようにしましょう。