
NeoQUEST-2016の「対決」で、マキシム・ハゾフは、VKontakte、Instagram、Facebookなどの人気のあるサービスの例で、隠されたサーバーAPI機能を識別して使用するためのさまざまなアプローチについて話しました。
この記事では、レポートの主なポイントに焦点を当て、すべての電子資料を共有します。スピーチのビデオ録画、プレゼンテーション、および問題の各ソーシャルネットワークに対する攻撃のデモンストレーション(すべてカット中)です。
ヒント:ソーシャルネットワークの「ウォーク」は、 NeoQUEST-2017の参加者よりも先を行っており、オンラインステージへの登録は本格的です!
NeoQUESTではどのように聞こえましたか?
約束どおり、すぐにプレゼンテーション( tyk )とレポートを共有します:
APIを定義する理由

この場合の主な目標は2つです。
- 脆弱性を検索します(サーバー側または対話プロトコルで)。
- ソーシャルネットワーク(誰でも好きな「ボット」)でのアクションを自動化します。
そのようなボットは、サービスの公式モバイルアプリケーションを模倣し、同じ構造で同じリクエストを実行するため、「カメレオン」と呼ぶことができます。 サーバー側では、このようなボットをモバイルアプリケーションの実際のユーザーと区別するのは簡単ではありません。
APIの学習方法は?
3つの主要な領域があります。
- ドキュメントの研究(もしそうなら!);
- ネットワークトラフィック分析(最も簡単な方法、次にメインの方法として選択);
- モバイルアプリケーションのリバースエンジニアリング(最も「ハードコア」な方法ですが、それなしではできない場合があります)。
例とデモ

デモンストレーションでは、Wi-Fi制御ポイントとBurp Suite HTTPリクエストのプロキシが使用されました。 この場合、テストされたすべてのアプリケーションは、HTTPプロトコルとその修正を使用してAPIと対話しました。
重要!
この調査は2016年春夏に実施されましたが、現時点では、アプリケーションのアーキテクチャとインタラクションプロトコルに変更がある可能性があります(たとえば、2016年11月からAndroidのVKontakteアプリケーションはHTTPプロトコルをサポートしなくなりました)。
VKontakteおよび保護されていないHTTPプロトコル
Android向けVKontakteモバイルアプリケーションは、デフォルトでHTTPプロトコルを使用します。これは、次のことを意味します(レポートの最初の部分で示したように、ビデオは記事の最後にあります)。
- このアプリケーションは、中間者 (MITM)などの攻撃に対して脆弱です。 ただし、APIは、リクエストの変更および繰り返しに対するいくつかの保護手段を提供します。
- アプリケーションで使用されているAPIを分析することは難しくありません(ただし、そのドキュメントは既に公開されています)。
デモでは、暗号化されていないトラフィックの傍受と、メッセージの送信を担当するAPIへのリクエストの場所を示します。
Instagramとhttps
レポートの第2部では、Android用のInstagramアプリケーションが考慮されました。APIとのやり取りには、セキュアプロトコルHTTPS (HTTP + SSL)を使用します。 これは、一般的な場合(研究者によるデバイスへのアクセスおよびかなり新しいバージョンのTLSがない場合)、相互作用プロトコルはMITM攻撃に対して脆弱ではないことを意味します。
ただし、電話にアクセスできる場合は、ルート証明書をインストールして、簡単にトラフィックを解読し、HTTPS接続の証明書を置き換えることができます(BurpSuiteはこれを自動的に行うことができます)。 デモンストレーションは、電話に制御されたルート証明書をインストールし、その中のAPIリクエストを見つけた後の、暗号化されたトラフィックのインターセプトを示しています。
Instagramには、開発者向けの公開された文書化されたAPIがあります。 重要な機能(いいね、サブスクリプション、投稿など)に対してかなり厳しい制限を設定します。 判明したように、Instagramアプリケーションは別のプライベートAPIを使用しますが、もちろんそのような制限はありません。
ボッティングに関して、このプライベートAPIの興味深い点は何ですか? プライベートAPIの主な違いは、すべての重要なリクエストが秘密鍵(アプリケーションバージョンに固有)で署名されていることです。 キーはアプリケーション内に保存されるため、アプリケーションのリバースエンジニアリングを使用して取得できます。
FacebookとSSLのピン留め
レポートの第3部では、Android用のFacebookアプリケーションが検討されました。 このアプリケーションは、安全なHTTPSプロトコルとSSL Pinningと呼ばれるアドインを使用してAPIと対話します。
SSLピニング-モバイルアプリケーションのコードでのAPIサーバーSSL証明書の実装。 このテクノロジーは、デバイスにルート証明書をインストールし、証明書をスプーフィングすることにより、トラフィックの傍受から保護するように設計されています。
ただし、SSL Pinningは無効にできます(さまざまな方法でも可能です)。
- アプリケーションの逆コンパイルと変更を使用する(難しい方法)。
- デバイスの低レベルSSL機能を変更することにより(ルートアクセスが必要であり、常に安定して動作するとは限りません)。 Android SSLバイパス、iOS SSL KillSwitchプログラムはこの原則に基づいて動作します。
このレポートは、Android用FacebookモバイルアプリケーションでSSL Pinningを無効にする方法(アプリケーションで使用されるライブラリの1つであるlibsslx.soを削除すること)と、その後のトラフィックのインターセプトが成功することを示しました。
トラフィックの分析時に判明したように、Facebookモバイルアプリケーションは、ドキュメント化されていないAPIメソッドをいくつか使用します(アカウントの登録やログインを含む)。
文書化されていないAPIメソッドも見つかりました。これにより、電話番号でFacebookユーザーIDを取得できます。 ここに、結果として文書化されていないメソッドの可能な自動化された使用のデモがあります。
結論として
必要に応じて、モバイルアプリケーションとサーバー間の対話プロトコルをいつでも分析できます。 追加のセキュリティ機能(SSLピニングなど)を使用しても、研究者はより困難になります。 したがって、開発者は、アプリケーションでドキュメント化されていない特権のAPIメソッドを使用しないでください(特に、公開されたドキュメント化されたAPIがある場合)。
さらに、公式のモバイルアプリケーションとまったく同じリクエストを送信するボットを作成することもできます。 このようなボットに対抗するには、APIリクエストの構造を複雑にし、サーバー側ですべてのリクエストパラメーターを慎重に分析することをお勧めします。
6月29日にサンクトペテルブルクで開催されるNeoQUEST-2017の対面会議では 、いつものように、最も関連性の高いサイバーセキュリティの傾向、最新の保護メカニズム、およびそれらを回避する方法についてのクールなレポートがあります。
サンクトペテルブルク出身でない場合は、6月に休暇を計画してお越しください。 白い夜、可動式の橋、