GameOver Zeus: How Defenders Broke a Peer-to-Peer Botnet

Part 2 of this series ended with a stalemate. Conficker signed its updates, generated thousands of domains a day and kept a peer-to-peer fallback. Defenders could keep its authors out, but they could never take the botnet over.

GameOver Zeus had the same three defences, and it was run by people who used it every day to steal money. From September 2011 to May 2014 it was one of the most profitable criminal botnets in the world: the FBI put the losses at more than $100 million. Yet on 30 May 2014 an international operation, later known as Operation Tovar, took control of its peer-to-peer network within hours. Its operator tried to win it back and gave up after about five.

This is Part 3 of A Short History of Botnets: how a peer-to-peer botnet was built to survive a takedown, and how defenders found the one layer it could not protect.

A note on the exhibits. As before, the exhibits are reconstructions or illustrations built from published analyses, mainly Dell SecureWorks’ protocol research and Fox-IT’s report on the group behind the botnet. Each one says which kind it is. The takedown itself is described publicly only at a high level, and I have not filled the gaps with guesses.

Lineage: from a toolkit to a private club

GameOver Zeus grew out of ZeuS, the banking trojan that defined the genre. According to Fox-IT’s report, presented at Black Hat 2015 with the FBI’s lead agent on the case, its author, known as Slavik, created ZeuS around 2005 and 2006. From 2007 its “webinjects”, configuration files that rewrote banking pages inside the victim’s browser, became the de facto standard for this kind of fraud.

The key events, in short:

DateEvent
May 2014Operation Tovar takes over the peer-to-peer network
Spring 2012Microsoft’s civil action against ZeuS botnets; GameOver is barely affected
September 2011GameOver Zeus launches: a private, peer-to-peer version of ZeuS 2.1
2011ZeuS source code leaks, spawning Citadel, Ice-IX and other forks
Late 2010Slavik announces he is stepping back from selling ZeuS

The “retirement” in 2010 was not what it looked like. While the public ZeuS kit faded into forks, Slavik moved to a private operation. The group behind it called itself the “business club”: more than 50 people, including fraud specialists, mule recruiters, technical support and outside suppliers. Members paid to join and shared profits. Slavik ran the peer-to-peer network and the back-end infrastructure.

The name came from the server side. Fox-IT traced it to the command gate script, gameover2.php. The botnet kept an average of about 200,000 active infections for nearly three years, and up to 27 separate botnets shared its peer-to-peer network, each with its own back end.

Architecture: three layers between victim and operator

Coreflood had one layer: bots talked straight to a handful of servers. GameOver Zeus put two layers in between, so that no single seizure could reach the operators. The best public description of the design is Dell SecureWorks’ 2012 analysis by Brett Stone-Gross.

The peer-to-peer layer. Every infected machine was a node in a network loosely based on Kademlia, the design behind many file-sharing networks. Each node had a 20-byte ID, listened on a random TCP and UDP port between 10,000 and 30,000, and stored up to 150 neighbours. Short control messages, such as “what version do you have?” and “give me some peers”, went over UDP; a peer-list reply held up to 10 entries. Larger transfers, such as configuration files, binary updates and stolen data, went over TCP.

The proxy layer. A subset of bots, reachable from the Internet, acted as proxy nodes. Ordinary bots handed stolen data, encrypted with RC4, to these proxies, which relayed it upward. The messages that announced which nodes were proxies were themselves signed, so an outsider could not simply declare a machine of its own to be one.

The back end. Behind the proxies sat the command servers, hidden behind further reverse proxies and, by 2014, a bulletproof hosting provider that handed out fresh IP addresses within days when old ones were blocked. Up to 27 separate botnets, each with its own back end, shared the same peer-to-peer network.

Two safety nets completed the design. Configuration files and binaries were digitally signed: Fox-IT notes that pushing a command or update required an RSA private key, and Slavik held it. And if a new bot could not reach any of its hard-coded peers, it fell back to a domain generation algorithm: 1,000 domains a day, 32 to 48 characters long, under .com, .net, .org, .biz, .info and .ru, used only to fetch a fresh list of live peers.

Exhibit 1. The layers between a victim and the operators, and the two places Operation Tovar later went in.

Diagram: GameOver Zeus layers from infected bots through proxy bots and C2 reverse proxies to back ends; signed commands flow back to the bots; Operation Tovar entered at the peer layer with defender-controlled peers and at the proxy layer with proxies handed over by ISPs.

Stolen data travels right, from bots through proxy bots and reverse proxies to the back ends; signed commands travel left. The shaded boxes mark where the defenders entered in 2014, described in the Operation Tovar section.

Compared with Conficker, this was a botnet designed with a takedown in mind. Seizing a command server achieved little, because the proxy layer and the peer network carried on. Registering the fallback domains achieved little, because most bots never needed them. The question for the defenders was where, in all of this, they could get in.

The money: from webinjects to ransomware

Infections came through a supply chain of other criminals’ services. SecureWorks traced a typical 2012 path: spam from the Cutwail botnet linked to compromised websites, which redirected victims to the Blackhole exploit kit, which installed the Pony loader, which in turn downloaded GameOver Zeus.

Once installed, the bot did what ZeuS had always done, but aimed higher. Coreflood stole whatever users typed. GameOver Zeus targeted corporate banking, where a single transfer could be worth more than thousands of stolen personal accounts. Its main high-value technique, called the “World Bank Center” inside the group, was a hybrid attack on two-factor logins that combined webinjects in the victim’s browser with live action by the fraudsters.

The stolen money moved through mules. According to Fox-IT, corporate mule accounts were opened in China, Hong Kong, Cyprus and Latvia, many in the Chinese border towns of Raohe and Suifenhe under the names of trading and shipping companies. Between 2009 and 2014 the group collected an estimated 20 to 30 terabytes of victim data. The FBI’s loss estimate was more than $100 million, and Fox-IT considered the real figure likely higher.

In September 2013 the same infrastructure began delivering a second product: CryptoLocker, one of the first ransomware families to encrypt victims’ files with strong public-key cryptography and demand payment for the key. The US Justice Department’s announcement put the infections at more than 234,000 computers by April 2014, with ransoms “often as much as $700 or more”. The two main sources disagree on the money: the Justice Department cites more than $27 million paid in the first two months, while Fox-IT estimates about $3 million reached Slavik and his affiliates.

CryptoLocker matters for this series because of where it led. It showed criminals that encrypting files paid faster than draining bank accounts, without mules or banks in the middle. Much of the ransomware that followed built on that lesson.

Operation Tovar: turning the network against itself

The operation started small. In June 2012 the FBI’s Pittsburgh office investigated a local business that had lost money to GameOver Zeus. By late 2012, according to an account by Motherboard, the lead agent, Elliott Peterson, and a team of about ten technical experts from companies including CrowdStrike, Dell SecureWorks and Fox-IT had decided to go after the botnet itself. Preparation took more than a year of weekly calls over encrypted channels.

The insight was the one this series has been building towards. GameOver Zeus’s signatures protected what the bots would run: no one without Slavik’s key could push a command or an update. But a peer-to-peer network also has to decide whom to talk to, and that decision was made by the bots themselves, based on what other peers told them. CrowdStrike’s Tillmann Werner described the result: the team added its own peers to the network and turned the peer-to-peer botnet into a centralised one, with themselves at the centre.

The published accounts describe three parts, executed together from Friday 30 May 2014:

  1. The peer layer. Peers controlled by the defenders were introduced into the network until the bots trusted them and ignored the criminals’ peers, proxies and supernodes. Peterson said fewer than ten such nodes were needed.
  2. The proxy layer. Internet service providers handed investigators control of the proxy nodes the criminals used to connect their command servers to the botnet.
  3. The legal layer. Civil and criminal orders from a federal court in Pittsburgh authorised redirecting the bots’ requests to substitute servers and collecting victims’ IP addresses for notification through US-CERT and other national CERTs. The Justice Department stressed that investigators did not access the content of victims’ computers. In parallel, CryptoLocker’s command servers were seized and its domain-generation domains taken over.

The exact protocol messages used have not been published, and I will not guess at them. What matters for defenders is the shape of the change.

Exhibit 2 (illustrative). One bot’s neighbour list before and after the operation. Bot IDs are shortened and invented; addresses come from the reserved documentation ranges.

# BEFORE: neighbours learned from other infected machines
bot_id      ip:port              role
3f9a..c1    198.51.100.14:18222  peer
81d0..7e    198.51.100.77:24519  peer
0c55..9b    192.0.2.201:11873    proxy   <- relays to the criminals' back end
a4e2..03    198.51.100.140:29004 peer
...         (up to 150 entries)

# AFTER: the list is dominated by defender-controlled nodes
bot_id      ip:port              role
5be1..44    203.0.113.10:16031   peer    <- defenders' node
5be1..45    203.0.113.11:21877   peer    <- defenders' node
5be1..46    203.0.113.12:12409   proxy   <- defenders' node
...
# Updates and stolen data now flow only to the substitute servers;
# the bot still runs nothing that lacks Slavik's signature.

The counterattack came quickly. Peterson said Slavik noticed within an hour and fought for several hours to regain control; after four or five hours he “didn’t have a chance”. About 300,000 computers were infected when the operation began. More than a year later, roughly 30,000 remained.

The network had been broken, not cleaned. Like Coreflood’s stop command, the takeover cut the operators off. Removing the malware still depended on owners, the US-CERT removal guidance and the security vendors that took part.

The people, and what came after

Conficker’s authors were never identified. GameOver Zeus’s leader was named on the day of the takedown. The Justice Department charged Evgeniy Mikhailovich Bogachev, then 30 and living in Anapa, Russia, with conspiracy, computer hacking, wire fraud, bank fraud and money laundering in a 14-count indictment in Pittsburgh. A separate complaint in Omaha tied him to the earlier Jabber Zeus operation. His aliases included “Slavik”, “Pollingsoon” and “Lucky12345”.

In February 2015 the US government offered a reward of up to $3 million for information leading to his arrest or conviction. He is on the FBI’s Cyber’s Most Wanted list and is believed to be at large in Russia. In December 2016 the US Treasury also placed him on its sanctions list.

Fox-IT’s investigation added a twist that is still debated. Some of the group’s command servers were used to search victims’ computers not for bank data but for political information, using keywords about government classified material. The searches targeted Georgia (106 entries in Fox-IT’s data), Ukraine after its 2014 change of government, and Turkey (11 entries), where the terms focused on classified documents and Syria. Fox-IT speculated that whoever wanted this intelligence may have protected Slavik in return, while stating clearly that this was speculation.

The botnet also tried to come back. On 10 July 2014, six weeks after Tovar, Dell SecureWorks found a new variant spreading through the same Cutwail spam. It had dropped the peer-to-peer network entirely in favour of a centralised design, with a new domain generation algorithm producing 1,000 domains a day. Researchers sinkholed one of its domains the next night, and 177 machines checked in within 12 hours.

I read that retreat as telling. After the operation, the authors chose the design that Conficker had shown defenders could contain, rather than rebuild the one that had just been broken.

Hunting the pattern today

Peer-to-peer malware has a network shape that ordinary office software rarely has. A workstation in a botnet like GameOver Zeus talks to many unrelated external addresses on random high ports, over UDP as well as TCP, at regular intervals. Browsers, mail and business applications mostly talk to a small set of well-known services on standard ports. The rules below look for that difference. The DGA fallback is covered by the queries in Part 2; GameOver’s 32- to 48-character names would also stand out on length alone.

Exhibit 3a: Sigma correlation, peer-to-peer fan-out. A host that sends UDP to 50 or more distinct external addresses on high ports within ten minutes. Uses Zeek connection logs; exclude your VoIP, video-conferencing and gaming ranges first, because they produce the same shape legitimately.

title: Outbound UDP to External High Port
name: outbound_udp_high_port
status: experimental
logsource:
  product: zeek
  service: conn
detection:
  selection:
    proto: 'udp'
    local_orig: true
    local_resp: false
    id.resp_p|gte: 10000
  filter_dns:
    id.resp_p: 53
  condition: selection and not filter_dns
---
title: Possible Peer-to-Peer Botnet Fan-Out
id: 7d2c9e14-6b3a-4f81-9c50-2e8a1b4f6d93
status: experimental
description: One internal host sends UDP to many distinct external hosts on high ports in a short window
correlation:
  type: value_count
  rules:
    - outbound_udp_high_port
  group-by:
    - id.orig_h
  timespan: 10m
  condition:
    field: id.resp_h
    gte: 50
falsepositives:
  - VoIP and video conferencing, online games, legitimate P2P software
level: medium

Exhibit 3b: Splunk, fan-out plus regularity. Finds hosts that talk to many external peers on high ports, then checks how regular the contacts are. A low spread in the intervals between connections suggests automated beaconing rather than a person.

index=zeek sourcetype=zeek:conn local_orig=true local_resp=false
    "id.resp_p">=10000
| sort 0 "id.orig_h" _time
| streamstats current=f last(_time) AS prev_time BY "id.orig_h"
| eval gap=_time-prev_time
| stats dc("id.resp_h") AS distinct_peers
        dc("id.resp_p") AS distinct_ports
        values(proto) AS protocols
        avg(gap) AS avg_gap stdev(gap) AS stdev_gap
        BY "id.orig_h"
| eval regularity=round(stdev_gap/avg_gap, 2)
| where distinct_peers>=50 AND distinct_ports>=20
| sort - distinct_peers

A regularity value well below 1 means the gaps between connections are nearly constant. Treat it as a ranking aid, not a verdict.

Exhibit 3c: KQL (Microsoft Defender for Endpoint). Endpoint data has one advantage over network logs: it names the process. A browser talking to many peers is unusual; a binary in a user’s AppData folder doing it is worth a look.

DeviceNetworkEvents
| where Timestamp > ago(1d)
| where RemoteIPType == "Public" and RemotePort between (10000 .. 65535)
| summarize Peers = dcount(RemoteIP),
            Ports = dcount(RemotePort),
            Protocols = make_set(Protocol),
            FirstSeen = min(Timestamp), LastSeen = max(Timestamp)
            by DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath,
               bin(Timestamp, 10m)
| where Peers >= 50 and Ports >= 20
| where InitiatingProcessFolderPath !startswith @"C:\Program Files"
| order by Peers desc

The process filter at the end is a starting point, not a rule. Some legitimate software installs in user folders, and some malware hides in Program Files; review what the filter removes before relying on it.

What I take away

Sign the membership, not just the messages. GameOver Zeus signed what mattered most, its commands and updates, and nothing published suggests the defenders ever forged one. They won by changing whom the bots listened to. Any distributed system, from a botnet to a vehicle fleet or a mesh of industrial devices, has to protect both questions: what a node will accept, and which nodes it treats as peers. Securing the first while leaving the second to gossip leaves a door open.

Resilience against seizure is not resilience against everything. The peer-to-peer design made servers irrelevant, which defeated every earlier takedown method. It also made the network depend on the bots’ own judgement of their neighbours, and that judgement could be shaped. Every architectural choice moves the weak point; it rarely removes it.

Patience is a tactic. More than a year of preparation went into a takedown that took a few hours. A partial strike would have warned the operators and taught them what to fix. The same holds in incident response: acting on the first indicator can cost you the whole picture.

Breaking is still not cleaning. Coreflood ended with 19,000 cleaned machines out of millions, Conficker with hundreds of thousands still infected a year later, and GameOver Zeus with about 30,000 of 300,000 still infected after more than a year. Three operations, three eras, the same last mile.

Criminal infrastructure does not stay criminal. The same command servers that stole from banks were also searching for classified documents in Georgia, Turkey and Ukraine. For defenders, the line between “just crime” and espionage is thinner than our threat models often assume.

GameOver Zeus showed that peer-to-peer botnets could be broken. The next part leaves Windows behind: Mirai, the botnet built from cameras, routers and video recorders that nobody had ever thought to update.

Sources

1 thought on “GameOver Zeus: How Defenders Broke a Peer-to-Peer Botnet”

  1. Pingback: Conficker: The Botnet Nobody Could Hijack - Taner Güngör

Comments are closed.