dimeizaのブログ

興味のある技術(IoT/VR/Smart Speaker)とか、資格試験の話とか、日常で出会ったTechな話について書いています。

Developer's Summit 2016 【18-E-2】Android6.0 対応! モバイルアプリセキュリティの最新トレンド 聴講メモ

講演資料

http://www.slideshare.net/devsumi/18e2android60

概要

 Androidアプリの脆弱性の現状を示した後、最近改版されたJSSECのセキュアコーディングガイドに基づき、6.0で特に留意すべきセキュリティ対策について説明する。

スピーカー

ソニー(SDNA)の奥山さん。

詳細

所属している会社

最新Androidの事情

  • 突然だが、Androidアプリは安全だと思うか? と会場に質問。
    • 大半の人間が挙手しない。参加者は安全だと思っていない。
    • 認識のとおりである。
    • 2015年、Google Play上のAndroidアプリについて、脆弱性の実態調査を行った。
      • カテゴリダウンロード上位500、かつ1000ダウンロード以上。11,686件。
      • 結果、93%に脆弱性リスク。
        • ちなみに2013年の調査結果は96%。微減。

アクセス制御リスク

  • 脆弱性の中で、アクセス制御リスクは88%から59%に減少。

    • 対策方法が簡単で効果があったとみられる。
  • アクセス制御リスクの実例。

    • 勝手にツイートされるTwitterクライアント(非公式)
      • 悪いアプリからの要求を受けて、ノーチェックで勝手にツイートしてしまう。
      • これはアクセス制御の問題。
      • 画像アップロード用Activityが外部から呼べる状態だった。

HTTPS通信

  • HTTPS通信の利用は72%から88%に増加。

    • HTTPSの利用はGoogleTwitterも呼びかけている。
    • 良い傾向なのだが‥。
    • 実はHTTPS実装に起因する脆弱性が39%から43%に。悪化している。
  • HTTPS通信脆弱性の一例。

    • 通信内容を盗み見られるECアプリ。
      • ログインID、パスワード、クレジットカード番号を傍受可能。
      • 野良Wifiで攻撃者のPCを経由することで、Man in the middle攻撃が可能。
      • Man in the middleはサーバ認証を行っていれば回避できる。
      • が、サーバ証明書の検証結果を無視し、エラーが出ているのに通信を継続してしまっていた。

暗号

  • 強度が弱い暗号技術(MD5,DES)が利用されている割合が62%と高い。

Mode World

  • ファイル保存時の生成モード。
    • MODE_WORLD_READABLE/MODE_WORLD_WRITABLEを使っているアプリが22%ある1

ダウンロード数と脆弱性の関係

  • ダウンロード数5000万ぐらいが脆弱性発見数のピーク。
  • そこからダウンロード数が増えると脆弱性が減少傾向になる。
    • ダウンロード数が多くなるとお金が取れるようになるので、対策をしっかりしてきているのかもしれない。
    • ちなみに2013年にはなかった傾向。

セキュアな開発をするには

  • JSSEC(Japan Smartphone Security Association)のセキュアコーディングガイドを参照。
    • JSSECはスマートフォンのセキュリティを推進する組織。
    • 総務省も紹介するような基準。
    • セキュリティを意識している会社は結構使っている。
      • 三大キャリアとか、キャリアに関連する会社とか。
    • デファクトスタンダードと言って良い。
    • 2012年に初版を発行。
    • 以降、半年~1年程度で改定している。
    • 第6版が2/3に公開された。

セキュアコーディングガイド第6版で追加された内容

  • 3つの内容について解説する。

1. 6.0のパーミッションモデル変更に対応

  • 6.0では、インストール時にパーミッションを与えるのではなく、実行時に許可するようになった。
    • 実行する必要が発生した場合にユーザ許諾を求める。
    • iPhoneに合わせているらしい。
    • パーミッションはある程度グループ化されており、グループ単位で権限を管理する。
    • ユーザによる許可の取り消しもあり得る。
      • つまり、許可を得ていない段階でも動かなければならないケースが出てきた。
    • アプリ開発者が明示的にAPIを呼ばなければならない。
      • iphoneは自動的にOSが許可を求める仕組みなので、開発者は意識しなくて良いが、
      • Androidでは明示的にAPIを呼ぶ必要があり、後方互換性に影響を与える。
      • コールバック関数で結果を受け取り、許可の可否によって動きを変える必要がある。

2. 指紋認証アプリ

  • Nexus5x/Nexus6Pでは、指紋認証機能がサポートされた。
    • デフォルトではロック解除に使用しているが、個々のアプリで様々な用途で使える。
      • 端末ユーザ認証による実行制御に用いる。
      • 楽天銀行とかでも使っている。
    • 指紋認証のセキュリティ強度はパスワードより弱い場所もある。
      • 秘匿困難性、非交換性、認証精度などを理解して使用する必要がある。
      • 指紋認証の弱点を理解して使う必要がある。
      • 指紋認証だけに頼らないこと。
        • 楽天銀行では指紋認証はオプション、ログインだけしかできない。
        • その他の処理はパスワードを使っている。
      • また、機密性の高い情報は扱わないほうがいい。
    • Android FingerPrint Architectgure
      • アーキテクチャを見ると、最終的にFingerPrintは暗号鍵として扱われている。
      • 暗号処理と密接に関連しているので、暗号の使い方を理解して使うこと。

3. Lまでの新規事項に対応

  • Notification Visivirity
    • ロック画面中の通知表示のこと。
    • 表示可否を3段階で制御している。
      • Secret(ロック画面には何も表示しない)
      • Private(アイコンなどの基本的な情報を表示。デフォルト)
      • Public(すべての内容を表示)
    • Privateだけ、ロック画面に表示する情報と、非表示の情報の両方を有している。
      • 実装を誤ると、ロック中にプライベート情報を表示してしまう可能性がある。
      • デフォルトなので特に注意が必要。
    • 実装時には、Visivilityと通知内容の確認をすべし。
      • ロック中の表示情報とロック解除後の情報の内容を正しく切り分けること。

  1. 他のアプリからも読み書きができるファイルを作成するためのモード。既に非推奨とされている。