web-dev-qa-db-ja.com

OAuth Androidアプリによって保存された消費者の秘密)を難読化する必要がありますか?

私のAndroidアプリにはOAuth TwitterのAPIの消費者シークレットが含まれています。現時点では.propertiesファイルはプレーンテキストであるため、誰かがAPKで検索するのに労力はかかりません。

それを隠すための手順を実行する必要がありますか(rot13のように、または難読化されたJavaコード)に格納されます)?

人々は通常どのようにOAuthシークレットをAndroidアプリで配布/保存しますか?シークレットが盗まれて悪用されることはどれほど一般的ですか?

43
Pēteris Caune

本当の問題は、攻撃者がそれを盗むことから何を得るのかということです...

秘密を守るために最善を尽くす必要がありますが、最終的には、意欲的なハッカーはインストールされたアプリでいつでも秘密に到達できます。つまり、それは秘密の価値と抽出の難しさの違いです。

クライアントシークレットの価値は、アプリケーションになりすますことです。ユーザーデータへのアクセスは許可されません。ただし、Twitterは以前に承認されたアプリへの資格情報の自動発行(Twitterフローでのサインイン)をサポートしているため、攻撃者は秘密のWebアプリを構築し、ブラインドリダイレクトを使用してユーザーデータを盗む可能性があります。

Twitterの実装の問題は、アプリケーションの性質について開発者に尋ねないことです。もしそうなら、彼らはそもそもあなたに秘密を発行せず、あなたのクライアント資格情報を使用してWebアプリケーションを構築し、すでにそれを承認したユーザーからデータを盗む人をブロックします。

難読化は1つのオプションですが、弱いオプションです。シークレットをAPIプロキシとして機能するWebサーバーに移動することも別の方法ですが、アプリがプロキシサーバーに対して認証する必要があるため、問題は別の場所に移動するだけです。ただし、ユーザーにサイトへのログインを要求する場合(Webビューを介してTwitterを使用してログインできる)、このパターンはかなり安全です。このように、プロキシを悪用しようとする誰かが、ユーザーにサービスのアカウントを開く必要がありますが、これはあまり魅力的ではありません。

要するに、先に進んでそれを難読化します。痛くはありません。プロキシパターンの使用も検討してください。そして多分Twitterに彼らのセキュリティポリシーが「良くない」ことを知らせてください。

41
Eran Hammer

私は間違いなく この分析 OAuth著者の1人、Eran Hammer-Lahav、別の引用) TwitterのOAuth秘密の問題

私のアドバイスは、キーを難読化して、簡単に抽出できないようにし、チャンスやスパマーから安全にすることです。

Hammer-Lahavの意見は、OAuthシークレットは取り消されるべきではなく、単に統計を収集するために使用されるべきであるというものです。Twitterがこのアドバイスに従っていることを願っています。

4