課金詐欺マルウェアは、悪意のあるアプリケーションがユーザーの知らないうちに同意なしにプレミアム サービスに登録する課金詐欺のサブカテゴリであり、Android マルウェアの最も一般的なタイプの 1 つであり、進化を続けています。
SMS 詐欺や通話詐欺などの請求詐欺の他のサブカテゴリと比較して、電話料金詐欺には独特の動作があります。 SMS 詐欺や通話詐欺は単純な攻撃フローを使用してプレミアム番号にメッセージや通話を送信しますが、電話料金詐欺には複雑な複数ステップの攻撃フローがあり、マルウェア開発者は改善を続けています。
たとえば、この脅威が特定のネットワーク事業者のユーザーを標的にする方法に関連する新しい機能を確認しました。デバイスがターゲット ネットワーク オペレータのいずれかに加入している場合にのみ、そのルーチンを実行します。また、デフォルトでは、アクティビティにセルラー接続を使用し、Wi-Fi 接続が利用可能な場合でも、デバイスをモバイル ネットワークに強制的に接続します。ターゲット ネットワークへの接続が確認されると、密かに不正なサブスクリプションを開始し、ユーザーの同意なしにそれを確認します。場合によっては、そのためにワンタイム パスワード (OTP) を傍受することさえあります。次に、サブスクリプションに関連する SMS 通知を抑制して、ユーザーが不正なトランザクションに気付き、サービスからサブスクリプションを解除するのを防ぎます。
料金詐欺マルウェアのもう 1 つの固有の動作は、動的コード ローディングの使用です。これにより、攻撃フローの特定の部分でコードの一部がデバイスにダウンロードされるため、モバイル セキュリティ ソリューションが静的分析を通じて脅威を検出することが困難になります。この回避手法にもかかわらず、この脅威をフィルタリングして検出するために使用できる特性を特定しました。また、この脅威を軽減するのに役立つ Android API の制限と Google Play ストアの公開ポリシーの調整も見られます。
電話料金詐欺は、最初の主要なマルウェア ファミリである Joker が 2017 年に Google Play ストアに登場して以来、メディアの注目を集めてきました。このような注目にもかかわらず、この種のマルウェアがどのように不正行為を実行するかについて公開された資料は多くありません。このブログ投稿の目的は、このマルウェアがどのように動作するか、アナリストがそのような脅威をより適切に特定する方法、Android のセキュリティを改善して電話料金詐欺を軽減する方法に関する詳細な分析を共有することです。このブログでは、次のトピックについて説明します。
WAP 課金メカニズム: 概要
料金詐欺マルウェアを理解するには、攻撃者が使用する課金メカニズムについて詳しく知る必要があります。通話料詐欺で一般的に使用される課金タイプは、ワイヤレス アプリケーション プロトコル (WAP) です。 WAP 課金は、消費者がこのプロトコルをサポートするサイトから有料コンテンツを購読し、携帯電話の請求書から直接課金されるようにする支払いメカニズムです。サブスクリプション プロセスは、顧客がセルラー ネットワークを介してサービス プロバイダーとのセッションを開始し、有料サービスを提供する Web サイトに移動することから始まります。 2 番目のステップとして、ユーザーはサブスクリプション ボタンをクリックする必要があります。場合によっては、サブスクリプションを確認するためにサービス プロバイダーに送信する必要があるワンタイム パスワード (OTP) を受け取ります。全体的なプロセスを以下に示します。
プロセスはサービス プロバイダーによって異なるため、すべての手順が常に存在するわけではないことに注意してください。たとえば、一部のプロバイダーは OTP を必要としません。つまり、モバイル ユーザーは、デバイスがセルラー ネットワークに接続されているときにサブスクリプション ボタンをクリックするだけで、サービスにサブスクライブできます。
料金詐欺による不正なサブスクリプション
ユーザーの同意なしにサブスクリプションが行われた場合、サブスクリプションは不正であると分類されます。料金詐欺の場合、マルウェアはユーザーに代わってサブスクリプションを実行します。この方法では、次の手順でプロセス全体を認識できません。
- Wi-Fi 接続を無効にするか、ユーザーがモバイル ネットワークに切り替えるのを待ちます
- 購読ページにサイレントに移動します
- 購読ボタンを自動クリック
- OTP を傍受する (該当する場合)
- OTP をサービス プロバイダーに送信する (該当する場合)
- SMS 通知をキャンセルする (該当する場合)
これらの手順を実行する前に、マルウェアが無許可で行う重要な検査の 1 つは、モバイル国コード (MCC) とモバイル ネットワーク コード (MNC) を通じて加入者の国とモバイル ネットワークを識別することです。この検査は、特定の国または地域内のユーザーを対象として行われます。どちらのコードも、 TelephonyManagerまたはSystemPropertiesクラスを使用して取得できます。 TelephonyManager.getSimOperator() API 呼び出しは、連結された文字列として MCC コードと MNC コードを返しますが、同じクラスの他の関数を使用して、デバイスが現在加入しているモバイル ネットワークに関するさまざまな情報を取得できます。ネットワークと SIM オペレータは (ローミングなどで) 異なる可能性があるため、通常、マルウェア開発者はgetSimOperator関数を好んで使用します。
SystemProperties.get(String key)関数を使用すると、同じタイプの情報を取得できます。key パラメーターは、gsm.operator.numeric、gsm.sim.operator の 1 つまたは複数の文字列 (複数の呼び出しを使用) です。数値、gsm.operator.iso-country、gsm.sim.operator.iso-country、gsm.operator.alpha、gsm.sim.operator.alpha
最初の呼び出しとの違いは、 android.os.SystemPropertiesクラスが@SystemApiとしてマークされているため、アプリケーションは Java リフレクションを使用して関数を呼び出す必要があることです。 MNC および MCC コードは検出を回避するためにも使用されます。これは、SIM オペレーターが標的のオペレーターに属していない限り、悪意のあるアクティビティが実行されないためです。
以下のセクションでは、Android オペレーティング システムのコンテキストにおける不正なサブスクリプション手順の分析を示します。この分析は、料金詐欺スキームの実装に必要な API 呼び出しとアクセス許可を特定するのに役立ちます。
セルラー通信の強制
Android API レベル 28 (Android 9.0) 以下をターゲットとする料金詐欺マルウェアの亜種は、 WifiManagerクラスのsetWifiEnabledメソッドを呼び出して Wi-Fi を無効にします。この通話に必要な権限はACCESS_WIFI_STATEとCHANGE_WIFI_STATEです。両方の権限の保護レベルが通常に設定されているため、システムによって自動的に承認されます。
一方、より高いレベルの API を標的とするマルウェアは、 ConnectivityManagerクラスのrequestNetwork関数を使用します。 Android 開発者ページでは、 requestNetwork メソッドについて次のように説明されています。
このメソッドは、指定された NetworkRequest に一致する最適なネットワークを見つけようとし、現在基準を満たしているネットワークがない場合は、一致するネットワークを見つけようとします。プラットフォームは、独自の裁量でどのネットワークが最適かを評価します。スループット、遅延、バイトあたりのコスト、ポリシー、ユーザー設定、およびその他の考慮事項は、最良のネットワークと見なされるものを決定する際に考慮される場合があります。
この呼び出しに必要なアクセス許可は、 CHANGE_NETWORK_STATE (保護レベル: 通常) またはWRITE_SETTINGS (保護レベル: signature|preinstalled|appop|pre23) のいずれかですが、後者は保護されているため、通常は前者がマルウェア開発者に好まれます。料金詐欺を実行できるマルウェア サンプルから以下に示すコード スニペットでは、関数vgy7がNET_CAPABILITY_INTERNET (定数値: 0x0000000c) でTRANSPORT_CELLULAR トランスポート タイプ (定数値: 0x00000000) を要求しています。
図 3. TRANSPORT_CELLULAR トランスポート タイプを要求する Joker マルウェア サンプルのコード
NetworkCallbackは、ネットワーク ステータスを監視し、 ConnectivityManager.bindProcessToNetwork関数を介してプロセスを特定のネットワークにバインドするために使用できるネットワークタイプ変数を取得するために使用されます。これにより、既存の Wi-Fi 接続がある場合でも、マルウェアはモバイル ネットワークを使用できます。以下に示す概念実証コードは、上記の手法を使用してTRANSPORT_CELLULAR トランスポート タイプを要求します。トランスポート タイプが使用可能な場合、プロセスをモバイル ネットワークにバインドして、アプリケーションの WebView で example.com のホストをロードします。
モバイル接続も利用できる場合でも Wi-Fi 接続が優先されることが予想されますが、このプロセスではセルラー ネットワークのみを使用してサーバーと通信します。
実際、ユーザーはモバイル データを手動で無効にして、マルウェアがセルラー ネットワークを使用できないようにする必要があります。 setWifiEnabledは廃止されましたが、API レベル 28 以下をターゲットとするマルウェアによって引き続き使用される可能性があります。
プレミアム サービス オファーの取得とサブスクリプションの開始
SIM オペレーターがターゲット リストにあり、デバイスがTRANSPORT_CELLULARタイプのネットワークを使用していると仮定すると、次のステップは、プレミアム サービスを提供する Web サイトのリストを取得し、それらに自動的にサブスクライブしようとすることです。
マルウェアは C2 サーバーと通信して、提供されているサービスのリストを取得します。オファーには、最終的にランディング ページと呼ばれる Web ページに到達するリダイレクト チェーンにつながる URL が含まれています。
次に何が起こるかは、サブスクリプション プロセスが開始される方法によって異なります。したがって、マルウェアには通常、さまざまなサブスクリプション フローを処理できるコードが含まれています。典型的なシナリオでは、ユーザーは以下に示すような HTML 要素をクリックし (JOIN NOW)、2 番目のステップとしてサーバーに確認コードを送信する必要があります。
マルウェアがこれを自動的に行うために、ページの読み込みの進行状況を監視し、購読を開始する HTML 要素をクリックするように設計された JavaScript コードを挿入します。ユーザーは 1 つのサービスに 1 回しかサブスクライブできないため、コードは Cookie を使用して HTML ページをマークし、重複したサブスクライブを回避します。以下は、そのようなコードの例です。
76 行目で、 getElementsByTagNameは、 inputとしてタグ付けされたすべてのドキュメント オブジェクト モデル (DOM) 要素のコレクションを返します。 78 行目のループは、すべての要素を調べて、その型、 name 、 value 、およびaltプロパティをチェックします。要素に「確認」、「クリック」、「続行」などのキーワードが含まれていることが検出されると、以下に示すようにc関数に送信されます。
36 行目のifステートメントは、 jdh関数を呼び出して、要素が既にクリックされているかどうかを確認します(下の図 12 を参照) 。最後に、 c関数は、37 行目の分岐 (図 11 を参照) に従います。
HTML ページのロード プロセスは、WebView にアタッチされたWebViewClientのonPageFinishedコールバックを使用して追跡されます。その後、相対メッセージ タイプをリッスンするハンドラーは、サブスクリプションを実行するために必要な次の手順に応じて動作します。以下のコード スニペットでは、WebView に読み込まれた URL とID 「128」のシグナルがhandler2に送信され、サービスが評価され、サブスクリプション プロセスが開始されます。
マルチステップまたはターゲット サブスクリプション プロセスでは、追加の検証手順が必要になる場合があります。以下に示すハンドラーは、WebView に読み込まれたページ URL をチェックします。 URL がdoi[.]mtndep.co.za/service/ と一致する場合、ハンドラーはProperties.call_jbridge_dump変数に割り当てられた JavaScript コードを実行します。
ID 「107」の信号は、コマンド アンド コントロール(C2)サーバーとの通信を必要とするいくつかの追加ステップをトリガーします。このケースは、次の図に示されています。
シグナルを受信すると、ハンドラーはv1.bhu8関数を呼び出します。
サーバーの応答でweb-zdm[.]secure-d[.]io/api/v1/activateを確認した後、マルウェアはtpack[.]l2.bhu8[.]vgy7関数を呼び出します。この関数は、アプリケーションの WebView に読み込まれた現在の URL と、国コードや HTML コードなどの追加情報を送信します。
OTP の傍受
ほとんどの場合、サービス プロバイダーは、サブスクリプション プロセスを完了するためにサーバーに返送する必要がある OTP を送信します。 OTP は HTTP または USSD プロトコルまたは SMS のいずれかを使用して送信できるため、マルウェアはこれらのタイプの通信を傍受できなければなりません。 HTTP プロトコルの場合、サーバーの応答を解析してトークンを抽出する必要があります。一方、USSD プロトコルの場合、傍受する唯一の方法は、アクセシビリティ サービスを使用することです。
android.permission.RECEIVE_ SMS権限を必要とする SMS メッセージを傍受する方法の 1 つは、 SMS_ RECEIVED アクションをリッスンするBroadcastReceiverをインスタンス化することです。
次のコード スニペットは、 BroadcastReceiverを作成し、スーパークラスのonReceiveコールバックをオーバーライドして、「rch」で始まるメッセージを除外します。
その後、受信者がSMS_RECEIVEDアクションをリッスンできるようにするIntentFilterを作成し、最後に受信者が動的に登録されます。
HTTP プロトコルを使用して送信された OTP メッセージを処理するために、マルウェアは HTML コードを解析して、検証トークンを示すキーワードを検索します。次のコードには、抽出されたトークンがsendTextMessage API 呼び出しを使用してサーバーに送信されるフローが含まれています。
このフローを有効にするために必要な追加のアクセス許可はSEND_SMSです。
SMS メッセージをインターセプトするもう 1 つの方法は、 NotificationListenerServiceを拡張することです。このサービスは、システムの既定の SMS アプリケーションから送信されたものを含め、新しい通知が投稿または削除されたときに、システムからの呼び出しを受信します。以下のコード スニペットは、この機能を示しています。
分析中に、タイトルが「SMS_Received」、テキストが「Pin:12345」の通知をトリガーした結果、アプリケーションの logcat に次の出力が表示されました。
最後に、SMS メッセージをインターセプトするブロードキャスト レシーバーと通知リスナーの手法に加えて、 ContentObserverを使用して、特定のコンテンツに対する変更のコールバックを受信できます。 SmsObserverクラスのonChangeコールバック (以下に示す) は、システムが SMS コンテンツ プロバイダーの状態を変更するたびに呼び出されます。
通知の抑制
API レベル 18 以降、 NotificationListenerServiceを拡張するアプリケーションは、他のアプリケーションからトリガーされる通知を抑制することが承認されています。関連する API 呼び出しは次のとおりです。
- cancelAllNotifications()は、通知マネージャーにすべての通知を閉じるように通知します
- cancelNotification(String key)は、通知マネージャーに単一の通知を閉じるように通知します
- cancelNotifications(String [] keys)を使用して、通知マネージャーに複数の通知を一度に破棄するよう通知します。
この API サブセットは、デフォルトの SMS アプリケーションによって投稿されるサービス サブスクリプション通知メッセージを抑制するために、マルウェア開発者によって悪用されます。より具体的には、サブスクリプションが成功すると、サービスプロバイダーはユーザーにメッセージを送信して料金について通知し、サブスクリプションを解除するオプションを提供します。通知リスナー サービスにアクセスすることで、マルウェアは上記の機能のいずれかを呼び出して通知を削除できます。
クローキングに動的コード ローディングを使用する
クローキングとは、悪意のある動作を隠すために使用される一連の手法を指します。たとえば、ほとんどの料金詐欺マルウェアは、モバイル ネットワークが標的に含まれていない場合、何のアクションも起こしません。これらの脅威が使用するクローキング メカニズムのもう 1 つの例は、動的コード ローディングです。これは、特定の条件が満たされた場合にのみ特定のマルウェア コードがロードされることを意味し、静的分析による検出が困難になります。
以下は、 SHA -256 を使用した多段階料金詐欺マルウェアの特徴的な例です。
ステージ1
このマルウェアのエントリ ポイントは、 Applicationクラスのサブクラスであるcom.android.messaging.BugleApplicationであることが判明しています。悪意のあるフローは、以下の機能につながります。
21 行目の呼び出しは、アセットディレクトリから取得したファイル名でfiles配列を埋めます。アセット ファイルの名前が「355」で終わる場合、 for ループは 32 行目のif分岐に入ります。このようなファイル名についてアプリのアセット ファイルをクエリすると、次の結果が得られます。
PhoneNumberAlternateFormatsProto_355はソース ファイルであり、宛先ファイルおよび文字列「xh7FEC2clYuoNQ$ToT99ue0BINhw^Bzy」とともに、 ns.j関数のパラメーターとして指定されます。
68 行目のSecretKeySpecは、パスワード文字列の SHA-1 ダイジェストの最初の 16 バイトから作成されます。このキーは、電子コードブック (ECB) モードで Advanced Encryption Standard (AES) を使用してアセットからフェッチされたファイルを復号化するために使用されます。復号化の結果は、アプリケーションのキャッシュ ディレクトリに保存され、 System.load関数を使用してロードされる ELF ファイルです。
ステージ 2
ロードされたライブラリは、 AAssetManager_fromJava関数を使用して Assets フォルダーからPhoneNumberAlternateFormatsProto_300ファイルを取得し、 /data/data/<package_name>/ディレクトリ内のbという名前の一時ファイルに書き込みます (以下の 93 行目)。
次に、ファイルbは、Java 側から与えられたキー「xh7FEC2clYuoNQ$ToT99ue0BINhw^Bzy」を使用して XOR 演算を使用して復号化されます (次の図を参照)。復号化されたペイロードは、アプリケーションのデータ ディレクトリにlという名前で保存されます。
図 27. Java コードから呼び出されるネイティブの handleTask
同じ関数が復号化されたペイロードlをロードし、 DexClassLoaderクラス ローダーを使用してcom.AdsView.pulgnを呼び出します (わかりやすくするために、変数名は変更されています)。
2 番目のペイロードを手動で復号化すると、次の APK ファイルが生成されます。
DexClassLoaderを使用して、 classes.dexエントリを含む .jar および .apk ファイルからクラスをロードできることに注意してください。
ステージ 3
この復号化された APK は、 com.Helperとcom.AdsViewの 2 つの主要なクラスで構成されています。 com.AdsView.pulgn関数は、前のセクションで説明したネイティブ ライブラリによって最初に呼び出されます。
実行可能なスレッドの主な機能は、ホストをxn3o[.]oss-accelerate[.]aliyuncs[.]comに接続し、 xn30という名前の JAR ファイルをダウンロードすることです。この JAR ファイルはnviという名前でキャッシュ ディレクトリに保存され、 startSdkを使用してロードされます。以下の 81 行目に示すように、次のように機能します。
ファイルxn30はステージ 3 の最終ペイロードであり、前述の料金詐欺活動を実行するファイルです。
料金詐欺マルウェアの脅威を軽減する
料金詐欺は、金銭的損失が主な影響を与える最も一般的なマルウェア カテゴリの 1 つです。その洗練されたクローキング技術により、ユーザー側からの防御は、デバイスを安全に保つ上で重要な役割を果たします。経験則として、信頼できないソースから Android アプリケーションをインストールすること (サイドローディング) を避け、常にデバイスの更新をフォローアップすることをお勧めします。また、エンド ユーザーが料金詐欺マルウェアから身を守るために、次の手順を実行することをお勧めします。
- アプリケーションは、Google Play ストアまたはその他の信頼できるソースからのみインストールしてください。
- アプリケーションがそれを必要とする理由を十分に理解せずに、SMS アクセス許可、通知リスナー アクセス、またはアクセシビリティ アクセスをアプリケーションに付与することは避けてください。これらは、通常必要とされない強力なアクセス許可です。
- Microsoft Defender for Endpoint on Androidなどのソリューションを使用して、悪意のあるアプリケーションを検出します。
- デバイスが更新を受信しなくなった場合は、新しいデバイスと交換することを強く検討してください。
潜在的なマルウェアの特定
セキュリティ アナリストにとって重要なことは、マルウェア コード パターンの静的検出に基づく従来の緩和手法では、このマルウェアに対して限られた修復しかできないということです。これは、リフレクション、暗号化、圧縮、難読化、ステガノグラフィ、および動的コード ローディングの拡張使用によるものです。
ただし、このタイプのマルウェアを識別するために使用できる特徴があります。これらの特徴は、次の 3 つに分類できます。
- 主な特徴 – 静的に分析できる、アプリケーションに含まれる平文のパターン
- 第 2 の特徴 – 料金詐欺活動を実行するために使用される一般的な API 呼び出し
- 三次特性 – アプリケーションのカテゴリ、開発者のプロフィール、ユーザー レビューなどの Google Play ストア メタデータのパターン
3 次特性は、潜在的なマルウェアの初期フィルタリングに役立ちます。アプリのメタデータで観察されたパターンは、できるだけ多くのデバイスを短時間で感染させようとするマルウェア開発者の試みに関連していますが、可能な限り長く Google Play ストアに公開し続けます。 Google Play ストアにアプリを保持するために、攻撃者は次の手順を実行することがよくあります。
- 一般的なカテゴリに属し、最小限の労力でトロイの木馬化できるオープンソース アプリケーションを使用します。優先されるアプリケーションカテゴリには、パーソナライズ (壁紙やロック画面アプリなど)、ビューティー、エディター、コミュニケーション (メッセージングやチャット アプリなど)、写真、ツール (クリーナーや偽のウイルス対策アプリなど) が含まれます。
- アプリケーションが十分な数のインストールを取得するまで、クリーン バージョンをアップロードします。
- アプリケーションを更新して、悪意のあるコードを動的にロードします。
- アップロードされたアプリケーションから悪意のあるフローを分離して、できるだけ長く検出されないようにします。
これらのアプリケーションは、多くの場合、共通の特性を共有しています。
- アプリケーションの使用に適していない権限の過度の使用 (たとえば、通知リスナー サービスをバインドする、または SMS 権限を要求する壁紙、エディター、およびカメラ アプリ)
- アイコン、ポリシー ページ、およびボタンが類似している、一貫したユーザー インターフェイス
- 類似のパッケージ名
- 疑わしい開発者プロファイル (偽の開発者名と電子メール アドレス)
- レビューでの多数のユーザーの苦情
これらの第 3 の特性に基づいて潜在的なマルウェア サンプルが特定されると、第 1 の特性を使用して、さらにフィルタリングと確認を行うことができます。アプリケーションは、許可要求、通知リスナー サービスの使用、またはアクセシビリティ サービスの使用を難読化することはできません。これらのリクエストは、静的分析を使用して簡単に検出できる APK 内のAndroidManifest.xmlファイルに含まれている必要があります。料金詐欺を実行するマルウェアが要求する一般的なアクセス許可には、READ_SMS、RECEIVE_SMS、SEND_SMS、CHANGE_WIFI_STATE、ACCESS_WIFI_STATE、CHANGE_NETWORK_STATE などがあります。通知リスナーとアクセシビリティ サービスの要求は、非常に疑わしいと見なす必要があります。
二次的な特徴には、setWifiEnabled、requestNetwork、setProcessDefaultnetwork、bindProcessToNetwork、getSimOperator、cancelAllNotificationsなどの疑わしい API 呼び出しも含まれます。ただし、これらの呼び出しは難読化されている可能性があり、静的分析中に特定するのが難しい場合があるため、確実にするには、より詳細な分析が必要になる場合があります。
Android のセキュリティとプライバシーの改善
Google は、モバイルの脅威の状況が進化し、新しい脅威や攻撃者の手法が発見されるにつれて、Android のセキュリティとプライバシーを継続的に改善しています。たとえば、オペレーティング システムでは、潜在的に機密性の高い情報を明らかにする可能性のある API 呼び出しは引き続き削除または制限されており、Google Play ストアでは、公開ポリシーによって特定のリスクの高い権限の使用が保護されています (たとえば、または SMS を送信する)許可宣言フォームに記入して、その使用を正当化する必要があります。 Android のセキュリティは、悪用に対処するために進化し続けると予想されます。
説明したように、アプリケーションは現在、セルラー ネットワーク オペレーターを識別でき、ユーザーに対して透過性なしでセルラー ネットワークを介してネットワーク トラフィックを送信できます。さらに、アプリケーションは、この動作を正当化する必要なく、非常に強力な機能である通知の読み取りと破棄へのアクセスを要求できます。
結論
電話料金詐欺は、2017 年に Joker やその亜種のようなファミリーが初めて登場して以来、Google Play ストアで最も蔓延しているタイプの Android マルウェアの 1 つです。 2022 年の第 1 四半期に Google Play ストアからインストールされた潜在的に有害なアプリケーション (PHA) の 34.8% を占め、スパイウェアに次いで 2 番目にランク付けされました。
このマルウェアは、ユーザーをプレミアム サービスに登録することで、被害者に多額の携帯電話料金を請求する可能性があります。この脅威は検出を回避し、単一の亜種が削除される前に多数のインストールを達成できるため、影響を受けるデバイスのリスクも高まります。
このブログでは、エンド ユーザーにこの脅威の詳細と料金詐欺から身を守る方法をお知らせしたいと考えています。また、これらの手法を使用する他の悪意のあるアプリケーションを特定する方法について、セキュリティ アナリストにガイダンスを提供することも目指しています。
この脅威とその継続的な進化に関する詳細な分析は、Microsoft Defender for Endpoint on Android などのソリューションを通じて提供する保護に役立ちます。
Microsoft Defender for Endpoint がモバイル脅威防御機能を含むクロスプラットフォーム セキュリティを提供する方法について説明します。
ディミトリオス・ヴァルサマラスとサン・シンジョン
Microsoft 365 Defender 研究チーム
付録
サンプル (SHA-256)
サンプル | SHA-256 |
初期 APK ファイル | 2581aba12919ce6d9f89d86408d286a703c1e5037337d554259198c836a82d75 (com.cful.mmsto.sthemes) |
ステージ 2 のペイロード: Elf ファイル (ローダー) | 904169162209a93ac3769ae29c9b16d793d5d5e52b5bf198e59c6812d7d9eb14 (PhoneNumberAlternateFormatsProto_355、復号化) |
ステージ 3 のペイロード: APK (敵対的ダウンローダー) | 61130dfe436a77a65c04def94d3083ad3c6a18bf15bd59a320716a1f9b39d826 (PhoneNumberAlternateFormatsProto_300、復号化) |
ステージ 4 のペイロード: DEX (課金詐欺) | 4298952f8f254175410590e4ca2121959a0ba4fa90d61351e0ebb554e416500f |
一般的な API 呼び出しと権限
API 呼び出し | 権限 | SDK |
setWifiEnabled | CHANGE_WIFI _状態 ACCESS_WIFI_状態 | <29 |
リクエストネットワーク | CHANGE_NETWORK_STATE | >28 |
setProcessDefaultNetwork | <23 | |
bindProcessToNetwork | >22 | |
getActiveNetworkInfo | アクセス_ネットワーク_状態 | |
getSimOperator | ||
取得 (システム プロパティ) | ||
addJavascriptInterface | ||
評価Javascript | >18 | |
onPageFinished | ||
onPageStarted | ||
android.provider.Telephony.SMS_RECEIVED を使用した SMS BroadcastReceiver の onReceive | RECEIVE_SMS | >19 |
createFromPdu | RECEIVE_SMS | |
getMessageBody | ||
android.provider.telephony.SmsProvider のコンテンツ URI (「content://sms」) を使用した SMS ContentObserver の onChange | READ_SMS | |
sendTextMessage | ||
onNotificationPosted |
Comments