いらっしゃいませ!このリポジトリは、実際のAPIセキュリティ手法に関するこの一連のブログ投稿の一部です。このシリーズでは、攻撃者が保持しているデータへのアクセスを得るために使用する可能性のあるさまざまなエクスプロイトに対してモバイルAPIバックエンドを防御するプロセスを説明します。このデモンストレーションシナリオでは、攻撃により、システムの実際のユーザーが会社を犠牲にして不公平なビジネス上の優位性を獲得することができます。
このリポジトリには、ShipFastストーリーを説明するために使用される3つのコンポーネントすべてが保持されます。
3つのプロジェクトすべてを同じリポジトリに保持し、ブログシリーズの進行からのすべての手順を含めるようにコードを構成しました。これが全体として理解しやすくなることを願っています。
最初のブログ投稿でシーンを設定した後、連続したエントリは、必要に応じてこのGitHubリポジトリのコードへのリンクを使用して、セキュリティ対策を強化(またはバイパス)する方法を示します。ブログシリーズは、それぞれで議論されているメインセキュリティ方法を参照することによって要約される場合があります。
2つのサービスとAPKの自由に利用可能な展開を提供して、ダウンロードしてインストールするために、ブログを読むときにそれらと連携できます。次のセクションでは、展開したサービスの簡単な要約、提供するアプリ、このリポジトリの関連コードを見つける場所、および各ブログ投稿の変更がどこにあるかについて説明します。
ShipFast APIコードは、サーバー/ShipFast-APIフォルダーにあります。コードはクラウドに展開され、https://shipfast.demo.approov.ioで利用可能になります。
ShipFast APIは、ブログストーリーに従うためにv1からv4にバージョンされており、次のURLを使用して各段階にアクセスできます。
このリポジトリのリリースページには、各段階のAPKが含まれています。それらは、すべてをAndroidデバイスに一度にインストールできるようにセットアップされています(現時点では申し訳ありません)。
アプリのコードはすべて、Androidstudioプロジェクトのすべてにあります:App/Android/Kotlin/ShipFast。
アプリの各バージョンで異なる配色を使用したため、実行中のものをすばやく識別できます。
色には特別な意味はありませんが、明らかに、緑が最良です。
Rogue WebサービスであるShipraiderは、ShipFastのドライバーがShipFastの顧客の魅力を利用できるようにするために、邪悪な海賊によってセットアップされました。コードは、サーバー/Shipraider-Rogue-Webフォルダーにあります。
Webサイトの各バージョンは、別のドメインから提供されます。
Shipraider Webサイトは、バージョンを区別するためにモバイルアプリと同じ配色に従います。
以下に、ブログシリーズで使用されている手法の概要を簡単に説明します。関連するコードの行と関連するブログ投稿へのリンクを使用してAPIをロックダウンします。
開発者がAPIサーバーにリクエストを作成しているものを特定するために使用される最も一般的な方法は、リクエストヘッダーで長い文字列を使用することです。これは、ほとんどの場合、 Api-Keyと呼ばれます。最初のブログ投稿を参照してください。
APIキーは、サーバーとクライアントの両方で実装するのが非常に簡単です。このアプリコードはすべてのリクエストにキーを追加し、このコードに示すように、サーバーは単純なヘッダーチェックでリクエストを検証します。
残念ながら、APIキー保護をバイパスすることも簡単です。これは、すべてのリクエストで伝えられる秘密であるためです。シリーズの2番目のブログは、MITM(Man in the Middle)攻撃でAPIキーを抽出する方法を示すことから始まります。次に、キーをShipraider Webサイトに追加して、ShipFast APIに行うリクエストで使用されます。
保護を改善するために、2番目のブログ投稿では、HMACを導入してAPIリクエストをデジタル的に署名するため、ハイジャックまたは改ざんを防ぎます。秘密の部分がクライアントからサーバーに明示的に送信されることはなく、このバージョンではコードに静的に埋め込まれているため、APIキーよりも優れています。
HMACの実装は、APIキーの実装よりも少し詳細ですが、それでも簡単です。 APIサーバーの実装については、このコード、およびモバイルアプリの実装のこのコードを確認できます。
ただし、HMACの秘密がハードコードされている場合、攻撃者が抽出するのは簡単です。 3番目のブログ投稿では、オープンソースのバイナリ分析ツールを使用して、リクエストに署名するために使用されるHMACシークレットと関連するアルゴリズムを明らかにすることにより、これを示しています。これらがChipraiderコードにコピーされると、Rogue Webサイトが再び起動して実行できます。
2番目の攻撃シナリオは、HMACアルゴリズムに静的な秘密を使用することが弱点であることを明らかにしました。次の防御は、動的な秘密を使用することです。実行時に計算されるもの。 3番目のブログ投稿では、静的な秘密を動的データと組み合わせて、HMACアルゴリズムを初期化する動的な秘密を生成する方法について説明します。
モバイルアプリの実装はこれらのコードの行で見ることができますが、APIサーバーの等価物はここで見ることができます。
実行時にHMACの秘密を計算すると、バイパスが難しくなりますが、不可能ではありません。攻撃者は、ShipraiderのWebサイトで動作を再現するために、コードのより大きなセクションを理解する必要があります。 4番目のブログ投稿には、これのためのいくつかのアプローチがリストされており、アプリの再梱包とAndroid Studioデバッガーを使用してより詳細な例を示しています。繰り返しますが、攻撃者はShipraiderに同等のコードを作成して、ShipFast APIを使用し続けることができます。
4番目のブログ投稿では、シリーズの最終的なセキュリティ尺度を紹介します。モバイルアプリの証明は、承認に実装されたAPIセキュリティコンセプトです。一言で言えば、APIへのアクセスを可能にする前に、アプリ全体とそれが実行される環境全体をチェックします -アプリが重要です。 APIアクセスがアプリの正当なインスタンスにロックダウンされているという自信が高くなります。このアプローチについては、製品の概要ページと関連するホワイトペーパーで詳細に説明します。
承認統合は、モバイルアプリ開発者と同じくらい簡単です。 [Quickstart Integration Examples]の1つを使用して、[https://approov.io/docs/latest/approov-integration-examples/mobile-app/)のいずれかを使用して、[Quickstart Integration Examples]のいずれかを使用して、プロセスをスピードアップし、SDKを呼び出してAPIリクエストを含めるためにAn Aprovトークンを獲得することを願っています。これは、shipfastapp.ktのshipfastアプリで見ることができます。 // *** UNCOMMENT THE CODE BELOW FOR APPROOV ***の前にある行を検索します。
APIサーバーの統合も簡単です。APIリクエストに応答する前に、多くのJWTライブラリのいずれかを使用して承認トークンを検証します。 ShipFast APIは、Express-JWTノードパッケージを使用して、 checkApproovTokenコールバックで承認トークンを確認します。
高度な使用法文書では、ShipFastおよびShipraiderサービスを構成する各コンポーネントのビルドおよび展開ステップについて説明します。ブログシリーズをフォローするには、通常、承認チームによって展開および維持されているサービスとアプリを使用するだけで十分です。その場合、そのドキュメントに従う必要はありません。ただし、前回のブログ投稿の最後に説明されているオプションのペンテストチャレンジを試みる場合は、必要になります。
ブログシリーズは、全体として、リクエストが正当なソースからのみ発生することを保証することにより、APIセキュリティの徐々に改善されています。このリポジトリのブログとコードは、API開発で一般的に使用されるいくつかの保護メカニズムを簡単に回避する方法を示すために使用されます。 ShipFast APIが受け取った検証された要求に最高の信頼性を与える承認統合で頂点に達します。承認ソリューションをより深く探索したい場合は、次のリンクのいずれかをオフポイントとして試してみませんか。