Androidの新しい脆弱性により、攻撃者は署名に影響を与えることなくアプリケーションを変更できます

画像



Androidの深刻な脆弱性(CVE-2017-13156)により、攻撃者は署名に影響を与えることなくアプリケーションのコードを変更できます。 問題の根本は、ファイルが有効なAPKファイルと有効なDEXファイルになる可能性があることです。 彼らは、二元性のローマの神に敬意を表して、ヤヌスの脆弱性と呼びました。



ヤヌスの脆弱性



Janusの脆弱性は、APKファイルとDEXファイルに追加のバイトを追加する機能に関連しています。 一方で、APKファイルは、zipレコードの前(通常はzipレコードの間)に任意のバイトを含むことができるzipアーカイブです。 JAR署名スキームでは、zipエントリのみが考慮されます。 アプリケーションの署名を計算または検証するときに、追加のバイトを無視します。 一方、DEXファイルには、文字列、クラス、メソッド定義などの通常のセクションの後に、最後に任意のバイトが含まれる場合があります。 したがって、ファイルは同時に有効なAPKファイルと有効なDEXファイルにすることができます。



画像



もう1つの重要な要素は、Dalvik / ART仮想マシンの無害に見える機能です。 理論的には、AndroidランタイムはAPKファイルをダウンロードし、DEXファイルを抽出して、コードを実行します。 実際には、仮想マシンはAPKファイルとDEXファイルの両方をダウンロードして実行できます。 APKファイルを受け取ると、ヘッダーのマジックバイトを調べて、自分がどのタイプのファイルであるかを判断します。 DEXヘッダーが見つかると、ファイルをDEXファイルとしてロードします。 それ以外の場合は、DEXファイルを含むzipレコードを含むAPKファイルとしてファイルをダウンロードします。 したがって、DEX / APKファイルを誤って解釈する可能性があります。



攻撃者はこの二重性を悪用できます。 署名に影響を与えることなく、悪意のあるDEXファイルをAPKファイルに追加できます。 Androidランタイムは、APKファイルを正当な以前のバージョンのアプリケーションへの有効な更新として受け入れます。 ただし、Dalvik VMは添付のDEXファイルからコードをロードします。



脅威



Androidアプリは自己署名ですが、Androidアプリを更新するときは署名の検証が重要です。 ユーザーがアプリケーションの更新をダウンロードすると、Androidランタイムはその署名を元のバージョンの署名と比較します。 署名が一致する場合、Androidランタイムは更新のインストールを続行します。 更新されたアプリケーションは、元のアプリケーションの権限を継承します。 そのため、攻撃者はJanusの脆弱性を使用して更新プロセスを誤解させ、疑いを持たないユーザーのデバイスにインストールされた強力な権限を持つ未検証のコードを取得できます。



いくつかの深刻なシナリオを想像できます。 攻撃者は、権限が悪用されるように修正された更新プログラムを使用して、高い特権を持つ信頼できるアプリケーション(システムアプリケーションなど)を置き換える可能性があります。 これにより、ターゲットアプリケーションによっては、ハッカーがデバイスに保存されている機密情報にアクセスしたり、デバイスを完全にキャプチャしたりする可能性があります。 あるいは、攻撃者は、たとえば銀行や通信のコンテキストで、機密性の高いアプリケーションの変更されたクローンを正当な更新として転送する可能性があります。 複製されたアプリケーションは、元のアプリケーションのように見え、動作しますが、悪意のある動作を引き起こします。



zipファイル形式は古く、マスターキーの脆弱性やヤヌスの脆弱性などの問題が発生しやすいです。 あいまいなメールファイルは、異なるコンテキストおよび異なるシステムで同様の脆弱性につながる可能性があります。 主な理由は、フォーマットの冗長性です。 データ形式、プロトコル、データ構造、およびコード全体を開発するときは、常に冗長性を避けるようにしてください。 矛盾があると、エラーまたはそれ以上になります。



範囲と緩和



どのシナリオでも、ユーザーはGoogle Playストアの外部にあるソースから悪意のある更新プログラムをインストールする必要があります。 アプリケーションは元のアプリケーションとまったく同じように見え、対応する署名があるため、一部のユーザーをだますのは比較的簡単です。 専門家向けに、一般的なリバースエンジニアリングツールは入力されたコードを表示しません。 ユーザーは、アプリケーションとアップデートをダウンロードするときは常に警戒する必要があります。



脆弱性Janusは、最新のAndroidデバイス(Android 5.0以降)に影響します。 APK v2サブスクリプションスキームを使用して署名され、最新のサブスクリプションスキーム(Android 7.0以降)をサポートするデバイスで実行されているアプリケーションは、この脆弱性から保護されています。 v1スキームとは異なり、このv2スキームはAPKファイルのすべてのバイトを考慮します。 古いバージョンのアプリケーションと、古いデバイスで実行されている新しいアプリケーションは影響を受けやすいままです。 開発者は、少なくとも常にv2署名スキームを適用する必要があります。



DexGuardの改ざん防止メカニズムを使用するAndroidアプリケーションは、クローン攻撃から保護されています。 エンジンは追加のチェックを実行して、保護されたアプリケーションが変更されていないことを確認します。 リバースエンジニアリングおよびクローン作成に対するUnauthorized Access Detectionおよびその他のDexGuard保護レベルの使用をお勧めします。



All Articles