{"id":117014,"date":"2022-06-30T07:00:00","date_gmt":"2022-06-30T14:00:00","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/?p=117014"},"modified":"2025-06-25T01:24:32","modified_gmt":"2025-06-25T08:24:32","slug":"toll-fraud-malware-how-an-android-application-can-drain-your-wallet","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/","title":{"rendered":"Toll fraud malware: How an Android application can drain your wallet"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Toll fraud malware, a subcategory of billing fraud in which malicious applications subscribe users to premium services without their knowledge or consent, is one of the most prevalent types of Android malware \u2013 and it continues to evolve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compared to other subcategories of billing fraud, which include SMS fraud and call fraud, toll fraud has unique behaviors. Whereas SMS fraud or call fraud use a simple attack flow to send messages or calls to a premium number, toll fraud has a complex multi-step attack flow that malware developers continue to improve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, we saw new capabilities related to how this threat targets users of specific network operators. It performs its routines only if the device is subscribed to any of its target network operators. It also, by default, uses cellular connection for its activities and forces devices to connect to the mobile network even if a Wi-Fi connection is available. Once the connection to a target network is confirmed, it stealthily initiates a fraudulent subscription and confirms it without the user\u2019s consent, in some cases even intercepting the one-time password (OTP) to do so. It then suppresses SMS notifications related to the subscription to prevent the user from becoming aware of the fraudulent transaction and unsubscribing from the service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another unique behavior of toll fraud malware is its use of dynamic code loading, which makes it difficult for mobile security solutions to detect threats through static analysis, since parts of the code are downloaded onto the device in certain parts of the attack flow. Despite this evasion technique, we\u2019ve identified characteristics that can be used to filter and detect this threat. We also see adjustments in Android API restrictions and Google Play Store publishing policy that can help mitigate this threat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toll fraud has drawn media attention since Joker, its first major malware family, found its way to the Google Play Store back in 2017. Despite this attention, there\u2019s not a lot of published material about how this type of malware carries out its fraudulent activities. Our goal for this blog post is to share an in-depth analysis on how this malware operates, how analysts can better identify such threats, and how Android security can be improved to mitigate toll fraud. This blog covers the following topics:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><a href=\"#WAP-billing\">The WAP billing mechanism: An overview<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Fraudulent-subcriptions\">Fraudulent subscriptions via toll fraud<\/a>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><a href=\"#Forcing-cellular\">Forcing cellular communication<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Fetching-premium-service\">Fetching premium service offers and initiating subscriptions<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Intercepting-OTP\">Intercepting OTPs<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Suppressing-notifications\">Suppressing notifications<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Dynamic-code-loading\">Using dynamic code loading for cloaking<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Mitigating-toll-fraud\">Mitigating the threat of toll fraud malware<\/a>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><a href=\"#Identifying-malware\">Identifying potential malware<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"#Improving-Android\">Improving Android security and privacy<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"WAP-billing\">The WAP billing mechanism: An overview<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To understand toll fraud malware, we need to know more about the billing mechanism that attackers use. The commonly used type of billing in toll fraud is Wireless Application Protocol (WAP). WAP billing is a payment mechanism that enables consumers to subscribe to paid content from sites that support this protocol and get charged directly through their mobile phone bill. The subscription process starts with the customer initiating a session with the service provider over a cellular network and navigating to the website that provides the paid service. As a second step, the user must click a subscription button, and, in some cases, receive a one-time password (OTP) that has to be sent back to the service provider to verify the subscription. The overall process is depicted below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"742\" height=\"678\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-1-the-wap-billing-process-in-a-nutshell.png\" alt=\"A diagram of how the Wireless Application Protocol billing process works. Interactions between the mobile device and premium service provider are mapped out, from the moment the device browses through services until the confirmation of service subscription.\" class=\"wp-image-117020\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-1-the-wap-billing-process-in-a-nutshell.png 742w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-1-the-wap-billing-process-in-a-nutshell-300x274.png 300w\" sizes=\"auto, (max-width: 742px) 100vw, 742px\" \/><figcaption class=\"wp-element-caption\">Figure 1. The WAP billing process in a nutshell<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It should be noted that the process depends on the service provider, thus not all steps are always present. For example, some providers do not require an OTP, which means that the mobile user can subscribe to a service by simply clicking the subscription button while the device is connected to a cellular network. &nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Fraudulent-subcriptions\">Fraudulent subscriptions via toll fraud<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We classify a subscription as fraudulent when it takes place without a user&#8217;s consent. In the case of toll fraud, the malware performs the subscription on behalf of the user in a way that the overall process isn\u2019t perceivable through the following steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Disable the Wi-Fi connection or wait for the user to switch to a mobile network<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Silently navigate to the subscription page<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Auto-click the subscription button<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Intercept the OTP (if applicable)<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Send the OTP to the service provider (if applicable)<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Cancel the SMS notifications (if applicable)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">One significant and permissionless inspection that the malware does before performing these steps is to identify the subscriber&#8217;s country and mobile network through the mobile country codes (MCC) and mobile network codes (MNC). This inspection is done to target users within a specific country or region. Both codes can be fetched by using either the <em>TelephonyManager<\/em>or the <em>SystemProperties<\/em>class. The <em>TelephonyManager.getSimOperator()<\/em> API call returns the MCC and MNCcodes as a concatenated string, while other functions of the same class can be used to retrieve various information about the mobile network that the device is currently subscribed to. As the network and SIM operator may differ (e.g., in roaming), the <em>getSimOperator<\/em>function is usually preferred by malware developers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same type of information can be fetched by using the <em>SystemProperties.get(String key)<\/em> function where the key parameter may be one or several (using multiple calls) of the following strings:<em> gsm.operator.numeric, gsm.sim.operator.numeric, gsm.operator.iso-country, gsm.sim.operator.iso-country, gsm.operator.alpha, gsm.sim.operator.alpha<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The difference with the first call is that the <em>android.os.SystemProperties<\/em> class is marked as <em>@SystemApi<\/em>, therefore an application has to use Java reflection to invoke the function. The MNC and MCC codes are also used to evade detection, as the malicious activity won\u2019t be performed unless the SIM operator belongs to the ones targeted:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"210\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-2-joker-malware-running-its-payload-targeting-south-african-mobile-operators-62bca491a07eb.png\" alt=\"A screenshot of code snippet from the Joker malware. The code specifies that the malware will only run if the device is under a South African mobile operator.\" class=\"wp-image-117026\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-2-joker-malware-running-its-payload-targeting-south-african-mobile-operators-62bca491a07eb.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-2-joker-malware-running-its-payload-targeting-south-african-mobile-operators-62bca491a07eb-300x79.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-2-joker-malware-running-its-payload-targeting-south-african-mobile-operators-62bca491a07eb-768x202.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 2. Joker malware running its payload, targeting South African mobile operators<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The following sections present an analysis of the fraudulent subscription steps in the context of the Android operating system. This analysis can help identify the API calls and the permissions needed for the implementation of a toll fraud scheme.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Forcing-cellular\">Forcing cellular communication<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Variants of toll fraud malware targeting Android API level 28 (Android 9.0) or lower disable the Wi-Fi by invoking the <em>setWifiEnabled <\/em>method of the <em>WifiManager <\/em>class. The permissions needed for this call are <em>ACCESS_WIFI_STATE<\/em> and <em>CHANGE_WIFI_STATE<\/em><strong>. <\/strong>Since the protection level for both permissions is set to normal, they are automatically approved by the system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meanwhile, malware targeting a higher API level uses the <em>requestNetwork<\/em> function of the <em>ConnectivityManager<\/em>class. The <a href=\"https:\/\/developer.android.com\/reference\/android\/net\/ConnectivityManager#requestNetwork(android.net.NetworkRequest,%20android.net.ConnectivityManager.NetworkCallback)\" target=\"_blank\" rel=\"noreferrer noopener\">Android developers page<\/a> describes the<em> requestNetwork method <\/em>as:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>This method will attempt to find the best network that matches the given NetworkRequest, and to bring up one that does if none currently satisfies the criteria. The platform will evaluate which network is the best at its own discretion. Throughput, latency, cost per byte, policy, user preference and other considerations may be factored in the decision of what is considered the best network.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The required permission for this call is either <em>CHANGE_NETWORK_STATE<\/em> (protection level: normal) or <em>WRITE_SETTINGS<\/em>(protection level: signature|preinstalled|appop|pre23), but since the latter is protected, the former is usually preferred by malware developers. In the code snippet depicted below from a malware sample that can perform toll fraud, the function <em>vgy7<\/em>is requesting a <em>TRANSPORT_CELLULAR<\/em> transport type (Constant Value: 0x00000000) with <em>NET_CAPABILITY_INTERNET<\/em> (Constant Value: 0x0000000c):<em><\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"325\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-3-code-from-a-joker-malware-sample-requesting-a-transport-cellular-transport-type.png\" alt=\"A screenshot of code snippet from a Joker malware where the malware requests for a TRANSPORT_CELLULAR transport type. \" class=\"wp-image-117029\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-3-code-from-a-joker-malware-sample-requesting-a-transport-cellular-transport-type.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-3-code-from-a-joker-malware-sample-requesting-a-transport-cellular-transport-type-300x122.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-3-code-from-a-joker-malware-sample-requesting-a-transport-cellular-transport-type-768x312.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 3. Code from a Joker malware sample requesting a TRANSPORT_CELLULAR transport type<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Figure 3. Code from a Joker malware sample requesting a TRANSPORT_CELLULAR transport type<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <em>NetworkCallback<\/em>is used to monitor the network status and retrieve a <em>network<\/em>type variable that can be used to bind the process to a particular network via the <em>ConnectivityManager.bindProcessToNetwork<\/em>function. This allows the malware to use the mobile network even when there is an existing Wi-Fi connection. The proof-of-concept code depicted below uses the techniques described above to request a <em>TRANSPORT_CELLULAR<\/em> transport type. If the transport type is available, it binds the process to the mobile network to load the host at example.com in the application\u2019s WebView:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"703\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-4-proof-of-concept-code-to-request-a-transport-cellular-transport-type.png\" alt=\"A screenshot of proof-of-concept code to demonstrate a request for a TRANSPORT_CELLULAR transport type. \" class=\"wp-image-117035\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-4-proof-of-concept-code-to-request-a-transport-cellular-transport-type.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-4-proof-of-concept-code-to-request-a-transport-cellular-transport-type-300x264.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-4-proof-of-concept-code-to-request-a-transport-cellular-transport-type-768x675.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 4. Proof-of-concept code to request a TRANSPORT_CELLULAR transport type<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">While it is expected that the Wi-Fi connection is preferred even when mobile connection is also available, the process exclusively uses the cellular network to communicate with the server:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"587\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-5b-the-mobile-browser-loads-example-com-when-transport-cellular-transport-type-is-available.png\" alt=\"A screenshot of two Android mobile browser screens, side by side. The browser screen on the left loads the content of example.com, while the browser screen on the right loads a blank page. \" class=\"wp-image-117041\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-5b-the-mobile-browser-loads-example-com-when-transport-cellular-transport-type-is-available.png 618w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-5b-the-mobile-browser-loads-example-com-when-transport-cellular-transport-type-is-available-300x285.png 300w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 5. The mobile browser loads example.com when TRANSPORT_CELLULAR transport type is available and loads a blank page when only Wi-Fi is available<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In fact, the user must manually disable mobile data to prevent the malware from using the cellular network<strong>. <\/strong>Even though the <em>setWifiEnabled<\/em>has been deprecated, it can still be used by malware targeting API level 28 or lower.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Fetching-premium-service\">Fetching premium service offers and initiating subscriptions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Assuming that the SIM operator is on the target list and the device is using a <em>TRANSPORT_CELLULAR<\/em>type network, the next step is to fetch a list of websites offering premium services and attempt to automatically subscribe to them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The malware will communicate with a C2 server to retrieve a list of offered services. An offer contains, between else, a URL which will lead to a redirection chain that will end up to a web page, known as landing page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What happens next depends on the way that the subscription process is initiated, thus the malware usually includes code that can handle various subscription flows. In a typical case scenario, the user has to click an HTML element similar to the one depicted below (JOIN NOW), and as a second step, send a verification code back to the server:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"531\" height=\"632\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-6-a-subscription-page-thats-loaded-in-the-background-without-the-users-knowledge.png\" alt=\"A screenshot of a website offering subscriptions to apps and premium services. There are two banners on the website, with the one above displaying the text &quot;Join Now&quot;. The banner at the bottom displays sports-related images (football and car racing). \" class=\"wp-image-117044\" style=\"width:712px;height:auto\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-6-a-subscription-page-thats-loaded-in-the-background-without-the-users-knowledge.png 531w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-6-a-subscription-page-thats-loaded-in-the-background-without-the-users-knowledge-252x300.png 252w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 6. A subscription page that\u2019s loaded in the background without the user\u2019s knowledge.<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For the malware to do this automatically, it observes the page loading progress and injects JavaScript code designed to click HTML elements that initiate the subscription. As the user can only subscribe once to one service, the code also marks the HTML page using a cookie to avoid duplicate subscriptions. The following is an example of such a code:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"482\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-7-javascript-injected-code-scraping-related-html-elements.png\" alt=\"JavaScript injected code scraping related HTML elements\" class=\"wp-image-117047\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-7-javascript-injected-code-scraping-related-html-elements.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-7-javascript-injected-code-scraping-related-html-elements-300x181.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-7-javascript-injected-code-scraping-related-html-elements-768x463.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 7. JavaScript injected code scraping related HTML elements<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">On line 76, <em>getElementsByTagName<\/em>returns a collection of all the Document Object Model (DOM) elements tagged as <em>input<\/em>. The loop on line 78 goes through every element and checks its <em>type<\/em>as well as its <em>name<\/em>, <em>value,<\/em> and <em>alt<\/em>properties. When an element is found to contain keywords, such as \u201cconfirm\u201d, \u201cclick\u201d, and \u201ccontinue\u201d, it is sent to the <em>c<\/em>function, as depicted below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"485\" height=\"276\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-8-javascript-function-simulating-clicks-on-selected-html-elements-62bcbdc36d81e.png\" alt=\"A screenshot of JavaScript code of a function where it simulates clicks on selected HTML elements.\" class=\"wp-image-117128\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-8-javascript-function-simulating-clicks-on-selected-html-elements-62bcbdc36d81e.png 485w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-8-javascript-function-simulating-clicks-on-selected-html-elements-62bcbdc36d81e-300x171.png 300w\" sizes=\"auto, (max-width: 485px) 100vw, 485px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 8. JavaScript function simulating clicks on selected HTML elements<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The <em>if<\/em> statement on line 36 checks if the element has already been clicked by calling the <em>jdh <\/em>function, displayed below in Figure 12. Finally, the <em>c <\/em>function invokes the <em>click()<\/em> or <em>submit()<\/em> function by the time the branch on line 37 (see figure 11) is followed:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"632\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-9-javascript-code-checking-if-the-page-has-already-been-visited.png\" alt=\"A screenshot of the JavaScript code where the malware checks if a premium service page has already been visited. \" class=\"wp-image-117053\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-9-javascript-code-checking-if-the-page-has-already-been-visited.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-9-javascript-code-checking-if-the-page-has-already-been-visited-300x237.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-9-javascript-code-checking-if-the-page-has-already-been-visited-768x607.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 9. JavaScript code checking if the page has already been visited<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The HTML page loading process is tracked using an <em>onPageFinished<\/em>callback of the <em>WebViewClient<\/em>attached to the WebView. Subsequently, a handler that listens for relative message types acts depending on the next steps that are required for the subscription to take place. In the code snippet below, the URL loaded in the WebView and a <em>signal<\/em>with <em>id<\/em> \u201c128\u201dis sent to <em>handler2<\/em>to evaluate the service and initiate the subscription process:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"665\" height=\"564\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-10-malware-evaluating-the-steps-required-to-initiate-the-subscription-process.png\" alt=\"A screenshot of malware code where it checks for specific message types to determine the next steps required for a subscription to take place. \" class=\"wp-image-117056\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-10-malware-evaluating-the-steps-required-to-initiate-the-subscription-process.png 665w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-10-malware-evaluating-the-steps-required-to-initiate-the-subscription-process-300x254.png 300w\" sizes=\"auto, (max-width: 665px) 100vw, 665px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 10. Malware evaluating the steps required to initiate the subscription process<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Multi-step or target subscription processes may require additional verification steps. The handler depicted below checks the page URL loaded in the WebView. If the URL matches <em>doi[.]mtndep.co.za\/service\/,<\/em> then the handler runs the JavaScript code assigned to the <em>Properties.call_jbridge_dump<\/em> variable:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"416\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-11-malware-running-code-depending-on-certain-conditions.png\" alt=\"A screenshot of malware code where it identifies the conditions required to determine what routine to run next. It assigns code based on specific conditions such as URL displayed.\" class=\"wp-image-117059\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-11-malware-running-code-depending-on-certain-conditions.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-11-malware-running-code-depending-on-certain-conditions-300x156.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-11-malware-running-code-depending-on-certain-conditions-768x399.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 11. Malware running code depending on certain conditions<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A <em>signal<\/em> with <em>id<\/em> \u201c107\u201d triggers some additional steps that require communication with the command and control (C2) server. This case is demonstrated in the following figures:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"588\" height=\"205\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-12-malware-running-code-depending-on-the-specific-signal-id.png\" alt=\"A screenshot of malware code that is run when a signal with the ID number &quot;107&quot; is identified. \" class=\"wp-image-117062\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-12-malware-running-code-depending-on-the-specific-signal-id.png 588w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-12-malware-running-code-depending-on-the-specific-signal-id-300x105.png 300w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 12. Malware running code depending on the specific signal id<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Upon receiving the signal, the handler invokes the <em>v1.bhu8<\/em> function:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"349\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-13-malware-attacking-anti-fraud-protection.png\" alt=\"A screenshot of malware code where the handler invokes the v1.bhu8 function. The said function checks if a service related to anti-fraud protection is running on the device. \" class=\"wp-image-117065\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-13-malware-attacking-anti-fraud-protection.png 684w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-13-malware-attacking-anti-fraud-protection-300x153.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 13. Malware attacking anti-fraud protection<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After checking for the <em>web-zdm[.]secure-d[.]io\/api\/v1\/activate<\/em>in the server\u2019s reply, the malware invokes the <em>tpack[.]l2.bhu8[.]vgy7 <\/em>function. This function sends the current URL loaded in the application\u2019s WebView as well as some extra information like country code, and HTML code:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"617\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-14-malware-sending-information-to-the-c2-server.png\" alt=\"A screenshot if malware code where the malware sends information from the device to its C2 server. Sent information include country code, the HTML code of the website shown on the browser.\" class=\"wp-image-117068\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-14-malware-sending-information-to-the-c2-server.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-14-malware-sending-information-to-the-c2-server-300x231.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-14-malware-sending-information-to-the-c2-server-768x592.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em><em>Figure 14. Malware sending information to the C2 server<\/em><\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"255\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-15-a-solver-type-service-offered-by-the-c2-server.png\" alt=\"A screenshot of malware code where a solver-type service is offered by the C2 server. \" class=\"wp-image-117071\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-15-a-solver-type-service-offered-by-the-c2-server.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-15-a-solver-type-service-offered-by-the-c2-server-300x96.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-15-a-solver-type-service-offered-by-the-c2-server-768x245.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 15. A solver-type service offered by the C2 server<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Intercepting-OTP\">Intercepting OTPs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In most cases, the service provider sends an OTP that must be sent back to the server to complete the subscription process. As the OTP can be sent by using either the HTTP or USSD protocol or SMS, the malware must be capable of intercepting these types of communication. For the HTTP protocol, the server\u2019s reply must be parsed to extract the token. For the USSD protocol, on the other hand, the only way to intercept is by using the accessibility service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One method of intercepting an SMS message, requiring <em>android.permission.RECEIVE_<\/em><em>SMS<\/em> permission, is to instantiate a <em>BroadcastReceiver<\/em> that listens for the <em>SMS_<\/em>RECEIVED action.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The following code snippet creates a <em>BroadcastReceiver<\/em>and overrides the <em>onReceive<\/em>callback of the superclass to filter out messages that start with \u201crch\u201d:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"332\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-16-code-that-filters-out-sms-messages-that-start-with-rch.png\" alt=\"A screenshot of malware code where the malware filters SMS messages that start with &quot;rch&quot;\" class=\"wp-image-117074\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-16-code-that-filters-out-sms-messages-that-start-with-rch.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-16-code-that-filters-out-sms-messages-that-start-with-rch-300x125.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-16-code-that-filters-out-sms-messages-that-start-with-rch-768x319.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 16. Code that filters out SMS messages that start with \u201crch\u201d<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Subsequently, it creates an <em>IntentFilter<\/em>, which renders the receiver capable of listening for an <em>SMS_RECEIVED<\/em> action, and finally the receiver is registered dynamically:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"56\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-17-the-intentfilter-enabling-the-receiver-to-listen-for-an-smsreceived-action-62bcbc599e278.png\" alt=\"A screenshot of the IntentFilter code, enabling the receiver to listen for any received SMS messages. \" class=\"wp-image-117080\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-17-the-intentfilter-enabling-the-receiver-to-listen-for-an-smsreceived-action-62bcbc599e278.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-17-the-intentfilter-enabling-the-receiver-to-listen-for-an-smsreceived-action-62bcbc599e278-300x21.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-17-the-intentfilter-enabling-the-receiver-to-listen-for-an-smsreceived-action-62bcbc599e278-768x54.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 17. The IntentFilter enabling the receiver to listen for an SMS_RECEIVED action<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To handle OTP messages that are sent using the HTTP protocol, the malware parses the HTML code to search for keywords indicating the verification token. The following code contains a flow where the extracted token is sent to the server using the <em>sendTextMessage<\/em> API call:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"738\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-18-extracted-token-is-sent-to-the-c2-server-using-the-sendtextmessage-api-call.png\" alt=\"A screenshot of the malware code where an extracted verification token from the OTP message is sent to the C2 server. The code indicates that this is done through the sendTextMessage API. \" class=\"wp-image-117083\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-18-extracted-token-is-sent-to-the-c2-server-using-the-sendtextmessage-api-call.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-18-extracted-token-is-sent-to-the-c2-server-using-the-sendtextmessage-api-call-300x277.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-18-extracted-token-is-sent-to-the-c2-server-using-the-sendtextmessage-api-call-768x708.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 18. Extracted token is sent to the C2 server using the sendTextMessage API call<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The additional permission that is required to enable this flow is <em>SEND_SMS<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another way of intercepting SMS messages is to extend the <a><em>NotificationListenerService<\/em><\/a>. This service receives calls from the system when new notifications are posted or removed, including the ones sent from the system\u2019s default SMS application. The code snippet below demonstrates this functionality:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"583\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-19-extending-the-notificationlistenerservice-service.png\" alt=\"A screenshot of malware code where the NotificationLIstenerService is extended. This enables the app to receive calls from the system when new notifications are posted or removed.\" class=\"wp-image-117086\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-19-extending-the-notificationlistenerservice-service.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-19-extending-the-notificationlistenerservice-service-300x219.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-19-extending-the-notificationlistenerservice-service-768x560.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 19. Extending the NotificationListenerService service<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We triggered a notification with the title \u201cSMS_Received\u201d and text \u201cPin:12345\u201d during our analysis, resulting in the following output in the application&#8217;s logcat:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"742\" height=\"146\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-20-logcat-output-after-a-notification-is-posted.png\" alt=\"A screenshot of the malware's logcat. The logcat output shows that it is able to capture contents of a notification received by the device. \" class=\"wp-image-117089\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-20-logcat-output-after-a-notification-is-posted.png 742w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-20-logcat-output-after-a-notification-is-posted-300x59.png 300w\" sizes=\"auto, (max-width: 742px) 100vw, 742px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 20. Logcat output after a notification is posted<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, besides the broadcast receiver and the notification listener techniques of intercepting an SMS message, a <a href=\"https:\/\/developer.android.com\/reference\/android\/database\/ContentObserver\"><em>ContentObserver<\/em><\/a> can be used to receive callbacks for changes to specific content. The <em>onChange<\/em> callback of the <em>SmsObserver<\/em> class (depicted below) is called each time the system changes the SMS content provider state:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"737\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-21-the-proof-of-concept-code-monitoring-for-incoming-sms-messages-through-smsobserver.png\" alt=\"A screenshot of proof-of-concept code to demonstrate how the malware monitors for incoming SMS messages. \" class=\"wp-image-117092\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-21-the-proof-of-concept-code-monitoring-for-incoming-sms-messages-through-smsobserver.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-21-the-proof-of-concept-code-monitoring-for-incoming-sms-messages-through-smsobserver-300x276.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-21-the-proof-of-concept-code-monitoring-for-incoming-sms-messages-through-smsobserver-768x708.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 21. The proof-of-concept code monitoring for incoming SMS messages through SmsObserver<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Suppressing-notifications\">Suppressing notifications<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Since API level 18, an application that extends the <em>NotificationListenerService<\/em> is authorized to suppress notifications triggered from other applications. The relevant API calls are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><em>cancelAllNotifications()<\/em> to inform the notification manager to dismiss all notifications<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><em>cancelNotification(String key)<\/em> to inform the notification manager to dismiss a single notification<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><em>cancelNotifications(String [] keys)<\/em> to inform the notification manager to dismiss multiple notifications at once.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This API subset is abused by malware developers to suppress service subscription notification messages posted by the default SMS application. More specifically, upon successful subscription, the service provider sends a message to the user to inform them about the charges and offers the option to unsubscribe. By having access to the notification listener service, the malware can call any of the functions mentioned above to remove the notification.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Dynamic-code-loading\">Using dynamic code loading for cloaking<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cloaking refers to a set of techniques used to hide malicious behavior. For example, most toll fraud malware won\u2019t take any action if the mobile network is not among its targets. Another example of a cloaking mechanism used by these threats is dynamic code loading. This means that certain malware codes are only loaded when certain conditions are met, making it difficult to detect by static analysis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The following is a characteristic example of a multi-stage toll fraud malware with SHA-256: <em>2581aba12919ce6d9f89d86408d286a703c1e5037337d554259198c836a82d75<\/em> and package name: <em>com.cful.mmsto.sthemes<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"stage-one\">Stage one<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This malware\u2019s entry point is found to be the <em>com.android.messaging.BugleApplication<\/em>, a subclass of the <em>Application<\/em> class. The malicious flow leads to the function below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"459\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-22-the-function-where-the-entry-point-of-the-malware-leads-to.png\" alt=\"A screenshot of malware code showing the function where the entry point of the malware leads to. This is the starting point of the dynamic code loading done by the malware. \" class=\"wp-image-117095\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-22-the-function-where-the-entry-point-of-the-malware-leads-to.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-22-the-function-where-the-entry-point-of-the-malware-leads-to-300x172.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-22-the-function-where-the-entry-point-of-the-malware-leads-to-768x441.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 22. The function where the entry point of the malware leads to<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The call on line 21 fills the <em>files<\/em>array with the filenames fetched from the <em>assets<\/em> directory. The <em>for loop<\/em> enters the<em>if <\/em>branch at line 32 if the name of the asset file ends with \u201c355\u201d. Querying the asset files of the app for such a filename yields the following result:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"672\" height=\"369\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-23-query-result-when-searching-for-355.png\" alt=\"A screenshot of the result when querying the malware's asset file for a file name that ends with &quot;355&quot;. The result is a file with the name PhoneNUmberAlternateFormatsProto_355\" class=\"wp-image-117098\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-23-query-result-when-searching-for-355.png 672w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-23-query-result-when-searching-for-355-300x165.png 300w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 23. Query result when searching for \u201c355\u201d<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The <em>PhoneNumberAlternateFormatsProto_355<\/em> is the source file which, in conjunction with a destination file and the string \u201cxh7FEC2clYuoNQ$ToT99ue0BINhw^Bzy\u201d, is given as parameters to the <em>ns.j<\/em> function:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"287\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-24-the-nsj-function.png\" alt=\"A screenshot of the code of the ns.j function. It shows that the function accepts parameters from the source file PhotoNumberAlternateFormatsProto_355.\" class=\"wp-image-117101\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-24-the-nsj-function.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-24-the-nsj-function-300x108.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-24-the-nsj-function-768x276.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 24. The ns.j function<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The <em>SecretKeySpec<\/em> on line 68 is constructed from the first 16 bytes of the SHA-1 digest of the password string. This key is used to decrypt the file fetched from the assets using Advanced Encryption Standard (AES) in electronic codebook (ECB) mode. The decryption result is an ELF file that is saved in the application\u2019s cache directory and loaded using the <em>System.load<\/em> function.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"stage-two\">Stage two<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The loaded library fetches the <em>PhoneNumberAlternateFormatsProto_300<\/em>file from the assets folder using the <em>AAssetManager_fromJava<\/em> function and writes it to a temporary file with the name <em>b<\/em> in the <em>\/data\/data\/&lt;package_name&gt;\/<\/em> directory, as seen on line 93 below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"582\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-25-fetching-the-second-payload-from-the-assets-directory.png\" alt=\"A screenshot of code wherein the malware fetches the second payload from the assets directory. \" class=\"wp-image-117104\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-25-fetching-the-second-payload-from-the-assets-directory.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-25-fetching-the-second-payload-from-the-assets-directory-300x218.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-25-fetching-the-second-payload-from-the-assets-directory-768x559.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 25. Fetching the second payload from the assets directory.<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The file <em>b<\/em> is then decrypted using an XOR operation with the key \u201cxh7FEC2clYuoNQ$ToT99ue0BINhw^Bzy\u201d, which is given from the Java side (see following figures). The decrypted payload is saved with the name <em>l<\/em> in the application\u2019s data directory:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"677\" height=\"295\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-26-decrypting-the-assets-file.png\" alt=\"A screenshot of code where the malware decrypts the asset with the name &quot;l_file_fd&quot;. \" class=\"wp-image-117107\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-26-decrypting-the-assets-file.png 677w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-26-decrypting-the-assets-file-300x131.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 26. Decrypting asset<\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"60\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-27-the-native-handletask-called-from-the-Java-code.png\" alt=\"\" class=\"wp-image-117110\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-27-the-native-handletask-called-from-the-Java-code.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-27-the-native-handletask-called-from-the-Java-code-300x23.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-27-the-native-handletask-called-from-the-Java-code-768x58.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Figure 27. The native handleTask called from the Java code<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same function loads the decrypted payload <em>l<\/em> and invokes the <em>com.AdsView.pulgn<\/em> using the <em>DexClassLoader<\/em> class loader (variable names have been changed for clarity):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"371\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader.png\" alt=\"A screenshot of the malware code where it loads the decrypted asset using the DexClassLoader class loader. \" class=\"wp-image-117113\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader-300x139.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader-768x356.png 768w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader-767x355.png 767w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader-539x249.png 539w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-28-dynamically-loading-the-decrypted-asset-using-the-dexclassloader-465x215.png 465w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 28. Dynamically loading the decrypted asset using the DexClassLoader<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Decrypting the second payload manually yields the following APK file:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"246\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-29-the-decrypted-apk-file.png\" alt=\"A screenshot of the code of the decrypted asset which is an APK file. \" class=\"wp-image-117116\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-29-the-decrypted-apk-file.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-29-the-decrypted-apk-file-300x92.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-29-the-decrypted-apk-file-768x236.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 29. The decrypted APK file<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It must be mentioned that the <em>DexClassLoader<\/em>can be used to load classes from .jar and .apk files that contain a <em>classes.dex<\/em> entry.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"stage-three\">Stage three<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This decrypted APK consists of two main classes: the <em>com.Helper<\/em>and <em>com.AdsView<\/em>. The <em>com.AdsView.pulgn<\/em>function is the first to be invoked by the native library described in the previous section:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"218\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-30-pulgn-is-the-first-function-to-be-invoked-when-the-payload-is-loaded.png\" alt=\"A screenshot of the code for the pulgn function, which is the first to be invoked once the payload is loaded. \" class=\"wp-image-117119\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-30-pulgn-is-the-first-function-to-be-invoked-when-the-payload-is-loaded.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-30-pulgn-is-the-first-function-to-be-invoked-when-the-payload-is-loaded-300x82.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-30-pulgn-is-the-first-function-to-be-invoked-when-the-payload-is-loaded-768x209.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 30. pulgn is the first function to be invoked when the payload is loaded<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The runnable thread\u2019s main functionality is to connect the host to <em>xn3o[.]oss-accelerate[.]aliyuncs[.]com<\/em> and download a JAR file named <em>xn30<\/em>, which is saved to the cache directory with name <em>nvi<\/em> and then loaded using the <em>startSdk<\/em> function, as shown on line 81 below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"426\" src=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-31-download-and-trigger-the-final-payload.png\" alt=\"A screenshot of the malware code where it triggers the download of the final payload. \" class=\"wp-image-117122\" srcset=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-31-download-and-trigger-the-final-payload.png 800w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-31-download-and-trigger-the-final-payload-300x160.png 300w, https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/fig-31-download-and-trigger-the-final-payload-768x409.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 31. Download and trigger the final payload<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The file <em>xn30<\/em> is the final payload of stage three and is the one that performs the toll fraud activities previously described.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Mitigating-toll-fraud\">Mitigating the threat of toll fraud malware<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Toll fraud is one of the most common malware categories with high financial loss as its main impact. Due to its sophisticated cloaking techniques, prevention from the side of the user plays a key role in keeping the device secure. A rule of thumb is to avoid installing Android applications from untrusted sources (sideloading) and always follow up with device updates. We also recommend end users take the following steps to protect themselves from toll fraud malware:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Install applications only from the Google Play Store or other trusted sources.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Avoid granting SMS permissions, notification listener access, or accessibility access to any applications without a strong understanding of why the application needs it. These are powerful permissions that are not commonly needed.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Use a solution such as <a href=\"https:\/\/docs.microsoft.com\/en-us\/microsoft-365\/security\/defender-endpoint\/microsoft-defender-endpoint-android\">Microsoft Defender for Endpoint on Android<\/a> to detect malicious applications.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">If a device is no longer receiving updates, strongly consider replacing it with a new device.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Identifying-malware\">Identifying potential malware<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For security analysts, it is important to be aware that conventional mitigation techniques based on static detection of malware code patterns can only offer limited remediation against this malware. This is due to the extended use of reflection, encryption, compression, obfuscation, steganography, and dynamic code loading.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are, however, characteristics that can be used to identify this type of malware. We can classify these characteristics into three:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Primary characteristics &#8211; patterns in plaintext included in the application that can be analyzed statically<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Secondary characteristics &#8211; common API calls used to conduct toll fraud activities<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Tertiary characteristics \u2013 patterns in Google Play Store metadata such as the application\u2019s category, the developer\u2019s profile, and user reviews, among others<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The tertiary characteristics are useful for initial filtering for potential malware. Patterns observed in the apps\u2019 metadata are related to malware developers\u2019 attempts to infect as many devices as possible in a short amount of time, while remaining published on the Google Play Store for as long as they can. We\u2019ve observed that attackers often follow these steps to keep their apps in the Google Play Store: &nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Use open-source applications that belong to popular categories and can be trojanized with minimal effort. The preferred application <a href=\"https:\/\/support.google.com\/googleplay\/android-developer\/answer\/9859673\">categories<\/a> include personalization (like wallpaper and lock screen apps), beauty, editor, communication (such as messaging and chat apps), photography, and tools (like cleaner and fake antivirus apps).<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Upload clean versions until the application gets a sufficient number of installs.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Update the application to dynamically load malicious code.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Separate the malicious flow from the uploaded application to remain undetected for as long as possible.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">These applications often share common characteristics:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Excessive use of permissions that are not suitable to the application\u2019s usage (for example, wallpaper, editor, and camera apps that bind the notification listener service or ask for SMS permissions)<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Consistent user interfaces, with similar icons, policy pages, and buttons<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Similar package names<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Suspicious developer profile (fake developer name and email address)<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Numerous user complaints in the reviews<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Once potential malware samples are identified based on these tertiary characteristics, the primary characteristics can be used for further filtering and confirmation. Applications cannot obfuscate their permission requests, use of the notification listener service, or use of accessibility service. These requests must appear in the <em>AndroidManifest.xml<\/em> file within the APK, where they can be easily detected using static analysis. The commonly requested permissions by malware performing toll fraud may include:<em> READ_SMS, RECEIVE_SMS, SEND_SMS, CHANGE_WIFI_STATE, ACCESS_WIFI_STATE, CHANGE_NETWORK_STATE<\/em>. Requests for notification listener and accessibility service should be considered extremely suspicious.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Secondary characteristics also include suspicious API calls including: <em>setWifiEnabled, requestNetwork, setProccessDefaultnetwork, bindProcessToNetwork, getSimOperator<\/em> and <em>cancelAllNotifications<\/em>. However, since these calls may be obfuscated and may be hard to identify during static analysis, a more in-depth analysis may be necessary for certainty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Improving-Android\">Improving Android security and privacy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Google continuously improves Android security and privacy as the mobile threat landscape evolves and new threats and adversary techniques are discovered. For example, in the operating system, API calls that can reveal potentially sensitive information continue to be removed or restricted, and in the Google Play Store, the publication policies guard against use of certain high-risk permissions (for example, the ability to receive or send SMSs) by requiring a <a href=\"https:\/\/support.google.com\/googleplay\/android-developer\/answer\/9214102\">Permission Declaration Form<\/a> to be completed justifying their use. We anticipate Android security will continue to evolve to address abuse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As discussed, applications currently can identify the cellular network operator and can send network traffic over the cellular network without any transparency to the user. Additionally, applications can request access to read and dismiss notifications, a very powerful capability, without needing to justify this behavior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Toll fraud has been one of the most prevalent types of Android malware in Google Play Store since 2017, when families like Joker and their variants made their first appearance. It accounted for 34.8% of installed Potentially Harmful Application (PHA) from the <a href=\"https:\/\/transparencyreport.google.com\/android-security\/store-app-safety\">Google Play Store in the first quarter of 2022<\/a>, ranking second only to spyware.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By subscribing users to premium services, this malware can lead to victims receiving significant mobile bill charges. Affected devices also have increased risk because this threat manages to evade detection and can achieve a high number of installations before a single variant gets removed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With this blog, we want to inform end users about the details of this threat and how they can protect themselves from toll fraud. We also aim to provide security analysts with guidance on how to identify other malicious applications that use these techniques.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our in-depth analysis of this threat and its continuous evolution informs the protection we provide through solutions like Microsoft Defender for Endpoint on Android.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.microsoft.com\/en-us\/security\/business\/endpoint-security\/microsoft-defender-endpoint\">Learn how Microsoft Defender for Endpoint provides cross-platform security, including mobile threat defense capabilities<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Dimitrios Valsamaras <\/strong>and <strong>Sang Shin Jung<\/strong><br>Microsoft 365 Defender Research Team<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"appendix\">Appendix<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"samples-sha-256\">Samples (SHA-256)<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Sample<\/strong><\/td><td><strong>SHA-256<\/strong><\/td><\/tr><tr><td>Initial APK file<\/td><td>2581aba12919ce6d9f89d86408d286a703c1e5037337d554259198c836a82d75 (com.cful.mmsto.sthemes)<\/td><\/tr><tr><td>Payload of stage two: Elf File (loader)<\/td><td>904169162209a93ac3769ae29c9b16d793d5d5e52b5bf198e59c6812d7d9eb14 (PhoneNumberAlternateFormatsProto_355, decrypted)<\/td><\/tr><tr><td>Payload of stage three: APK (hostile downloader)<\/td><td>61130dfe436a77a65c04def94d3083ad3c6a18bf15bd59a320716a1f9b39d826 (PhoneNumberAlternateFormatsProto_300, decrypted)<\/td><\/tr><tr><td>Payload of stage four: DEX (billing fraud)<\/td><td>4298952f8f254175410590e4ca2121959a0ba4fa90d61351e0ebb554e416500f<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"common-api-calls-and-permissions\">Common API calls and permissions<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>API Calls<\/strong><\/td><td><strong>Permissions<\/strong><\/td><td><strong>SDK<\/strong><\/td><\/tr><tr><td>setWifiEnabled<\/td><td>CHANGE_WIFI _STATE ACCESS_WIFI_STATE<\/td><td>&lt;29<\/td><\/tr><tr><td>requestNetwork<\/td><td>CHANGE_NETWORK_STATE<\/td><td>&gt;28<\/td><\/tr><tr><td>setProcessDefaultNetwork<\/td><td>&nbsp;<\/td><td>&lt;23<\/td><\/tr><tr><td>bindProcessToNetwork<\/td><td>&nbsp;<\/td><td>&gt;22<\/td><\/tr><tr><td>getActiveNetworkInfo<\/td><td>ACCESS_NETWORK_STATE<\/td><td>&nbsp;<\/td><\/tr><tr><td>getSimOperator<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>get (SystemProperties)<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>addJavascriptInterface<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>evaluateJavascript<\/td><td>&nbsp;<\/td><td>&gt;18<\/td><\/tr><tr><td>onPageFinished<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>onPageStarted<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>onReceive for SMS BroadcastReceiver w\/ android.provider.Telephony.SMS_RECEIVED<\/td><td>RECEIVE_SMS<\/td><td>&gt;19<\/td><\/tr><tr><td>createFromPdu<\/td><td>RECEIVE_SMS<\/td><td>&nbsp;<\/td><\/tr><tr><td>getMessageBody<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>onChange for SMS ContentObserver w\/ android.provider.telephony.SmsProvider\u2019s content URI (\u201ccontent:\/\/sms\u201d)<\/td><td>READ_SMS<\/td><td>&nbsp;<\/td><\/tr><tr><td>sendTextMessage<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>onNotificationPosted<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"references\">References<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/www.twilio.com\/learn\/voice-and-video\/toll-fraud\">Everything You Need to Know About Toll Fraud &#8211; Voice &amp; Video &#8211; Twilio<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/security.googleblog.com\/2020\/01\/pha-family-highlights-bread-and-friends.html\">Google Online Security Blog: PHA Family Highlights: Bread (and Friends) (googleblog.com)<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/developers.google.com\/android\/play-protect\/phacategories\">Malware categories&nbsp; |&nbsp; Play Protect&nbsp; |&nbsp; Google Developers<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/developer.android.com\/reference\/android\/net\/ConnectivityManager#requestNetwork(android.net.NetworkRequest,%20android.net.ConnectivityManager.NetworkCallback)\">ConnectivityManager&nbsp; |&nbsp; Android Developers<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/developer.android.com\/reference\/dalvik\/system\/DexClassLoader\">DexClassLoader&nbsp; |&nbsp; Android Developers<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/support.google.com\/googleplay\/android-developer\/answer\/10964491#:~:text=Google%20Play%20permits%20the%20use%20of%20the%20AccessibilityService,eligible%20to%20declare%20that%20they%20are%20accessibility%20tools.\">Use of the AccessibilityService API &#8211; Play Console Help (google.com)<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Toll fraud malware, a subcategory of billing fraud in which malicious applications subscribe users to premium services without their knowledge or consent, is one of the most prevalent types of Android malware \u2013 and it continues to evolve.<\/p>\n","protected":false},"author":68,"featured_media":117134,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"post_tag":[3741],"threat-intelligence":[3727,3734],"content-type":[3663],"job-role":[],"product":[],"topic":[3687],"coauthors":[3380],"class_list":["post-117014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-android","threat-intelligence-attacker-techniques-tools-and-infrastructure","threat-intelligence-mobile-threats","content-type-research","topic-threat-intelligence","review-flag-1694638265-576","review-flag-1694638265-310","review-flag-1694638271-781","review-flag-1-1694638265-354","review-flag-2-1694638266-864","review-flag-3-1694638266-241","review-flag-4-1694638266-512","review-flag-5-1694638266-171","review-flag-6-1694638266-691","review-flag-7-1694638266-851","review-flag-8-1694638266-352","review-flag-9-1694638266-118","review-flag-alway-1694638263-571","review-flag-disable","review-flag-new-1694638263-340"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Toll fraud malware: How an Android application can drain your wallet | Microsoft Security Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Toll fraud malware: How an Android application can drain your wallet | Microsoft Security Blog\" \/>\n<meta property=\"og:description\" content=\"Toll fraud malware, a subcategory of billing fraud in which malicious applications subscribe users to premium services without their knowledge or consent, is one of the most prevalent types of Android malware \u2013 and it continues to evolve.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Security Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-30T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-25T08:24:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Threat Intelligence\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Threat Intelligence\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/author\/microsoft-security-threat-intelligence\/\",\"@type\":\"Person\",\"@name\":\"Microsoft Threat Intelligence\"}],\"headline\":\"Toll fraud malware: How an Android application can drain your wallet\",\"datePublished\":\"2022-06-30T14:00:00+00:00\",\"dateModified\":\"2025-06-25T08:24:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\"},\"wordCount\":4375,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg\",\"keywords\":[\"Android\"],\"articleSection\":[\"Cybersecurity\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\",\"name\":\"Toll fraud malware: How an Android application can drain your wallet | Microsoft Security Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg\",\"datePublished\":\"2022-06-30T14:00:00+00:00\",\"dateModified\":\"2025-06-25T08:24:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg\",\"width\":1200,\"height\":800,\"caption\":\"Photo of a person looking at a mobile phone\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toll fraud malware: How an Android application can drain your wallet\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/\",\"name\":\"Microsoft Security Blog\",\"description\":\"Expert coverage of cybersecurity topics\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#organization\",\"name\":\"Microsoft Security Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2018\/08\/cropped-cropped-microsoft_logo_element.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2018\/08\/cropped-cropped-microsoft_logo_element.png\",\"width\":512,\"height\":512,\"caption\":\"Microsoft Security Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#\/schema\/person\/060b835777058efc81d6828a64820f98\",\"name\":\"Microsoft Security Threat Intelligence - Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/52c6f8d687a54d49c87e04326b24f4ed410c7a6535e21df3cca90d21039c9089?s=96&d=microsoft&r=g52243f56b7f8688616d4ca12dc0148e2\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/52c6f8d687a54d49c87e04326b24f4ed410c7a6535e21df3cca90d21039c9089?s=96&d=microsoft&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/52c6f8d687a54d49c87e04326b24f4ed410c7a6535e21df3cca90d21039c9089?s=96&d=microsoft&r=g\",\"caption\":\"Microsoft Security Threat Intelligence - Editor\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/security\/blog\/author\/eravena\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Toll fraud malware: How an Android application can drain your wallet | Microsoft Security Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/","og_locale":"en_US","og_type":"article","og_title":"Toll fraud malware: How an Android application can drain your wallet | Microsoft Security Blog","og_description":"Toll fraud malware, a subcategory of billing fraud in which malicious applications subscribe users to premium services without their knowledge or consent, is one of the most prevalent types of Android malware \u2013 and it continues to evolve.","og_url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/","og_site_name":"Microsoft Security Blog","article_published_time":"2022-06-30T14:00:00+00:00","article_modified_time":"2025-06-25T08:24:32+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg","type":"image\/jpeg"}],"author":"Microsoft Threat Intelligence","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Threat Intelligence","Est. reading time":"25 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/author\/microsoft-security-threat-intelligence\/","@type":"Person","@name":"Microsoft Threat Intelligence"}],"headline":"Toll fraud malware: How an Android application can drain your wallet","datePublished":"2022-06-30T14:00:00+00:00","dateModified":"2025-06-25T08:24:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/"},"wordCount":4375,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg","keywords":["Android"],"articleSection":["Cybersecurity"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/","url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/","name":"Toll fraud malware: How an Android application can drain your wallet | Microsoft Security Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage"},"thumbnailUrl":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg","datePublished":"2022-06-30T14:00:00+00:00","dateModified":"2025-06-25T08:24:32+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#primaryimage","url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg","contentUrl":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2022\/06\/Featured-image-toll-fraud.jpg","width":1200,"height":800,"caption":"Photo of a person looking at a mobile phone"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/2022\/06\/30\/toll-fraud-malware-how-an-android-application-can-drain-your-wallet\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/"},{"@type":"ListItem","position":2,"name":"Toll fraud malware: How an Android application can drain your wallet"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/","name":"Microsoft Security Blog","description":"Expert coverage of cybersecurity topics","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#organization","name":"Microsoft Security Blog","url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2018\/08\/cropped-cropped-microsoft_logo_element.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2018\/08\/cropped-cropped-microsoft_logo_element.png","width":512,"height":512,"caption":"Microsoft Security Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/#\/schema\/person\/060b835777058efc81d6828a64820f98","name":"Microsoft Security Threat Intelligence - Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/52c6f8d687a54d49c87e04326b24f4ed410c7a6535e21df3cca90d21039c9089?s=96&d=microsoft&r=g52243f56b7f8688616d4ca12dc0148e2","url":"https:\/\/secure.gravatar.com\/avatar\/52c6f8d687a54d49c87e04326b24f4ed410c7a6535e21df3cca90d21039c9089?s=96&d=microsoft&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/52c6f8d687a54d49c87e04326b24f4ed410c7a6535e21df3cca90d21039c9089?s=96&d=microsoft&r=g","caption":"Microsoft Security Threat Intelligence - Editor"},"url":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/author\/eravena\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Security Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/security\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/posts\/117014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/users\/68"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/comments?post=117014"}],"version-history":[{"count":2,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/posts\/117014\/revisions"}],"predecessor-version":[{"id":140230,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/posts\/117014\/revisions\/140230"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/media\/117134"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/media?parent=117014"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/post_tag?post=117014"},{"taxonomy":"threat-intelligence","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/threat-intelligence?post=117014"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/content-type?post=117014"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/job-role?post=117014"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/product?post=117014"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/topic?post=117014"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-json\/wp\/v2\/coauthors?post=117014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}