洗練された新しい Android マルウェアは、モバイル ランサムウェアの最新の進化を示しています

news

攻撃者は粘り強く、継続的に進化するように動機付けられており、影響を受けないプラットフォームはありません。そのため、Microsoft は、業界をリードするエンドポイント保護機能を Windows を超えて拡張するために取り組んできました。これらの機能にモバイル脅威防御が追加されたことは、Microsoft Defender for Endpoint (以前の Microsoft Defender Advanced Threat Protection) がすべての主要なプラットフォームで保護を提供するようになったことを意味します。

Microsoft のモバイル脅威防御機能は、組織がネットワーク内の脅威に対して持つ可視性をさらに強化し、ドメインやプラットフォーム全体で脅威を検出して対応するためのツールをさらに提供します。 Microsoft のすべてのセキュリティ ソリューションと同様に、これらの新しい機能は、脅威の状況を深く理解している脅威研究者とセキュリティ専門家のグローバル ネットワークによって支えられており、セキュリティ機能の継続的な革新を導き、進化し続ける脅威から顧客を確実に保護します。

たとえば、斬新な技術と動作を備えた特に洗練された Android ランサムウェアの一部を発見しました。これは、他のプラットフォームでも観察されたモバイル脅威の急速な進化を実証しています。 Microsoft Defender for Endpoint によって AndroidOS/MalLocker.B として検出されたモバイル ランサムウェアは、しばらくの間出回っていたランサムウェア ファミリの最新の亜種であり、絶え間なく進化しています。このランサムウェア ファミリは、任意の Web サイトでホストされ、人気のあるアプリ、クラックされたゲーム、またはビデオ プレーヤーになりすますなど、さまざまなソーシャル エンジニアリングのルアーを使用してオンライン フォーラムで配布されることで知られています。この新しい亜種は、紛れもない悪意のある特徴と動作を備えた高度なマルウェアでありながら、多くの利用可能な保護を回避し、セキュリティ ソリューションに対する検出率が低いため、私たちの注目を集めました。

ほとんどの Android ランサムウェアと同様に、この新しい脅威はファイルを暗号化することでファイルへのアクセスを実際にブロックするわけではありません。代わりに、他のすべてのウィンドウの上に表示される画面を表示することで、デバイスへのアクセスをブロックし、ユーザーが他に何もできないようにします。上記の画面は身代金メモであり、身代金を支払うための脅威と指示が含まれています。

ロシア語のモバイル身代金メモのスクリーンショット

図 1. 古いランサムウェアの亜種で使用される身代金メモのサンプル

このランサムウェアの革新的な点は、身代金メモの表示方法です。このブログでは、このランサムウェアがこれまでマルウェアによって利用されたことのない Android 機能を使用してランサム ノートを表示する革新的な方法と、コンテキストを認識したクロッピング用に設計されたオープンソースの機械学習モジュールを組み込む方法について詳しく説明します。その身代金メモ。

新しいスキーム、同じ目標

これまで、Android ランサムウェアは「SYSTEM_ALERT_WINDOW」と呼ばれる特別な権限を使用して身代金メモを表示していました。この権限を持つアプリは、システム グループに属するウィンドウを描画でき、閉じることはできません。どのボタンを押しても、ウィンドウは他のすべてのウィンドウの上に表示されます。この通知は、システム アラートまたはエラーに使用することを目的としていましたが、Android の脅威がそれを悪用して、攻撃者が制御する UI を強制的に画面全体に表示させ、デバイスへのアクセスをブロックしました。攻撃者はこのシナリオを作成して、ユーザーに身代金を支払うよう説得し、ユーザーがデバイスへのアクセスを取り戻すことができるようにします。

これらの脅威を捕捉するために、セキュリティ ソリューションは、この動作の検出に重点を置いたヒューリスティックを使用しました。その後、Google はプラットフォーム レベルの変更を実装し、この攻撃対象領域を実質的に排除しました。これらの変更には次のものが含まれます。

  1. SYSTEM_ALERT_WINDOW エラーおよびアラート ウィンドウ タイプを削除し、代わりに他のいくつかのタイプを導入
  2. SYSTEM_ALERT_WINDOW の許可ステータスを「危険を超えた」カテゴリに分類することで、特別な許可に昇格させます。これは、ユーザーが許可を求めるアプリを承認するために、ワンクリックではなく、多くの画面を通過する必要があることを意味します。
  3. Android 8.0 以降にオーバーレイ キル スイッチが導入され、ユーザーはいつでもアクティブにしてシステム アラート ウィンドウを非アクティブ化できます

適応するために、Android マルウェアは他の機能を悪用するように進化しましたが、これらはそれほど効果的ではありません。たとえば、一部のランサムウェアはアクセシビリティ機能を悪用します。アクセシビリティは、ユーザーが複数の画面を通過し、アプリがアクセシビリティ サービスを介してアクティビティを監視できるようになるという警告を受け入れる必要がある特別な権限であるため、ユーザーに簡単に警告する方法です。他のランサムウェア ファミリは、システム以外のウィンドウを描画する無限ループを使用しますが、描画と再描画の間に、ユーザーが設定に移動して問題のアプリをアンインストールする可能性があります。

新しい Android ランサムウェアの亜種は、これまでに見たどの Android マルウェアよりもさらに進化することで、これらの障壁を克服しています。身代金メモを表示するために、Android の次のコンポーネントを利用する一連の手法を使用します。

  1. Android がサポートする通知のいくつかのカテゴリの中で、「通話」通知は、すぐにユーザーの注意を払う必要があります。
  2. Android アクティビティ (つまり、ユーザーに表示される典型的な GUI 画面) の「onUserLeaveHint()」コールバック メソッドは、ユーザーの選択の結果としてアクティビティがバックグラウンドに移行しようとしているときに、アクティビティ ライフサイクルの一部として呼び出されます。たとえば、 、ユーザーがホームキーを押したとき。

マルウェアは点をつなぎ、これら 2 つのコンポーネントを使用して、コールバックを介して身代金画面をトリガーする特殊なタイプの通知を作成します。

マルウェア コードのスクリーンショット

図 2. 完全な意図があり、「通話」カテゴリとして設定された通知

コード スニペットが示すように、マルウェアは通知ビルダーを作成し、次のことを行います。

  1. setCategory(“call”) – これは、通知が特別な権限を必要とする非常に重要な通知として作成されることを意味します。
  2. setFullScreenIntent() – この API は通知を GUI に接続し、ユーザーがタップすると通知がポップアップするようにします。この段階で、マルウェアの半分の作業が完了します。ただし、マルウェアはランサムウェア画面をトリガーするためにユーザーの操作に依存したくないため、Android コールバックの別の機能を追加します。

図 3. onUserLeaveHint をオーバーライドするマルウェア

コード スニペットが示すように、マルウェアは Activity クラスの onUserLeaveHint() コールバック関数をオーバーライドします。関数onUserLeaveHint()は、マルウェア画面がバックグラウンドにプッシュされるたびに呼び出され、呼び出し中のアクティビティが自動的にフォアグラウンドに移動します。マルウェアが、「呼び出し」タイプの通知として作成された通知でRansomActivityインテントをフックしたことを思い出してください。これにより、無限の再描画やシステム ウィンドウのふりをすることなく、ランサムウェア画面の自動ポップアップをトリガーする一連のイベントが作成されます。

機械学習モジュールは継続的な進化を示しています

前述のとおり、このランサムウェアは、いくつかの進化段階を経たマルウェア ファミリの最新の亜種です。以下のナレッジ グラフは、システム アラート ウィンドウの悪用、アクセシビリティ機能の悪用、最近では通知サービスの悪用など、このランサムウェア ファミリが使用していることが確認されているさまざまな手法を示しています。

Android ラサムウェア ファミリーが使用する技術を示すナレッジ グラフ

図 4. ランサムウェア ファミリが使用する手法のナレッジ グラフ

このランサムウェア ファミリの長い歴史は、その進化が終わったわけではないことを示しています。さらに高度な技術を備えた新しい亜種が大量に生み出されることを期待しています。実際、最近の亜種には、開発者が画面サイズに基づいて画像を自動的にサイズ変更およびトリミングするために使用するオープンソースの機械学習モジュールからフォークされたコードが含まれています。

フリーズされた TinyML モデルは、画像が歪みなく画面に収まるようにするのに役立ちます。このランサムウェアの場合、このモデルを使用することで、身代金メモ (通常は偽の警察の通知やデバイス上にあると思われる露骨な画像) が不自然ではなく、より信憑性が高いように見えるため、ユーザーが身代金を支払う可能性が高くなります。

tinyML を使用するライブラリは、まだマルウェアの機能に接続されていませんが、マルウェア コード内に存在することは、将来の亜種でそうする意図を示しています。このランサムウェア ファミリーを引き続き監視して、お客様が保護されていることを確認し、進化するモバイルの脅威に対する幅広い保護のために、調査結果と洞察をコミュニティに共有していきます。

ドメインやプラットフォーム全体で組織を脅威から保護

モバイルの脅威は急速に進化し続けており、攻撃者は継続的に技術的な障壁を回避し、目的を達成する方法を創造的に見つけようとしています。それは、金銭的な利益であれ、より広範なネットワーク侵害への入り口を見つけることであれ.

この新しいモバイル ランサムウェアの亜種は重要な発見です。なぜなら、このマルウェアはこれまでに見られなかった動作を示し、他のマルウェアが従う可能性があるからです。攻撃対象領域に対する幅広い可視性と、脅威の状況を追跡し、大量の脅威データとシグナルの中に隠れている可能性のある注目すべき脅威を明らかにするドメイン エキスパートによって強化される、包括的な防御の必要性が高まります。

Android のエンドポイント向け Microsoft Defender は、現在一般提供されており、Microsoft の業界をリードするエンドポイント保護を Android に拡張します。このランサムウェア (AndroidOS/MalLocker.B) だけでなく、コンテンツ ベースの検出に加えて、ディープ ラーニングとヒューリスティックを利用したクラウドベースの保護を使用して、他の悪意のあるアプリやファイルを検出します。また、モバイル フィッシング、安全でないネットワーク接続、機密データへの不正アクセスなど、他のモバイルの脅威からユーザーと組織を保護します。 Microsoft Defender for Endpoint on Android のモバイル脅威防御機能の詳細をご覧ください。

Microsoft Defender for Endpointによって検出されたマルウェア、フィッシング、およびその他の脅威は、Microsoft Defender セキュリティ センターに報告されます。これにより、SecOps は、検出、調査のための Microsoft Defender for Endpoint の豊富なツール セットを使用して、Windows およびその他のプラットフォームからのエンドポイント シグナルと共にモバイルの脅威を調査できます。 、および応答。

エンドポイントからの脅威データは、 Microsoft 365 Defender (以前の Microsoft Threat Protection) の電子メールとデータ、ID、アプリからの信号と組み合わされ、ドメイン全体で検出、防止、調査、対応を調整し、調整された防御を提供します。 Microsoft Defender for Endpoint on Android は、悪意のあるアクティビティに対する組織の可視性をさらに強化し、攻撃のスプロールやクロスドメイン インシデントに対して包括的に防止、検出、および対応できるようにします。

テクニカル分析

難読化

これまでに見たことのない方法でランサムウェアの動作を再現することに加えて、Android マルウェアの亜種は、Android プラットフォームに固有の新しい難読化手法を使用します。難読化されたマルウェアの明らかな兆候の 1 つは、マニフェスト ファイルで宣言されたクラスを定義するコードがないことです。

マニフェスト ファイルを示すマルウェア コード

図 5. マニフェスト ファイル

classes.dexには、次の 2 つのクラスのみが実装されています。

  1. アプリケーションを開くときに関与するメイン アプリケーション クラスgCHotRrgEruDv
  2. カスタムの暗号化と復号化の定義を持つヘルパー クラス

これは、マニフェスト ファイルで宣言されているサービス ( Main ActivityBroadcast Receivers 、およびBackground ) に対応するコードがないことを意味します。これらの主要コンポーネントのコードがなくても、マルウェアはどのように機能するのでしょうか?難読化された脅威の特徴として、このマルウェアはAssetsフォルダーに暗号化されたバイナリ コードを格納しています。

暗号化された実行コードを含む Assets フォルダーのスクリーンショット

図 6. Assets フォルダー内の暗号化された実行可能コード

マルウェアが初めて実行されると、メイン クラスの静的ブロックが実行されます。コードは非常に難読化されており、名前のマングリングと無意味な変数名の使用により判読不能になっています。

図 7. 静的ブロック

ひねりを加えた復号化

このマルウェアは、興味深い復号化ルーチンを使用します。復号化関数に渡される文字列値は、復号化された値に対応するのではなく、単に分析を妨げるジャンク コードに対応します。

Android では、インテントは、ユーザーがさまざまなアクティビティの機能を調整してタスクを達成できるようにするソフトウェア メカニズムです。これは、別のアプリ コンポーネントからアクションを要求するために使用できるメッセージング オブジェクトです。

Intentオブジェクトは、文字列値を「 action 」パラメーターとして保持します。マルウェアは、 Intentの名前として渡された文字列値を使用して、復号化関数内にIntentを作成します。次に、ハードコーディングされた暗号化された値を復号化し、 setAction API を使用してインテントの「 action 」パラメーターを設定します。復号化されたコンテンツを指すアクション値を使用してこのIntentオブジェクトが生成されると、復号化関数はIntentオブジェクトを呼び出し先に返します。次に、呼び出し先はgetActionメソッドを呼び出して、復号化されたコンテンツを取得します。

図 8. Intent オブジェクトを使用して復号化された値を渡す復号化関数

ペイロードの展開

静的ブロックの実行が完了すると、Android ライフサイクル コールバックはコントロールをメイン クラスのOnCreateメソッドに転送します。

onCreate メソッドを示すマルウェア コード

図 9. ペイロードを復号化するメイン クラスの onCreate メソッド

次に、マルウェア定義の関数decryptAssetToDex (分析中に割り当てた意味のある名前) は、文字列「 CuffGmrQRT 」を最初の引数として受け取ります。これは、 Assetsフォルダーに保存されている暗号化されたファイルの名前です。

資産の復号化を示すマルウェア コード

図 10. 資産の復号化

復号化された後、アセットは .dex ファイルに変わります。これは、このランサムウェア ファミリの特徴である注目すべき動作です。

Assetファイルの復号前後のコード比較

図 11. 復号化前後のアセット ファイル

暗号化された実行可能ファイルが復号化されてストレージにドロップされると、マルウェアはマニフェスト ファイルで宣言したすべてのコンポーネントの定義を取得します。次に、最終起爆機能を開始して、ドロップされた .dex ファイルをメモリにロードし、メイン ペイロードをトリガーします。

復号化された dex ファイルの読み込みを示すマルウェア コード

図 12. 復号化された .dex ファイルをメモリにロードし、メイン ペイロードをトリガーする

主なペイロード

メイン ペイロードがメモリにロードされると、最初の起爆装置は、 gvmthHtyNクラス (名前をPayloadEntryに変更) からメソッドXoqF (分析中にtriggerInfectionに名前を変更) を呼び出して、コントロールをメイン ペイロードに引き渡します。

初期モジュールからメイン ペイロードへの引き継ぎを示すマルウェア コード

図 13. 初期モジュールからメイン ペイロードへのハンドオーバー

前述のように、最初のハンドオーバー コンポーネントは、 appObjのインスタンスと変数configの値を返すメソッドを使用してtriggerInfectionを呼び出しました。

populateConfigMap の定義を示すマルウェア コード

図 14. マップに値をロードする populateConfigMap の定義

最後の 2 つの手順を関連付けると、マルウェア ペイロードが次のプロパティの構成を受信していることがわかります。

  1. number – サーバーに送信されるデフォルトの番号 (番号がデバイスから利用できない場合)
  2. api – API キー
  3. url – 身代金メモに表示するために WebView で使用される URL

マルウェアは、この構成をアプリ データの共有設定に保存し、すべてのブロードキャスト レシーバーをセットアップします。このアクションは、特定のシステム イベントが発生したときに通知を受け取るコード コンポーネントを登録します。これは関数initComponentsで行われます。

ブロードキャスト レシーバの初期化を示すマルウェア コード

図 15. システム イベントに対する BroadcastReceiver の初期化

この時点から、マルウェアの実行は、接続の変更、電話のロック解除、経過時間間隔などのシステム イベントでトリガーされるコールバック関数によって駆動されます。

 

ディネシュ・ベンカテサン

マイクロソフト ディフェンダーの調査

 

参照: https://www.microsoft.com/en-us/security/blog/2020/10/08/sophisticated-new-android-malware-marks-the-latest-evolution-of-mobile-ransomware/

Comments

Copied title and URL