Pardot CRM Attack

Netskope

On 5 August 2019, Netskope Threat Research Labs discovered an attack campaign propagated through Pardot, a cloud-based Customer Relationship Management (CRM) by Salesforce. The attack kill chain begins with the delivery of a zip file, containing a lnk file that downloads the next stage of the attack, a Trickbot payload from Google docs. 

This attack is noteworthy for the following reasons

  • Malicious files residing inside cloud CRM services are typically viewed as internal files
  • Users of cloud CRM platforms have a high level of trust in the software because they view the data and associated “links” as internal (even though they are in the cloud)

In this blog, we will provide an analysis of the attack kill chain and how these types of attacks can be prevented with threat protection policies that offer app-level granularity.

Netskope Detection

Netskope Advanced Threat Protection detects the malware associated with these attacks as Gen.Malware.Detect.By.TI.

Disclosure

Netskope reported the associated Pardot sites hosting malware to the Salesforce security team on 5 August 2019. Additionally, the google docs hosting malware was reported to Google on 6 August 2019.

CRM as an attack vector

A large number of enterprises provide their vendors and partners access to their CRM for uploading documents such as invoices, purchase orders, etc. (and often these happen as automated workflows). The enterprise has no control over the vendor or partner device and, more importantly, over the files being uploaded from them. In many cases, vendor- or partner-uploaded files carry with them a high level of implicit trust.

This is a critical compromise, since some of the users may be operating on a device that they view as relatively hardened against malware. This makes them less likely to scrutinize the attachment. That said, other users involved in the customer relationship process may be accessing the CRM from a compromised endpoint. As per our analysis, and to the best of our knowledge, we have discovered the first attack of this nature from Pardot CRM.  This means that users are also likely to be less suspicious of this particular app because they are unaware that it could be compromised.

Attack Kill chain

The attack begins with the ZIP archive containing a lnk file downloaded from Pardot storage. On execution, the lnk file downloads the next stage executable payload masqueraded as PDF file from Google docs. The depiction of the attack kill chain is shown in Figure 1.

Figure 1: Attack kill chain 

Technical Analysis

The malware we first identified was a zip file delivered via pardot link, https://storage.pardot[.]com/120642/87655/Readme_Print.zip. The ZIP file contained a lnk file, Readme_Print.doc.lnk with an argument to load a script file in the %temp% with an argument as shown in Figure 2 .

Figure 2: Command line argument used by the link file

The malware authors used a clever tactic in appending the malicious code after the argument function to evade traditional security scanners. On a similar note, this tactic even evades the tools like lnk-parser, which normally doesn’t display this data.

The obfuscated script is present after the NetBIOS name field in the lnk file as shown in Figure 3.

Figure 3: Obfuscated VBcode in the lnk file

The script used character obfuscation to mask the code. The deobfuscated script can be easily obtained by changing the “execute” into “wscript.echo”. An excerpt of the obfuscated script is shown in Figure 4.

Figure 4: Deobfuscated VBcode

As mentioned in the above image, this script downloads the next stage payload from Google docs. A masqueraded executable (PE) file named “3829_93_93.pdf” is downloaded to the %temp% location from Google docs and renamed to NaFhI.exe and detonated. 

The second stage payload is a Visual basic executable belonging to the malware family named Trickbot, that performs code injection and contains many infostealer modules that steal banking related data. This malware family has also been reported in a Salesforce Knowledge base article.

The events captured by our Netskope Advanced Heuristic analysis engine, Netskope AI powered by Cylance and Netskope Cloud Sandbox is shown in Figure 5, Figure 6 and Figure 7.

Figure 5: Events from Netskope Advanced Heuristics

Figure 6: Events from Netskope AI

Figure 7: Events from Netskope Cloud Sandbox

The behavioral execution flow captured by the Netskope Cloud Sandbox is shown in Figure 8.

Figure 8: Execution flow in Netskope Cloud Sandbox.

The malware also posts data to the C2 172.238.117[.]187 as shown in Figure 9.

Figure 9: C2 connection to 172.238.117.187

VirusTotal records show similar post request URLs reported from this IP from late June 2019.

Attack campaign Threat Intel

Based on the attack pattern, passive DNS results and our own threat intelligence framework, we identified 12 similar URLs delivering malware from Pardot Storage. Additionally, we identified 16 lnk files attributed to the NetBIOS name “win-jbf0q9el659”. Based on the timeline and events, we expect the threat actors will continue to scale these attacks across potential targets.

Conclusion

This post details the discovery of a malware hosted and propagated through Pardot CRM. Cloud CRM services store an organization’s most critical customer data, and deliver those data to corporate users via the web. Malicious files residing in popular cloud CRM services can be shared/collaborated on within an organization’s cloud CRM service to make their way into cloud CRM services, thereby creating a new malware attack and propagation vector. 

While Netskope Threat Research Labs has reached out to SalesForce to take down the attack elements, we will continue to monitor the delivery mechanism and developments of this campaign. 

Indicators of Compromise

Hashes → ZIP files

7df177b164c352ceccdab988a7ee255d

12f6fd9f27681bf86e99cce8160b33bf

b2e936d3b529486ccb27382bd0c8d174

3b682290a0a9c09a213c11d1e83f87c3

34bbe2d74ae0c941f796c4f4243c465d

2c13e04f08d5f0042645420babd7b721

126d011a71acb1206d545df7ecbb4de3

9eecbb8c232ac55e663b20ddc86ef83d

466828341e2fe5358c145827618157ae

3593c4ce813c5faf1b5cdd4cd1f781e8

1153b0f48b78da341f0dbd85a7b15d71

Hashes → lnk files

95d70dee15417cc1872eb813fc23c3a1

ee4e5b2df114a4f76238a0a8b012f46c

c17cd9e49cecd49cf957bc9eb5f851c8

12544f796e57cbddbda1dcb8993ee914

9f306aca85874e9202a2c50d21876065

eec8649922819af1fab6000ea8dee1ed

4a1e42387c11beee2f6ed714e1cc0d28

795d6f1601eca20f31ae83b602ee328e

9bae6843b4d82444f80727fecec59c09

35d7a9f5549bf968b02b1971b57801a5

acfb9f89c421d4b52dd9a8ef86967cd2

Hashes →  Second stage Downloader

f4c2cb6270631260d5b8d9ff00fbfddf

4abb6f6cbd18258b9ef05083c2a817ca

7df9534d3c477feda474bf3de036d4d9

c444894cc5d28eaf1daad16d5d8832fa