private network security scan
npx skills add https://github.com/bizshuk/llm_plugin --skill 'Private Network Security Scan'
Skill 文档
Private Network Security Scan
ä¸åå¯ç± AI Agent å·è¡ç宿´ç§æç¶²è·¯å®å
¨æææè½ãä½¿ç¨ scan_private_network è
³æ¬ä½çºæ ¸å¿ï¼å¨ 60 åéå
§å®æç¶²è·¯ç¼ç¾ãéå°ä¸»æ© 11 é¡é¢¨éªè¨ºæ·ã以åå ±åç¢åºã
[!IMPORTANT] æ¤å·¥ä½æµç¨æå¨æ¬æ©å·è¡
nmapï¼éè¦ sudo æè½å OS detectionï¼ä»¥åtracerouteï¼æç¢ç實éç網路æµéãè«ç¢ºèªéå¨ä½ ç網路ç°å¢ä¸æ¯è¢«å 許çã
[!WARNING] Token Limit Fallback çç¥ï¼å¦æä¸»æ¨¡åè§¸ç¼ token limitï¼Agent æåæè³ fallback 模åç¹¼çºå·¥ä½ãè¥å ©å模åé½èç¡ï¼Agent æç´æ¥ä¾æå·²æ¶éçè³æç¢åºå ±åï¼è·³éæªå®æçè¨ºæ·æ¥é©ã
ä¾è³´å·¥å · (Required Tools)
| å·¥å · | è·¯å¾ | ç¨é |
|---|---|---|
nmap (v7.98) |
/Users/shuk/.local/homebrew/bin/nmap |
å ææãæå嵿¸¬ãæ¼æ´è ³æ¬ |
traceroute |
/usr/sbin/traceroute |
ç¶²è·¯ææ²è¿½è¹¤ |
dig |
/usr/bin/dig |
DNS zone transfer 測試 |
curl |
/usr/bin/curl |
HTTP å®å ¨æ¨é æª¢æ¥ |
ssh-keyscan |
/usr/bin/ssh-keyscan |
SSH éé°é¡åæª¢æ¥ |
scan_private_network |
/Users/shuk/projects/env_setup/bin/scan_private_network |
ç§æç¶²è·¯ææ²ææè ³æ¬ |
å ±å輸åºçµæ§ (Output Structure)
/Users/shuk/projects/security/scan/<YYYYMMDD>-<scan_type>/
âââ report.md # ä¸»å ±åï¼ä¾ resources/report_template.md ç¢åºï¼
âââ network.topo # ææ²å份
å½åè¦å (Naming Convention)
| é¨å | æ ¼å¼ | ç¯ä¾ |
|---|---|---|
YYYYMMDD |
æææ¥æ | 20260216 |
scan_type |
ææé¡åï¼å°å¯«ãé£åèåéï¼ | private-network |
ç¯ä¾ï¼scan/20260216-private-network/report.md
工使µç¨ (Workflow)
flowchart TD
A["Phase 0: Pre-flight Check<br/>(~2 min)"] --> B["Phase 1: Network Discovery<br/>(~10 min)"]
B --> C["Phase 2: Per-Host Diagnosis<br/>(~35 min)"]
C --> D["Phase 3: Report Generation<br/>(~10 min)"]
D --> E["Phase 4: Delivery<br/>(~3 min)"]
C -- "token limit error" --> F["Switch to Fallback Model"]
F --> C
F -- "both models exhausted" --> D
æéé ç® (Time Budget)
å ± 60 åé
| Phase | 說æ | æéä¸é |
|---|---|---|
| 0 | Pre-flight Check â é©èå·¥å ·ãå»ºç«ææè³æå¤¾ãè¤è£½å ±åæ¨¡æ¿ | 2 min |
| 1 | Network Discovery â å·è¡ scan_private_networkãè§£æææ² |
10 min |
| 2 | Per-Host Diagnosis â éå°ä¸»æ©é²è¡ 11 é¡é¢¨éªè¨ºæ· | 35 min |
| 3 | Report Generation â å¡«å
¥å ±å模æ¿ãç¢åº report.md |
10 min |
| 4 | Delivery â åä»½ææ²ãéç¥ç¨æ¶ãæ¸ çæ«å | 3 min |
Phase 0: Pre-flight Check (~2 min)
// turbo
- Check that
nmapis installed:
which nmap
// turbo 2. Check that traceroute is installed:
which traceroute
// turbo 3. Record the scan start time and set variables:
SCAN_DATE=$(date '+%Y%m%d')
SCAN_START=$(date '+%Y-%m-%d %H:%M:%S')
echo "SCAN_DATE=${SCAN_DATE}" | tee /tmp/scan_meta.env
echo "SCAN_START=${SCAN_START}" >> /tmp/scan_meta.env
// turbo 4. Create the scan output directory and copy report template:
source /tmp/scan_meta.env
SKILL_DIR="$(dirname "$(readlink -f "$0" 2>/dev/null || echo "$HOME/.agent/skill/private-network-scan")")"
SCAN_DIR="/Users/shuk/projects/security/scan/${SCAN_DATE}-private-network"
echo "SCAN_DIR=${SCAN_DIR}" >> /tmp/scan_meta.env
mkdir -p "${SCAN_DIR}"
cp "${SKILL_DIR}/resources/report_template.md" "${SCAN_DIR}/report.md"
Phase 1: Network Discovery (~10 min)
- Run the
scan_private_networkscript to build the network topology:
cd /Users/shuk/projects/env_setup && sudo bin/scan_private_network
Wait for completion. The script outputs results to network.topo in the current directory.
// turbo 6. Read the generated topology file:
cat /Users/shuk/projects/env_setup/network.topo
- Parse the topology output and build a target list of all discovered hosts:
- Extract every IP address found in the topology
- Note which ports/services are already identified
- Prioritize hosts that have open services (they are more interesting for security analysis)
- Record the network layers/subnets discovered
Phase 2: Per-Host Security Diagnosis (~35 min)
For each host discovered in Phase 1, perform the following checks. Work through hosts in order of priority (hosts with open services first).
Token Limit Fallback Strategy:
- If the PRIMARY model hits a token limit error â switch to the FALLBACK model and continue from where you left off
- If the FALLBACK model also hits a token limit â SKIP remaining hosts and jump to Phase 3 immediately
- In the report, mark hosts as “â Diagnosed” or “âï¸ Skipped (token limit)” accordingly
2.1 Port Risk Assessment (風éªé¡å¥ 1: 飿¥å æ´é²)
For each host, categorize open ports by risk level per §1 below:
| Risk Level | Ports |
|---|---|
| ð´ Critical | telnet(23), ftp(21), rsh(514), rlogin(513) |
| ð High | rdp(3389), smb(445), vnc(5900), mysql(3306), redis(6379) |
| ð¡ Medium | http(80), http-alt(8080), dns(53), printer(515,631) |
| ð¢ Low | ssh(22), https(443) |
2.2 Service Version Vulnerability Check (風éªé¡å¥ 2: è»é«çæ¬æ¼æ´)
Compare discovered service versions against known vulnerability patterns per §2 below:
- Boa HTTPd (any version) â EOL project, multiple CVEs â ð´
- OpenSSH < 9.0 â check for known CVEs â ð
- nginx â check version if available â ð¡
- CUPS â check for recent CVEs â ð¡
- Any EOL software â ð´
2.3 HTTP Service Security Headers (風éªé¡å¥ 3: HTTP å®å ¨æ¨é )
For hosts with HTTP services (port 80, 443, 8080), check security headers:
// turbo
curl -sI --connect-timeout 5 http://<IP>:<PORT> 2>/dev/null | head -20
Check for presence/absence of:
X-Frame-Optionsâ missing = ð¡Content-Security-Policyâ missing = ð¡Strict-Transport-Securityâ missing = ð¡X-Content-Type-Optionsâ missing = ð¡Serverheader leaking version â ð¢
2.4 Authentication & Access Control (風éªé¡å¥ 4: èªèèååæ§å¶)
Check for common authentication weaknesses:
- Default credentials on routers/IoT/databases â ð´
- Anonymous FTP access:
nmap --script ftp-anon -p 21 <IP>â ð´ - Redis/MongoDB without auth:
redis-cli -h <IP> pingâ ð´ - SMB null session:
nmap --script smb-enum-shares -p 445 <IP>â ð - SNMP default community strings:
nmap --script snmp-brute -p 161 <IP>â ð
2.5 Encryption & Transport Security (風éªé¡å¥ 5: å å¯èå³è¼¸å®å ¨)
2.5.1 SSH Configuration Check
For hosts with SSH service (port 22):
// turbo
ssh-keyscan -T 5 <IP> 2>/dev/null
Check:
- Key types offered (RSA, ECDSA, ED25519)
- Whether weak key types are present (DSA, RSA < 2048-bit) â ð¡
2.5.2 TLS/SSL Check
For hosts with HTTPS (port 443):
// turbo
nmap --script ssl-enum-ciphers -p 443 <IP>
Check:
- Weak cipher suites (SSLv3, TLS 1.0/1.1, RC4, DES) â ð
- Expired / self-signed certificates â ð
2.6 DNS Security Check (風éªé¡å¥ 6: DNS å®å ¨)
For hosts with DNS service (port 53):
// turbo
dig axfr @<IP> 2>/dev/null | head -50
- If zone transfer succeeds â ð´ Critical
- Check if open resolver:
dig @<IP> example.comfrom non-local â ð
2.7 Network-Level Attack Surface (風éªé¡å¥ 7: ç¶²è·¯å±¤æ»æé¢)
Review the network topology for:
- UPnP / SSDP services (port 1900):
nmap --script upnp-info -p 1900 <IP>â ð¡ - IPv6 enabled but unmonitored â ð¡
- ARP / VLAN / LLMNR observations from topology â ð
2.8 Web Application Security (風éªé¡å¥ 8: Web æç¨å®å ¨)
For hosts with HTTP/HTTPS services:
- Check for exposed admin interfaces (/admin, /login, /management) â ð
- Check directory listing:
curl -s http://<IP>/â ð¡ - Check WebDAV:
nmap --script http-webdav-scan -p 80,443 <IP>â ð
2.9 Data Leakage (風éªé¡å¥ 9: è³ææ´©æ¼)
- NFS exports:
showmount -e <IP>â ð if misconfigured - SMB shares:
smbclient -L <IP> -Nâ ð if anonymous accessible - mDNS / Bonjour broadcasting â ð¢
2.10 Lateral Movement (風éªé¡å¥ 10: æ©«åç§»å)
Assess from network topology:
- Flat network / no VLAN segmentation â ð
- Shared credentials across hosts â ð
- SSH key trust /
.rhostsâ ð¡
2.11 IoT & Embedded Devices (風éªé¡å¥ 11: IoT / åµå ¥å¼è£ç½®)
For identified IoT/embedded devices:
- Check firmware version against known updates â ð
- Scan for hidden debug ports on non-standard ports â ð´
- UPnP auto-exposing services â ð¡
2.12 Quick Vulnerability Scan (if time permits)
If more than 15 minutes remain in the time budget, run nmap vuln scripts on high-value targets:
nmap --script vulners -sV -p <open_ports> <IP> --host-timeout 60s
Phase 3: Report Generation (~10 min)
- Read the report template that was copied in Phase 0:
source /tmp/scan_meta.env
cat "${SCAN_DIR}/report.md"
-
Fill in the report template (
<!-- -->placeholders) with all findings from Phase 2:- Executive Summary: host count, service count, risk distribution
- Network Topology: embed
network.topocontent - Findings by severity: Critical/High â Medium â Low/Info
- Per-Host Detail: each host’s full 11-category diagnosis
- Scan Limitations: skipped hosts, timed-out checks
- Recommendations: prioritized remediation steps
- Appendices: raw topology, command log
Each finding must include:
- Risk category number (1-11)
- Severity level (ð´ð ð¡ð¢â¹ï¸)
- Evidence (raw command output)
- Remediation steps
-
Write the completed report to
${SCAN_DIR}/report.md.
Phase 4: Delivery (~3 min)
// turbo 11. Copy the topology file as a dated backup:
source /tmp/scan_meta.env
cp /Users/shuk/projects/env_setup/network.topo "${SCAN_DIR}/network.topo"
- Record scan end time:
source /tmp/scan_meta.env
SCAN_END=$(date '+%Y-%m-%d %H:%M:%S')
echo "Scan started: ${SCAN_START}"
echo "Scan ended: ${SCAN_END}"
- Notify the user that the report is complete, include:
- Path to the report file (
${SCAN_DIR}/report.md) - Top 3 most critical findings (if any)
- Number of hosts scanned vs skipped
- Total scan duration
- Path to the report file (
// turbo 14. Clean up temp files:
rm -f /tmp/scan_meta.env
風éªçç´å®ç¾© (Risk Severity Levels)
| çç´ | æ¨ç±¤ | å®ç¾© |
|---|---|---|
| ð´ | Critical | å¯ç´æ¥è¢«å©ç¨ãç¡éèªèå³å¯ååææ§å¶ç³»çµ± |
| ð | High | é«åº¦å¯å©ç¨ï¼å¯è½å°è´è³ææ´©æ¼æç³»çµ±å ¥ä¾µ |
| ð¡ | Medium | å卿½å¨é¢¨éªï¼éæé å ¶ä»æ¢ä»¶æ¹å¯å©ç¨ |
| ð¢ | Low | é¢¨éªæéï¼å±¬æ¼æä½³å¯¦åæ¹åé ç® |
| â¹ï¸ | Info | å ä¾åèï¼ç¡ç´æ¥å®å ¨å½±é¿ |
風éªé¡å¥è©³ç´°è¦å (Risk Category Rules)
§1 飿¥å æ´é² (Port Exposure)
ä¾éæ¾å èçåè°ç¹æ§é²è¡é¢¨éªåç´ã
| çç´ | å è / æå | 風éªåå |
|---|---|---|
| ð´ Critical | Telnet(23), FTP(21), RSH(514), RLogin(513) | ææå³è¼¸ï¼ç¡å å¯èªè |
| ð High | RDP(3389), SMB(445), VNC(5900), MySQL(3306), Redis(6379) | é 端åå / è³æåº«æ´é²ï¼å¸¸è¦æ»æé¢ |
| ð¡ Medium | HTTP(80), HTTP-Alt(8080), DNS(53), Printer(515,631) | æ½å¨è³è¨æ´©æ¼ææªä¿è·çæå |
| ð¢ Low | SSH(22), HTTPS(443) | å å¯ééï¼ä½éé©èé 置強度 |
§2 è»é«çæ¬æ¼æ´ (Service Version Vulnerabilities)
æ¯å°æåçæ¬èå·²ç¥ CVEã
| 檢æ¥ç®æ¨ | å¤å®è¦å | çç´ |
|---|---|---|
| Boa HTTPdï¼ä»»ä½çæ¬ï¼ | 已忢ç¶è· (EOL)ï¼åå¨å¤å CVE | ð´ |
| OpenSSH < 9.0 | å·²ç¥ CVE æ¼æ´ | ð |
| nginxï¼éæçæ¬ï¼ | éæ¯å° CVE è³æåº« | ð¡ |
| CUPSï¼åå°æåï¼ | è¿ææé«é¢¨éª CVE | ð¡ |
| ä»»ä½ EOL è»é« | ç¡å®å ¨æ´æ°æ¯æ´ | ð´ |
§3 HTTP å®å ¨æ¨é (HTTP Security Headers)
éå° HTTP æåï¼Port 80/443/8080ï¼æª¢æ¥é²è·æ¨é æ¯å¦åå¨ã
| æ¨é | ç¼ºå°æçé¢¨éª | çç´ |
|---|---|---|
X-Frame-Options |
黿嫿 (Clickjacking) | ð¡ |
Content-Security-Policy |
XSS èè³æºæ³¨å ¥ | ð¡ |
Strict-Transport-Security |
æªå¼·å¶ HTTPS (HSTS) | ð¡ |
X-Content-Type-Options |
MIME å æ¢æ»æ | ð¡ |
Server header æ´©æ¼çæ¬ |
è³è¨æ´©æ¼ (Information Disclosure) | ð¢ |
§4 èªèèååæ§å¶ (Authentication & Access Control)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| é è¨å¸³å¯ (Default Credentials) | è·¯ç±å¨/IoT/è³æåº«ä½¿ç¨åºå» å¯ç¢¼ | ð´ |
| å¿ååå (Anonymous Access) | FTP anonymousãRedis/MongoDB ç¡å¯ç¢¼ | ð´ |
| SMB 空æè©± (Null Session) | å¯åè使ç¨è èå ±äº«è³æå¤¾ | ð |
| SNMP 社群å串 (Community Strings) | ä½¿ç¨ public/private çé è¨å¼ |
ð |
§5 å å¯èå³è¼¸å®å ¨ (Encryption & Transport Security)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| SSL/TLS å¼±å å¯å¥ä»¶ | SSLv3ãTLS 1.0/1.1ãRC4ãDES | ð |
| éæ / èªç°½æè | MITM é¢¨éª | ð |
| STARTTLS éç´ | SMTP/IMAP å¯è¢«åé¢å å¯ | ð¡ |
| SSH å¼±éé° | DSA æ RSA < 2048-bit | ð¡ |
§6 DNS å®å ¨ (DNS Security)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| Zone Transfer æå (AXFR) | æ´©æ¼æ´åååè¨é | ð´ |
| DNS éè¿´éæ¾ (Open Resolver) | å¯è¢«ç¨æ¼ DDoS åå°æ»æ | ð |
§7 ç¶²è·¯å±¤æ»æé¢ (Network-Level Attack Surface)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| ARP æ¬ºé¨ (ARP Spoofing) | ç¡ Dynamic ARP Inspection | ð |
| VLAN è·³èº (VLAN Hopping) | Trunk port é ç½®ä¸ç¶ | ð |
| LLMNR / NBT-NS ææ¯ | Windows ç°å¢æèç«å | ð |
| IPv6 æªç®¡ç | è¨ååç¨ IPv6 ä½ç¡ç£æ§ | ð¡ |
| UPnP / SSDP éæ¾ (Port 1900) | å §ç¶²å°å¤ç¶²çèªåç«¯å£æ å° | ð¡ |
§8 Web æç¨å®å ¨ (Web Application Security)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| 管çä»é¢æ´é² | Router/NAS/Printer admin UI ç¡é²è· | ð |
| WebDAV éå | å¯ä¸å³æ¡ææªæ¡ | ð |
| API 端é»ç¡èªè | REST API æªè¨é² | ð |
| ç®éå表 (Directory Listing) | æ´©æ¼æªæ¡çµæ§ | ð¡ |
§9 è³ææ´©æ¼ (Data Leakage)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| NFS å ±äº«ä¸ç¶ | no_root_squash æå
¨ç¶²æ®µå
񄧮 |
ð |
| SMB å ±äº«æ´©æ¼ | æææªæ¡å¯å¿ååå | ð |
| DHCP Snooping 缺失 | å½è£ DHCP 伺æå¨ | ð¡ |
| mDNS / Bonjour 廣æ | æ´©æ¼æåå稱èçæ¬ | ð¢ |
§10 æ©«åç§»å (Lateral Movement)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| 網段éé¢ä¸è¶³ (Flat Network) | ææè¨åå¨åä¸ VLAN | ð |
| å ±ç¨å¯ç¢¼ | å¤å°ä¸»æ©ä½¿ç¨ç¸åèªè | ð |
| 跨主æ©ä¿¡ä»»éä¿ | SSH key trust / .rhosts |
ð¡ |
§11 IoT / åµå ¥å¼è£ç½® (IoT & Embedded Devices)
| é¢¨éª | å¤å®è¦å | çç´ |
|---|---|---|
| é±è Debug å | Telnet/Serial å¾éå¨éæ¨æºå | ð´ |
| éé«éæ (Outdated Firmware) | è·¯ç±å¨/IP Cam/NAS æªæ´æ° | ð |
| UPnP èªåæ´é²æå | ç¹éé²ç«çè¦å | ð¡ |