リバースHeartbleed(Reverse Heartbleed)を検証してみた。
セキュリティ界隈でOpenSSLのHeartbleed(CVE-2014-0160)が話題になっている。
サーバからの情報漏洩がクローズアップされており、対策が進んでいるようだけど、一方でクライアントを攻撃できる「リバースHeartbleed」脆弱性がある。
Android 4.1.1のリバースHeartbleed脆弱性
クライアントから情報が漏れるので、かなり危険なんじゃないかと思うけど、あまり注意喚起もされていないようなので知らない人もいるのでは?と思って、その検証と、対策などをまとめてみた。
該当する端末やアプリを使っている人はぜひ参考にして自衛してほしい。
Heartbleedとは
改めて説明するまでもないと思うけど、OpenSSLの脆弱性である。
OpenSSLはHeartbeat機能に実装不備があり、これを悪用することで最大64KBのメモリ上のデータを不正に取得できる。(しかも何回でも取得できる)
秘密鍵や、ユーザの入力したIDやパスワードなどの漏洩のおそれがある。
リバースHeartbleed(Reverse Heartbleed)とは
通常は、クラッカー(クライアント側)が世の中のサーバを標的として攻撃するが、リバースHeartbleedでは「リバース」の名の通り、サーバがクライアントを攻撃するHeartbleedである。*1
影響を受けるクライアント
冒頭の記事によるとAndroid 4.1.1と一部の4.2.2が影響を受けるとのこと。(厳密にはAndroidに組み込まれたOpenSSLが影響を受ける。4.2.2は詳細不明)
Androidのシェア的には4.1.xは最も多い35.3%みたい(4.1.1は不明)。ただWikipediaによると、日本ではAndroid 4.1.1の製品の種類は少ない。日本では一部の人が使っているだけなので話題になっていないのかな?
他に影響を受けるソフトウェアについてはセキュインコさんのまとめが詳しい。
検証
実際にリバースHeartbleed攻撃ができるか、以下の環境で検証してみた。
- 端末A:Android 4.1.1(リバースHeartbleed影響有り/HTC J butterfly)
- 端末B:Android 4.0.3(影響無し/HTC EVO 3D)
- サーバ:攻撃用サーバ。OSはKali linux、サーバスクリプトはpacemaker.pyを使用。
Heartbleed Detectorで端末のHeartbleed状況を確認する。
左:端末A:Android 4.1.1(HTC J butterfly。リバースHeartbleed影響有り)
右:端末B:Android 4.0.3(HTC EVO 3D。影響無し)
手順と結果
1. 攻撃用サーバの準備
攻撃用サーバからスクリプトを実行する。
サーバのURLは、例えばhttps://192.168.1.1:4433/のようになる。
2. 端末Aで攻撃用サーバにアクセス
端末AのAndroid標準ブラウザから攻撃用サーバにアクセスする。
サーバのコンソール上では以下のように端末のメモリ内の情報が表示された。(バイナリ部分はマスク)
取得したメモリ内容によっては、暗号化鍵や個人の情報が漏洩するおそれがある。
今回は、過去アクセスしたURL、サイトへのログインID、Googleアカウントなどが取得できた。
例:過去アクセスしたURL
また、OSが影響受けても、アプリが影響を受けない場合*2、(そのアプリの通信からは)メモリ内容は漏洩しない。
例:Android 4.1.1(影響有り)でGoogle chrome(影響無し)を使ってアクセスした場合
3. 端末Bで攻撃用サーバにアクセス
端末Bで同様にアクセスする。脆弱性がないので漏洩しない。
以上の結果から、脆弱な端末のユーザを、攻撃用サーバのURLにアクセスさせることができれば、端末のメモリ内容を盗み取ることができると考えられる。
対策
まずは影響を受けるかチェックする。
Androidの場合はHeartbleed DetectorやBluebox Heartbleed Scannerで、OSとアプリをチェックする。
不運にも該当するAndroid端末を使っている人は、以下のどちらかを検討する。
アップデートが提供されていないとか、機種変更がすぐにできない場合は、いったん以下の自衛策を取りつつ、どこかのタイミングで機種を変える。
- 不審なサイト(アングラ色の強いサイトなど)には行かない。
- ブラウザにはGoogle chromeを使う。標準ブラウザを使わない。
- オンラインバンキングなどにはログインしない。
あと、オススメできない方法だけど、思いついたのを一応載せておく。
- rootを取ってカスタムROMでアップデートする→root化に伴うリスクがある
- 以前使っていた携帯に戻す→(通常は)OSが古くなってしまうので別のリスクがあるかも。キャリアを変えていたり3GからLTEに機種変更していると戻せない。
まとめ的な
というわけでAndroid端末を例にリバースHeartbleedの検証結果と対策のまとめでした。
悪い人のサイトにユーザを誘導できれば、情報が抜き取れるというお話です。
ツッコミや考慮漏れなどがあったら教えていただけるとありがたいです。
情報源
URLを載せておきます。(本文と重複あり)
http://googleonlinesecurity.blogspot.jp/2014/04/google-services-updated-to-address.html
http://www.infoq.com/jp/news/2014/04/android_heartbleed
http://d.hatena.ne.jp/Kango/20140414/1397498442
http://blog.meldium.com/home/2014/4/10/testing-for-reverse-heartbleed
https://reverseheartbleed.com/
(追記)
国内のスマホは6機種該当するようですな。お使いの方はぜひアップデートを。
<OpenSSL欠陥>国内のスマホ6機種 OSに問題 (毎日新聞) - Yahoo!ニュース
EVO 3D(ISW12HT)でBluetoothキーボードを試した
先日、Android用にBluetoothキーボードを買った。
用途は、外で打ち合わせ時にメモしたいときに使う予定。*1
買う前に動作情報を調べたが、僕が買ったキーボードについてはあまり情報がなかったので検証結果をまとめておく。
これから買う方の参考になればありがたい。
確認環境
- HTC EVO 3D(ISW12HT)
- Android 2.3.4
- Bluetooth 3.0
- Microsoft Bluetooth Mobile Keyboard 5000 L4L-00001*2
- iWnn IME 2.1.4, Google日本語入力Beta 1.5.1089.3
対象機器を配置したときの様子。
検証内容
検証結果
そもそも使えるのか?
問題なく使用できた。
キーボードの電源を入れて、EVO 3DのBluetoothを有効にして機器検索、表示されたパスコードをキーボードから入力で使用可能になった。
キーボード配列(英字配列、日本語配列)がどう認識されるか?
キーボードは英字配列になった。
(記号は印字通りに出ない。「@」=「Shift+2」など)
ローマ字入力は問題なく使えるか?&縦置き、横置きともに問題なく使えるか?
ローマ字入力と縦置き・横置きの結果は以下のとおり。
入力方法\画面の向き | 縦置き | 横置き |
---|---|---|
iWnn IME | ○ | ○ |
Google日本語入力Beta | × | ○ |
横置きだと問題ない。Google日本語入力Betaで縦置きは実用に耐えない。
キーボードの文字のところを順に入力(12345〜〜、qwerty〜〜)していくとこうなった。法則がよくわからん。かな入力の印字とも異なる。
あかさたなはまやらわー=
むりすめ「れゆてへみ
きもしせちつにぬねう’¥
ろるけ」くふひ。.ん
Simeji、ATOKは使っていないので未検証。
その他、気づいた点(入力時の注意事項など)はあるか?
気づいた点をつらつらと。
- iWnn IMEでは、日本語入力切り替えはShift+Space。
- Google日本語入力では、画面上で日本語入力切り替え操作が必要。ただ日本語入力時でもShiftを押しながらアルファベット入力が可能。
- 記号は日本語入力時だと全角になる。
- CapsLockは利かない模様。
- F3でTELの画面、F4で画面が消える(電源ボタンと同じ)、Homeキーでホーム画面、Endキーで画面が消える
あとはキーボードの感想でも。
キーボードは薄型ながら打ちやすかった。さすがハードウェアに定評のあるMicrosoft。
あとサイズ的にピッタリのケースがないが、ダイソーのA4ワイドソフトケースが横幅ぴったり(縦は余る)なのでこれに入れている。
ELECOMやBUFFALOからもBluetoothキーボードが出ており、店頭でいろいろ試し打ちしたが、Microsoftのが断然打ちやすく感じた。サイズの大きさが気にならなければ、こちらがおすすめ。
ioPad5をroot化してみた。
ちょっと前にioPad5を購入。
うちのioPad5。壁紙はドラクエ25周年展示会に置いてあったメタルスライム。
購入した経緯は……なんだっけ、いじくり回せるAndroid端末が欲しかったので探していたら、リーズナブルな値段(≒壊れてもあまり惜しくない)で置いてあったこと。携帯をHTC EVOにしてからは使用頻度は減ったけど、調べ物やYouTube再生とかで活躍してる。
この手の情報は溢れてると思うんだけど、手元の端末でroot化をやってみたので、メモとして残してみる。調べたら何かすごい簡単にできた。
前提として、ioPad5自体の情報は探してもあまり見当たらない。ただ、この端末はAndroidタブレット「Dropad A8」とモノが同じ(未確認、他モデルでも同じものがあるらしい)みたいなので、「Dropad A8」の情報がそのまま当てはまると考えて良さそう。
以下に手順を載せるけど一応注意。root化は失敗すると文鎮化(起動しなくなって置物状態になる)するなどリスクがあるので、自己責任でお楽しみください。
root化手順メモ
といっても僕がやったのはファームウェアを入れ替えるだけ。「C8lean」というアツいファームウェアがあるのでそれを使う。
- C8leanのページからダウンロード。僕はC8lean v1.2を利用。
- C8lean_v1.2.rarを解凍して、microSD(HC)カードの直下にファイルをコピー。
- microSDをioPadにセット。
- ioPadを起動。このとき、電源投入時にメニュー(「M」)ボタンを押しっぱなしにしておく。
- ロゴとともに「ファームウェアをアップデートしてるので終わるまで待て」という趣旨のメッセージが出るので、ボタンから手を離し、10分くらい?待つ。途中で再起動するかも。
- アップデートが完了すると、root化されている。あとAndroidは2.2→2.3になっている。
これだけ。ファームウェアのおかげで簡単にできた。
root化の確認
端末上で、suコマンドを打ってみて確認する。
- AndroidマーケットからScript Managerをインストールする。
- Script Managerのメニューから「Console」を起動。
- 「su」コマンドを入力。
- エラーにならず、プロンプトが「#」に変わればOK。「id」コマンドを打つと「uid=0 gid=0」(root)になっている。
root化後
まずはフォントを入れ替える。ioPadに限らず中華Padは軒並みCJKフォントが使われていて、いくつかの漢字が馴染みのないフォントになっている。
CJKフォントの例。「統」「漢」が普段使っているフォントと違う。ただ、この辺はまだかわいい。ここには無いが「直」とか酷い。これを変える。
- Android用日本語フォントパッケージのページから好きなフォントをダウンロード。僕は「モトヤLマルベリ3等幅」を選択。
- 解凍して出てきた「DroidSansFallback.ttf」「DroidSansJapanese.ttf」を、microSDカード等でioPad本体にセット。
- コピーしてシステムフォントを置き換える。コマンドはうろ覚えだけどこんな感じ。(外部microSDカードの直下に.ttfファイルが入っているとして。あとコマンドの実行にはAndroid ADB Shellを使ったかもしれない。)
cp -r /mnt/extsd/* /system/fonts/
これで再起動すればフォントが変わっている。こんな感じ↓
OK。
今回はこの辺で。またいじくって楽しそうなことがあれば書こうと思う。