検証、seandroid

29
検証、SEAndroid Androidセキュリティ部 矢倉大夢

Upload: hiromu-yakura

Post on 02-Jul-2015

11.326 views

Category:

Technology


0 download

DESCRIPTION

Android Bazaar and Conference 2012 Springでのスライドです。

TRANSCRIPT

Page 1: 検証、SEAndroid

検証、SEAndroidAndroidセキュリティ部 矢倉大夢

Page 2: 検証、SEAndroid

まず自己紹介

• 矢倉大夢 (@hiromu1996)

• 中学3年生

• 灘校パソコン研究部 部長

Page 3: 検証、SEAndroid

最近の活動

• OSS奨励賞を受賞しました

• 「カーネル開発者視点での成果発表」

• Androidセキュリティ部での成果発表

Page 4: 検証、SEAndroid

いままで

• 「キャリアはさっさとアップデートかけてほしい」

• 「脆弱性が見つかったらすぐアップデート」

Page 5: 検証、SEAndroid

今回は

• 脆弱性が見つかってroot奪取されても安全なしくみを

• SEAndroidは権限昇格に対して有効か?

Page 6: 検証、SEAndroid

SEAndroidとは

• Security Enhanced Android 

• 2012年1月にリリース

• SELinuxのAndroidバージョン

Page 7: 検証、SEAndroid

SELinuxとは

• Security Enhanced Linux 

• National Security Agencyが作成

• 代表的なLinux Security Module

Page 8: 検証、SEAndroid

SELinuxの基本

• よくある「SELinuxは無効にしておきましょう」

• SELinuxはサーバー構築の邪魔をするために入っているのではない

Page 9: 検証、SEAndroid

SELinuxの基本

• 従来のアクセス制御

• パーミッションとオーナーで制御

• SELinuxによる強制アクセス制御

• もっと詳細なラベルで制御

$ ls -alZdrwx------ hiromu hiromu user_u:object_r:user_home_dir_t .drwxr-xr-x root root system_u:object_r:home_root_t ..

Page 10: 検証、SEAndroid

SELinuxの基本• カーネルに組み込まれている

• root権限に対して制御可能

• 他のプロセスへの干渉を止められる

• 別プロセスの脆弱性が使用しにくい

Page 11: 検証、SEAndroid

できること

• アプリによる権限昇格、データ漏洩の防止

• データの強制アクセス制御による保護

Page 12: 検証、SEAndroid

SEAndroidの実装• カーネルレイヤー

• yaffs2へのラベルシステムの追加

• IPCシステムへのパーミッションチェックの追加

Page 13: 検証、SEAndroid

SEAndroidの実装

• ユーザーランド

• chcon, restoreconなどのコマンド類

• ndkによるSELinuxのAPI実装

Page 14: 検証、SEAndroid

SEAndroidを検証

• とりあえずGalaxy Nexusで動かしてみた

• http://selinuxproject.org/page/SEAndroid 

• Wikiにある通りにビルドすると動く

Page 15: 検証、SEAndroid

SEAndroidを検証• まず、ソースコードをダウンロード

• AOSPのソース + SEAndroidのソース

• SEAndoidのリポジトリ情報をrepo以下に保存する

Page 16: 検証、SEAndroid

SEAndroidを検証

• プロプライエタリなファイルを抽出

• device/samsung/maguro/extract-files.sh 

• 実機からadbで転送

Page 17: 検証、SEAndroid

SEAndroidを検証• カーネルをビルド

• kernel/samsung/omap 

• make tuna_defconfig 

• make menuconfigでSEAndroidが有効になっているか確認

Page 18: 検証、SEAndroid

SEAndroidを検証

• ICSのビルドを開始

• make HAVE_SELINUX=true 

• 一晩放置

Page 19: 検証、SEAndroid

SEAndroidを検証• 端末に書き込み

• out/target/product/maguro以下

• fastbootでboot.img system.img

userdata.imgを書き込み

Page 20: 検証、SEAndroid

速度• 全く気にならない

• Quadrant Benchmark: 1930 

• Galaxy Nexusの平均が2000程度

• I/Oが少し遅い

Page 21: 検証、SEAndroid

root奪取• CVE-2009-2692を再現

• asrootというexploitでroot奪取は確認

• SetupSUというroot奪取ツールで実験

• SEAndroidはEnforcing状態

Page 22: 検証、SEAndroid

root奪取

• /system/bin以下はどのユーザーも書き込みができないようになっている

• suやbusyboxは当然書き込めない

Page 23: 検証、SEAndroid

root奪取• GingerBreakに対しても有効

• そもそも/system/bin/voldに対してアプリからアクセスできない

• voldにexploitを仕掛けることが不可能

Page 24: 検証、SEAndroid

SEAndroidの利点• root奪取されても問題ない

• suなどをインストールできない

• 他のアプリケーションに干渉できない

Page 25: 検証、SEAndroid

SEAndroidの利点• そもそもAndroidの脆弱性が利用しにくい

• root権限で動いているプロセスにexploitを仕掛けることができない

• 脆弱性があってもroot権限を奪取できない

Page 26: 検証、SEAndroid

結論• SEAndroidは堅牢なAndroidシステムを作る上で有効

• ただしコンテキストをきちんと設定しておく必要はある

• 独自LSMを作成したりするよりは、過去の運用ノウハウを使える分いいかも

Page 27: 検証、SEAndroid

結論• まだ実用レベルではない

• SELinux JNI APIは実装途中

• Zygote(Dalvik VMの管理プロセス)がSEAndroidのコンテキストを読みにいってSEGVする

Page 28: 検証、SEAndroid

結論

• デフォルトのコンテキストを使うだけでもかなり堅牢にはなる

• AOSPのMain StreamにMergeされてから使うくらいがいいかもしれない

Page 29: 検証、SEAndroid

ご清聴ありがとうございました