Slide 1

Slide 1 text

スピーカー名 Flutterアプリの セキュリティ対策を考えてみる FlutterKaigi 2023 - November 10, 2023 batch / Kakeru Nakabachi

Slide 2

Slide 2 text

About me 2 Kakeru Nakabachi / batch CyberAgent, Inc. WinTicket, Inc. b4tchkn

Slide 3

Slide 3 text

WINTICKETの紹介 3

Slide 4

Slide 4 text

WINTICKETの紹介 4 競輪とオートレースのネット投票サービス

Slide 5

Slide 5 text

AGENDA 
 1. セキュリティ対策ってなに? 2. Flutterがモバイル端末で動くしくみ 3. Flutterアプリ開発者ができる対策 4. まとめ 5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

7 HotReloadすげえ

Slide 8

Slide 8 text

8 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう

Slide 9

Slide 9 text

9 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう 開発⼯数が半分!?

Slide 10

Slide 10 text

10 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう 爆速で開発してリリー スしよう! 開発⼯数が半分!?

Slide 11

Slide 11 text

11 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう 爆速で開発してリリー スしよう! 開発⼯数が半分!? セキュリティについて考えられていますか?

Slide 12

Slide 12 text

本セッションのゴール 「うちのアプリもちゃんと対策しないとやばいかも‧‧‧」 「やってたつもりだけど、ここが⾜りていなかった‧‧‧」 12 Flutterアプリのセキュリティ考慮のきっかけに そしてより⾼品質なFlutterアプリ開発を

Slide 13

Slide 13 text

“Caution” セキュリティ対策を考えることは攻撃⼿法を知る必要がある 本セッションでもいくつか紹介しますが、絶対に悪⽤禁⽌です 13

Slide 14

Slide 14 text

1. セキュリティ対策ってなに?

Slide 15

Slide 15 text

セキュリティ対策ってなに? セキュリティ対策はわからないことだらけ なにをすれば⾃分たちの開発してるアプリはセキュリティ対策ができてるといえるか 15 その対策を講じたが、 それで完全なのか? そもそもどのような脅威 があるのか?

Slide 16

Slide 16 text

セキュリティ対策ってなに? それぞれ⽐較して検討‧対策することが重要 全てのセキュリティ対策をして完全なアプリをつくるのはほぼ不可能 16 攻撃者のコスト 発⽣時の被害 対策コスト

Slide 17

Slide 17 text

セキュリティ対策ってなに? 今回の対象プラットフォーム 17

Slide 18

Slide 18 text

Flutterコミュニティの セキュリティとの向き合い⽅ 18

Slide 19

Slide 19 text

セキュリティ対策ってなに? Identify:脆弱性を特定することで、主要なセキュリティリスクを追跡し優先順位付けする Detect:脆弱性スキャンなどの技術を使⽤して脆弱性を検出し、特定する Protect:ソースからの脅威から重要な資産を保護する Respond:脆弱性や攻撃を報告し、トリアージして対応プロセスを定義する Recover:インシデントを最⼩限に抑え、それを抑制させる⼒をつける https://docs.flutter.dev/security Flutterのセキュリティ戦略 19

Slide 20

Slide 20 text

セキュリティ対策ってなに? Flutterへの脆弱性報告のしかた security@flutter.devにメール 通常Issueで報告するとユーザーを 危険にさらす可能性があるためpublicな場で共有するのは避ける https://docs.flutter.dev/security https://github.com/flutter/packages/security FlutterのSecurity Policy 20

Slide 21

Slide 21 text

セキュリティ対策ってなに? Flutterチームの脆弱性処理プロセス https://github.com/flutter/packages/security FlutterのSecurity Policy 21

Slide 22

Slide 22 text

⼀般的なセキュリティ対策と標準について 22

Slide 23

Slide 23 text

セキュリティ対策ってなに? Open Worldwide Application Security Project ソフトウェアのセキュリティ向上に取り組む オープンソースソフトウェアコミュニティ https://owasp.org/ OWASP 23

Slide 24

Slide 24 text

セキュリティ対策ってなに? OWASP Japanもあるよう 3ヶ⽉に1回程度の頻度でイベント開催 github.com/owasp-jaでOWASPドキュメントの⽇本語化 https://owasp.org/www-chapter-japan/ OWASP 24

Slide 25

Slide 25 text

セキュリティ対策ってなに? OWASP Mobile Application Security OWASP MASVSとOWASP MASTGを提供 ● OWASP MASVS Mobile Application Security Verification Standard モバイルアプリのセキュリティ標準 ● OWASP MASTG Mobile Application Security Testing Guide モバイルアプリのセキュリティテストガイド OWASP MAS 25

Slide 26

Slide 26 text

セキュリティ対策ってなに? モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 ● MASVS - STORAGE ● MASVS - CRYPTO ● MASVS - AUTH ● MASVS - NETWORK ● MASVS - PLATFORM ● MASVS - CODE ● MASVS - RESILIENCE OWASP MASVS 26

Slide 27

Slide 27 text

セキュリティ対策ってなに? あわせて⾒たいセッション - DroidKaigi 2023 https://2023.droidkaigi.jp/timetable/492846/ OWASP MASVS 27

Slide 28

Slide 28 text

セキュリティ対策ってなに? https://owasp.org/www-project-mobile-top-10/# OWASP Top 10 Mobile Risks 28

Slide 29

Slide 29 text

2. Flutterがモバイル端末で動くしくみ

Slide 30

Slide 30 text

Flutterがモバイル端末で動くしくみ Dartはどのようにモバイル端末で動作するか 30 DartがSwiftとかJava にトランスパイルさ れてる‧‧? Dartがそのまま動作 している‧‧? なんかコンパイルされて 変換されたものが動作して いる‧‧? ⾃分たちのアプリが攻 撃された時、攻撃者に はなにが⾒える‧‧?

Slide 31

Slide 31 text

Flutterがモバイル端末で動くしくみ FlutterのFAQ - デバッグビルド VMを使ってコードを実⾏ 再コンパイルせず実⾏中のコードに変更を加えるstateful hot reloadを可能にする デバッグビルド中は右上にdebugラベルが表⽰される https://docs.flutter.dev/resources/faq#run-android https://docs.flutter.dev/resources/faq#run-ios Dartはどのようにモバイル端末で動作するか 31

Slide 32

Slide 32 text

Flutterがモバイル端末で動くしくみ FlutterのFAQ - リリースビルド SDKと開発者コードはネイティブコード(機械語)にAOT(Ahead Of Time)コンパイルさ れる エンジンのCとC++のコードはAndroidの場合NDKで、iOSの場合LLVMでコンパイルされる https://docs.flutter.dev/resources/faq#run-android https://docs.flutter.dev/resources/faq#run-ios Dartはどのようにモバイル端末で動作するか 32

Slide 33

Slide 33 text

Flutterがモバイル端末で動くしくみ Dart VMという名前は歴史的なもので、Dart VMはプログラミング⾔語の実⾏環境を提供す るという意味でVM ● DartVMの機能 ○ Runtime System ○ Development Experience components accessible via service protocol * Debugging * Profiling * Hot-reload ○ Just-in-Time (JIT) and Ahead-of-Time (AOT) compilation pipelines ○ … https://mrale.ph/dartvm/ Dart VM 33

Slide 34

Slide 34 text

Flutterがモバイル端末で動くしくみ ● Just-in-Time (JIT) → デバッグビルド時 ○ 実⾏時にDartをネイティブコード(機械語)にコンパイル ○ コンパイル時間が短い ○ 起動時間が⻑い ● Ahead-of-Time (AOT) → リリースビルド時 ○ 事前にDartをコンパイル ○ コンパイル時間が⻑い ○ 起動時間が短い Dart VM 34

Slide 35

Slide 35 text

Flutterがモバイル端末で動くしくみ 純粋なDartの場合 JITとAOTどちらもDartをDart VMで動作させるためには、common front-end (CFE) で Kernel ASTと呼ばれる中間表現のバイナリに変換する必要がある https://mrale.ph/dartvm/ Dart VM 35

Slide 36

Slide 36 text

Flutterがモバイル端末で動くしくみ Kernel ASTを覗いてみる https://dart.dev/tools/dart-compile#kernel Dart VM 36

Slide 37

Slide 37 text

Flutterがモバイル端末で動くしくみ Flutterの場合(デバッグビルド) Kernelへのコンパイルと実⾏は 完全分離している CFEは前回のCFEの状態を再利⽤し 変更されたコードだけを再コンパイルできる DEVICEはflutter toolによって Kernelを受け取る https://mrale.ph/dartvm/ Dart VM 37

Slide 38

Slide 38 text

Flutterがモバイル端末で動くしくみ Flutterの場合(リリースビルド) AOTコンパイル時のプロセスでは、 TFAという静的解析が⾏われる https://mrale.ph/dartvm/ Dart VM 38

Slide 39

Slide 39 text

Flutterがモバイル端末で動くしくみ 抽象化した流れ まとめ 39 CFE Dart Kernel AST Flutter Engine AOT コンパイル JIT コンパイル Dart VM

Slide 40

Slide 40 text

Flutterがモバイル端末で動くしくみ 抽象化した流れ まとめ 40 CFE Dart Kernel AST Flutter Engine AOT コンパイル JIT コンパイル Dart VM デバッグビルド時は プロセスが永続化 リリースビルド時は TFAによる解析 Flutter Engine内で動く Dart VMのランタイム環境 で実⾏

Slide 41

Slide 41 text

3. Flutterアプリ開発者ができる対策

Slide 42

Slide 42 text

Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 ● MASVS - STORAGE ● MASVS - CRYPTO ● MASVS - AUTH ● MASVS - NETWORK ● MASVS - PLATFORM ● MASVS - CODE ● MASVS - RESILIENCE OWASP MASVS 42

Slide 43

Slide 43 text

Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 ● MASVS - STORAGE ● MASVS - CRYPTO ● MASVS - AUTH ● MASVS - NETWORK ● MASVS - PLATFORM ● MASVS - CODE ● MASVS - RESILIENCE OWASP MASVS 43

Slide 44

Slide 44 text

Flutterアプリ開発者ができる対策 MASVS-STORAGE: Storage モバイルアプリケーションは、APIキーなど、ローカルに保存するケースがある アプリの内部ストレージのようなプライベートな場所に保存されることもあれば、他のアプ リがアクセスできるパブリックフォルダに保存されることもある アプリが意図的に保存する機密データが、適切に保護できるようにする必要がある 44 MASVS - STORAGE MASVS - STORAGE

Slide 45

Slide 45 text

Flutterアプリ開発者ができる対策 shared_preferences Key-Valueのシンプルなデータを保存 ● Android ○ SharedPreferences ● iOS ○ UserDefaults https://pub.dev/packages/shared_preferences 45 MASVS - STORAGE MASVS - STORAGE

Slide 46

Slide 46 text

Flutterアプリ開発者ができる対策 shared_preferences Key-Valueのシンプルなデータを保存 ● Android ○ SharedPreferences ● iOS ○ UserDefaults https://pub.dev/packages/shared_preferences 46 MASVS - STORAGE MASVS - STORAGE 端末がroot化やjailbreakされていると アクセスして⾒れる👁

Slide 47

Slide 47 text

Flutterアプリ開発者ができる対策 flutter_secure_storage データを暗号化して保存 ● Android ○ AESで暗号化 ○ v5.0.0以降はEncryptedSharedPreferences ● iOS ○ Keychain https://pub.dev/packages/flutter_secure_storage 47 MASVS - STORAGE MASVS - STORAGE

Slide 48

Slide 48 text

Flutterアプリ開発者ができる対策 WebView Cookie 適切なタイミングで削除しないと機密情報を閲覧できる ex) WebView クロスアプリ スクリプティング Androidの場合 ● cache/WebView/Default/HTTP Cache ● app_webview/Default/Local Storage/leveldb/hoge.log にHTTPリクエストやレスポンスの中⾝も残っていて閲覧できる 48 MASVS - STORAGE MASVS - STORAGE

Slide 49

Slide 49 text

Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 ● MASVS - STORAGE ● MASVS - CRYPTO ● MASVS - AUTH ● MASVS - NETWORK ● MASVS - PLATFORM ● MASVS - CODE ● MASVS - RESILIENCE OWASP MASVS 49

Slide 50

Slide 50 text

Flutterアプリ開発者ができる対策 MASVS-NETWORK: Network Communication モバイルアプリがいかなる状況でも安全な接続ができることを保証する 開発者が特定の認証局のみ信頼して選択する状況をカバーする ⼀般的にcertificate pinningやpublic key pinningと呼ばれる 50 MASVS - NETWORK MASVS - NETWORK

Slide 51

Slide 51 text

Flutterアプリ開発者ができる対策 MASVS-NETWORK: Network Communication モバイルアプリがいかなる状況でも安全な接続ができることを保証する 開発者が特定の認証局のみ信頼して選択する状況をカバーする ⼀般的にcertificate pinningやpublic key pinningと呼ばれる カバーできないと‧‧?🧐 51 MASVS - NETWORK MASVS - NETWORK

Slide 52

Slide 52 text

Flutterアプリ開発者ができる対策 TLS/SSL:通信内容を暗号化するプロトコル 第三者の機関から証明書が発⾏されてサーバー側を認証し、 証明書と公開鍵がクライアントに送られてくる モバイルアプリでApiクライアントライブラリを通して通信する際、HTTPSで通信している ことはわかるが、正しい証明書か判断が難しい 52 TLS/SSL(https)は完全に安⼼ではない MASVS - NETWORK

Slide 53

Slide 53 text

Flutterアプリ開発者ができる対策 サーバーとクライアントの間に攻撃者が割り込んで、証明書と公開鍵を不正なものにすり替 えて通信内容を盗聴し、改ざんする 送られてくる証明書に依存している状態 →事前に信頼できる証明書しか受け⼊れたくない 53 中間者攻撃 (MITM 攻撃) ユーザー 攻撃者 サーバー 問い合わせ 盗聴 証明書 すり替えられた証明書 すり替えられた証明書で 暗号化してリクエスト 正規の証明書で 暗号化リクエスト 復号して盗聴 MASVS - NETWORK

Slide 54

Slide 54 text

Flutterアプリ開発者ができる対策 SSL Pinningとも呼ばれる サーバーから送られてきた正規の認証局から発⾏されたSSL証明書(公開鍵)を予めクライ アントでもって(ピン留めして)おくこと 認証局が発⾏した証明書に依存する代わりに、保存されている証明書に依存するように 54 Certificate Pinning ユーザー 攻撃者 サーバー 正規の証明書 すり替えられた証明書 ピン留めした証明書 違った場合、通信拒否 MASVS - NETWORK

Slide 55

Slide 55 text

Flutterアプリ開発者ができる対策 http_certificate_pinning https://pub.dev/packages/http_certificate_pinning 55 Certificate Pinning MASVS - NETWORK

Slide 56

Slide 56 text

Flutterアプリ開発者ができる対策 例)https://connpass.com/api/v1/event/ をGETしてみる 56 Certificate Pinning MASVS - NETWORK

Slide 57

Slide 57 text

Flutterアプリ開発者ができる対策 57 Certificate Pinning GETリクエスト
 正規のレスポンスかは不明
 MASVS - NETWORK

Slide 58

Slide 58 text

Flutterアプリ開発者ができる対策 証明書のFinger Printを取得 58 Certificate Pinning MASVS - NETWORK

Slide 59

Slide 59 text

Flutterアプリ開発者ができる対策 59 Certificate Pinning Before After MASVS - NETWORK

Slide 60

Slide 60 text

Flutterアプリ開発者ができる対策 60 Certificate Pinning 取得したFinger Print
 正規のレスポンスを取得可能
 MASVS - NETWORK

Slide 61

Slide 61 text

Flutterアプリ開発者ができる対策 不正なFinger Printの場合 61 Certificate Pinning 適当なFinger Print
 エラーが起きて取得不可能
 MASVS - NETWORK

Slide 62

Slide 62 text

Flutterアプリ開発者ができる対策 運用上のデメリット ● TLS/SSL証明書は有効期限がある ● TLS/SSL証明書が更新されるたびにFinger Printの更新が必要 更新時は基本的に強制アップデートが必要 → サーバーなどリモートデータソースに保存する運用をすれば回避可能 62 Certificate Pinning MASVS - NETWORK

Slide 63

Slide 63 text

Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 ● MASVS - STORAGE ● MASVS - CRYPTO ● MASVS - AUTH ● MASVS - NETWORK ● MASVS - PLATFORM ● MASVS - CODE ● MASVS - RESILIENCE OWASP MASVS 63

Slide 64

Slide 64 text

Flutterアプリ開発者ができる対策 MASVS-PLATFORM: Platform Interaction モバイルアプリのセキュリティはモバイルプラットフォームとの相互作⽤に⼤きく依存して いるが、これらのメカニズムは攻撃者や他のインストールされたアプリによって悪⽤される 可能性がある パスワードなどの機密データは、アプリのユーザーインターフェースに表⽰されることが多 い ⾃動⽣成されるスクリーンショットなどによる偶発的な情報漏洩などプラットフォームのメ カニズムを通じて、このデータが意図せず漏洩しないようにする必要がある 64 MASVS - PLATFORM MASVS - PLATFORM

Slide 65

Slide 65 text

Flutterアプリ開発者ができる対策 モバイル端末はバックグラウンドにいるアプリのスナップショットを保存して表⽰ 機密情報が表⽰されると、ユーザーが意図せず情報漏洩する危険性 65 MASVS - PLATFORM MASVS - PLATFORM

Slide 66

Slide 66 text

Flutterアプリ開発者ができる対策 アプリがバックグラウンドに移動した時、Widgetを切り替える 66 MASVS - PLATFORM MASVS - PLATFORM

Slide 67

Slide 67 text

Flutterアプリ開発者ができる対策 アプリがバックグラウンドに移動した時、Widgetを切り替える secure_application https://pub.dev/packages/secure_application 67 MASVS - PLATFORM MASVS - PLATFORM

Slide 68

Slide 68 text

Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 ● MASVS - STORAGE ● MASVS - CRYPTO ● MASVS - AUTH ● MASVS - NETWORK ● MASVS - PLATFORM ● MASVS - CODE ● MASVS - RESILIENCE OWASP MASVS 68

Slide 69

Slide 69 text

Flutterアプリ開発者ができる対策 MASVS-RESILIENCE: Resilience Against Reverse Engineering and Tampering コードの難読化、アンチデバッグ、アンチタンパリング(改ざん)などの深層防御対策 リバースエンジニアリングや特定のクライアントサイド攻撃に対するアプリの耐性を⾼める ために重要である アプリに何重ものセキュリティ制御を加えることで、攻撃者がリバースエンジニアリングを して、そこから貴重な知的財産や機密データを抽出することをより困難にする 69 MASVS - RESILIENCE MASVS - RESILIENCE

Slide 70

Slide 70 text

Flutterアプリ開発者ができる対策 リバースエンジニアリングする2つの⼿法 Reverse Engineering Flutter 70 動的解析 dynamic analysis アプリ実⾏中にバイナリを解析 静的解析 static analysis アプリのバイナリを実⾏せず解析 MASVS - RESILIENCE

Slide 71

Slide 71 text

Flutterアプリ開発者ができる対策 reFlutter Flutterライブラリのパッチバージョンを使⽤して、Flutterアプリのリバースエンジニアリン グを⽀援する動的解析ツール socket.cc:トラフィックの監視と傍受のためのパッチ dart.cc:クラス、関数、いくつかのフィールドを表⽰するように https://github.com/Impact-I/reFlutter Reverse Engineering Flutter 71 MASVS - RESILIENCE

Slide 72

Slide 72 text

Flutterアプリ開発者ができる対策 https://swarm.ptsecurity.com/fork-bomb-for-flutter/ Reverse Engineering Flutter 72 RE.apk signed RE.apk MASVS - RESILIENCE

Slide 73

Slide 73 text

Flutterアプリ開発者ができる対策 Traffic monitoring and interception ソースコードのどのあたりで どういうリクエストを送信しているかわかる 処理の過程でどんな値が受け渡されてる? Reverse Engineering Flutter 73 MASVS - RESILIENCE

Slide 74

Slide 74 text

Flutterアプリ開発者ができる対策 Frida JSコードをpythonのファイルに埋め込んでHookしたいコードのオフセット情報をもとに pythonでコードをHookして実⾏可能な動的解析ツール Hook:アプリケーション外に定義されたスクリプトを実⾏ 実⾏中のDartの関数の引数を覗いたり、返り値を変更したりできる https://frida.re/ Reverse Engineering Flutter 74 MASVS - RESILIENCE

Slide 75

Slide 75 text

Flutterアプリ開発者ができる対策 flutter logsコマンド 端末をPCと接続してFlutter製アプリを実行するとログが覗ける👀 print()を使って機密情報をプリントしている場合危険 FlutterKaigi 2023を実行した結果↓ https://docs.flutter.dev/reference/flutter-cli 75 MASVS - RESILIENCE Reverse Engineering Flutter

Slide 76

Slide 76 text

Flutterアプリ開発者ができる対策 リバースエンジニアリングする2つの⼿法 Reverse Engineering Flutter 76 動的解析 dynamic analysis アプリ実⾏中にバイナリを解析 静的解析 static analysis アプリのバイナリを実⾏せず解析 MASVS - RESILIENCE

Slide 77

Slide 77 text

Flutterがモバイル端末で動くしくみ 抽象化した流れ まとめ 77 CFE Dart Kernel AST Flutter Engine AOT コンパイル JIT コンパイル Dart VM デバッグビルド時は プロセスが永続化 リリースビルド時は TFAによる解析 Flutter Engine内で動く Dart VMのランタイム環境 で実⾏

Slide 78

Slide 78 text

Flutterアプリ開発者ができる対策 Reverse Engineering Flutter 78 MASVS - RESILIENCE

Slide 79

Slide 79 text

Flutterアプリ開発者ができる対策 Reverse Engineering Flutter 79 MASVS - RESILIENCE

Slide 80

Slide 80 text

Flutterアプリ開発者ができる対策 Android端末内のapkの取得 https://developer.android.com/studio/command-line/adb?hl=ja Reverse Engineering Flutter 80 MASVS - RESILIENCE

Slide 81

Slide 81 text

Flutterアプリ開発者ができる対策 Android端末内のapkの取得 https://developer.android.com/studio/command-line/adb?hl=ja Reverse Engineering Flutter 81 MASVS - RESILIENCE assetが含まれる

Slide 82

Slide 82 text

Flutterアプリ開発者ができる対策 Android端末内のapkの取得 https://developer.android.com/studio/command-line/adb?hl=ja Reverse Engineering Flutter 82 MASVS - RESILIENCE ソースコードが含ま れる

Slide 83

Slide 83 text

Flutterアプリ開発者ができる対策 デバッグビルド時のunzipしたarm64_v8a.apk Reverse Engineering Flutter 83 MASVS - RESILIENCE

Slide 84

Slide 84 text

Flutterアプリ開発者ができる対策 デバッグビルド時のunzipしたapk Kernelはビルドプロセスでkernel_blob.binとしてまとめられるよう コメントつきのソースコードを覗くことができてしまう デバッグビルドしたapkをリリースするとコード流出に繋がる⚡⛑ Reverse Engineering Flutter 84 MASVS - RESILIENCE

Slide 85

Slide 85 text

Flutterアプリ開発者ができる対策 リリースビルド時のunzipしたarm64_v8a.apk kernel_blob.binは存在しない Reverse Engineering Flutter 85 MASVS - RESILIENCE

Slide 86

Slide 86 text

Flutterアプリ開発者ができる対策 リリースビルド時のunzipしたarm64_v8a.apk lib/x86_64/libapp.soが存在する Reverse Engineering Flutter 86 MASVS - RESILIENCE

Slide 87

Slide 87 text

Flutterアプリ開発者ができる対策 リリースビルド時のunzipしたarm64_v8a.apk Reverse Engineering Flutter 87 ● libapp.so ○ 実際のアプリケーションコード ● libflutter.so ○ Flutter Engineを含むFlutter SDK側の コード MASVS - RESILIENCE

Slide 88

Slide 88 text

Flutterアプリ開発者ができる対策 libapp.soの解析 Reverse Engineering Flutter 88 MASVS - RESILIENCE

Slide 89

Slide 89 text

Flutterアプリ開発者ができる対策 libapp.soの解析 専⽤の解析ツールがある https://github.com/rscloura/Doldrums https://github.com/mildsunrise/darter どちらも現状、Dart 2.5や2.10でしか動作しない Reverse Engineering Flutter 89 MASVS - RESILIENCE

Slide 90

Slide 90 text

Flutterアプリ開発者ができる対策 FlutterKaigi/conference-app-2023 - base.apk unzip_base_apk/assets/flutter_assetes/assets/svg 90 Reverse Engineering Flutter

Slide 91

Slide 91 text

Flutterアプリ開発者ができる対策 FlutterKaigi/conference-app-2023 - arm64_v8a.apk 91 Reverse Engineering Flutter

Slide 92

Slide 92 text

Flutterアプリ開発者ができる対策 FlutterKaigi/conference-app-2023 - arm64_v8a.apk 92 Reverse Engineering Flutter

Slide 93

Slide 93 text

Flutterアプリ開発者ができる対策 Reverse Engineeringの対策 https://docs.flutter.dev/deployment/obfuscate Flutter Obfuscate 93 MASVS - RESILIENCE

Slide 94

Slide 94 text

Flutterアプリ開発者ができる対策 難読化と呼ばれるDartを⼈間が読めないコードに変換する処理 元のDartとの対応を表したシンボルファイルも出⼒され、解読したいときはそれをもとに解 読する Flutter Obfuscate 94 main aBcD print(ʻHello World.’); eFgHIJK 難読化 シンボルファイル(イメージ) MASVS - RESILIENCE

Slide 95

Slide 95 text

Flutterアプリ開発者ができる対策 エラー監視ツール使⽤時の注意 エラー内容も難読化されて送信されるため、ツールごとに⽤意されている⽅法でシンボル ファイルをアップロードする必要がある アップロードしないと、ツールが解読できずエラー内容も難読化されてしまい、 StackTraceなど追えない Flutter Obfuscate 95 MASVS - RESILIENCE

Slide 96

Slide 96 text

3. まとめ

Slide 97

Slide 97 text

“Caution” セキュリティ対策を考えることは攻撃⼿法を知る必要がある 本セッションでもいくつか紹介しますが、絶対に悪⽤禁⽌です 97

Slide 98

Slide 98 text

まとめ ● 攻撃者のコスト‧発⽣時の被害‧対策コストを⽐較して検討することが重要 ● アプリのセキュリティ対策はOWASP MASの業界標準が参考になる ● 今回紹介した内容は⼀部にすぎない ● すべての攻撃を防ぐことは不可能に近いが、攻撃の難易度を上げる対策をすることが ⼤切 ● Obfuscateは対応が簡単で、エラー監視ツールが対応していれば効果抜群 ● セキュリティ考慮して⾼品質なFlutterアプリ開発をみんなで⽬指していきましょう💪 98

Slide 99

Slide 99 text

本セッションのゴール 「うちのアプリもちゃんと対策しないとやばいかも‧‧‧」 「やってたつもりだけど、ここが⾜りていなかった‧‧‧」 99 Flutterアプリのセキュリティ考慮のきっかけに そしてより⾼品質なFlutterアプリ開発を

Slide 100

Slide 100 text

さいごに https://developers.cyberagent.co.jp/blog/?s=winticket+flutter 100 WINTICKETではたくさんのFlutterに関わる記事を執筆しています

Slide 101

Slide 101 text

参考 ● https://docs.flutter.dev/security ● https://github.com/flutter/packages/security ● https://mas.owasp.org/MASVS/ ● https://swarm.ptsecurity.com/fork-bomb-for-flutter/ ● https://research.miidas.jp/2020/03/frida-%E5%85%A5%E9%96%80/ ● https://zenn.dev/tsuruo/articles/48909d22d49ffe ● https://mrale.ph/dartvm/ ● https://dart.dev/overview#platform ● https://www.appsealing.com/flutter-security/ 101

Slide 102

Slide 102 text

参考 ● https://kuwabaray.hatenablog.com/entry/2022/08/22/195240 ● https://medium.com/flutter-community/securing-your-flutter-applications-77c2bf 3ff25e ● https://note.com/joyous_yarrow436/n/n15833203846c ● https://medium.com/@rondalal54/reverse-engineering-flutter-apps-5d620bb105c0 ● https://medium.com/@ostorlab/flutter-reverse-engineering-and-security-analysis- 41433f5671f3 ● https://cryptax.medium.com/reversing-an-android-sample-which-uses-flutter-23c 3ff04b847 ● https://qiita.com/tetsukay/items/ad6cf55c740a57050cd3 102

Slide 103

Slide 103 text

103