$30 off During Our Annual Pro Sale. View Details »

Flutterアプリのセキュリティ対策を考えてみる

 Flutterアプリのセキュリティ対策を考えてみる

Kakeru Nakabachi

November 10, 2023
Tweet

More Decks by Kakeru Nakabachi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. WINTICKETの紹介
    3

    View Slide

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

    View Slide

  5. AGENDA

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

    View Slide

  6. 6

    View Slide

  7. 7
    HotReloadすげえ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    18

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. セキュリティ対策ってなに?
    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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  57. Flutterアプリ開発者ができる対策
    57
    Certificate Pinning
    GETリクエスト

    正規のレスポンスかは不明

    MASVS - NETWORK

    View Slide

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

    View Slide

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

    View Slide

  60. Flutterアプリ開発者ができる対策
    60
    Certificate Pinning
    取得したFinger Print

    正規のレスポンスを取得可能

    MASVS - NETWORK

    View Slide

  61. Flutterアプリ開発者ができる対策
    不正なFinger Printの場合
    61
    Certificate Pinning
    適当なFinger Print

    エラーが起きて取得不可能

    MASVS - NETWORK

    View Slide

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

    View Slide

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

    View Slide

  64. Flutterアプリ開発者ができる対策
    MASVS-PLATFORM: Platform Interaction
    モバイルアプリのセキュリティはモバイルプラットフォームとの相互作⽤に⼤きく依存して
    いるが、これらのメカニズムは攻撃者や他のインストールされたアプリによって悪⽤される
    可能性がある
    パスワードなどの機密データは、アプリのユーザーインターフェースに表⽰されることが多

    ⾃動⽣成されるスクリーンショットなどによる偶発的な情報漏洩などプラットフォームのメ
    カニズムを通じて、このデータが意図せず漏洩しないようにする必要がある
    64
    MASVS - PLATFORM
    MASVS - PLATFORM

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  96. 3. まとめ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  101. 参考
    ● 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

    View Slide

  102. 参考
    ● 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

    View Slide

  103. 103

    View Slide