web-dev-qa-db-ja.com

安全Androidアプリ開発

私はAndroidアプリ開発から始めています。ほとんどのアプリは機密データを処理するため、適切なセキュリティ対策を講じていることを確認したいと思います。

アプリとアプリが処理するデータを保護するために、どのようなセキュリティ対策を講じる必要がありますか? (正確に言えば、私の最悪のシナリオのスレッドモデルは、アプリによって処理されたデータにできる限りの方法でアクセスしようとする資金の多い攻撃者です)

そんなこと知ってる、

  • 署名鍵は安全なままでなければならない
  • データはアプリのサンドボックス内に保存する必要があります(できれば暗号化)
  • データはエンドツーエンドで暗号化する必要があります

しかし、たとえば、開発プラットフォームとしてWindowsを使用する必要がありますか、この場合はLinuxの方が適しています。

私が作成する予定の種類のアプリは、主にデータ転送および通信アプリです。

どんな考えでも大歓迎です!

4
Jasper Weiss

開発プラットフォームは、アプリのセキュリティとはほとんど関係がありません。開発マシンが適切に保護されていないか、直接ターゲットにされていない場合は、そうなる可能性があります。

従わなければならない最大のルールは、独自の暗号を実装しないことです。よく知られ、テストされたライブラリを使用します。

4
John

いくつかのことが頭に浮かびます。

公開すべきではないものをローカルに保管しないでください。セッション、Cookie、パスワード、アカウントの詳細などのデータ。モバイルアプリからデータを取り出して再利用する方法は数多くあります。経験則として、そのユーザーに固有のデータ(ユーザーのセッション、ユーザーのID、ユーザーのアカウント番号)である場合、すべてのユーザーにとって同じものよりもデバイスでのキャッシュに適しています。 CDNからメディアをストリーミングするためのライセンスキー、またはWebサービス(OAuthの1つ)用のAPIキー、またはそのようなものがあるとします。この種の共有シークレットは、アプリに埋め込んだり、アプリのローカルストレージにキャッシュしたりしないでください。 ここに失敗の例があります。

サーバーサイドコンポーネントは、それに対するすべてのAPI呼び出しを認証および承認する必要があることに注意してください。オープンオーダーの表示、使用可能なファイルの確認などのマイクロサービスを作成し、有効なセッションを必要としないようにするのが一般的です。また、有効なセッションがある限り、これらのマイクロサービスがあらゆる種類のリクエストを受け入れるようにすることも一般的です。そのため、ユーザーが何を表示すべきか、何を表示すべきでないかを決定するために、モバイルアプリに依存しないようにしてください。これはサーバー側で実施する必要があります。

それが頭に浮かぶ2つの重要な点です。他にもありますが、返答として本を差し上げることはできません。

2
Paco Hope