守る技術 モバイル端末の様々なセキュリティ機構がどのような仕組みなのか知ってほしい 日本の端末独自の取り組み 今後のモバイルセキュリティの向上のための提案をできたらいいね 攻める技術 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点 証明書チェーンの検証 ホスト名の検証 開発者側としてセキュリティに考慮しながら書く場合, この機能をつけることでどういう理由で何が有効になるのか というのを明確にしたほうがよい また,どういうセキュリティモデルであるか,ということを自分自身で明確化する必要がある.