Skip to main content

Twitter Remote Access Trojan (Twittersploit)

Developed a malware sample that leverages Twitter direct messaging as a channel for command and control.

Web Service Command and Control

Have recently been structuring a lot of my penetration testing efforts around the MITRE ATT&CK framework. One technique that specifically caught my attention while doing an assessment based on the Command & Control (C&C) section was the T1102 - Web Service C&C technique. It references multiple malware samples that leveraged Twitter as a C&C channel. These samples included:
This technique proved to be uniquely effective for a few reasons:
  1. Traditional C&C Channels Blocked - Many organizations are now taking a (quasi) white-listing approach to URL filtering (i.e. blocking unclassified site categories), thereby blocking hastily established C&C channels over HTTP(S)
  2. Web Service Availability - More and more organizations are opening up corporate infrastructure to social media web services (such as Twitter)
  3. Covert Channel - Most security monitoring teams are not going to suspect command and control traffic to be destined for twitter.com
  4. Privacy Considerations - Many organizations that do SSL/TLS termination (to perform deep packet inspection) will often white-list social media sites to be conscientious of employee privacy, thereby making it impossible to detect C&C operations over these channels
I was unable to find a sample of any of the above mentioned malware. But after some consideration, decided that implementation of this technique should not be too difficult to accomplish.

Anatomy of Command & Control Malware

Any command and control malware includes at least two components.
  1. Bi-directional Communication Channel - To send commands from the C2 server to the victim, and send command results from the victim back to the C2 server.
  2. Code Execution Functionality - To execute commands (on demand) on the victim system, as communicated by the C2 server.
Personally (like many hacker types), my go-to language of choice is Python. So I decided to write the code in Python, then use pyinstaller to compile into stand-alone binaries.

My plan for malware operations included the following:
  1. Upon execution of malware, the malware would use the Twitter DM (Direct Message) API call to send a message to a Twitter C2 account, letting it know that a session has been established
  2. On a routine interval (every 2 seconds), it would use the DM API to see if any new messages were received
  3. When a new message is received, the malware would execute the code locally using os.popen(command)
  4. The malware would then send the response from the command back to the C2 account using the DM API

Github Repository

Proof of Concept

Proof of Concept Code

Surprisingly, this malware sample was EXTREMELY easy to write. Probably only about ~20 lines of functional code for the whole thing (admittedly the rest is all fluff -- I mean...there's even an ASCII bird).

Comments

Popular posts from this blog

Bootstrap Fail - Persistent XSS via Opportunistic Domain Sniping

This is the story of how a failed Bootstrap implementation on a website allowed me to gain JavaScript code execution into thousands of user browsers. How I Found It? Before I get into the story, I'll quickly explain how I found this vulnerability in the first place.  I have started developing a new opportunistic approach for acquiring persistent XSS (Cross Site Scripting) on various web-services across the Internet.  This methodology consists of the following steps: Use custom web-crawler to spider web services across the Internet and scrape source code. It iterates through IP addresses and hits the web-root content for every IP address. It then identifies websites that are using externally hosted JavaScript. This is achieved for each server by… Reviewing the HTML source code for <script> tags with a source (src) value containing a full web-address (rather than a local path). An example would be <script type='text/javascript' src='https://domain.name/path/to/ho

Bypassing CAPTCHA with Visually-Impaired Robots

As many of you have probably noticed, we rely heavily on bot automation for a lot of the testing that we do at Sociosploit.  And occasionally, we run into sites that leverage CAPTCHA ("Completely Automated Public Turing Test To Tell Computers and Humans Apart") controls to prevent bot automation.   Even if you aren't familiar with the name, you've likely encountered these before. While there are some other vendors who develop CAPTCHAs, Google is currently the leader in CAPTCHA technology.  They currently support 2 products (reCAPTCHA v2 and v3).  As v3 natively only functions as a detective control, I focused my efforts more on identifying ways to possibly bypass reCAPTCHA v2 (which functions more as a preventative control). How reCAPTCHA v2 Works reCAPTCHA v2 starts with a simple checkbox, and evaluates the behavior of the user when clicking it.  While I haven't dissected the underlying operations, I assume this part of the test likely makes determination

Building Bots with Mechanize and Selenium

The Sociosploit team conducts much of its research into the exploitation of social media using custom built bots. On occasion, the team will use public APIs (Application Programming Interfaces), but more often than not, these do not provide the same level of exploitative capabilities that could be achieved through browser automation. So to achieve this end, the Sociosploit team primarily uses a combination of two different Python libraries for building web bots for research. Each of the libraries have their own advantages and disadvantages. These libraries include: Mechanize Pros: Very lightweight, portable, and requires minimal resources Easy to initially configure and install Cuts down on superfluous requests (due to absense of JavaScript) Cons: Does not handle JavaScript or client-side functionality Troubleshooting is done exclusively in text Selenium Pros: Operations are executed in browser, making JavaScript rendering and manipulation easy Visibility of browse