Androidのセキュリティを勉強する会(2011/9/3)のまとめ
ASLRという機能もあります。メモリをランダムに配置する手法です。DEP回避で特定のアドレスを狙う攻撃があるので、メモリの配置をランダム化することで、特定のアドレスを狙いにくくするものです。AndroidのKernelではヒープ以外はASLRが有効でスタックは比較的安全です。
2011-09-03 10:28:07ASLR。メモリ配置をランダム化することで特定のアドレスを狙った攻撃を当たりにくくする。Androidカーネルのデフォルト設定ではヒープ以外のメモリをランダム化するようになっている。スタックはこれにより比較的安全になる。しかしP(cont) http://t.co/wbUVo4E
2011-09-03 10:28:25しかし例えばzygoteに問題があります。おそらくはメモリ節約のためDalvik上の全アプリはzygoteのクローンとして起動します。zygoteにおいて互換性フラグが有効だった場合、DEPは無効化されます。クローン間で実行可能モジュールのアドレスが共通なので攻撃しやすいのです。
2011-09-03 10:30:19セキュリティ上の懸念、Zygote。メモリ削減のため、すべてのDalvikアプリはZygoteのクローンとして起動する。クローン間でアドレス共通のためASLRが大幅に弱化。
2011-09-03 10:30:20Prelinkingという機能もあります。これもメモリ節約のため、アドレスがフレームワークビルド時に設定されたものに固定されてしまいます。ライブラリなどのASLRは事実上無効化されてしまいます。
2011-09-03 10:31:42AndroidとiOSを比較するとiOSは2.0でほとんど対応しているのでAndroidの方が遅れていると言えます。次に不備の実例です。JavascriptのV8 Engineはread/write/executeなメモリを確保して、そのままJSエンジンに渡してしまいます。
2011-09-03 10:34:23まとめとして。Linuxカーネルが持つセキュリティ機能は十分とはいえないです。ただしこれは速度の問題であるため、モバイルCPUの進化によってある程度改善を期待できるでしょう。
2011-09-03 10:35:50Androidアプリの仕組み。一般OSでのアプリの位置づけと全く異なる。Intentなど。Androidセキュリティを知るにはこれらの独自の仕組みを知る必要あり。
2011-09-03 10:36:51アプリの話です。AndroidではアプリはPackageに格納されます。Package内のクラスが「どのように呼び出されるべきか」を予め登録しておき、一定のルールで呼び出されます。Manifestに従ってインストールされます。
2011-09-03 10:38:48パーミッション。アプリ動作に必要な権限をまとめたもの。必要なパーミッションがない操作は拒否される。逆にパーミッションがあればほとんど何でもできる。
2011-09-03 10:41:02Packageは単なるZIPアーカイブです。パーミッションの情報が付加されます。INTERNETや電話など、ほとんどの機能はパーミッションさえあれば動作します。Intentという機能があります。アプリ間の連携を行うものです。操作内容や対象を含んだメッセージをやりとりをします。
2011-09-03 10:42:03Intent。アプリ間の連携を行う。操作内容、対象を含んだメッセージを送受信。アプリ連携以外にシステムイベント通知にも使われ、非常に重要。
2011-09-03 10:42:23