Operational security management — traffic shaping, scan rate limiting, source IP management, tool signature avoidance, evidence handling, anti-detection patterns.
61
72%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./packages/decepticon/decepticon/skills/shared/opsec/SKILL.mdOPSEC ensures the red team engagement remains covert, controlled, and within authorized scope. Poor OPSEC burns the engagement — detected scans alert the blue team, taint findings, and waste client resources. This skill applies across all recon phases.
Before ANY active operation:
| Target Type | Recommended Rate | Timing Flag |
|---|---|---|
| Production web server | 5-10 req/sec | nmap -T2 |
| Internal network | 50-100 req/sec | nmap -T3 |
| Development/staging | 100+ req/sec | nmap -T4 |
| High-security target | 1-2 req/sec | nmap -T1 |
| WAF-protected | 1-5 req/sec | Custom delays |
# nmap with specific rate limiting
nmap -sS --max-rate 10 --max-retries 1 -p 80,443 <target>
# ffuf with rate limiting
ffuf -u https://<target>/FUZZ -w wordlist.txt -rate 5
# nuclei with rate limiting
nuclei -u https://<target> -rl 5 -c 2
# curl with delay between requests
for url in $(cat urls.txt); do
curl -s -o /dev/null -w "%{http_code} $url\n" "$url"
sleep 2
doneImportant: User-Agent strings become stale quickly. Always use current browser version strings that match real-world traffic at the time of engagement. Check your own browser's UA or query a live UA database before starting.
# Step 1: Get a current, real User-Agent from your own browser or a live source
# Option A: Copy from your browser's DevTools (Network tab → Request Headers)
# Option B: Use a curated list — update version numbers to match current releases
# Step 2: Build a rotation list with CURRENT versions
# Template — replace <CHROME_VER> and <FIREFOX_VER> with latest stable versions
UA_LIST=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<CHROME_VER> Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<CHROME_VER> Safari/537.36"
"Mozilla/5.0 (X11; Linux x86_64; rv:<FIREFOX_VER>) Gecko/20100101 Firefox/<FIREFOX_VER>"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:<FIREFOX_VER>) Gecko/20100101 Firefox/<FIREFOX_VER>"
)
UA="${UA_LIST[$RANDOM % ${#UA_LIST[@]}]}"
curl -s -A "$UA" https://<target>/
# ffuf with custom user agent
ffuf -u https://<target>/FUZZ -w wordlist.txt -H "User-Agent: $UA"# Avoid tool-specific headers that reveal scanner identity
# BAD: Default tool user agents
# - "Nmap Scripting Engine"
# - "nikto"
# - "gobuster"
# - "sqlmap"
# GOOD: Mimic real browser headers (use current browser versions!)
curl -s https://<target>/ \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/<CURRENT_VER> Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Accept-Encoding: gzip, deflate, br"| Tool | Detection Signature | Mitigation |
|---|---|---|
| nmap | SYN scan pattern, probe ordering | Use -T2, --data-length |
| nikto | Default User-Agent, predictable paths | Custom UA, selective tuning |
| sqlmap | Parameter tampering patterns | Not applicable to recon phase |
| ffuf | Rapid sequential requests | Rate limiting (-rate) |
| nuclei | Template-specific payloads | Rate limiting (-rl), selective templates |
| gobuster | Sequential path enumeration | Randomize wordlist, rate limit |
# nmap — add random data to packets
nmap -sS --data-length 24 -T2 <target>
# nmap — randomize host order (for multi-target)
nmap -sS --randomize-hosts -iL targets.txt
# nmap — spoof source port (use common ports)
nmap -sS -g 53 <target> # Appear as DNS traffic
nmap -sS -g 80 <target> # Appear as HTTP trafficcurl -s ifconfig.me# Use public resolvers to avoid leaking internal DNS queries
dig @8.8.8.8 <target> A +short
dig @1.1.1.1 <target> A +short
# Don't use target's own DNS servers for recon queries
# (they may log all queries from unknown sources)Every action should be logged:
| Timestamp (UTC) | Action | Target | Tool | Justification |
|-----------------|--------|--------|------|---------------|
| <YYYY-MM-DD HH:MM> | SYN scan top 1000 | 10.0.1.50 | nmap | Passive recon identified as primary web server |
| <YYYY-MM-DD HH:MM> | Dir fuzzing | api.example.com | ffuf | Port 443 open, REST API suspected |After engagement:
# Before scanning, verify target is in scope
SCOPE_FILE="scope.txt"
TARGET="10.0.1.50"
if grep -q "$TARGET" "$SCOPE_FILE" 2>/dev/null; then
echo "IN SCOPE — proceed"
else
echo "WARNING: $TARGET not found in scope file!"
echo "Verify before proceeding."
fiIf you accidentally touch an out-of-scope system:
scope.txtcurl -s ifconfig.mee34afba
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.