今日のアレ


今日のメモはいつもにもましてアレですごめんなさいごめんなさいごめんなさい


...まぁ誰も気づかれてないと思うが。

  • jssecから松並さんをお迎えして...

質問

  • Androidの開発をしたことがあるひと→半分
  • セキュアコーディングの場なのにプログラマがいないところで何度かしゃべったので...
  • おてやわらかに...

もくじ

  • 1. JSSECとセキュアコーディングガイド
  • 2. Androidアプリ脆弱性の事例とガイド
    • みんなうっかりミスをしちゃいますよ、誤解のないように...
  • 3. Androidアプリのセキュリティ
  • 4. ご協力のお願い
    • みなさん協力お願いします。

背景説明

  • JSSEC(ジェーセック)
  • 発足当時はフォーラムという名前だった
  • スマホ周りでセキュリティで儲からないか?という人たちが集まっている
  • 基本ボランティア活動
  • 個人参加する場合はAndroidセキュリティ部に参加すればOKという裏ワザがある
  • 続きはWebで

セキュアコーディングガイド

  • 正式名称「Androidアプリのセキュア設計・セキュアコーディングガイド」
  • Web上などで情報が一箇所にまとまってないのでまとめよう
  • イムリーに公開して間違えていれば教えてもらいタイムリーに更新する
  • PDF・サンプルコード公開中

目指してるもの

  • 開発現場で「使える」ガイド
  • 開発者は勉強会に出れないのでどうにかしたいという思いから...
  • 開発者のやりたいこと視点でまとめよう
  • コピペで使ってください
    • コメントも書いてある
      • 組織の中でコピペするとコメントをコピペされるのでよい
  • 開発現場でセキュリティの勉強してから開発できるような余裕のある人はいない
    • →そのひとのためになりそうなもの

なんてことを目指してます

  • フィードバックをもらって改善していってみんなに使ってもらえるようないいものを目指す

事例とガイド

Androidアプリの脆弱性報告が増加

  • 2012年になって急に増えている
  • OSよりアプリの報告が多い
  • セキュリティの研究をやっているひとが脆弱性を見つけようとし始めているのかな?
  • 脆弱性をみつけて報告したことがあるひといますか? →jpcertの人だけだった

初歩的な不備が多く指摘されている

  • パーミッションの問題など
  • 初歩的な内容か充実させてきた当ガイドがたまたま^h^h^h^h狙い通り受け皿になった
  • 詳しい人には当たり前のことしか書かれておらず物足りないと感じられている

JVN

ほんとあったAndroidアプリの脆弱性

  • ちゃんと対策して安全になったアプリ
  • しつこくいえといわれたのでしつこく言っております...

事例1

  • twitter投稿アプリにおけるアクセス制限不備の脆弱性
  • ネットワークへのアクセス権限を持たないアプリが投稿できてしまう...
  • マルウェアが端末内画像のURLを生成
  • マルウェアがアプリのアップロード機能を呼び出す
  • アプリは指定された画像を送信
  • 原因
    • Activityが他のアプリに公開されていた
    • おそらくActivityはアプリ内部のみで使うはずだったと思われる
    • 公開アクティビティ
  • 対策→非公開に設定すればよい
    • AndroidManifest.xml内で
    • android:exported="false"
    • Androidでは公開・非公開Activityがあることを知っていれば大丈夫なのだろうが...
  • ガイドではどのように書いてあるか?
    • サンプルコードもあるのでコピってください
    • たった一行なのでガイドに目を通せば...

某リアルタイムコミュニケーションアプリにおける暗黙的Intentの扱いに関する脆弱性

  • 修正されました
  • 攻撃シナリオ
    • 1.マルウェアのインストールされている端末でアプリからメッセージを送信
    • 2.送信したメッセージの情報をBroadcastしているためマルウェアはその情報を読むことができる
    • 一斉放送しているようなものなので、マルウェアが同じIntent Filterを設定しれいると取れてしまう
  • 対策
    • 明示的Intentを使う
      • →送り先アプリ・Activityを固定しているもの
    • 暗黙的Intentとは、こんなmime type受け取れるアプリいたらよろしく...みたいなもの
    • 自アプリ内であれば今回は明示的Intentによりあて先クラスを限定すべき
  • セキュアコーディングガイド
  • 非公開の場合には明示的Intentで...

SNSにおける情報管理不備の脆弱性

  • 他のアプリが友達の発言を取れてしまう
    • 1.SNSアプリが友人の発言を取得
    • 2. SNSアプリが友人の発言をSDカードに保存
    • いかしょうりゃく
  • 脆弱性の原因
    • SDカードに友人の発言を保存している
    • SDカードはWorld Readable →無条件に他のアプリが見れる
  • 対策
    • 友人の発言を非公開ファイルに保存する
  • ガイドでは
    • 同一アプリ内でのみ読み書きするファイルはopenFileOutput()でMODE_PRIVATEを指定して作成する
  • AndroidにはファイルやDBへのパスを生成するAPIあるのに...
  • Javaからはいってきたひとがフルパスで指定しちゃっている...
  • セキュリティ上の問題のほかマルチユーザという概念がはいってきているので
  • 破綻する→Android Wayなやりかたでいこう

魔法少女アプリにおける情報漏えいの脆弱性

  • 他のアプリがtwitterのユーザ名パスワードがとられる
  • 残念ながら入手できない
  • 1. LocatにtwitterのID/PWをログ出力する
  • 2. 他のアプリがログからtwitterのID/PWを入手する
  • 3. 他のアプリが攻撃者に送信
  • 4. 攻撃者が盗んだID/PWでログイン
  • これまで話しているのは実際事件として起こってない
  • 対策
    • リリースビルドではデバッグログをLogcatへ出力しない
    • 一番いいのは消すこと...
    • 次の記事ではProGuardで消す運用で...

某オンラインストレージアプリにおけるContentProviderアクセス範囲の脆弱性

  • 攻撃のシナリオ
    • 設定ファイルにオンラインサーバにログインできるID/PWが書いてあった
    • ローカルにあったファイルをそのユーザのpublicフォルダにアップロードさせてしまうことができた
  • 同期を指示する方法をContentProvider経由で他アプリから操作でいる
  • 対策
    • 他アプリから利用すべきでないContentProviderはexported="false"で
  • APIレベルが8以前だと公開されてしまうので注意

個人的感想

  • 知っているか知らないか、差はそれだけってことが多くあるように思います
  • メジャーなアプリであっても、ガイドに書かれているような基本的な事項がもれていることが結構あると思います。
  • まずは基礎固めで目を通してもらいたい...

Androidアプリのセキュリティのとらえ方

セキュリティの考え方

  • 1.資産→守りたいもの
  • 2.対策→守る方法
  • 3.脅威→盗聴とか改ざんとか実際にやること

1.資産

  • システムやアプリにおいて守るべき対象のこと
  • 大きく分けて二つ
    • 情報資産
      • 許可された人やアプリだけが参照変更できる情報
      • 許可されていない人やアプリには参照変更できちゃいけない
    • 機能資産
      • 許可された人・アプリだけが利用できる機能
      • 許可されていない人・アプリが利用できるとまずい機能
    • こういうのに当てはまらなければ守る必要ない
  • 情報資産
    • AndroidのOSが管理
    • アプリが管理
  • アプリ間連系
  • アプリ間通信のためにアプリが他のアプリに提供する機能資産
  • AndroidUnixのパイプみたいに情報をつなげることができる
  • iPhoneにはできない、おもしろところ
  • 誰がアクセスできて誰がアクセスできないといったセキュリティ要件がある

脅威

  • セキュリティ要求に反して資産へのアクセス行為(攻撃行為)を脅威と呼ぶ

ネットワーク上の悪意ある第三者

  • 通信中のデータを盗聴・改竄
  • スマホサーバの・成りすまし

ユーザが導入したマルウェア

  • 中華サイトで有料アプリがタダだったので入れたらマルウェアだった...

脆弱性を攻撃する悪意あるファイル

  • アプリがファイルを開くと攻撃が始まる
  • 受動的攻撃

悪意あるスマホユーザ

  • 特許で縛った秘密のアルゴリズムなどを盗む
  • adbデバッグで解析するなど
  • アプリの中にあるメーカの機密情報を読み出すなど...

スマホの近くにいる悪意ある第三者

アプリはあちこちから狙われる

対策

脅威から資産を守る保護施策をセキュリティ対策という

  • どのようにまもるか
  • どのくらい守るか

どれくらい守るのか

  • Androidアプリには多くの脅威が存在する
  • すべてに対応するのは無理

次の手順が一般的

  • 1.アプリが扱うここの資産を重要度で分類
  • 2.重要度に応じて保護施策のレベルを決定
  • リスクマネジメントなどでよくわいれていること...

各々の資産を重要度で分類


高位→会社が倒産する
中位→会社が赤字転落
低位→天秤にかけて他の要素により利益の補填が可能なレベル

重要度に応じて保護施策を決定

  • 被害が限定的→お金とかで補填できるもの
  • セキュアコーディングガイドは低位〜中位くらいまで...
  • Androidのセキュリティモデルにのっとって...

大切なこと=説明できること

  • 自社で基準を定め運用していること

ご協力のお願い

  • 今後の作業計画
    • 1. 第三版をできるだけ早くリリース
    • WebView、HTTPSの取り扱い
    • 社会的にも意義ある内容だと思われるので、プレスリリースなどをJSSECに派手にやってもらう予定
    • 間に合う記事があれば掲載
    • 2.第二版を多言語へ翻訳
    • 英語、中国語(簡体字繁体字)、韓国語...

作業環境

ボランティア協力して下さる方を探しています

  • 記事を書く、てにをは、作業環境保守、宴会調整など
  • ささやかですが次版にお名前が載ります

ご協力いただける方は以下を...

  • 個人として参加したい方はAndroidセキュリティ部経由で...

質問

  • 明示的なIntentと暗黙的なIntentの例を紹介してもらったと思うのですが
  • 複数アプリを自分で選択できるようになっているのでは?
    • →Activityの場合はそう
    • Serviceだと登録順とかで
  • 海外翻訳の話もあったのですがこのような知見をAndroid本体にフィードバックしていくという話はないのですが?
    • たとえばActivityはexported="false"にするとか
      • →英語翻訳するのが難しい、Googleに連絡するのが敷居が高いのでIPA経由で報告
    • Googleに直接やり取りはこれから...
      • いけてないところとか働きかけていけたらいいなぁ...
  • 同じことをiPhoneでやるとどうなるのかな?
    • iosどうすんの?って言われるけど書ける人がいない
    • 詳しくなるとAppleとのNDA縛りがあって何もいえない
    • マルウェアが入る余地がAndroidに比べると少ない...と思ってるけど根拠はない
    • 但し設計次第で脆弱性は発生するのでは?
  • ボランティアって自分の責任になるのでは?
    • →間に合わなければ乗せない、できたら乗せる
    • われわれも一緒に議論していくので...