HackingTeam's RCS: Bringing a Commercial Spyware Platform Back to Life
In 2015, the breach of the Italian surveillance vendor HackingTeam exposed far more than a collection of implants and exploits. The archive contained the parts of a complete surveillance business: database services, evidence workers, collectors, delivery infrastructure, an analyst console, manuals, release machinery, and the records of a company trying to turn intrusion into a repeatable product.
This book reconstructs the operator side of that system. It follows the original Ruby and MongoDB backend from incompatible source snapshots to a working isolated lab, rebuilds the obsolete Adobe AIR console as a testable web application, and uses the running system to examine how evidence moved from an agent record into an analyst’s investigation. It then asks a question that the product’s own threat model did not always appear to prioritize: could the surveillance platform itself be compromised?
No implant or exploit code is built, run, repaired, or improved. The active work is confined to the backend lab and synthetic data. I audit implant capabilities statically by tracing registered modules to implementations and evidence sinks. Deployment and successful collection remain outside that evidence. Collector, injector, implant, and exploit behavior is otherwise discussed from source, package metadata, and the original manuals unless explicitly identified as a lab observation.
Evidence and provenance
The archive is not one coherent release. The examined rcs-db snapshot calls
itself 9.2.3, while the checked-out common library and console identify
themselves as 9.6.0; the exploit catalogue carries yet another release date.
The book therefore distinguishes how each claim is known:
- LAB — observed against original backend code in the isolated lab;
- SOURCE — derived from original leaked source;
- MANUAL — stated in an original RCS manual;
- WEB PORT — behavior of the research console reimplementation;
- REPORTING — supported by a cited public or official source; and
- INFERENCE — a conclusion that the available evidence supports but does not directly demonstrate.
The labels are not decorations. They mark important limits. A console workflow verified through the web port is not automatically proof that the original AIR binary behaved identically. A collector branch found in source is not a packet capture. A modern vulnerability in a frozen dependency says nothing by itself about whether a historical deployment was vulnerable at the time.
Table of contents
| # | Chapter | What it covers |
|---|---|---|
| 1 | HackingTeam, RCS, and Its Human Consequences | HackingTeam’s history; Da Vinci and Galileo; reported customers and deployments; the 2015 breach; export controls; affected people; and the ethics of researching leaked surveillance source. |
| 2 | Anatomy of a Surveillance Platform | The complete RCS system: investigations, operators, agents, collectors, anonymizers, workers, MongoDB, the console, trust boundaries, and end-to-end data flow. |
| 3 | Archaeology of an Inconsistent Leak | The archive’s incompatible snapshots; 9.2.3/9.6.0 version seams; repository history; lab patches; generated state; and the fidelity boundary. |
| 4 | Time-travelling the Runtime | Reconstructing the Ruby 2.1.5 and Debian Jessie environment; era dependencies; EventMachine and OpenSSL; MongoDB 2.6 sharding; commissioning; and reliability tests. |
| 5 | Licensing, Identity, and Trust | Licence checks, hardware-token support, certificates, password handling, sessions, operator authorization, component credentials, and the gaps between those trust systems. |
| 6 | Rebuilding the Operator Console | The Adobe AIR-to-web reconstruction; MXML and service mappings; REST and WebSocket integration; mock/live tests; the manual audit; preserved quirks; and known differences. |
| 7 | From Synchronization to Stored Evidence | Factory cloning, encrypted worker ingestion, evidence processing, alerts, target-scoped collections, GridFS, deletion and retention, and synthetic-data provenance. |
| 8 | Inside an RCS Investigation | The fictional Operation Nightjar from users and groups through configuration, evidence, requests, entities, dashboards, alerts, audit, and system administration. |
| 9 | Collectors, Anonymizers, and Injection Infrastructure | A static-source and manual examination of collectors, decoy responses, anonymizer chains, Network Injectors, connectors, edge trust, and defensive footprints. |
| 10 | Could RCS Itself Be Compromised? | A defensive assessment of the backend: 27 validated findings, four compromise paths, affected assets, deployment caveats, containment, and architectural hardening. |
| 11 | The Exploit Business Behind RCS | The exploit catalogue as product history: packaging, categories, platform coverage, compatibility, maintenance, retirement, and lifecycle evidence—without building or executing it. |
| 12 | Detecting RCS | Confidence-scored network, certificate, host, service, filesystem, and MongoDB detection; investigative playbooks; experimental rules; validation; and false positives. |
| 13 | Investigating a Suspected RCS Deployment | A preservation-first response workflow for backend, collector or infrastructure, and endpoint discoveries, including victim-data handling and attribution limits. |
| 14 | Lessons for Modern Commercial Spyware | Surveillance as enterprise engineering; operator experience; security debt; exploit productization; oversight; safe reconstruction; and questions for modern systems. |
| App. A | Complete Exploit Catalogue | The complete static inventory of 38 metadata-bearing exploit identities, including platform, category, lifecycle, repository state, CVE mapping, and confidence. |
| App. B | Reproducing the Defensive Backend Lab | A safety-first guide to the isolated four-service Compose lab, first boot, health checks, validation gates, synthetic fixtures, reset semantics, and proof limits. |
| App. C | Original-to-Lab Patch Inventory | A file-by-file accounting of original source, compatibility changes, omissions, new lab artifacts, generated state, line changes, and hashes. |
| App. D–E | Source, Version, and Fidelity Map | Frozen repository revisions, the component timeline, and the matrix separating executed, ported, synthetic, source-only, and unavailable behavior. |
| App. F | IOC Catalogue | Confidence-scored network, TLS, protocol, host, configuration, MongoDB, and behavioral indicators, with lab-only artifacts and false-positive limits separated. |
| App. G | Detection-Rule Listings | The complete Suricata, Sigma, and YARA rule listings with hashes, sensor requirements, expected coverage, false-positive guidance, and validation gaps. |
| App. H | API and Storage Map | REST and WebSocket surfaces, parameter formats, authorization layers, MongoDB namespaces, target-scoped storage, GridFS, queues, logs, and deletion paths. |
| App. I | Source Commits, Manuals, and References | The consolidated provenance index for source revisions, manual files and hashes, internal research artifacts, and external historical and technical sources. |
| App. J | Glossary | Product, architecture, evidence, storage, provenance, security, and attribution terminology used throughout the book. |