Agenda Android アプリへのコード署名の仕組み Android アプリへのコード署名付与の現状 弱い署名が施される原因調査 あるべき姿の考察 1

Similar documents
<4D F736F F D F81798E518D6C8E9197BF33817A88C38D868B5A8F70834B D31292E646F63>

HULFT Series 製品における Javaの脆弱性(CVE )に対する報告

DigiCert EV コード署名証明書 Javaコード 署名手順書

自宅でJava言語の開発環境を作る方法

Juniper Networks Corporate PowerPoint Template

MP:eMeeting インストールマニュアル Version /06/30 株式会社デジタル ウント メア

JAVA.jar 形式編 改版履歴 版数日付内容担当 V /4/1 初版 NII V /2/28 JKSコマンドの修正 署名確認作業の補足追加 NII V /2/26 キーストアファイルの形式を JKS から PKCS12 に変更 動作環境の変更に伴う

Agenda 1. 今回のバージョンアップについて a. バージョンアップ概要 b. バージョンアップ目的 c. 新バージョンのシステム要件に関する注意事項 d. 現行バージョンのサポート期間 2. 対応プラットフォームの追加 3. 新機能の追加および機能強化 2

安全な Web サイトの作り方 7 版 と Android アプリの脆弱性対策 独立行政法人情報処理推進機構 (IPA) 技術本部セキュリティセンター Copyright 2015 独立行政法人情報処理推進機構

Mobile Access簡易設定ガイド

Net'Attest EPS設定例

Office365 AL-Mail

MAPインストーラー起動時のエラーメッセージへの対処方法

DigiCert EV コード署名証明書 Microsoft Authenticode署名手順書

Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using con

2 目次 1. 前提 : 従来版とストア版について 2. 方針変更の背景 3. Android エージェントの方針変更内容 4. 方針変更に伴う影響 5. 方針変更に伴う一部マニュアルの廃止 追加 6. Appendix:Android Enterpriseとは

全てのパートナー様に該当する可能性のある 重要なお知らせです 2015 年 8 月 28 日 パートナー各位 合同会社シマンテック ウェブサイトセキュリティ SSL サーバ証明書における階層構造オプションの追加 および DNS Certification Authority Authorizatio

PKI(Public Key Infrastructure: 公開鍵暗号基盤 ) の活用 1 認証局ソフトウェアで証明書を発行する認証局ソフトウェア (Easy Cert) で認証局を構築する手順を示す この Easy Cert は名古屋工業大学電気情報工学科の岩田研究室で開発された暗号ライブラリを

ISE の BYOD に使用する Windows サーバ AD 2012 の SCEP RA 証明書を更新する

V-Client for Mac ユーザーズガイド

ch2_android_2pri.indd

YCU メール多要素認証の設定方法 ( 学生向け推奨マニュアル ) 2019 年 3 月 横浜市立大学 ICT 推進課 1

[Unifinity]運用マニュアル

Windows MAC OS 用 VPN クライアントソフトバージョンによる仕様差異

KDDI ペーパーレスFAXサービス

手順例_Swivel_SSL証明書

FIDO技術のさらなる広がり

京都大学認証基盤ドライバソフト 導入手順書 (WindowsVista ~ Windows10 版 ) 京都大学情報環境機構 第 1 版第 2 版第 3 版 2015 年 3 月 27 日 2015 年 6 月 17 日 2015 年 12 月 9 日

CUCM と VCS 間のセキュア SIP トランクの設定例

Microsoft PowerPoint - Android+TPMによるセキュアブート_KDDI研_後日配布用

Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し An

1. PKI (EDB/PKI) (Single Sign On; SSO) (PKI) ( ) Private PKI, Free Software ITRC 20th Meeting (Oct. 5, 2006) T. The University of Tokush

PowerPoint プレゼンテーション

PowerPoint Presentation

PowerPoint Presentation

目次 管理 PCの設定パソコンURLにアクセスする 3 グループ設定をする 4 ステータス設定をする 5 端末の設定提供元不明のアプリにチェックを れる 7 位置情報サービスをオンにする 7 提供元不明のアプリにチェックを れる (OS8.0 以降 ) 8 9 位置情報サービスをオンにする (OS8

西川町広報誌NETWORKにしかわ2011年1月号

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

共有フォルダ接続手順 1 共有フォルダ接続ツールのダウンロード 展開 CSVEX のトップページから共有フォルダ接続ツールの zip ファイルをダウンロードします ダウンロードした zip ファイルを右クリックして すべて展開 を選択します (Windows 環境では zip ファイルを解凍しなくて

SURVEY123 FOR ARCGIS スタートアップガイド 2017 年度空間情報科学野外実験

KADIAS Mac OS X 用事前環境準備手順書

Windows PowerShell 用スクリプト形式編 改版履歴 版数 日付 内容 担当 V /4/1 初版 NII V /2/26 動作環境の変更に伴う修正 NII V /8/21 タイムスタンプ利用手順の追加 NII 目次 1. コード署名用証明

AW-PCS認証設定手順1805

PowerPoint プレゼンテーション

ESET Internet Security V10 モニター版プログラム インストール / アンインストール手順

intra-mart Accel Platform — OData for SAP HANA セットアップガイド   初版  


どこでもキャビネットVer1.3 ご紹介資料

ATS の概要とCloudFrontの対応状況CloudFrontのSSL機能

製品ラインアップ ハードウェア < 部品としてのご提供 > ーお客様でソフトエアの開発が必要ですー弊社で受託開発も可能です チャレンジ & レスポンス Web 構築に最適ドライバレスタイプ : epass1000nd チャレンジ & レスポンス方式 電子証明書の格納に両方対応可能汎用型タイプ : e

/02/ /09/ /05/ /02/ CA /11/09 OCSP SubjectAltName /12/02 SECOM Passport for Web SR

(1)IE6 の設定手順 (1)IE6 の設定手順 1) 信頼済みサイトの追加手順 1: ブラウザ (Internet Explorer) を起動します 手順 2: ツール / インターネットオプション / セキュリティ メニューを選択します 手順 3: セキュリティ タブの 信頼済みサイト を選択

Microsoft Word - PrivateAccess_UM.docx

自己紹介 指崎則夫 ( さしざきのりお ) SCUGJ 運営スタッフ Microsoft MVP

目次 1. AOS ユーザー登録サイト AOS ユーザー登録 AOS ライセンスキー登録 ios 版アプリ インストール 起動と新規登録 初期設定とバックアップ Andro

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

テクニカルドキュメントのテンプレート

VPN 接続の設定

ハイブリッド デバイス管理 ~Microsoft Intune~

DNSSECの基礎概要

InstallShield FAQ < 独自の InstallShield 前提条件を作成する > 注 ) このドキュメントは InstallShield 2014 Premier Edition を基に作成しています InstallShield 2014 以外のバージョンでは設定名などが異なる場合

easyhousing 環境設定 操作マニュアル Ver 年 7 月 2 日

AirStationPro初期設定

次 はじめに ブラウザーサポート デフォルトのIPアドレスについて

はじめに はじめに 本書について本書はオールインワン認証アプライアンス NetAttest EPS と NEC プラットフォームズ社製無線 LAN アクセスポイント NA1000W/NA1000A の IEEE802.1X EAP-TLS/EAP-PEAP(MS-CHAP V2) 環境での接続につい

ログを活用したActive Directoryに対する攻撃の検知と対策

McAfee ENS 移行プロセス概要

Transcription:

Android のコード署名に学ぶ IoT 時代のソフトウェアアップデート 金岡晃 ( 東邦大学 ) 2018 年 4 月 17 日

Agenda Android アプリへのコード署名の仕組み Android アプリへのコード署名付与の現状 弱い署名が施される原因調査 あるべき姿の考察 1

Android アプリケーションのアップデート コード署名を利用 インストールされるアプリケーションパッケージ (APK) が すでにインストールされている APK と比較して 同じパッケージ名 同じ署名者による署名 バージョン番号が新しい場合はアップデートとみなされる 2

Android アプリケーションと電子署名 Android アプリ マーケット 電子署名付きのアプリケーションパッケージ (APK) Google Play における電子署名に関連する要件と推奨 電子署名に用いる公開鍵暗号アルゴリズム :RSA DSA 証明書有効期限 :2033 年 10 月 22 日以降を必須 10000 日以上の有効期間を推奨 アプリケーションへの署名, AndroidDevelopers, https://developer.android.com/guide/publishing/app-signing.html?hl=ja 3

APK の構造と電子署名 (RSA 鍵の場合 ) META-INF MANIFEST.MF CERT.SF CERT.RSA : ファイル名とそのハッシュ値が含まれたテキストファイル : ファイル名とそのハッシュ値が含まれたテキストファイル : 署名のハッシュ値と証明書 (PKCS#7 の署名データ ) lib res CERT.SF を署名鍵で署名して 生成する assets AndroidManifest.xml classes.dex resources.arsc 4 2018/4/17 PKI Day 2018

Android アプリケーションでの電子署名の用途 電子署名の意味 証明書 信頼された認証局からの発行不要 = 自己署名証明書の利用が可能 署名者の同一性確認 データの完全性の確認 PKI 技術は使うが PKI が提供する信頼機構は使わない 電子署名の応用 署名者の同一性確認により以下のことが可能 アプリのアップグレード アプリのモジュール性実現 コードとデータの共有 5

アプリケーションのアップグレード App upgrade https://developer.android.com/studio/publish/app-signing.html アプリケーションのアップグレード - アプリケーションのアップグレードをリリースするとき ユーザーが新バージョンにシームレスにアップグレードできるように アップグレードされたアプリケーションにも同じ証明書で署名します システムがアプリケーションのアップデートをインストールする際は 新バージョンの証明書のいずれかが旧バージョンの証明書と一致する場合 システムがアップデートを許可します 一致する証明書を使用せずに署名する場合は アプリケーションに別のパッケージ名を割り当てる必要があります この場合 新しいバージョンがまったく新しいアプリケーションとしてインストールされます When the system is installing an update to an app, it compares the certificate(s) in the new version with those in the existing version. The system allows the update if the certificates match. If you sign the new version with a different certificate, you must assign a different package name to the app in this case, the user installs the new version as a completely new app. 6

アプリケーションのモジュール性 App modularity https://developer.android.com/studio/publish/app-signing.html Android システムでは アプリケーションが要求する場合 同じ証明書で署名されたアプリケーションを同じプロセスで実行できます これにより システムはこれらを単一のアプリケーションとして取り扱います このようにすればアプリケーションをモジュールとして配備でき ユーザーは必要に応じて各モジュールを個別に更新できます Android allows APKs signed by the same certificate to run in the same process, if the apps so request, so that the system treats them as a single app. In this way you can deploy your app in modules, and users can update each of the modules independently. 7

許可によるコード / データ共有 Code/data sharing through permissions https://developer.android.com/studio/publish/app-signing.html Android システムでは 署名ベースの権限付与を実施しているため アプリケーションは指定された証明書で署名されている別のアプリケーションに機能を提供できます 同じ証明書で複数のアプリケーションに署名し 署名に基づいた権限のチェックを行うことで アプリケーションはコードとデータを安全な方法で共有できます Android provides signature-based permissions enforcement, so that an app can expose functionality to another app that is signed with a specified certificate. By signing multiple APKs with the same certificate and using signature-based permissions checks, your apps can share code and data in a secure manner. 8

電子署名悪用による脅威 同一署名者へのなりすまし 以下の 3 つが可能に アプリのアップグレード アプリのモジュール性実現 コードとデータの共有 アップグレードによる上書き 同一モジュール悪用 パーミッション悪用 なりすましの実現 鍵の漏えい 検証鍵の解析による署名鍵回復 署名付きアプリと同じハッシュ値となるデータの生成 9

APK 電子署名の現状 :Fahl らの調査 S. Fahl, S. Dechand, H. Perl, F. Fischer, J. Smrcek, and M. Smith, Hey, NSA: Stay Away from my Market! Future Proofing App Markets against Powerful Attackers, ACM CCS 2014 分析対象 対象 :Google Play 上の無料アプリ APK 数 :989,935 取得時期 :2014 年 4 月 分析結果 自己署名証明書 99.98% (380,285/380,345) 署名アルゴリズム 鍵サイズ 有効期限 2860 個が MD5 23 個が MD2 51.6% が RSA2048 48.15% が RSA1024 0.07% が RSA512(277) 70% が推奨期限内 12.3% が 100-1000 年 2033 が 1000 年以上 10

APK 電子署名の現状 : 吉田らの調査 @CSS2016 吉田奏絵 今井宏謙 芹沢奈々 森達哉 金岡晃 Android アプリケーションにおける電子署名の大規模調査, CSS2016 分析対象 対象 :PlayDrone データセット (Google Play 上の無料アプリ ) APK 数 :1,177,599 取得時期 :2014 年 4 月 分析結果自己署名証明書 99.92% (1,177,185/1,177,599) 署名アルゴリズム 鍵サイズ 有効期限 証明書の署名 :1.56%MD5(18,380) APK の署名 :4.49% が MD5(52,866) 49.24% が 2048 48.13% が 1024 0.02% が RSA512 ビット鍵 (223) 25 年以上が 80.58%(949,193) 11

署名アルゴリズムと鍵サイズ Algorithm and Key Size # of APKs RSA512 223 0.02% RSA1024 567,055 48.13% RSA2048 580,134 49.24% RSA4096 3,077 0.26% DSA1024 26,697 2.27% Others 929 0.08% Algorithm # of Certs MD5 52,866 4.49% SHA-1 1,123,779 95.45% SHA-256 680 0.06% 512 ビット鍵は Amazon EC2 を使って 75 ドルで 4 時間で解読できる (Valenta@FC2016) 衝突攻撃は容易 衝突が発見 (2017) 12 2018/4/17 PKI Day 2018

APK 電子署名の現状 : 吉田らの調査 @SCIS2018 吉田奏絵 今井宏謙 芹沢奈々 森達哉 金岡晃 Android アプリケーションに対する弱い電子署名の脅威分析, SCIS 2018 弱いアルゴリズム利用のリスク明確化 他のデータセットでの調査 ダウンロード数調査 2016 年での状況調査 弱いアルゴリズム利用の原因分析 開発環境の初期設定調査 アプリ生成アプリ アプリ作成補助サービス 対策ガイドラインの検討 OS 開発者 アプリ開発者 マーケット管理者 アプリ作成補助サービス事業者 13

他のデータセットを含めた調査 データセット APK 数 署名数 証明書数 PlayDrone 1,177,599 1,178,118 1,178,116 Alandroid 10,655 10,657 10,654 APPVN 34,415 34,433 34,485 Aptoide 138,122 138,172 138,291 Baidu 138,004 138,089 138,122 Blackmart 100,156 100,213 100,367 CafeBazaar 54,034 54,069 54,109 entumovil 235 235 235 GetJar 37,715 37,682 37,689 Mobogenie 31,546 31,570 31,590 MoboMarket 20,095 20,102 20,140 Uptodown 59,428 59,434 59,557 Yandex 22,964 22,969 22,975 zhushou360 204,416 204,567 204,673 Androzoo 3,834,514 3,830,320 3,839,527 Total 5,863,898 5,867,415 5,870,531 自己署名証明書 99.85% (5,862,531) 署名アルゴリズム APK の署名 :5.96%MD5 (349,478) 鍵サイズ 47.74% が 1024 0.01% が RSA512 (837) 有効期限 25 年以上が 97.68% (5,734,146) 14

他のデータセットを含めた調査 調査項目 Fahl ら @ SEC2014 吉田ら @ CSS2016 本研究 自己署名証明書 99.98% 99.92% 99.85% MD5 利用 (*1) 0.29% 4.49% 5.96% 鍵サイズ RSA2048 51.6% 49.24% 49.80% 有効期限 RSA1024 48.15% 48.13% 47.74% RSA512 0.07% 0.02% 0.01% 70% が推奨期限内 80.58% が 25 年以上 97.68% が 25 年以上 *1: Fahl らの結果は 証明書の署名アルゴリズムと APK の署名アルゴリズムのどちらについての調査かの明言がない 15

弱いアルゴリズム利用のリスク明確化 ダウンロード数 PlayDrone データセット内の APK 署名に MD5 を利用していた 52,866 個の APK のうち Metadata( 周辺情報 ) があった 48,586 個の APK に対してダウンロード数の調査を行った 12,000 ダウンロード数とアプリ数 11,153 10,000 8,000 7,764 7,603 100 万超えは 499 個 5000 万超えは 21 個 6,000 4,000 2,000 0 296 1,868 1,354 4,440 4,393 2,304 4,141 1,122 1,338 311 353 60 65 11 10 16

弱いアルゴリズム利用のリスク明確化 2016 年 12 月での状況調査 PlayDrone データセット内で MD5 署名利用と 512 ビット RSA 鍵利用をしていたアプリを再度ダウンロード Nexus7(2012) MD5 利用 52,866 個中 22,517 個の APK 取得 89.52% が引き続き MD5 を利用 アルゴリズム アプリ数 割合 MD5 24,244 89.52% SHA-1 2,801 10.34% SHA-256 37 0.14% 512 ビット RSA 鍵利用 223 個中 78 個の APK 再取得 すべてが引き続き 512 ビット RSA 鍵を利用 17

電子署名悪用による脅威 同一署名者へのなりすまし 以下の 3 つが可能に アプリのアップグレード アプリのモジュール性実現 コードとデータの共有 アップグレードによる上書き 同一モジュール悪用 パーミッション悪用 なりすましの実現 鍵の漏えい 検証鍵の解析による署名鍵回復 署名付きアプリと同じハッシュ値となるデータの生成 無視できるリスクではない 18

原因分析 : 開発環境の初期設定調査 APK への代表的な署名方法 Keytool と Jarsigner を利用してコマンドラインで署名 JavaSE(JDK) に依存 Eclipse の ADT プラグインで ADT Export Wizard 利用 JDK と Android Development Tools(ADT) に依存 Android Studio で Generate Signed APK を利用 Android Studio に依存 19

Java SE Java SDK Key Alg. Key Size Sign for APK Sign for Cert version 6 RSA 1024 MD5withRSA MD5withRSA DSA 1024 SHA1withDSA SHA1withDSA version 7 RSA 2048 SHA256withRSA SHA256withRSA DSA 1024 SHA1withDSA SHA256withRSA version 8 RSA 2048 SHA256withRSA SHA256withRSA DSA 1024 SHA1withRSA SHA1withRSA Eclipse with ADT ADT ver. JDK Key Alg. Key Size Sign for APK Sign for Cert 22.6.3.v2014 6.0 RSA 1024 SHA1 SHA1withRSA 23.0.7.2120684 8.0 RSA 2048 SHA1 SHA256withRSA Android Studio MD5 署名や512ビットRSA 鍵の主原因とは考えにくい Studio ver. JDK Key Alg. Key Size Sign for APK Sign for Cert 1.0 8.0 RSA 2048 SHA1 SHA256withRSA 2.1.3 8.0 RSA 2048 SHA1 SHA256withRSA 20

原因分析 :512 ビット RSA 鍵 類似傾向の発見 PlayDrone データセット上で 512 ビット RSA 鍵を使っていたアプリ 211 / 223 個の APK の証明書 DN に類似傾向 CN= < ある固定キーワード > { アプリごとの数値列 } OU=< ある固定キーワード > O=Android Developers L=Anon ST=Anon C=US 調査の結果 特定のアプリにより生成されたアプリであることが判明 2016 年の段階でも当該アプリは存在し 引き続き生成されたアプリは 512 ビット RSA 鍵で署名されていたことを確認 21

原因分析 : アプリ作成補助サービス アプリ開発の補助を行う特定のツールやサービス APK 署名に MD5 を利用しているアプリの証明書やパッケージ名に共通する文字列を分析 開発ツール名 個数 割合 ツール サービスA 9,515 18.00% ツール サービスB 1,428 2.70% ツール サービスC 346 0.65% ツール サービスD 278 0.53% ツール サービスE 224 0.42% ツール サービスF 232 0.44% ツール サービスG 178 0.34% 22

まとめ 23

要因の考察 スマートフォン端末とアプリの拡大 幅広い開発者の参入 OS が提供するアプリ機能の充実化 複雑化した構造 脅威 リスクの理解の困難性 現状 ミス 悪用による不適切利用リスク拡大 多機能性の一端を電子署名による保証を利用して実現 OS アプリ構造の複雑化 脅威 リスクと電子署名 証明書 鍵への要件のバランスが取れていない アプリ機能と署名要件の乖離が当初より拡大してきた可能性 24

あるべき姿の考察 コード署名による利便性 署名に関連する要件の不適切さ アップデートモジュール化コード / データ共有署名関連の要件を適切に 鍵更新を許容しないモデル 脆弱なアルゴリズムが利用可能 長期間の有効期限を持つ証明書の強制 開発ツール側でも対応可能に 25

開発ツール側でも対応可能に 現行 PKI を使いこなせない開発者は 将来的な暗号技術も使いこなせない という前提に立つべき 開発者が意識しなくても ( あるいは意識が少なくても ) 安全に開発可能な開発ツールや環境 プラットフォームを構築 26

まとめ Android アプリへのコード署名の仕組み Android アプリへのコード署名付与の現状 RSA/DSA 鍵 証明書有効期限 25 年以上推奨 弱いアルゴリズム利用 : RSA512 MD5 弱い署名が施される原因調査 アプリやサービスにより簡易に生成されたアプリ あるべき姿の考察 鍵と証明書が更新可能なエコシステム 開発者フレンドリーな環境 27