web-dev-qa-db-ja.com

人気のアプリは、モバイルアプリからサーバーへのユーザーリクエストをどのように認証しますか?

データの受信/設定のために.Net APIに接続するAndroidアプリケーションがあるとします。私が抱えている混乱は、ユーザーに初めてサインアップ/ログインし、APIにリクエストを送信するたびに認証する方法に関するものです。

  • ユーザー名/パスワードベースの認証を使用するだけでは十分に安全ではありませんか?
  • もちろん、セキュリティ上の理由から、そのユーザー名/パスワードをデバイスに保存できませんか?
  • サインアップ時にすべてのユーザーに対してGUIDを発行し、デバイスに保存して、APIリクエスト中に毎回取得する必要がありますか?

他にどのようなパターンが利用可能で、最も効率的で安全なのか、そのためのプロセスフローが必要なだけです。 Facebook、FourSquare、Twitterなどの有名なAndroidアプリケーションを使用して、モバイルアプリケーションからサーバーへのすべての要求を認証する方法を教えてください。

公開情報でない場合は、事前に申し訳ありません。

103
Maven

彼らは「トークン」ベースのセキュリティシステムを使用していると思うので、パスワードは実際にはどこにも保存されず、認証に初めて使用されます。そのため、アプリは最初に(SSLを介して)ユーザー名/パスワードを送信し、サーバーはアプリが保存するトークンを返します。後続の同期試行では、トークンが最初に送信され、サーバーはそれが有効であることを確認してから、他のデータの投稿を許可します。

サーバーが認証試行を再要求できるように、トークンには有効期限が必要です。

Androidフレームワーク内から同期アダプターに接続すると、内部ですべてを同期および認証できるようになります。

http://developer.Android.com/training/sync-adapters/creating-sync-adapter.html

デバイスの[設定]でアカウントを確認すると、意味がわかります。

45
simon

基本的に、これらの有名なOAuthプロトコル(1)/フレームワーク(2)を使用します。標準である必要がありますが、これらはそれぞれこのプロトコル/フレームワークの実装が異なります。したがって、統合に関しては非常に注意する必要があります。

例:Dropboxは引き続きOAuth 1を使用し、最近OAuth 2のサポートを思いつきました。

答えに戻ると、ペテルパンが述べたように、それは認証のトークンベースの方法であることが一度だけのものであり、式の外にあります。

この背後にある興味深いことは、クライアントアプリケーションがユーザー名やパスワードを保持できるようにするのではなく、リソースアクセススコープを定義できることです。これは危険です。

これは、これがどのように機能するかの基本図です。

enter image description here

私は最近この分野で働いているので、これについての詳細を取得した後、私は答えを更新します:)

18
diyoda_

私はまったく同じものを探していて、グーグルの方法を発見しました、ペテルパンのようなものが、Google APIを介して。このリンクとGoogleを試してみてください、私も始めています!新しい情報を投稿します!

http://developer.Android.com/google/auth/http-auth.html

3
Vitor Mendes

私は初心者ですが、与えられた質問の論理的な解決策を提供しようとします。

2つのオプションがあります。[1]すべてのURIに対して、ユーザーの入力された資格情報が検証され、ユーザーがリソースにアクセスする場所で、http認証が実行されます。

[2]別のアプローチとして、ユーザーを認証し、すべての認証で一意のトークンを生成するという方法もあります。生成されたトークンを使用して、ユーザーはリソースにアクセスします。

どのアプローチがモバイルアプリケーションに最適であるかはわかりませんが。

3
imbond

認証の例 は、開始するのに適した場所です。 Androidはアカウントマネージャーに資格情報を保存します。Androidの設定でアカウントを表示できます。これにより、トークンが自動的に保存され、有効期限が切れていたり欠落している場合はユーザーに資格情報の入力が求められます。トークンの更新などが行われます。 AndroidのAccountAuthenticatorActivityを拡張することは、シリアル化されたデータを解析してレイアウトに戻し、インターネットに戻すための優れたヘルパーです。

3
Pomagranite

ユーザー名/パスワードベースの認証を使用するだけでは十分に安全ではありませんか?

いいえ、あなたはだけを識別しているはAPIサーバーにアクセスしていますが、_ what _は識別していませんはそれにアクセスしています。

WHOとWHATの違いは、APIサーバーにアクセスすることです

WHOWHATAPIサーバーにアクセスしているので、この写真を使用してみましょう:

Man in the Middle Attack

意図された通信チャネルは、悪意のない正当なユーザー、改ざんされていないバージョンのモバイルアプリを使用し、中間者に攻撃されることなくAPIサーバーと直接通信する、期待どおりに使用されているモバイルアプリを表します。

実際のチャネルは、モバイルアプリの再パッケージ化されたバージョンを使用している可能性のある悪意のある正当なユーザー、モバイルアプリの正規バージョンを使用しているハッカー、中間者がそれを攻撃している方法などAPIに対する攻撃を自動化できるようにするために、モバイルアプリとAPIサーバー間の通信が行われています。他にも多くのシナリオが考えられますが、ここでは各シナリオを列挙しません。

すでにWHOWHATは同じではありませんが、そうでない場合はすぐに明らかになります。

WHOは、OpenID ConnectやOAUTH2フローの使用など、いくつかの方法で認証、承認、識別できるモバイルアプリのユーザーです。

OAUTH

一般に、OAuthは、リソース所有者に代わってサーバーリソースへの「安全な委任アクセス」をクライアントに提供します。リソース所有者が、資格情報を共有せずにサーバーリソースへのサードパーティアクセスを許可するプロセスを指定します。 OAuthは、Hypertext Transfer Protocol(HTTP)で動作するように特別に設計されており、リソース所有者の承認を得て、承認サーバーがサードパーティクライアントにアクセストークンを発行できます。次に、サードパーティはアクセストークンを使用して、リソースサーバーでホストされている保護されたリソースにアクセスします。

OpenID Connect

OpenID Connect 1.0は、OAuth 2.0プロトコルの上にあるシンプルなIDレイヤーです。これにより、クライアントは、承認サーバーによって実行された認証に基づいてエンドユーザーの身元を確認でき、相互運用可能なRESTのような方法でエンドユーザーに関する基本的なプロファイル情報を取得できます。

ユーザー認証はAPIサーバーにがAPIを使用していることを知らせますが、リクエストの発信元WHATあなたが期待する、モバイルアプリのオリジナルバージョン。

ここで、がAPIサーバーを呼び出していることを識別する方法が必要です。ここでは、ほとんどの開発者が考えるよりも難しいことがあります。 WHATは、APIサーバーにリクエストを送信するものです。それは本当にモバイルアプリの本物のインスタンスなのでしょうか、それともボット、自動化されたスクリプト、またはPostmanのようなツールを使用してAPIサーバーを手動で突く攻撃者ですか?

驚いたことに、モバイルアプリの再パッケージ版や、アプリケーションが提供するサービスをゲーム化して活用しようとしている自動スクリプトを使用している正当なユーザーの1人である可能性があることに気付くかもしれません。

まあ、WHATを識別するために、開発者は通常モバイルアプリのコードにハードコーディングするAPIキーに頼る傾向があります。一部の開発者は、モバイルアプリで実行時に余分な距離を移動してキーを計算するため、静的なシークレットがコードに埋め込まれている前者のアプローチとは対照的に、ランタイムシークレットになります。

上記の記事は、「モバイルアプリにAPIキーが必要な理由」というタイトルの記事から抜粋したもので、完全に読むことができます こちら 、これはAPIキーに関する一連の記事の最初の記事です。

クライアントデバイスへの機密データの保存

もちろん、セキュリティ上の理由から、そのユーザー名/パスワードをデバイスに保存できませんか?サインアップ時にすべてのユーザーに対してGUIDを発行し、デバイスに保存して、APIリクエスト中に毎回取得する必要がありますか?

デバイスに保存したものは、暗号化されていても、FridaやXposedなどのツールを使用して実行時にリバースエンジニアリングできます。

フリーダ

ブラックボックスプロセスに独自のスクリプトを挿入します。関数をフックし、暗号化APIをスパイし、プライベートアプリケーションコードをトレースします。ソースコードは不要です。編集し、保存をクリックして、即座に結果を確認します。コンパイル手順やプログラムの再起動なし。

xPosed

Xposedは、APKに触れることなくシステムとアプリの動作を変更できるモジュールのフレームワークです。モジュールが異なるバージョンやROMでも変更なしで機能できることを意味するため、これは素晴らしいことです(元のコードが

デバイスでは、攻撃者はプロキシを使用して中間者攻撃を実行し、WHATまたはWHO記事で示しているように APIキーを攻撃者と一緒に盗む

JNI/NDKなどの高度な手法を使用してモバイルアプリコードでAPIキーを非表示にすることはできますが、APIキーを盗むためにMitM攻撃を実行することを妨げません。実際、MitM攻撃は、開発者以外でも達成できるほど簡単です。

だから今何...私はAPIサーバーが悪用されるのを防ぐことができない点まで運命づけられていますか?静かではないので...希望はまだ存在します!!!

可能な解決策

Facebook、FourSquare、Twitterなどの有名なAndroidアプリケーションがモバイルアプリケーションからサーバーへのすべての要求を認証するために使用する方法を教えてください。

申し訳ありませんが、このアプリに関する十分な知識はありませんが、他のアプローチを紹介することができます。

他にどのようなパターンが利用可能で、最も効率的で安全なのか、そのためのプロセスフローが必要なだけです。

そのため、クライアント側で実行され、APIにアクセスするために何らかの秘密が必要なものは、さまざまな方法で悪用される可能性があり、Mobile API Security Techniquesに関する このシリーズ の記事で詳細を学ぶことができます。この記事では、APIキー、ユーザーアクセストークン、HMAC、およびTLSピニングを使用してAPIを保護し、それらをバイパスする方法を説明します。

がモバイルアプリにアクセスしているという問題を解決するには、Mobile API Securityに関する一連の記事に記載されている1つまたはすべてのソリューションを使用する必要があります。上記で述べたテクニックは、APIサーバーへの不正アクセスを回避するのは困難ですが、不可能ではないことを受け入れました。

APIサーバーが本物のモバイルアプリからの要求のみを受信して​​いることを知ることができるモバイルアプリ認証ソリューションを使用することにより、より良いソリューションを採用できます。

モバイルアプリ認証

モバイルアプリ認証ソリューションを使用すると、APIサーバーはがリクエストを送信していることを知ることができるため、安全でないソースからの他のすべてのリクエストを拒否しながら、本物のモバイルアプリ。

モバイルアプリ認証ソリューションの役割は、実行時にモバイルアプリが改ざんされていないこと、ルート化されたデバイスで実行されていないこと、xPosedやFridaなどのフレームワークによってインスツルメントされていないこと、MitM攻撃を受けていないこと、バックグラウンドでSDKを実行することにより実現されます。クラウドで実行されているサービスはアプリにチャレンジし、応答に基づいて、モバイルアプリと実行中のデバイスの整合性を証明します。したがって、SDKは決定について一切責任を負いません。

モバイルアプリの整合性の認証に成功すると、短期間有効なJWTトークンが発行され、クラウド内のAPIサーバーとモバイルアプリ認証サービスのみが認識する秘密で署名されます。モバイルアプリの認証に失敗した場合、JWTトークンは、APIサーバーが知らないシークレットで署名されます。

これで、アプリはリクエストのヘッダーにあるJWTトークンをすべてのAPI呼び出しで送信する必要があります。これにより、APIサーバーは、JWTトークンの署名と有効期限を検証でき、検証に失敗した場合にそれらを拒否できる場合にのみリクエストを処理できます。

モバイルアプリ認証サービスで使用されるシークレットがモバイルアプリで認識されない場合、アプリが改ざんされたり、ルート化されたデバイスで実行されたり、接続されている接続で通信したりしても、実行時にリバースエンジニアリングすることはできません中間攻撃の男のターゲット。

Mobile App Attestationサービスは、iOS、Android、React NativeなどのいくつかのプラットフォームにSDKを提供するApproovのSAASソリューションとして既に存在します(ここで作業します)。統合には、クラウドサービスによって発行されたJWTトークンを検証するためのAPIサーバーコードの小さなチェックも必要です。このチェックは、APIサーバーがどの要求を処理し、どの要求を拒否するかを決定できるようにするために必要です。

結論

最終的に、APIサーバーを保護するために使用するソリューションは、保護しようとしているものの価値と、ヨーロッパのGDPR規制など、そのタイプのデータの法的要件に従って選択する必要があります。

エクストラマイルに行きたいですか?

OWASP Mobile Security Project-Top 10 risk

OWASPモバイルセキュリティプロジェクトは、開発者とセキュリティチームが安全なモバイルアプリケーションを構築および維持するために必要なリソースを提供することを目的とした集中リソースです。このプロジェクトを通じて、私たちの目標は、モバイルセキュリティリスクを分類し、それらの影響または悪用の可能性を減らすための開発管理を提供することです。

0
Exadra37