守る技術
モバイル端末の様々なセキュリティ機構がどのような仕組みなのか知ってほしい
日本の端末独自の取り組み
今後のモバイルセキュリティの向上のための提案をできたらいいね

攻める技術
jailbreakやアプリの脆弱性がどのようなものか知ってほしい
ブラックボックスとなっている危機のセキュリティ機構をry

Jailbreakとは
セキュリティ機構をすべて突破すること
端末の機能を完全にコントロールできる状態
端末のbootloaderやkernelも書き換えられる
やろうと思えばOSをまるごと入れ替えることも可能

Jailbreakのメリットや目的
端末自由にカスタマイズ
いらないアプリの削除 無効化
広告の排除など
端末やアプリのより詳しい調査
技術的な挑戦

Jailbreakの注意点
利用規約違反 
電波法違反(ファームウェアの書き換え,モデル側の操作)
偽ソフトウェアの存在
Jailbreakによるリスク(sshなどのサービスのパスワードをデフォルトのまま運用 Jailbreak用ソフトにマルウェアが混入 Jailbreakの失敗による故障など)

Jailbreakの脆弱性を見つけるには?
高度なスキル
Exploitコード作成スキル
1から解析するリバース・エンジニアリングスキル
kernelExploitを含めて複数見つける必要がある

特にiOSは難しい
実行ファイルは全部バイナリ(逆コンパイルできない)
ブラックボックスなシステム

Androidなら
AOSPのリポジトリをおっかける
こっそりバグシュウセイされている場合もある
過去の脆弱性を理解する
Linux自身の脆弱性も使える
Chipsetベンダーのドライバの脆弱性もリポジトリで追う

Jailbreakの脆弱性を見つけるには?
あやしい動作を見つけておく
クラッシュ野菜起動する→その時のクラッシュログを取得しておくなど

Jailbreakの難しいところ
Sandboxの回避など

Jailbreak用の脆弱性は2種類ある
・一般アプリから利用できる脆弱性
     ・一般的な脆弱性としての評価は高い ブラウザの脆弱性など
・端末の所持者自身にしか利用できない脆弱性
・ユーザの操作が必要
     ・アックアップ用の処理
     ・端末のロックを解除しないと使えない
     ・Androidのshellからなど
他人が悪用することは難しい

ASLRとDEP
バッファオーバーフローなどから防御できる技術
Android
     ASLRとDEPどちらも有効
     ただしアプリは全部同じアドレスを使う(アプリは実質ASLR無効)

Sandbox
想定された動作のみ許可
他のアプリやOSのデータの干渉を防ぎ保護する
systemを乗っ取られてもrootは守る
rootを取られてもkernelは守る

Sandboxで制限されること
アプリ管理外のリソースへのアクセス
システムデータの書き換え
デバイスドライバにアクセスできず,kernelExploitにry

Capability
特権を分割し,個別に設定できる
Linuxのセキュリティ機構
rootから特権を剥奪 一般ユーザ継承させるに特権を選べる

SELinux ユーザに機能を制限させる!?
一般アプリは制限が厳しい
Shellユーザへの制限もある?
jailbreakの際にはこれらの抜け道を探す必要がある


iOSのサンドボックス
一般のアプリはサンドボックスが有効になる
プリインストール済のアプリは異なる制限で動作する

基本的にアプリは以下以外にはアクセスできない

uidはmobileとrootのみ
通常のプログラムはmobileで動作

コード署名がないとプログラムが動かない
Appleが認めたアプリしか動作しない

端末の脆弱性の問題点 
脆弱性が見つかっても脆弱性修正までの期間が長い
古い端末だとパッチが提供されていない場合もある
端末の管理者権限がないため自分で修正も出来ない(修正するにはjailbreakが必要)

アプリの脆弱性の起こりやすい所
アプリの脆弱性はアプリ間連携で起こる事がおおい
(カスタムURLスキームetc)

カスタムURLスキーム:ブラウザで開くとアプリが起動する
アプリでバリデーションが不足していると脆弱性になる
iOS,Android両方の機能

SSL証明書の検証不備
かなりよくある脆弱性
検証を行うのは2点
     証明書チェーンの検証
     ホスト名の検証


開発者側としてセキュリティに考慮しながら書く場合,
この機能をつけることでどういう理由で何が有効になるのか
というのを明確にしたほうがよい
また,どういうセキュリティモデルであるか,ということを自分自身で明確化する必要がある.