LeoAndo / development-conference-memo

0 stars 0 forks source link

Securing Flutter Apps | OWASP Top 10 for mobile & RASP explained #273

Open LeoAndo opened 1 year ago

LeoAndo commented 1 year ago

https://www.youtube.com/watch?v=DYwn4KciL1U&list=PLjxrf2q8roU3LvrdR8Hv_phLrTj0xmjnD&index=26

Flutter セキュリティリスクTop10

詳しい話はここにまとまっている。 https://docs.flutter.dev/security

LeoAndo commented 1 year ago

不適切なプラットフォームの使用

iOSやAndroidではアプリが既存機能を使用していないか、間違って使用していても使用できる様々な機能が用意されている。 それは不適切な使用法と呼ばれている。

具体例:

解決方法:

LeoAndo commented 1 year ago

安全でないデータ ストレージ

具体例:

解決方法:

機密データの例:

スクリーンショット 2023-02-01 10 30 06

これらの問題を解決できる幾つかのパッケージが存在する。これを使うと良い。

flutter_secure_storage Flutter Secure Storage は、安全なストレージにデータを保存するための API を提供します。 Keychain は iOS で使用され、KeyStore ベースのソリューションは Android で使用されます。

hive 純粋な Dart で記述され、AES-256 を使用して強力に暗号化された軽量で超高速のキー値データベース。

バックグラウンド スナップショット保護

スナップショット保護には以下のパッケージを使うと良い。 secure_application

LeoAndo commented 1 year ago

安全でない通信

具体例:

解決方法:

証明書のピン留め

http_certificate_pinning

上記パッケージを使うと、 証明書のピン留めにより、モバイル アプリケーションは、期待値 (ピン) と一致する有効な証明書を持つサーバーのみに通信を制限できます。この「期待される」値と一致しないサーバーとの通信が試行された場合、接続はすぐに終了します。

LeoAndo commented 1 year ago

安全でない認証

古典的な例は、モバイルがアクセストークンをリレーせずに匿名で実行するバックエンドAPIサービスリクエストです。 さらにパスワードをクリアテキストでローカルに保存するアプリがまだあります。

具体例:

解決方法:

パッケージ local_auth

LeoAndo commented 1 year ago

不十分な暗号化

安全でないアルゴリズムや非推奨のアルゴリズムの使用

https://youtu.be/DYwn4KciL1U?list=PLjxrf2q8roU3LvrdR8Hv_phLrTj0xmjnD&t=769 これらの代わりに、 開発者の身元を公開する可能性のあるデータはすべて暗号化する必要があります。 key.jks や keystore.properties などの機密ファイルを GPG で暗号化します。 リポジトリ内の暗号化されていない機密データを追跡することは避けてください。

パッケージ (プレーンテキストの暗号化) https://pub.dev/packages/encrypt https://pub.dev/packages/crypt

LeoAndo commented 1 year ago

安全でない承認

承認:識別された人物の検証を扱う。

具体例: ユーザーの確認と権限の付与に失敗します。 クライアント側の承認。

解決方法: バックエンドでリクエストを確認します。 デバイス上のデータや保存したものではなく、バックエンドの情報を使用して、認証されたユーザーの役割と権限を検証します。

LeoAndo commented 1 year ago

クライアントコードの品質

具体例: コードの品質をチェックせずにサードパーティ ライブラリを統合する。 自動化されたツールではなく、手動のチェックに依存しています。

解決方法: 適切なコーディング プラクティスを実施する (一貫したパターンを考え出す)。 静的コード分析を実行します。 自動化ツールを使用して、メモリリーク、バッファ オーバーフロー、およびコード実行をテストします。

LeoAndo commented 1 year ago

コードの改ざん

具体例: ハッカーが悪意のあるコンテンツを含むようにアプリのバイナリを変更し、バックドアをインストールします。

解決策: チェックサム、デジタル署名、コードの強化、およびその他の検証方法の実装により、不正なアプリの実行を防止する改ざん防止技術を実装します。

package https://pub.dev/packages/flutter_jailbreak_detection

LeoAndo commented 1 year ago

リバースエンジニアリング

具体例: IDA Pro や Hopper などのツールを使用してコードの難読化を解除します。

解決策: アプリケーションを逆コンパイルできるかどうかを確認してください。 堅牢な難読化 (メタデータを含む) を確保します。 バイナリ パッケージを使用して、攻撃者がコードを逆コンパイルできないようにします。 デバッグ ツールをブロックします。

アプリの難読化方法 https://docs.flutter.dev/deployment/obfuscate

LeoAndo commented 1 year ago

余分な機能

具体例: 開発者が誤ってパスワードをハイブリッド アプリのコメントとして含める場合があります。 テスト中に 2 要素認証を無効にします。

解決策: アプリの構成設定を調べて、非表示のスイッチを見つけます。 すべてのテスト コードがアプリの最終製品ビルドに含まれていないことを確認します。 モバイル アプリがアクセスするすべての API エンドポイントを調べて、これらのエンドポイントが適切に文書化され、公開されていることを確認します。 すべてのログ ステートメントを調べて、バックエンドについて過度に説明的なものがログに書き込まれていないことを確認します。

LeoAndo commented 1 year ago

5つの異なる攻撃がある!

スクリーンショット 2023-02-05 10 37 02