<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Threats &amp; Defenses Archives - Online Pitstop</title>
	<atom:link href="https://onlinepitstop.com/category/threats-defenses/feed/" rel="self" type="application/rss+xml" />
	<link>https://onlinepitstop.com/category/threats-defenses/</link>
	<description>The best source for news on cybersecurity, cybercrime, privacy and more.</description>
	<lastBuildDate>Wed, 24 May 2023 00:26:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Tampering with Conditional Access Policies Using Azure AD Graph API</title>
		<link>https://onlinepitstop.com/2023/05/24/tampering-with-conditional-access-policies-using-azure-ad-graph-api/</link>
					<comments>https://onlinepitstop.com/2023/05/24/tampering-with-conditional-access-policies-using-azure-ad-graph-api/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 24 May 2023 00:26:28 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2023/05/24/tampering-with-conditional-access-policies-using-azure-ad-graph-api/</guid>

					<description><![CDATA[<p>Summary Azure Active Directory (Azure AD) is Microsoft&#8217;s cloud-based identity and access management service, and it supports multiple authentication methods. The premium version of Azure AD also supports Conditional Access policies (CAPs) that grant or block access based on defined criteria, such as device compliance or user location. Azure AD stores the settings for the</p>
<p>The post <a href="https://onlinepitstop.com/2023/05/24/tampering-with-conditional-access-policies-using-azure-ad-graph-api/">Tampering with Conditional Access Policies Using Azure AD Graph API</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p><a href="https://learn.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-whatis">Azure Active Directory</a> (Azure AD) is Microsoft&#8217;s cloud-based identity and access management service, and it supports multiple <a href="https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-authentication-methods">authentication methods</a>. The premium version of Azure AD also supports <a href="https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/overview">Conditional Access policies</a> (CAPs) that grant or block access based on defined criteria, such as device compliance or user location. Azure AD stores the settings for the authentication methods and CAPs. CAPs can be modified via the Azure AD portal, PowerShell, and API calls.</p>
<p>In May 2022, Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers investigated which APIs allow editing of CAP settings and identified three: the legacy <a href="https://learn.microsoft.com/en-us/graph/migrate-azure-ad-graph-overview">Azure AD Graph</a> (also known as AADGraph), <a href="https://learn.microsoft.com/en-us/graph/use-the-api">Microsoft Graph</a>, and an undocumented Azure IAM API. AADGraph was the only API that allowed modification of all CAP settings, including the metadata. This capability lets administrators tamper with all CAP settings, including the creation and modification timestamps. Modifications made using AADGraph are not properly logged, endangering integrity and non-repudiation of Azure AD policies. </p>
<p>CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers shared these findings with Microsoft on May 26, 2022. Microsoft confirmed the findings a month later but stated that it is expected behavior. On May 11, 2023, Microsoft notified CTU researchers of planned changes to improve audit logs and restrict CAP updates via AADGraph. </p>
<h2>Azure AD CAPs</h2>
<p>Azure AD CAPs allow organizations to grant or block access to services protected by Azure AD. They can also be used for session monitoring and limiting a session lifetime. CAPs are enforced during the Azure AD authentication process. Azure AD uses the following common signals to make a policy decision:</p>
<ul>
<li>User or group membership</li>
<li>IP location information</li>
<li>Device</li>
<li>Application</li>
</ul>
<p>Only users with specific <a href="https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference">roles</a> can access CAPs in the Azure AD portal (see Table 1).</p>
<table>
<thead>
<tr>
<th>
            Access type
            </th>
<th>
            Azure AD role
            </th>
</tr>
</thead>
<tbody readability="2.5">
<tr readability="3">
<td>
            Read
            </td>
<td>
            Global Administrator<br />Global Reader<br />Security Administrator<br />Conditional Access Administrator<br />Security Reader
            </td>
</tr>
<tr readability="2">
<td>
            Modify
            </td>
<td>
            Global Administrator<br />Security Administrator<br />Conditional Access Administrator
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. Azure AD roles required to access CAPs.</em></p>
<p>Figure 1 shows an example CAP that requires all users to perform multi-factor authentication (MFA). The policy is not enabled in this example; it is set to <a href="https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/howto-conditional-access-insights-reporting">Report-only</a> mode. This mode allows organizations to assess the impact of the CAP before enforcing it.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_01.ashx?la=en&amp;modified=20230521193959&amp;hash=FCB6BB07D92CF09C60384A0D4909D327"><br /><em>Figure 1. Sample CAP. (Source: Secureworks)</em></p>
<p>The Azure AD portal displays the name, state, and creation and modification timestamps (see Figure 2).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_02.ashx?la=en&amp;modified=20230521193959&amp;hash=AEE98B0B7412FFB41B6C166E886825A6"><br /><em>Figure 2. List of CAPs. (Source: Secureworks)</em></p>
<p>The Azure AD portal reflects changes whenever the CAP is modified (see Figure 3).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_03.ashx?la=en&amp;modified=20230521194000&amp;hash=361C369EF2D4ED3D41ABCA25377A3C28"><br /><em>Figure 3. Modified CAP. (Source: Secureworks)</em></p>
<p>Azure AD <a href="https://learn.microsoft.com/en-us/azure/active-directory/reports-monitoring/concept-audit-logs">audit logs</a> captures CAP creation and modification events (see Figure 4).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_04.ashx?la=en&amp;modified=20230521194000&amp;hash=9039894C0323A3738FC104F00D414F1E"><br /><em>Figure 4. Azure AD audit logs listing CAP creation events (highlighted in red (bottom)) and CAP modification events (highlighted in green (top)). (Source: Secureworks)</em></p>
<p>Both the &#8216;Add conditional access policy&#8217; and &#8216;Update conditional access policy&#8217; events include details of the modified properties (see Figure 5). This feature provides a full audit trail and includes modified settings.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_05.ashx?la=en&amp;modified=20230521194000&amp;hash=31BD1415E5D114F6DB513B28E69BC593"><br /><em>Figure 5. Audit log details for the &#8216;Update conditional access policy&#8217; event. (Source: Secureworks)</em></p>
<h2>Modifying Conditional Access with API calls</h2>
<p>The Azure AD portal is a graphical user interface (GUI) that allows administrators to create and maintain CAPs via a browser. GUIs can perform ad-hoc tasks but not automation and programmatic access. To address those needs, Microsoft provides three APIs that can interact with CAPs: </p>
<ul>
<li>Azure AD IAM </li>
<li>MS Graph </li>
<li>Azure AD Graph (AADGraph)</li>
</ul>
<p></p>
<h3>Azure AD IAM API</h3>
<p>The Azure AD portal uses an undocumented Azure AD IAM API to create, view, and edit CAPs. The API is available at https ://main . iam . ad . ext . azure . com/api/Policies/Policies. Because the Azure AD portal uses Azure AD IAM APIs, access requires the permissions listed in Table 1. The API returns a list of CAPs as a JSON object (see Figure 6).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_06.ashx?la=en&amp;modified=20230521194001&amp;hash=5A3FECC1407A48BE3D0ED002989251CC"><br /><em>Figure 6. Azure AD IAM API response. (Source: Secureworks)</em></p>
<p>When the API opens a CAP for editing, it returns the CAP details as a JSON object (see Figure 7). This returned JSON object has many fields, which correspond to the CAP settings available in the Azure AD portal. The response also includes creation and modification timestamps.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_07.ashx?la=en&amp;modified=20230521194001&amp;hash=CEC9708B562B043FC687FE010EB94330"><br /><em>Figure 7. Response returned by the Azure AD IAM API call. (Source: Secureworks)</em></p>
<p>Modifying a CAP sends a JSON object to https: //main . iam . ad . ext . azure . com/api/Policies/ConvertPolicyMsGraph as an HTTP POST request. Figure 8 shows a JSON object where the CAP state was changed from Off to Report-only. Only the modified data and not the metadata is sent to Azure AD.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_08.ashx?la=en&amp;modified=20230521194001&amp;hash=0E82C0E3097299A05E8B46EDFC0F5E9F"><br /><em>Figure 8. Azure AD IAM API CAP modification request. (Source: Secureworks)</em></p>
<h3>MS Graph API</h3>
<p>MS Graph API support for conditional access is <a href="https://learn.microsoft.com/en-us/graph/api/resources/conditionalaccessroot?view=graph-rest-1.0">well-documented</a>, Microsoft also published <a href="https://github.com/Azure-Samples/azure-ad-conditional-access-apis/tree/main/01-configure/graphapi">examples</a> for creating and editing CAPs. Table 2 lists the required permissions to access CAPs via MS Graph API.</p>
<table>
<thead>
<tr>
<th>
            Access type
            </th>
<th>
            Permissions
            </th>
</tr>
</thead>
<tbody readability="2">
<tr readability="4">
<td>
            Modify (all three required)
            </td>
<td>
            Policy.Read.All<br />
            Policy.ReadWrite.ConditionalAccess<br />
            Application.Read.All
            </td>
</tr>
<tr>
<td>
            Read
            </td>
<td>
            Policy.Read.All
            </td>
</tr>
</tbody>
</table>
<p><em>Table 2. MS Graph API permissions required for CAPs.</em></p>
<p>Users or applications with these permissions can list CAPs by calling the API at https: //graph . Microsoft . com/v1.0/identity/conditionalAccess/policies. The API returns all CAPs and details as a JSON object (see Figure 9).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_09.ashx?la=en&amp;modified=20230521194001&amp;hash=0DE40268EAA9CD1CA78BB994FB80BF3C"><br /><em>Figure 9. MS Graph API response. (Source: Secureworks)</em></p>
<p>Creating or modifying a CAP uses the same API endpoint:</p>
<p>Only the modified data is sent to Azure AD. The metadata is not included.</p>
<h3>Azure AD Graph API (AADGraph)</h3>
<p>Microsoft has attempted to deprecate the AADGraph API for years. As of this publication, its <a href="https://techcommunity.microsoft.com/t5/microsoft-entra-azure-ad-blog/azure-ad-change-management-simplified/ba-p/2967456">retirement</a> is scheduled to occur sometime after June 30, 2023. Microsoft has removed public AADGraph API documentation to discourage its use.</p>
<p>CAPs can be accessed using the AADGraph API at https: //graph . windows . net/<em>&lt;tenant&gt;</em>/policies?api-version=<em>&lt;api version&gt;</em>, where <em>&lt;tenant&gt;</em> is the Azure AD tenant and <em>&lt;api version&gt;</em> is the desired AADGraph API version. Using 1.6 as the API version returns some Azure AD policies that the user can access if they have appropriate permissions, but CAPs are not listed. However, using 1.61-internal as the version returns all Azure AD policies, including CAPs, regardless of the user&#8217;s permissions. As a result, any user of the tenant can list CAPs and bypass the role requirements.</p>
<p>The API returns all policies as JSON objects. Figure 11 shows a CAP policy (indicated by the policyType of 18). </p>
<p><img fetchpriority="high" decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_11.ashx?la=en&amp;modified=20230521194002&amp;hash=BB6B20F3F572BA2DFB1863238F99626E" width="945" height="320"><br /><em>Figure 11. AADGraph API response. (Source: Secureworks)</em></p>
<p>The CAP settings and metadata are stored in the policyDetail attribute as a JSON object (see Figure 12). Administrators with permissions to modify CAPs can edit this attribute, enabling them to tamper with the CAP conditions and metadata.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_12.ashx?la=en&amp;modified=20230521194002&amp;hash=672FD36166788035B0F8FFB9AB246283" width="789" height="801"><br /><em>Figure 12. CAP settings in policyDetail attribute. (Source: Secureworks)</em></p>
<p>Updating an existing CAP with the AADGraph API involves an HTTP PATCH request to https: //graph . windows . net/<em>&lt;tenant&gt;</em>/policies/<em>&lt;objectid&gt;</em>?api-version=1.61-internal, where <em>&lt;objectid&gt;</em> is the object ID of the CAP to be modified. The content of the request is a JSON object that only includes the policyDetail attribute (see Figure 13).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_13.ashx?la=en&amp;modified=20230521194002&amp;hash=748FD27DFDC159D0E7940BA6B29FB00C" width="1060" height="114"><br /><em>Figure 13. Updating CAP using the AADGraph API. (Source: Secureworks)</em></p>
<h2>Tampering with Conditional Access policies</h2>
<p>CTU researchers used the <a href="https://aadinternals.com/aadinternals/">AADInternals</a> toolkit to tamper with CAPs. Administrators or threat actors can leverage the AADGraph API to make changes that are not properly logged.</p>
<ol readability="4">
<li>
    We retrieved the current policyDetail value of the example CAP:</p>
<ol readability="-2">
<li>Acquired an access token for an administrator with permissions to modify CAPs</li>
<li>Saved the example CAP to a variable</li>
<li readability="-1">Extracted the policyDetail value and copy the data to the clipboard (see Figure 14)
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_14.ashx?la=en&amp;modified=20230521194003&amp;hash=6F2F30522B4A2AF2A2D7BCF988D0E229"><br /><em>Figure 14. Getting current CAP policyDetail using AADInternals. (Source: Secureworks)</em></p>
</li>
</ol>
</li>
<li readability="3">
<p>We pasted the policyDetail value into a text editor and reformatted the JSON for readability (see Figure 15). We then emptied the ModifiedDateTime attribute (see line 4) and changed the State attribute from Reporting to Disabled. The modified JSON was flattened and copied to the clipboard.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_15.ashx?la=en&amp;modified=20230521194003&amp;hash=70EDA1B3D4472DDB2C982C1921A14ECB"><br /><em>Figure 15. Modified CAP policyDetail. (Source: Secureworks)</em></p>
</li>
<li readability="5">
<p>We used the modified policyDetail from the clipboard to update the CAP (see Figure 16).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_16.ashx?la=en&amp;modified=20230521194003&amp;hash=C2E1B979A9F49A5E48FE11AA7758E70A"><br /><em>Figure 16. Updating the CAP policyDetail attribute via AADInternals. (Source: Secureworks)</em></p>
<p>The Azure AD portal updated the modifications within a minute (see Figure 17).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_17.ashx?la=en&amp;modified=20230521194004&amp;hash=F8AB229859DD49A1091135E980367C78"><br /><em>Figure 17. Modified CAP in Azure AD portal. (Source: Secureworks)</em></p>
</li>
</ol>
<p>When CAPs are updated via the AADGraph API, the &#8216;Update conditional access policy&#8217; event is not generated in the audit logs (see Figure 18). As a result, there is an incomplete audit trail on what modifications were made.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_18.ashx?la=en&amp;modified=20230521194004&amp;hash=0AC87C21CA4D9ABECE462878636D0DE9"><br /><em>Figure 18. CAP modification via AADGraph does not create the Update conditional access event. (Source: Secureworks)</em></p>
<p>Threat actors with administrator permissions can leverage this omission to obscure CAPs. For instance, the PowerShell script in Figure 19 removes the timestamps and display names of all CAPs.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_19.ashx?la=en&amp;modified=20230521194004&amp;hash=DB044184A11FD3647B8E0A81E9F695DA"><br /><em>Figure 19. PowerShell scipt to remove CAP display name and timestamps. (Source: Secureworks)</em></p>
<p>After running the script, CAPs are fully functional. However, the Azure AD portal cannot open or edit them (see Figure 20).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/105%20tampering%20with%20conditional%20access%20policies/tampering-with-azure-ad_20.ashx?la=en&amp;modified=20230521194004&amp;hash=EC4CD33DC66FDC949F6EA2CC51F62C3A"><br /><em>Figure 20. Azure AD portal after removing CAP display names and timestamps. (Source: Secureworks)</em></p>
<p>Administrators can still delete CAPs and make duplicates to view existing CAP settings. If organizations keep audit logs for a longer period of time, they may be able to restore CAP names and timestamps based on historical audit log data.</p>
<h2>Communication with Microsoft</h2>
<p>CTU researchers reported the metadata editing and logging issues to the Microsoft Security Response Center (MSRC) on May 20, 2022. These issues were reported as tampering and elevation of privilege, as administrators are also able to modify the metadata. The MSRC responded on June 26:</p>
<p><em>We confirm the following behaviors when a Conditional Access Policy is modified via Azure AD Graph APIs (or PowerShell modules based on AAD Graph APIs): </em></p>
<p><em>Only Core Directory service Audit Log item is present in the Audit Logs, while the corresponding Conditional Access service Audit Log item is missing. </em></p>
<p><em>Details of the changed properties and values are not present in the Core Directory service Audit Log item. </em></p>
<p><em>Modified Date information of the edited policy object is not updated on the Conditional Access Azure Portal page. </em></p>
<p><em>We analyzed the scenario, and established that: </em></p>
<p><em>There is no escalation of privileges: only users with the required permissions are allowed to access or modify policy objects. </em></p>
<p><em>Investigations of malicious Conditional Access Policies are not affected due to relevant information present in the sign-in logs. </em></p>
<p><em>Date, Activity, Target, and Actor information of policy changes are present in the Activity Logs, allowing admins to audit who changed a policy and when.</em></p>
<p>On August 23, 2022, CTU researchers notified the MSRC that all users can read conditional access. This issue was reported as elevation of privilege, as any user can read CAPs without administrator permissions. The MSRC responded on February 2, 2023:</p>
<p><em>There are several known experiences where an authenticated and authorized user is able to read specific data pertaining to an Azure AD configuration such as an authentication policy or other similar configurations. </em></p>
<p><em>These cases are by design: the user is authorized, the data is read-only and doesn&#8217;t contain any specific user information.</em></p>
<p><em>While reading data such as an authentication policy is not perceived as a security breach, we do have optimizations in Azure AD to allow other data or configurations to only be read or changed based on admin roles with specific edit / create/ delete rights for security purposes.</em></p>
<p>On May 11, 2023, the MSRC informed the CTU research team of planned changes to address these issues:</p>
<ol>
<li><em>Improve audit logs to reflect the type of policy being updated when CA policies are updated through AAD Graph.</em></li>
<li><em>We will prevent admins from using AAD Graph to make updates to CA policies.</em></li>
</ol>
<p><em>In addition to these improvements, AAD Graph is set to be retired.</em></p>
<h2>Conclusion</h2>
<p>Administrators can use the AADGraph API to change CAPs. The API does not properly log changes, and the lack of an audit trail breaks integrity and non-repudiation of CAPs. As a result, organizations cannot trust CAP information shown in the Azure AD portal or in directory audit logs. In addition, any tenant user can view CAPs without administrator permissions. This ability allows low-privileged threat actors to identify gaps in CAPs or target them for future modification. Third-party tools such as <a href="https://github.com/dirkjanm/ROADtools">ROADTools</a> and <a href="https://github.com/hedbergtech/AzureActiveDirectory/tree/main/ExportCAPoliciesAsUser">TSxAzureADExport</a> exploit this ability.</p>
<p>CTU researchers recommend that organizations store Azure AD audit logs in the <a href="https://learn.microsoft.com/en-us/azure/azure-monitor/logs/log-analytics-overview">Log Analytics</a> workspace or in other storage solutions such as Secureworks <a href="https://www.secureworks.com/products/taegis/xdr">Taegis<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> XDR</a>. Organizations can detect CAP modifications via the AADGraph API by monitoring audit logs for an &#8216;Update policy&#8217; event that does not have a corresponding &#8216;Update conditional access policy&#8217; event within two seconds.</p>
<h2>Appendix</h2>
<p>The following script can restore the names and modification dates of CAPs that have been created or modified using the Azure AD portal or the MS Graph API:</p>
<pre># Read legit CAP events from the audit log
$CAPEvents=Get-AADIntAzureAuditLog -Export                    `
            | Where-Object activityDisplayName -in            `
                "Add conditional access policy",              `
                "Update conditional access policy"            `
            | Select-Object "activityDateTime" -ExpandProperty "targetResources" `
            | Select-Object "id","displayName","activityDateTime"
 
# Loop through the events to get the first (latest) update
$CAPInfos=@{}
foreach($CAPEvent in $CAPEvents)
{
    if(!$CAPInfos.ContainsKey($CAPEvent.id))
    {
        $CAPInfos[$CAPEvent.id] = [pscustomobject]@{
                "displayName"      = $CAPEvent.displayName
                "modifiedDateTime" = $CAPEvent.activityDateTime
            }
    }
}
 
# Read current CAPs
$CAPs = Get-AADIntConditionalAccessPolicies
 
# Loop through CAPs
foreach($CAP in $CAPs)
{
    # Create the return value
    $retVal = [pscustomobject][ordered]@{
        "id"      = $CAP.objectId
        "isEmpty" = [string]::IsNullOrWhiteSpace($CAP.displayName)
        "success" = $null
        "name"    = $CAP.displayName
    }
 
    # Check whether the displayName is empty
    if($retVal.isEmpty)
    {
        # Check whether we found the old information
        if($CAPInfo = $CAPInfos[$retVal.id])
        {
            # Get policyDetails and fix Modified Date
            $policyDetail = $CAP.policyDetail[0] | ConvertFrom-Json 
            try
            {
                $policyDetail.ModifiedDateTime = $CAPInfo.modifiedDateTime
            }
            catch{}
 
            $newPolicyDetail = $policyDetail | ConvertTo-Json -Depth 10 -Compress
 
            # Replace name with the old displayName
            $retVal.name = $CAPInfo.displayName
            try
            {
                Set-AADIntAzureADPolicyDetails  -ObjectId     $retVal.id       `
                                                -PolicyDetail $newPolicyDetail `
                                                -DisplayName  $retVal.name     `
                                                | Out-Null
 
                $retVal.success = $true
            }
            catch
            {
                # Failed
                $retVal.success = $false
                $retVal.name = $CAP.displayName
            }
        }
    }
    # Return
    $retVal
} 
</pre>
<p>The following KQL query can be used to identify &#8216;Update policy&#8217; events that do not have a corresponding &#8216;Update conditional access policy&#8217; event within two seconds:</p>
<pre>AuditLogs 
| where OperationName == "Update policy"
| mv-expand TargetResources
| where TargetResources.displayName != "Default Policy"
| mv-expand InitiatedBy
| project PolicyName = TargetResources.displayName, PolicyId = tostring(TargetResources.id), UserPrincipalName = InitiatedBy.user.userPrincipalName, UserId = tostring(InitiatedBy.user.id), OperationName, Time = bin(TimeGenerated, 2s), TimeGenerated, CorrelationId
|join kind=leftanti (AuditLogs
        | where OperationName == "Update conditional access policy"
        | mv-expand TargetResources
        | mv-expand InitiatedBy
        | project PolicyId = tostring(TargetResources.id), UserId = tostring(InitiatedBy.user.id), Time = bin(TimeGenerated, 2s)) on PolicyId,UserId,Time
| order by TimeGenerated
</pre>
<p></p>
<p>The post <a href="https://onlinepitstop.com/2023/05/24/tampering-with-conditional-access-policies-using-azure-ad-graph-api/">Tampering with Conditional Access Policies Using Azure AD Graph API</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2023/05/24/tampering-with-conditional-access-policies-using-azure-ad-graph-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Growing Threat from Infostealers</title>
		<link>https://onlinepitstop.com/2023/05/16/the-growing-threat-from-infostealers/</link>
					<comments>https://onlinepitstop.com/2023/05/16/the-growing-threat-from-infostealers/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 16 May 2023 23:43:36 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2023/05/16/the-growing-threat-from-infostealers/</guid>

					<description><![CDATA[<p>Summary Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers have observed infostealers (also known as stealers) playing an increasingly important role in the cybercrime ecosystem. This type of malware can steal sensitive information such as login credentials, financial details, and personal data from compromised computers and networks. Infostealers can be installed on a computer or device via</p>
<p>The post <a href="https://onlinepitstop.com/2023/05/16/the-growing-threat-from-infostealers/">The Growing Threat from Infostealers</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers have observed infostealers (also known as stealers) playing an increasingly important role in the cybercrime ecosystem. This type of malware can steal sensitive information such as login credentials, financial details, and personal data from compromised computers and networks. Infostealers can be installed on a computer or device via phishing attacks, infected websites, and malicious software downloads. Once installed, they can execute and exit very quickly; many infostealers finish collecting and transmitting stolen data within several seconds to a minute of total runtime. The data is then packaged and sold as logs. Threat actors could use stolen credentials in these logs to gain unauthorized access to enterprise networks via remote access services such as virtual private networks (VPNs) and Microsoft Office Web Access (OWA). This unauthorized access can result in the exfiltration of sensitive data or the deployment of ransomware, which can cause significant financial loss and reputational damage. Although the name &#8216;infostealer&#8217; implies data theft, this malware has evolved over time to include deployment of additional tools and malware.</p>
<h2>Underground forums and marketplaces</h2>
<p>Infostealers are often sold as a monthly subscription service. The price can range from $50 to over $1,000 USD per month for access to a stealer command and control (C2) server operated by the developer. The service often features a range of support functions, including multiple ways to view, download, and share stolen data. Self-hosted stealer C2 servers are also available and are usually sold for a flat fee.</p>
<p>Underground forums provide a shared space for threat actors to discuss ongoing projects, request new features, and provide malware reviews. They also offer a marketplace to advertise new and existing stealers. Underground forums such as XSS . is and exploit . in are popular with threat actors involved in the development and deployment of infostealers.</p>
<p>These forums consist of subforums and sections that host a range of topics. They also contain administrative areas to control announcements, sales, and memberships. Many underground forums have a dedicated marketplace and enforce stringent rules to sell illegal products such as infostealers. Larger, high-profile forums offer an escrow service to mediate transactions between vendors and customers, building trust in the marketplace and providing a degree of control over interactions.</p>
<p>Stealer logs are available from underground forums, marketplaces, and other online platforms that cater to threat actors interested in obtaining credentials, financial information, personal data, banking details, cryptocurrency wallets, and other sensitive, secret, or valuable information. These marketplaces are often only accessible through Tor or the Invisible Internet Project (I2P) anonymity services and usually have strict rules and regulations regarding the types of information that can be traded. The offerings are typically only accessible to members who have been approved by the marketplace&#8217;s administrators or who pay an entry fee. Some marketplaces only sell infostealer logs and have built their infrastructure to facilitate these transactions. Other forums offer many illicit wares for sale and have sections that include logs obtained from infostealers.</p>
<p>A burgeoning market also exists for after-action tools. Infostealers can lower the bar for entry to cybercrime, but the uninitiated can find the logs to be challenging to parse. Multiple vendors sell tools to assist in log parsing, enabling cybercriminals to extract data of interest from the raw logs.</p>
<h3>Russian Market</h3>
<p>Russian Market is by far the biggest underground marketplace for infostealer logs, and it has ties to the now-defunct Amigos Marketplace. As of this publication, Russian Market offers over five million logs for sale, which is roughly ten times more than its nearest rival. Historically, the marketplace predominantly sold logs obtained through five infostealers: RedLine, Raccoon, Vidar, Taurus, and AZORult. As of late February 2023, it stopped carrying Taurus and AZORult logs. Since December 2022, researchers observed <a href="https://flashpoint.io/blog/risepro-stealer-and-pay-per-install-malware-privateloader/">RisePRO</a> infostealer logs for sale through the marketplace, although total offerings remain low. Table 1 lists the number of infostealer logs for sale on Russian Market as of the end of February 2023.</p>
<table>
<thead>
<tr>
<th>
            Stealer
            </th>
<th>
            Number of available logs
            </th>
</tr>
</thead>
<tbody>
<tr>
<td>
            Racoon
            </td>
<td>
            2,114,549
            </td>
</tr>
<tr>
<td>
            Vidar
            </td>
<td>
            1,816,800
            </td>
</tr>
<tr>
<td>
            RedLine
            </td>
<td>
            1,415,458
            </td>
</tr>
<tr>
<td>
            RisePRO
            </td>
<td>
            3,833
            </td>
</tr>
<tr>
<td>
            Total
            </td>
<td>
            5,350,640
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. Number of infostealer logs available for purchase on Russian Market as of the end of February 2023.</em></p>
<p>In October 2022, Russian Market changed its operating model to allow users to preorder credentials (see Figure 1). This feature requires that buyers deposit $1,000 USD into the site&#8217;s escrow system. Buyers can then request credentials based on a domain name (from a specific organization) or a &#8216;mask&#8217; (from a specific application). Although there are no guarantees that preorders will be fulfilled, this feature could lead to specific targeting of organizations and sectors rather than relying just on opportunistic attacks.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-01.ashx?la=en&amp;modified=20230503003259&amp;hash=9E8D3C2BFD5E933C05F64191DE6257FE"><br /><em>Figure 1. Russian Market interface for preorder logs. (Source: Secureworks)</em></p>
<h3>Genesis Market</h3>
<p>Genesis Market is an invitation-only marketplace that specializes in the sale of bots rather than logs. Bots are computers that were infected with infostealer malware to steal information and the browser fingerprint from a victim&#8217;s web browser. The browser fingerprint can be used to impersonate the victim and access the victim&#8217;s bank accounts, take over accounts, and make fraudulent purchases. A threat actor who purchases a bot has exclusive access to the data, including updates of the victim&#8217;s data from the infected device.</p>
<p>Genesis Market provides a custom browser plugin to customers and distinguishes itself among the competition by including more automation for site users. These features effectively render the bots as logs, removing the need to manually parse details and lowering the technical bar to entry. As of February 2023, Genesis Market listed over 450,000 bots from nearly every country (see Figure 2).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-02.ashx?la=en&amp;modified=20230503003300&amp;hash=1BCEE144BDF3F7AB34BF6964948BF274"><br /><em>Figure 2. Number of available bots for sale on Genesis Market as of February 2023. (Source: Secureworks)</em></p>
<p>On April 4, 2023, Genesis Market was the target of a coordinated international <a href="https://www.justice.gov/opa/pr/criminal-marketplace-disrupted-international-cyber-operation">law enforcement action</a> led by the U.S. Federal Bureau of Investigation (FBI). Despite the arrests of multiple users and the takedown of 11 domains, Operation Cookie Monster did not completely shutter the marketplace. As of this publication, the Tor version of Genesis Market remains operational. Logs have been added for sale since the takedown, albeit at a slower rate than usual. </p>
<h3>2easy</h3>
<p>The 2easy marketplace has rapidly grown since it was established in 2018. Like Genesis Market, 2easy is automated, allowing buyers to add money to wallets and purchase logs without directly interacting with the seller. Unlike other sites, 2easy does not provide samples or previews. However, logs are <a href="https://www.bleepingcomputer.com/news/security/2easy-now-a-significant-dark-web-marketplace-for-stolen-data/">reportedly</a> less expensive than those on Genesis Market and Russian Market.</p>
<p>Threat actors who purchase logs through the 2easy marketplace receive an archive file from the selected bot. The file&#8217;s content depends on the stealer and its unique capabilities. RedLine has historically been the favorite infostealer for threat actors selling logs through 2easy, but the marketplace also sells Raccoon, Vidar, and AZORult logs. As of February 2023, 2easy offered over 750,000 logs for sale (see Figure 3).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-03.ashx?la=en&amp;modified=20230503003300&amp;hash=D02AD45FA9C135A72E79630475CEF7B0"><br /><em>Figure 3. Logs for sale on the 2easy marketplace. (Source: Secureworks)</em></p>
<h2>Telegram</h2>
<p>As demonstrated by the April 2023 Genesis Market takedown, one of the risks to sellers using traditional forums and marketplaces is the threat of law enforcement action. Another example was RaidForums, which was established in 2015 and became one of the most popular criminal marketplaces offering credentials and infostealers. In 2022, a coordinated international law enforcement investigation dubbed <a href="https://www.europol.europa.eu/media-press/newsroom/news/one-of-world%E2%80%99s-biggest-hacker-forums-taken-down">Operation TOURNIQUET</a> resulted in the seizure of three domains and the arrest of RaidForums&#8217;s founder and chief administrator. In addition, several cybercrime forums were <a href="https://www.securityweek.com/someone-hacking-cybercrime-forums-and-leaking-user-data/">breached</a> in 2021 and their user data was stolen and either leaked or sold online. These takedowns and breaches undermine the security and integrity of the platforms and can degrade sellers&#8217; confidence in the anonymity offered by the forums. As a result, many cybercriminals use the Telegram messaging platform to advertise their services.</p>
<p>Telegram is a multi-platform messaging service that has an estimated <a href="https://www.statista.com/statistics/234038/telegram-messenger-mau-users/">700 million</a> monthly users. Benefits of this platform for cybercriminals include its focus on privacy, encryption, and an open-source application programming interface (API) that allows &#8216;unofficial clients&#8217; (alternative messaging apps that use Telegram&#8217;s API) to communicate with the official app and web interface. The end-to-end encryption and support for private and anonymous channels are ideal for selling and trading stolen data and information. Telegram users can subscribe to channels on which owners can post content, or they can become members of groups and participate in discussions. Cybercriminals use these channels and groups to sell infostealers such as <a href="https://www.uptycs.com/blog/titan-stealer-telegram-malware-campaign">Titan Stealer</a>. Some channels are hidden and require specific invitations or permissions to access. There has <a href="https://www.ptsecurity.com/ww-en/about/news/positive-technologies-cybercrime-market-in-telegram-is-growing/">reportedly</a> been a significant increase in the use of Telegram to sell illicit goods and services. Over 120,000 messages were published across more than 300 Telegram public channels and groups between the beginning of 2019 and the second quarter of 2022. RedLine, Anubis, SpiderMan, Oski Stealer, and Loki Stealer are prominently represented on Telegram. <a href="https://www.esentire.com/blog/esentire-threat-intelligence-malware-analysis-raccoon-stealer-v2-0">RaccoonV2</a> operators extensively use Telegram for announcements, business discussions, and reporting stolen data.</p>
<p>Despite the simplicity of selling goods over Telegram, it remains more popular for selling illicit goods such as drugs rather than for selling malware due to its primary function as a messaging platform. This limitation makes it difficult for sellers to migrate from traditional underground forums and marketplaces that feature advanced search capabilities and a way for sellers to build reputation, which is important when establishing trust with buyers. CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers have observed scammers on Telegram mimicking real threat actors by creating fake profiles based on listings from forums such as Breached. This lack of reputation status and the prevalence of scammers is likely to undermine trust, preventing threat actors from fully adopting Telegram.</p>
<h2>Infostealer variants</h2>
<p>Infostealers rose to prominence in 2006 with the <a href="https://www.secureworks.com/research/zeus">ZeuS</a> trojan, which targeted online banking credentials. After the ZeuS source code was <a href="https://www.theregister.com/2011/03/23/zeus_source_code_sale/">leaked</a> in March 2011, the creation of multiple variants boosted the popularity of this type of malware and inspired the development of infostealers with increasingly sophisticated capabilities. Some infostealers can be tailored or customized for specific targets and goals. For example, <a href="https://www.cisa.gov/uscert/ncas/alerts/aa20-266a">LokiBot</a> has been prominent since 2016 and was one of the first infostealers that targeted the Android operating system. The <a href="https://www.zscaler.com/blogs/security-research/new-php-variant-ducktail-infostealer-targeting-facebook-business-accounts">Ducktail</a> infostealer was first observed in 2022 and specifically targeted Facebook business accounts. Infostealers such as <a href="https://www.bleepingcomputer.com/news/security/new-bhunt-malware-targets-your-crypto-wallets-and-passwords/">BHUNT</a> specialize in stealing cryptocurrency, while state-sponsored threat groups such as <a href="https://www.secureworks.com/research/threat-profiles/iron-tilden">IRON TILDEN</a> use custom versions to conduct espionage.</p>
<p>CTU researchers analyzed the Russian Market marketplace to understand each infostealer&#8217;s properties and capabilities. The table in the <a href="https://www.secureworks.com/research/the-growing-threat-from-infostealers#appendix">Appendix</a> compares features of the most common infostealers in 2022 but may not be a comprehensive view. Much of the information related to targeted browser extensions and applications is only found through the infostealer configurations. These configurations specify what information to extract from a compromised system, but they frequently change. </p>
<h3>RedLine</h3>
<p>RedLine emerged in March 2020, and its logs are the best seller on Russian Market. RedLine is sold standalone or as a subscription. As of March 2023, standalone copies (the &#8216;PRO&#8217; version) were advertised on Telegram for $900 USD, with subscriptions available for $150 per month or $400 for three months (see Figure 4). This malware steals information from web browsers, including saved credentials, autocomplete data, credit card information, and cryptocurrency wallets. While running on an infected system, RedLine takes a system inventory of the username, location data, hardware configuration, and installed security software. </p>
<p><img loading="lazy" decoding="async" alt="" height="673" width="476" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-04.ashx?la=en&amp;modified=20230503003300&amp;hash=ED21216E95B4B00DF69799E854498630"><br /><em>Figure 4. RedLine Telegram channel listing prices and deals. (Source: Secureworks)</em></p>
<p>RedLine is distributed via <a href="https://en.wikipedia.org/wiki/Software_cracking">cracked</a> games, applications, and services, as well as via phishing campaigns and malicious ads. CTU researchers have observed multiple instances of threat actors using malicious Microsoft OneNote files to deliver RedLine. RedLine has also been observed using YouTube for <a href="https://securelist.com/self-spreading-stealer-attacks-gamers-via-youtube/107407/">self-propagation</a> and has been linked by CTU researchers to SM Viewbot malware. SM Viewbot promotes YouTube videos to lure users who are searching for cracked software. Victims who download installers advertised in the video descriptions may infect their systems with infostealers.</p>
<p>RedLine&#8217;s execution process is straightforward. Once executed, the malware decodes XOR-encoded data such as the C2 server IP address and a unique ID. After the decoding process, RedLine requests configuration data from the C2 server, which instructs RedLine on what information to collect from the compromised system. Information related to the configuration data is then collected from the compromised system, converted into XML format, and transmitted to the C2 server via a Simple Object Access Protocol (<a href="https://www.w3schools.com/XML/xml_soap.asp">SOAP</a>) message. </p>
<h3>Raccoon</h3>
<p>The original Raccoon Stealer emerged in 2019. It operated as a malware-as-a-service (MaaS) model and was advertised on underground forums. The cost was $75 USD per week or $200 per month. It did not include a distribution mechanism, so customers had to devise a method to install the infostealer on compromised systems. The Raccoon Stealer panel was hosted on a Tor site.</p>
<p>Following Russia&#8217;s invasion of Ukraine in early 2022, the threat actors responsible for Raccoon Stealer announced that they were <a href="https://www.bleepingcomputer.com/news/security/raccoon-stealer-malware-suspends-operations-due-to-war-in-ukraine/">shutting down</a> their operations, implying that a group member had died. However, the threat actors released a new version of the malware named RaccoonV2 in May 2022 (see Figure 5). While Raccoon Stealer and RaccoonV2 share similar functionality, CTU analysis confirms that RaccoonV2 represents a significant rewrite of the malware.</p>
<p><img loading="lazy" decoding="async" alt="" height="787" width="655" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-05.ashx?la=en&amp;modified=20230503003300&amp;hash=2CC2910A9FEB9B828F980740D145B0EA"><br /><em>Figure 5. Raccoon Stealer Telegram channel giving details of the new build. (Source: Secureworks)</em></p>
<p>RaccoonV2 remains under active development as of this publication. The developers encoded more of the code strings in later versions and changed the encoding method, moving from Base64 to XOR. They continually alter elements of the malware to improve defense evasion, including changes to the User-Agents and mutexes, presumably to circumvent indicator-based detections. To hinder static and dynamic analysis, updates included intermixing chunks of code with thousands of bytes of opcodes from superfluous Windows API function calls.</p>
<p>The RaccoonV2 infostealer obtains its configuration file from a hard-coded C2 server. This file specifies what data the malware should steal (e.g., password files, credit card information, web browser data, email messages, cryptocurrency wallets, browser cookies). This data is stored as individual files in the %APPDATA%LocalLow directory before it is sent to the malware C2 server via an HTTP POST request.</p>
<p>RaccoonV2 has occasionally been deployed alongside other infostealers such as RedLine. It has been <a href="https://www.joesandbox.com/analysis/464621/0/html">observed</a> downloading and executing malware such as SmokeLoader, cryptocurrency wallet hijackers, Amadey, Remcos, AZORult, Allcome Clipper, SystemBC, and cryptocurrency miners.</p>
<h3>Vidar</h3>
<p>Vidar primarily operates as an infostealer but has also been used to deploy ransomware. The malware was first observed in 2019 during a prolific malvertising <a href="https://www.malwarebytes.com/blog/news/2019/01/vidar-gandcrab-stealer-and-ransomware-combo-observed-in-the-wild">campaign</a> where threat actors used the Fallout exploit kit to distribute Vidar and GandCrab as secondary payloads. Vidar is sold on underground forums and Telegram channels (see Figure 6) as a standalone product, usually for between $130 USD per week to $750 for three months. Vidar provides an admin panel that lets customers configure the malware and monitor infections (see Figure 7).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-06.ashx?la=en&amp;modified=20230503003301&amp;hash=AA53909A1C352427A8199C07F1C863D6"><br /><em>Figure 6. Vidar Telegram channel. (Source: Secureworks)</em></p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-07.ashx?la=en&amp;modified=20230503003301&amp;hash=084D4471B4A230AF266D2D828B63A9BC"><br /><em>Figure 7. Vidar infostealer admin panel. (Source: Secureworks)</em></p>
<p>Vidar is a Windows-based stealer that is written in C++ and based on the Arkei stealer. It steals system data such as machine ID, operating system, computer name, display resolution, keyboard language, hardware information, network information, and a list of installed software. Vidar can extract browser artifacts, the contents of some cryptocurrency wallets, PayPal data, session data, and screenshots.</p>
<p>In addition to stealing sensitive data, Vidar can deliver secondary payloads such as the SystemBC proxy malware. Because Vidar is available to any paying threat actor, the delivery method varies and may include phishing emails or pirated software.</p>
<p>In early 2022, CTU researchers observed Vidar creating profiles on the Mastodon social networking platform to obtain and post C2 IP addresses. The Mastodon sites used by Vidar have thousands of members, and it is unlikely that the threat actors manage or control the infrastructure. Vidar verifies that the compromised system is not located in the Commonwealth of Independent States (CIS) by checking the computer language and keyboard settings. It then contacts the C2 server, which responds with the malware configuration. Vidar exfiltrates host and system information from infected devices and sends the data to the C2 server via HTTP form data POST requests.</p>
<h3>Taurus</h3>
<p>The &#8216;Taurus Project,&#8217; as the infostealer was named by its developers, was first observed in the second quarter of 2020. It is the fourth-most prolific stealer on Russian Market, even though it has been inactive since late 2021. Taurus was primarily advertised on Russian-language forums and will not execute within CIS countries. There are <a href="https://www.infoblox.com/wp-content/uploads/threat-intelligence-report-project-taurus-infostealer-follows-in-predator-the-thiefs-footprints.pdf">indications</a> that the group responsible for this malware was also responsible for the &#8216;Predator the Thief&#8217; infostealer, either directly or through the sale of the original software to a third party. Taurus can steal VPN credentials, social media details, cryptocurrency credentials; take screenshots of the victim&#8217;s desktop; and exfiltrate the system&#8217;s software installation and configuration information. This data can be used to further exploit the compromised system. Taurus includes a dashboard that lets threat actors monitor infections by geographic region and customize the malware configuration to specify targeted information.</p>
<p>Taurus was predominantly distributed via spam emails containing a malicious attachment. Opening the attached document prompts the victim to enable macros, which then executes a PowerShell script that initiates the download of additional payloads. Stolen data is exfiltrated as a ZIP file to a C2 server whose URL is built at runtime. Figure 8 shows the infection process. </p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-08.ashx?la=en&amp;modified=20230503003301&amp;hash=20D14304A66459D6EB911E6A666D184B"><br /><em>Figure 8. Infection process for the Taurus infostealer. (Source: Secureworks)</em></p>
<h3>Rhadamanthys</h3>
<p>The Rhadamanthys infostealer was first observed in the third quarter of 2022. It quickly established its reputation on underground forums due to the active development and deployment of user-friendly features that align with market demands. Rhadamanthys targets a wide range of applications, wallets, and user data on an infected device. The developers appear receptive to suggestions for regular updates and enhancements (see Figure 9). Rhadamanthys operates using a MaaS model and has been observed using phishing emails and Google Ads as the initial infection vector.</p>
<p><img loading="lazy" decoding="async" alt="" height="233" width="537" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-09.ashx?la=en&amp;modified=20230503003302&amp;hash=219CA597E6246F855D18323C65ED3DDE"><br /><em>Figure 9. Forum post announcing Rhadamanthys updates. (Source: Secureworks)</em></p>
<p>CTU researchers observed a threat actor named &#8220;kingcrete2022&#8221; advertising Rhadamanthys in September 2022 for $250 USD for 30 days or $550 for 90 days, payable in Monero or Bitcoin. In November 2022, a threat actor named &#8216;Kingcrete&#8217; uploaded <a href="https://vimeo.com/user185512701">two videos</a> to Vimeo. One video was an overview of the &#8216;v0.3.2 updates.&#8217; The second video was named &#8216;Wallter Crack and Customized Dictionaries&#8217; and showed how the infostealer targets cryptocurrency wallets. Both videos show details of the Rhadamanthys admin panel and a walkthrough of how it is used.</p>
<p>Rhadamanthys is written in C++. It evades detection by operating in system memory and by creating a mutex to ensure that only one instance is running. It uses the Al-Khaser anti-analysis tool to detect and avoid running in researcher sandboxes and virtual machines (VMs). Rhadamanthys is custom-packed with several stages that include dropping a custom loader DLL that decodes and executes an encoded payload via a command-line argument. The custom loader executes shellcode in a novel way by abusing the callback mechanism of the Windows CryptEnumIdOidInfo() function and masquerades as a Nullsoft Scriptable Install System (NSIS) installer running the PrintUIEntry export (see Figure 10).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-10.ashx?la=en&amp;modified=20230503003302&amp;hash=B102E063BA678F4E4E31AC82AA63BE65"><br /><em>Figure 10. Example of Rhadamanthys masquerading as an NSIS installer. (Source: Secureworks)</em></p>
<p>Rhadamanthys decodes the C2 URL used for initial communication using a generated 128-byte XOR key. The configuration file it receives from the C2 server is disguised as a JFIF image via <a href="https://blog.cyble.com/2023/01/12/rhadamanthys-new-stealer-spreading-through-google-ads/">steganography</a>. The infostealer uses the <a href="https://www.malware-traffic-analysis.net/2023/01/03/index.html">WebSocket</a> protocol to encrypt post-infection traffic, which includes stolen and exfiltrated data. Rhadamanthys can also be configured to run arbitrary executables.</p>
<h3>State-sponsored stealers</h3>
<p>Infostealers are not exclusively used by cybercriminals. Because infostealers can discreetly and efficiently exfiltrate sensitive data from targeted systems, they are commonly and effectively used by state-sponsored threat groups that focus on cyberespionage operations. During the conflict in Ukraine, Russian threat actors deployed the <a href="https://www.infosecurity-magazine.com/news/new-infostealer-discovered-russia/">Graphiron</a> infostealer to target Ukrainian organizations. This infostealer is similar to the <a href="https://www.mandiant.com/resources/blog/spear-phish-ukrainian-entities">GraphSteel</a> malware previously used against Ukraine but includes enhanced capabilities. Graphiron is Go-based malware that can steal system and application data, screenshots, account credentials, and private keys. It consists of a downloader and a secondary information-stealing payload. The downloader checks for various security software and malware analysis tools before downloading the payload. Graphiron uses AES encryption with hard-coded keys to communicate with the C2 server through port 443.</p>
<p>Chinese state-sponsored threat groups have also been observed using infostealers in pursuit of their objectives. Reports of a 2022 espionage campaign targeting various government and public entities in Asia identified a custom <a href="https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/espionage-asia-governments">Infostealer.Logdatter</a> infostealer that logged keystrokes, captured screenshots, stole clipboard data, downloaded files, injected code, and both connected to and queried SQL databases. This campaign has been attributed to the <a href="https://www.secureworks.com/research/threat-profiles/bronze-atlas">BRONZE ATLAS</a> threat group.</p>
<h2>The infostealer ecosystem</h2>
<p>Much like the general cybercriminal ecosystem, the successful development and deployment of infostealers relies on individuals with a broad range of skills, roles, and responsibilities. These individuals include developers, initial access brokers (IABs), and customers (see Figure 11). The rise of MaaS operations has lowered the technical barrier to entry into cybercrime. It has also fostered innovation among developers as they improve their products and appeal to a broad audience of potential customers on underground forums and marketplaces.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-11.ashx?la=en&amp;modified=20230503003302&amp;hash=A62A1004B677861FE152AC395A71B2C9"><br /><em>Figure 11. An overview of roles and relationships in the infostealer ecosystem. (Source: Secureworks)</em></p>
<h3>Developers</h3>
<p>Malware developers are responsible for writing and maintaining the code that will be packaged and sold on underground forums, typically to IABs. With MaaS being the most common business model in the infostealer marketplace, developers can dedicate more time and effort to ensuring their malware contains a range of features, taking feedback from users, and iterating the malware to constantly evolve and improve. Forums allow customers to leave feedback, enhancing the seller&#8217;s reputation and potentially increasing the popularity of the malware.</p>
<h3>Initial access brokers</h3>
<p>IABs are individuals or groups that rent access to tools from MaaS operators on underground forums and marketplaces. They then deploy these infostealers via phishing or malicious ad campaigns to infect systems. These infostealers steal data from the compromised system and exfiltrate it to a C2 server. This stolen data, typically including credentials for services such as Remote Desktop Protocol (RDP), VPNs, email accounts, and cryptocurrency wallets, is then sold to threat actors who use it for malicious purposes.</p>
<h3>Customers</h3>
<p>Due to diverse types of data that infostealers can obtain from a compromised system, threat actors often purchase the data for a wide range of purposes. Financially motivated cybercriminals may purchase credentials for cryptocurrency wallets, online banking, or other financial services and abuse them to make fraudulent withdrawals or transactions. Ransomware groups commonly seek infostealer logs, as credentials for RDP, VPNs, and corporate accounts can provide initial access into enterprises prior to data exfiltration and encryption. The value of infostealers to ransomware groups has increased with the success of the ransomware-as-a-service (RaaS) model and the growth of &#8216;hack-and-leak&#8217; sites. For example, the LockBit ransomware operators <a href="https://twitter.com/vxunderground/status/1587887149411536896">reportedly</a> offered to purchase the Raccoon Stealer source code.</p>
<h3>Specialist log parsers</h3>
<p>Log marketplaces such as Genesis Market have built-in parsing as a browser extension, which allows customers to seamlessly access device fingerprints and victim data. Other marketplaces like Russian Market and 2easy sell raw logs that require parsing to interpret and use the content. Parsing infostealer logs purchased from a underground marketplace can be a complex task, as the logs are often in various formats and contain a large amount of data. This challenge has created a secondary market for individuals selling parser tools to customers who have either deployed the infostealers and want to sell structured data or to buyers in possession of bulk raw logs (see Figures 12 and 13).</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-12.ashx?la=en&amp;modified=20230503003302&amp;hash=D33C4AAFDCC6284E3527CD06869CBA64"><br /><em>Figure 12. Threat actor offering to parse stealer logs to find specific links. (Source: Secureworks)</em></p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/104%20the%20growing%20threat%20from%20infostealers/growing-threat-from-infostealers-figure-13.ashx?la=en&amp;modified=20230503003303&amp;hash=BF7D32CF8E4AEE90AE102470C122842F"><br /><em>Figure 13. Threat actor selling a parser for large batches of stealer logs. (Source: Secureworks)</em></p>
<h2>Conclusion</h2>
<p>In 2022, stolen credentials <a href="https://www.secureworks.com/resources/rp-irs-learning-from-incident-response-team-2022-year-in-review">featured heavily</a> in Secureworks incident response engagements. Infostealer malware poses a significant threat to individuals and organizations. Its ability to steal sensitive information such as passwords and financial information has far-reaching consequences for victims. This type of malware is becoming increasingly sophisticated, making it more difficult for victims to detect and remove. Additionally, the evolution of criminal marketplaces allows relatively low-skilled threat actors to access tools with advanced capabilities to attack many victims.</p>
<p>The migration to remote work driven by the COVID-19 pandemic and sustained post-pandemic exposes users and organizations to even greater risk from infostealers. Bring your own device (BYOD) policies that let users access corporate assets from infected personal devices can lead to compromises of corporate systems.</p>
<p>To mitigate this threat, individuals and organizations must take proactive steps to secure their systems. These steps include keeping software up to date, using strong and unique passwords that must not be stored in web browsers, and being wary of suspicious emails or downloads. It is also crucial to invest in security solutions that can detect and block infostealer malware. By taking these actions, individuals and organizations can reduce their risk of compromise.</p>
<h2>References</h2>
<p>Abrams, Lawrence. &#x201C;Raccoon Stealer malware suspends operations due to war in Ukraine.&#x201D; Bleeping Computer. March 25, 2022. <a href="https://www.bleepingcomputer.com/news/security/raccoon-stealer-malware-suspends-operations-due-to-war-in-ukraine/">https://www.bleepingcomputer.com/news/security/raccoon-stealer-malware-suspends-operations-due-to-war-in-ukraine/</a> </p>
<p>Arghire, Ionut. &#x201C;Someone Is Hacking Cybercrime Forums and Leaking User Data.&#x201D; SecurityWeek. March 5, 2021. <a href="https://www.securityweek.com/someone-hacking-cybercrime-forums-and-leaking-user-data/">https://www.securityweek.com/someone-hacking-cybercrime-forums-and-leaking-user-data/</a> </p>
<p>Armer, Jon, et al. &#x201C;New Malware Variant: Project Taurus Infostealer Follows in Predator the Thief&#8217;s Footprints.&#x201D; Infoblox. 2019. <a href="https://www.infoblox.com/wp-content/uploads/threat-intelligence-report-project-taurus-infostealer-follows-in-predator-the-thiefs-footprints.pdf">https://www.infoblox.com/wp-content/uploads/threat-intelligence-report-project-taurus-infostealer-follows-in-predator-the-thiefs-footprints.pdf</a> </p>
<p>Ceci, L. &#x201C;Telegram messenger global MAU 2014-2022.&#x201D; Statista. November 7, 2022. <a href="https://www.statista.com/statistics/234038/telegram-messenger-mau-users/">https://www.statista.com/statistics/234038/telegram-messenger-mau-users/</a></p>
<p>Cyble Research &amp; Intelligence Labs. &#x201C;Rhadamanthys: New Stealer Spreading Through Google Ads.&#x201D; January 12, 2023. <a href="https://blog.cyble.com/2023/01/12/rhadamanthys-new-stealer-spreading-through-google-ads/">https://blog.cyble.com/2023/01/12/rhadamanthys-new-stealer-spreading-through-google-ads/</a> </p>
<p>Dewan, Tarun and Chaturvedi, Stuti. &#x201C;New PHP Variant of Ducktail Infostealer Targeting Facebook Business Accounts.&#x201D; Zscaler. October 13, 2022. <a href="https://www.zscaler.com/blogs/security-research/new-php-variant-ducktail-infostealer-targeting-facebook-business-accounts">https://www.zscaler.com/blogs/security-research/new-php-variant-ducktail-infostealer-targeting-facebook-business-accounts</a> </p>
<p>eSentire. &#x201C;eSentire Threat Intelligence Malware Analysis: Raccoon Stealer v2.0.&#x201D; August 31, 2022. <a href="https://www.esentire.com/blog/esentire-threat-intelligence-malware-analysis-raccoon-stealer-v2-0">https://www.esentire.com/blog/esentire-threat-intelligence-malware-analysis-raccoon-stealer-v2-0</a> </p>
<p>Europol. &#x201C;One of the world&#8217;s biggest hacker forums taken down.&#x201D; April 12, 2022. <a href="https://www.europol.europa.eu/media-press/newsroom/news/one-of-world%E2%80%99s-biggest-hacker-forums-taken-down">https://www.europol.europa.eu/media-press/newsroom/news/one-of-world%E2%80%99s-biggest-hacker-forums-taken-down</a></p>
<p>Flashpoint. &#x201C;RisePro&#x201D; Stealer and Pay-Per-Install Malware &#x201C;PrivateLoader.&#x201D; December 19, 2022. <a href="https://flashpoint.io/blog/risepro-stealer-and-pay-per-install-malware-privateloader/">https://flashpoint.io/blog/risepro-stealer-and-pay-per-install-malware-privateloader/</a> </p>
<p>Joe Sandbox Cloud. &#x201C;Windows Analysis Report IuXJUPoEo6.exe.&#x201D; Accessed March 30, 2022. <a href="https://www.joesandbox.com/analysis/464621/0/html">https://www.joesandbox.com/analysis/464621/0/html</a> </p>
<p>Kathiresan, Karthikkumar. &#x201C;The Titan Stealer: Notorious Telegram Malware Campaign &#8211; Uptycs.&#x201D; Uptycs. January 23, 2023. <a href="https://www.uptycs.com/blog/titan-stealer-telegram-malware-campaign">https://www.uptycs.com/blog/titan-stealer-telegram-malware-campaign</a></p>
<p>Kingcrete. Rhadamanthys walkthrough videos. Vimeo. Accessed March 30, 2023. <a href="https://vimeo.com/user185512701">https://vimeo.com/user185512701</a> </p>
<p>Kupreev, Oleg. &#x201C;Self-spreading stealer attacks gamers via YouTube.&#x201D; Kaspersky. September 15, 2022. <a href="https://securelist.com/self-spreading-stealer-attacks-gamers-via-youtube/107407/">https://securelist.com/self-spreading-stealer-attacks-gamers-via-youtube/107407/</a> </p>
<p>Leyden, John. &#x201C;ZeuS cybercrime cookbook on sale in underground forums.&#x201D; The Register. March 23, 2011. <a href="https://www.theregister.com/2011/03/23/zeus_source_code_sale/">https://www.theregister.com/2011/03/23/zeus_source_code_sale/</a>  </p>
<p>Malware-Traffic-Analysis.net. &#x201C;RHADAMANTHYS STEALER.&#x201D; January 3, 2023. <a href="https://www.malware-traffic-analysis.net/2023/01/03/index.html">https://www.malware-traffic-analysis.net/2023/01/03/index.html</a> </p>
<p>Mandiant Threat Intelligence. &#x201C;Evacuation and Humanitarian Documents used to Spear Phish Ukrainian Entities.&#x201D; November 25, 2022. <a href="https://www.mandiant.com/resources/blog/spear-phish-ukrainian-entities">https://www.mandiant.com/resources/blog/spear-phish-ukrainian-entities</a> </p>
<p>Muncaster, Phil. &#x201C;New Info-Stealer Discovered as Russia Prepares Fresh Offensive.&#x201D; Infosecurity Magazine. February 9, 2023. <a href="https://www.infosecurity-magazine.com/news/new-infostealer-discovered-russia/">https://www.infosecurity-magazine.com/news/new-infostealer-discovered-russia/</a> </p>
<p>Positive Technologies. &#x201C;Positive Technologies: cybercrime market in Telegram is growing.&#x201D; November 18, 2022. <a href="https://www.ptsecurity.com/ww-en/about/news/positive-technologies-cybercrime-market-in-telegram-is-growing/">https://www.ptsecurity.com/ww-en/about/news/positive-technologies-cybercrime-market-in-telegram-is-growing/</a> </p>
<p>Secureworks. &#x201C;BRONZE ATLAS.&#x201D; Accessed March 30, 2023. <a href="https://www.secureworks.com/research/threat-profiles/bronze-atlas">https://www.secureworks.com/research/threat-profiles/bronze-atlas</a> </p>
<p>Secureworks. &#x201C;IRON TILDEN.&#x201D; Accessed March 30, 2023. <a href="https://www.secureworks.com/research/threat-profiles/iron-tilden">https://www.secureworks.com/research/threat-profiles/iron-tilden</a> </p>
<p>Secureworks. &#x201C;Learning from Incident Response: 2022 Year in Review.&#x201D; March 16, 2023. <a href="https://www.secureworks.com/resources/rp-irs-learning-from-incident-response-team-2022-year-in-review">https://www.secureworks.com/resources/rp-irs-learning-from-incident-response-team-2022-year-in-review</a>  </p>
<p>Secureworks. &#x201C;ZeuS Banking Trojan Report.&#x201D; March 10, 2010. <a href="https://www.secureworks.com/research/zeus">https://www.secureworks.com/research/zeus</a>  </p>
<p>Segura, Jerome. &#x201C;Vidar and GandCrab: stealer and ransomware combo observed in the wild.&#x201D; Malwarebtes. January 4, 2019. <a href="https://www.malwarebytes.com/blog/news/2019/01/vidar-gandcrab-stealer-and-ransomware-combo-observed-in-the-wild">https://www.malwarebytes.com/blog/news/2019/01/vidar-gandcrab-stealer-and-ransomware-combo-observed-in-the-wild</a> </p>
<p>Threat Hunter Team. &#x201C;New Wave of Espionage Activity Targets Asian Governments.&#x201D; Symantec. September 13, 2022. <a href="https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/espionage-asia-governments">https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/espionage-asia-governments</a> </p>
<p>Toulas, Bill. &#x201C;2easy now a significant dark web marketplace for stolen data.&#x201D; Bleeping Computer. December 21, 2021. <a href="https://www.bleepingcomputer.com/news/security/2easy-now-a-significant-dark-web-marketplace-for-stolen-data/">https://www.bleepingcomputer.com/news/security/2easy-now-a-significant-dark-web-marketplace-for-stolen-data/</a></p>
<p>Toulas, Bill. &#x201C;New BHUNT malware targets your crypto wallets and passwords.&#x201D; Bleeping Computer. January 19, 2022. <a href="https://www.bleepingcomputer.com/news/security/new-bhunt-malware-targets-your-crypto-wallets-and-passwords/">https://www.bleepingcomputer.com/news/security/new-bhunt-malware-targets-your-crypto-wallets-and-passwords/</a> </p>
<p>U.S. Cybersecurity &amp; Infrastructure Security Agency. &#x201C;LokiBot Malware.&#x201D; October 24, 2020. <a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa20-266a">https://www.cisa.gov/news-events/cybersecurity-advisories/aa20-266a</a> </p>
<p>U.S. Department of Justice. &#x201C;Criminal Marketplace Disrupted in International Cyber Operation.&#x201D; April 5, 2023. <a href="https://www.justice.gov/opa/pr/criminal-marketplace-disrupted-international-cyber-operation">https://www.justice.gov/opa/pr/criminal-marketplace-disrupted-international-cyber-operation</a> </p>
<h2 id="appendix">Appendix &#x2014; Infostealer comparison</h2>
<p>The following chart compares five of the most common infostealers in 2022.</p>
<table>
<thead>
<tr>
<th>
            Infostealer
            </th>
<th>
            RedLine
            </th>
<th>
            RaccoonV2
            </th>
<th>
            Vidar
            </th>
<th>
            Taurus
            </th>
<th>
            Rhadamanthys
            </th>
</tr>
</thead>
<tbody readability="127">
<tr>
<td>
            Status
            </td>
<td>
            Active
            </td>
<td>
            Active
            </td>
<td>
            Active
            </td>
<td>
            Not active
            </td>
<td>
            Active
            </td>
</tr>
<tr readability="18">
<td>
            Pricing
            </td>
<td>
            $150 per month, $800 for lifetime
            </td>
<td>
            $75 per week, $200 per month + $50 per build with clipper
            </td>
<td>
            $130 per week, $300 per month, $750 per 3 months
            </td>
<td>
            $150 for lifetime, $50 per update or rebuild, $10 per prefix change
            </td>
<td>
            $250 for 30 days, $550 for 90 days<br />
            VIP: $300 for 30 days, $750 for 90 days
            </td>
</tr>
<tr>
<td>
            Cracked versions
            </td>
<td>
            Widely available
            </td>
<td>
            Limited availability
            </td>
<td>
            Widely available
            </td>
<td>
            Unknown
            </td>
<td>
            Unknown
            </td>
</tr>
<tr>
<td>
            Language
            </td>
<td>
            .NET
            </td>
<td>
            C/C++
            </td>
<td>
            C++
            </td>
<td>
            C++
            </td>
<td>
            C++
            </td>
</tr>
<tr>
<td>
            SaaS or self-hosted
            </td>
<td>
            Self-hosted
            </td>
<td>
            SaaS
            </td>
<td>
            SaaS
            </td>
<td>
            Self-hosted
            </td>
<td>
            SaaS
            </td>
</tr>
<tr readability="3">
<td>
            Reserved C2 domains
            </td>
<td>
            Some
            </td>
<td>
            Infinite
            </td>
<td>
            Infinite
            </td>
<td>
            1 per build
            </td>
<td>
            5 per build, proxies owned by the distributor and pointing to the RaccoonV2 server
            </td>
</tr>
<tr>
<td>
            Multi-browser support?
            </td>
<td>
            Yes
            </td>
<td>
            Yes
            </td>
<td>
            Yes
            </td>
<td>
            Yes
            </td>
<td>
            Yes
            </td>
</tr>
<tr readability="30">
<td>
            Supported applications
            </td>
<td>
            WinSCP, WinFTP Pro, FileZilla
            </td>
<td>
            Gecko-based applications, Google Authenticator browser extension, KeePassXC-Browser extension, KeePass Tusk browser extension, BitWarden browser extension, Microsoft Autofill browser extension
            </td>
<td>
            WinSCP, WinFTP Pro, FileZilla
            </td>
<td>
            WinSCP, WinFTP Pro, FileZilla
            </td>
<td>
            Cyberduck, FTP Navigator, FTPRush, FlashFXP, SmartFTP, Total Commander, WinSCP, WS_FTP, Core FTP
            </td>
</tr>
<tr readability="143">
<td>
            Supported wallets
            </td>
<td>
            Atomic Wallet, Armory, Authenticator, Binance Wallet, BitApp Wallet, BoltX, Brave Wallet, Coin98 Wallet, Coinbase, Coinomi, Electrum, Equal, Exodus, Guarda, GuildWallet, Harmony, iWallet, Jaxx Liberty, KardiaChain. Liquality, Maiar DeFi Wallet, MathWallet, MetaMask, Nami, Oxygen, Pali Wallet, Phantom, Ronin Wallet, Saturn Wallet, Temple Wallet, Terra Station, TON Crystal, TronLink, Waves, Wombat, XDEFI, Yoroi
            </td>
<td>
            Atomic Wallet, Auro Wallet, Binance Wallet, BitKeep, Braavos, Blockstream Green, Brave Wallet, Coin98, Coinbase, Coinomi, Cosmostation, Cyano Wallet, Daedalus, Electron Cash, Electrum, Electrum-LTC, Enkrypt, Eternl, EVER Wallet, Exodus, Finnie, GameStop Wallet, GeroWallet, Goby, Guarda, GuildWallet, HashPack, ICONex, Jaxx Liberty, Keplr, KHC, Leap, Ledger Live, Liquality, Martian, MetaMask, MetaX, Nami, NeoLine, OKX, Petra, Phantom, Polymesh Wallet, Pontem, Rabby, Ronin Wallet, Saturn Wallet, Sender Wallet, Slope Wallet, Solflare, Stargazer, Temple, Terra Station, TezBox, TON Crystal, TronLink, Trust Wallet, Wasabi, Keeper Wallet, XDEFI
            </td>
<td>
            Binance Wallet, Guarda, Jaxx Liberty, MetaMask, Ronin, TronLink
            </td>
<td>
            Not Applicable
            </td>
<td>
            Armory, Atomic Wallet, AtomicDEX, Binance Wallet, Bisq, Bitcoin Core, Bitcoin Gold, Bytecoin Wallet, Coinomi, Dash Core, DeFi Wallet, DeFiChain Electrum, Dogecoin, Electron Cash, Electrum, Electrum-LTC, Exodus, Frame, Guarda, Jaxx Liberty, Litecoin Core, MyCrypto, MyMonero, SafePay Solar, TokenPocket, Wasabi, Zap, Zecwallet Lite
            </td>
</tr>
<tr readability="60">
<td>
            Other targeted applications
            </td>
<td>
            Battle.net, BlackHawk Web Browser, Discord, Foxmail, Thunderbird, NordVPN, NVIDIA GeForce Experience, OpenVPN, Outlook, Pidgin, ProtonVPN, Steam, Telegram
            </td>
<td>
            Discord, Signal, Telegram
            </td>
<td>
            GAuth, Telegram
            </td>
<td>
            Authy, Discord, Foxmail, Outlook, Pidgin, Steam
            </td>
<td>
            Authy, AzireVPN, CheckMail, Claws Mail, eM Client, Foxmail, Global AB, Gmail Notifier Pro, KeePass, Mailbird, NordVPN, NoteFly, Notezilla, OpenVPN, Outlook, Pidgin, Postbox, PrivateVPN ProtonVPN, Psi, RoboForm, SecureCRT, Simple Sticky Notes, TeamViewer, Thunderbird, Tox, TrulyMail, WinAuth, Windscribe
            </td>
</tr>
</tbody>
</table>
<p>The post <a href="https://onlinepitstop.com/2023/05/16/the-growing-threat-from-infostealers/">The Growing Threat from Infostealers</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2023/05/16/the-growing-threat-from-infostealers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Detecting the Use of Stolen AWS Lambda Credentials</title>
		<link>https://onlinepitstop.com/2023/04/18/detecting-the-use-of-stolen-aws-lambda-credentials/</link>
					<comments>https://onlinepitstop.com/2023/04/18/detecting-the-use-of-stolen-aws-lambda-credentials/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 18 Apr 2023 20:56:23 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2023/04/18/detecting-the-use-of-stolen-aws-lambda-credentials/</guid>

					<description><![CDATA[<p>Summary Amazon Web Service (AWS) Lambda is a serverless event-driven compute service. It is a function as a service (FaaS) that allows users to deploy application functionality without the complexity of maintaining the underlying infrastructure. Lambda executions can be triggered by events from other AWS services or software-as-a-service (SaaS) applications. Inside the Lambda execution environment</p>
<p>The post <a href="https://onlinepitstop.com/2023/04/18/detecting-the-use-of-stolen-aws-lambda-credentials/">Detecting the Use of Stolen AWS Lambda Credentials</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>Amazon Web Service (AWS) Lambda is a serverless event-driven compute service. It is a function as a service (FaaS) that allows users to deploy application functionality without the complexity of maintaining the underlying infrastructure. Lambda executions can be triggered by events from other AWS services or software-as-a-service (SaaS) applications.</p>
<p>Inside the Lambda execution environment is a set of AWS Security Token Service (AWS STS) temporary and limited-privilege credentials for AWS Identity and Access Management (IAM). An attacker may be able to steal these credentials via a user application vulnerability or resource misconfiguration. The attacker could then use these credentials to escalate privileges, maintain persistence, or move laterally through an organization&#8217;s AWS account or accounts.</p>
<p>Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers have developed a technique using AWS CloudTrail to detect the use of stolen credentials. Every time an AWS Lambda executes, it generates an AWS CloudTrail logging event that can be used to establish a baseline for normal operation. The use of stolen credentials can then be detected when a logging event deviates from the baseline. A similar approach could be applied to detect AWS credentials stolen from other services. Although Amazon GuardDuty <a href="https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-guardduty-ec2-instance-credentials-aws-account/">detects</a> EC2 instance credentials used from another AWS account, it does not apply to Lambda or any other services nor does it detect credentials being used within the same account.</p>
<h2>AWS Lambda execution and event logging</h2>
<p>Understanding the detection logic technique requires some knowledge of the AWS Lambda architecture, operation, and management API calls.</p>
<h3>AWS CloudTrail</h3>
<p>AWS CloudTrail monitors and records account activity and API usage across all AWS accounts. By default, CloudTrail records a 90-day history of management events and makes this data freely available to AWS customers. Customers may optionally enable data event logging that includes AWS Lambda execution and Invoke events, but this feature is an additional cost. Because not all AWS customers may enable this feature, the detections need to rely on the management events captured in all environments.</p>
<h3>Lambda microVMs and Workers</h3>
<p>According to <a href="https://docs.aws.amazon.com/whitepapers/latest/security-overview-aws-lambda/lambda-executions.html#lambda-microvms-and-workers">AWS</a>, &#x201C;Lambda will create its execution environments on a fleet of Amazon EC2 instances called AWS Lambda Workers. Workers are [&#x2026;] launched and managed by Lambda in a separate isolated AWS account which is not visible to customers. Workers have one or more hardware-virtualized micro virtual machines [(microVMs)] created by <a href="https://firecracker-microvm.github.io/">Firecracker</a>.&#x201D; Figure 1 shows the isolation of two customers&#8217; Lambda functions on shared infrastructure.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-001.ashx?la=en&amp;modified=20230417162031&amp;hash=94F26B0DBAD49031968A6DAF4A7B6583"><br /><em>Figure 1. Isolation model for AWS Lambda Workers. (Source: AWS)</em></p>
<h3>Lambda execution environment lifecycle</h3>
<p>The standard lifecycle of the execution environment includes three primary <a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html">phases</a> (see Figure 2).</p>
<p><img loading="lazy" decoding="async" alt="" height="150" width="800" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-002.ashx?la=en&amp;modified=20230417162031&amp;hash=70948456469DDFAD639A82AEBFBF09B1"><br /><em>Figure 2. Lambda execution environment lifecycle. (Source: AWS)</em></p>
<ol readability="0">
<li readability="2.9207807118255"><strong>Init</strong> &#x2014; Lambda creates or unfreezes an execution environment with the configured resources, downloads the code for the function and all layers, initializes extensions, initializes the runtime, and then runs the function&#8217;s initialization code (i.e., the code outside the main handler). The Init phase happens either during the first invocation or in advance of function invocations if <a href="https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html">provisioned concurrency</a> is enabled. The Init phase is split into three sub-phases: Extension init, Runtime init, and Function init. These sub-phases ensure that all extensions and the runtime complete their setup tasks before the function code runs.
<p>When a Lambda creates an execution environment during the Init phase, it is commonly referred to as the &#x2018;cold start.&#8217; When an already initialized environment is invoked again before shutdown is triggered, it is called a &#x2018;warm start.&#8217;</p>
</li>
<li><strong>Invoke</strong> &#x2014; Lambda invokes the function handler. After the function runs to completion, Lambda prepares to handle another function invocation.</li>
<li><strong>Shutdown</strong> &#x2014; This phase is triggered if the Lambda function does not receive any invocations for a period of time. It is unclear what logic AWS uses to calculate this timeframe. In the Shutdown phase, Lambda shuts down the runtime, alerts the extensions to let them stop cleanly, and then removes the environment.</li>
</ol>
<p>According to AWS, Workers have a maximum lease time of 14 hours. However, CTU researchers observed much shorter lifecycles. The AWS STS credentials used by the Worker have a default expiration of 12 hours, so it is probable that the credentials are still valid after a Worker is shut down. </p>
<p>AWS introduced <a href="https://aws.amazon.com/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/">Lambda SnapStart</a> for Java 11 runtime in November 2022. Its lifecycle is slightly different from the standard Lambda lifecycle. However, the standard lifecycle is suitable for this analysis because CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers observed no differences in the detection logic.</p>
<h3>Lambda initialization and logging</h3>
<p>Every Lambda cold start records two CloudTrail events: AssumeRole and CreateLogStream (see Figure 3).</p>
<p><img loading="lazy" decoding="async" alt="" height="550" width="758" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-003.ashx?la=en&amp;modified=20230417162031&amp;hash=B564A26F296FEB3000966A401E4032F0"><br /><em>Figure 3. API calls during Lambda initialization. (Source: Secureworks)</em></p>
<ol>
<li>The AssumeRole event is recorded when the customer-defined Lambda identity access management (IAM) execution role requests AWS STS credentials from the invoke service. The timing of this event in the execution lifecycle is unclear, but CTU research shows it occurs prior to initialization of the Lambda Worker.</li>
<li>The Lambda Worker makes an API call and attempts to create a CloudWatch log stream. If the CloudWatch log group does not exist, then the first Lambda execution&#8217;s CreateLogStream API call fails with error code ResourceNotFoundException. The Lambda Worker then attempts to call CreateLogGroup, followed by a successful CreateLogStream call.</li>
</ol>
<p>The detection outlined in this analysis relies on the following assumptions:</p>
<ul>
<li>The Lambda execution IAM role is configured with permissions to log to CloudWatch. The AWS managed policy that is typically used, AWSLambdaBasicExecutionRole, includes these permissions.</li>
<li>If the CloudWatch log group exists but the Lambda execution role does not have logging permission, then CloudTrail will still log the failed events.</li>
<li>If the log group does not exist and the execution role does not have logging permission, then CreateLogStream generates no CloudTrail events.</li>
</ul>
<p>Because the Lambda Worker is the source of the CreateLogStream event, the event includes the AWS region and source IP address where the customer&#8217;s Lambda function executes. The source of the AssumeRole event is outside the Worker and therefore does not contain this information. Invoke events are data events and are labeled in Figure 3 for completeness, but they are excluded from the following detection logic because they may not exist in all environments.</p>
<p>Figure 4 lists an example AssumeRole event created during the Lambda Init phase.</p>
<p><img loading="lazy" decoding="async" alt="" height="736" width="748" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-004.ashx?la=en&amp;modified=20230417162032&amp;hash=EA916D9308F93B568AB0CA073B982474"><br /><em>Figure 4. AssumeRole CloudTrail event. (Source: Secureworks)</em></p>
<p>Figure 5 lists an example CreateLogStream event.</p>
<p><img loading="lazy" decoding="async" alt="" height="700" width="690" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-005.ashx?la=en&amp;modified=20230417162032&amp;hash=3DBC9462616AF3581676DAEF1BB26AA5"><br /><em>Figure 5. CreateLogStream CloudTrail event. (Source: Secureworks)</em></p>
<h3>Concurrency</h3>
<p>Sometimes multiple CreateLogStream events possess the same access key ID. These events possibly represent the Lambda Worker starting multiple processes with the same STS credentials. Figure 6 shows the diff command output where two event keys match but the IP addresses are different.</p>
<p><img loading="lazy" decoding="async" alt="" height="532" width="664" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-006.ashx?la=en&amp;modified=20230417162032&amp;hash=480DC55AB4F613824DD07C484ABEA6C9"><br /><em>Figure 6. Output of diff command comparing CreateLogStream events. (Source: Secureworks)</em></p>
<p>Figure 7 is an example of a Lambda initialization with concurrency.</p>
<p><img loading="lazy" decoding="async" alt="" height="692" width="760" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-007.ashx?la=en&amp;modified=20230417162032&amp;hash=026FD67F75EE644D6632123451907B90"><br /><em>Figure 7. API calls during Lambda initialization with concurrent execution. (Source: Secureworks)</em></p>
<h3>AWS STS key reuse</h3>
<p>CTU researchers discovered that AWS STS access keys can be reused over time and associated with unrelated events. The two events in Figure 8 possess the same STS access key ID (accessKeyId), but the credentials were assumed by different user identities that had different IAM roles. The principalId and userName fields are different components of the IAM role&#8217;s Amazon resource names (ARNs). The time difference (&#x2018;creationDate&#8217;) is only 11 days. It is possible that the AWS account ID is used as input to the access key generation process.</p>
<p><img loading="lazy" decoding="async" alt="" height="513" width="723" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-008.ashx?la=en&amp;modified=20230417162033&amp;hash=74B35ABD79D23C1FAD372B79F25CEB53"><br /><em>Figure 8. Output of diff command comparing CloudTrail events for different roles with the same access key ID. (Source: Secureworks)</em></p>
<h3>Amazon Virtual Private Cloud (VPC) access</h3>
<p>A Lambda function runs inside a VPC owned by the Lambda service. Lambdas can use an elastic network interface (ENI) to connect from the AWS-managed Lambda VPC to private subnets in a customer-managed VPC. When a Lambda is configured to access resources in a customer VPC and security groups are configured to allow egress, the CreateLogStream event&#8217;s source IP address will not match the public source IP address of other events.</p>
<p>Figure 9 is an example of a complete Lambda configuration with VPC access. Each number corresponds to a different source IP address in the CloudTrail event logs. CreateNetworkInterface and AllocateAddress events are generated by the Lambda Worker when connecting to the customer VPC. Other source IP addresses may appear in CloudTrail when a Lambda function interacts with other AWS resources. The source IP address for a request to AWS S3 via a <a href="https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html">VPC gateway endpoint</a> is the private IP address assigned to the ENI. The request to DynamoDB routes via the internet, and the source is the public IP address assigned to the NAT gateway.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-009.ashx?la=en&amp;modified=20230417162033&amp;hash=68571956FEB0FA8C59175047CB53C5CC"><br /><em>Figure 9. API calls during Lambda initialization with VPC access. (Source: Secureworks)</em></p>
<p>The VPC access scenario uses AllocateAddress events instead of CreateLogStream to find the public IP address, specifically the responseElements.publicIp field (see Figure 10).</p>
<p><img loading="lazy" decoding="async" alt="" height="614" width="716" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-010.ashx?la=en&amp;modified=20230417162033&amp;hash=E8637C044CD3D4ECDD444CFE6725007C"><br /><em>Figure 10. AllocateAddress CloudTrail event. (Source: Secureworks)</em></p>
<h2>Proof-of-concept detection</h2>
<p>The proof-of-concept detection uses Amazon Athena to identify CloudTrail events associated with the use of stolen Lambda credentials. This detection is portable and can be used ad-hoc in any AWS account, such as during an incident response investigation. </p>
<h3>Detection logic</h3>
<p>The first step in building the detector is to extract metadata from the CreateLogStream events. These events are generated by the Workers during the Init phase of the Lambda execution lifecycle. The CloudTrail logs are filtered on the following fields: </p>
<ul>
<li>eventName &#x2014; Filter for the &#x2018;CreateLogStream&#8217; value, which the Worker uses to set up CloudWatch logging</li>
<li>userAgent &#x2014; Filter for strings that contain the &#x2018;awslambda-worker&#8217; value (e.g., awslambda-worker/1.0 rusoto/0.48.0 rust/1.67.1 linux)</li>
</ul>
<p>A table is created using these events to form a baseline of standard operation. The table is populated with the following metadata fields:</p>
<ul>
<li>eventTime &#x2014; timestamp of the CreateLogStream event (This event occurs seconds after the related AssumeRole event and can be used to infer when the STS credentials were generated.)</li>
<li>userIdentity.accessKeyId &#x2014; AWS STS access key ID used by the Worker and Lambda function</li>
<li>userIdentity.arn &#x2014; ARN of the IAM role associated with the access credentials, used to deconflict when STS access key IDs are reused</li>
<li>sourceIPAddress &#x2014; source IP address of the event (When Lambda concurrency is enabled, multiple IP addresses associated with Lambda executions use the same credentials.)</li>
<li>awsRegion &#x2014; geographical location of the AWS region where the event originated (This location provides additional information to disambiguate events.)</li>
</ul>
<p>A second table is created that contains all customer-allocated public IP addresses. These are IP addresses that have been associated with a resource in an AWS account, such as a NAT gateway or EC2 instance. CloudTrail logs are filtered for &#x2018;AllocateAddress&#8217; events, and the following fields are extracted:</p>
<ul>
<li>publicIp &#x2014; IP address allocated to an AWS resource</li>
<li>allocationId &#x2014; unique identifier for the original AllocateAddress event</li>
<li>&#xB7;networkBorderGroup &#x2014; location where the IP address was allocated within an AWS region</li>
</ul>
<p>To determine if credentials have been exfiltrated or used outside the standard Lambda execution, a query is run against all CloudTrail events. It looks for events where the access key ID exist in the baseline Lambda events table and where the following criteria is met:</p>
<ul>
<li>The sourceIPAddress is different from the IP addresses used by the Lambda Worker in the Init phase.</li>
<li>The userIdentity.arn is the same as the ARN used by the Lambda.</li>
<li>The eventName is not Decrypt. AWS Key Management Service (KMS) generates decrypt events if enabled. This detector ignores these events.</li>
<li>The eventTime is more recent than the Lambda Init phase.</li>
<li>The sourceIPAddress has not been observed in the account. False positives could occur if sourceIPAddresses are very old and are not within the log retention period. This condition should not be an issue with this detector because the address gets allocated to the ENI at approximately the same time as the CreateLogStream event.</li>
</ul>
<p></p>
<h3>Applying the detection using Amazon Athena</h3>
<p>Before AWS CloudTrail logs can be queried with Amazon Athena, the following prerequisites are required:</p>
<ul>
<li>Configure a <a href="https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html">trail</a> to write logs to an S3 bucket if one does not already exist. AWS recommends this process as best security practice to store and retain events longer than 90 days. For the detection to be accurate, the trail should be configured to collect logs from all enabled AWS regions.</li>
<li><a href="https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html">Create</a> an Athena table for CloudTrail logs. The default table name is &#x2018;cloudtrail_logs&#8217;. If a different table name is used, the FROM statements in the Athena queries needs to be updated with the revised name.</li>
</ul>
<p>When the prerequisites are completed, Amazon Athena can search CloudTrail events for use of stolen credentials. The <a href="https://www.secureworks.com/research/detecting-the-use-of-stolen-aws-lambda-credentials#appendix">Appendix</a> of this analysis includes these Athena queries in plain text for researchers who want to replicate the detection.</p>
<ol>
<li>Create a separate table containing the CreateLogStream events (see Figure 11). The query will retrieve the earliest eventTime value and combine the source IP addresses from concurrent execution environments into an array.<br />
    <br /><img loading="lazy" decoding="async" alt="" height="271" width="748" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-011.ashx?la=en&amp;modified=20230417162034&amp;hash=9225A5993CFA61B189ADA59D501D39F0"><br /><em>Figure 11. Athena query to create table for CreateLogStream events. (Source: Secureworks)<br />
    </em></li>
<li>Create another table containing all of the public IP addresses associated with customer resources (e.g., internet gateway) (see Figure 12).<br />
    <br /><img loading="lazy" decoding="async" alt="" height="215" width="757" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-012.ashx?la=en&amp;modified=20230417162034&amp;hash=27BDCD9406DC500235E1C8582DD9669F"><br /><em>Figure 12. Athena query to create table for customer-allocated IP addresses. (Source: Secureworks)<br />
    </em></li>
<li>Query for events using stolen Lambda credentials (see Figure 13).<br /><img loading="lazy" decoding="async" alt="" height="420" width="807" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-013.ashx?la=en&amp;modified=20230417162034&amp;hash=125B0DAB18EFBDE1223FB42DDC971017"><br /><em>Figure 13. Athena query to select events using stolen credentials. (Source: Secureworks)</em></li>
</ol>
<p>Figure 14 shows an example GetCallerIdentity event found with this detection.</p>
<p><img loading="lazy" decoding="async" alt="" height="599" width="686" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/103%20detecting%20the%20use%20of%20stolen%20aws%20lambda%20credentials/figure-014.ashx?la=en&amp;modified=20230417162034&amp;hash=ED52F4D764C353C6573B6AC1D661660E"><br /><em>Figure 14. Event detected using stolen credentials. (Source: Secureworks)</em></p>
<p>The following values should immediately flag this event as suspicious:</p>
<ul>
<li>awsRegion &#x201C;us-east-1&#x201D; does not match &#x201C;us-west-2&#x201D;</li>
<li>eventName &#x201C;GetCallerIdentity&#x201D; is unlikely to be run by legitimate Lambda</li>
<li>sourceIPAddress &#x201C;203 . 0 . 113 . 9&#x201D; does not match &#x201C;34 . 220 . 84 . 211&#x201D;</li>
<li>sourceIPAddress &#x201C;203 . 0 . 113 . 9&#x201D; is not within the AWS IP address space</li>
</ul>
<p></p>
<h3>Taking the detector further</h3>
<p>AWS <a href="https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html">publishes</a> its public IP address ranges using Classless Inter-Domain Routing (CIDR) notation in JSON format. This data could increase detection logic efficiency by first checking if an IP address exists outside AWS, and then using more computationally expensive logic to check other conditions.</p>
<p>Similar detection logic could be applied to other services within AWS. Primary candidates would be AWS Elastic Container Service (<a href="https://aws.amazon.com/ecs/">ECS</a>) or Elastic Kubernetes Service (<a href="https://aws.amazon.com/eks/">EKS</a>). Both services can leverage the <a href="https://aws.amazon.com/fargate/">AWS Fargate</a> serverless compute engine, which is built on the same Firecracker microVM as the Lambda Worker.</p>
<h3>Caveats</h3>
<p>Lambda pricing is calculated per one million requests. Cold starts in environments with a high frequency of executions happen less often. However, real-time detection could generate a large quantity of detector database inserts and result in a large table size.</p>
<p>The detection logic described in this analysis relies on an undocumented feature. At any time, AWS could change how Lambda executes. </p>
<h2>Conclusion</h2>
<p>AWS CloudTrail is a rich source of management events. Network defenders can use specific events in the AWS Lambda operating environment to provide a baseline or context for other events. The proof-of-concept detector using Athena can effectively search events for malicious behavior.</p>
<h2 id="appendix">Appendix &#x2014; Athena queries</h2>
<p>Text versions of the Athena queries used in the detection proof of concept are provided for convenience to other researchers who want to explore this functionality. </p>
<h3>Create table for CreateLogStream events</h3>
<pre>CREATE TABLE "lambda_coldstart" AS
SELECT 
    useridentity.accessKeyId as accesskeyid, 
    -- Source IP can be different for the same access key id due to Lambda concurrency
    array_agg(sourceipaddress) as sourceipaddresses, 
    awsregion,
    useridentity.arn as arn,
    array_agg(useragent) as useragents,
    MIN(eventtime) as eventtime
FROM cloudtrail_logs WHERE
    eventname = 'CreateLogStream' AND 
    useragent LIKE 'awslambda-worker%'
GROUP BY 1, 3, 4
</pre>
<p></p>
<h3>Create table for customer-allocated IP addresses</h3>
<pre>CREATE TABLE allocated_addresses AS
SELECT 
    json_extract_scalar(responseelements, '$.publicIp') as publicip,
    json_extract_scalar(responseelements, '$.allocationId') as allocationid,
    -- this is region name
    json_extract_scalar(responseelements, '$.networkBorderGroup') as networkbordergroup
FROM 
    "cloudtrail_logs" 
WHERE 
    eventname = 'AllocateAddress';
</pre>
<p></p>
<h3>Select events using stolen credentials</h3>
<pre>SELECT
    lcs.accesskeyid,
    lcs.sourceipaddresses,
    lcs.awsregion,
    ct.useridentity.accessKeyId,
    ct.sourceipaddress, 
    ct.awsregion,
    ct.eventname,
    ct.eventid
FROM cloudtrail_logs ct, lambda_coldstart lcs WHERE
    lcs.accesskeyid = ct.useridentity.accessKeyId AND
    not contains(lcs.sourceipaddresses, ct.sourceipaddress) AND
    -- Exclude AWS managed services
    ct.sourceipaddress != 'AWS Internal' AND
    -- access keys can be reused to make sure it's the same ARN (which will differ)
    ct.useridentity.arn = lcs.arn AND
    -- Decrypt is noisy for the purposes of this detector
    ct.eventname != 'Decrypt' AND
    ct.eventtime &gt; lcs.eventtime AND
    -- Lookup IP addresses that have been allocated to account and exclude if they match
    NOT EXISTS (SELECT 1 FROM allocated_addresses aa WHERE aa.publicip = ct.sourceipaddress);
</pre>
<p></p>
<p>The post <a href="https://onlinepitstop.com/2023/04/18/detecting-the-use-of-stolen-aws-lambda-credentials/">Detecting the Use of Stolen AWS Lambda Credentials</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2023/04/18/detecting-the-use-of-stolen-aws-lambda-credentials/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Active Directory Flaw Allowed SAML Persistence</title>
		<link>https://onlinepitstop.com/2023/01/19/azure-active-directory-flaw-allowed-saml-persistence/</link>
					<comments>https://onlinepitstop.com/2023/01/19/azure-active-directory-flaw-allowed-saml-persistence/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 19 Jan 2023 09:54:04 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2023/01/19/azure-active-directory-flaw-allowed-saml-persistence/</guid>

					<description><![CDATA[<p>Summary In August 2022, Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers discovered a vulnerability in Azure Active Directory (Azure AD) that allowed a user to retain access to a targeted Security Assertion Markup Language (SAML) application after the user assignment was removed. Using a backdoor application that was given consent to access the SAML application, a</p>
<p>The post <a href="https://onlinepitstop.com/2023/01/19/azure-active-directory-flaw-allowed-saml-persistence/">Azure Active Directory Flaw Allowed SAML Persistence</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>In August 2022, Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers discovered a vulnerability in Azure Active Directory (Azure AD) that allowed a user to retain access to a targeted Security Assertion Markup Language (SAML) application after the <a href="https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/what-is-access-management#requiring-user-assignment-for-an-app">user assignment</a> was removed. Using a backdoor application that was given consent to access the SAML application, a malicious user could request SAML tokens despite the user assignment removal. By exploiting this vulnerability, a malicious user could establish persistence and elevate privileges on targeted SAML applications.</p>
<p>CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers reported these findings to Microsoft on August 4. Microsoft addressed the issue with mitigations initially deployed on October 25.</p>
<h2>Attack overview</h2>
<p>Azure AD offers the option to configure SAML-based <a href="https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/what-is-single-sign-on#single-sign-on-options">single sign-on</a> (SSO) for multiple pre-integrated and customer-developed services (i.e., applications). When user assignment is required, users and groups must first be assigned to the application before they can access it.</p>
<p>When exploiting this vulnerability, the most lucrative target for a malicious user would be a SAML application that relies solely on Azure AD&#8217;s user assignment setting. In this scenario, the absence of user assignment enforcement in the SAML application could be exploited to provision a new user for the malicious user in the target service.</p>
<p>The flaw was triggered when chaining sign-in with additional application and certain parameters in the token request (see Figure 1). This use case was originally intended so that backend SAML APIs could be called from an OAuth 2.0 application.</p>
<p><img loading="lazy" decoding="async" alt="" height="377" width="635" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/102%20azure%20active%20directory%20flaw%20allowed%20saml%20persistence/figure-01.ashx?la=en&amp;modified=20230113195559&amp;hash=5BE6879DB755EBEBA4DFA8E06D281B1D"><br /><em>Figure 1. Attack process. (Source: Secureworks)</em></p>
<ol readability="0.48258196721311">
<li readability="-1">
<p>The malicious user requests an Azure AD access token for the additional application.</p>
</li>
<li readability="1.9055555555556">The additional application requests a token for the SAML application using <a href="https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow">on-behalf-of flow</a>. The request payload includes the parameters listed in Figure 2.
<p><img loading="lazy" decoding="async" alt="" height="91" width="536" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/102%20azure%20active%20directory%20flaw%20allowed%20saml%20persistence/figure-02.ashx?la=en&amp;modified=20230113195600&amp;hash=60EA39B7659EB4C9D9DE8D2272FA6169"><br /><em>Figure 2. Parameters included in request payload. (Source: Secureworks)</em></p>
<p>Chaining steps 1 and 2 bypasses the user assignment setting. The token generated in step 1 is used in the &#x2018;assertion&#8217; parameter.</p>
</li>
<li>The request response emits the SAML token.</li>
</ol>
<p></p>
<h2>Proof of concept</h2>
<p>In the proof-of-concept (PoC) scenario, a malicious user leverages a backdoor application to access any existing SAML applications that the malicious user was assigned when the backdoor application was configured. The malicious user retains access via the backdoor to any SAML application after their access is removed.</p>
<ol readability="-0.5">
<li readability="-1">The malicious user creates a new Azure AD application to use as the backdoor. They then consent it to any existing SAML application for which they want to receive tokens after the user assignment is removed. In the example shown in Figure 3, the malicious user uses a backdoor application named &#8220;UnPrivilegedUserSAMLattack2&#8221; to access a generic application called &#8220;SAML app&#8221; for which the malicious user had an existing user assignment.
<p><img loading="lazy" decoding="async" alt="" height="325" width="575" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/102%20azure%20active%20directory%20flaw%20allowed%20saml%20persistence/figure-03.ashx?la=en&amp;modified=20230113195600&amp;hash=7675DD5652202E4338B3154A08C8947E"><br /><em>Figure 3. Using a backdoor to compromise a SAML application. (Source: Secureworks)</em></p>
</li>
<li readability="0">The application administrator removes the malicious user from the user assignment in the existing SAML application (see Figure 4).
<p><img loading="lazy" decoding="async" alt="" height="232" width="555" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/102%20azure%20active%20directory%20flaw%20allowed%20saml%20persistence/figure-04.ashx?la=en&amp;modified=20230113195600&amp;hash=ACB74164DC80EF3169954C63AAEA81C9"><br /><em>Figure 4. Removing the malicious user from the SAML application user assignment. (Source: Secureworks)</em></p>
</li>
<li>The malicious user requests tokens for the SAML application using the application configured in step 1.</li>
</ol>
<p>The backdoor application used in this PoC requests tokens by leveraging an unrelated <a href="https://github.com/jsa2/aad_device_code#usage">app</a> retrofitted with malicious code added to its getCode.js file. The lines referencing the requested token contain the following vulnerable parameter combination that bypasses the user assignment verification:</p>
<pre>"requested_token_type":"urn:ietf:params:oauth:token-type:saml2",</pre>
<pre>"requested_token_use":"on_behalf_of"</pre>
<h3>Evaluation of SAML tokens</h3>
<p>The objective of the attack is to acquire a SAML token with a valid signature, issuer, audience, and claims (see Figure 5). The malicious user receives a SAML token comparable to one that is emitted using a legitimate access pattern, despite the lack of user assignment for the application. Testing concluded that additional claims configured for the SAML application, such as groups, were included in the maliciously obtained SAML token.</p>
<p><img loading="lazy" decoding="async" alt="" height="362" width="559" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/102%20azure%20active%20directory%20flaw%20allowed%20saml%20persistence/figure-05.ashx?la=en&amp;modified=20230113195601&amp;hash=3B01C653712C934A4655579CBF7F8543"><br /><em>Figure 5. Attributes of a maliciously acquired SAML token. (Source: Secureworks)</em></p>
<h2>Exploitation requirements</h2>
<p>While the vulnerability was trivially exploitable, the malicious user needed a deep understanding of Azure AD applications and their configurations. The malicious user had to backdoor applications while they possessed a valid user assignment. The following knowledge is required to exploit this issue:</p>
<ul>
<li>Understanding on-behalf-of flows in Azure AD.</li>
<li>Understanding the use of non-standard flows to request a SAML token with a JWT.</li>
<li>Understanding Azure AD application consents and application permissions.</li>
<li>Understanding the use of SAML tokens outside the normal use pattern. The PoC code abuses a CLI application with device code flow to gain a JWT, and later exchanges it for a SAML token using the on-behalf-of pattern &#8220;&lt;-&gt;&#8221;. This technique differs from the typical use case of having a web browser receive the SAML token via interfacing directly the browser application.</li>
</ul>
<p></p>
<h2>Communication with Microsoft</h2>
<p>CTU researchers reported their initial findings about this vulnerability to Microsoft on August 4, 2022 and provided additional details on October 7. Microsoft confirmed the attack pattern on October 10 and categorized it as an &#8220;important&#8221; elevation of privilege issue. Microsoft addressed the issue in mitigations initially deployed on October 25 and provided the following response:</p>
<p><em>Microsoft has fixed an issue in the Azure Active Directory (Azure AD) OAuth2.0 protocol access token request when those requests are made by middle-tier applications who in turn use Security Assertion Markup Language (SAML) based authorization to access back-end APIs. Under certain circumstances, this issue would allow users within a tenant inappropriate access to back-end application functionality.</em></p>
<p><em>Microsoft has fixed the issue. Only correctly configured users will have access to the functionality of the back-end application.</em></p>
<h2>Conclusion</h2>
<p>This flaw allowed a previously assigned user within the tenant boundary to retain access to an application via a backdoor application, even after the user assignment was removed. This behavior was only possible if the user had valid access when the backdoor application was configured.</p>
<p>The following mitigating factors applied to this vulnerability:</p>
<ul>
<li>Applications that support <a href="http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.4.IdP-Initiated%20SSO:%20%20POST%20Binding%7Coutline">IdP-initiated</a> SSO were affected. Applications that only support <a href="https://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.2.SP-Initiated%20SSO:%20%20Redirect/POST%20Bindings%7Coutline">SP-initiated</a> SSO were not affected because SP-initiated SSO requires the &#8220;<a href="https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#obtain-a-saml-token-by-using-an-obo-request-with-a-shared-secret">inResponseTo</a>&#8221; attribute in the SAML response.</li>
<li>Applications that perform additional checks for user permissions or roles when receiving the token could prevent access even if the malicious user was able to bypass the user assignment on Azure AD.</li>
</ul>
<p>To reduce risk to similar threats, CTU researchers recommend that organizations prevent users from <a href="https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#register-an-application">registering</a> their own applications in the Azure AD tenant.</p>
<p>The post <a href="https://onlinepitstop.com/2023/01/19/azure-active-directory-flaw-allowed-saml-persistence/">Azure Active Directory Flaw Allowed SAML Persistence</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2023/01/19/azure-active-directory-flaw-allowed-saml-persistence/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Active Directory Pass-Through Authentication Flaws</title>
		<link>https://onlinepitstop.com/2022/09/13/azure-active-directory-pass-through-authentication-flaws/</link>
					<comments>https://onlinepitstop.com/2022/09/13/azure-active-directory-pass-through-authentication-flaws/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 13 Sep 2022 14:34:45 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2022/09/13/azure-active-directory-pass-through-authentication-flaws/</guid>

					<description><![CDATA[<p>Summary Pass-through authentication (PTA) is one of the Azure Active Directory (Azure AD) hybrid identity authentication methods. PTA relies on PTA agents installed on one or more on-premises servers. Azure AD uses a certificate-based authentication (CBA) to identify each agent. In May 2022, Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers analyzed how the protocols used by</p>
<p>The post <a href="https://onlinepitstop.com/2022/09/13/azure-active-directory-pass-through-authentication-flaws/">Azure Active Directory Pass-Through Authentication Flaws</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p><a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta" target="_blank">Pass-through authentication</a> (PTA) is one of the Azure Active Directory (Azure AD) hybrid identity <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/choose-ad-authn" target="_blank">authentication methods</a>. PTA relies on PTA agents installed on one or more on-premises servers. Azure AD uses a certificate-based authentication (CBA) to identify each agent. In May 2022, Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers analyzed how the <a rel="noopener noreferrer" href="https://o365blog.com/post/pta-deepdive/" target="_blank">protocols used by PTA</a> could be exploited. The researchers determined that threat actors could steal the identity of the PTA agent by exporting the certificate used for CBA. The compromised certificate can be used with the attacker-controlled PTA agent to create an undetectable backdoor, allowing threat actors to log in using invalid passwords, gather credentials, and perform remote denial of service (DoS) attacks. Attackers can renew the certificate when it expires to maintain persistence in the network for years. A compromised certificate cannot be revoked by an organization&#x2019;s administrators.</p>
<p>CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers shared their findings with Microsoft on May 10, 2022. Microsoft responded on July 2 that PTA is working as intended and gave no indication of plans to address the reported flaws.</p>
<h2>Azure AD hybrid identity authentication options</h2>
<p>Azure AD supports three authentication options for hybrid identities (see Figure 1). Microsoft <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/migrate-from-federation-to-cloud-authentication" target="_blank">recommends</a> using password-hash synchronization (PHS) for authentication. <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/whatis-fed" target="_blank">Identity federation</a> and PTA are options for organizations that cannot or choose not to synchronize password hashes to the cloud, or organizations that need stronger authentication controls. Identity federation is usually implemented with the Microsoft <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/windows-server/identity/active-directory-federation-services" target="_blank">Active Directory Federation Services</a> (AD FS), which is included in Windows Server operating systems. PTA is often promoted as being preferable to identity federation, as AD FS has been targeted in attacks such as Solorigate (using a technique known as <a href="https://www.secureworks.com/blog/going-for-the-gold-penetration-testing-tools-exploit-golden-saml?">Golden SAML</a>). In these attacks, threat actors can export the token-signing certificate from a compromised AD FS server and use it to forge SAML tokens to impersonate users.</p>
<p><img loading="lazy" decoding="async" alt="" height="331" width="557" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/AzureActiveDirectorypassthroughauthenticationflawsfigure1svg.ashx?la=en&amp;modified=20220908114036&amp;hash=485E84FE6F1AE016BF2B5707DFB240CF"><br /><em>Figure 1. Azure AD hybrid identity authentication options. (Source: Secureworks)</em></p>
<p>PTA relies on PTA agents installed on one or more on-premises servers. Microsoft <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta-quick-start" target="_blank">recommends</a> installing a minimum of three agents for high availability. Each tenant can have a maximum of 40 agents. Figure 2 illustrates the high-level PTA architecture.</p>
<p><img loading="lazy" decoding="async" alt="" height="235" width="608" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure2.ashx?la=en&amp;modified=20220908114036&amp;hash=490776A1DA247F35BB265C6F12CC454C"><br /><em>Figure 2. High-level PTA architecture. (Source: Secureworks)</em></p>
<ol>
<li>	A user accesses a service that uses the Azure AD identity platform (e.g., Microsoft 365) and provides their username and password.
    </li>
<li>	Azure AD encrypts the credentials and sends an authentication request to one or more PTA agents.
    </li>
<li>	The PTA agent decrypts the user&#x2019;s credentials, attempts to log in to Active Directory with decrypted credentials, and returns results to Azure AD.</li>
</ol>
<p></p>
<h2>Installation</h2>
<p><span>During the installation of a PTA agent, a certificate signing request (CSR) is sent to the Azure AD</span> https: //<em>&lt;tenant ID&gt;</em> . registration . msappproxy . net/register/RegisterConnector endpoint (see Figure <span>3</span>). The response includes a certificate signed by Azure AD.</p>
<p><img loading="lazy" decoding="async" alt="" height="289" width="496" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure3.ashx?la=en&amp;modified=20220908114036&amp;hash=04264722073FD029E366AA011984D963"><br /><em>Figure 3. PTA agent registration request. (Source: Secureworks)</em></p>
<p>The certificate is issued by HISconnectorRegistrationCA . his . msappproxy . net, and the certificate subject is the Azure AD tenant ID (see Figure 4). The agent ID is a globally unique identifier (GUID), which is encoded in object identifier (<a rel="noopener noreferrer" href="http://www.oid-info.com/#oid" target="_blank">OID</a>) value 1.3.6.1.4.1.311.82.1 as a byte array. The certificate is valid for six months.</p>
<p><img loading="lazy" decoding="async" alt="" height="300" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure4.ashx?la=en&amp;modified=20220908114036&amp;hash=FA004D8D9A1E6860A707C284A87361EE"><br /><em>Figure 4. PTA agent certificate information and details. (Source: Secureworks)</em></p>
<p>The list of PTA agents and their associated IP address and status is stored in <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/azure-sql/database/sql-database-paas-overview?view=azuresql" target="_blank">Azure SQL Database</a> and is available in the Azure AD portal (see Figure 5). The list does not display the agent IDs.</p>
<p><img loading="lazy" decoding="async" alt="" height="232" width="534" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure5.ashx?la=en&amp;modified=20220908114035&amp;hash=16DE4E895B174C36F80AC90B62376CAB"><br /><em>Figure 5. List of PTA agents in the Azure AD portal. (Source: Secureworks)</em></p>
<p>Administrators can use the MS Graph API or tools such as <a rel="noopener noreferrer" href="https://o365blog.com/aadinternals/" target="_blank">AADInternals</a> to view agents&#x2019; IDs. For example, Figure 6 lists two agents and their IDs. The first ID matches the certificate in Figure 4, but each segment of the ID lists the values of the certificate in reverse order as described in <a rel="noopener noreferrer" href="https://www.ietf.org/rfc/rfc4122.txt" target="_blank">RFC4122</a>.</p>
<p><img loading="lazy" decoding="async" alt="" height="159" width="408" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure6.ashx?la=en&amp;modified=20220908114035&amp;hash=A75914A38E21AE08E2685A8D5FD8C2FA"><br /><em>Figure 6. Using AADInternals to list PTA agents. (Source: Secureworks)</em></p>
<p>The PTA agent ID is included on the Authentication Details tab in the Azure AD sign-ins log details. It identifies which agent was used to authenticate the user. For example, Figure 7 shows that the second agent listed in Figure 6 performed the authentication.</p>
<p><img loading="lazy" decoding="async" alt="" height="154" width="584" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure7.ashx?la=en&amp;modified=20220908114035&amp;hash=FDFAED1AD2702738D683A6A9308C94CE"><br /><em>Figure 7. Authentication details in the Azure AD sign-ins log. (Source: Secureworks)</em></p>
<p>The thumbprint of the certificate used by the PTA agent is located on disk in a configuration file named C:ProgramDataMicrosoftAzure AD Connect Authentication AgentConfigTrustSettings.xml (see Figure 8).</p>
<p><img loading="lazy" decoding="async" alt="" height="87" width="517" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure8.ashx?la=en&amp;modified=20220908114035&amp;hash=1E053DCD390869D41FF1C65B7AA61467"><br /><em>Figure 8. PTA agent configuration file. (Source: Secureworks)</em></p>
<p>The certificate, including the private key protected by the data protection API (<a href="https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection">DPAPI</a>), can be exported with tools such as AADInternals and <a href="https://github.com/gentilkiwi/mimikatz/wiki">Mimikatz</a>. AADInternals exports the certificate as a PFX file named as <em>&lt;computer full name&gt;</em>_<em>&lt;tenant ID&gt;</em>_<em>&lt;agent ID&gt;</em>.pfx (see Figure <span>9</span>).</p>
<p><img loading="lazy" decoding="async" alt="" height="57" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure9.ashx?la=en&amp;modified=20220908114034&amp;hash=29D157039044D1C0D58CF51C7CC04E2C"><br /><em>Figure 9. Exporting PTA agent certificate using AADInternals. (Source: Secureworks)</em></p>
<h3>PTA agent startup</h3>
<p>The main technical <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta-security-deep-dive#components-involved" target="_blank">components</a> involved with PTA are Azure AD, <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview" target="_blank">Azure Service Bus</a>, and the Azure AD Connect Authentication Agent (PTA agent). The agent searches for a &#x201C;bootstrap&#x201D; document that specifies settings and a list of command and control (C2) channels that enable the PTA to establish <a rel="noopener noreferrer" href="https://en.wikipedia.org/wiki/WebSocket" target="_blank">WebSocket</a> connections to identified endpoints (see Figure 10).</p>
<p><img loading="lazy" decoding="async" alt="" height="273" width="418" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure10.ashx?la=en&amp;modified=20220908114034&amp;hash=C5D039D4DE538FF17342694AB50640BD"><br /><em>Figure 10. PTA agent startup sequence. (Source: Secureworks)</em></p>
<ol readability="0">
<li><span>The PTA agent connects to https: //<em>&lt;tenant ID&gt;</em> . pta . bootstrap . his . msappproxy . net/ConnectorBootstrap and uses CBA to identify itself.</span></li>
<li><span>Azure AD sends an HTTP redirect to the PTA agent for the regional endpoint.</span></li>
<li><span>The PTA agent connects to the regional endpoint at https: //bootstrap-<em>&lt;xxxn&gt;</em> . his . msappproxy . <span>net/ConnectorBootstrap. The &lt;<em>xxxn</em>&gt; variable includes three alphabetical characters and one number.</span></span></li>
<li><span>Azure AD returns a &#x201C;bootstrap&#x201D; XML document containing several settings and a list of signaling listener endpoints geographically close to the PTA agent (see Figure 11). This document instructs the PTA agent to connect to and listen on specific command and control (C2) channels via the Azure Service Bus.</span></li>
<p><img loading="lazy" decoding="async" alt="" height="406" width="717" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure11.ashx?la=en&amp;modified=20220908114034&amp;hash=5CF688141BCD06E4EB35C8561DF36E2B"><br /><em>Figure 11. Excerpt of bootstrap file. (Source: Secureworks)</em></p>
<p><li><span>	The PTA agent establishes a WebSocket connection to each signaling listener endpoint and is ready to receive authentication requests. Endpoints are implemented using Azure Service Bus.<br />
    </span></li>
</p>
</ol>
<p>The PTA agent repeats steps 1 through 4 every ten minutes to refresh the bootstrap. The agent reconnects to the signaling listener endpoints defined in the bootstrap XML data (step 5) as needed.</p>
<h2>PTA authentication process </h2>
<p>PTA leverages Azure Service Bus, <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/azure-relay/relay-what-is-it" target="_blank">Azure Relay</a>, and <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/app-proxy/application-proxy" target="_blank">Azure AD Application Proxy</a> services during the authentication process (see Figure 12). These elements deliver authentication requests from Azure AD to PTA agents, and authentication responses from the PTA agents to Azure AD.</p>
<p><img loading="lazy" decoding="async" alt="" height="226" width="409" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure12.ashx?la=en&amp;modified=20220908114034&amp;hash=166FACC85648E813DE9E59E99715430A"><br /><em>Figure 12. PTA authentication process. (Source: Secureworks)</em></p>
<ol>
<li>	Azure AD sends a notification to all connected agents via Azure Service Bus. The notification includes an address of the Azure Relay.
    </li>
<li>	The PTA agent establishes a WebSocket connection to the Azure Relay.
    </li>
<li>	Azure AD sends an authentication request to the PTA agent via Azure Relay.
    </li>
<li>	The PTA agent attempts to log in to the on-premises Active Directory domain. It sends the authentication results to Azure Web Application Proxy via an HTTP POST request.</li>
</ol>
<p>The established WebSocket connections are not closed. This means that subsequent authentication requests are faster, as not all steps are needed. Requests can be sent using the already established connection to the relay.</p>
<p>The authentication request sent in step 3 is an XML file (see Figure 13). The EncryptedData element contains an array of credentials encrypted using different certificates. The key identifier is in the format &lt;<em>agent ID</em>&gt;_&lt;<em>certificate thumbprint</em>&gt;. This format allows each PTA agent to decrypt the appropriate credentials entry.</p>
<p><img loading="lazy" decoding="async" alt="" height="167" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figur13.ashx?la=en&amp;modified=20220908114034&amp;hash=3C9618D43BD04E43ECCA26E5848C8A49"><br /><em>Figure 13. Authentication request. (Source: Secureworks)</em></p>
<p>After signing in using the provided credentials, the PTA agent sends a response message to Azure AD via the proxy. The response is a JSON file that includes two claims. In a successful response (see Figure 14), the &#x201C;http: //schemas . xmlsoap . org/ws/2005/05/identity/claims/authentication&#x201D; claim is set to true and the &#x201C;http:// schemas . xmlsoap . org/ws/2002/05/identity/claims/name&#x201D; claim is set to the user&#x2019;s username. Azure AD does not check the validity of the username.</p>
<p><img loading="lazy" decoding="async" alt="" height="94" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure14.ashx?la=en&amp;modified=20220908114033&amp;hash=86F27DDBAC8D12BC7DE568A8024D7BEC"><br /><em>Figure 14. Response for successful authentication. (Source: Secureworks)</em></p>
<p>In the failed response (see Figure 15), the &#x201C;http: //schemas . xmlsoap . org/ws/2005/05/identity/claims/authentication&#x201D; claim is set to false and the &#x201C;http: //schemas . xmlsoap . org/ws/2002/05/identity/claims/validationfailurereasoning&#x201D; claim contains the <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--1300-1699-" target="_blank">error code</a>. For instance, error 1327 means &#x201C;Account restrictions are preventing this user from signing in.&#x201D;</p>
<p><img loading="lazy" decoding="async" alt="" height="118" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure15.ashx?la=en&amp;modified=20220908114033&amp;hash=A1074E47FD3806061CB34BAEA3FEF582"><br /><em>Figure 15. Response for failed authentication. (Source: Secureworks)</em></p>
<h2>Custom PTA agent</h2>
<p>After studying the protocols used by PTA agents, CTU researchers implemented a proof-of-concept custom PTA agent that leverages the certificate of an existing PTA agent. After startup, the custom PTA agent connects to Azure AD and waits for authentication requests. Figure 16 shows the agent connecting to Azure AD using the provided certificate, decrypting credentials, and displaying the plaintext user password. The custom agent can accept or deny all requests regardless of whether the password is valid. Threat actors can create a similar custom PTA agent to harvest credentials, establish a backdoor, or conduct a DoS attack by denying authentication requests containing valid credentials.</p>
<p><img loading="lazy" decoding="async" alt="" height="245" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure16.ashx?la=en&amp;modified=20220908114033&amp;hash=469BF71CC5242539E61E9352DD110629"><br /><em>Figure 16. Custom PTA agent. (Source: Secureworks)</em></p>
<p>CTU researchers observed that the PTA agent&#x2019;s IP address changed in the Azure AD portal when the custom PTA agent started (see Figure 17). However, after the original PTA agent fetched the bootstrap during its next ten-minute cycle, the IP address reverted. This behavior implies that the IP address is populated every time a PTA agent fetches the bootstrap. When CTU researchers pointed the custom PTA agent to an existing bootstrap file on the system, the agent&#x2019;s IP address did not change on the portal. This result suggests that connecting directly to signaling listener endpoints does not affect the IP address. As such, threat actors can use an existing bootstrap to connect to Azure AD undetected.</p>
<p><img loading="lazy" decoding="async" alt="" height="436" width="472" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure17.ashx?la=en&amp;modified=20220908114032&amp;hash=A5B18795F27306F635C1FA52B634E9EE"><br /><em>Figure 17. PTA agent IP address change. (Source: Secureworks)</em></p>
<p>The certificate used to authenticate the PTA agent is valid for six months. The PTA agent cannot decrypt passwords when its certificate expires or if the agent has been inactive for ten days. In these cases, the PTA agent can &#x201C;renew&#x201D; the trust with Azure AD by making a HTTP POST request to the trust renew endpoint defined in the bootstrap file. The expired certificate can be used for CBA with this endpoint, and Azure AD returns a new certificate. Renewing trust does not populate the PTA agent&#x2019;s IP address or invalidate the previous certificate, so a single agent can possess multiple valid certificates. CTU researchers observed that if a PTA agent possesses more than ten active certificates, the authentication requests contain passwords encrypted with the ten newest certificates. Threat actors can perform DoS attacks by renewing the certificate of the compromised agent ten or more times, making the original agent unable to decrypt credentials. </p>
<p>Because the information available from the Azure AD portal for administrators is populated when the bootstrap XML is requested, impersonating a PTA agent using the compromised certificate cannot be detected using Microsoft administrator tools. The Secureworks custom PTA agent can dump all active agents and certificates (Figure 18), helping administrators detect and identify compromised agents.</p>
<p><img loading="lazy" decoding="async" alt="" height="231" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure18.ashx?la=en&amp;modified=20220908114032&amp;hash=8993F480BDA332E04CCFC62CAFD86463"><br /><em>Figure 18. Secureworks custom PTA agent dumping active agents. (Source: Secureworks)</em></p>
<p>The PTA agent exports agent IDs and certificate thumbprints for all active certificates to a text file. Figure 19 shows that the PTA agent with ID 672843e0-8b25-434f-93e2-5d5071139e09 possesses three active certificates, which indicates that a compromised agent certificate was used to renew the certificate twice. The renewed certificates&#x2019; active status means that they were used by a threat actor during the last ten days.</p>
<p><img loading="lazy" decoding="async" alt="" height="80" width="481" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/101%20azure%20active%20directory%20pass-through/Azure-Active-Directory-passthrough-authentication-flaws_figure19.ashx?la=en&amp;modified=20220908114032&amp;hash=8CDCE637A8158E950D85335C35808B96"><br /><em>Figure 19. List of active agents and certificates. (Source: Secureworks)</em></p>
<p>Unlike AD FS token-signing certificates, PTA agent certificates cannot be explicitly revoked. Administrators can remove PTA agents from servers but cannot directly <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta-faq#how-do-i-remove-a-pass-through-authentication-agent-" target="_blank">remove</a> PTA agents from the Azure SQL Database. Agents can only be removed from the database by keeping them inactive for ten days, after which they are automatically removed by Microsoft. If a threat actor is actively using any certificate associated with the compromised PTA agent, the agent never becomes inactive.</p>
<h2>Communication with Microsoft</h2>
<p>CTU researchers reported their initial findings to the Microsoft Security Response Center (MSRC) on May 10, 2022 and submitted additional findings related to undetectable access on May 16. The MSRC responded to the CTU research team on July 7:</p>
<p><em>Our team completed the assessment for this issue and we understand that the attack surface for this requires compromising a high security asset by gaining administrative access in the first place. If the customer followed our hardening guidance but the attacker still has access to the server that runs the PTA agent then they already had access to the user credentials, hence we believe this vulnerability in itself does not pose an additional risk. As a mitigation mechanism, we do have the ability to block agents on the server side based on customer escalations and furthermore we are looking into ways to improve our audit logs as an improved detection mechanism.</em></p>
<h2>Conclusion</h2>
<p>A compromised PTA agent certificate gives threat actors persistent and undetectable access to a target organization. Threat actors can use the compromised certificate to conduct the following activities:</p>
<ul>
<li>	Harvest credentials</li>
<li>Create a backdoor</li>
<li>	Conduct DoS attacks by rejecting valid passwords or by renewing the certificate ten or more times</li>
</ul>
<p>CTU researchers recommend that organizations perform the following actions to protect their tenants:</p>
<ul>
<li>	Treat all on-premises hybrid identity components, including servers with PTA agents, as <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/microsoft-identity-manager/pam/tier-model-for-partitioning-administrative-privileges" target="_blank">tier 0</a> servers.</li>
<li>	Consider using other hybrid authentication methods, such as PHS or identity federation, until Microsoft addresses these security issues.</li>
<li>	Monitor for suspicious activity, such as logins using an incorrect password. Sign-in activity is available in the Azure AD portal and via the &#x2018;beta&#x2019; version of the Microsoft Graph <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/graph/api/signin-list?view=graph-rest-beta" target="_blank">sign-ins report</a>. If there are any indications of a compromised PTA agent, immediately create a support request in the Azure AD portal to invalidate the agent.</li>
<li>	Use multi-factor authentication to prevent threat actors from using a PTA agent as a backdoor.</li>
</ul>
<p>The post <a href="https://onlinepitstop.com/2022/09/13/azure-active-directory-pass-through-authentication-flaws/">Azure Active Directory Pass-Through Authentication Flaws</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2022/09/13/azure-active-directory-pass-through-authentication-flaws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DarkTortilla Malware Analysis</title>
		<link>https://onlinepitstop.com/2022/08/18/darktortilla-malware-analysis/</link>
					<comments>https://onlinepitstop.com/2022/08/18/darktortilla-malware-analysis/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 18 Aug 2022 10:14:28 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2022/08/18/darktortilla-malware-analysis/</guid>

					<description><![CDATA[<p>Summary DarkTortilla is a complex and highly configurable .NET-based crypter that has possibly been active since at least August 2015. It typically delivers popular information stealers and remote access trojans (RATs) such as AgentTesla, AsyncRat, NanoCore, and RedLine. While it appears to primarily deliver commodity malware, Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers identified DarkTortilla samples</p>
<p>The post <a href="https://onlinepitstop.com/2022/08/18/darktortilla-malware-analysis/">DarkTortilla Malware Analysis</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>DarkTortilla is a complex and highly configurable .NET-based <a href="https://blog.malwarebytes.com/cybercrime/malware/2017/03/explained-packer-crypter-and-protector/">crypter</a> that has <a href="https://blog.malwarebytes.com/threat-analysis/2015/08/rainbows-steganography-and-malware-in-a-new-net-cryptor/">possibly</a> been active since at least August 2015. It typically delivers popular information stealers and remote access trojans (RATs) such as AgentTesla, AsyncRat, NanoCore, and RedLine. While it appears to primarily deliver commodity malware, Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers identified DarkTortilla samples delivering targeted payloads such as Cobalt Strike and Metasploit. It can also deliver &#8220;addon packages&#8221; such as additional malicious payloads, benign decoy documents, and executables. It features robust anti-analysis and anti-tamper controls that can make detection, analysis, and eradication challenging.</p>
<p>From January 2021 through May 2022, an average of 93 unique DarkTortilla samples per week were uploaded to the VirusTotal analysis service. Code similarities suggest possible links between DarkTortilla and other malware: a <a href="https://github.com/malwares/Crypter/tree/master/%5BC%23%5D%20The%20RATs%20Crew%20Crypter">crypter</a> operated by the <a href="https://wiki.hackforums.net/RATs_Crew">RATs Crew</a> threat group, which was active between 2008 and 2012, and the <a href="https://www.gosecure.net/blog/2021/11/02/new-malware-gameloader-in-discord-malspam-campaign-identified-by-gosecure-titan-labs/">Gameloader</a> malware that emerged in 2021.</p>
<h2>Delivery</h2>
<p>CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> analysis of VirusTotal samples revealed numerous campaigns delivering DarkTortilla via malicious spam (malspam). The emails typically use a logistics lure and include the malicious payload in an archive attachment with file types such as .iso, .zip, .img, .dmg, and .tar. The language of the email message is customized to the victim, and CTU researchers observed samples in English, German, Romanian, Spanish, Italian, and Bulgarian. Figure 1 shows a German-language malspam <a href="https://www.virustotal.com/gui/file/981aa83b2d33cca994021197237ac5ee3ad3402f7d25f04f4e76985f4ec8744c">sample</a>. The redacted filename of the attached <a href="https://en.wikipedia.org/wiki/Optical_disc_image">ISO image</a> archive file (.iso) includes the name of the organization the email was sent from. It is unclear if that organization was compromised. The archive file contains a single executable with the same filename but the .exe extension. This executable is a DarkTortilla initial loader <a href="https://www.virustotal.com/gui/file/5e03556be992d23088a3c49d24c45b1c21cd275bffb4e536348e8128d50374b6">sample</a>.</p>
<p><img decoding="async" alt="" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure01.ashx?la=en&amp;modified=20220815211835&amp;hash=A1F4D2E3D2CAF5C7006CEE9954A5A30C"><br /><em>Figure 1. DarkTortilla malspam containing malicious archive attachment. (The German text translates to &#8220;Good morning, Please give us your best price offer for our attached order. Awaiting your kind reply. Kind regards&#8221;). (Source: Secureworks)</em></p>
<p>CTU researchers also identified malicious documents (maldocs) delivering DarkTortilla. Most of these maldocs embed the DarkTortilla initial loader executable as a Packager Shell Object. Figure 2 shows a <a href="https://www.virustotal.com/gui/file/4f15b28c91fa0e8d0dd9e86481bad04fa34fcaf564d08de7c4c0c513fc6e122d">sample</a> that prompts the victim to double-click the embedded Packager Shell Object, which executes the payload. Inspection of the Packager Shell Objects properties revealed that it is an executable named <a href="https://www.virustotal.com/gui/file/55d7d9bd9d4a511417033b6c14ce93f962d6a6e6c6414f0cb7e455baee1d3ab7">RFQ-010129H.exe</a>, which is a DarkTortilla initial loader sample. Other analyzed maldocs use different approaches, such as leveraging embedded macros to automatically execute the Packager Shell Object when a victim opens the document and enables macros.</p>
<p><img loading="lazy" decoding="async" alt="" height="249" width="302" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure02.ashx?la=en&amp;modified=20220815211835&amp;hash=CCE16F294E00016B0030CF44A3CB54B4"><br /><em>Figure 2. Maldoc sample delivering DarkTortilla. (Source: Secureworks)</em></p>
<h2>High-level execution flow</h2>
<p>DarkTortilla consists of two components that rely on each other to successfully detonate payloads: a .NET-based executable (initial loader) and a .NET-based DLL (core processor). The typical high-level execution flow for a DarkTortilla payload starts with execution of the initial loader. The initial loader then retrieves its encoded core processor. While the encoded core processor is typically embedded within the .NET resources of the initial loader, CTU researchers identified initial loaders that retrieved their core processor from <a href="https://cyberhoot.com/cybrary/paste/">public paste sites</a> such as pastebin . pl, textbin . net, and paste . ee.</p>
<p>The initial loader decodes, loads, and executes the core processor. When executed, the core processor extracts, decrypts, and parses its configuration. The encrypted configuration is stored within the .NET resources of the initial loader as bitmap images. Depending on DarkTortilla&#8217;s configuration, the core processor performs the following actions:</p>
<ul>
<li>Displays a fake message box</li>
<li>Performs anti-virtual machine checks</li>
<li>Performs anti-sandbox checks</li>
<li>Implements persistence</li>
<li>Migrates execution to the Windows %TEMP% directory by using the &#8220;Melt&#8221; configuration element</li>
<li>Processes addon packages</li>
<li>Migrates execution to its install directory</li>
</ul>
<p>The core processor then injects and executes its configured main payload within the context of the configured subprocess. Finally, if configured, the core processor implements anti-tamper controls to prevent interference with execution of the initial loader, core processor, injected subprocess, and WatchDog executable.</p>
<p>Figure 3 illustrates this high-level DarkTortilla execution flow.</p>
<p><img loading="lazy" decoding="async" alt="" height="633" width="508" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure03.ashx?la=en&amp;modified=20220815211836&amp;hash=D2E2DA3633CCCC14D7E8228BFEE8B93D"><br /><em>Figure 3. High-level execution flow for DarkTortilla infection. (Source: Secureworks)</em></p>
<h2>Initial loader</h2>
<p>Initial loader samples analyzed by CTU researchers were obfuscated using the <a href="https://marketplace.visualstudio.com/items?itemName=DeepSeaObfuscator.DeepSeaObfuscator">DeepSea .NET code obfuscator</a>. As a result, many aspects of the original code have been altered to thwart analysis. For example, namespace, class, function, and property names were renamed from their original descriptive values to random characters. Figure 4 shows an example of these obfuscated values within the code decompiled by the <a href="https://github.com/dnSpyEx/dnSpy">dnSpy</a> .NET analysis tool.</p>
<p><img loading="lazy" decoding="async" alt="" height="273" width="262" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure04.ashx?h=273&amp;w=262&amp;la=en&amp;modified=20220815211836&amp;hash=73E165FD0F98E89788276181BEAF1F02"><br /><em>Figure 4. Obfuscated DarkTortilla initial loader sample. (Source: Secureworks)</em></p>
<p>In addition to name obfuscation, DeepSea applies <a href="http://tigress.cs.arizona.edu/transformPage/docs/flatten/index.html">switch dispatch control flow obfuscation</a> to DarkTortilla&#8217;s initial loader. This technique restructures the original linear code into switch statements that transfer execution in a seemingly unpredictable pattern, making analysis difficult. Figure 5 shows a switch statement at the entry point of a DarkTortilla <a href="https://www.virustotal.com/gui/file/a0b96236bfd79d2ebeadb8e3deb9448af3ec8edd1ea9672b7ad4793934bb4c47">sample</a>. In this example, the value stored in the &#8220;num&#8221; variable controls which code gets executed next. This value is obfuscated and is often the result of a conditional or mathematical expression calculated at runtime, such as &#8220;<a href="https://en.wikipedia.org/wiki/%3F:">((!flag) ? 15 : 9)</a>&#8221; or &#8220;<a href="https://docs.microsoft.com/en-us/dotnet/api/system.math.abs?view=net-6.0#system-math-abs(system-int32)">Math.Abs(num2 * 25 * 25)</a>&#8220;.</p>
<p><img loading="lazy" decoding="async" alt="" height="368" width="312" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure05.ashx?la=en&amp;modified=20220815211836&amp;hash=18641C4266EC6C9FF74D5C8FB3E81897"><br /><em>Figure 5. Switch dispatch control flow obfuscation applied to DarkTortilla initial loader. (Source: Secureworks)</em></p>
<p>The initial loader stores DarkTortilla&#8217;s encrypted configuration as bitmap images. Figure 6 lists the partial resource section of one <a href="https://www.virustotal.com/gui/file/b3754c6ecc445e9a3b37c5ebe68adb9630ca4aa89a8e8515468f39ae8131f141">sample</a> consisting of over 700 of these images.</p>
<p><img loading="lazy" decoding="async" alt="" height="346" width="476" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure06.ashx?la=en&amp;modified=20220815211836&amp;hash=B563043F834E832C39C5A19DED74C775"><br /><em>Figure 6. Encrypted configuration stored as bitmap images within the .NET resources of DarkTortilla initial loader. (Source: Secureworks)</em></p>
<p>The initial loader&#8217;s execution flow typically starts by checking for internet connectivity by issuing HTTP GET requests. In samples that implement this check, the initial loader attempts to retrieve content from google . com, bing . com, or both. Some <a href="https://www.virustotal.com/gui/file/45ef054bca2ae4d67e6623bf28ff75e5d178924602674c654e1b569aa74601cd">samples</a> store the URLs in the executable as plain text (see Figure 7), but most samples encode them. If the check fails, the initial loader retries the request(s) until all are successful.</p>
<p><img loading="lazy" decoding="async" alt="" height="271" width="497" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure07.ashx?la=en&amp;modified=20220815211837&amp;hash=E668C68E6733BCBCC5F14BCC4E715D27"><br /><em>Figure 7. Internet connectivity check in DarkTortilla initial loader. (Source: Secureworks)</em></p>
<p>The initial loader generates a 16-byte key to decode the core processor. This key is based on an initial hard-coded value multiplied by the index value of its location in the destination array. Because the values are stored as single bytes, the maximum value for an element in the array is 0xFF (255 decimal). For example, the decode key array for an initial hard-coded value of 0x6E (110 decimal) is [0x00,0x6E,0xDC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF].</p>
<p>The initial loader then retrieves the encoded core processor data. This data commonly resides within the .NET resources of the initial loader binary. Figure 8 shows encoded core processor data residing within the &#8220;pnj&#8221; .NET resource of a DarkTortilla <a href="https://www.virustotal.com/gui/file/45ef054bca2ae4d67e6623bf28ff75e5d178924602674c654e1b569aa74601cd">sample</a>.</p>
<p><img loading="lazy" decoding="async" alt="" height="398" width="621" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure08.ashx?la=en&amp;modified=20220815211837&amp;hash=3C47B423E775B4168898529955C764B4"><br /><em>Figure 8. Encoded core processor data stored within the .NET resources of DarkTortilla initial loader. (Source: Secureworks)</em></p>
<p>The initial loader decodes the core processor data by applying the following algorithm to each byte:</p>
<pre>	enc_byte ^ (dec_key_arr[idx % len(dec_key_arr)] ^ (idx + (seed_byte % 
	len(dec_key_arr)) &amp; seed_byte)
</pre>
<ul>
<li>enc_byte: The core processor byte array value being decoded</li>
<li>idx: The encoded byte index in the core processor byte array</li>
<li>dec_key_arr: The generated 16-byte decode key byte array</li>
<li>seed_byte: The fourth byte of the 16-byte decode key byte array</li>
</ul>
<p>The initial loader loads the decoded core processor assembly code and executes its pre-determined entry point function.</p>
<h3>Initial loader variant with externally hosted core processor</h3>
<p>Initial loader variants that retrieve the encoded core processor from public paste sites first decode the URL where the core processor is hosted. The encoding logic applied to the URL varies across analyzed DarkTortilla samples, making analysis and detection difficult. Figure 9 shows a DarkTortilla <a href="https://www.virustotal.com/gui/file/0a5dc3b6669cf31e8536c59fe1315918eb4ecfd87998445e2eeb8fed64bd2f2c">sample</a> that encodes the URL (https: //pastebin . pl/view/raw/60b6b03b) by prepending and appending random text.</p>
<p><img loading="lazy" decoding="async" alt="" height="272" width="489" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure09.ashx?la=en&amp;modified=20220815211837&amp;hash=2957E5FF9065BF4352464C44C8C107A7"><br /><em>Figure 9. DarkTortilla initial loader variant that retrieves encoded core processor data from public paste site. (Source: Secureworks)</em></p>
<p>The initial loader retrieves an encoded string hosted at the decoded URL. This string represents the encoded core processor data. The string consists of fake XML tags, integer values encoded with a <a href="https://en.wikipedia.org/wiki/Caesar_cipher">shift cipher</a>, and delimiters comprised of random letters (see Figure 10). The downloaded data is stored in memory and is never saved to the filesystem.</p>
<p><img loading="lazy" decoding="async" alt="" height="290" width="456" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure10.ashx?la=en&amp;modified=20220815211837&amp;hash=79FB970DAAF19B71CEE49EBBCCB4F62F"><br /><em>Figure 10. Encoded DarkTortilla core processor data hosted on public paste site. (Source: Secureworks)</em></p>
<p>The initial loader decodes the string by first removing the fake XML tags. The string is converted into an array of integers by replacing the random letter character delimiters with a consistent letter and then using that letter to split the string into integers. The last step is to iterate through the integer array and subtract a pre-defined value. This value changes across samples.</p>
<p>In the Figure 10 example (&lt;xml&gt;1002k1015U1069k925E928s925U925E925g929E925&#x2026;&lt;/xml&gt;), the consistent letter delimiter is &#8220;k&#8221; and the pre-defined subtracted value is 925:</p>
<ol>
<li>Remove XML tags: 1002k1015U1069k925E928s925U925E925g929E925&#x2026;</li>
<li>Replace random letters with consistent character: 1002k1015k1069k925k928k925k925k925k929k925&#x2026;</li>
<li>Split into integer array: [1002, 1015, 1069, 925, 928, 925, 925, 925, 929, 925, &#x2026;]</li>
<li>Subtract pre-defined value from each integer: [77, 90, 144, 0, 3, 0, 0, 0, 4, 0, &#x2026;]</li>
</ol>
<p>The hex representation of the final integer array for this example is [4D, 5A, 90, 00, 03, 00, 00, 00, 04, 00, &#x2026;]. This decoded data is the core processor DLL (see Figure 11).</p>
<p><img loading="lazy" decoding="async" alt="" height="114" width="351" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure11.ashx?la=en&amp;modified=20220815211838&amp;hash=7F0C4D0643B27C3353EA7CF3EC638545"><br /><em>Figure 11. Decoded DarkTortilla core processor DLL. (Source: Secureworks)</em></p>
<h2>Core processor</h2>
<p>The core processor contains DarkTortilla&#8217;s primary functionality. From at least June 2020 to March 2022, the malware author transitioned through a limited number of filenames for this DLL that appeared to relate to a function or purpose (Deserialize.dll, SHCore1.dll, <a href="https://www.virustotal.com/gui/file/93dd1202697dbaed9ef4f4707f2628212bf13aad096de29c14924b1dae1d6d5b">PVCore1.dll</a>, and SHCore2.dll). In March 2022, the names began to change more frequently to seemingly random names (e.g., BRIN.dll, UKRUSAIN.dll, KNIFALL.dll, NullSBAS.dll).</p>
<h3>Configuration processing</h3>
<p>The core processor identifies the following resources in the initial loader that are associated with the encrypted configuration:</p>
<ul>
<li>The bitmap image resource(s) containing the encrypted configuration data</li>
<li>The binary resource specifying the total number of images to process</li>
<li>The resource folder containing these images and binary resources</li>
</ul>
<p>The names of these resources are calculated using the compile timestamp listed in the initial loader (which is not the file&#8217;s actual compile timestamp) and two hard-coded values that represent an initialization value and the length of the resource name. The hard-coded initialization and name length values were consistent across all DarkTortilla samples analyzed by CTU researchers (see Table 1).</p>
<table>
<thead>
<tr>
<th>Initial loader resource</th>
<th>Initialization value</th>
<th>Resource name length value</th>
</tr>
</thead>
<tbody>
<tr>
<td>
            Resource folder
            </td>
<td>
            5
            </td>
<td>
            12
            </td>
</tr>
<tr>
<td>
            Image count file
            </td>
<td>
            80
            </td>
<td>
            8
            </td>
</tr>
<tr>
<td>
            Image file
            </td>
<td>
            20
            </td>
<td>
            8
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. Values used to derive initial loader resource names.</em></p>
<p>These names are calculated via the following process:</p>
<ol>
<li>Divide the compile timestamp by &lt;<em>initialization value</em>&gt;.</li>
<li>Round the result using the <a href="https://docs.microsoft.com/en-us/dotnet/api/system.math.round?view=net-6.0#system-math-round(system-decimal)">Math.Round()</a> function.</li>
<li>Pass the result to the <a href="https://docs.microsoft.com/en-us/dotnet/api/system.random">Random.Random()</a> function as a seed value. By using a precalculated seed value, the malware author can generate a predictable 16-byte value.</li>
<li>Convert the 16-byte value to a GUID using the <a href="https://docs.microsoft.com/en-us/dotnet/api/system.guid">Guid.Guid()</a> function, which transposes the byte order.</li>
<li>Remove dash characters (&#x2018;-&#8216;) added during the GUID conversion.</li>
<li>Truncate the value to &lt;<em>resource name length</em>&gt; characters.</li>
</ol>
<p>For example, the following calculation generates the resource folder name of a <a href="https://www.virustotal.com/gui/file/b3754c6ecc445e9a3b37c5ebe68adb9630ca4aa89a8e8515468f39ae8131f141">sample</a> with a compile timestamp of &#8220;Sun May 26 23:57:08 1985&#8221; (integer: 486014228):</p>
<ol>
<li>486014228 / 5 = 97202845.6</li>
<li>Math.Round(97202845.6) = 97202846</li>
<li>Random.Random(97202846) = d00bee25fa9dc9024fdf632727286708</li>
<li>Guid.Guid(d00bee25fa9dc9024fdf632727286708) = 25ee0bd0-9dfa-02c9-4fdf-632727286708</li>
<li>Remove dashes = 25ee0bd09dfa02c94fdf632727286708</li>
<li>Truncate to 12 characters = 25ee0bd09dfa</li>
</ol>
<p>Applying the same calculation to the other components reveals that the image count resource name for this sample is &#8220;cd6935eb&#8221; and the image base name is &#8220;d390ea32&#8221;. The bitmap-formatted image names follow the pattern &lt;<em>image_base_name</em>&gt;&lt;<em>image_index</em>&gt;, where the &lt;<em>image_index</em>&gt; value ranges from 0 to the value specified in the image count resource. In this sample, the image count resource value is 0x2D4 (integer: 724), which means DarkTortilla attempts to process 725 bitmap-formatted images with the names d390ea32<strong>0</strong>, d390ea32<strong>1</strong>, d390ea32<strong>2</strong>, &#x2026;, d390ea32<strong>723</strong>, d390ea32<strong>724</strong>.</p>
<p>To extract the encrypted configuration, the core processor iterates through each of the image resources in order, extracts the pixel data, and concatenates the pixel data into a byte array (see Figure 12).</p>
<p><img loading="lazy" decoding="async" alt="" height="291" width="603" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure12.ashx?la=en&amp;modified=20220815211838&amp;hash=FE9B293142FD3860FB6ED1A94A36205F"><br /><em>Figure 12. Logic for extracting encrypted configuration from bitmap images. (Source: Secureworks)</em></p>
<p>The resulting byte array is decrypted using the <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard">Rijndael</a> cipher (also known as the Advanced Encryption Standard (AES)) with Electronic Code Book (ECB) block cipher mode and <a href="https://en.wikipedia.org/wiki/Padding_(cryptography)#ISO_10126">ISO10126 padding</a> configured. The ISO10126 <a href="https://www.iso.org/standard/18114.html">standard</a> was withdrawn in 2007, so the use of this padding could indicate that DarkTortilla&#8217;s origins date back to 2007 or earlier. The key used to decrypt this data is stored as the hard-coded integer array [81, 42, 59, 7, 27, 70, 83, 13, 71, 75, 17, 9, 39, 64, 3, 2] (see Figure 13).</p>
<p><img loading="lazy" decoding="async" alt="" height="285" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure13.ashx?la=en&amp;modified=20220815211838&amp;hash=B14808A66004691A493BFA3E1229F6C6"><br /><em>Figure 13. Hard-coded key to decrypt DarkTortilla configuration. (Source: Secureworks)</em></p>
<p>DarkTortilla parses the decrypted configuration data into a structure so that its elements can be easily referenced. Table 2 lists the potential configuration elements contained within DarkTortilla&#8217;s decrypted configuration. Entries in <strong>bold</strong> indicate configuration elements that were consistently present in all samples analyzed by CTU researchers.</p>
<table>
<thead>
<tr>
<th>
            Key</th>
<th>
            Type</th>
<th>
            Description</th>
</tr>
</thead>
<tbody readability="30">
<tr readability="2">
<td>
            <strong>%Installation%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Install DarkTortilla and implement persistence</strong>
            </td>
</tr>
<tr readability="2">
<td>
            %InstallationReg%
            </td>
<td>
            string
            </td>
<td>
            Registry key used for persistence
            </td>
</tr>
<tr readability="2">
<td>
            %InstallationKey%
            </td>
<td>
            string
            </td>
<td>
            Registry value used for persistence
            </td>
</tr>
<tr>
<td>
            %InstallationDirectory%
            </td>
<td>
            int
            </td>
<td>
            Root install directory
            </td>
</tr>
<tr readability="2">
<td>
            %InstallationFolder%
            </td>
<td>
            string
            </td>
<td>
            Subfolder name within the root install directory
            </td>
</tr>
<tr readability="2">
<td>
            %InstallationFileName%
            </td>
<td>
            string
            </td>
<td>
            Filename for the initial loader executable within the root subfolder
            </td>
</tr>
<tr readability="2">
<td>
            %StartupFolder%
            </td>
<td>
            bool
            </td>
<td>
            Enable Startup folder persistence
            </td>
</tr>
<tr readability="2">
<td>
            %Hidden%
            </td>
<td>
            bool
            </td>
<td>
            Enable &#8220;Hidden&#8221; registry persistence
            </td>
</tr>
<tr readability="2">
<td>
            %HiddenReg%
            </td>
<td>
            string
            </td>
<td>
            &#8220;Hidden&#8221; registry key used for persistence
            </td>
</tr>
<tr readability="2">
<td>
            %HiddenKey%
            </td>
<td>
            string
            </td>
<td>
            &#8220;Hidden&#8221; registry value used for persistence
            </td>
</tr>
<tr>
<td>
            <strong>%Message%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Display fake message box</strong>
            </td>
</tr>
<tr>
<td>
            %MessageIcon%
            </td>
<td>
            int
            </td>
<td>
            Fake message box icon ID
            </td>
</tr>
<tr readability="2">
<td>
            %MessageButton%
            </td>
<td>
            int
            </td>
<td>
            Fake message box button ID
            </td>
</tr>
<tr>
<td>
            %MessageTitle%
            </td>
<td>
            string
            </td>
<td>
            Fake message box title
            </td>
</tr>
<tr>
<td>
            %MessageBody%
            </td>
<td>
            string
            </td>
<td>
            Fake message box message
            </td>
</tr>
<tr readability="2">
<td>
            %MessageRepetition%
            </td>
<td>
            bool
            </td>
<td>
            Display fake message box even if installed
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%VM%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Perform anti-virtual machine checks</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%SB%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Perform anti-sandbox checks</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%InjectionPersist%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Enable anti-tamper control for running processes</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%StartupPersist%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Enable anti-tamper control for startup persistence</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%Melt%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Migrate initial loader execution to the Windows %TEMP% directory</strong>
            </td>
</tr>
<tr readability="2">
<td>
            %MeltName%
            </td>
<td>
            string
            </td>
<td>
            Filename for the initial loader executable within the Windows %TEMP% directory
            </td>
</tr>
<tr readability="2">
<td>
            %WatchDogName%
            </td>
<td>
            string
            </td>
<td>
            Filename for the anti-tamper WatchDog executable
            </td>
</tr>
<tr>
<td>
            %WatchDogBytes%
            </td>
<td>
            byte[]
            </td>
<td>
            WatchDog byte array
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%Compress%</strong>
            </td>
<td>
            <strong>bool</strong>
            </td>
<td>
            <strong>Indicates if payloads are zlib-compressed</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%Delay%</strong>
            </td>
<td>
            <strong>int</strong>
            </td>
<td>
            <strong>Number of seconds to delay execution within the core processor</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%HostIndex%</strong>
            </td>
<td>
            <strong>int</strong>
            </td>
<td>
            <strong>ID of the target subprocess name to use for main/addon payload injection</strong>
            </td>
</tr>
<tr>
<td>
            <strong>%MainFile%</strong>
            </td>
<td>
            <strong>byte[]</strong>
            </td>
<td>
            <strong>Main payload byte array</strong>
            </td>
</tr>
<tr readability="2">
<td>
            <strong>%FilesNum%</strong>
            </td>
<td>
            <strong>int</strong>
            </td>
<td>
            <strong>Number of addon packages to process</strong>
            </td>
</tr>
<tr readability="2">
<td>
            F.{0}.D
            </td>
<td>
            byte[]
            </td>
<td>
            Addon package (data): Payload byte array
            </td>
</tr>
<tr readability="2">
<td>
            F.{0}.N
            </td>
<td>
            string
            </td>
<td>
            Addon package (name): Filename
            </td>
</tr>
<tr readability="2">
<td>
            F.{0}.P
            </td>
<td>
            int
            </td>
<td>
            Addon package (path): Target install folder (special folder ID)
            </td>
</tr>
<tr readability="2">
<td>
            F.{0}.F
            </td>
<td>
            string
            </td>
<td>
            Addon package (folder): Target install subfolder
            </td>
</tr>
<tr readability="4">
<td>
            F.{0}.O
            </td>
<td>
            int
            </td>
<td>
            Addon package (operation): Execution type (disk, memory, none)
            </td>
</tr>
<tr readability="2">
<td>
            F.{0}.T
            </td>
<td>
            int
            </td>
<td>
            Addon package (time): Execution delay (seconds)
            </td>
</tr>
<tr readability="2">
<td>
            F.{0}.R
            </td>
<td>
            int
            </td>
<td>
            Addon package (run): Payload execution criterion
            </td>
</tr>
</tbody>
</table>
<p><em>Table 2. DarkTortilla configuration elements. Bold text indicates elements that appear in all analyzed samples.</em></p>
<h3>Fake message display</h3>
<p>DarkTortilla can be configured to display a message box when executed. The threat actor can customize message box characteristics such as the display message, message box title, and the <a href="https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/msgbox-constants">icon and button configuration</a>. Threat actors use fake message boxes to make victims think that execution failed or that a legitimate application is loading and installing. Table 3 lists the configuration elements and values in one DarkTortilla <a href="https://www.virustotal.com/gui/file/083acce46cb8cf35e37c778d1f4aee6814bca72d2874b793a47f9823f51df0fe/">sample</a>.</p>
<table>
<thead>
<tr>
<th>
            Configuration element</th>
<th>
            Assigned value as it appears in the configuration</th>
</tr>
</thead>
<tbody readability="3.5">
<tr>
<td>
            %Message%
            </td>
<td>
            True
            </td>
</tr>
<tr>
<td>
            %MessageIcon%
            </td>
<td>
            16
            </td>
</tr>
<tr>
<td>
            %MessageButton%
            </td>
<td>
            0
            </td>
</tr>
<tr readability="2">
<td>
            %MessageTitle%
            </td>
<td>
            .Net Framework Initialization Error
            </td>
</tr>
<tr readability="5">
<td>
            %MessageBody%
            </td>
<td>
            To run this application, you first must install one of the following version of the .Net Framework:rn.Net Framework, Version = 4.8.0
            </td>
</tr>
<tr>
<td>
            %MessageRepetition%
            </td>
<td>
            True
            </td>
</tr>
</tbody>
</table>
<p><em>Table 3. Fake message box-related configuration elements.</em></p>
<p>Figure 14 shows the message box for the DarkTortilla sample configured with the values in Table 3. The %MessageRepetition% configuration element controls whether the message box will continue to be displayed upon execution after DarkTortilla is installed and persistent on the compromised system.</p>
<p><img loading="lazy" decoding="async" alt="" height="155" width="390" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure14.ashx?la=en&amp;modified=20220815211838&amp;hash=6ABF228885F96A8EDDDC56B8C4B11946"><br /><em>Figure 14. Fake message box. (Source: Secureworks)</em></p>
<h3>&#8220;Melt&#8221; execution migration</h3>
<p>If the %Melt% configuration element is set to true, the core processor moves the initial loader executable to the Window&#8217;s %TEMP% directory. It uses the %MeltName% configuration element value as the executable filename (e.g., java.exe, PDF.exe, cookies.exe). The core processor runs the new executable and then terminates the original initial loader executable. However, the %TEMP% directory may not be the final destination for the initial loader. The executable could migrate again if the %Installation% configuration element is set to true.</p>
<h3>Installation</h3>
<p>The %Installation% configuration element controls whether DarkTortilla installs itself on a system. If set to true, the core processor moves the current DarkTortilla executable into the directory specified by the configuration. Table 4 lists the values stored in one DarkTortilla <a href="https://www.virustotal.com/gui/file/53b3b37b7d1e40c80fcda2c424cd837379ac2ce93023de6c22ba3e2d94679671">sample</a>.</p>
<table>
<thead>
<tr>
<th>
            Configuration element</th>
<th>
            Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>
            %InstallationDirectory%
            </td>
<td>
            38
            </td>
</tr>
<tr>
<td>
            %InstallationFolder%
            </td>
<td>
            WindowsPowerShell
            </td>
</tr>
<tr>
<td>
            %InstallationFileName%
            </td>
<td>
            PowerShellInfo.exe
            </td>
</tr>
</tbody>
</table>
<p><em>Table 4. Installation configuration elements with example values.</em></p>
<p>The integer value assigned to the %InstallationDirectory% configuration element represents a <a href="https://docs.microsoft.com/en-us/windows/win32/shell/csidl">CSIDL</a> value associated with a special folder on the system. In Table 4, the value 38 corresponds to the Windows <a href="https://www.magnumdb.com/search?q=CSIDL_PROGRAM_FILES">Program Files</a> directory. Based on this configuration, the full install path and filename for this DarkTortilla sample is &#8220;C:Program FilesWindowsPowerShellPowerShellInfo.exe&#8221;.</p>
<p>To install, the core processor terminates the currently running DarkTortilla executable. It copies the executable to the configured installation path and filename, and then executes the installed executable via <a href="https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.start?view=net-6.0">Process.Start()</a>.</p>
<h3>Persistence</h3>
<p>Persistence is controlled by the %Installation% configuration element in combination with the %Hidden% and %StartupFolder% configuration elements. DarkTortilla uses the logic in Table 5 to determine the persistence type.</p>
<table>
<thead>
<tr>
<th>
            %Hidden%</th>
<th>
            %StartupFolder%</th>
<th>
            Persistence type</th>
</tr>
</thead>
<tbody readability="2">
<tr readability="2">
<td>
            False
            </td>
<td>
            False
            </td>
<td>
            Use registry HKCU Run key
            </td>
</tr>
<tr>
<td>
            True
            </td>
<td>
            True
            </td>
<td>
            Windows startup folder
            </td>
</tr>
<tr>
<td>
            False
            </td>
<td>
            True
            </td>
<td>
            Windows startup folder
            </td>
</tr>
<tr readability="2">
<td>
            True
            </td>
<td>
            False
            </td>
<td>
            Use registry HKCU Winlogon key
            </td>
</tr>
</tbody>
</table>
<p><em>Table 5. Configuration elements determining the persistence type.</em></p>
<p>A bug in the code causes the %StartupFolder% logic to override the %Hidden% logic if both configuration elements are set to true. The malware author erroneously used an &#8220;if&#8221; statement instead of &#8220;else if&#8221; in the logic setting the persistence type (see Figure 15).</p>
<p><img loading="lazy" decoding="async" alt="" height="248" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure15.ashx?la=en&amp;modified=20220815211838&amp;hash=D04856A236CDF59A1683A0E87C7B9659"><br /><em>Figure 15. Error in persistence code. (Source: Secureworks)</em></p>
<p>For Windows startup folder persistence, the core processor uses the <a href="https://docs.microsoft.com/en-us/troubleshoot/windows-client/admin-development/create-desktop-shortcut-with-wsh">WshShortcut</a> COM object to create a .lnk shortcut file in the Windows startup folder. This file points to the configured installation path and filename of DarkTortilla&#8217;s initial loader executable (see Figure 16).</p>
<p><img loading="lazy" decoding="async" alt="" height="163" width="570" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure16.ashx?la=en&amp;modified=20220815211839&amp;hash=4FBBCE6C8E25DA7558F9CFAF2BFEA7C0"><br /><em>Figure 16. COM object that drops shortcut file in Windows startup folder for persistence. (Source: Secureworks)</em></p>
<p>DarkTortilla features standard and hidden techniques for implementing persistence via the Windows registry. Both options implement persistence in the HKEY_CURRENT_USER (HKCU) hive as a hard-coded value in the core processor code. This persistence results in the installed DarkTortilla initial loader executable being run every time the user logs in.</p>
<h3>RunPE process injection</h3>
<p>DarkTortilla can execute its payloads using process injection. With this method, the payload resides only in memory and never accesses the filesystem. The %HostIndex% configuration element defines which legitimate process to target for process injection (see Table 6).</p>
<table>
<thead>
<tr>
<th>
            %HostIndex% value</th>
<th>
            Corresponding target process</th>
<th>
            Source directory</th>
</tr>
</thead>
<tbody readability="7">
<tr readability="4">
<td>
            0 <em>(or any numeric value that is not 1-6)</em>
            </td>
<td>
            Initial loader executable&#8217;s name
            </td>
<td>
            &#xA0;
            </td>
</tr>
<tr readability="2">
<td>
            1
            </td>
<td>
            AppLaunch.exe
            </td>
<td>
            Microsoft.NET Framework folder
            </td>
</tr>
<tr>
<td>
            2
            </td>
<td>
            svchost.exe
            </td>
<td>
            System32 folder
            </td>
</tr>
<tr readability="2">
<td>
            3
            </td>
<td>
            RegAsm.exe
            </td>
<td>
            Microsoft.NET Framework folder
            </td>
</tr>
<tr readability="2">
<td>
            4
            </td>
<td>
            InstallUtil.exe
            </td>
<td>
            Microsoft.NET Framework folder
            </td>
</tr>
<tr readability="2">
<td>
            5
            </td>
<td>
            mscorsvw.exe
            </td>
<td>
            Microsoft.NET Framework folder
            </td>
</tr>
<tr readability="2">
<td>
            6
            </td>
<td>
            AddInProcess32.exe
            </td>
<td>
            Microsoft.NET Framework folder
            </td>
</tr>
</tbody>
</table>
<p><em>Table 6. %HostIndex% values and corresponding target processes used for payload injection.</em></p>
<p>Prior to setting the target process name, the core processor checks for active processes named &#8220;avp&#8221;. The avp.exe process is part of the Kaspersky Anti-Virus suite. If the core processor detects this process, it overrides the %HostIndex% value and sets the target process name to the name of the initial loader executable. When the %HostIndex% value is 1-6, the core processor attempts to copy the legitimate target executable file to the Windows %TEMP% directory.</p>
<p>DarkTortilla uses a .NET-based DLL named &#8220;RunPe6&#8221; for process injection. This DLL is embedded within the core processor as an encoded byte array (see Figure 17).</p>
<p><img loading="lazy" decoding="async" alt="" height="359" width="462" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure17.ashx?la=en&amp;modified=20220815211839&amp;hash=733A929A39F4EF77B93449F4B64C6A01"><br /><em>Figure 17. Encoded RunPe6 DLL stored as byte array within DarkTortilla core processor. (Source: Secureworks)</em></p>
<p>To decode each byte, the core processor uses the following equation with <em>&lt;xor_key&gt;</em> as the hard-coded integer array [45, 89, 125, 69, 250, 222, 111] and <em>&lt;seed&gt;</em> as the hard-coded integer 99:</p>
<pre>decoded_byte = encoded_byte ^ (<em>&lt;xor_key&gt;</em>[(idx * <em>&lt;seed&gt;)</em> % xor_key.Length])</pre>
<p>The core processor loads RunPe6 and calls its &#x2018;Runn&#8217; function to execute the malicious payload within the context of the configured target subprocess. The core processor does not directly reference this function. Rather, it references the index values for the target class (18) and function (0). Figure 18 displays PowerShell code developed by CTU researchers to replicate the core processor&#8217;s target function identification logic.</p>
<p><img loading="lazy" decoding="async" alt="" height="137" width="460" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure18.ashx?la=en&amp;modified=20220815211839&amp;hash=DECFA770D18401A6F2C914160ACF40F8"><br /><em>Figure 18. Custom PowerShell script to identify RunPe6 function used for payload process injection. (Source: Secureworks)</em></p>
<h3>Addon package processing</h3>
<p>DarkTortilla can be configured with zero or more payloads known as addon packages. These addons are in addition to the main payload that DarkTortilla is tasked with delivering. Observed addons include benign decoy documents, legitimate executables, keyloggers, clipboard stealers, cryptocurrency miners, and additional DarkTortilla payloads. Each addon package possesses a set of configuration elements composed of a static &#8220;F&#8221; character, an integer &#8220;{0}&#8221; that represents the index value indicating the position of the addon in the package array, and a character representing a particular property associated with the package.</p>
<p>The %FilesNum% configuration element defines the number of addon packages to process. For example, if the %FilesNum% value is 3, the configuration elements are F.0.<em>&lt;addon property&gt;</em>, F.1.<em>&lt;addon property&gt;</em>, and F.2.<em>&lt;addon property&gt;</em>.</p>
<p>The F.{0}.D (data) configuration element contains the addon package payload binary data. The core processor checks the %Compress% configuration element to determine if the stored data is compressed. If the element is set to true, the core processor decompresses the data before processing it.</p>
<p>The core processor next determines if it should process the addon package by inspecting the initial loader&#8217;s installation state and the addon package&#8217;s F.{0}.R (run) value. Table 7 lists the criteria and their result.</p>
<table>
<thead>
<tr>
<th>
            Initial loader running from install directory</th>
<th>
            F.{0}.R (run) value</th>
<th>
            Process addon package?</th>
</tr>
</thead>
<tbody>
<tr>
<td>
            True
            </td>
<td>
            True
            </td>
<td>
            Yes
            </td>
</tr>
<tr>
<td>
            True
            </td>
<td>
            False
            </td>
<td>
            No
            </td>
</tr>
<tr>
<td>
            False
            </td>
<td>
            True
            </td>
<td>
            No
            </td>
</tr>
<tr>
<td>
            False
            </td>
<td>
            False
            </td>
<td>
            Yes
            </td>
</tr>
</tbody>
</table>
<p><em>Table 7. Criteria for processing addon package.</em></p>
<p>If configured to process the addon package, the core processor inspects the F.{0}.O (operation) configuration element value to determine how to execute its payload. This value can be any integer but is typically 0, 1, or 2. If the value is set to 0 or any value other than 1 or 2, the core processor saves the payload to disk but does not execute it. If the value is 1, the core processor saves the payload to disk and executes it. If the value is 2, the core processor executes the payload in memory via the same RunPE process injection technique and target process it uses for the main payload.</p>
<p>If the payload is saved to disk, the location is specified by the addon path (F.{0}.P), subfolder (F.{0}.F), and filename (F.{0}.N) configuration elements. The F.{0}.P integer value represents a CSIDL value associated with a special folder on the system. For example, the value 2 corresponds to the Windows Start Menu/Programs folder. The full path of an analyzed <a href="https://www.virustotal.com/gui/file/5be86cfca25e295f88b5aab42a6f604d2f1bb97f3c73b01df664c137908e2ec4">sample</a> containing a F.{0}.P value of 2, an empty string for F.{0}.F, and a value of sertif.exe for F.{0}.N is &#8220;C:Users<em>&lt;username&gt;</em>AppDataRoamingMicrosoftWindowsStart MenuProgramssertif.exe&#8221;.</p>
<h3>Main payload processing</h3>
<p>After processing addon packages and installing the initial loader executable if appropriate, DarkTortilla processes its main payload. This main payload is typically a commodity information stealer or remote access trojan (RAT). DarkTortilla stores the binary data for the main payload in the %MainFile% configuration element. Processing this payload consists of two steps:</p>
<ol>
<li>The core processor queries the %Compress% configuration element to determine if the binary data in the %MainFile% configuration element is compressed. If set to true, the core processor decompresses the data.</li>
<p></p>
<li>The core processor executes the main payload via RunPE process injection. Unlike the addon payloads, there is no option to save the main payload to the filesystem. Therefore, the main payload resides only in memory. The target process used for injection is the same as the addon packages and is defined by the %HostIndex% configuration element.</li>
</ol>
<p></p>
<h3>Anti-analysis controls</h3>
<p>DarkTortilla core processor samples analyzed by CTU researchers were obfuscated using the <a href="https://yck1509.github.io/ConfuserEx/">ConfuserEx</a> code obfuscator. In addition to the obfuscator altering namespace, class, function, and property names, CTU researchers identified multiple samples where it injected specially crafted code that did not affect execution but inhibited decompilation by tools such as dnSpy (see Figure 19). Bypassing this anti-analysis control requires removing the code that caused the decompiler to break, identifying another sample that does not implement this control, or piecing together analysis from multiple samples to understand the code.</p>
<p><img loading="lazy" decoding="async" alt="" height="394" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure19.ashx?la=en&amp;modified=20220815211839&amp;hash=03E5876703B040A9A189CE47C43052E9"><br /><em>Figure 19. Broken dnSpy decompilation of DarkTortilla core processor. (Source: Secureworks)</em></p>
<p>The core processor includes code that that detects profilers and debuggers, but these anti-analysis controls are not called. To detect profiling, the code verifies if the <a href="https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/ee471451(v=vs.100)?redirectedfrom=MSDN">COR_ENABLE_PROFILING</a> environment variable is present and sets to the value of 1. To detect debuggers, the code spawns a thread (see Figure 20) that continuously checks the <a href="https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debugger.isattached?view=net-6.0">Debugger.IsAttached</a> property and the <a href="https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debugger.islogging?view=net-6.0">Debugger.IsLogging</a> method. If the core processor identifies a debugger or if the thread performing the checks is terminated, the code terminates the initial loader process. It is unclear if this code was added by ConfuserEx or the malware author.</p>
<p><img loading="lazy" decoding="async" alt="" height="363" width="469" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure20.ashx?la=en&amp;modified=20220815211840&amp;hash=88FFAE51CEECA3D28AFBF69B20A5D49A"><br /><em>Figure 20. Debugger detection performed by DarkTortilla core processor. (Source: Secureworks)</em></p>
<p>The core processor implements string encoding to obscure important strings such as the configuration keys. Figure 21 shows a code excerpt that passes the string length (17), character index array ([26,8,13,18,19,0,11,11,0,19,8,14,13,17,4,6,26]), and capital letter index array ([8,17]) to the decode function.</p>
<p><img loading="lazy" decoding="async" alt="" height="68" width="451" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure21.ashx?la=en&amp;modified=20220815211840&amp;hash=2DDB142FF4DF2AEE92E06288522A3507"><br /><em>Figure 21. DarkTortilla core processor string obfuscation example. (Source: Secureworks)</em></p>
<p>This function decodes the string by iterating through each value in the character index array and retrieving the corresponding character at the specified index in a hard-coded character array (see Figure 22).</p>
<p><img loading="lazy" decoding="async" alt="" height="90" width="332" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/100%20darktortilla/figure22.ashx?la=en&amp;modified=20220815211840&amp;hash=91F76F2A1CB4C2D8DABA5F0538D1DF7E"><br /><em>Figure 22. Character array used by string decoding logic. (Source: Secureworks)</em></p>
<p>Figure 21 shows that the example&#8217;s first three values of the character index array passed to the decode function are 26, 8, and 13. These values correspond to the characters &#8220;%&#8221;, &#8220;i&#8221;, and &#8220;n&#8221; in the hard-coded character array shown in Figure 22. The values passed in the capital letter index array (8, 17) indicate which characters should be capitalized (&#8220;I&#8221; and &#8220;R&#8221; in this example). Processing the character index array results in the decoded string &#8220;%InstallationReg%&#8221;.</p>
<p>The %VM% configuration element enables DarkTortilla&#8217;s anti-virtual machine (anti-VM) controls. If set to true, the core processor obtains information about the system by querying the following Windows Management Instrumentation (WMI) objects:</p>
<p>The core processor also retrieves information about the system&#8217;s running processes and services. It then inspects this data for strings associated with Hyper-V, QEMU, Virtual PC, VirtualBox, and VMware. If any of the case-insensitive data matches the criteria in Table 8, the core processor terminates the initial loader process.</p>
<table>
<thead>
<tr>
<th>
            Targeted technology
            </th>
<th>
            Inspected entity
            </th>
<th>
            Inspection logic
            </th>
</tr>
</thead>
<tbody readability="15">
<tr readability="2">
<td>
            Hyper-V
            </td>
<td>
            Win32_DiskDrive
            </td>
<td>
            Caption contains &#8220;virtual&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            Hyper-V
            </td>
<td>
            Win32_ComputerSystem
            </td>
<td>
            Manufacturer contains &#8220;microsoft&#8221; and Model contains &#8220;virtual&#8221;
            </td>
</tr>
<tr>
<td>
            QEMU
            </td>
<td>
            Win32_DiskDrive
            </td>
<td>
            Name contains &#8220;qemu&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            Virtual PC
            </td>
<td>
            Process
            </td>
<td>
            Process list contains &#8220;vmusrvc&#8221; or both &#8220;vpcmap&#8221; and &#8220;vmsrvc&#8221;
            </td>
</tr>
<tr>
<td>
            VirtualBox
            </td>
<td>
            Win32_DiskDrive
            </td>
<td>
            Model contains &#8220;vbox&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VirtualBox
            </td>
<td>
            Process
            </td>
<td>
            ProcessName contains &#8220;vboxservice&#8221;
            </td>
</tr>
<tr>
<td>
            VMware
            </td>
<td>
            Win32_DiskDrive
            </td>
<td>
            Name contains &#8220;vmware&#8221;
            </td>
</tr>
<tr>
<td>
            VMware
            </td>
<td>
            Win32_DiskDrive
            </td>
<td>
            Model contains &#8220;vmware&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_ComputerSystem
            </td>
<td>
            Manufacturer contains &#8220;vmware&#8221; and Model contains &#8220;virtual&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_BIOS
            </td>
<td>
            Serial number contains &#8220;vmware&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_PnPEntity
            </td>
<td>
            Name equals &#8220;vmware pointing device&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_PnPEntity
            </td>
<td>
            Name contains &#8220;vmware sata&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_PnPEntity
            </td>
<td>
            Name equals &#8220;vmware usb pointing device&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_PnPEntity
            </td>
<td>
            Name equals &#8220;vmware vmci bus device&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_PnPEntity
            </td>
<td>
            Name equals &#8220;vmware virtual s scsi disk device&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Win32_PnPEntity
            </td>
<td>
            Name starts with &#8220;vmware svga&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Service
            </td>
<td>
            ServiceImagePath contains &#8220;vmware&#8221; and ServiceName equals &#8220;vmtools&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Service
            </td>
<td>
            ServiceImagePath contains &#8220;vmware&#8221; and ServiceName equals &#8220;tpvcgateway&#8221;
            </td>
</tr>
<tr readability="2">
<td>
            VMware
            </td>
<td>
            Service
            </td>
<td>
            ServiceImagePath contains &#8220;vmware&#8221; and ServiceName equals &#8220;tpautoconnsvc&#8221;
            </td>
</tr>
</tbody>
</table>
<p><em>Table 8. DarkTortilla core processor anti-VM detections.</em></p>
<p>The %SB% configuration element enables DarkTortilla&#8217;s anti-sandbox control. This control only detects the <a href="https://sandboxie-plus.com/Sandboxie/">Sandboxie</a> sandbox. The core processor terminates the initial loader process if it detects a running process named &#8220;sandboxierpcss&#8221; in the current session.</p>
<h3>Anti-tamper controls</h3>
<p>DarkTortilla&#8217;s anti-tamper controls are the last step in its execution chain and occur after the main payload is executed. The four controls ensure that nothing interferes with DarkTortilla&#8217;s execution of its critical components.</p>
<ol readability="23.637103809247">
<li readability="6">
<p>The first anti-tamper control is employed by the core processor and ensures that the injected subprocess running the main payload is immediately rerun if terminated. The %InjectionPersist% configuration element regulates this control. If set to true, the core processor starts a thread that monitors the state of the injected subprocess. If the subprocess is terminated, this anti-tamper control automatically respawns the configured target subprocess, re-injects the main payload, and executes it within the context of the subprocess.</p>
</li>
<li readability="26.292695214106">
<p>The second anti-tamper control ensures that the initial loader executable is immediately rerun if terminated. DarkTortilla implements this functionality with a secondary .NET-based executable that it refers to as &#8220;WatchDog&#8221;. The %InjectionPersist% configuration element regulates this control. If set to true, the core processor drops the WatchDog executable and its configuration file to the Windows %TEMP% directory. It then executes the WatchDog executable, which monitors the initial loader process.</p>
<p>The WatchDog executable bytes are stored in the DarkTortilla %WatchDogBytes% configuration element, and the filename is stored in %WatchDogName%. Prior to processing, the core processor decompresses the WatchDog executable&#8217;s bytes if the %Compress% configuration element is set to true. Every <a href="https://www.virustotal.com/gui/file/2d0dc6216f613ac7551a7e70a798c22aee8eb9819428b1357e2b8c73bef905ad">WatchDog executable</a> dropped by DarkTortilla was identical:</p>
<ul>
<li>MD5 hash: 0e362e7005823d0bec3719b902ed6d62</li>
<li>SHA1 hash: 590d860b909804349e0cdc2f1662b37bd62f7463</li>
<li>SHA256 hash: 2d0dc6216f613ac7551a7e70a798c22aee8eb9819428b1357e2b8c73bef905ad</li>
</ul>
<p>If an executable with the configured WatchDog name already exists in the Windows %TEMP% directory, the core processor removes the existing executable&#8217;s <a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/6e3f7352-d11c-4d76-8c39-2516a9df36e8">Zone.Identifier</a> Alternate Data Stream (ADS), which strips the executable of any existing <a href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms537183(v=vs.85)?redirectedfrom=MSDN">URL security zones</a>. It then overwrites the existing executable with the new WatchDog executable.</p>
<p>The WatchDog configuration file dropped to the filesystem shares the same name as the WatchDog executable but uses a .txt file extension. For example, the configuration filename for &#8220;WatchDog.exe&#8221; is &#8220;WatchDog.txt&#8221;. This configuration file contains three lines representing the following values:</p>
<ul>
<li>The process ID of the initial loader executable</li>
<li>The path and filename of the initial loader executable</li>
<li>The process ID for the WatchDog executable</li>
</ul>
<p>If the initial loader process terminates, the WatchDog process reruns it and refreshes the contents of the WatchDog configuration text file with the new process ID information.</p>
</li>
<li readability="5">
<p>The third anti-tamper control is employed by the core processor and ensures that the dropped WatchDog executable continues to execute. The core processor retrieves the WatchDog executable process ID from the WatchDog configuration file once per second and verifies that the corresponding process is running. If the WatchDog process terminates, the core processor breaks the loop, drops a new WatchDog configuration file, and reruns the WatchDog executable.</p>
</li>
<li readability="4">
<p>The fourth anti-tamper control is employed by the core processor and maintains persistence for the initial loader. The %StartupPersist% configuration element regulates this control. If set to true, the core processor starts a thread that sets persistence every 30 seconds using the persistence type defined in the DarkTortilla configuration. The control does not contain validation logic to check the persistence status, so it repeats the process indefinitely.</p>
</li>
</ol>
<h3>Delayed execution</h3>
<p>The core processor implements the kernel32.dll Sleep function to delay execution at the following stages of the process. The length of delay is typically controlled by the value in the %Delay% configuration element. CTU researchers observed values ranging from 0 seconds to 300 seconds.</p>
<ul>
<li>Prior to implementing persistence, the core processor sleeps for the number of seconds specified by the %Delay% configuration element.</li>
<li>Prior to processing addon packages, the core processor sleeps for the number of seconds specified by the %Delay% configuration element.</li>
<li>The core processor sleeps for a hard-coded 5 seconds after copying the source executable to the install directory but before running the executable.</li>
</ul>
<p>The number of delays increases if the %Melt% and %Installation% configuration elements are set to true, as the delays are processed each time the executable migrates. These delays can impede detection in sandbox environments if they exceed the maximum wait time.</p>
<h2>Possible malware connections</h2>
<p>DarkTortilla code shares similarities to other malware. For example, payload compression, junk code inclusion, and payload execution via <a href="https://github.com/malwares/Crypter/blob/master/%5BC%23%5D%20The%20RATs%20Crew%20Crypter/Form1.cs#L161-L163">RunPe6</a> are also features of a RATs Crew crypter last updated in 2016. DarkTortilla could represent an evolution of that crypter. Additionally, the Gameloader malware uses similar malspam lures and archive files as DarkTortilla. It also leverages .NET resources to store encoded DLLs and encrypted bitmap images and delivers similar commodity malware payloads. However, there is insufficient evidence as of this publication to definitively link these malware families or threat actors to DarkTortilla.</p>
<h2>Conclusion</h2>
<p>Researchers often overlook DarkTortilla and focus on its main payload. However, DarkTortilla is capable of evading detection, is highly configurable, and delivers a wide range of popular and effective malware. Its capabilities and prevalence make it a formidable threat.</p>
<h2>Threat indicators</h2>
<p>The threat indicators in Table 9 can be used to detect activity related to DarkTortilla. The URL may contain malicious content, so consider the risks before opening it in a browser.</p>
<table>
<thead>
<tr>
<th>
            Indicator
            </th>
<th>
            Type
            </th>
<th>
            Context
            </th>
</tr>
</thead>
<tbody readability="80">
<tr readability="4">
<td>
            59295e810bbdbfd64b8c41316ea13cae
            </td>
<td>
            MD5 hash
            </td>
<td>
            Malicious spam delivering DarkTortilla
            </td>
</tr>
<tr readability="4">
<td>
            18391a58ee25a5cb8dfbf4d48517b5b0<br />c66c5ae6
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Malicious spam delivering DarkTortilla
            </td>
</tr>
<tr readability="4">
<td>
            981aa83b2d33cca994021197237ac5ee<br />3ad3402f7d25f04f4e76985f4ec8744c
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Malicious spam delivering DarkTortilla
            </td>
</tr>
<tr readability="4">
<td>
            84872b60072011eab8940f3b49bdb582
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            3da0f44d45a1d6676d52ce691d2f6d75<br />4eb3097e
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            5e03556be992d23088a3c49d24c45b1c<br />21cd275bffb4e536348e8128d50374b6
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            2d74df3ce221f6ff48d20bac158a3e78
            </td>
<td>
            MD5 hash
            </td>
<td>
            Malicious document delivering DarkTortilla
            </td>
</tr>
<tr readability="4">
<td>
            0563e691801251cdfd363eee31858ead<br />5ee3928b
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Malicious document delivering DarkTortilla
            </td>
</tr>
<tr readability="4">
<td>
            4f15b28c91fa0e8d0dd9e86481bad04f<br />a34fcaf564d08de7c4c0c513fc6e122d
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Malicious document delivering DarkTortilla
            </td>
</tr>
<tr readability="4">
<td>
            827258f907c5087f498c413d28e2203e
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            5e0cb6076002b11a39636e07a217b493<br />835e5bce
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            55d7d9bd9d4a511417033b6c14ce93f9<br />62d6a6e6c6414f0cb7e455baee1d3ab7
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            c37aae0ff565a2e44f144f837b750279
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            dde386911b091e894746b0f12d88a1fd<br />18761fb9
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            a0b96236bfd79d2ebeadb8e3deb9448a<br />f3ec8edd1ea9672b7ad4793934bb4c47
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            93fe6600c51014d7d6c2afedf8398f92
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            8f7340704745f3d53b284c101e93c42f<br />8d4c2adc
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            45ef054bca2ae4d67e6623bf28ff75e5<br />d178924602674c654e1b569aa74601cd
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            6e91ad0972e104a277505104abe39d1e
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            261d699c3bb1a0042b88a45ed340f2d8<br />6149464f
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            b3754c6ecc445e9a3b37c5ebe68adb96<br />30ca4aa89a8e8515468f39ae8131f141
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            cd49f7c3c4e82dee128eedea9879bc33
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            619bf90a8ea219e34bf57dda1a322914<br />b9fa1c81
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            0a5dc3b6669cf31e8536c59fe1315918<br />eb4ecfd87998445e2eeb8fed64bd2f2c
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            851816aa8cf45ba769f0d9420acfb3e5
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            4178d5efa388caf2d0ffd4539cf285b1<br />de5ffab6
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            083acce46cb8cf35e37c778d1f4aee68<br />14bca72d2874b793a47f9823f51df0fe
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            f44695a8febb2a35576a59fa984629d2
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            37ec57e5da46dc1990941a1bb3ffab9e<br />74db346a
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            53b3b37b7d1e40c80fcda2c424cd8373<br />79ac2ce93023de6c22ba3e2d94679671
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            8d8c551dd572a1dc158de239b37eaa9a
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            6d4b4bcd107b09af37996c73a6448379<br />a31aaac4
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            5be86cfca25e295f88b5aab42a6f604d<br />2f1bb97f3c73b01df664c137908e2ec4
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla initial loader
            </td>
</tr>
<tr readability="4">
<td>
            0f89a2015ed9c1be5522e27c00276e52
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla core processor (PVCore1)
            </td>
</tr>
<tr readability="4">
<td>
            5ad5b35f6cc093067c6f219f2d2107f4<br />4248c5bb
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla core processor (PVCore1)
            </td>
</tr>
<tr readability="4">
<td>
            93dd1202697dbaed9ef4f4707f262821<br />2bf13aad096de29c14924b1dae1d6d5b
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla core processor (PVCore1)
            </td>
</tr>
<tr readability="4">
<td>
            0e362e7005823d0bec3719b902ed6d62
            </td>
<td>
            MD5 hash
            </td>
<td>
            DarkTortilla watchdog executable
            </td>
</tr>
<tr readability="4">
<td>
            590d860b909804349e0cdc2f1662b37b<br />d62f7463
            </td>
<td>
            SHA1 hash
            </td>
<td>
            DarkTortilla watchdog executable
            </td>
</tr>
<tr readability="4">
<td>
            2d0dc6216f613ac7551a7e70a798c22a<br />ee8eb9819428b1357e2b8c73bef905ad
            </td>
<td>
            SHA256 hash
            </td>
<td>
            DarkTortilla watchdog executable
            </td>
</tr>
<tr readability="4">
<td>
            https://pastebin.pl/view/raw/60b6b03b
            </td>
<td>
            URL
            </td>
<td>
            DarkTortilla encoded core processor download
            </td>
</tr>
</tbody>
</table>
<p><em>Table 9. Indicators for this threat.</em></p>
<h2>References</h2>
<p>Arntz, Pieter. &#8220;Explained: Packer, Crypter, and Protector.&#8221; Malwarebytes Labs. March 27, 2017. <a href="https://blog.malwarebytes.com/cybercrime/malware/2017/03/explained-packer-crypter-and-protector/">https://blog.malwarebytes.com/cybercrime/malware/2017/03/explained-packer-crypter-and-protector/</a></p>
<p>Hasherezade. &#8220;Rainbows, Steganography and Malware in a new .NET cryptor.&#8221; Malwarebytes Labs. March 30, 2016. <a href="https://blog.malwarebytes.com/threat-analysis/2015/08/rainbows-steganography-and-malware-in-a-new-net-cryptor/">https://blog.malwarebytes.com/threat-analysis/2015/08/rainbows-steganography-and-malware-in-a-new-net-cryptor/</a> </p>
<p>&#8220;RATs Crew.&#8221; Hack Forums. June 21, 2021. <a href="https://wiki.hackforums.net/RATs_Crew">https://wiki.hackforums.net/RATs_Crew</a></p>
<p>GoSecure Titan Labs. &#8220;New Malware &#x2018;Gameloader&#8217; in Discord Malspam Campaign.&#8221; GoSecure. November 2, 2021. <a href="https://www.gosecure.net/blog/2021/11/02/new-malware-gameloader-in-discord-malspam-campaign-identified-by-gosecure-titan-labs/">https://www.gosecure.net/blog/2021/11/02/new-malware-gameloader-in-discord-malspam-campaign-identified-by-gosecure-titan-labs/</a></p>
<p>The post <a href="https://onlinepitstop.com/2022/08/18/darktortilla-malware-analysis/">DarkTortilla Malware Analysis</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2022/08/18/darktortilla-malware-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>BRONZE STARLIGHT Ransomware Operations Use HUI Loader</title>
		<link>https://onlinepitstop.com/2022/06/24/bronze-starlight-ransomware-operations-use-hui-loader/</link>
					<comments>https://onlinepitstop.com/2022/06/24/bronze-starlight-ransomware-operations-use-hui-loader/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 24 Jun 2022 02:53:56 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2022/06/24/bronze-starlight-ransomware-operations-use-hui-loader/</guid>

					<description><![CDATA[<p>Summary Since at least 2015, threat actors have used HUI Loader to load remote access trojans (RATs) on compromised hosts. Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers link two HUI Loader activity clusters exclusively to China-based threat groups. The BRONZE RIVERSIDE threat group is likely responsible for one cluster, which focuses on stealing intellectual property from</p>
<p>The post <a href="https://onlinepitstop.com/2022/06/24/bronze-starlight-ransomware-operations-use-hui-loader/">BRONZE STARLIGHT Ransomware Operations Use HUI Loader</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>Since at least 2015, threat actors have used HUI Loader to load remote access trojans (RATs) on compromised hosts. Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers link two HUI Loader activity clusters exclusively to China-based threat groups. The <a href="https://www.secureworks.com/research/threat-profiles/bronze-riverside">BRONZE RIVERSIDE</a> threat group is likely responsible for one cluster, which focuses on stealing intellectual property from Japanese organizations. The other cluster involves deployment of LockFile, AtomSilo, Rook, Night Sky, and Pandora post-intrusion ransomware. CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers attribute this activity to the Chinese <a href="https://www.secureworks.com/research/threat-profiles/bronze-starlight">BRONZE STARLIGHT</a> threat group.</p>
<p>The victimology, short lifespan of each ransomware family, and access to malware used by government-sponsored threat groups suggest that BRONZE STARLIGHT&#x2019;s main motivation may be intellectual property theft or cyberespionage rather than financial gain. The ransomware could distract incident responders from identifying the threat actors&#x2019; true intent and reduce the likelihood of attributing the malicious activity to a government-sponsored Chinese threat group.</p>
<h2>HUI Loader overview</h2>
<p>HUI Loader is a custom DLL loader whose name is derived from a string in the loader (see Figure 1). The malware is loaded by legitimate programs that are vulnerable to <a href="https://attack.mitre.org/techniques/T1574/001/">DLL search order hijacking</a>. HUI Loader decrypts and loads a third file containing an encrypted payload that is also deployed to the compromised host. CTU researchers have observed HUI Loader loading RATs such as SodaMaster, PlugX, Cobalt Strike, and QuasarRAT.</p>
<p><img loading="lazy" decoding="async" alt="" height="52" width="509" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-01.ashx?la=en&amp;modified=20220621224611&amp;hash=7A76C5D8A9052F336F232FB60AF80534"><br /><em>Figure 1. String that starts with &#x2018;HUI&#x2019; in HUI Loader samples. (Source: Secureworks)</em></p>
<p>Since early 2021, CTU researchers observed threat actors deploying HUI Loader in a cluster of activity associated with intellectual property theft. This <a href="http://jsac.jpcert.or.jp/archive/2022/pdf/JSAC2022_9_yanagishita-tamada-nakatsuru-ishimaru_en.pdf">A41APT campaign</a> primarily targets Japanese organizations and uses HUI Loader to load the SodaMaster RAT. The victimology and tactics, techniques, and procedures (TTPs) in this campaign align with BRONZE RIVERSIDE activity. In mid-2021, CTU researchers began tracking a second cluster of activity that uses HUI Loader to load Cobalt Strike Beacon and deploy ransomware. CTU researchers attribute this second cluster of activity to the BRONZE STARLIGHT threat group. Figure 2 compares the clusters linked to HUI Loader.</p>
<p><img loading="lazy" decoding="async" alt="" height="480" width="860" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-02.ashx?la=en&amp;modified=20220621224612&amp;hash=AD0C25A7F3B9C3C09FD15AA449DC5CFE"><br /><em>Figure 2. Diamond model comparing HUI Loader clusters. (Source: Secureworks)</em></p>
<h2>HUI Loader-linked ransomware activity</h2>
<p>HUI Loader samples that load Cobalt Strike Beacon have been linked to <a href="https://nsfocusglobal.com/insights-into-ransomware-spread-using-exchange-1-day-vulnerabilities-1-2/">LockFile</a>, <a href="https://news.sophos.com/en-us/2021/10/04/atom-silo-ransomware-actors-use-confluence-exploit-dll-side-load-for-stealthy-attack/">AtomSilo</a>, Rook, <a href="https://www.microsoft.com/security/blog/2021/12/11/guidance-for-preventing-detecting-and-hunting-for-cve-2021-44228-log4j-2-exploitation/">Night Sky</a>, and Pandora ransomware activity (see Table 1).</p>
<table>
<thead>
<tr>
<td>
            HUI Loader filename
            </td>
<td>
            Payload filename
            </td>
<td>
            Cobalt Strike C2 domain
            </td>
<td>
            Ransomware
            </td>
</tr>
</thead>
<tbody readability="5">
<tr readability="2">
<td>
            active_desktop_render.dll
            </td>
<td>
            desktop.ini
            </td>
<td>
            sc . microsofts . net
            </td>
<td>
            LockFile
            </td>
</tr>
<tr>
<td>
            Lockdown.dll
            </td>
<td>
            mfc.ini
            </td>
<td>
            update . ajaxrenew . com
            </td>
<td>
            AtomSilo
            </td>
</tr>
<tr readability="2">
<td>
            Lockdown.dll
            </td>
<td>
            sets5s.ini
            </td>
<td>
            Unknown (payload file unavailable for analysis)
            </td>
<td>
            Rook
            </td>
</tr>
<tr readability="2">
<td>
            Lockdown.dll
            </td>
<td>
            Lockdown.conf
            </td>
<td>
            api . sophosantivirus . ga<br />sub . sophosantivirus . ga
            </td>
<td>
            Night Sky
            </td>
</tr>
<tr readability="2">
<td>
            libcef.dll
            </td>
<td>
            utils.dll
            </td>
<td>
            api . sophosantivirus . ga
            </td>
<td>
            Night Sky
            </td>
</tr>
<tr readability="2">
<td>
            LockDown.dll
            </td>
<td>
            vm.cfg
            </td>
<td>
            peek . openssl-digicert . xyz
            </td>
<td>
            Pandora
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. HUI Loader and Cobalt Strike Beacon samples linked to ransomware activity.</em></p>
<p>In March 2022, CTU researchers analyzed an updated version of HUI Loader that uses the RC4 cipher to decrypt the payload. The malware sample also attempts to circumvent host-based detection and protection measures by disabling Windows Event Tracing for Windows (<a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/event-tracing-for-windows--etw-">ETW</a>), disabling Antimalware Scan Interface (<a href="https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal">AMSI</a>) functions, and hooking Windows API calls (see Figure 3). CTU researchers identified code overlap between the updated HUI Loader samples and the Pandora ransomware. </p>
<p><img loading="lazy" decoding="async" alt="" height="253" width="511" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-03.ashx?la=en&amp;modified=20220621224612&amp;hash=6730C07C2DD945A1B6E5832E46424E1F"><br /><em>Figure 3. Updated HUI Loader code that disables ETW. (Source: Secureworks)</em></p>
<h3>Ransomware C2 infrastructure</h3>
<p>Analysis of the Cobalt Strike Beacon samples loaded by HUI Loader revealed a link between AtomSilo, Night Sky, and Pandora ransomware. The Cobalt Strike Beacons were configured with an uncommon HTTP POST URI beginning with /rest/2/meetings and a watermark value of 0 (see Figure 4). As of this publication, CTU researchers have only observed this configuration in Cobalt Strike Beacons associated with these ransomware families.</p>
<p><img loading="lazy" decoding="async" alt="" height="364" width="419" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-04.ashx?la=en&amp;modified=20220621224612&amp;hash=7B1535E61CC5604757EE516D26C422F2"><br /><em>Figure 4. Cobalt Strike payload configuration information. (Source: Secureworks)</em></p>
<p>The configuration of these Cobalt Strike payloads is likely based on a modified version of a public <a href="https://github.com/xx0hcd/Malleable-C2-Profiles/blob/master/normal/gotomeeting.profile">C2 malleable profile</a> that configures the HTTP GET request URI as &#x2018;/functionalstatus&#x2019; and the HTTP POST URI as &#x2018;/rest/2/meetings&#x2019;. Table 2 compares the three Cobalt Strike Beacons.</p>
<table>
<thead>
<tr>
<th>
            Cobalt Strike C2 domain
            </th>
<th>
            HTTP POST URI
            </th>
<th>
            Ransomware
            </th>
</tr>
</thead>
<tbody readability="5">
<tr readability="2">
<td>
            update . ajaxrenew . com
            </td>
<td>
            /rest/2/meetingsVDcrCtBuGm8dime2C5zQ3EHbRE156AkpMu6W
            </td>
<td>
            AtomSilo
            </td>
</tr>
<tr readability="4">
<td>
            api . sophosantivirus . ga<br />
            sub . sophosantivirus . ga
            </td>
<td>
            /rest/2/meetingsQpmhJveuV1ljApIzpTAL
            </td>
<td>
            Night Sky
            </td>
</tr>
<tr readability="4">
<td>
            peek . openssl-digicert . xyz
            </td>
<td>
            /rest/2/meetingsKdEs85OkdgIPwcqbjS7uzVZKBIZNHeO4r5sKe
            </td>
<td>
            Pandora
            </td>
</tr>
</tbody>
</table>
<p><em>Table 2. Cobalt Strike Beacon sample configuration information linked to ransomware activity.</em></p>
<p>In a January 2022 Secureworks incident response (IR) engagement, CTU researchers observed a threat actor compromising a ManageEngine ADSelfService Plus server. The threat actor exploited an authentication bypass vulnerability (<a href="https://nvd.nist.gov/vuln/detail/CVE-2021-40539">CVE-2021-40539</a>) and deployed a <a href="https://www.offensive-security.com/metasploit-unleashed/about-meterpreter/">Meterpreter</a> reverse shell that communicated with a C2 IP address (172 . 105 . 229 . 30). They then deployed three files to the compromised host: a legitimate Microsoft Defender executable vulnerable to DLL search order hijacking, a HUI Loader sample (mpclient.dll) that is loaded by the executable, and an encrypted Cobalt Strike Beacon (dlp.ini). CTU researchers did not observe follow-on activity.</p>
<p>The C2 server also hosted a legitimate VMware executable (VMwareXferlogs.exe) vulnerable to DLL search order hijacking. This executable loads a DLL (glib-2.0.dll) from the same directory. CTU researchers were unable to obtain glib-2.0.dll from this C2 server but identified other glib-2.0.dll HUI Loader samples that could be sideloaded by VMwareXferlogs.exe. An April 2022 third-party <a href="https://www.sentinelone.com/labs/lockbit-ransomware-side-loads-cobalt-strike-beacon-with-legitimate-vmware-utility/">report</a> links glib-2.0.dll HUI Loader samples that load Cobalt Strike to LockBit ransomware. However, there is not enough evidence in the report for CTU researchers to validate this claim. </p>
<p>The VirusTotal analysis service revealed URLs indicating the presence of glib-2.0.dll files on two servers (45 . 32 . 101 . 191 and 45 . 61 . 139 . 38). Passive DNS data shows that 45 . 61 . 139 . 38 hosted sc . microsofts . net, which is a C2 domain that third-party reporting <a href="https://nsfocusglobal.com/insights-into-ransomware-spread-using-exchange-1-day-vulnerabilities-2-2/">links</a> to LockFile ransomware activity. The 45 . 32 . 101 . 191 IP address hosted api . openssl-digicert. xyz, which has sibling domain (peek . openssl-digicert . xyz) that is linked to Pandora ransomware. </p>
<p>While CTU researchers do not have access to these servers, timeline analysis suggests that two HUI Loader samples uploaded to VirusTotal may have been hosted on these servers. Both samples have compile timestamps that are the close to the &#x2018;URL first seen&#x2019; timestamp listed on VirusTotal (see Table 3). Although threat actors can trivially modify compile timestamps, the timeframe of the associated intrusion activity makes it unlikely that these timestamps were altered. The two HUI Loader samples that were possibly hosted on these servers share code with the Pandora ransomware.</p>
<table>
<thead>
<tr>
<th>
            Sample
            </th>
<th>
            First submission (VirusTotal)
            </th>
<th>
            Executable compile timestamp
            </th>
<th>
            Server/URL likely associated with the sample
            </th>
<th>
            URL first seen (VirusTotal)
            </th>
</tr>
</thead>
<tbody readability="2">
<tr readability="2">
<td>
            HUI Loader sample 1
            </td>
<td>
            24/01/2022 08:15:29
            </td>
<td>
            22/01/2022 18:16:45
            </td>
<td>
            http: //45 . 61 . 139 . 38/glib-2.0.dll
            </td>
<td>
            25/01/2022 14:01:35
            </td>
</tr>
<tr readability="2">
<td>
            HUI Loader sample 2
            </td>
<td>
            18/03/2022 20:25:32
            </td>
<td>
            16/02/2022 13:01:30
            </td>
<td>
            http: //45 . 32 . 101 . 191/glib-2.0.dll
            </td>
<td>
            18/02/2022 17:28:16
            </td>
</tr>
</tbody>
</table>
<p><em>Table 3. HUI Loader samples likely hosted on servers linked to ransomware activity.</em></p>
<h3>Ransomware TTPs and code overlap</h3>
<p>CTU analysis indicates that the five ransomware families linked to HUI Loader were developed from two distinct codebases: one for LockFile and AtomSilo, and the other for Rook, Night Sky, and Pandora. Based on the order in which these ransomware families appeared starting in mid-2021, the threat actors likely first developed LockFile and AtomSilo and then developed Rook, Night Sky, and Pandora.</p>
<p>Third-party researchers leveraged <a href="https://medium.com/s2wblog/atomsilo-x-lockfile-atomsilo-copied-blackmatter-and-cerber-for-operating-the-double-extortion-site-7fb5aaac5f21">code overlap</a> between LockFile and AtomSilo to <a href="https://www.bleepingcomputer.com/news/security/free-decryptor-released-for-atom-silo-and-lockfile-ransomware/">release</a> a decryptor for files encrypted with these ransomware families in October 2021. Other third-party reporting describes TTP overlap in <a href="https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/lockfile-ransomware-new-petitpotam-windows">LockFile</a> and <a href="https://news.sophos.com/en-us/2021/10/04/atom-silo-ransomware-actors-use-confluence-exploit-dll-side-load-for-stealthy-attack/">AtomSilo</a> intrusion activity. The overlap includes identical filenames for the ransomware executable and components of the <a href="https://github.com/hfiref0x/KDU">Kernel Driver Utility</a>.</p>
<p>Table 4 lists feature similarities across Rook, Night Sky, and Pandora. These ransomware families appear to leverage the Babuk ransomware source code. The Babuk source code was <a href="https://www.bleepingcomputer.com/news/security/babuk-ransomwares-full-source-code-leaked-on-hacker-forum/">reportedly</a> leaked in September 2021, a few months before Rook operations began in December 2021. </p>
<table>
<thead>
<tr>
<th>
            Features
            </th>
<th>
            Rook
            </th>
<th>
            Night Sky
            </th>
<th>
            Pandora
            </th>
</tr>
</thead>
<tbody readability="7.8465227817746">
<tr readability="3">
<td>
            Contains an embedded 2,048-bit RSA public key
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
<tr>
<td>
            Creates victim keys
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
<tr readability="3">
<td>
            Uses a 2,048-bit RSA victim public key
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
<tr readability="2">
<td>
            Encrypts each file with a different key
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
<tr readability="2">
<td>
            Adds a file trailer containing information required for file decryption
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
<tr readability="1.7894736842105">
<td>
            Uses a statically linked <a href="https://tls.mbed.org/">Mbed TLS</a> library for encryption functionality
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
<tr readability="2">
<td>
            Stores encryption keys in registry
            </td>
<td>
            X
            </td>
<td>
            </td>
<td>
            X
            </td>
</tr>
<tr readability="2">
<td>
            Partially encrypts large files and uses chunking
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
<td>
            X
            </td>
</tr>
</tbody>
</table>
<p><em>Table 4. Similarities across Rook, Night Sky, and Pandora ransomware.</em></p>
<p>The use of HUI Loader to load Cobalt Strike Beacon, the Cobalt Strike Beacon configuration information, the C2 infrastructure, and the code overlap suggest that the same threat group is associated with these five ransomware families. It is likely that BRONZE STARLIGHT is responsible for LockFile, AtomSilo, Rook, Night Sky, and Pandora intrusion activity.</p>
<h2>Connections to China</h2>
<p>As of this publication, CTU researchers have not linked HUI Loader to publicly available code and have only observed HUI Loader usage in the A41APT campaign linked to BRONZE RIVERSIDE and the post-intrusion ransomware activity linked to BRONZE STARLIGHT. BRONZE RIVERSIDE (also known as APT10) is <a href="https://www.justice.gov/opa/pr/two-chinese-hackers-associated-ministry-state-security-charged-global-computer-intrusion">associated with</a> the Chinese Ministry of State Security (MSS). A third-party report <a href="https://www.microsoft.com/security/blog/2021/12/11/guidance-for-preventing-detecting-and-hunting-for-cve-2021-44228-log4j-2-exploitation/#Night%20Sky">attributes</a> LockFile, AtomSilo, Rook, and Night Sky ransomware activity to a Chinese threat group it calls DEV-0401. The discovery of links to PlugX and Chinese-language resources associated with the ransomware activity further support the likelihood that BRONZE STARLIGHT is based in China. </p>
<p>CTU analysis revealed four HUI Loader samples that decrypt and load PlugX RAT payloads. PlugX is used by multiple Chinese threat groups. One of the HUI Loader-linked PlugX samples communicates with hr . indiabullamc . com, which is a sibling domain of a BRONZE STARLIGHT Cobalt Strike C2 domain (servers . indiabullamc . com). This Cobalt Strike Beacon sends HTTP GET requests to /static/js/siteanalyze_2392.js (see Figure 5). CTU researchers identified four additional Cobalt Strike Beacons that send HTTP GET requests to the same URI. One of these Cobalt Strike Beacons communicates with cs . microsofts . net, which is a sibling of a Cobalt Strike C2 domain (sc . microsofts . net) used by LockFile.</p>
<p><img loading="lazy" decoding="async" alt="" height="279" width="487" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-05.ashx?la=en&amp;modified=20220621224612&amp;hash=54BC1735EF1714861AAC62F3C8AA1014"><br /><em>Figure 5. Configuration information for Cobalt Strike Beacon linked to PlugX sample. (Source: Secureworks)</em> </p>
<p>The indiabullamc . com domain likely masquerades as the legitimate website for an India-based company. A ransomware note uploaded to VirusTotal suggests that a company with a similar name was a LockFile victim in July 2021. Analysis of the indiabullamc . com PlugX payload revealed that it replaces the <a href="https://en.wikipedia.org/wiki/DOS_MZ_executable">MZ</a> signature in the MS-DOS header and the portable executable (<a href="https://en.wikipedia.org/wiki/Portable_Executable">PE</a>) signature in the PE header with &#x2018;XV&#x2019;. This PlugX <a href="https://www.sophos.com/en-us/medialibrary/pdfs/technical%20papers/plugx-thenextgeneration.pdf">variant</a> uses the hard-coded value 0x20140307 to generate a key to XOR-decrypt the PlugX configuration information (see Figure 6).</p>
<p><img loading="lazy" decoding="async" alt="" height="311" width="588" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-06.ashx?la=en&amp;modified=20220621224613&amp;hash=15491D54204C18BF07061263F60871D8"><br /><em>Figure 6. Analysis of PlugX sample linked to LockFile ransomware activity. (Source: Secureworks)</em></p>
<p>PlugX &#x2018;XV&#x2019; samples can be <a href="https://github.com/rivitna/APT/blob/main/PlugX/PlugX_XV/plugx_xv_versions.txt">grouped</a> into sub-versions based on the hard-coded value in the decryption routine. One of the other PlugX payloads loaded by HUI Loader was uploaded to VirusTotal in 2017 and was not the same sub-version as the indiabullamc . com payload. The remaining two samples were the same sub-version as the indiabullamc . com payload and were <a href="https://www.fortinet.com/blog/threat-research/uncovering-new-activity-by-apt-">observed</a> in attacks targeting Southeast Asian organizations in April 2019. CTU researchers are unable to corroborate the BRONZE RIVERSIDE attribution based on the information in the report, but the TTPs align with Chinese threat group activity.</p>
<p>PlugX source code has allegedly been <a href="https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/plugx-a-talisman-to-behold.html">leaked</a> online. However, it is unclear which variant was leaked and if it has been used by threat groups outside of China. It is unlikely that the indiabullamc .com PlugX sub-version is used widely across distinct threat groups or even across multiple Chinese threat groups. The links connecting LockFile ransomware activity, HUI Loader, and a specific PlugX sub-version associated with Chinese threat group activity suggest that the threat group responsible for the HUI Loader-linked ransomware activity has access to malware developed by Chinese government-sponsored threat groups.</p>
<p>During an October 2021 Secureworks incident response engagement, CTU researchers observed likely ransomware precursor activity that overlapped with third-party <a href="https://nsfocusglobal.com/insights-into-ransomware-spread-using-exchange-1-day-vulnerabilities-1-2/">reporting</a> of LockFile activity. The engagement revealed that the threat actors exploited the <a href="https://www.zerodayinitiative.com/blog/2021/8/17/from-pwn2own-2021-a-new-attack-surface-on-microsoft-exchange-proxyshell">ProxyShell</a> vulnerabilities in a Microsoft Exchange server to deploy a web shell. They then ran a PowerShell wget command to download an unidentified file from a server at IP address 45 . 91 . 83 . 176, which the third-party report links to LockFile activity. This server with this IP address <a href="https://twitter.com/JRoosen/status/1429937629877972994">reportedly</a> used a Chinese-language configuration during the LockFile ransomware campaign. Although CTU researchers cannot corroborate this claim, VirusTotal reported that the server returned a web page displaying an error message in Chinese.</p>
<p>CTU researchers identified additional artifacts that indicate attribution to a Chinese-speaking threat group. The inclusion of uncommon Subject DN and Issuer DN fields in an SSL certificate associated with Pandora ransomware C2 infrastructure suggest it was likely generated following instructions on a Chinese-language blog for setting up Cobalt Strike SSL certificates. CTU researchers also detected a Chinese character font in a ransom note dropped by Night Sky ransomware (see Figure 7).</p>
<p><img loading="lazy" decoding="async" alt="" height="19" width="614" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-07.ashx?la=en&amp;modified=20220621224613&amp;hash=0952824F260FD115391A9C6D958A0F86"><br /><em>Figure 7. Reference to a Chinese font family in a Night Sky ransom note. (Source: Secureworks)</em></p>
<h3>Links between BRONZE STARLIGHT and BRONZE UNIVERSITY</h3>
<p>A January 2022 Secureworks incident response engagement revealed that BRONZE STARLIGHT compromised a server running ManageEngine ADSelfService Plus and deployed HUI Loader with a Cobalt Strike Beacon. CTU researchers observed the Chinese <a href="https://www.secureworks.com/research/threat-profiles/bronze-university">BRONZE UNIVERSITY</a> threat group active on the same network with overlapping timeframes. Around mid-November 2021, BRONZE UNIVERSITY compromised this server to deploy <a href="https://www.secureworks.com/research/shadowpad-malware-analysis">ShadowPad</a> malware and stayed active on the network until January 2022. In addition to deploying ShadowPad, BRONZE UNIVERSITY harvested credentials, moved laterally within the network, and compressed sensitive data for exfiltration. The intrusion activity attributed to BRONZE STARLIGHT began in late November 2021 and ended in early December 2021.</p>
<p>CTU researchers did not observe additional BRONZE STARLIGHT activity after the threat actors deployed and executed HUI Loader to load a Cobalt Strike Beacon. It is unclear why BRONZE STARLIGHT suspended its intrusion activity. The simultaneous and continued operations by another Chinese threat group on the same network suggests that the two groups may have deconflicted their post-intrusion activity. This scenario assumes collaboration and knowledge sharing between the groups. It could indicate that BRONZE STARLIGHT participates in government-sponsored intelligence-gathering efforts rather than being a purely financially motivated threat group.</p>
<h2>Targeting and victimology</h2>
<p>The operational cadence and victimology of LockFile, AtomSilo, Rook, Night Sky, and Pandora deployments do not align with conventional financially motivated cybercrime operations. In each case, the ransomware targets a small number of victims over a relatively brief period of time before it ceases operations, apparently permanently (see Figure 8). The number of victims is unclear, as leak sites often do not list victims who pay ransoms early.</p>
<p><img loading="lazy" decoding="async" alt="" height="174" width="603" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/099%20bronze%20starlight%20ransomware%20operations%20use%20hui%20loader/figure-08.ashx?la=en&amp;modified=20220621224613&amp;hash=956F0117E18432BB1E6F54693F3B4017"><br /><em>Figure 8. Timeline of ransomware activity and number of victims listed on each ransomware leak site. (Source: Secureworks)</em></p>
<p>Cybercrime groups sometimes rebrand their ransomware, often in response to law enforcement or government actions. For example, the <a href="https://www.secureworks.com/research/threat-profiles/gold-waterfall">GOLD WATERFALL</a> threat group <a href="https://twitter.com/fwosar/status/1421504819890634754">rebranded</a> its Darkside ransomware to BlackMatter likely as a result of law enforcement scrutiny following the <a href="https://www.zdnet.com/article/colonial-pipeline-cyberattack-shuts-down-pipeline-that-supplies-45-of-east-coasts-fuel/">Colonial Pipeline attack</a>. Similarly, <a href="https://www.secureworks.com/research/threat-profiles/gold-drake">GOLD DRAKE</a> made several changes to its <a href="https://www.secureworks.com/blog/hades-ransomware-operators-use-distinctive-tactics-and-infrastructure">Hades</a> ransomware to hinder attribution and enable victims to circumvent payment sanctions imposed by the U.S. Treasury Department. Due to the overhead associated with retooling and the impact on revenue, cybercriminals tend to only make these adjustments when they are necessary for continued operations. These pressures typically do not apply to the BRONZE STARLIGHT ransomware families. While the release of an AtomSilo and LockFile <a href="https://decoded.avast.io/threatintel/decryptor-for-atomsilo-and-lockfile-ransomware/">decryptor</a> may have prompted the group to create a ransomware family based on Babuk&#x2019;s source code, the decision to limit the ransomware use to brief, targeted deployments is likely to prevent security researchers from clustering activity and identifying trends. The rapid changes in the ransomware landscape make it unlikely that researchers will investigate obsolete ransomware.</p>
<p>BRONZE STARLIGHT operated LockFile as a traditional ransomware scheme but adopted the name-and-shame model for the other ransomware operations. It is possible that the change provided a more plausible means of exfiltrating data. The threat actors may also have decided that the public profile would be more effective as a distraction from their true operational objectives. Pandora is the only ransomware with a leak site as of April 14, 2022, listing five victims. Two earlier victims were removed. Descriptions of each company include anonfiles . com links to ZIP files containing allegedly stolen data.</p>
<p>As of mid-April, a total of 21 victims had been listed across the AtomSilo, Rook, Night Sky, and Pandora leak sites. CTU researchers estimate that approximately 75% would be of interest to Chinese government-sponsored groups focused on espionage based on the victims&#x2019; geographic locations and industry verticals. The victims include pharmaceutical companies in Brazil and the U.S., a U.S.-based media organization with offices in China and Hong Kong, electronic component designers and manufacturers in Lithuania and Japan, a law firm in the U.S., and an aerospace and defense division of an Indian conglomerate. The five victims that were not likely targeted for espionage include two real estate companies in the Americas, two small financial institutions in the U.S., and a small interior design company in Europe. One victim of Rook ransomware was a bank in Kazakhstan, which strongly suggests that the threat actors are not based in the Commonwealth of Independent States (CIS). There is an unspoken universal agreement among Russian-speaking ransomware groups not to target entities in those jurisdictions.</p>
<p>The number and nature of LockFile victims is unclear. Third-party <a href="https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/lockfile-ransomware-new-petitpotam-windows">reporting</a> suggests that victims represented verticals such as manufacturing, financial services, legal, and engineering, and that most were located in the U.S. and Asia. CTU researchers identified two victims that are consistent with the targeting of a Chinese government-sponsored espionage-focused threat group: a financial services organization in India and a local government entity in the U.S.</p>
<p>Victimology does not provide conclusive attribution. Chinese government-sponsored threat groups have broad targeting, so any ransomware operation could include victims of potential Chinese interest. Conversely, Chinese government-sponsored groups using ransomware as a distraction would likely make the activity resemble financially motivated ransomware deployments. However, the combination of victimology and the overlap with infrastructure and tooling associated with government-sponsored threat group activity indicate that BRONZE STARLIGHT may deploy ransomware to hide its cyberespionage activity. While Chinese government-sponsored groups have not historically used ransomware, there is precedent in other countries. For example, North Korea deployed <a href="https://www.secureworks.com/research/wcry-ransomware-analysis">WCry</a> (also known as WannaCry) for financial gain, the Russian <a href="https://www.secureworks.com/research/threat-profiles/iron-viking">IRON VIKING</a> threat group used <a href="https://www.secureworks.com/blog/notpetya-campaign-what-we-know-about-the-latest-global-ransomware-attack">NotPetya</a> for its destructive capabilities, and the Iranian <a href="https://www.secureworks.com/research/threat-profiles/cobalt-foxglove">COBALT FOXGLOVE</a> threat group used Pay2Key and N3tw0rm ransomware as a destructive wiper against entities in Israel.</p>
<p>BRONZE STARLIGHT likely uses ransomware in these incidents to achieve the following tactical objectives:</p>
<ul>
<li>Destroy evidence: Encrypting data destroys forensic evidence of espionage activities, making it much more challenging for victims to properly assess the threat and protect themselves.</li>
<li>Distract investigators: Ransomware can significantly impact a compromised organization and can consume all incident response efforts. Pressure to return to normal business operations could prevent victims from detecting suspicious activity that does not directly relate to the ransomware.</li>
<li>Exfiltrate data: Name-and-shame ransomware exfiltrates data, with an emphasis on proprietary or sensitive information. As this data is also targeted in espionage operations, the ransomware operation could mask the threat actors&#x2019; motivation.</li>
</ul>
<p></p>
<h2>Conclusion</h2>
<p>BRONZE STARLIGHT compromises networks by exploiting vulnerabilities in network perimeter devices, including known vulnerabilities for which patches are available. The threat actors deploy HUI Loader to decrypt and execute a Cobalt Strike Beacon for command and control. They then deploy ransomware and exfiltrate sensitive data from the victim&#x2019;s environment.</p>
<p>Both the exploitation of known vulnerabilities and the use of the Cobalt Strike for command and control provide opportunities to detect and prevent BRONZE STARLIGHT intrusion activity before exfiltration or ransomware deployment. Network defenders should implement a robust patch management process to address network perimeter vulnerabilities in a timely manner. However, breaches can occur even with preventative measures in place. Reactive measures such as a robust and tested incident response plan, real-time network monitoring and alerting, and an extended detection and response (<a href="https://www.secureworks.com/centers/what-is-xdr">XDR</a>) solution are crucial for minimizing the impact of ransomware and other malicious activity.</p>
<h2>Threat indicators</h2>
<p>The threat indicators in Table 7 can be used to detect activity related to BRONZE STARLIGHT. Note that IP addresses can be reallocated. The domains and IP addresses may contain malicious content, so consider the risks before opening them in a browser.</p>
<table>
<thead>
<tr>
<th>
            Indicator
            </th>
<th>
            Type
            </th>
<th>
            Context
            </th>
</tr>
</thead>
<tbody readability="76">
<tr readability="4">
<td>
            b16bb2f910f21e2d4f6e2aa1a1ea0d8b
            </td>
<td>
            MD5 hash
            </td>
<td>
            HUI Loader used in likely ransomware campaign (lockdown.dll)
            </td>
</tr>
<tr readability="4">
<td>
            a75e9b702a892cc3e531e158ab2e4206b939f379
            </td>
<td>
            SHA1 hash
            </td>
<td>
            HUI Loader used in likely ransomware campaign (lockdown.dll)
            </td>
</tr>
<tr readability="4">
<td>
            8502852561fcb867d9cbf45ac24c5985fa195432<br />b542dbf8753d5f3d7175b120
            </td>
<td>
            SHA256 hash
            </td>
<td>
            HUI Loader used in likely ransomware campaign (lockdown.dll)
            </td>
</tr>
<tr readability="4">
<td>
            809fcab1225981e87060033d72edaeaf
            </td>
<td>
            MD5 hash
            </td>
<td>
            Encrypted Cobalt Strike Beacon loaded by HUI Loader (vm.cfg)
            </td>
</tr>
<tr readability="4">
<td>
            64f5044709efc77230484cec8a0d784947056022
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Encrypted Cobalt Strike Beacon loaded by HUI Loader (vm.cfg)
            </td>
</tr>
<tr readability="4">
<td>
            62fea3942e884855283faf3fb68f41be747c5baa<br />922d140509237c2d7bacdd17
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Encrypted Cobalt Strike Beacon loaded by HUI Loader (vm.cfg)
            </td>
</tr>
<tr readability="4">
<td>
            peek.openssl-digicert.xyz
            </td>
<td>
            Domain name
            </td>
<td>
            Cobalt Strike C2 server used in HUI Loader intrusion
            </td>
</tr>
<tr readability="4">
<td>
            a4a6abf4ed4c9447683fba729a17197b
            </td>
<td>
            MD5 hash
            </td>
<td>
            HUI Loader used in likely ransomware campaign (glib-2.0.dll)
            </td>
</tr>
<tr readability="4">
<td>
            ead02cb3f6b811427f2635a18398392bc2ebca3a
            </td>
<td>
            SHA1 hash
            </td>
<td>
            HUI Loader used in likely ransomware campaign (glib-2.0.dll)
            </td>
</tr>
<tr readability="4">
<td>
            b0fb6c7eecbf711b2c503d7f8f3cf949404e2dd2<br />56b621c8cf1f3a2bdfb54301
            </td>
<td>
            SHA256 hash
            </td>
<td>
            HUI Loader used in likely ransomware campaign (glib-2.0.dll)
            </td>
</tr>
<tr readability="4">
<td>
            4c3c7053ec145ad3976b2a84038c5feb
            </td>
<td>
            MD5 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (vmtools.ini)
            </td>
</tr>
<tr readability="4">
<td>
            3246867705e8aad60491fe195bcc83af79470b22
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (vmtools.ini)
            </td>
</tr>
<tr readability="4">
<td>
            15b52c468cfd4dee4599ec22b1c04b977416fbe5<br />220ab30a097f403903d28a3a
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (vmtools.ini)
            </td>
</tr>
<tr readability="2">
<td>
            api.wensente.xyz
            </td>
<td>
            Domain name
            </td>
<td>
            Cobalt Strike C2 server used in HUI Loader campaign
            </td>
</tr>
<tr readability="4">
<td>
            0c4a84b66832a08dccc42b478d9d5e1b
            </td>
<td>
            MD5 hash
            </td>
<td>
            Pandora executable with similar code as HUI Loader lockdown.dll sample
            </td>
</tr>
<tr readability="4">
<td>
            160320b920a5ef22ac17b48146152ffbef60461f
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Pandora executable with similar code as HUI Loader lockdown.dll sample
            </td>
</tr>
<tr readability="4">
<td>
            5b56c5d86347e164c6e571c86dbf5b1535eae6b9<br />79fede6ed66b01e79ea33b7b
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Pandora executable with similar code as HUI Loader lockdown.dll sample
            </td>
</tr>
<tr readability="4">
<td>
            bde2a3c8e034d30ce13e684f324c6702
            </td>
<td>
            MD5 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            a413f4bcb7406710b76fabdaba95bb4690b24406
            </td>
<td>
            SHA1 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            f04f444d9f17d4534d37d3369bf0b20415186862<br />986e62a25f59fd0c2c87562f
            </td>
<td>
            SHA256 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            f259765905cd16ff40132f35c85a862a
            </td>
<td>
            MD5 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (mpc.tmp)
            </td>
</tr>
<tr readability="4">
<td>
            d9efd4c4e1fb4e3d4a171c4ca0985839ad1cdee9
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (mpc.tmp)
            </td>
</tr>
<tr readability="4">
<td>
            7fe5674c9a3af8413d0ec71072a1c27d39edc14e<br />4d110bfeb79d1148d55ce0b6
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (mpc.tmp)
            </td>
</tr>
<tr readability="2">
<td>
            update.microsoftlab.top
            </td>
<td>
            Domain name
            </td>
<td>
            Cobalt Strike C2 server used in HUI Loader campaign
            </td>
</tr>
<tr readability="4">
<td>
            69ef2d7f9ed29840b60a7fd32030cbd1
            </td>
<td>
            MD5 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            b24e254f6fdd67318547915495f56f8f2a0ac4fe
            </td>
<td>
            SHA1 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            91f8805e64f434099d0137d0b7ebf3db3ccbf5d7<br />6cd071d1604e3e12a348f2d9
            </td>
<td>
            SHA256 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            577a47811b3c57a663bcbf2aab99c9e3
            </td>
<td>
            MD5 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (mpc.tmp)
            </td>
</tr>
<tr readability="4">
<td>
            dbc48357bfbe41f5bfdd3045066486e76a23ad2d
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (mpc.tmp)
            </td>
</tr>
<tr readability="4">
<td>
            70225015489cae369d311b62724ef0caf658ffdf<br />62e5edbafd8267a8842e7696
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (mpc.tmp)
            </td>
</tr>
<tr readability="2">
<td>
            api.microsoftlab.xyz
            </td>
<td>
            Domain name
            </td>
<td>
            Cobalt Strike C2 server used in HUI Loader campaign
            </td>
</tr>
<tr readability="4">
<td>
            b0175b09e58d34689a7403abed2ae2f5
            </td>
<td>
            MD5 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            46a9b419d73a518effbc19c3316d8a20cff9ce4a
            </td>
<td>
            SHA1 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            5b5cd007fb96eef68d3d123eba82a4e4dfce50cd<br />f3b05fe82bfa097870c09903
            </td>
<td>
            SHA256 hash
            </td>
<td>
            HUI Loader used in possible ransomware activity (mpclient.dll)
            </td>
</tr>
<tr readability="4">
<td>
            f3355c8f43dada5a62aab60089c03d1e
            </td>
<td>
            MD5 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (dlp.ini)
            </td>
</tr>
<tr readability="4">
<td>
            5df448af3f7935c3f4a2904b16af9ea00d13cb0c
            </td>
<td>
            SHA1 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (dlp.ini)
            </td>
</tr>
<tr readability="4">
<td>
            c7a515276883a03981accfac182341940eb36071<br />e2a59e8fb6cb22f81aa145ae
            </td>
<td>
            SHA256 hash
            </td>
<td>
            Cobalt Strike Beacon loaded by HUI Loader (dlp.ini)
            </td>
</tr>
<tr readability="2">
<td>
            update.microupdate.xyz
            </td>
<td>
            Domain name
            </td>
<td>
            Cobalt Strike C2 server used in HUI Loader campaign
            </td>
</tr>
<tr readability="2">
<td>
            update.ajaxrenew.com
            </td>
<td>
            Domain name
            </td>
<td>
            Cobalt Strike C2 server used in HUI Loader campaign
            </td>
</tr>
<tr readability="2">
<td>
            172.105.229.30
            </td>
<td>
            IP address
            </td>
<td>
            Meterpreter C2 server linked to BRONZE STARLIGHT
            </td>
</tr>
<tr readability="2">
<td>
            45.61.139.38
            </td>
<td>
            IP address
            </td>
<td>
            Hosting HUI Loader malware linked to BRONZE STARLIGHT
            </td>
</tr>
<tr readability="2">
<td>
            45.32.101.191
            </td>
<td>
            IP address
            </td>
<td>
            Hosting HUI Loader malware linked to BRONZE STARLIGHT
            </td>
</tr>
</tbody>
</table>
<p><em>Table 5. Indicators for this threat.</em></p>
<h2>References</h2>
<p>Abrams, Lawrence. &#x201C;Babuk ransomware&#8217;s full source code leaked on hacker forum.&#x201D; Bleeping Computer. September 3, 2021. <a href="https://www.bleepingcomputer.com/news/security/babuk-ransomwares-full-source-code-leaked-on-hacker-forum/">https://www.bleepingcomputer.com/news/security/babuk-ransomwares-full-source-code-leaked-on-hacker-forum/</a> </p>
<p>Avast. &#x201C;Avast releases decryptor for Atom Silo and LockFile ransomware.&#x201D; October 27, 2021. <a href="https://decoded.avast.io/threatintel/decryptor-for-atomsilo-and-lockfile-ransomware/">https://decoded.avast.io/threatintel/decryptor-for-atomsilo-and-lockfile-ransomware/</a></p>
<p>Gallagher, Sean and Singh, Vikas. &#x201C;Atom Silo ransomware actors use Confluence exploit, DLL side-load for stealthy attack.&#x201D; SOPHOS Labs. October 4, 2021. <a href="https://news.sophos.com/en-us/2021/10/04/atom-silo-ransomware-actors-use-confluence-exploit-dll-side-load-for-stealthy-attack/">https://news.sophos.com/en-us/2021/10/04/atom-silo-ransomware-actors-use-confluence-exploit-dll-side-load-for-stealthy-attack/</a></p>
<p>Gatlan, Sergiu. &#x201C;Free decryptor released for Atom Silo and LockFile ransomware.&#x201D; Bleeping Computer. October 27, 2021. <a href="https://www.bleepingcomputer.com/news/security/free-decryptor-released-for-atom-silo-and-lockfile-ransomware/">https://www.bleepingcomputer.com/news/security/free-decryptor-released-for-atom-silo-and-lockfile-ransomware/</a></p>
<p>Hunter, Ben. &#x201C;Uncovering New Activity By APT10.&#x201D; Fortinet. October 15, 2019. <a href="https://www.fortinet.com/blog/threat-research/uncovering-new-activity-by-apt-">https://www.fortinet.com/blog/threat-research/uncovering-new-activity-by-apt-</a></p>
<p>Jie, Ji. &#x201C;Insights into Ransomware Spread Using Exchange 1-Day Vulnerabilities 1-2.&#x201D; NSFOCUS. September 26, 2021. <a href="https://nsfocusglobal.com/insights-into-ransomware-spread-using-exchange-1-day-vulnerabilities-1-2/">https://nsfocusglobal.com/insights-into-ransomware-spread-using-exchange-1-day-vulnerabilities-1-2/</a></p>
<p>Kersten, Max and Elias, Marc. &#x201C;PlugX: A Talisman to Behold.&#x201D; March 28, 2022. <a href="https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/plugx-a-talisman-to-behold.html">https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/plugx-a-talisman-to-behold.html</a></p>
<p>Microsoft Threat Intelligence Center (MSTIC). &#8220;Guidance for preventing, detecting, and hunting for exploitation of the Log4j 2 vulnerability.&#8221; December 11, 2021. <a href="https://www.microsoft.com/security/blog/2021/12/11/guidance-for-preventing-detecting-and-hunting-for-cve-2021-44228-log4j-2-exploitation/">https://www.microsoft.com/security/blog/2021/12/11/guidance-for-preventing-detecting-and-hunting-for-cve-2021-44228-log4j-2-exploitation/</a></p>
<p>S2W Talon. &#x201C;Atomsilo x Lockfile: Atomsilo copied BlackMatter and Cerber for operating the double extortion site.&#x201D; September 24, 2021. <a href="https://medium.com/s2wblog/atomsilo-x-lockfile-atomsilo-copied-blackmatter-and-cerber-for-operating-the-double-extortion-site-7fb5aaac5f21">https://medium.com/s2wblog/atomsilo-x-lockfile-atomsilo-copied-blackmatter-and-cerber-for-operating-the-double-extortion-site-7fb5aaac5f21</a></p>
<p>Symantec. &#x201C;LockFile: Ransomware Uses PetitPotam Exploit to Compromise Windows Domain Controllers.&#x201D; August 20, 2021. <a href="https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/lockfile-ransomware-new-petitpotam-windows">https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/lockfile-ransomware-new-petitpotam-windows</a></p>
<p>Tsai, Orange. &#x201C;From Pwn2Own 2021: A New Attack Surface on Microsoft Exchange &#8211; ProxyShell!&#x201D; August 18, 2021. <a href="https://www.zerodayinitiative.com/blog/2021/8/17/from-pwn2own-2021-a-new-attack-surface-on-microsoft-exchange-proxyshell">https://www.zerodayinitiative.com/blog/2021/8/17/from-pwn2own-2021-a-new-attack-surface-on-microsoft-exchange-proxyshell</a> </p>
<p>United States Department of Justice. &#x201C;Two Chinese Hackers Associated With the Ministry of State Security Charged with Global Computer Intrusion Campaigns Targeting Intellectual Property and Confidential Business Information.&#x201D; December 20, 2018. <a href="https://www.justice.gov/opa/pr/two-chinese-hackers-associated-ministry-state-security-charged-global-computer-intrusion">https://www.justice.gov/opa/pr/two-chinese-hackers-associated-ministry-state-security-charged-global-computer-intrusion</a></p>
<p>Wosar, Fabian (@fwosar). &#x201C;BlackMatter decryptor characteristics indicate a Darkside rebrand.&#x201D; Twitter. July 31, 2021, 12:15 pm. <a href="https://twitter.com/fwosar/status/1421504819890634754">https://twitter.com/fwosar/status/1421504819890634754</a> </p>
<p>Yanagishita, Hajime, et al. &#x201C;What We Can Do against the Chaotic A41APT Campaign.&#x201D; Japan Security Analyst Conference 2022. January 27, 2022. <a href="http://jsac.jpcert.or.jp/archive/2022/pdf/JSAC2022_9_yanagishita-tamada-nakatsuru-ishimaru_en.pdf">http://jsac.jpcert.or.jp/archive/2022/pdf/JSAC2022_9_yanagishita-tamada-nakatsuru-ishimaru_en.pdf</a> </p>
<p>The post <a href="https://onlinepitstop.com/2022/06/24/bronze-starlight-ransomware-operations-use-hui-loader/">BRONZE STARLIGHT Ransomware Operations Use HUI Loader</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2022/06/24/bronze-starlight-ransomware-operations-use-hui-loader/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Active Directory Exposes Internal Information</title>
		<link>https://onlinepitstop.com/2022/04/05/azure-active-directory-exposes-internal-information/</link>
					<comments>https://onlinepitstop.com/2022/04/05/azure-active-directory-exposes-internal-information/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 05 Apr 2022 17:33:27 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">https://onlinepitstop.com/2022/04/05/azure-active-directory-exposes-internal-information/</guid>

					<description><![CDATA[<p>Summary Microsoft Azure Active Directory (Azure AD) is an identity and access management solution used by over 88 percent of Fortune 500 companies as of this publication. This market penetration makes Azure AD a lucrative target for threat actors. In the second half of 2021, Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers analyzed Azure AD tenants</p>
<p>The post <a href="https://onlinepitstop.com/2022/04/05/azure-active-directory-exposes-internal-information/">Azure Active Directory Exposes Internal Information</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Summary</h3>
<p>Microsoft Azure Active Directory (Azure AD) is an identity and access management solution used by<a rel="noopener noreferrer" href="https://www.insticc.org/node/TechnicalProgram/iceis/2022/presentationDetails/110771" target="_blank"> over 88 percen</a>t of Fortune 500 companies as of this publication. This market penetration makes Azure AD a lucrative target for threat actors. In the second half of 2021, Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers analyzed Azure AD <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/microsoft-365/enterprise/subscriptions-licenses-accounts-and-tenants-for-microsoft-cloud-offerings?view=o365-worldwide" target="_blank">tenants</a> and were able to extract open-source intelligence (OSINT) about organizations. Threat actors frequently use OSINT to perform reconnaissance. CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers identified several application programming interfaces (APIs) that access internal information of any organization that uses Azure AD. Collected details included licensing information, mailbox information, and directory synchronization status.</p>
<p>CTU researchers shared their findings with Microsoft, and all but two of the issues have been mitigated as of this publication. Microsoft applied the updates automatically to all Azure AD tenants, so there are no actions required for Azure AD administrators. Microsoft classified the unmitigated issues as &#x201C;by-design.&#x201D; The first issue allows anyone to query the <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sync-whatis" target="_blank">directory synchronization </a>status. In some scenarios, Azure AD reveals the name of the high-privileged account used for synchronization. The second issue could reveal internal information about the target Azure AD tenant, including the technical contact&#x2019;s full name and phone number. The technical contact usually holds Azure AD <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/roles/permissions-reference#global-administrator" target="_blank">Global Administrator</a> privileges. </p>
<h3>OSINT details in Azure AD</h3>
<p>Tools such as <a rel="noopener noreferrer" href="https://o365blog.com/aadinternals/" target="_blank">AADInternals</a> gather OSINT from Azure AD using unauthenticated APIs. This OSINT includes the target tenant&#x2019;s <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/add-custom-domain" target="_blank">registered</a> domains and types, tenant name and ID, and <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso" target="_blank">seamless single sign-on</a> status (also known as DesktopSSO). Figure 1 lists Invoke-AADIntReconAsOutsider command output that contains OSINT information about the organization.</p>
<p><img loading="lazy" decoding="async" alt="" height="151" width="528" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure1.ashx?la=en&amp;modified=20220404185724&amp;hash=65B399C7DDF8FC59E29991592A34F365"><br /><em>Figure 1. Invoke-AADIntReconAsOutsider output listing OSINT from unauthenticated APIs. (Source: Secureworks)</em></p>
<p>
In addition to the unauthenticated APIs, there are authenticated APIs that can only be used after logging into an Azure AD tenant. Figure 2 lists the information that any user can access from their own tenant. Administrator privileges are not required. CTU researchers discovered authenticated APIs that could access information about any tenant, not just the authenticated user&#8217;s tenant.</p>
<p><img loading="lazy" decoding="async" alt="" height="311" width="464" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure2.ashx?la=en&amp;modified=20220404185725&amp;hash=B78D4DAE325D40DA3FFAA6FA34F576FE"><br /><em>Figure 2. Invoke-AADIntReconAsInsider output listing data from authenticated APIs. (Source: Secureworks)</em></p>
<h4>Diagnostics API</h4>
<p>Microsoft uses the undocumented Diagnostics API with the <a rel="noopener noreferrer" href="https://support.microsoft.com/en-us/office/about-the-microsoft-support-and-recovery-assistant-e90bb691-c2a7-4697-a94f-88836856c72f" target="_blank">Support and Recovery Assistant</a> (SaRA) tool to help the logged-in user diagnose and solve problems when accessing Microsoft cloud services. In 2019, CTU researchers observed SaRA using an analysis API endpoint. The traffic between the SaRA client and the analysis endpoint used the process in Figure 3.</p>
<p><img loading="lazy" decoding="async" alt="" height="326" width="436" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure3.ashx?la=en&amp;modified=20220404185725&amp;hash=AD2E608B6B708FF4A8A1ABBDAA5B117A"><br /><em>Figure 3. Diagnostics API analysis endpoint process. (Source: Secureworks)</em></p>
<ol readability="-1">
<li>	A user opens SaRA, enters symptoms, and starts the diagnostic.</li>
<p></p>
<li readability="-1">	SaRA makes an initial HTTP POST request to the analysis endpoint (see Figure 4). The request contains an AnalyzerId and DiagnosisInfo.
<p><img loading="lazy" decoding="async" alt="" height="192" width="522" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure4.ashx?la=en&amp;modified=20220404185725&amp;hash=DACEE6E35133FF1A2E9E587F2BFF52FF"><br /><em>Figure 4. Diagnostics API analysis endpoint initial request. (Source: Secureworks)</em></p>
</li>
<p></p>
<li>	The response returns the SessionId to SaRA.</li>
<p></p>
<li>	The Diagnostics API backend starts the analyzer to explore the defined user&#x2019;s tenant and mailbox.</li>
<p></p>
<li readability="-1">	SaRA uses an HTTP GET request and the SessionId to poll the analysis status (see Figure 5).
<p><img loading="lazy" decoding="async" alt="" height="73" width="544" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure5.ashx?la=en&amp;modified=20220404190150&amp;hash=32B21B53186C3CF1A89773D595928752"><br /><em>Figure 5. Diagnostics API analysis endpoint poll request. (Source: Secureworks)</em>
    </p>
</li>
<p></p>
<li>	The Diagnostics API returns analysis results to SaRA.</li>
<p></p>
<li>	SaRA displays the results to the user.</li>
</ol>
<p>The AnalyzerId represents an analyzer containing the diagnostic instructions that SaRA tasks the Diagnostics API to perform on the user&#x2019;s behalf. The SaRA client source code contains a list of analyzers (see Figure 6).</p>
<p><img loading="lazy" decoding="async" alt="" height="318" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure6.ashx?la=en&amp;modified=20220404190151&amp;hash=D5B521962B2137D1E950ADBDFA05D078"><br /><em>Figure 6. Sample of SaRA analyzer IDs and names from the analyzer list in the source code. (Source: Secureworks)</em></p>
<p>CTU researchers identified the cloud-related analyzers from this list (see Table 1).</p>
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td valign="top">Identifier</td>
<td valign="top">Name</td>
</tr>
</thead>
<tbody readability="12">
<tr readability="4">
<td valign="top">
            64fc98c3-da51-41f0-9051-1fb5921deb95
            </td>
<td valign="top">
            TenantInfo.TenantUserInfoAnalyzer
            </td>
</tr>
<tr readability="4">
<td valign="top">
            6a60a84b-634c-4fe8-a840-ba1a44a2e6fd
            </td>
<td valign="top">
            TenantInfo.TenantSoftwareSettingsAnalyzer
            </td>
</tr>
<tr readability="4">
<td valign="top">
            99916cd2-6bc9-44c6-b58e-0fbca87b1975
            </td>
<td valign="top">
            ExchangeCmdlets.ExchangeHybridTenantAnalyzer
            </td>
</tr>
<tr readability="4">
<td valign="top">
            90c40b3f-251a-4b09-a4b6-5c8d53e986d0
            </td>
<td valign="top">
            ExchangeCmdlets.GetMailboxAnalyzer
            </td>
</tr>
<tr readability="4">
<td valign="top">
            597b1b90-b4a8-4fa0-9ddb-dcd997f0b8c2
            </td>
<td valign="top">
            ExchangeCmdlets.GetUserAnalyzer
            </td>
</tr>
<tr readability="4">
<td valign="top">
            ea7e84ae-041d-4e48-a308-c76bd4f09ac2
            </td>
<td valign="top">
            ExchangeCmdlets.CasMailboxAnalyzer
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. Cloud-related Diagnosis API analysis endpoint analyzers.</em></p>
<p>The SaRA client uses the DiagnosisInfo structure to pass parameters to analyzers. Figure 7 lists the parameters used by each of the cloud-related analyzers.</p>
<p><img loading="lazy" decoding="async" alt="" height="612" width="462" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure7.ashx?la=en&amp;modified=20220404190151&amp;hash=529D6771E214C20F513232CFD8ED8510"><br /><em>Figure 7. DiagnosisInfo content for each cloud-related analyzer. (Source: Secureworks)</em></p>
<p>The results contain user information, including full licensing information, Office versions enabled in the tenant, the organization&#x2019;s Exchange hybrid configuration and external relationships, user mailbox information, and Messaging Application Programming Interface (MAPI) status (see Figure 8).</p>
<p><img loading="lazy" decoding="async" alt="" height="584" width="474" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure8.ashx?la=en&amp;modified=20220404190151&amp;hash=2127AED501377489521ACF8C86D92633"><br /><em>Figure 8. Information returned by Diagnostics API analysis endpoint. (Source: Secureworks)</em></p>
<p>The SaRA client extracts the logged-in user&#x2019;s email address from their <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/auth-oauth2" target="_blank">OAuth token</a> (see Figure 9) and uses that as the target SmtpAddress in the DiagnosisInfo parameter.</p>
<p><img loading="lazy" decoding="async" alt="" height="313" width="456" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure9.ashx?la=en&amp;modified=20220404190151&amp;hash=BCC92E67F7792408D65443516798CFCB"><br /><em>Figure 9. OAuth token for Diagnostics API. (Source: Secureworks)</em></p>
<p>The Diagnostics API does not validate whether the SmtpAddress matches the logged-in user. It is possible to retrieve information for any user from any tenant by replacing the SmtpAddress with the email address of the target user. If the target user does not exist but the domain is correct, the API returns all tenant-related information. This information is valuable to threat actors. For instance, the licensing information shows which protective components the target tenant could be using. Moreover, the organizational relationships identify additional individuals that could be targeted in phishing attacks to gain access to a tenant.</p>
<p>CTU researchers reported this vulnerability to Microsoft on September 7, 2021. On September 22, Microsoft responded that the issue was resolved. CTU researchers confirmed that the resolution included two modifications:</p>
<ul>
<li>	Denies access to other users&#x2019; information (see Figure 10).<br /><img loading="lazy" decoding="async" alt="" height="238" width="409" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure10.ashx?la=en&amp;modified=20220404190152&amp;hash=CBB6E19929ED572E5E14CE2A5E66C0CD"><br /><em>Figure 10. &#x2018;You don&#8217;t have access to given user&#x2019; response. (Source: Secureworks</em></li>
<p></p>
<li>	Invalidates all AnalyzerIDs, making the analysis endpoint obsolete (see Figure 11).<br /><img loading="lazy" decoding="async" alt="" height="234" width="444" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure11.ashx?la=en&amp;modified=20220404190152&amp;hash=72297F1D78FF59AD6ABACD393BB700CC"><br /><em>Figure 11. &#x2018;Unknown analyzer id&#x2019; response. (Source: Secureworks)</em>
    </li>
</ul>
<p>In 2021, CTU analysis of SaRA version 17.0.7.7119.4 revealed the client using the cloudcheck endpoint instead of the analysis endpoint. Figure 12 depicts the cloudcheck endpoint process.</p>
<p><img loading="lazy" decoding="async" alt="" height="314" width="427" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure12.ashx?la=en&amp;modified=20220404190152&amp;hash=97231191422B882F81AFC83E6F789E27"><br /><em>Figure 12. Diagnostics API cloudcheck endpoint process. (Source: Secureworks)</em></p>
<ol readability="1.5">
<li>	A user opens SaRA, enters symptoms, and starts the diagnostic.</li>
<p></p>
<li readability="2">	SaRA makes an initial HTTP POST request to the cloudcheck endpoint (see Figure 13).
<p><img loading="lazy" decoding="async" alt="" height="145" width="422" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure13.ashx?la=en&amp;modified=20220404190152&amp;hash=613C04262B790F16560CB0C635CA3290"> <br /><em>Figure 13. Diagnostics API cloudcheck endpoint initial request. (Source: Secureworks)</em></p>
<p>The request contains the Symptom and Parameters details (see Figure 14) the user entered in Step 1.<br /><img loading="lazy" decoding="async" alt="" height="368" width="387" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure14.ashx?la=en&amp;modified=20220404190152&amp;hash=019820EDA5BE343ADD7FA02456855A75"><br /><em>Figure 14. Information sent to cloudcheck endpoint. (Source: Secureworks)</em></p>
</li>
<p></p>
<li readability="-1">The response returns the RequestId to SaRA (see Figure 15).
<p><img loading="lazy" decoding="async" alt="" height="225" width="563" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure15.ashx?la=en&amp;modified=20220404190153&amp;hash=7C0D77B92A46AB07E310B94B47C1EFAF"><br /><em>Figure 15. Diagnostics API initial response. (Source: Secureworks)</em>
    </p>
</li>
<p></p>
<li>	The diagnosis API backend starts the diagnostics to explore the defined user&#x2019;s tenant and mailbox.</li>
<p></p>
<li readability="-1">	SaRA uses an HTTP GET request and the RequestId to poll the analysis status (see Figure 16).
<p><img loading="lazy" decoding="async" alt="" height="103" width="574" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure16.ashx?la=en&amp;modified=20220404190153&amp;hash=7206C79E619C1EB4061388736A0F8F5C"><br /><em>Figure 16. Diagnostics API v1 poll request. (Source: Secureworks)</em>
    </p>
</li>
<p></p>
<li>	The cloudcheck endpoint returns diagnostic results to SaRA.</li>
<p></p>
<li>	SaRA displays the results to the user.</li>
</ol>
<p>The SaRA client revealed the following symptoms that could retrieve similar diagnostic information as the analysis endpoint:</p>
<ul>
<li>	CasMailbox
    </li>
<li>	DirSyncCheck
    </li>
<li>	ExchangeHybridTenant
    </li>
<li>	GetUserDiagnostic
    </li>
<li>	TenantUserInfo</li>
</ul>
<p>Figure 17 lists the parameters used by the DirSyncCheck symptom.</p>
<p><img loading="lazy" decoding="async" alt="" height="263" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure17.ashx?la=en&amp;modified=20220404190153&amp;hash=57F7C816AA5F678AC031080635DD701C"><br /><em>Figure 17. Parameter values for DirSyncCheck request. (Source: Secureworks)</em></p>
<p>Like the analysis endpoint, the UserUpn and UserSMTPEmail attributes in the initial request were the same as the user principal name of the bearer token used to access the API. As with the analysis endpoint, it was possible to retrieve information for other users and tenants by replacing the values with the email address of the target user. After Microsoft addressed the analysis endpoint issue, the logged-in user could only retrieve CasMailBox information for users of the same tenant. However, all other information could still be requested from any tenant.</p>
<p>CTU researchers reported this vulnerability to Microsoft on September 23, 2021. On December 2, 2021, Microsoft applied an update. CTU researchers confirmed that everything except the directory synchronization status issue was addressed. On January 28, 2022, Microsoft closed the issue as fixed, leaving the synchronization status intact.</p>
<p>Table 2 lists the directory synchronization status values. While all status information is important for threat actors, the password expiration message is the most valuable as it reveals the account name used for synchronization. This account has high privileges in the target tenant. It can be used to create, edit, and delete users in all tenants, and to reset users&#x2019; passwords in some tenants. By default, the synchronization account&#x2019;s password is generated during the configuration and is not set to expire. For security purposes, some organizations configure the password to expire in their tenants, which could expose the account name. The password expiration reminder can be <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-US/microsoft-365/admin/manage/set-password-expiration-policy?view=o365-worldwide" target="_blank">configured</a> to be sent 1 to 30 days prior to the expiration date.</p>
<table border="1" cellspacing="0" cellpadding="0">
<thead readability="1">
<tr readability="2">
<td valign="top">Synchronization status message</td>
<td valign="top">Description</td>
</tr>
</thead>
<tbody readability="13.5">
<tr readability="4">
<td valign="top">
            Directory Synchronization (or) password Synchronization is enabled for your tenant:&#xA0;<em>&lt;redacted&gt;</em></p>
<pre><redacted></redacted></pre>
</td>
<td valign="top">
            Directory synchronization is enabled and working normally
            </td>
</tr>
<tr readability="5">
<td valign="top">
            Active Directory Synchronization or Password Synchronization needs to be enabled for your tenant:&#xA0;<em>&lt;redacted&gt;</em><redacted>. This is something your Office 365 administrator can fix.<br />
            </redacted></td>
<td valign="top">
            Directory synchronization is not enabled
            </td>
</tr>
<tr readability="6">
<td valign="top">
            Your tenant <em>&lt;redacted&gt;</em>&#xA0;<redacted>password Synchronization server hasn&#8217;t successfully synchronized with Office 365 in the last three hours. The last time it synced was 9/23/2020.<br />
            </redacted></td>
<td valign="top">
            Directory synchronization is enabled but has not been successfully synchronized after the listed date
            </td>
</tr>
<tr readability="5">
<td valign="top">
            Your tenant <em>&lt;redacted&gt;</em>&#xA0;<redacted>directory Synchronization server hasn&#8217;t successfully synchronized with Office 365 in the last three hours. The last time it synced was 1/1/0001.<br />
            </redacted></td>
<td valign="top">
            Directory synchronization is enabled but has never been successfully synchronized
            </td>
</tr>
<tr readability="7">
<td valign="top">
            Your tenant <em>&lt;redacted&gt;</em>&#xA0;<redacted>directory synchronization service account <em>&lt;redacted&gt;</em><redacted>@<em>&lt;redated&gt;</em><redacted>.onmicrosoft.com password is expiring in 11 days. This is something your Office 365 administrator can fix.<br />
            </redacted></redacted></redacted></td>
<td valign="top">
            Directory synchronization is enabled and working normally, but the password of the account used for synchronization is expiring soon
            </td>
</tr>
</tbody>
</table>
<p><em>Table 2. Directory synchronization status messages.</em></p>
<h4>Organization information</h4>
<p>Azure AD collects information when a representative from an organization signs up for a new Microsoft 365 or Azure AD environment or tenant. The form collects the full name and phone number of this representative (see Figure 18), and that person becomes the technical contact of the tenant.</p>
<p><img loading="lazy" decoding="async" alt="" height="463" width="476" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure18.ashx?la=en&amp;modified=20220404190153&amp;hash=BF25E5C753DEB89AC2F8AC800C73209A"><br /><em>Figure 18. Office 365 signup form. (Source: Secureworks)</em></p>
<p>After signing up, this technical contact can edit their contact details in the <a rel="noopener noreferrer" href="https://admin.microsoft.com/" target="_blank">Microsoft 365 admin center</a> (see Figure 19). The company name and phone number are pre-populated from the original signup form.</p>
<p><img loading="lazy" decoding="async" alt="" height="446" width="392" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure19.ashx?la=en&amp;modified=20220404190154&amp;hash=D4B810AFB3674279729DC12B2AB95AC0"><br /><em>Figure 19. Organization information in the admin center. (Source: Secureworks)</em></p>
<p>Microsoft business partners offer services to customer organizations that use Microsoft cloud services such as Microsoft 365 and Azure AD. Azure AD administrators in customer organizations can authorize these partners to access their tenants, which creates a partner relationship in the customer&#x2019;s tenant. These partner relationships can only be accessed via the Microsoft 365 admin center. Only administrators have access to the admin center.</p>
<p>CTU researchers discovered an API (see Figure 20) used by the admin center to retrieve details regarding the partner&#x2019;s organization. Although the API is exclusively used by the admin center, it does not require administrative permissions to be accessed. The API requires the partner&#x2019;s tenant ID as an input.</p>
<p><img loading="lazy" decoding="async" alt="" height="23" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure20.ashx?la=en&amp;modified=20220404190154&amp;hash=63438D8294D709F24E822A16E6BC0818"><br /><em>Figure 20. Admin API request for partner details. (Source: Secureworks)</em></p>
<p>The response (see Figure 21) contains contact data from the organization information and signup form. After the initial signup, the first and last name can only be changed by Microsoft. Those fields cannot be viewed or modified in the admin center.</p>
<p><img loading="lazy" decoding="async" alt="" height="367" width="430" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/098%20azure%20active%20directory/azure%20active%20directory/active-azure-directory_figure21.ashx?la=en&amp;modified=20220404190154&amp;hash=D159487131784CEEAA5832EE19B81060"> <br /><em>Figure 21. Partner information returned by admin API. (Source: Secureworks)</em></p>
<p>CTU researchers verified that this API could retrieve this information for any tenant, regardless of their partner status. CTU researchers reported this vulnerability to Microsoft on December 14, 2021. On January 12, 2022, Microsoft stated that &#x201C;this information is expected to be shown&#x201D; and did not mitigate the issue. </p>
<h3>Conclusion</h3>
<p>A threat actor can gather a significant amount of OSINT from an Azure AD tenant. Microsoft addressed all but two of the issues CTU researchers identified:</p>
<ul>
<li>	The tenant&#x2019;s synchronization status can reveal if the synchronization is configured, if is it operational, the time of the last synchronization, and the synchronization account&#x2019;s name. Attackers can use this information for social engineering (leveraging the synchronization error data) and targeted brute-force attacks (using the account name).</li>
<p></p>
<li>	The organization information could expose the name and phone number of the tenant&#x2019;s Global Administrator. This information can be abused for social engineering, spearphishing, and targeted brute-force attacks.</li>
</ul>
<p>CTU researchers recommend the following actions to protect tenants from OSINT abuse:</p>
<ul>
<li>	Organizations should ensure that their directory synchronization can perform the synchronization within the defined timeframes to avoid exposing details in error messages. Administrators receive an email if synchronization has not been <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/troubleshoot/azure/active-directory/directory-sync-stop-register" target="_blank">successful</a> in more than 24 hours, but the error message is displayed after three hours of inactivity.</li>
<p></p>
<li>	Organizations that implement an expiration for a directory synchronization account password should reset the password before Azure AD displays the expiration reminder to prevent exposure of the directory synchronization account name. </li>
<p></p>
<li>	Organizations should change the details associated with their tenant to general labels (e.g., &#x201C;IT Department&#x201D;) rather than personally identifiable data. Using a generic term prevents exposing the name of the potential Global Administrator account. An organization can modify some fields (e.g., phone number), but must create a support request in the Azure portal to change the first and last name of the technical contact.</li>
</ul>
<p>The post <a href="https://onlinepitstop.com/2022/04/05/azure-active-directory-exposes-internal-information/">Azure Active Directory Exposes Internal Information</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2022/04/05/azure-active-directory-exposes-internal-information/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ShadowPad Malware Analysis</title>
		<link>https://onlinepitstop.com/2022/03/10/shadowpad-malware-analysis/</link>
					<comments>https://onlinepitstop.com/2022/03/10/shadowpad-malware-analysis/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 10 Mar 2022 11:03:02 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">http://onlinepitstop.com/2022/03/10/shadowpad-malware-analysis/</guid>

					<description><![CDATA[<p>Summary The ShadowPad advanced modular remote access trojan (RAT) has been deployed by the Chinese government-sponsored BRONZE ATLAS threat group since at least 2017. A growing list of other Chinese threat groups have deployed it globally since 2019 in attacks against organizations in various industry verticals. Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) analysis of ShadowPad samples</p>
<p>The post <a href="https://onlinepitstop.com/2022/03/10/shadowpad-malware-analysis/">ShadowPad Malware Analysis</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Summary</h2>
<p>The ShadowPad advanced modular remote access trojan (RAT) has been deployed by the Chinese government-sponsored <a href="https://www.secureworks.com/research/threat-profiles/bronze-atlas">BRONZE ATLAS</a> threat group since at least 2017. A growing list of other Chinese threat groups have deployed it globally since 2019 in attacks against organizations in various industry verticals. Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) analysis of ShadowPad samples revealed clusters of activity linked to threat groups affiliated with the Chinese Ministry of State Security (MSS) civilian intelligence agency and the People&#8217;s Liberation Army (PLA).</p>
<p>Some clusters that target China&#8217;s &#8216;near abroad&#8217; appear to be linked to PLA theater commands. These theater commands were introduced in the PLA reforms announced in 2015. Evidence of infrastructure and malware crossover among threat groups likely operating within the same theater command suggests that PLA reforms could be facilitating collaboration among these groups.</p>
<p>ShadowPad is decrypted in memory using a custom decryption algorithm. CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers have identified multiple ShadowPad versions based on these distinct algorithms. ShadowPad extracts information about the host, executes commands, interacts with the file system and registry, and deploys new modules to extend functionality. CTU researchers discovered that ShadowPad payloads are deployed to a host either encrypted within a DLL loader or within a separate file alongside a DLL loader. These DLL loaders decrypt and execute ShadowPad in memory after being sideloaded by a legitimate executable vulnerable to DLL search order hijacking.</p>
<h2>ShadowPad DLL loader execution</h2>
<p>The majority of ShadowPad samples analyzed by CTU researchers were two-file execution chains: an encrypted ShadowPad payload embedded in a DLL loader. ShadowPad DLL loaders are sideloaded by a legitimate executable vulnerable to DLL search order hijacking. The DLL loader then decrypts and executes the embedded ShadowPad payload in memory using a custom decryption algorithm specific to the malware version. Table 1 lists legitimate executable and malicious DLL pairs that CTU researchers observed in analyzed samples.</p>
<table>
<thead>
<tr>
<th>
            Legitimate executable
            </th>
<th>
            Vendor
            </th>
<th>
            ShadowPad DLL loader filename
            </th>
</tr>
</thead>
<tbody>
<tr>
<td>
            AppLaunch.exe
            </td>
<td>
            Microsoft
            </td>
<td>
            mscoree.dll
            </td>
</tr>
<tr>
<td>
            hpqhvind.exe
            </td>
<td>
            Hewlett Packard
            </td>
<td>
            hpqhvsei.dll
            </td>
</tr>
<tr>
<td>
            consent.exe
            </td>
<td>
            Microsoft
            </td>
<td>
            secur32.dll
            </td>
</tr>
<tr>
<td>
            TosBtKbd.exe
            </td>
<td>
            Toshiba
            </td>
<td>
            tosbtkbd.dll
            </td>
</tr>
<tr>
<td>
            BDReinit.exe
            </td>
<td>
            BitDefender
            </td>
<td>
            log.dll
            </td>
</tr>
<tr>
<td>
            Oleview.exe
            </td>
<td>
            Microsoft
            </td>
<td>
            iviewers.dll
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. Legitimate executable and DLL loader filenames used to load ShadowPad.</em></p>
<p>CTU researchers identified ShadowPad execution chains involving a third file that contains the encrypted ShadowPad payload. These chains execute the legitimate executable (usually renamed), sideload the ShadowPad DLL loader, and load and decrypt the third file. CTU researchers observed threat actors using BDReinit.exe or Oleview.exe as initial files in the three-file ShadowPad execution chain. The third file in the BDReinit.exe execution chain is log.dll.dat; in the Oleview.exe execution chain, it is iviewers.dll.dat. CTU researchers have attributed campaigns using these execution chains to the Chinese <a href="https://www.secureworks.com/research/threat-profiles/bronze-university">BRONZE UNIVERSITY</a> threat group, which has targeted transportation, natural resource, energy, and non-governmental organizations. Third-party researchers have also <a href="https://www.pwc.co.uk/issues/cyber-security-services/research/chasing-shadows.html">identified</a> three-file ShadowPad execution chains that begin with consent.exe (followed by secur32.dll and secur32.dll.dat) and AppLaunch.exe (followed by mscoree.dll and mscoree.dll.dat). Additionally, CTU analysis revealed a sample that used AppLaunch.exe followed by mscoree.dll and mscoree.dll.mui. </p>
<p>Other ShadowPad samples from 2018 also deviated from the typical two-file execution chain. Those samples, which used the filename TSVIPSrv.DLL, are placed in the Windows System32 directory and are loaded by the Windows SessionEnv Service, which is vulnerable to DLL hijacking. CTU researchers observed BRONZE ATLAS using this technique in 2021 to load other payloads via this filename, including Cobalt Strike.</p>
<p>CTU researchers discovered ShadowPad samples sharing behavioral similarities such as injecting the decrypted ShadowPad payload into a newly launched target process and establishing persistence on a compromised host specified in the configuration settings. Figure 1 lists configuration information for a ShadowPad sample that reveals command and control (C2) details, the process injection target, and persistence via creation of a service and a registry Run key.</p>
<p><img decoding="async" alt="ShadowPad sample configuration information." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-01.ashx?la=en&amp;modified=20220214214033&amp;hash=DA87AEE4097C43871C3CD80FE710B198"><br /><em>Figure 1. ShadowPad sample configuration information. (Source: Secureworks)</em></p>
<p>As part of the execution chain, ShadowPad copies the legitimate binary and sideloaded DLL to a subdirectory specific to each sample. Most analyzed samples were copied to a subdirectory under C:ProgramData, C:Users<em>&lt;username&gt;</em>Roaming, or C:Program Files. In three-file execution chains, the third file (e.g., log.dll.dat, iviewers.dll.dat) is typically deleted and the ShadowPad DLL loader is padded to over 50MB, likely to evade antivirus software. As part of this process, an encrypted payload is usually saved to a registry key under HKLMSOFTWAREClassesCLSID{GUID}&lt;<em>eight-character hexadecimal string&gt;</em> (see Figure 2).</p>
<p><img decoding="async" alt="Sample ShadowPad encrypted payload location." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-02.ashx?la=en&amp;modified=20220214214033&amp;hash=D67E2EEE8400E08458691934013E1A54"><br /><em>Figure 2. Sample ShadowPad encrypted payload location. (Source: Secureworks)</em></p>
<p>After the initial setup the legitimate executable is launched as a Windows service. This service initiates the ShadowPad execution chain. The ShadowPad payload is injected into a child process of the service process that is specified in the ShadowPad configuration information. Figure 3 shows the timeline of a ShadowPad execution chain (i.e., log.exe -&gt; log.dll -&gt; log.dll.dat), followed by the service creation and execution of the copied files (log.exe renamed to reg.exe), and the payload injection. </p>
<p><img decoding="async" alt="Observed timeline of ShadowPad execution, service creation, and payload injection on a compromised network." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-03.ashx?la=en&amp;modified=20220214214033&amp;hash=D1AA72F84FF4D0C44DE3A8FC2A2123D2"><br /><em>Figure 3. Observed timeline of ShadowPad execution, service creation, and payload injection on a compromised network. (Source: Secureworks)</em></p>
<p>CTU researchers observed threat actors interacting with ShadowPad malware on compromised hosts. In one incident, multiple cmd.exe child processes were launched via hands-on-keyboard activity (see Figure 4).  </p>
<p><img decoding="async" alt="Threat actor interaction with ShadowPad malware." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-04.ashx?la=en&amp;modified=20220214214034&amp;hash=00F6CCA975AF6402EB9881A9620F401B"><br /><em>Figure 4. Threat actor interaction with ShadowPad malware. (Source: Secureworks)</em></p>
<h3>Identifying characteristics</h3>
<p>The following file structures and behaviors can indicate a ShadowPad compromise:</p>
<ul readability="3.5">
<li readability="6">
<p>A subdirectory within C:ProgramData, C:Users<em>&lt;username&gt;</em>Roaming, or C:Program Files that contains a legitimate executable (likely renamed) and one of the known ShadowPad DLL loader filenames from Table 1 (see Figure 5)</p>
<p><img decoding="async" alt="Example legitimate executable and ShadowPad DLL loader in C:ProgramData subdirectory." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-05.ashx?la=en&amp;modified=20220214214034&amp;hash=194C681209D300874B71BE93AE18763E"><br /><em>Figure 5. Example legitimate executable and ShadowPad DLL loader in C:ProgramData subdirectory. (Source: Secureworks)</em></p>
</li>
<li readability="1">
<p>A Windows service that launches the legitimate executable from that subdirectory (see Figure 6)</p>
<p><img decoding="async" alt="Example of installed Windows service for ShadowPad persistence." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-06.ashx?la=en&amp;modified=20220214214034&amp;hash=17A0ED283BCF6EE8E58306B2ED8D06CA"><br /><em>Figure 6. Example of installed Windows service for ShadowPad persistence. (Source: Secureworks)</em></p>
</li>
<li>Process telemetry showing the Windows service creating an unusual child process (e.g., svchost.exe), which in turn creates multiple dllhost.exe and cmd.exe child processes</li>
</ul>
<p></p>
<h2>The BRONZE ATLAS/Chengdu 404 nexus</h2>
<p>ShadowPad gained notoriety in 2017 after it was deployed in software supply chain attacks involving <a href="https://blog.avast.com/new-investigations-in-ccleaner-incident-point-to-a-possible-third-stage-that-had-keylogger-capacities">CCleaner</a>, <a href="https://www.kaspersky.com/about/press-releases/2017_shadowpad-how-attackers-hide-backdoor-in-software-used-by-hundreds-of-large-companies-around-the-world">NetSarang</a>, and <a href="https://www.vice.com/en/article/pan9wn/hackers-hijacked-asus-software-updates-to-install-backdoors-on-thousands-of-computers">ASUS Live Update</a> utility. These campaigns were attributed to the BRONZE ATLAS threat group.</p>
<p>A 2017 Microsoft <a href="https://www.noticeofpleadings.net/barium/files/COMPLAINT_AND_SUMMONS/Complaint.pdf">complaint</a> and U.S. Department of Justice (DOJ) indictments unsealed in 2020 provide additional information on ShadowPad&#8217;s connection to BRONZE ATLAS. The Microsoft complaint alleges that BRONZE ATLAS (also known as Barium) deployed ShadowPad in 2017 to steal intellectual property and personally identifiable information (PII). At the time, the malware was used only by BRONZE ATLAS. The DOJ indictments allege that Chinese nationals working for the Chengdu 404 network security company deployed ShadowPad in a global campaign attributed to BRONZE ATLAS.</p>
<p>A related DOJ indictment revealed that these Chinese nationals collaborated with another Chinese national known by the handle &#8216;Rose&#8217; (sometimes known as <a href="https://www.fbi.gov/wanted/cyber/tan-dailin/download.pdf">Withered Rose</a> and Wicked Rose), using similar tactics, techniques, and procedures (TTPs) and sharing malware. The indictment <a href="https://www.justice.gov/opa/press-release/file/1317216/download">describes</a> this individual as a sophisticated threat actor who committed computer intrusion offenses targeting high-technology organizations globally. Campaigns linked to Rose were <a href="https://www.justice.gov/opa/pr/seven-international-cyber-defendants-including-apt41-actors-charged-connection-computer">tracked</a> as Barium.</p>
<p>A third-party <a href="https://assets.sentinelone.com/c/Shadowpad?x=P42eqA">report</a> claimed that Rose likely co-developed malware with an associate named &#8216;whg,&#8217; who has been linked to the development of the PlugX malware. PlugX is <a href="https://www.secureworks.com/research/bronze-president-targets-ngos">used</a> by multiple Chinese threat groups. Third-party researchers also identified string and <a href="https://st.drweb.com/static/new-www/news/2020/october/Study_of_the_ShadowPad_APT_backdoor_and_its_relation_to_PlugX_en.pdf">code overlap</a> between PlugX and ShadowPad. This overlap suggests close links between the ShadowPad and PlugX developers. ShadowPad may have been developed by an individual or group affiliated with BRONZE ATLAS. One possibility is that Chengdu 404 originally developed ShadowPad, as the individuals named in the DOJ indictments were allegedly involved with developing malware used in their campaigns.</p>
<p>It is likely that only BRONZE ATLAS used ShadowPad until approximately 2019. Most of the ShadowPad DLL loader samples can be clustered based on compile timestamps, C2 infrastructure, payload versions, DLL loader code overlap, and likely victimology. CTU researchers identified multiple ShadowPad clusters used in campaigns since 2019 and attributed these clusters to distinct threat groups. These groups include BRONZE ATLAS and BRONZE UNIVERSITY, whose targeting suggests affiliation with the MSS. A third-party report <a href="https://www.trendmicro.com/content/dam/trendmicro/global/en/research/22/a/earth-lusca-employs-sophisticated-infrastructure-varied-tools-and-techniques/technical-brief-delving-deep-an-analysis-of-earth-lusca-operations.pdf" target="_blank" title="https://www.trendmicro.com/content/dam/trendmicro/global/en/research/22/a/earth-lusca-employs-sophisticated-infrastructure-varied-tools-and-techniques/technical-brief-delving-deep-an-analysis-of-earth-lusca-operations.pdf" rel="noopener">suggests</a> that BRONZE UNIVERSITY (referred to in the report as Earth Lusca) may be operating near to Chengdu in China after operational security mistakes revealed China-based infrastructure. Other ShadowPad clusters appear to reflect targeting aligned with PLA theater command areas of responsibility.</p>
<h2>PLA reforms</h2>
<p>In late 2015, PRC leader Xi Jinping announced widespread reforms to the PLA that included the establishment of the Strategic Support Force (PLASSF or SSF). This new branch focuses on modernizing the PLA&#8217;s capabilities in strategic frontiers of space, cyberspace, and the electromagnetic domain. The impact on the PLA&#8217;s cyberespionage mission has been extensive. Many organizations responsible for cyberespionage and signals intelligence (SIGINT) associated with the Third Department of the PLA&#8217;s General Staff Department (commonly known as 3PLA) have been absorbed into the SSF Network Systems Department (NSD). The SSF NSD is also <a href="https://jamestown.org/program/the-peoples-liberation-army-strategic-support-force-update-2019/">believed</a> to be responsible for a broad range of information warfare capabilities beyond cyberespionage, coordinating electronic countermeasures as well as offensive and defensive cyber projects. Figure 7 shows the likely SSF organizational structure.</p>
<p><img decoding="async" alt="PLA SSF likely organizational structure." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-07.ashx?la=en&amp;modified=20220214214034&amp;hash=70EDE00159A8E08668BF9B82418F7524"><br /><em>Figure 7. PLA SSF likely organizational structure. (Source: Institute for National Strategic Studies)</em></p>
<p>As part of the modernization, the PLA replaced its seven military regions with five theater commands: Eastern, Southern, Western, Northern, and Central (see Figure 8). These theater commands orchestrate ground, naval, air, and conventional missile forces for military operations in their geographic area of responsibility. While the exact area of responsibility for each theater command is <a href="https://ndupress.ndu.edu/Portals/68/Documents/stratperspective/china/ChinaPerspectives-10.pdf">ambiguous</a>, they are broadly <a href="https://armypubs.army.mil/epubs/DR_pubs/DR_a/ARN33195-ATP_7-100.3-000-WEB-1.pdf">responsible</a> for specific threats within their respective regions:</p>
<ul>
<li>Eastern Theater Command: Taiwan strait and East China sea</li>
<li>Southern Theater Command: South China sea</li>
<li>Northern Theater Command: Russia and the Korean peninsula</li>
<li>Western Theater Command: Central Asia and the Sino-Indian border</li>
<li>Central Theater Command: defends the capital and possibly provides support to other theater commands</li>
</ul>
<p><img decoding="async" alt="PLA theater command structure." src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/097%20shadowpad/shadowpad-08.ashx?la=en&amp;modified=20220214214035&amp;hash=D62F692FB18AFC8EBC34F2F071E91306"><br /><em>Figure 8. PLA theater command structure. (Source: <a href="https://jamestown.org/wp-content/uploads/2016/02/Updated_The_PLA_s_New_Organizational_Structure_-_What_is_Known__Unknown_and_Speculation_Parts_1_and_2.pdf">The Jamestown Foundation</a>)</em></p>
<p>Prior to the PLA reforms, each military region maintained at least one Technical Reconnaissance Bureau (TRB) to handle SIGINT and cyberespionage activities focused on the military region&#8217;s area of responsibility. The TRBs were <a href="https://project2049.net/wp-content/uploads/2018/05/pla_third_department_sigint_cyber_stokes_lin_hsiao.pdf">distinct</a> from the former 3PLA units that were located across China, but they may have been tasked by the 3PLA.</p>
<p>The relationship between the TRBs and the theater commands is unclear. The TRBs may have been <a href="https://go.recordedfuture.com/hubfs/reports/cta-2021-0616.pdf">consolidated</a> under the SSF NSD alongside former 3PLA units. It is also possible that they continue to target countries in their area of responsibility but under the command and control of the SSF NSD.</p>
<h2>Connections to PLA-linked threat groups</h2>
<p>CTU researchers grouped distinct ShadowPad activity clusters by targeted geographic regions. Clusters align with the documented area of responsibility for three of the theater commands: Northern, Southern, and Western. CTU researchers attribute some of the ShadowPad activity to Chinese threat groups that have been publicly linked to specific PLA units located in the corresponding theater commands:</p>
<ul>
<li><strong>Northern Theater Command:</strong> CTU researchers linked ShadowPad activity to <a href="https://www.secureworks.com/research/threat-profiles/bronze-huntley">BRONZE HUNTLEY</a> and <a href="https://www.secureworks.com/research/bronze-butler-targets-japanese-businesses">BRONZE BUTLER</a>, which are <a href="https://www.fireeye.com/content/dam/fireeye-www/summit/cds-2019/presentations/cds19-executive-s08-achievement-unlocked.pdf">reportedly</a> located in the Northern Theater Command. These threat groups deployed ShadowPad against targets in South Korea, Russia, Japan, and Mongolia. These regions align with the Northern Theater Command&#8217;s focus. In 2021, CTU researchers observed malware and infrastructure overlap between the two threat groups, suggesting close collaboration.</li>
<li><strong>Western Theater Command:</strong> Some ShadowPad activity primarily targeted countries neighboring China&#8217;s western border, such as India and Afghanistan. CTU researchers clustered this activity based on attacker-controlled infrastructure, ShadowPad DLL loader variants such as ICEKILLER, and contextual information from third-party sources. Third-party researchers <a href="https://www.recordedfuture.com/redfoxtrot-china-pla-targets-bordering-asian-countries/">linked</a> some of these campaigns to an individual working on behalf of the Western Theater Command. CTU analysis did not reveal sufficient evidence to corroborate these claims, but the locations and victimology are consistent with threat actors operating on behalf of the Western Theater Command.</li>
<li><strong>Southern Theater Command:</strong> CTU researchers identified activity that used a specific ShadowPad version to target organizations in the South China Sea region. <a href="https://www.secureworks.com/research/threat-profiles/bronze-geneva">BRONZE GENEVA</a> is likely responsible for part of this activity based on overlap between the C2 infrastructure for the Nebulae malware family associated with BRONZE GENEVA and a ShadowPad sample analyzed by CTU researchers.</li>
</ul>
<p>This attribution of ShadowPad campaigns to theater commands is based on the submitter&#8217;s location for ShadowPad malware samples uploaded to the VirusTotal analysis service (potentially indicating the victim&#8217;s country), the C2 domain names that appear to reference specific regions (e.g., cloudvn. info suggests Vietnam targeting), contextual information regarding the activity and victimology, and the absence of evidence that ShadowPad samples with the same attributes were deployed in other regions.</p>
<h2>Conclusion</h2>
<p>Evidence available as of this publication suggests that ShadowPad has been deployed by MSS-affiliated threat groups, as well as PLA-affiliated threat groups that operate on behalf of the regional theater commands. The malware was likely developed by threat actors affiliated with BRONZE ATLAS and then shared with MSS and PLA threat groups around 2019. Given the range of groups leveraging ShadowPad, all organizations that are likely targets for Chinese threat groups should monitor for TTPs associated with this malware. Organizations with operations in or connections to geographic regions covered by the regional theater commands should specifically monitor for known TTPs associated with threat groups likely affiliated with the relevant theater command.</p>
<h2>Threat indicators</h2>
<p>The threat indicators in Table 2 can be used to detect activity related to this threat. Note that IP addresses can be reallocated. The IP addresses and domains may contain malicious content, so consider the risks before opening them in a browser.</p>
<table>
<thead>
<tr>
<th>
            Indicator
            </th>
<th>
            Type
            </th>
<th>
            Context
            </th>
</tr>
</thead>
<tbody readability="173">
<tr>
<td>
            billing.epac.to
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            9d686ceed21877821ab6170a348cc073
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            3ebeb4e08c82b220365b1e7dd0cc199b7<br />65eed91
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            9c28c1b2ff0a84c8b667f128626f28b17<br />3feb07481192e214b5a29b98964a7f9
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            172.197.18.30
            </td>
<td>
            IP address
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr>
<td>
            172.200.21.190
            </td>
<td>
            IP address
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            27d889c351ac2f48d31b91d06061ec8d
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            f5b7ea5e705655a1bc08030b601443088a5af4dd
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            d48e671df571b76ee94c734bdd5272e12<br />fcd1362f1d75138ff547bc2bc0c31ef
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            vsmrcil.casacam.net
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            17e812958704f4ced297731ce47de020
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            57b5ca13d7b2dd9287bdda548ccf7b21c<br />1201464
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            0942f4a488899d5d78b31a0065e49c868<br />9ccda88efc28186e29ee76861ba99da
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            exat.dnset.com
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            fac0b4fe5372d76607c36ccb51e6b7bb
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            952614358b37d2a519d66ee7759c70e31<br />218ed36
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            4557e923602730aab7718b61eeaf3a93e<br />dd0339a3c89c8f7061b9818c2df5203
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            dprouds.casacam.net
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            17268032c7562fa9473bb85018cb1c2c
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            3d1ae0779b304a8d54df1429331584174<br />40ca3ff
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            bf3de88459f85ddd85245e3f1ce3bba65<br />68919bbe46a808ad5d94d5415014926
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            secupdate.kozow.com
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            41ff21ea773b73812d91f91b68280ed3
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            8d0be3bca6c93b1ab396ec4a93a33371c<br />82b6567
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            2e07d66155987216dc8cc095b48dd9714<br />15f0da261b5b26c58a0e3d34f446038
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            goest.mrbonus.com
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            1480d2856e4d57d0c8394ade835493db
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            3dfa0fc7da98d0efbd6dbc4b47e01f669<br />e54ea07
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            69eb1aa0021c9b6905b8f0a354884a67f<br />18d20aa045db20b5b5d59f41c7f201f
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr>
<td>
            phiinoc.dnsdyn.net
            </td>
<td>
            Domain
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            40e7f1a18735819d6cf5f5cff0fb72f4
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            0b75c1507d6849b303fb496ab8afa60c6<br />c3e8624
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="4">
<td>
            bc0c31be0d4784a6f8ad6333767580e61<br />e7bbe500139fe0d111c39475470a312
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader ICEKILLER variant (mscoree.dll)
            </td>
</tr>
<tr readability="2">
<td>
            stratorpriv.lubni23.com
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE HUNTLEY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            59961f8c3d8d6cfb7a378f58ff5c5f30
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE HUNTLEY ShadowPad DLL loader (secur32.dll)
            </td>
</tr>
<tr readability="4">
<td>
            56ff0a3f5d8f67468f1771d38cc6d017a<br />0cd6462
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE HUNTLEY ShadowPad DLL loader (secur32.dll)
            </td>
</tr>
<tr readability="4">
<td>
            0dfd91a0dd5d1143697413ebd50efde24<br />11d07b4113d7d282ca0ec3c9d77d5ed
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE HUNTLEY ShadowPad DLL loader (secur32.dll)
            </td>
</tr>
<tr readability="2">
<td>
            rolesnews.com
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE HUNTLEY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            dfd3b637fc35e850138b33758934f3f7
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE HUNTLEY ShadowPad DLL loader (secur32.dll)
            </td>
</tr>
<tr readability="4">
<td>
            0d0c5e63a9daf3c322667310e1c06c8b8<br />96f7b4c
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE HUNTLEY ShadowPad DLL loader (secur32.dll)
            </td>
</tr>
<tr readability="4">
<td>
            ec6852c341aff9d770debc1ef72fb5795<br />c4d71c1327d57d79d65136cc2a670a4
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE HUNTLEY ShadowPad DLL loader (secur32.dll)
            </td>
</tr>
<tr readability="2">
<td>
            www.cloudvn.info
            </td>
<td>
            Domain name
            </td>
<td>
            ShadowPad C2 server linked to targeting of Vietnamese organizations
            </td>
</tr>
<tr readability="4">
<td>
            0ddd78208c16e9f8174868bdf92eac9b
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            fa639e82ae481a70dffff2c50745ada66<br />0c93aa8
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            244e22147cc1e37543159a95cf4674a61<br />f290af305c1c1e37b69c45b444f9097
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="2">
<td>
            103.255.179.186
            </td>
<td>
            IP address
            </td>
<td>
            ShadowPad C2 server linked to targeting of Vietnamese organizations
            </td>
</tr>
<tr readability="4">
<td>
            f977be4ebb0d06c9a19b37d8bbb37178
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            92c091453295536aef0bac93aa24a2946<br />24266da
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            2e6ef72d05b395224a03a73a50eaee1c9<br />dc682976c99dde5317b76938cb669a4
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr>
<td>
            154.202.198.246
            </td>
<td>
            IP address
            </td>
<td>
            ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            b40dec21d0c3061bef422bb946366cba
            </td>
<td>
            MD5 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            78f59be833fe8a504a0def218d72aef62<br />823bdaf
            </td>
<td>
            SHA1 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            73bb7e7d0743d40a1d967497a5fbb79c0<br />7132eb15a546fa25bbecaf43993a1d2
            </td>
<td>
            SHA256 hash
            </td>
<td>
            ShadowPad DLL loader linked to targeting of Vietnamese organizations (hpqhvsei.dll)
            </td>
</tr>
<tr readability="4">
<td>
            3520e591065d3174999cc254e6f3dbf5
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            47cdaf6c5c3fffeeff1f2c9e6c7649f99<br />ab54932
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            dbb32cb933b6bb25e499185d6db71386a<br />4b5709500d2da92d377171b7ff43294
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            bda94af893973fe675c35e5699d90521
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            41b78af0a34f2d1da8d52d895ee50da26<br />f2a5ab4
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            18c4a15e587b223a3fb4d27eedeb16b81<br />e5c75409d9ffbbe8aeeb7c4c2bd5041
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="2">
<td>
            47.56.228.89
            </td>
<td>
            IP address
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            c3292a51c1b92d7dd08518095bb851f8
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            ea60a4100d7a893079c29a6027d604759<br />f62c63b
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            d8f695730fcf2cb5a894107740be0a0fa<br />9bbae6851b83d396976a678236dec30
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            b1a9afc937a6e7e0d09e5ccd8b2198f5
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            5f751bab830f5470fcbac04b1c165bc0b<br />6e6ecff
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            1402ed922a7efc05a6d9482136598fdb5<br />2afd95cb4e40190ea44a3ba087a58ab
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            3e372906248b215ea0ee853cb4e29dd8
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            c62b977c93979effb48a1614956c2a788<br />abb22fe
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            8d1a5381492fe175c3c8263b6b81fd99a<br />ace9e2506881903d502336a55352fef
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            ffbadead054d1eac270f1a24d02e8a1f
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            c73329dfbe99de4abb93b4fda6310a0c5<br />eedd8f9
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            0371fc2a7cc73665971335fc23f38df2c<br />82558961ad9fc2e984648c9415d8c4e
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="2">
<td>
            ti0wddsnv.wikimedia.vip
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            06539163f71f8bd496db75ccb41db820
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            880fa69a6efd8de68771d3df2f9683107<br />fb484c0
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            a8e5a1b15d42c4da97e23f5eb4a0adfd2<br />9674844ce906a86fa3554fc7e58d553
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            373eacf3ffd1b5722f9d3c1595092b4c
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            363e32fafd2732b3cfb53dfd39bef56da<br />1affd7f
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            8065da4300e12e95b45e64ff8493d9401<br />db1ea61be85e74f74a73b366283f27e
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="2">
<td>
            207.148.98.61
            </td>
<td>
            IP address
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            ea6be331b5fa349a2fa464b062043b0e
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            9605ad1bf0432ffb148d422099e23eaa2<br />6bed4c8
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            04089c1f71d62d50cbd8009dfd557aa1e<br />6db1492a9fa2b35902182c07a0ed1c1
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="2">
<td>
            yjij4bpade.nslookup.club
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            5fe99a8f8cbfe46832478aa9c9634ed6
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            b224ae9ffd8119d773dedb1863d46725c<br />29143f8
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            c602456fae02510ff182b45d4ffb69ee6<br />aae11667460001241685807db2e29c3
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad payload (log.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            6czumi0fbg.symantecupd.com
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="2">
<td>
            Live.musicweb.xyz
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="2">
<td>
            Obo.videocenter.org
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="2">
<td>
            5.188.33.106
            </td>
<td>
            IP address
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            299980c914250bac7522de849f6df24f
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (iviewers.dll)
            </td>
</tr>
<tr readability="4">
<td>
            9a035477c1ef725309ae4afac50ffc18d<br />8194a90
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (iviewers.dll)
            </td>
</tr>
<tr readability="4">
<td>
            9981b9d2024665b7312b673926be96df3<br />4be2dc9779956ff49690968e0265d2d
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (iviewers.dll)
            </td>
</tr>
<tr readability="4">
<td>
            6538263d35b9bb438a9648e904ed7394
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad encrypted payload (iviewers.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            680bcd1b172a3658954931131f8248bf6<br />6dbc5b1
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad encrypted payload (iviewers.dll.dat)
            </td>
</tr>
<tr readability="4">
<td>
            253f474aa0147fdcf88beaae40f3a23bd<br />adfc98b8dd36ae2d81c387ced2db4f1
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad encrypted payload (iviewers.dll.dat)
            </td>
</tr>
<tr readability="2">
<td>
            139.180.141.16
            </td>
<td>
            IP address
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            Teamview.Microsoft.msglocalmicro.com
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="2">
<td>
            Ts.ekaldhfl.club
            </td>
<td>
            Domain name
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad C2 server
            </td>
</tr>
<tr readability="4">
<td>
            246d233f4fcda6f4c1ec1177dbad31b4
            </td>
<td>
            MD5 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            e76049ee244e74729a20f666328d5eeff<br />8d6488f
            </td>
<td>
            SHA1 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
<tr readability="4">
<td>
            136848cfbd59af5dcba0fcfb3257bb714<br />184129f94d1a67def618f39dde7c17d
            </td>
<td>
            SHA256 hash
            </td>
<td>
            BRONZE UNIVERSITY ShadowPad DLL loader (log.dll)
            </td>
</tr>
</tbody>
</table>
<p><em>Table 2. Indicators for this threat.</em></p>
<h2>References</h2>
<p>Threat Intelligence Team. &#x201C;New investigations into the CCleaner incident point to a possible third stage that had keylogger capacities.&#x201D; Avast. March 8, 2018. <a href="https://blog.avast.com/new-investigations-in-ccleaner-incident-point-to-a-possible-third-stage-that-had-keylogger-capacities">https://blog.avast.com/new-investigations-in-ccleaner-incident-point-to-a-possible-third-stage-that-had-keylogger-capacities</a> </p>
<p>Dr Web. &#x201C;Study of the ShadowPad APT backdoor and its relation to PlugX.&#x201D; October 26, 2020. <a href="https://st.drweb.com/static/new-www/news/2020/october/Study_of_the_ShadowPad_APT_backdoor_and_its_relation_to_PlugX_en.pdf">https://st.drweb.com/static/new-www/news/2020/october/Study_of_the_ShadowPad_APT_backdoor_and_its_relation_to_PlugX_en.pdf</a></p>
<p>Fraser, Nalani and Vanderlee, Kelli. &#x201C;Achievement Unlocked: Chinese Cyber Espionage Evolves to Support Higher Mission Levels.&#x201D; FireEye. October 10, 2019. <a href="https://www.fireeye.com/content/dam/fireeye-www/summit/cds-2019/presentations/cds19-executive-s08-achievement-unlocked.pdf">https://www.fireeye.com/content/dam/fireeye-www/summit/cds-2019/presentations/cds19-executive-s08-achievement-unlocked.pdf</a> </p>
<p>Headquarters, Department of the Army (U.S.). &#x201C;Chinese Tactics.&#x201D; August 9, 2021. <a href="https://armypubs.army.mil/epubs/DR_pubs/DR_a/ARN33195-ATP_7-100.3-000-WEB-1.pdf">https://armypubs.army.mil/epubs/DR_pubs/DR_a/ARN33195-ATP_7-100.3-000-WEB-1.pdf</a></p>
<p>Hsieh, Yi-Jhen and Chen, Joey. &#x201C;ShadowPad: A Masterpiece of Privately Sold Malware in Chinese Espionage.&#x201D; Sentinel Labs. August 19, 2020. <a href="https://assets.sentinelone.com/c/Shadowpad?x=P42eqA">https://assets.sentinelone.com/c/Shadowpad?x=P42eqA</a></p>
<p>Insikt Group. &#x201C;Threat Activity Group RedFoxtrot Linked to China&#8217;s PLA Unit 69010; Targets Bordering Asian Countries.&#x201D; Recorded Future. June 16, 2021. <a href="https://www.recordedfuture.com/redfoxtrot-china-pla-targets-bordering-asian-countries/">https://www.recordedfuture.com/redfoxtrot-china-pla-targets-bordering-asian-countries/</a></p>
<p>Kaspersky. &#x201C;ShadowPad: How Attackers hide Backdoor in Software used by Hundreds of Large Companies around the World.&#x201D; August 15, 2017. <a href="https://www.kaspersky.com/about/press-releases/2017_shadowpad-how-attackers-hide-backdoor-in-software-used-by-hundreds-of-large-companies-around-the-world">https://www.kaspersky.com/about/press-releases/2017_shadowpad-how-attackers-hide-backdoor-in-software-used-by-hundreds-of-large-companies-around-the-world</a> </p>
<p>Ni, Adam and Gill, Bates. &#x201C;The People&#8217;s Liberation Army Strategic Support Force: Update 2019.&#x201D; The Jamestown Foundation. May 29, 2019. <a href="https://jamestown.org/program/the-peoples-liberation-army-strategic-support-force-update-2019">https://jamestown.org/program/the-peoples-liberation-army-strategic-support-force-update-2019</a></p>
<p>Prescott, Adam. &#x201C;Chasing Shadows: A deep dive into the latest obfuscation method being used by ShadowPad.&#x201D; PwC. December 8, 2021.<a href="https://www.pwc.co.uk/issues/cyber-security-services/research/chasing-shadows.html"> https://www.pwc.co.uk/issues/cyber-security-services/research/chasing-shadows.html</a></p>
<p>Recorded Future. &#x201C;Threat Activity Group RedFoxtrot Linked to China&#8217;s PLA Unit 69010; Targets Bordering Asian Countries.&#x201D; June 16, 2021. <a href="https://go.recordedfuture.com/hubfs/reports/cta-2021-0616.pdf">https://go.recordedfuture.com/hubfs/reports/cta-2021-0616.pdf</a></p>
<p>Stokes, Mark A.; Lin Jenny; and Hsiao, L.C. Russell. &#x201C;The Chinese People&#8217;s Liberation Army Signals Intelligence and Cyber Reconnaissance Infrastructure.&#x201D; Project 2049 Institute. November 11, 2011. <a href="https://project2049.net/wp-content/uploads/2018/05/pla_third_department_sigint_cyber_stokes_lin_hsiao.pdf">https://project2049.net/wp-content/uploads/2018/05/pla_third_department_sigint_cyber_stokes_lin_hsiao.pdf</a></p>
<p>United States Department of Justice. &#x201C;Seven International Cyber Defendants, Including &#8216;Apt41&#8217; Actors, Charged In Connection With Computer Intrusion Campaigns Against More Than 100 Victims Globally.&#x201D; September 16, 2020. <a href="https://www.justice.gov/opa/pr/seven-international-cyber-defendants-including-apt41-actors-charged-connection-computer">https://www.justice.gov/opa/pr/seven-international-cyber-defendants-including-apt41-actors-charged-connection-computer</a></p>
<p>United States District Court for the District of Columbia. &#x201C;United States of America v. Zhang Haoran, Tan Dailin, Defendants.&#x201D; May 7, 2019. <a href="https://www.justice.gov/opa/press-release/file/1317216/download">https://www.justice.gov/opa/press-release/file/1317216/download</a></p>
<p>United States District Court for the Eastern District of Virginia. &#x201C;Civil Action No: 1:17-cv-01224.&#x201D; October 26, 2017. <a href="https://www.noticeofpleadings.net/barium/files/COMPLAINT_AND_SUMMONS/Complaint.pdf">https://www.noticeofpleadings.net/barium/files/COMPLAINT_AND_SUMMONS/Complaint.pdf</a></p>
<p>Wuthnow, Joel and Saunders, Phillip C. &#x201C;Chinese Military Reforms in the Age of Xi Jinping: Drivers, Challenges, and Implications.&#x201D; Institute for National Strategic Studies. March 2017. <a href="https://ndupress.ndu.edu/Portals/68/Documents/stratperspective/china/ChinaPerspectives-10.pdf">https://ndupress.ndu.edu/Portals/68/Documents/stratperspective/china/ChinaPerspectives-10.pdf</a></p>
<p>Zetter, Kim. &#x201C;Hackers Hijacked ASUS Software Updates to Install Backdoors on Thousands of Computers.&#x201D; Vice. March 25, 2019. <a href="https://www.vice.com/en/article/pan9wn/hackers-hijacked-asus-software-updates-to-install-backdoors-on-thousands-of-computers">https://www.vice.com/en/article/pan9wn/hackers-hijacked-asus-software-updates-to-install-backdoors-on-thousands-of-computers</a> </p>
<p>The post <a href="https://onlinepitstop.com/2022/03/10/shadowpad-malware-analysis/">ShadowPad Malware Analysis</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2022/03/10/shadowpad-malware-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Undetected Azure Active Directory Brute-Force Attacks</title>
		<link>https://onlinepitstop.com/2021/10/03/undetected-azure-active-directory-brute-force-attacks/</link>
					<comments>https://onlinepitstop.com/2021/10/03/undetected-azure-active-directory-brute-force-attacks/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 03 Oct 2021 14:47:57 +0000</pubDate>
				<category><![CDATA[Threats & Defenses]]></category>
		<guid isPermaLink="false">http://onlinepitstop.com/2021/10/03/undetected-azure-active-directory-brute-force-attacks/</guid>

					<description><![CDATA[<p>Summary In late June 2021, Secureworks&#xAE; Counter Threat Unit&#x2122; (CTU) researchers discovered a flaw in the protocol used by the Azure Active Directory Seamless Single Sign-On feature. This flaw allows threat actors to perform single-factor brute-force attacks against Azure Active Directory (Azure AD) without generating sign-in events in the targeted organization&#x2019;s tenant. CTU&#x2122; researchers reported</p>
<p>The post <a href="https://onlinepitstop.com/2021/10/03/undetected-azure-active-directory-brute-force-attacks/">Undetected Azure Active Directory Brute-Force Attacks</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Summary</h3>
<p>In late June 2021, Secureworks&#xAE; Counter Threat Unit<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (CTU) researchers discovered a flaw in the protocol used by the <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso" target="_blank">Azure Active Directory Seamless Single Sign-On</a> feature. This flaw allows threat actors to perform single-factor brute-force attacks against <a rel="noopener noreferrer" href="https://azure.microsoft.com/en-us/services/active-directory/" target="_blank">Azure Active Directory</a> (Azure AD) without generating sign-in events in the targeted organization&#x2019;s tenant.</p>
<p>CTU<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> researchers reported the flaw to Microsoft on June 29. Microsoft confirmed the behavior on July 21 but ruled that it was &#x201C;by design.&#x201D; As a result, it is unclear if or when the flaw will be fixed. In the meantime, organizations are vulnerable to stealthy brute-force attacks.</p>
<h3>Azure AD Seamless Single Sign-On</h3>
<p>The Azure AD Seamless Single Sign-On (SSO) improves the user experience of services using the Azure AD identity platform, such as Microsoft 365. When Seamless SSO is configured, users logged in to their domain-joined computer are automatically logged into Azure AD.</p>
<p>The Seamless SSO feature uses the <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/b4af186e-b2ff-43f9-b18e-eedb366abf13" target="_blank">Kerberos</a> protocol, which is the standard authentication method of Windows networks. During the Seamless SSO configuration, a computer object named AZUREADSSOACC is created in the on-premises Active Directory (AD) domain and is assigned the <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/windows/win32/ad/service-principal-names" target="_blank">service principal name</a> (SPN) &#x201C;https: //autologon . microsoftazuread-sso . com&#x201D;. That name and the password hash of the AZUREADSSOACC computer object are sent to Azure AD. The following autologon windowstransport endpoint accepts Kerberos tickets:</p>
<pre>https: //autologon . microsoftazuread-sso . com/<domain>/winauth/trust/2005/windowstransport</domain></pre>
<p>The Seamless SSO occurs automatically without any user interaction (see Figure 1).</p>
<p><img loading="lazy" decoding="async" alt="" height="493" width="636" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/096%20undetected%20azure%20active%20directory/azure-attack-image1.ashx?la=en&amp;modified=20210929141859&amp;hash=2C18D8BF31CD18299727C3FB84D209A2"><br /><em>Figure 1. Typical Seamless SSO process. (Source: Secureworks)</em></p>
<ol>
<li>	A user tries to access Azure AD.
    </li>
<p></p>
<li>	Azure AD recognizes that user&#x2019;s tenant is configured to use Seamless SSO and redirects the user&#x2019;s browser to autologon.
    </li>
<p></p>
<li>	The user&#x2019;s browser tries to access Azure AD.
    </li>
<p></p>
<li>	Autologon sends a Kerberos authentication challenge.
    </li>
<p></p>
<li>	The user&#x2019;s browser tries to authenticate as the logged-in user and requests a Ticket Granting Ticket (TGT).
    </li>
<p></p>
<li>	The on-premises AD sends a TGT to the user&#x2019;s browser.
    </li>
<p></p>
<li>The user&#x2019;s browser requests autologon access from the on-premises AD and provides the TGT as proof of identity.
    </li>
<p></p>
<li>	The on-premises AD locates a corresponding computer object and creates a service ticket (ST), which is encrypted using the AZUREADSSOACC computer account&#x2019;s password hash.
    </li>
<p></p>
<li>	The user&#x2019;s browser makes another request to autologon and provides the ST in the request&#x2019;s Authorization header.
    </li>
<p></p>
<li>	Autologon decrypts the ST using the AZUREADSSOACC computer account&#x2019;s password hash, issues a DesktopSSOToken access token for the user, and sends this token to user&#x2019;s browser via a redirect request to Azure AD. DesktopSSOToken is an opaque blob encrypted by Microsoft, so the actual content is unknown.
    </li>
<p></p>
<li>	The user&#x2019;s browser makes another request to Azure AD using the DesktopSSOToken as the Security Assertion Markup Language (<a rel="noopener noreferrer" href="http://saml.xml.org/saml-specifications" target="_blank">SAML</a>) assertion.</li>
</ol>
<p></p>
<h3>Flaw in the protocol</h3>
<p>In addition to the windowstransport authentication endpoint, there is an <a rel="noopener noreferrer" href="https://securecloud.blog/2019/12/26/reddit-thread-answer-azure-ad-autologon-endpoint/" target="_blank">usernamemixed</a> endpoint for username and password authentication:</p>
<pre>https: //autologon . microsoftazuread-sso . com/<domain>/winauth/trust/2005/usernamemixed</domain></pre>
<p>Figure 2 shows the username and password login process.</p>
<p><img loading="lazy" decoding="async" alt="" height="241" width="489" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/096%20undetected%20azure%20active%20directory/azure-attack-image2.ashx?la=en&amp;modified=20210929141859&amp;hash=A9BE4115BE532F95791D560394D766C0"><br /><em>Figure 2. Autologon username and password login process. (Source: Secureworks)</em></p>
<ol readability="9">
<li>	An XML file containing the username and password are sent to the usernamemixed endpoint (see Figure 3).</li>
<p><img loading="lazy" decoding="async" alt="" height="321" width="589" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/096%20undetected%20azure%20active%20directory/azure-attack-image3.ashx?la=en&amp;modified=20210929141900&amp;hash=F8C233511C82B91F739251AFA7491B5D"><br /><em>Figure 3. XML file containing username and password. (Source: Secureworks)</em></p>
<li>	Autologon tries to authenticate to Azure AD with the provided credentials.</li>
<p></p>
<li>	If authentication is successful, autologon issues an XML file containing a DesktopSSOToken access token (see Figure 4). If authentication is unsuccessful, autologon generates an error (see Figure 5).</li>
<p><img loading="lazy" decoding="async" alt="" height="425" width="565" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/096%20undetected%20azure%20active%20directory/azure-attack-image4.ashx?la=en&amp;modified=20210929141900&amp;hash=A02754430E14118DFE11568D0FCFF517"><br /><em>Figure 4. XML file containing the DesktopSSOToken. (Source: Secureworks)</em></p>
<p><img loading="lazy" decoding="async" alt="" height="289" width="571" src="https://content.secureworks.com/-/media/Images/Insights/Resources/Threat%20Analysis/096%20undetected%20azure%20active%20directory/azure-attack-image5.ashx?la=en&amp;modified=20210929141900&amp;hash=17EC5CEEB9D856394F9C59DEA91C10FE"><br /><em>Figure 5. Authentication error message. (Source: Secureworks)</em></p>
<li>	If authentication is successful, the DesktopSSOToken access token is sent to Azure AD.</li>
</ol>
<p>Table 1 lists the possible returned error codes. Not all error codes indicate brute-force attempts. For instance, error AADSTS50053 indicates that the username and password were correct, but the account was locked.</p>
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td valign="top">
            Error code
            </td>
<td valign="top">
            Explanation
            </td>
</tr>
</thead>
<tbody readability="5.5">
<tr>
<td valign="top">
            AADSTS50034
            </td>
<td valign="top">
            The user does not exist
            </td>
</tr>
<tr readability="3">
<td valign="top">
            AADSTS50053
            </td>
<td valign="top">
            The user exists and the correct username and password were entered, but the account is locked
            </td>
</tr>
<tr readability="2">
<td valign="top">
            AADSTS50056
            </td>
<td valign="top">
            The user exists but does not have a password in Azure AD
            </td>
</tr>
<tr readability="3">
<td valign="top">
            AADSTS50126
            </td>
<td valign="top">
            The user exists, but the wrong password was entered
            </td>
</tr>
<tr readability="3">
<td valign="top">
            AADSTS80014
            </td>
<td valign="top">
            The user exists, but the maximum Pass-through Authentication time was exceeded
            </td>
</tr>
</tbody>
</table>
<p><em>Table 1. Autologon error codes.</em></p>
<p>CTU researchers observed that successful authentication events generate sign-ins logs in step 4. However, autologon&#x2019;s authentication to Azure AD (step 2) is not logged. This omission allows threat actors to utilize the usernamemixed endpoint for undetected brute-force attacks.</p>
<h3>Conclusion</h3>
<p>Threat actors can exploit the autologon usernamemixed endpoint to perform brute-force attacks. This activity is not logged in Azure AD sign-ins logs, enabling it to remain undetected. As of this publication, tools and countermeasures to detect brute-force or password spray attacks are based on sign-ins log events.</p>
<p>CTU analysis indicates that the autologon service is implemented with Azure Active Directory Federation Services (AD FS). Microsoft AD FS <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/best-practices-securing-ad-fs#disable-ws-trust-windows-endpoints-on-the-proxy-ie-from-extranet" target="_blank">documentation</a> recommends disabling internet access to the windowstransport endpoint. However, that access is required for Seamless SSO. Microsoft <a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/best-practices-securing-ad-fs#optional-min-set-of-endpoints-proxy-enabled-for-azure-ad--office-365" target="_blank">indicates </a>that the usernamemixed endpoint is only required for legacy Office clients that predate the Office 2013 May 2015 update.</p>
<p>The exploitation is not limited to organizations using Seamless SSO. Threat actors can exploit the autologon usernamemixed endpoint in any Azure AD or Microsoft 365 organization, including organizations that use Pass-through Authentication (<a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta" target="_blank">PTA</a>). Users without an Azure AD password are not affected.</p>
<p>As of this publication, there are no known mitigation techniques to block use of the autologon usernamemixed endpoint. Multi-factor authentication (<a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks" target="_blank">MFA</a>) and conditional access (<a rel="noopener noreferrer" href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview" target="_blank">CA</a>) do not prevent exploitation because they are applied after successful authentication.</p>
<p>The post <a href="https://onlinepitstop.com/2021/10/03/undetected-azure-active-directory-brute-force-attacks/">Undetected Azure Active Directory Brute-Force Attacks</a> appeared first on <a href="https://onlinepitstop.com">Online Pitstop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://onlinepitstop.com/2021/10/03/undetected-azure-active-directory-brute-force-attacks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
