web-dev-qa-db-ja.com

Google API Keyは保護する必要がある機密情報ですか?

位置情報(Android、iOSアプリ)にGoogle APIを使用しています。キーをハードコードできますか?それとも保護すべきですか?それが機密である場合、なぜそれが機密であり、攻撃者はこれをどのように悪用することができますか?

8
Ocelot

Google Maps SDK for iOSは、アプリのすべてのエンドユーザーがHTTPSプロキシを使用してアプリのAPIキーを見つけられるように、アプリのAPIキーをGoogleに送信します。 Macで開発している場合は、 Charles プロキシを使用して、これを自分で簡単に試すことができます。

  1. Charlesを、clients4.google.comのプロキシとして機能するように設定します。 Macでは、完全なSSLプロキシサポートを備えた「代替バージョン」を使用していることを確認する必要があります このページ からダウンロードできます。

  2. IOSデバイスで このリンク にアクセスして、iOSデバイス用のCharles SSL証明書をダウンロードしてインストールします。

  3. HTTPプロキシを使用するようにiOSデバイスを構成します(これはWiFiネットワークの詳細オプションで使用でき、WiFiネットワーク名の横にある小さな「i」ボタンからアクセスできます)。 Charlesアプリケーションを実行しているMacのIPアドレスにプロキシサーバーを設定し、ポートを8888に設定します。

  4. Google Maps SDK for iOSを使用する(または任意の)iOSアプリを実行します。

Charlesでは、POSTリクエストがclients4.google.comに送信されます。APIキーはリクエストの本文の一部として表示されます。

だから、あなたの質問に答えるには:

  1. セキュリティの観点からは、キーをハードコードしても問題はありません。エンドユーザーはアプリ自体を掘り下げることなく、アプリのマップAPIキーを取得できます。利便性の観点から、自分のサーバーからマップAPIキーをフェッチする方がよい場合があります。これにより、マップAPIキーを更新する必要がある場合に、クライアントアプリの新しいバージョンをリリースする必要がなくなります。

  2. Maps APIキーは、Googleがそれを機密情報として扱わないという意味で、機密ではありません。そして実際、Googleがキー自体ではなくAPIにハッシュを送信するなどしてキーを難読化したとしても、ジェイルブレイクされたデバイスとデバッガーを備えた確定したエンドユーザーは、渡したパラメーターを検査することでAPIキーを取得できます+[GMSServices provideAPIKey:]。したがって、APIキーを機密情報として扱うtryingにポイントがあるかどうかは疑問です。

  3. 攻撃者は、アプリから送信されているように見えるGoogle Maps APIにリクエストを送信することにより、APIキーの公開を悪用する可能性があります。悪意のあるユーザーのグループがAPIをスパムして、アプリの「礼儀」帯域幅を使い果たしたり、Google Maps APIで課金が有効になっている場合は帯域幅の請求を実行したりする可能性があります。あなた(またはGoogle)が帯域幅の使用状況を注意深く監視している場合、アプリの(見かけの)Maps APIの使用率が急上昇したときにMaps APIキーを取り消して置き換えることにより、このような攻撃から部分的に防御できます。

4
Aaron Golden

キーをハードコードできますか?

これについて詳しく説明してもらえますか?キーをURLにハードコーディングする場合は、新しいキーを作成すると、コードレベルでキーを変更することになります。これをコードレベルで変更することは回避できます。

保護する必要がありますか?

ほとんどの場合、リクエストクエリの一部であるキーは公開されていません。 (代わりにPOSTを使用する場合でも、この情報を取得する方法はあります)。ただし、キーを使用したリクエストがドメイン(HTTPリファラー)からのものでない限り、Googleはエラーを返します。

攻撃者はこれをどのように利用できますか?

簡単な使用例として、ユーザーごとの制限が正しく設定されていないと仮定すると、アクセス可能なAPIキーを使用してサービス拒否攻撃を開始できます。

2
katrix