androidセキュリティの今・昔 - jssec2017/02/08 · 1 androidセキュリティの今・昔...
TRANSCRIPT
1
Androidセキュリティの今・昔
2017/2/28(水) JSSECセキュリティフォーラム2017
ベルサール神田2階 イベントフォール
15:00~15:45 T3<技術部セッション3>タオソフトウェア株式会社
代表取締役
谷口岳
@tao_gaku
©Taosoftware, inc. All rights reserved. 2
タオソフトウェア株式会社
代表取締役 谷口岳
2005年創業、Android関連システム受託開発
Google Playにアプリを多数公開
ブログにて開発者向け情報を発信(昔)
雑誌執筆、講演
セキュリティ色々
自己紹介
©Taosoftware, inc. All rights reserved. 3
自己紹介
タオバイザー3DVRゴーグル
• クラウドファンディングで資金調達
• http://taovisor.com
©Taosoftware, inc. All rights reserved. 4
2012年1月1日発刊
開発者向け
出版社:インプレスジャパン
Android Security 安全なアプリケーションを作成するために
©Taosoftware, inc. All rights reserved. 5
RiskFinder アンドロイドアプリの脆弱性発見ツール
APKファイルをアップロードするだけで脆弱性レポートが作成されます。
1. プログラマでなくても使える2. ソースコード不要3. ウエブサービス型4. 脆弱性以外も検出
講演をする中で、「気を付ける事が沢山あるのは分かった。でも全てのプログラマが理解するのは
難しい何かいい方法はないか?」という声があったので作ってみました。
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
アンドロイドセキュリティの
今・昔
©Taosoftware, inc. All rights reserved. 7
Androidアプリは、セキュリティ的に問題が多いと言わ
れ2012年にはIPAテクニカルウオッチ「Androidアプ
リの脆弱性」に関するレポートが公開されました。
Androidは毎年バージョンアップされ、色々な問題が解
決されてきました。Androidアプリが陥りやすかった過
去の問題は最新のOSではどのようになっているのか、
どのように解決されているかを解説し、また小粒な新
しいセキュリティに関する機能に関してもご説明致し
ます。
Androidセキュリティの 今・昔
©Taosoftware, inc. All rights reserved. 8
「Androidアプリの脆弱性」
IPAテクニカルウオッチ
IPAテクニカルウオッチ「Androidアプリの脆弱性」
https://www.ipa.go.jp/about/technicalwatch/20120613.html
2012年6月13日
IPAに届け出られるAndroidアプリの脆
弱性関連情報が2011年後半から増加し
ていることを踏まえ、それらを分析して
脆弱性を作り込みやすいポイントをまと
め、技術レポート「IPAテクニカル
ウォッチ」として公開しました。
20ページと少ないが重要な事項を抽出
している。
©Taosoftware, inc. All rights reserved. 9
2012/1/1
Android Security安全なアプリケーションを作成するために発刊(タオソ
フトウェア)
2012/6/1
Androidアプリのセキュア設計・セキュアコーディングガイド(JSSEC)
2012/6/13
IPAテクニカルウオッチ
2015/5/25
IPA Androidアプリの脆弱性の学習・点検ツールAnCoLe
https://www.ipa.go.jp/security/vuln/ancole/
2017/2/8
今日
2012年~
©Taosoftware, inc. All rights reserved. 10
2011年02月 Android3.0端末リリース
2011年11月 Android 4.0端末リリース
2012年07月 Android 4.1端末リリース
….
2016年10月 Android 7.0端末リリース
現在 Android 7.1.1
アンドロイドは大きく変化
11©Taosoftware, inc. All rights reserved.
IPAテクニカルウオッチの
振り返り
©Taosoftware, inc. All rights reserved. 12
簡易チェックリスト
©Taosoftware, inc. All rights reserved. 13
1.ファイルのアクセス制限
SDカードに機微な情報を保存しない
必要に応じて、SDカードに保存するデータを暗号化する
ファイル作成時に、ファイルのアクセス許可を適切に設定する。
2.コンポーネントのアクセス制限
アクティビティやサービスに対してアクセス制限をかける
コンテントプロパイダに適切なアクセス制限をかける
3.ログ出力の内容
デバックログに機微な情報を含めない
インテントを送信する際のパラメータに機微な情報を含めない
4.アプリの権限
必要以上に権限を要求しない
簡易チェックリスト
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
1.ファイルのアクセス制限
©Taosoftware, inc. All rights reserved. 15
要求と問題点
連携するアプリとデータのやり取りがしたい
他のアプリから参照可能になる
良くわからないのでソースコードをコピペ
そのまま動いてしまうので脆弱性となる
サイズの大きなファイルをSDカードに置きたい。
他のアプリから参照可能になる
端末の写真データをアプリで使いたい。
外部ストレージ全アクセス権限が必要で怪しくなる
ファイルのアクセス制限
©Taosoftware, inc. All rights reserved. 16
ファイルでのデータ連携は禁止
Android OS 4.2 (API level 17)
openFileOutput(),getSharedpreferences()等のファイ
ル作成メソッド引数変更
MODE_WORLD_WRITEABLE,
MODE_WORLD_READABLE 非推奨
SharedPreference Class
名前はShareだけどShare機能はなくなった。
連携するアプリとのデータのやり取り1
©Taosoftware, inc. All rights reserved. 17
Android 7.0 (API level 24)
MODE_WORLD系使用時は、SecurityExceptionとなる。
ファイルでは、データの連携できなくなった。
ContentProvider,FileProviderを利用するというルール
連携するアプリとのデータのやり取り2
©Taosoftware, inc. All rights reserved. 18
ディレクトリ移動も制限
従来
パッケージディレクトリのアクセス許可:
751
所有ユーザ:rwx、所属グループ:r-x、その他のユーザ:--x
Android 7.0(API Level 24)
パッケージディレクトリのアクセス許可
700
所有ユーザ:rwx、所属グループ:---、その他のユーザ:---
連携するアプリとのデータのやり取り3
©Taosoftware, inc. All rights reserved. 19
WRITE_EXTERNAL_STRAGEの問題
Android 1.5(API Level 3)
アプリから外部ストレージアクセスし放題
ユーザの写真、データが改変、読み取り可能
Android 1.6(API Level 4)
WRITE_EXTERNAL_STARAGE追加、この権限がないと外部スト
レージに書き込みできない。
読み込みは権限関係なく可能→ユーザの写真が自由に読み取り可能
Android 4.1(API Level 16)
READ_EXTERNAL_STRAGE仮追加
多くのアプリがWRITE_EXTERNAL_STRAGEを持つよう
になり意味がなくなってきた
外部ストレージの仕様変更
©Taosoftware, inc. All rights reserved. 20
アプリ専用外部ストレージエリア導入(権限なく特定の領域は外
部ストレージアクセス可能)
Android 4.4(API Level 19)
ExternalAppDirに書き込みを行う際、WRITE権限が不要。
例) storage/sdcard0/Android/data/com.example/files
キャッシュや巨大なデータを保存するのにWRITE権限は必要ではなくなっ
た。
READ_EXTERNAL_STRAGE追加、この権限がないと外部スト
レージの読み込みはできない(WRITEがあればできる)
写真にアクセスしたいだけなのに、
WRIE_EXTERNAL_STRAGEが必要な問題はそのまま
サイズの大きなファイルをSDカードにおきたい
©Taosoftware, inc. All rights reserved. 21
Android7.0(API Level 24)
Scoped Directory Access
従来のパーミッションモデルとは異なるが、実行時にユーザに特定
のディレクトリにアクセスしても良いか問い合わせる仕組み
写真データに怪しまれずにアクセスしたい
タイプ 説明
DIRECTORY_MUSIC 一般的な音楽ファイルの標準ディレクトリ
DIRECTORY_PODCASTS ポッドキャストの標準ディレクトリ
DIRECTORY_RINGTONES 着信音の標準ディレクトリ
DIRECTORY_ALARMS アラーム音の標準ディレクトリ
DIRECTORY_NOTIFICATIONS 通知音の標準ディレクトリ
DIRECTORY_PICTURES 画像ファイルの標準ディレクトリ
DIRECTORY_MOVIES 動画ファイルの標準ディレクトリ
DIRECTORY_DOWNLOADS ユーザがダウンロードしたファイルの標準ディレクトリ
DIRECTORY_DCIM カメラによる画像・動画ファイルの標準ディレクトリ
DIRECTORY_DOCUMENTS ユーザによって作られたドキュメントの標準ディレクトリ
©Taosoftware, inc. All rights reserved. 22
外部ストレージの問題は、ほぼ終了
Android 7.0でWRITE_EXTERNAL_STRAGEを利
用する必要は殆どなくなった。
2年ほどすれば、WRITE_EXTERNAL_STRAGEを
持っているアプリは怪しいと言える環境が出来上がる
はず。
外部ストレージ問題
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
2.コンポーネントのアクセス
制限
©Taosoftware, inc. All rights reserved. 24
問題点
アクティビティやサービスを他のアプリからアクセス可能に
なることを知らずに、アクセス可能な実装してしまう。
コンテントプロパイダーを他のアプリからアクセス可能な実
装してしまう。
コンポーネントのアクセス制限
©Taosoftware, inc. All rights reserved. 25
Acrivityに関するAndroidの仕様変更は特になし。
基本export=false
アクティビティ
©Taosoftware, inc. All rights reserved. 26
明示的Intentを使うルール変更
Android 5.0 (API level 21)
Serviceの仕様を変更
startService
intent-filterは利用しない事を推奨
bindService
Bindサービス時ににIntent-Filterを使用すると、
IllegalArgumentExceptionが発生
サービス
©Taosoftware, inc. All rights reserved. 27
外部連携のためではなく、自アプリのデータベースへ
のアクセス手法として実装する例が多い。
デフォルトがtrueになっていたので多くのアプリが
ContentProvider公開設定になっていた。
Android 4.2 (API Level 17)
exportのデフォルトがtrueからfalseに変更
コンテントプロパイダーのアクセス
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
3.ログ出力の内容
©Taosoftware, inc. All rights reserved. 29
• デバッグログをそのままにしてしまう問題
• インテント内容がデバッグログに出力される問題
Android4.1 (API Level 16)
自分自身のログのみ参照可能に仕様変更
システムログ、他アプリのログが参照不可能になった
ログの出力
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
4.アプリの権限
©Taosoftware, inc. All rights reserved. 31
必要以上に権限を要求しない
何も考えずにアプリの権限をどんどん付けてしまう。
Android 6.0 (API Level 23)
Runtime Permission
インストール時ではなく、実行時に権限を確認するため、不
必要な権限は使用されない。
権限取得ダイアログを実装する必要があるため、権限取得に
慎重になる。
アプリの権限
32©Taosoftware, inc. All rights reserved.
まとめ
©Taosoftware, inc. All rights reserved. 33
ファイルのアクセス制限
SDカードに機微な情報を保存しない
必要に応じて、SDカードに保存するデータを暗号化する
ファイル作成時に、ファイルのアクセス許可を適切に設定する。
コンポーネントのアクセス制限
アクティビティやサービスに対してアクセス制限をかける
コンテントプロパイダに適切なアクセス制限をかける
ログ出力の内容
デバックログに機微な情報を含めない
インテントを送信する際のパラメータに機微な情報を含めない
アプリの権限
必要以上に権限を要求しない
簡易チェックリスト
注意
OK
OK
OK
OK
OK
注意
OK
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
最近のちょっとした機能
©Taosoftware, inc. All rights reserved. 35
SafetyNet Attestation
システムがRoot化されている、システム自体が改変されて
ているかをチェックする機能
Google Play Serviceにて提供
Googleのサーバと通信してチェックを行う
https://developer.android.com/training/safetynet
/index.html
Root化チェック
©Taosoftware, inc. All rights reserved. 36
SafetyNet SafeBrowsing
Googleが常に更新している安全でないウエブサイトのリス
トに対して、URLを渡し確認できる機能
フィッシング詐欺サイト
マルウェアサイト
不要なソフトをホストするサイト
Google Play Serviceにて提供
Googleのサーバと通信してチェックを行う
https://developer.android.com/training/safebrows
ing/index.html
安全でないURLチェック
©Taosoftware, inc. All rights reserved.©Taosoftware, inc. All rights reserved.
タオソフトウェア株式会社 谷口岳
ありがとうございました。