Description
Create fake supply chain artifacts including decoy code repositories, package registries, API endpoints, and vendor portals that attract adversaries conducting supply chain reconnaissance or attempting supply chain compromise.
Rationale
Supply chain attacks have become a major vector for sophisticated adversaries. By creating decoy supply chain infrastructure, you can detect adversaries who are probing your software supply chain, vendor relationships, or development pipelines before they can stage a supply chain compromise.
Supporting Basis
Author-derived extensionThe sources establish honeytoken principles and software-supply-chain attack vectors; they do not evaluate defensive decoy packages, registries, or vendor artifacts.
- Han, X.; Kheir, N.; Balzarotti, D. Deception Techniques in Computer Security: A Research Perspective. ACM Computing Surveys 51 (2018), Article 80.Peer reviewed
- Ladisa, P. et al. SoK: Taxonomy of Attacks on Open-Source Software Supply Chains. IEEE Symposium on Security and Privacy 2023, 1509–1526.Peer reviewed
- Ohm, M. et al. Backstabber's Knife Collection: A Review of Open Source Software Supply Chain Attacks. DIMVA 2020, 23–43.Peer reviewed
- Spitzner, L. Honeypots: Catching the Insider Threat. ACSAC 2003, 170–179.Peer reviewed
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
Identify supply chain attack surfaces
Map your software supply chain: package dependencies, CI/CD pipelines, vendor integrations, and development infrastructure that adversaries might target.
Create decoy supply chain artifacts
Build fake package repositories, development environments, and vendor integration endpoints that appear to be part of your supply chain.
Populate with believable content
Add realistic code, configuration, and dependency information to decoy repositories. Include references that make them appear actively used.
Monitor for interaction
Track access attempts, clone operations, and authentication attempts against supply chain decoys.
Technical Implementation Examples(1)
Decoy Git Repository with Canary Tokens
Create a fake internal code repository that looks like a real application with embedded tracking
#!/bin/bash
# create-decoy-repo.sh
# Creates a fake internal Git repository that looks like a real
# application codebase. Contains trap credentials and tracking.
REPO_DIR="/srv/git/internal-billing-api.git"
WORK_DIR=$(mktemp -d)
echo "[*] Creating decoy repository: internal-billing-api"
cd "$WORK_DIR"
git init internal-billing-api
cd internal-billing-api
# Create realistic project structure
mkdir -p src/{controllers,models,middleware} config test docs
# Application config with trap credentials
cat > config/production.json << 'CONFIG'
{
"database": {
"host": "prod-db-04.corp.internal",
"port": 5432,
"name": "billing_prod",
"username": "billing_svc",
"password": "B1ll1ng#Pr0d_2026!"
},
"redis": {
"host": "cache-01.corp.internal",
"port": 6379
},
"api_keys": {
"stripe": "sk_live_51Hb2DECOY_NOT_REAL_KEY_abc123",
"sendgrid": "SG.DECOY_KEY.not-a-real-sendgrid-key"
}
}
CONFIG
# Realistic-looking application code
cat > src/controllers/billing.py << 'CODE'
"""Billing API controller - handles payment processing."""
from flask import Blueprint, request, jsonify
from models.invoice import Invoice
from middleware.auth import require_auth
billing_bp = Blueprint("billing", __name__)
@billing_bp.route("/api/v1/invoices", methods=["GET"])
@require_auth
def list_invoices():
page = request.args.get("page", 1, type=int)
invoices = Invoice.query.paginate(page=page, per_page=50)
return jsonify([i.to_dict() for i in invoices.items])
@billing_bp.route("/api/v1/invoices/<int:id>/charge", methods=["POST"])
@require_auth
def charge_invoice(id):
invoice = Invoice.query.get_or_404(id)
result = invoice.process_payment()
return jsonify(result), 200
CODE
cat > README.md << 'README'
# Internal Billing API
Production billing service for customer invoicing and payment processing.
## Quick Start
```bash
pip install -r requirements.txt
export FLASK_ENV=production
flask run --host=0.0.0.0 --port=5000
```
## Deployment
See docs/deployment.md for production deployment procedures.
Credentials are in config/production.json (DO NOT commit changes).
README
# Commit history to look authentic
git add -A
GIT_AUTHOR_DATE="2025-06-15T10:30:00" \
GIT_COMMITTER_DATE="2025-06-15T10:30:00" \
git commit -m "Initial project setup with billing API structure"
git add -A
GIT_AUTHOR_DATE="2026-01-20T14:22:00" \
GIT_COMMITTER_DATE="2026-01-20T14:22:00" \
git commit -m "Update production database credentials for Q1 rotation"
# Create bare repo for serving
git clone --bare "$WORK_DIR/internal-billing-api" "$REPO_DIR"
rm -rf "$WORK_DIR"
echo "[+] Decoy repository created at: $REPO_DIR"
echo "[!] Monitor for: git clone, git pull, and file access events"MITRE ATT&CK Mappings
| Technique | Tactic | Relationship |
|---|---|---|
| T1195Supply Chain Compromise | Initial Access | detects |
| T1199Trusted Relationship | Initial Access | detects |
Considerations
- Supply chain decoys should reference real technology stacks and frameworks used by the organization to appear legitimate.
- Be cautious about creating decoy packages that could accidentally be consumed by real development processes. Namespace and naming must prevent confusion.
- This technique is most valuable against sophisticated adversaries targeting your organization through supply chain vectors.
Supported Environments
Tools & Resources
- Git repository hosting
- Package registry servers
- CI/CD pipeline tools
- API mock servers
Related Techniques
Quick Stats
- Phase
- Lure
- Difficulty
- expert
- Detection Value
- critical
- Cost
- moderate
- Time
- 1-2 weeks
- ATT&CK Mappings
- 2