Android端末の「データ全消去の脆弱性」について

Samsungの端末で「悪意のあるコード」にアクセスするとユーザに断りなく端末が初期化されデータがすべて失われるのだそうです。日本語だと下記のページにあります。(ICSアップデート後のSC-02Cは問題ありません)

http://www.lifehacker.jp/2012/09/120928android_hole.html

実際の動作としては、
・WEBページ、QRコードなどを通じて、tel: スキームのリンクを踏む
・Android端末のいくつかのダイアラー(電話アプリ)は tel: スキームを自動実行する
・Android端末のいくつかは、電話アプリからファクトリーリセットをかけるコードを入れることで初期化できる
ということです。

さらに詳しくはここが参照先になっているようです。

http://dylanreeve.posterous.com/remote-ussd-attack
http://dylanreeve.posterous.com/remote-ussd-attack-clarifications

tel: スキームというのは、携帯電話でSMSやWEBページを表示したときに電話番号がリンクになっていてクリックすると電話をかけることができますが、アレです。QRコードで読み取ることもできます。tel:リンクに #*#* XXXX #*#* というコードを入れておいてそれを電話アプリに実行させています。というか、電話アプリは電話番号だと思って処理しているだけですが。

そういう理由から、回避策としては、コードを自動実行してしまわないサードパーティのダイアラー(電話アプリ)を使うことが提案されています。もしくは、電話アプリがコードを実行する前に内容をチェックするアプリもあるようです。

https://play.google.com/store/apps/details?id=net.gicode.android.autores...
https://play.google.com/store/apps/details?id=org.mulliner.telstop

技術的な話をすると、これらのアプリは電話アプリと同じIntent Filterを持っているので tel: リンクを実行したアプリが Intent を投げるときに、電話アプリと上記アプリがリストとして出るようになります。常に上記アプリを実行するようにしておけば、電話アプリにコードを渡す前に上記アプリでチェックをかけることができます。安全な電話番号であることを確認したら上記アプリから電話アプリにデータを渡して実行させることができるようです。

今回の最初の指摘はSamsung端末だったようですが、#*#* XXXX *#*#というコードはたいていのAndroid端末に仕込んでありますから、いろいろ該当する機種が見つかっているみたいです。Samsung端末は初期化コードをはじめとしていろいろなシークレットコードを持っていますから、これらを勝手に実行されちゃたまりませんよね。

SC-02C Secret Code 一覧
うっかりGalaxy S2をFactory Formatしてしまった

今回はなぜかUSSDコードと呼ばれているみたいですが、本来のUSSDコードはモバイルのネットワークとやりとりしてサービスを受けるためのGSM規格ですので、今回のファクトリーリセット用のコードなどはちょっと違うものです。この点は http://dylanreeve.posterous.com/remote-ussd-attack-clarifications の中にも追記されています。

本来のUSSDコードの使い途としては、プリペイドSIMのチャージとか、残高チェックなどがあります。

Vodafone SIM を挿して SIM Application Toolkit アプリを動かしてみた

上記記事中に、SIM Application Toolkitのアプリメニュー画像を載せていますが、私の理解では、メニューの各項目を実行するとUSSDコードが送られてそれに応じてネットワーク側から情報が飛んできます。メニュー中にTop UpとかBalanceとかありますし、Sport、News&Weatherといった情報提供関連もそうだと思います。

もともとインターネット機能の無いフィーチャーフォン向けに存在したもので、いまどきのスマートフォンならアプリをダウンロードしてIPのレイヤで通信してしまえばよいので、そのうち無くなるのではないかと思います。

問題になっているコードは、USSDコードと同じ形式なのですがネットワーク側とのやりとりはありません。Android端末の場合は電話アプリがBroadcast Intentして、該当するアプリがそれを拾って実行する仕組みなようです。