Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ナウいAndroidセキュリティ

16,948 views

Published on

Andorid 4系

Published in: Technology
  • Be the first to comment

ナウいAndroidセキュリティ

  1. 1. ナウいAndroidセキュリティ 矢倉 大夢
  2. 2. 自己紹介• 矢倉 大夢• 高等学校1年• 校パソコン研究部長• @hiromu1996
  3. 3. 自己紹介• Linux Kernel Contributor • 情報セキュリティスペシャリスト• Androidセキュリティ部
  4. 4. セキュリティ部• http://asj.mns.me/  • JSSEC特別会員 • ガイドラインの策定協力 • Androidセキュリティ関連の記事執筆
  5. 5. これまでのABC• ABC 2011 Winter  • Lightning Talk • ABC 2012 Summer  • カーネルから見るAndroidのセキュリティ
  6. 6. これまでのABC• ABC 2012 Spring  • 検証、SEAndroid • 今回はこの続き
  7. 7. _人人人人人人人人人人人_> 今、SEAndroidが熱い < ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
  8. 8. というか
  9. 9. _人人人人人人人人人人人人人人人人_> 今、Androidセキュリティが熱い < ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
  10. 10. Androidのセキュリティ• 「Androidはウイルスだらけで危ない」• 「Android使うと個人情報を抜かれる」• 「Androidは危険、世の中はiPhone」
  11. 11. それが変わる• Androidのセキュリティ • どんどん改善されていきます• Androidセキュリティはダメ、と 言われることもなくなるはず
  12. 12. Android 4.x• Android 4.0 (Ice Cream Sandwich)  • 2011/10 公開• Android 4.1 (Jelly Beans)  • 2012/06 公開
  13. 13. Android 4.xはココが違う • 顔認証ロック解除 • デフォルトアプリの無効化 • オフライン音声入力
  14. 14. Android 4.xはココが違う • Android Beam  • NFCを使った共有が可能に • 新しい検索画面
  15. 15. それだけじゃない
  16. 16. Android 4.xでココが違う • ASLR  • SEAndroid  • 大きな2つの変更点
  17. 17. ASLR• Address Space Layout Randomization  • メモリに展開する際のアドレスを ランダム化 • Return-to-libc攻撃などに有効
  18. 18. Return-to-libc Attack• コールスタック ローカル変数 a() リターンアドレス 呼び出しの引数
  19. 19. Return-to-libc Attack • コールスタック ローカル変数b(int i, int j) リターンアドレス 呼び出しの引数 ローカル変数 a() リターンアドレス 呼び出しの引数
  20. 20. Return-to-libc Attack • a()からb(int i, int j)を呼び出す ローカル変数b(int i, int j) リターンアドレス int i, int j 呼び出しの引数 ローカル変数 a() リターンアドレス 呼び出しの引数
  21. 21. Return-to-libc Attack • 引数とリターンアドレスがスタックに ローカル変数b(int i, int j) リターンアドレス 戻れる  int i, int j 呼び出しの引数 ローカル変数  ように a() リターンアドレス 呼び出しの引数
  22. 22. Return-to-libc Attack • ここでバッファオーバーフロー ローカル変数b(int i, int j) リターンアドレス オーバーフロー 呼び出しの引数 ローカル変数 a() リターンアドレス 呼び出しの引数
  23. 23. Return-to-libc Attack • ここでバッファオーバーフロー ローカル変数b(int i, int j) オーバーフロー 呼び出したい関数 リターンアドレス 呼び出しの引数 ローカル変数 a() リターンアドレス 呼び出しの引数
  24. 24. Return-to-libc Attack • ここでバッファオーバーフロー ローカル変数b(int i, int j) オーバーフロー system() 呼び出したい関数 リターンアドレス libc.so “ls” 呼び出しの引数 ローカル変数 system(“ls”); a() リターンアドレス 呼び出しの引数
  25. 25. ASLRではこうなるlibc.so • ASLRを有効にすると ローカル変数b(int i, int j) オーバーフロー system() 呼び出したい関数 リターンアドレス “ls” 呼び出しの引数 ローカル変数 system(“ls”); a() リターンアドレス 呼び出しの引数
  26. 26. ASLRではこうなる • ASLRを有効にすると ローカル変数b(int i, int j) オーバーフロー system() 呼び出したい関数 リターンアドレス “ls” 呼び出しの引数 ローカル変数 system(“ls”); a() リターンアドレス 呼び出しの引数 libc.so
  27. 27. ASLRではこうなる • ASLRを有効にするとlibc.so ローカル変数b(int i, int j) オーバーフロー system() 呼び出したい関数 リターンアドレス “ls” 呼び出しの引数 ローカル変数 system(“ls”); a() リターンアドレス 呼び出しの引数
  28. 28. ASLRではこうなる • ASLRを有効にすると ローカル変数 b(int i, int j) オーバーフロー system() 呼び出したい関数 リターンアドレス “ls” 呼び出しの引数 ローカル変数 system(“ls”); a() リターンアドレスlibc.so 呼び出しの引数
  29. 29. Demo
  30. 30. ASLR• ASLRはAndroid 4.0で導入された • Android 4.1から位置独立コードにも 対応 • やっとAndroidに!!! • iOSは2011年3月に対応済み
  31. 31. SEAndroid• 今、SEAndroidが話題 • 発端は次のコミット
  32. 32. _人人人人人人人人人_> 突然の10連patch <  ̄^Y^Y^Y^Y^Y^Y^Y^ ̄
  33. 33. SEAndroidのマージ• 10/17 事件は起こった.... • SEAndroidがデフォルトで 有効化されるようになりました • 突然の出来事にびっくり
  34. 34. SEAndroidって?• そもそもSEAndroidって何なのか • Linux Security Moduleのひとつ • SELinuxのAndroidバージョン
  35. 35. Linux Security Module• 主な機能は強制アクセス制御 • root権限を奪取されても 安全な端末に• より強固なAndroidを実現
  36. 36. root権限の脅威• root権限を奪取されることのリスク • アプリケーションが好き放題できる • キャリアの損失 • ex. テザリングを不当に使用される
  37. 37. 現状• root権限奪取の脆弱性が すぐに修正されない • そもそもこまめにアップデートを 提供するのが難しい • 端末のカスタマイズによる分断
  38. 38. 現状• 過去には脆弱性の発見から修正まで 1年かかったケースも• さらにベンダーによるアップデートが 打ち切られた機種もある
  39. 39. 現状• ベンダー側でも様々な対策をしている • SHARP: Deckard LSM / Miyabi LSM  • Panasonic: TOMOYO Linux • 公式のサポートはなかった
  40. 40. Android 4.1以降• Android 4.1以降は公式のソースに SEAndroidが含まれている • Android 4.2からはデフォルトに
  41. 41. Android 4.2• デフォルトになるって? • すべての機種にSEAndroidが入る? • そういうわけではない
  42. 42. どう変わるのか• ~ Android 4.1  • make HAVE_SELINUX=true  • 使用するにはビルド時にフラグを 指定する必要が
  43. 43. どう変わるのか• Android 4.2 ~  • make  • フラグを指定しなくてもデフォルト でサポートされる
  44. 44. どう変わるのか• あくまでサポートされるだけ • 強制的にSEAndroidが有効にされる わけではない • SEAndroidを有効にしてビルドした カーネルじゃないと使えない
  45. 45. どう変わるのか• SEAndroidが有効なカーネルを使った時 • 設定からSEAndroidの有効・無効を 変更できるように
  46. 46. 実用性(?)• ABC 2012 Spring  • 有効にすると落ちる状態 • 「メインラインで使える頃には 安定しているはず」
  47. 47. Demo
  48. 48. スピード• Quadlant Benchmarkで計測 • Galaxy Nexus (デフォルト) • Galaxy Nexus (SEAndroid Permissive)
  49. 49. スピード Default SEAndroid SEAndroid (6months ago) All 2574 2091 1874 CPU 5561 5525 5374Memory 1804 1716 1584 I/O 3533 1050 998 2D 346 247 190 3D 1526 1917 1224
  50. 50. まとめ• SEAndroidはまだ実機で使える 状態じゃなかった • エミュレーターではある程度の 安定性 • ポリシーと調整次第、とも言える
  51. 51. まとめ• これからSEAndroidの時代がくる? • SEAndroidが搭載された端末が そろそろ出てきてもおかしくない • 現在の市販端末で使用されている LSMより更に強固になることは確か
  52. 52. まとめ• Android 4.xではセキュリティが大変 改善されている • iOSに追いつく日も遠くない(?)

×