Data Obfuscation

Command and control (C2) communications are hidden (but not necessarily encrypted) in an attempt to make the content more difficult to discover or decipher and to make the communication less conspicuous and hide commands from being seen. This encompasses many methods, such as adding junk data to protocol traffic, using steganography, commingling legitimate traffic with C2 communications traffic, or using a non-standard data encoding system, such as a modified Base64 encoding for the message body of an HTTP request.

ID: T1001

Tactic: Command And Control

Platform:  Linux, macOS, Windows

Data Sources:  Packet capture, Process use of network, Process monitoring, Network protocol analysis

Requires Network:  Yes

Version: 1.0



APT28 added "junk data" to each encoded string, preventing trivial decoding without knowledge of the junk removal algorithm. Each implant was given a "junk length" value when created, tracked by the controller software to allow seamless communication but prevent analysis of the command protocol on the wire.[1]


The Axiom group has used other forms of obfuscation, include commingling legitimate traffic with communications traffic so that network streams appear legitimate. Some malware that has been used by Axiom also uses steganography to hide communication in PNG image files.[2]


Some Backdoor.Oldrea samples use standard Base64 + bzip2, and some use standard Base64 + reverse XOR + RSA-2048 to decrypt data received from C2 servers.[3]


Newer variants of BACKSPACE will encode C2 communications with a custom system.[4]


After encrypting C2 data, BADNEWS converts it into a hexadecimal representation and then encodes it into base64.[5]


Bankshot generates a false TLS handshake using a public certificate to disguise C2 network communications.[6]

Cobian RAT

Cobian RAT obfuscates communications with the C2 server using Base64 encoding.[7]


Daserf can use steganography to hide malicious code downloaded to the victim.[8]


Downdelph inserts pseudo-random characters between each original character during encoding of C2 network requests, making it difficult to write signatures on them.[9]


When the Duqu command and control is operating over HTTP or HTTPS, Duqu uploads data to its controller by appending it to a blank JPG file.[10]


FakeM C2 traffic attempts to evade detection by resembling data generated by legitimate messenger applications, such as MSN and Yahoo! messengers.[11]


H1N1 obfuscates C2 traffic with an altered version of base64.[12]


HAMMERTOSS is controlled via commands that are appended to image files.[13]


HOPLIGHT has utilized Zlib compression to obfuscate the communications payload.



The Ixeshe malware uses custom Base64 encoding schemes to obfuscate data command and control traffic in the message body of HTTP requests.[15]

P2P ZeuS

P2P ZeuS added junk data to outgoing UDP packets to peer implants.[16]


QUADAGENT encodes C2 communications with base64.[17]


RogueRobin base64 encodes strings that are sent to the C2 over its DNS tunnel.[18]


ZeroT has retrieved stage 2 payloads as Bitmap images that use Least Significant Bit (LSB) steganography.[19][20]


Network intrusion detection and prevention systems that use network signatures to identify traffic for specific adversary malware can be used to mitigate activity at the network level. Signatures are often for unique indicators within protocols and may be based on the specific obfuscation technique used by a particular adversary or tool, and will likely be different across various malware families and versions. Adversaries will likely change tool C2 signatures over time or construct protocols in such a way as to avoid detection by common defensive tools. [21]


Analyze network data for uncommon data flows (e.g., a client sending significantly more data than it receives from a server). Processes utilizing the network that do not normally have network communication or have never been seen before are suspicious. Analyze packet contents to detect communications that do not follow the expected protocol behavior for the port that is being used. [21]