Android端末のメモリ暗号化 によるコールドブート攻撃対策

Slides:



Advertisements
Similar presentations
九州工業大学 塩田裕司 光来健一.  仮想マシンは必要なときだけ動かす使い方が一般 的 ◦ 一台の計算機上に複数の計算機を仮想的に作成できる ◦ デスクトップ  異なる OS を使用するため作成 ◦ サーバ  最大負荷に合わせた数の仮想マシンを作成  長期間使わない仮想マシンも存在する VM.
Advertisements

ファイルキャッシュを考慮したディスク監視のオフロード
最新ファイルの提供を保証する代理FTPサーバの開発
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
Android端末の盗難対策のためのページキャッシュ暗号化
クラウド上の仮想マシンの安全なリモート監視機構
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
Xenを用いたクラウドコンピュー ティングにおける情報漏洩の防止
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
KVMにおけるIDSオフロードのための仮想マシン監視機構
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
メモリ暗号化による Android端末の盗難対策
仮想計算機を用いたファイルアクセス制御の二重化
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
小型デバイスからのデータアクセス 情報処理系論 第5回.
ファイルシステムキャッシュを 考慮したIDSオフロード
ネストした仮想化を用いた VMの安全な帯域外リモート管理
VMマイグレーションを可能にするIDSオフロード機構
クラウドの内部攻撃者に対する安全なリモートVM監視機構
アスペクト指向プログラミングを用いたIDSオフロード
サスペンドした仮想マシンの オフラインアップデート
2004年度 サマースクール in 稚内 JavaによるWebアプリケーション入門
型付きアセンブリ言語を用いた安全なカーネル拡張
SAccessor : デスクトップPCのための安全なファイルアクセス制御システム
KVMにおける仮想マシンの 内部監視機構の実装と性能評価
SAccesor:デスクトップPCのための安全なファイルアクセス制御システム
分散IDSの実行環境の分離 による安全性の向上
VMのメモリ暗号化によるクラウド管理者への情報漏洩の防止
VMのメモリ暗号化による クラウド管理者への情報漏洩の防止
VM専用仮想メモリとの連携による VMマイグレーションの高速化
IaaS型クラウドにおける インスタンス構成の動的最適化手法
暗号化された仮想シリアルコンソールを 用いたVMの安全な帯域外リモート管理
リモートホストの異常を検知するための GPUとの直接通信機構
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
シャドウデバイスを用いた 帯域外リモート管理を継続可能なVMマイグレーション
実行時情報に基づく OSカーネルのコンフィグ最小化
仮想メモリを用いた VMマイグレーションの高速化
オペレーティングシステム イントロダクション
複数ホストに分割されたメモリを用いる仮想マシンの監視機構
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
仮想シリアルコンソールを用いた クラウドの安全なリモート管理
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
東京工業大学 情報理工学研究科 数理・計算科学専攻 千葉研究室 栗田 亮
IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止
クラウドにおけるVMリダイレクト攻撃を防ぐためのリモート管理機構
クラウドにおけるVM内コンテナを用いた 自動障害復旧システムの開発
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
Intel SGXを利用する 巨大なアプリケーションの マイグレーション機構
仮想マシンを用いた 既存IDSのオフロード
Intel SGXを利用するコンテナの マイグレーション機構
Intel SGXを用いた仮想マシンの 安全な監視機構
軽量な仮想マシンを用いたIoT機器の安全な監視
複数ホストにまたがって動作する仮想マシンの障害対策
VMMのソフトウェア若化を考慮した クラスタ性能の比較
信頼できないクラウドにおける仮想化システムの監視機構
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
仮想環境を用いた 侵入検知システムの安全な構成法
Cell/B.E.のSPE Isolationモードを用いた監視システム
仮想マシンの監視を継続可能なマイグレーション機構
仮想マシンと物理マシンを一元管理するための仮想AMT
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Cell/B.E. のSPE上で動作する 安全なOS監視システム
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
強制パススルー機構を用いた VMの安全な帯域外リモート管理
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
複数ホストにまたがるVMの メモリ使用状況に着目した高速化
Virtual Machine Introspectionを可能にするVMCryptの拡張 田所秀和 光来健一 (九州工業大学)
強制パススルー機構を用いた VMの安全な帯域外リモート管理
管理VMへの キーボード入力情報漏洩の防止
Presentation transcript:

Android端末のメモリ暗号化 によるコールドブート攻撃対策 九州工業大学 光来健一 福田直人

Android端末の盗難のリスク Android端末は盗難にあった時のリスクが高い 盗難にあうリスクが高い 従来の携帯電話より多くの情報を保持 PDF/Word/Excelファイル、音楽、写真 より重要な情報も格納 顧客の情報 盗難にあうリスクが高い ノートPCより小型軽量 ・Android端末が増加、総出荷台数は30億台を突破 ・Android端末は盗難にあった時のリスクが高い ・盗難に遭うリスクも高い RIM(Research in motion) : blackberry Symbian (OS and company) : Nokia

フルディスク暗号化による対策 Androidは盗難対策としてフルディスク暗号化を提供 ディスクのパーティション全体を暗号化してデータを保護 ディスクからの読み込み時にデータを復号 ディスクへの書き込み時にデータを暗号化 OS起動時に4桁の暗証番号(PIN)から暗号鍵を生成 PINを知られない限り、ディスク上の情報は漏洩しない ・盗難対策としてフルディスク暗号化を提供している ・ディスクからデータを読み込む時に復号、書き込み時に暗号化 ・ディスクはPINで暗号化されている、OSの起動時に暗証番号から暗号鍵を生成してディスクを復号 ・ディスク上のデータが盗まれても暗号化されているのでPINを知られない限り情報漏えいしない PINの説明 dm−crypt Android OS 暗号化 ディスク 復号化

Androidにおけるコールドブート攻撃 メモリ上のデータを盗み見る攻撃 [Halderman et al.’08] 冷却することでメモリ取り外し時のデータ破壊を防ぐ Android端末でも報告 [Muller et al.'13] 端末を冷却した状態で強制リセット USB経由で攻撃用リカバリイメージをインストール・起動 OSがメモリ上の機密情報を消去する時間はない ・メモリ上のデータを盗み見るコールドブート攻撃が出現 ・揮発性メモリは電源供給がなくなるとデータが破壊される ・冷却してメモリを取り外して、攻撃者のPCでデータを抜き出す ・Android端末ではメモリはチップに組み込まれているので、取り外しできない ・リカバリイメージを使用して、OSを起動させずにメモリ上のデータを抜き出す ・端末を強制リセットするためOSがメモリ上のデータを消去できない Android端末とPCとの違い、メモリが取り外せない ->リカバリイメージを使ってコールドブート攻撃 漏洩がすべてキャッシュからではない 写真の説明、手順通りに説明 なんでリセット、リカバリーイメージ(自分のシステムを使いたい、別の端末に持っていけない) こういうのをしたいから、手順がある

ページキャッシュからの情報漏洩 Android OSはディスク上のデータをメモリ上にページキャッシュとして保持 ファイルアクセスの高速化のため コールドブート攻撃によりページキャッシュを盗み見られる フルディスク暗号化を行っていてもディスクの一部のデータが漏洩 ・Androidではメモリ上にディスク上のデータの一部がキャッシュとして保持されている ー> ページキャッシュと呼ぶ ・理由:ファイルアクセスの高速のため。(図で説明) ・フルディスク暗号化をしていてもメモリ上のキャッシュは復号化されているので、情報漏洩する危険がある dm−crypt アプリ ページ キャッシュ キャッシュ Android OS 暗号化 ディスク 復号化

提案:Cache-Crypt メモリ上のページキャッシュを暗号化 暗号化されたファイルをディスクからそのままキャッシュに読み込む アプリがファイルにアクセスする時だけ復号 アプリには暗号化を意識させない 情報漏洩の対象をアクセス中のページキャッシュに限定 ・メモリ上のキャッシュを暗号化することでコールドブート攻撃によるキャッシュからの情報漏洩を防ぐシステムであるCache-Crypt を提案 Cache-Crypt ページ キャッシュ Android OS 暗号ファイル 復号化 暗号化 暗号化 キャッシュ アプリ ディスク

脅威モデル 端末を盗まれ、コールドブート攻撃によりキャッシュや暗号鍵を盗み見られる攻撃を想定 ディスクからの情報漏洩はフルディスク暗号化で防ぐ アプリのメモリからの情報漏洩は既存研究で防ぐ Cryptkeeper [Peterson HST'10] 端末に不正ログインされないことを仮定 不正なアプリ経由で復号済みのデータを取得されない 本研究では前提として、端末を盗まれ、コールドブート攻撃によりキャッシュや暗号鍵を盗み見られる攻撃を想定している Cryptkeeperはアプリが使っている(プロセスの)メモリを暗号化 暗号鍵の問題とアクセスが多い所は、ずっと復号されている -> crypt-keeper 暗号化が弱い 絵を書き換える 、絵でつなげる Android OS 暗号化 キャッシュ Cache-Crypt dm−crypt 暗号化 ディスク アプリ アプリ経由で漏洩 不正ログイン ディスクから漏洩

ファイルの読み込み処理 アプリがOS経由でファイルを読み込む時 暗号化キャッシュ上のデータを復号 復号したデータをアプリのバッファにコピー キャッシュがなければディスクから読み込む 復号したデータをアプリのバッファにコピー ページキャッシュ上のデータを再び暗号化 アプリ 暗号化 ディスク Android OS Cache-Crypt 暗号ファイル 暗号化 キャッシュ 非暗号化 キャッシュ バッファ

ファイルへの書き込み処理 アプリがOS経由でファイルに書き込む時 アプリのバッファのデータをページキャッシュに書き込み 上書き時には暗号化ページキャッシュを復号 ページキャッシュがなければディスクから読み込む ページキャッシュ上のデータを暗号化 適切なタイミングでOSがディスクに書き戻す バッファ アプリ 暗号化 ディスク Android OS Cache-Crypt 暗号ファイル 非暗号化 キャッシュ 暗号化 キャッシュ

暗号化の遅延 復号したページキャッシュはしばらくそのままにする 安全性と性能のトレードオフになる 一定時間アクセスがなければ再び暗号化 再暗号化のオーバーヘッドを削減できる可能性 安全性と性能のトレードオフになる コールドブート攻撃の完了までに暗号化できればよい 攻撃には一定の時間がかかる 端末が画面ロックされている間は暗号化を遅延しない 盗難の可能性を考慮 ・Cache-Cryptでは復号した後の暗号化を遅延 ・1回アクセスしたページキャッシュに何度もアクセスする場合にはオーバーヘッドを削減できる ・アクセスするたびに暗号化・復号化しなくて良くなるのでオーバーヘッドを削減できる ・コールドブート攻撃には一定の時間がかかることを利用して、データが抜き取られる前に暗号化すれば良い ・例えば盗難の可能性を考慮して、端末の画面がロックされている間は暗号化の遅延を行わないようにもできる Cache-Crypt アプリ アクセス 暗号化キャッシュ

ファイルのメモリマップへの対処 ファイルがメモリマップされるとOSはアプリのファイルアクセスを検知できない アプリがページキャッシュに直接アクセスするため アプリが初めてアクセスした時に復号 OSは最初のアクセスだけ検知できる メモリマップ中はページキャッシュを復号したままにする メモリマップが終了した時に再び暗号化 ・Androidにはファイルの読み書きを行う別の方法として、メモリマップというメモリへ直接アクセスする機能がある ・OSを経由したアクセスの話をしたが、これはOSを経由しないアクセス方法 ・OSはメモリマップ時のアプリとメモリの間のアクセスを検知できない メモリマップを行なっているのはおもにライブラリくらい ? ( javaから使う時は、メモリマップはしないかも ) アプリ 暗号化キャッシュ 最初のアクセス メモリマップ(OSが検知できない) 非暗号化キャッシュ 暗号化キャッシュ Cache-Crypt Android OS

暗号鍵の保護 キャッシュを暗号化する鍵が盗まれるとCache-Cryptを無効化される 暗号鍵をCPUのデバッグレジスタに保持 メモリ上に保持するとコールドブート攻撃で盗まれる 暗号鍵をCPUのデバッグレジスタに保持 ARMORED [Götzfried et al.'13] を利用 端末のリセット時にCPUのレジスタは初期化される 暗号処理もCPUのレジスタのみを用いて行う ・Andorid OSのなかに暗号鍵があると、コールドブート攻撃で漏洩する デバックレジスタは、普通のパソコンはデバックに使用する デバックレジスタはAndroidでは使われない Android OS Cache-Crypt 暗号化 キャッシュ CPU

実験 Cache-Cryptの有効性を確かめる実験を行った 実験環境 ページキャッシュの状態の確認 消費電力の測定 実験環境 Nexus 7 (2013) CPU: Qualcomm Snapdragon S4 Pro APQ8064 (4コア) メモリ: 2GB Android 4.4.2 OS: Cache-Cryptを実装したLinux 3.4.0 暗号方式: AES

ページキャッシュの状態 テキスト検索中のページキャッシュの状態を調べた ネットワーク経由で保存するカーネルモジュールを作成 復号されたページキャッシュの量 暗号化の遅延を行わない場合はほぼ0 遅延を行うと検索中は増加し、検索が終わると0になる ・テキストの検索中にディスクからページキャッシュに検索先のデータがキャッシュとしてコピーされて増えていく ・青色の部分が暗号化されていないページキャッシュ、赤色の部分が暗号化されているページキャッシュ ・暗号化を0ms遅延させた時は、メモリ上に全キャッシュが載るまでに50秒程度かかる ・暗号化を1000ms遅延させた時は、15秒程度で全部のキャッシュが載る 検索には約10〜20秒程度かかる 暗号化を0ms遅延 暗号化を1000ms遅延

ファイルの読み書き性能 Benchmarkを用いてファイルの読み書き性能を測定 暗号化を0ms〜5000msの間で遅延させた 読み込みのオーバヘッドは42% 書き込みのオーバヘッドは12% ・read 必ず復号する ・これは最悪の場合、次の実アプリが本当のに参考になる値

実ワークロードでの性能 AndroBenchを用いてSQLiteと実アプリの性能を測定 SQLiteでは6%程度のオーバヘッド 100ms程度の遅延で十分 実アプリでは8%程度のオーバヘッド 250ms程度の遅延で十分 ・右が実アプリ(実際にあるアプリをエミュレーション)で、実行してから終わるまでの時間が短いほど性能がいい ・左がSQLite(軽量データベース)で、一秒間に処理できるトランザクションの数が多いほど性能がいい ・SQLiteでは100ms、実アプリでは250msくらいの遅延で十分 ・意外と短いタイムアウト時間でオーバーヘッドが変わらなくなる SQLite (database app) サーバとしてではなく、アプリケーションに組み込んで利用する軽量のデータベース APIはライブラリを呼び出すだけ、データの保存に単一のファイルのみを使用することができる Browser (Facebook, eBay, and Amazon) workload Market (Application download and install) workload Camera workload Camcoder (camera and recorder) workload SQLiteはAndroid標準で使われている SQLite 実アプリ

消費電力 Benchmark実行中の消費電力をPowerTutorで測定 暗号化を1000ms遅延させると消費電力が29%程度増加 遅延させない場合は微減 原因は調査中 電力量は17%程度増加 ・消費電力はベンチマークが始まって終わるまでの電力の平均 ・0msで減少する、1000msで増えるのも調査中 ・現在はベンチマークを一回実行して測定、何回か実行して測定を行うと結果のばらつきがなくなるかもしれない

関連研究 TransCrypt [Sharma '06] Cryptkeeper [Peterson '10] ページキャッシュの暗号化も考慮 メモリマップに非対応、オーバヘッドの考慮なし Cryptkeeper [Peterson '10] プロセスのメモリを暗号化 ページキャッシュを含むOSのメモリは暗号化しない Keypad [Geambasu et al.'11] ファイルごとの暗号鍵をサーバに保存 ネットワークが使用できない時は復号できない TransCrypt : 安全なファイルシステムを提案。ユーザのプロセスがVFSにアクセスすると、TransCryptを経由してファイルが渡される 問題点 : ファイルシステムの評価を行っていない、実用上の問題がある Cryptkeepr : メモリの暗号化を提案。物理メモリページを5つに分ける、プロセスがアクセスするメモリを暗号化 問題点 : カーネルのメモリは暗号化しない Keypad : 安全な暗号鍵の管理方法を提案。ファイルの暗号化、メタデータと暗号鍵をサーバに保存、アプリがファイルを捜査する時に暗号鍵のリクエストとメタデータのアップデートを行う。 問題点 : 暗号化鍵の問題と関連がある

まとめ メモリ上のページキャッシュを暗号化するCache-Cryptを提案 今後の課題 コールドブート攻撃によるメモリからの情報漏洩を防ぐ アプリがファイルにアクセスする時だけ復号 再暗号化の遅延によりオーバヘッドを削減 Android OSに実装し、有効性を確認 今後の課題 フルディスク暗号化との連携によるオーバヘッド削減 暗号鍵をCPUのレジスタ上に格納することによる漏洩防止 今後の課題を、なにをするかをそれぞれ一つずつ言う

今後の課題 メモリからの暗号鍵の漏洩防止 フルディスク暗号化との連携によるオーバヘッド削減 暗号鍵をCPUのレジスタ上に格納 キャッシュ上の暗号データをそのままディスクに書き戻せるようにする

コールドブート攻撃の出現 物理的にメモリ上のデータを盗み見る攻撃 [Halderman+ Security’08] メモリを冷やしデータの破壊を防ぎ、機密情報を盗み見る OS等がメモリ上の機密情報を消去する時間はない コールドブート攻撃はもう少し時間をかけて説明する バッテリー抜き差しはいらないかも メモリを取り外して攻撃者の端末に持ってくる <ー 抜けてる 攻撃者の端末 メモリ メモリを冷やすことでデータ破壊を遅らせる 攻撃者の端末でメモリ上のデータを取得 メモリを取り外す

CPU使用率 AndroBenchアプリでファイルの読み書き性能の測定時のCPU使用率 0msと1000msで遅延させて測定

安全性とのトレードオフ 最後のアクセスから一定時間アクセスがなければキャッシュを再び暗号化 アプリ この時間を調整することで性能と安全性のトレードオフをとることができる 再暗号化までの時間を長くすると性能が向上、短くすると安全性が向上 また、最後のアクセスから一定時間アクセスがなければキャッシュを再び暗号化することで暗号化の回数を減らし、オーバーヘッドを削減します。 Cache-Crypt 非暗号化キャッシュ 暗号化キャッシュ アプリ 非暗号化キャッシュ 暗号化キャッシュ アクセス 非暗号化キャッシュ 非暗号化キャッシュ 非暗号化キャッシュ

ファイルのメモリマップの問題 OSはアプリがキャッシュに直接アクセスするインタフェース(メモリマップ)も提供 アクセス時に復号が行えない Cache-Cryptを実装する上で、ファイルのメモリマップの問題がありました。 Android OS アプリ 直接アクセス メモリマップ(OSが検知できない) 暗号化 キャッシュ

安全な暗号処理 ARMORED [Götzfried+ ARES‘13] を用いて暗号処理を安全に行 暗号鍵の保護 暗号鍵をCPUのデバックレジスタに格納することで保護 デバック時以外に使用されないCPUレジスタ CPUのレジスタのみを用いて暗号処理 メモリを用いずにAESの暗号処理を行う 暗号処理の途中結果も漏洩しない 暗号化は難しい Android OS 図をわかりやすく Android OS Cache-Crypt 暗号化キャッシュ CPU 暗号化 キャッシュ