Matrix/Prepare/SDF-PR04

SDF-PR04

Synthetic Data Generation

intermediateDetection Value: highCost: lowTime: 1-2 weeks📄 Data & Documents

Description

Generate realistic but entirely synthetic data sets to populate deception assets. This includes database records, file contents, email archives, and configuration files that look authentic without containing any real sensitive information.

Rationale

Empty databases and blank file systems immediately reveal a deception environment. Adversaries expect to find data on the systems they compromise, and the absence of data is as suspicious as obviously fake data. Synthetic data generation solves this problem by creating plausible content that withstands inspection without creating compliance or privacy risks.

Supporting Basis

Direct antecedent

The sources generate or discuss believable synthetic document content for monitored decoys.

These sources establish design lineage and scope. They do not validate this record's operational effectiveness, planning estimates, environment labels, or ATT&CK relationships.

Implementation Steps

1

Define data profiles

Determine what types of data each deception asset should contain based on its role. A decoy file server needs documents. A decoy database needs records.

2

Generate synthetic records

Use data generation tools to create realistic datasets. Include appropriate variety, formatting, and volume to match what production systems would contain.

3

Embed tracking mechanisms

Include canary tokens, unique identifiers, or watermarks in synthetic data that will trigger alerts if the data is accessed or exfiltrated.

4

Populate deception assets

Distribute generated data across deception assets. Ensure file timestamps, modification histories, and access patterns look organic.

5

Validate against real data profiles

Compare synthetic data against production data profiles (without using actual production data) to confirm statistical plausibility.

Technical Implementation Examples(1)

Synthetic Data Generation for Decoy Databases

Python script using Faker to generate realistic but entirely synthetic customer records, financial data, and configuration files

python
"""
Synthetic Data Generator for Deception Environments.
Generates realistic-looking data for seeding decoy databases,
file shares, and applications. All data is entirely synthetic -
no real PII is used.
"""
from faker import Faker
import json
import csv
import random
import hashlib
import io
from datetime import datetime, timedelta

fake = Faker()
Faker.seed(42)  # Reproducible but realistic output

def generate_customer_records(count=500):
    """Generate synthetic customer records for a decoy database."""
    records = []
    for i in range(count):
        created = fake.date_time_between(start_date="-3y", end_date="now")
        records.append({
            "customer_id": f"CUS-{10000 + i}",
            "first_name": fake.first_name(),
            "last_name": fake.last_name(),
            "email": fake.company_email(),
            "phone": fake.phone_number(),
            "address": fake.street_address(),
            "city": fake.city(),
            "state": fake.state_abbr(),
            "zip": fake.zipcode(),
            "account_type": random.choice([
                "checking", "savings", "business", "premium"
            ]),
            "balance": round(random.uniform(100, 250000), 2),
            "created_at": created.isoformat(),
            "last_login": (
                created + timedelta(days=random.randint(1, 365))
            ).isoformat(),
            "status": random.choices(
                ["active", "inactive", "suspended"],
                weights=[85, 10, 5],
            )[0],
        })
    return records

def generate_employee_directory(count=150):
    """Generate synthetic employee directory for AD-like data."""
    departments = [
        "Engineering", "Finance", "HR", "Legal", "Marketing",
        "Operations", "Sales", "IT", "Security", "Executive",
    ]
    titles = {
        "Engineering": ["Software Engineer", "Senior Developer",
                        "Tech Lead", "DevOps Engineer"],
        "Finance": ["Financial Analyst", "Controller",
                     "Accounts Manager", "CFO"],
        "IT": ["Systems Administrator", "Network Engineer",
               "Help Desk", "IT Manager"],
        "Security": ["Security Analyst", "SOC Analyst",
                      "CISO", "Threat Hunter"],
    }

    employees = []
    for i in range(count):
        dept = random.choice(departments)
        first = fake.first_name()
        last = fake.last_name()
        username = f"{first[0].lower()}.{last.lower()}"
        employees.append({
            "employee_id": f"EMP-{2000 + i}",
            "username": username,
            "email": f"{username}@corp.internal",
            "first_name": first,
            "last_name": last,
            "department": dept,
            "title": random.choice(
                titles.get(dept, ["Analyst", "Manager", "Director"])
            ),
            "manager": fake.name(),
            "office": f"Building {random.choice('ABC')}-"
                      f"{random.randint(1,5)}{random.randint(0,30):02d}",
            "phone_ext": str(random.randint(1000, 9999)),
            "hire_date": fake.date_between(
                start_date="-10y", end_date="-30d"
            ).isoformat(),
            "status": "active",
        })
    return employees

def generate_network_config_files():
    """Generate realistic network configuration files with trap data."""
    configs = {
        "database.env": """# Production Database Configuration
# Auto-generated by deployment pipeline
DB_HOST=prod-db-01.corp.internal
DB_PORT=5432
DB_NAME=customerdb
DB_USER=app_svc_prod
DB_PASS=Pr0d-Db#2026!xK9m
DB_SSL=require
DB_POOL_SIZE=25
REDIS_URL=redis://cache-01.corp.internal:6379/0
""",
        ".aws/credentials": """[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region = us-east-1

[prod-deploy]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
region = us-east-1
""",
        "backup-config.sh": """#!/bin/bash
# Nightly backup script - runs via cron at 02:00
BACKUP_USER="backup_svc"
BACKUP_PASS="B4ckup#Nightly_2026"
BACKUP_HOST="nas-01.corp.internal"
BACKUP_PATH="/mnt/backups/production"

pg_dump -h prod-db-01.corp.internal \
  -U $BACKUP_USER -d customerdb \
  | gzip > "$BACKUP_PATH/db_$(date +%Y%m%d).sql.gz"
""",
    }
    return configs

if __name__ == "__main__":
    # Generate all synthetic data
    customers = generate_customer_records(500)
    employees = generate_employee_directory(150)
    configs = generate_network_config_files()

    # Output customer records as CSV
    output = io.StringIO()
    writer = csv.DictWriter(output, fieldnames=customers[0].keys())
    writer.writeheader()
    writer.writerows(customers)
    with open("synthetic_customers.csv", "w") as f:
        f.write(output.getvalue())

    # Output employee directory as JSON
    with open("synthetic_employees.json", "w") as f:
        json.dump(employees, f, indent=2)

    # Output config files
    for filename, content in configs.items():
        safe_name = filename.replace("/", "_").replace(".", "_")
        with open(f"decoy_{safe_name}", "w") as f:
            f.write(content)

    print(f"Generated {len(customers)} customer records")
    print(f"Generated {len(employees)} employee records")
    print(f"Generated {len(configs)} config files with trap credentials")

MITRE ATT&CK Mappings

TechniqueTacticRelationship
T1005Data from Local SystemCollectiondetects
T1039Data from Network Shared DriveCollectiondetects

Considerations

  • Never use real production data in deception environments. The compliance and liability risks far outweigh the realism benefit.
  • Synthetic data should include plausible imperfections. Perfectly formatted, evenly distributed data looks machine-generated because it is.
  • Consider including data that looks deliberately sensitive (financial records, credentials, architectural diagrams) to attract adversary attention.

Supported Environments

🏢On-Premise
☁Amazon Web Services
☁Microsoft Azure
☁Google Cloud Platform
🔄Hybrid Environment

Tools & Resources

  • Faker libraries (Python faker, JavaScript faker)
  • Synthetic data platforms
  • Custom generation scripts
  • Canary token services for embedding tracking

Quick Stats

Phase
Prepare
Difficulty
intermediate
Detection Value
high
Cost
low
Time
1-2 weeks
ATT&CK Mappings
2