Volatility Plugin for Detecting Cobalt Strike Beacon
JPCERT/CC has observed some Japanese organisations being affected by cyber attacks leveraging “Cobalt Strike” since around July 2017. It is a commercial product that simulates targeted attacks [1], often used for incident handling exercises, and likewise it is an easy-to-use tool for attackers. Reports from LAC [2] and FireEye [3] describe details on Cobalt Strike and actors who conduct attacks using this tool.
Cobalt Strike is delivered via a decoy MS Word document embedding a downloader. This will download a payload (Cobalt Strike Beacon), which will be executed within the memory. Since Cobalt Strike Beacon is not saved on the filesystem, whether a device is infected cannot be confirmed just by looking for the file itself. There is a need to look into memory dump or network device logs.
This article is to introduce a tool that we developed to detect Cobalt Strike Beacon from the memory. It is available on GitHub - Feel free to try from the following webpage:
JPCERTCC/aa-tools · GitHub
https://github.com/JPCERTCC/aa-tools/blob/master/cobaltstrikescan.py
Tool details
This tool works as a plugin for The Volatility Framework (hereafter “Volatility”), a memory forensic tool. Here are the functions of cobaltstrikescan.py:
- cobaltstrikescan: Detect Cobalt Strike Beacon from memory image
- cobaltstrikeconfig: Detect Cobalt Strike Beacon from memory image and extract configuration
To run the tool, save cobaltstrikescan.py in ”contrib/plugins/malware” folder in Volatility, and execute the following command:
$python vol.py [cobaltstrikescan|cobaltstrikeconfig] –f <memory.image> ––profile=<profile>
Figure 1 shows an example output of cobaltstrikescan. You can see the detected process name (Name) and process ID (PID) indicating where the malware is injected to.
Figure 2 shows an example output of cobalrstrikeconfig. Please refer to Appendix A for configuration details for Cobalt Strike Beacon.
In closing
Actors using Cobalt Strike continue attacks against Japanese organisations. We hope this tool helps detecting the attack in an early stage.
- Takuya Endo
(Translated by Yukako Uchida)
Reference
[1] Strategic Cyber LLC:COBALT STRIKE ADVANCED THREAT TACTICS FOR PANETRATION TESTERS
[2] LAC: New attacks by APT actors menuPass (APT10) observed (Japanese)
https://www.lac.co.jp/lacwatch/people/20180521_001638.html
[3] FireEye: Privileges and Credentials: Phished at the Request of Counsel
https://www.fireeye.com/blog/threat-research/2017/06/phished-at-the-request-of-counsel.html
[4] Cybereason: Operation Cobalt Kitty: A large-scale APT in Asia carried out by the OceanLotus Group
https://www.cybereason.com/blog/operation-cobalt-kitty-apt
Appendix A
Offset | Length | Description |
---|---|---|
0x00 | 2 | index (Refer to Table B) |
0x02 | 2 |
Data length 1 = 2 byte, 2 = 4 byte, 3 = as specified in 0x04 |
0x04 | 2 | Data length |
0x06 | As specified in 0x04 | Data |
Offset | Description | Remarks |
---|---|---|
0x01 | BeaconType | 0=HTTP, 1=Hybrid HTTP and DNS, 8=HTTPS |
0x02 | Port number | |
0x03 | Polling time | |
0x04 | Unknown | |
0x05 | Jitter | Ratio of jitter in polling time (0-99%) |
0x06 | Maxdns | Maximum length of host name when using DNS (0-255) |
0x07 | Unknown | |
0x08 | Destination host | |
0x09 | User agent | |
0x0a | Path when communicating HTTP_Header2 | |
0x0b | Unknown | |
0x0c | HTTP_Header1 | |
0x0d | HTTP_Header2 | |
0x0e | Injection process | |
0x0f | Pipe name | |
0x10 | Year | Stops operating after the specified date by Year, Month, Day |
0x11 | Month | |
0x12 | Day | |
0x13 | DNS_idle | |
0x14 | DNS_Sleep | |
0x1a | HTTP_Method1 | |
0x1b | HTTP_Method2 | |
0x1c | Unknown | |
0x1d | Process to inject arbitrary shellcode (32bit) | |
0x1e | Process to inject arbitrary shellcode (64bit) | |
0x1f | Unknown | |
0x20 | Proxy server name | |
0x21 | Proxy user name | |
0x22 | Proxy password | |
0x23 | AccessType |
1 = Do not use proxy server 2 = Use IE configuration in the registry 4 = Connect via proxy server |
0x24 | create_remote_thread | Flag whether to allow creating threads in other processes |
0x25 | Not in use |