Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Flutterアプリのセキュリティ対策を考えてみる
Search
Kakeru Nakabachi
November 10, 2023
Technology
4
5k
Flutterアプリのセキュリティ対策を考えてみる
Kakeru Nakabachi
November 10, 2023
Tweet
Share
More Decks by Kakeru Nakabachi
See All by Kakeru Nakabachi
Flutterアプリで可用性を向上させたFeatureFlagの運用戦略とその方法
b4tchkn
0
76
Inside Flutter Text
b4tchkn
1
120
Textの構造を理解する/Understanding the Structure of Text
b4tchkn
3
1.9k
チームで採用しているriverpodを使ったFlutterのアーキテクチャとriverpod v1.0.0
b4tchkn
6
4.4k
Other Decks in Technology
See All in Technology
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
Engineer Career Talk
lycorp_recruit_jp
0
120
いざ、BSC討伐の旅
nikinusu
2
780
The Rise of LLMOps
asei
5
1.3k
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
160
Terraform未経験の御様に対してどの ように導⼊を進めていったか
tkikuchi
2
430
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
[FOSS4G 2024 Japan LT] LLMを使ってGISデータ解析を自動化したい!
nssv
1
210
AGIについてChatGPTに聞いてみた
blueb
0
130
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
490
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Teambox: Starting and Learning
jrom
133
8.8k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Automating Front-end Workflow
addyosmani
1366
200k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
A Tale of Four Properties
chriscoyier
156
23k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Code Reviewing Like a Champion
maltzj
520
39k
Transcript
スピーカー名 Flutterアプリの セキュリティ対策を考えてみる FlutterKaigi 2023 - November 10, 2023 batch
/ Kakeru Nakabachi
About me 2 Kakeru Nakabachi / batch CyberAgent, Inc. WinTicket,
Inc. b4tchkn
WINTICKETの紹介 3
WINTICKETの紹介 4 競輪とオートレースのネット投票サービス
AGENDA 1. セキュリティ対策ってなに? 2. Flutterがモバイル端末で動くしくみ 3. Flutterアプリ開発者ができる対策 4. まとめ
5
6
7 HotReloadすげえ
8 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう
9 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう 開発⼯数が半分!?
10 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう 爆速で開発してリリー スしよう! 開発⼯数が半分!?
11 HotReloadすげえ iOSもAndroidも同時 に開発できちゃう 爆速で開発してリリー スしよう! 開発⼯数が半分!? セキュリティについて考えられていますか?
本セッションのゴール 「うちのアプリもちゃんと対策しないとやばいかも‧‧‧」 「やってたつもりだけど、ここが⾜りていなかった‧‧‧」 12 Flutterアプリのセキュリティ考慮のきっかけに そしてより⾼品質なFlutterアプリ開発を
“Caution” セキュリティ対策を考えることは攻撃⼿法を知る必要がある 本セッションでもいくつか紹介しますが、絶対に悪⽤禁⽌です 13
1. セキュリティ対策ってなに?
セキュリティ対策ってなに? セキュリティ対策はわからないことだらけ なにをすれば⾃分たちの開発してるアプリはセキュリティ対策ができてるといえるか 15 その対策を講じたが、 それで完全なのか? そもそもどのような脅威 があるのか?
セキュリティ対策ってなに? それぞれ⽐較して検討‧対策することが重要 全てのセキュリティ対策をして完全なアプリをつくるのはほぼ不可能 16 攻撃者のコスト 発⽣時の被害 対策コスト
セキュリティ対策ってなに? 今回の対象プラットフォーム 17
Flutterコミュニティの セキュリティとの向き合い⽅ 18
セキュリティ対策ってなに? Identify:脆弱性を特定することで、主要なセキュリティリスクを追跡し優先順位付けする Detect:脆弱性スキャンなどの技術を使⽤して脆弱性を検出し、特定する Protect:ソースからの脅威から重要な資産を保護する Respond:脆弱性や攻撃を報告し、トリアージして対応プロセスを定義する Recover:インシデントを最⼩限に抑え、それを抑制させる⼒をつける https://docs.flutter.dev/security Flutterのセキュリティ戦略 19
セキュリティ対策ってなに? Flutterへの脆弱性報告のしかた security@flutter.devにメール 通常Issueで報告するとユーザーを 危険にさらす可能性があるためpublicな場で共有するのは避ける https://docs.flutter.dev/security https://github.com/flutter/packages/security FlutterのSecurity Policy 20
セキュリティ対策ってなに? Flutterチームの脆弱性処理プロセス https://github.com/flutter/packages/security FlutterのSecurity Policy 21
⼀般的なセキュリティ対策と標準について 22
セキュリティ対策ってなに? Open Worldwide Application Security Project ソフトウェアのセキュリティ向上に取り組む オープンソースソフトウェアコミュニティ https://owasp.org/ OWASP
23
セキュリティ対策ってなに? OWASP Japanもあるよう 3ヶ⽉に1回程度の頻度でイベント開催 github.com/owasp-jaでOWASPドキュメントの⽇本語化 https://owasp.org/www-chapter-japan/ OWASP 24
セキュリティ対策ってなに? 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
セキュリティ対策ってなに? モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 • MASVS - STORAGE • MASVS -
CRYPTO • MASVS - AUTH • MASVS - NETWORK • MASVS - PLATFORM • MASVS - CODE • MASVS - RESILIENCE OWASP MASVS 26
セキュリティ対策ってなに? あわせて⾒たいセッション - DroidKaigi 2023 https://2023.droidkaigi.jp/timetable/492846/ OWASP MASVS 27
セキュリティ対策ってなに? https://owasp.org/www-project-mobile-top-10/# OWASP Top 10 Mobile Risks 28
2. Flutterがモバイル端末で動くしくみ
Flutterがモバイル端末で動くしくみ Dartはどのようにモバイル端末で動作するか 30 DartがSwiftとかJava にトランスパイルさ れてる‧‧? Dartがそのまま動作 している‧‧? なんかコンパイルされて 変換されたものが動作して
いる‧‧? ⾃分たちのアプリが攻 撃された時、攻撃者に はなにが⾒える‧‧?
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
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
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
Flutterがモバイル端末で動くしくみ • Just-in-Time (JIT) → デバッグビルド時 ◦ 実⾏時にDartをネイティブコード(機械語)にコンパイル ◦ コンパイル時間が短い
◦ 起動時間が⻑い • Ahead-of-Time (AOT) → リリースビルド時 ◦ 事前にDartをコンパイル ◦ コンパイル時間が⻑い ◦ 起動時間が短い Dart VM 34
Flutterがモバイル端末で動くしくみ 純粋なDartの場合 JITとAOTどちらもDartをDart VMで動作させるためには、common front-end (CFE) で Kernel ASTと呼ばれる中間表現のバイナリに変換する必要がある https://mrale.ph/dartvm/
Dart VM 35
Flutterがモバイル端末で動くしくみ Kernel ASTを覗いてみる https://dart.dev/tools/dart-compile#kernel Dart VM 36
Flutterがモバイル端末で動くしくみ Flutterの場合(デバッグビルド) Kernelへのコンパイルと実⾏は 完全分離している CFEは前回のCFEの状態を再利⽤し 変更されたコードだけを再コンパイルできる DEVICEはflutter toolによって Kernelを受け取る https://mrale.ph/dartvm/
Dart VM 37
Flutterがモバイル端末で動くしくみ Flutterの場合(リリースビルド) AOTコンパイル時のプロセスでは、 TFAという静的解析が⾏われる https://mrale.ph/dartvm/ Dart VM 38
Flutterがモバイル端末で動くしくみ 抽象化した流れ まとめ 39 CFE Dart Kernel AST Flutter Engine
AOT コンパイル JIT コンパイル Dart VM
Flutterがモバイル端末で動くしくみ 抽象化した流れ まとめ 40 CFE Dart Kernel AST Flutter Engine
AOT コンパイル JIT コンパイル Dart VM デバッグビルド時は プロセスが永続化 リリースビルド時は TFAによる解析 Flutter Engine内で動く Dart VMのランタイム環境 で実⾏
3. Flutterアプリ開発者ができる対策
Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 • MASVS - STORAGE • MASVS -
CRYPTO • MASVS - AUTH • MASVS - NETWORK • MASVS - PLATFORM • MASVS - CODE • MASVS - RESILIENCE OWASP MASVS 42
Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 • MASVS - STORAGE • MASVS -
CRYPTO • MASVS - AUTH • MASVS - NETWORK • MASVS - PLATFORM • MASVS - CODE • MASVS - RESILIENCE OWASP MASVS 43
Flutterアプリ開発者ができる対策 MASVS-STORAGE: Storage モバイルアプリケーションは、APIキーなど、ローカルに保存するケースがある アプリの内部ストレージのようなプライベートな場所に保存されることもあれば、他のアプ リがアクセスできるパブリックフォルダに保存されることもある アプリが意図的に保存する機密データが、適切に保護できるようにする必要がある 44 MASVS -
STORAGE MASVS - STORAGE
Flutterアプリ開発者ができる対策 shared_preferences Key-Valueのシンプルなデータを保存 • Android ◦ SharedPreferences • iOS ◦
UserDefaults https://pub.dev/packages/shared_preferences 45 MASVS - STORAGE MASVS - STORAGE
Flutterアプリ開発者ができる対策 shared_preferences Key-Valueのシンプルなデータを保存 • Android ◦ SharedPreferences • iOS ◦
UserDefaults https://pub.dev/packages/shared_preferences 46 MASVS - STORAGE MASVS - STORAGE 端末がroot化やjailbreakされていると アクセスして⾒れる👁
Flutterアプリ開発者ができる対策 flutter_secure_storage データを暗号化して保存 • Android ◦ AESで暗号化 ◦ v5.0.0以降はEncryptedSharedPreferences •
iOS ◦ Keychain https://pub.dev/packages/flutter_secure_storage 47 MASVS - STORAGE MASVS - STORAGE
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
Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 • MASVS - STORAGE • MASVS -
CRYPTO • MASVS - AUTH • MASVS - NETWORK • MASVS - PLATFORM • MASVS - CODE • MASVS - RESILIENCE OWASP MASVS 49
Flutterアプリ開発者ができる対策 MASVS-NETWORK: Network Communication モバイルアプリがいかなる状況でも安全な接続ができることを保証する 開発者が特定の認証局のみ信頼して選択する状況をカバーする ⼀般的にcertificate pinningやpublic key pinningと呼ばれる
50 MASVS - NETWORK MASVS - NETWORK
Flutterアプリ開発者ができる対策 MASVS-NETWORK: Network Communication モバイルアプリがいかなる状況でも安全な接続ができることを保証する 開発者が特定の認証局のみ信頼して選択する状況をカバーする ⼀般的にcertificate pinningやpublic key pinningと呼ばれる
カバーできないと‧‧?🧐 51 MASVS - NETWORK MASVS - NETWORK
Flutterアプリ開発者ができる対策 TLS/SSL:通信内容を暗号化するプロトコル 第三者の機関から証明書が発⾏されてサーバー側を認証し、 証明書と公開鍵がクライアントに送られてくる モバイルアプリでApiクライアントライブラリを通して通信する際、HTTPSで通信している ことはわかるが、正しい証明書か判断が難しい 52 TLS/SSL(https)は完全に安⼼ではない MASVS -
NETWORK
Flutterアプリ開発者ができる対策 サーバーとクライアントの間に攻撃者が割り込んで、証明書と公開鍵を不正なものにすり替 えて通信内容を盗聴し、改ざんする 送られてくる証明書に依存している状態 →事前に信頼できる証明書しか受け⼊れたくない 53 中間者攻撃 (MITM 攻撃) ユーザー
攻撃者 サーバー 問い合わせ 盗聴 証明書 すり替えられた証明書 すり替えられた証明書で 暗号化してリクエスト 正規の証明書で 暗号化リクエスト 復号して盗聴 MASVS - NETWORK
Flutterアプリ開発者ができる対策 SSL Pinningとも呼ばれる サーバーから送られてきた正規の認証局から発⾏されたSSL証明書(公開鍵)を予めクライ アントでもって(ピン留めして)おくこと 認証局が発⾏した証明書に依存する代わりに、保存されている証明書に依存するように 54 Certificate Pinning ユーザー
攻撃者 サーバー 正規の証明書 すり替えられた証明書 ピン留めした証明書 違った場合、通信拒否 MASVS - NETWORK
Flutterアプリ開発者ができる対策 http_certificate_pinning https://pub.dev/packages/http_certificate_pinning 55 Certificate Pinning MASVS - NETWORK
Flutterアプリ開発者ができる対策 例)https://connpass.com/api/v1/event/ をGETしてみる 56 Certificate Pinning MASVS - NETWORK
Flutterアプリ開発者ができる対策 57 Certificate Pinning GETリクエスト 正規のレスポンスかは不明 MASVS - NETWORK
Flutterアプリ開発者ができる対策 証明書のFinger Printを取得 58 Certificate Pinning MASVS - NETWORK
Flutterアプリ開発者ができる対策 59 Certificate Pinning Before After MASVS - NETWORK
Flutterアプリ開発者ができる対策 60 Certificate Pinning 取得したFinger Print 正規のレスポンスを取得可能 MASVS - NETWORK
Flutterアプリ開発者ができる対策 不正なFinger Printの場合 61 Certificate Pinning 適当なFinger Print エラーが起きて取得不可能 MASVS
- NETWORK
Flutterアプリ開発者ができる対策 運用上のデメリット • TLS/SSL証明書は有効期限がある • TLS/SSL証明書が更新されるたびにFinger Printの更新が必要 更新時は基本的に強制アップデートが必要 → サーバーなどリモートデータソースに保存する運用をすれば回避可能
62 Certificate Pinning MASVS - NETWORK
Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 • MASVS - STORAGE • MASVS -
CRYPTO • MASVS - AUTH • MASVS - NETWORK • MASVS - PLATFORM • MASVS - CODE • MASVS - RESILIENCE OWASP MASVS 63
Flutterアプリ開発者ができる対策 MASVS-PLATFORM: Platform Interaction モバイルアプリのセキュリティはモバイルプラットフォームとの相互作⽤に⼤きく依存して いるが、これらのメカニズムは攻撃者や他のインストールされたアプリによって悪⽤される 可能性がある パスワードなどの機密データは、アプリのユーザーインターフェースに表⽰されることが多 い ⾃動⽣成されるスクリーンショットなどによる偶発的な情報漏洩などプラットフォームのメ
カニズムを通じて、このデータが意図せず漏洩しないようにする必要がある 64 MASVS - PLATFORM MASVS - PLATFORM
Flutterアプリ開発者ができる対策 モバイル端末はバックグラウンドにいるアプリのスナップショットを保存して表⽰ 機密情報が表⽰されると、ユーザーが意図せず情報漏洩する危険性 65 MASVS - PLATFORM MASVS - PLATFORM
Flutterアプリ開発者ができる対策 アプリがバックグラウンドに移動した時、Widgetを切り替える 66 MASVS - PLATFORM MASVS - PLATFORM
Flutterアプリ開発者ができる対策 アプリがバックグラウンドに移動した時、Widgetを切り替える secure_application https://pub.dev/packages/secure_application 67 MASVS - PLATFORM MASVS -
PLATFORM
Flutterアプリ開発者ができる対策 モバイルアプリセキュリティに関する業界標準を 7つのセキュリティ対策グループで表現 • MASVS - STORAGE • MASVS -
CRYPTO • MASVS - AUTH • MASVS - NETWORK • MASVS - PLATFORM • MASVS - CODE • MASVS - RESILIENCE OWASP MASVS 68
Flutterアプリ開発者ができる対策 MASVS-RESILIENCE: Resilience Against Reverse Engineering and Tampering コードの難読化、アンチデバッグ、アンチタンパリング(改ざん)などの深層防御対策 リバースエンジニアリングや特定のクライアントサイド攻撃に対するアプリの耐性を⾼める
ために重要である アプリに何重ものセキュリティ制御を加えることで、攻撃者がリバースエンジニアリングを して、そこから貴重な知的財産や機密データを抽出することをより困難にする 69 MASVS - RESILIENCE MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 リバースエンジニアリングする2つの⼿法 Reverse Engineering Flutter 70 動的解析 dynamic analysis アプリ実⾏中にバイナリを解析
静的解析 static analysis アプリのバイナリを実⾏せず解析 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 reFlutter Flutterライブラリのパッチバージョンを使⽤して、Flutterアプリのリバースエンジニアリン グを⽀援する動的解析ツール socket.cc:トラフィックの監視と傍受のためのパッチ dart.cc:クラス、関数、いくつかのフィールドを表⽰するように https://github.com/Impact-I/reFlutter Reverse Engineering Flutter
71 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 https://swarm.ptsecurity.com/fork-bomb-for-flutter/ Reverse Engineering Flutter 72 RE.apk signed RE.apk MASVS
- RESILIENCE
Flutterアプリ開発者ができる対策 Traffic monitoring and interception ソースコードのどのあたりで どういうリクエストを送信しているかわかる 処理の過程でどんな値が受け渡されてる? Reverse Engineering
Flutter 73 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 Frida JSコードをpythonのファイルに埋め込んでHookしたいコードのオフセット情報をもとに pythonでコードをHookして実⾏可能な動的解析ツール Hook:アプリケーション外に定義されたスクリプトを実⾏ 実⾏中のDartの関数の引数を覗いたり、返り値を変更したりできる https://frida.re/ Reverse Engineering Flutter
74 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 flutter logsコマンド 端末をPCと接続してFlutter製アプリを実行するとログが覗ける👀 print()を使って機密情報をプリントしている場合危険 FlutterKaigi 2023を実行した結果↓ https://docs.flutter.dev/reference/flutter-cli 75 MASVS
- RESILIENCE Reverse Engineering Flutter
Flutterアプリ開発者ができる対策 リバースエンジニアリングする2つの⼿法 Reverse Engineering Flutter 76 動的解析 dynamic analysis アプリ実⾏中にバイナリを解析
静的解析 static analysis アプリのバイナリを実⾏せず解析 MASVS - RESILIENCE
Flutterがモバイル端末で動くしくみ 抽象化した流れ まとめ 77 CFE Dart Kernel AST Flutter Engine
AOT コンパイル JIT コンパイル Dart VM デバッグビルド時は プロセスが永続化 リリースビルド時は TFAによる解析 Flutter Engine内で動く Dart VMのランタイム環境 で実⾏
Flutterアプリ開発者ができる対策 Reverse Engineering Flutter 78 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 Reverse Engineering Flutter 79 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 Android端末内のapkの取得 https://developer.android.com/studio/command-line/adb?hl=ja Reverse Engineering Flutter 80 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 Android端末内のapkの取得 https://developer.android.com/studio/command-line/adb?hl=ja Reverse Engineering Flutter 81 MASVS - RESILIENCE
assetが含まれる
Flutterアプリ開発者ができる対策 Android端末内のapkの取得 https://developer.android.com/studio/command-line/adb?hl=ja Reverse Engineering Flutter 82 MASVS - RESILIENCE
ソースコードが含ま れる
Flutterアプリ開発者ができる対策 デバッグビルド時のunzipしたarm64_v8a.apk Reverse Engineering Flutter 83 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 デバッグビルド時のunzipしたapk Kernelはビルドプロセスでkernel_blob.binとしてまとめられるよう コメントつきのソースコードを覗くことができてしまう デバッグビルドしたapkをリリースするとコード流出に繋がる⚡⛑ Reverse Engineering Flutter 84 MASVS
- RESILIENCE
Flutterアプリ開発者ができる対策 リリースビルド時のunzipしたarm64_v8a.apk kernel_blob.binは存在しない Reverse Engineering Flutter 85 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 リリースビルド時のunzipしたarm64_v8a.apk lib/x86_64/libapp.soが存在する Reverse Engineering Flutter 86 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 リリースビルド時のunzipしたarm64_v8a.apk Reverse Engineering Flutter 87 • libapp.so ◦ 実際のアプリケーションコード
• libflutter.so ◦ Flutter Engineを含むFlutter SDK側の コード MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 libapp.soの解析 Reverse Engineering Flutter 88 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 libapp.soの解析 専⽤の解析ツールがある https://github.com/rscloura/Doldrums https://github.com/mildsunrise/darter どちらも現状、Dart 2.5や2.10でしか動作しない Reverse Engineering Flutter
89 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 FlutterKaigi/conference-app-2023 - base.apk unzip_base_apk/assets/flutter_assetes/assets/svg 90 Reverse Engineering Flutter
Flutterアプリ開発者ができる対策 FlutterKaigi/conference-app-2023 - arm64_v8a.apk 91 Reverse Engineering Flutter
Flutterアプリ開発者ができる対策 FlutterKaigi/conference-app-2023 - arm64_v8a.apk 92 Reverse Engineering Flutter
Flutterアプリ開発者ができる対策 Reverse Engineeringの対策 https://docs.flutter.dev/deployment/obfuscate Flutter Obfuscate 93 MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 難読化と呼ばれるDartを⼈間が読めないコードに変換する処理 元のDartとの対応を表したシンボルファイルも出⼒され、解読したいときはそれをもとに解 読する Flutter Obfuscate 94 main aBcD print(ʻHello
World.’); eFgHIJK 難読化 シンボルファイル(イメージ) MASVS - RESILIENCE
Flutterアプリ開発者ができる対策 エラー監視ツール使⽤時の注意 エラー内容も難読化されて送信されるため、ツールごとに⽤意されている⽅法でシンボル ファイルをアップロードする必要がある アップロードしないと、ツールが解読できずエラー内容も難読化されてしまい、 StackTraceなど追えない Flutter Obfuscate 95 MASVS
- RESILIENCE
3. まとめ
“Caution” セキュリティ対策を考えることは攻撃⼿法を知る必要がある 本セッションでもいくつか紹介しますが、絶対に悪⽤禁⽌です 97
まとめ • 攻撃者のコスト‧発⽣時の被害‧対策コストを⽐較して検討することが重要 • アプリのセキュリティ対策はOWASP MASの業界標準が参考になる • 今回紹介した内容は⼀部にすぎない • すべての攻撃を防ぐことは不可能に近いが、攻撃の難易度を上げる対策をすることが
⼤切 • Obfuscateは対応が簡単で、エラー監視ツールが対応していれば効果抜群 • セキュリティ考慮して⾼品質なFlutterアプリ開発をみんなで⽬指していきましょう💪 98
本セッションのゴール 「うちのアプリもちゃんと対策しないとやばいかも‧‧‧」 「やってたつもりだけど、ここが⾜りていなかった‧‧‧」 99 Flutterアプリのセキュリティ考慮のきっかけに そしてより⾼品質なFlutterアプリ開発を
さいごに https://developers.cyberagent.co.jp/blog/?s=winticket+flutter 100 WINTICKETではたくさんのFlutterに関わる記事を執筆しています
参考 • 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
参考 • 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
103