検証、seandroid
DESCRIPTION
Android Bazaar and Conference 2012 Springでのスライドです。TRANSCRIPT
検証、SEAndroidAndroidセキュリティ部 矢倉大夢
まず自己紹介
• 矢倉大夢 (@hiromu1996)
• 中学3年生
• 灘校パソコン研究部 部長
最近の活動
• OSS奨励賞を受賞しました
• 「カーネル開発者視点での成果発表」
• Androidセキュリティ部での成果発表
いままで
• 「キャリアはさっさとアップデートかけてほしい」
• 「脆弱性が見つかったらすぐアップデート」
今回は
• 脆弱性が見つかってroot奪取されても安全なしくみを
• SEAndroidは権限昇格に対して有効か?
SEAndroidとは
• Security Enhanced Android
• 2012年1月にリリース
• SELinuxのAndroidバージョン
SELinuxとは
• Security Enhanced Linux
• National Security Agencyが作成
• 代表的なLinux Security Module
SELinuxの基本
• よくある「SELinuxは無効にしておきましょう」
• SELinuxはサーバー構築の邪魔をするために入っているのではない
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 ..
SELinuxの基本• カーネルに組み込まれている
• root権限に対して制御可能
• 他のプロセスへの干渉を止められる
• 別プロセスの脆弱性が使用しにくい
できること
• アプリによる権限昇格、データ漏洩の防止
• データの強制アクセス制御による保護
SEAndroidの実装• カーネルレイヤー
• yaffs2へのラベルシステムの追加
• IPCシステムへのパーミッションチェックの追加
SEAndroidの実装
• ユーザーランド
• chcon, restoreconなどのコマンド類
• ndkによるSELinuxのAPI実装
SEAndroidを検証
• とりあえずGalaxy Nexusで動かしてみた
• http://selinuxproject.org/page/SEAndroid
• Wikiにある通りにビルドすると動く
SEAndroidを検証• まず、ソースコードをダウンロード
• AOSPのソース + SEAndroidのソース
• SEAndoidのリポジトリ情報をrepo以下に保存する
SEAndroidを検証
• プロプライエタリなファイルを抽出
• device/samsung/maguro/extract-files.sh
• 実機からadbで転送
SEAndroidを検証• カーネルをビルド
• kernel/samsung/omap
• make tuna_defconfig
• make menuconfigでSEAndroidが有効になっているか確認
SEAndroidを検証
• ICSのビルドを開始
• make HAVE_SELINUX=true
• 一晩放置
SEAndroidを検証• 端末に書き込み
• out/target/product/maguro以下
• fastbootでboot.img system.img
userdata.imgを書き込み
速度• 全く気にならない
• Quadrant Benchmark: 1930
• Galaxy Nexusの平均が2000程度
• I/Oが少し遅い
root奪取• CVE-2009-2692を再現
• asrootというexploitでroot奪取は確認
• SetupSUというroot奪取ツールで実験
• SEAndroidはEnforcing状態
root奪取
• /system/bin以下はどのユーザーも書き込みができないようになっている
• suやbusyboxは当然書き込めない
root奪取• GingerBreakに対しても有効
• そもそも/system/bin/voldに対してアプリからアクセスできない
• voldにexploitを仕掛けることが不可能
SEAndroidの利点• root奪取されても問題ない
• suなどをインストールできない
• 他のアプリケーションに干渉できない
SEAndroidの利点• そもそもAndroidの脆弱性が利用しにくい
• root権限で動いているプロセスにexploitを仕掛けることができない
• 脆弱性があってもroot権限を奪取できない
結論• SEAndroidは堅牢なAndroidシステムを作る上で有効
• ただしコンテキストをきちんと設定しておく必要はある
• 独自LSMを作成したりするよりは、過去の運用ノウハウを使える分いいかも
結論• まだ実用レベルではない
• SELinux JNI APIは実装途中
• Zygote(Dalvik VMの管理プロセス)がSEAndroidのコンテキストを読みにいってSEGVする
結論
• デフォルトのコンテキストを使うだけでもかなり堅牢にはなる
• AOSPのMain StreamにMergeされてから使うくらいがいいかもしれない
ご清聴ありがとうございました