Files
Anthropic-Cybersecurity-Skills/skills/auditing-tls-certificate-transparency-logs/references/api-reference.md
T

6.4 KiB

API Reference: CT Log Monitoring Agent

Overview

Monitors Certificate Transparency logs via the crt.sh API to detect unauthorized certificate issuance, discover subdomains, detect typosquat phishing infrastructure, and alert security teams. Stores state in SQLite for baseline comparison across monitoring cycles.

Dependencies

Package Version Purpose
requests >=2.28 HTTP requests to crt.sh API and webhook delivery
cryptography >=41.0 Certificate parsing and validation (optional advanced features)
pyOpenSSL >=23.0 X.509 certificate chain inspection (optional advanced features)

The core monitoring functionality requires only requests. The cryptography and pyOpenSSL packages are needed for direct certificate parsing beyond what the crt.sh JSON API provides.

CLI Usage

# One-shot scan with report
python agent.py --domains example.com --db ct_monitor.db --report report.json

# Continuous monitoring with Slack alerts
python agent.py --domains example.com --continuous --interval 900 \
    --webhook https://hooks.slack.com/services/XXX/YYY/ZZZ

# Build baseline and auto-detect authorized CAs
python agent.py --domains example.com --auto-baseline --db ct_monitor.db

# Monitor multiple domains with email alerts
python agent.py --domains example.com bank.example.com \
    --continuous --interval 600 \
    --smtp-host smtp.gmail.com --smtp-port 587 \
    --smtp-user alerts@example.com --smtp-pass "app-password" \
    --email-to security@example.com soc@example.com

# Scan for typosquat phishing domains
python agent.py --domains example.com --typosquats --report typosquat_report.json

# Manually add an authorized CA
python agent.py --domains example.com --add-ca "DigiCert SHA2 Extended Validation Server CA" 1397

Arguments

Argument Required Description
--domains Yes Space-separated list of domains to monitor
--db No SQLite database path (default: ct_monitor.db)
--report No Output JSON report to specified path
--timeout No HTTP request timeout in seconds (default: 30)
--continuous No Run continuous monitoring loop
--interval No Monitoring interval in seconds (default: 900)
--resolve-dns No Resolve discovered subdomains via DNS (default: true)
--no-resolve-dns No Disable DNS resolution of subdomains
--typosquats No Enable typosquat domain scanning (slow, rate-limited)
--webhook No Webhook URL for alert notifications (Slack, Teams)
--auto-baseline No Auto-populate authorized CAs from current certificates
--add-ca No Manually add authorized CA: name and crt.sh CA ID
--smtp-host No SMTP server hostname for email alerts
--smtp-port No SMTP port (default: 587)
--smtp-user No SMTP authentication username
--smtp-pass No SMTP authentication password
--email-from No Alert email sender address
--email-to No Alert email recipient address(es)
-v, --verbose No Enable debug logging

Key Functions

query_crtsh(domain, exclude_expired, timeout)

Queries the crt.sh JSON API with wildcard domain patterns. Implements retry with exponential backoff on rate limiting (HTTP 429). Returns list of certificate records.

store_certificates(conn, certs, monitored_domain)

Stores certificates in SQLite, deduplicating by crt.sh ID. Returns only newly discovered certificates for alerting.

discover_subdomains(conn, certs, parent_domain)

Extracts unique subdomains from certificate SAN/name_value fields. Handles wildcard entries by recording the parent domain.

resolve_subdomain(subdomain, timeout)

Performs DNS A/AAAA and CNAME resolution for a single subdomain with configurable timeout.

check_unauthorized_ca(conn, new_certs)

Compares certificate issuers against the authorized CA list. Generates critical alerts for unknown CAs.

check_new_subdomain_alerts(conn, new_subdomains, parent_domain)

Generates medium-severity alerts for previously unseen subdomains discovered in CT data.

check_wildcard_certs(conn, new_certs)

Alerts on new wildcard certificate issuances which have broader security impact.

check_short_lived_certs(conn, new_certs, threshold_hours)

Detects certificates with unusually short validity periods that may indicate automated phishing infrastructure.

check_expiring_certs(conn, domain, days_warning)

Checks for certificates approaching expiration at configurable warning thresholds (30, 14, 7 days).

generate_typosquat_candidates(domain)

Generates domain permutations using omission, transposition, keyboard-adjacent replacement, and bitsquatting techniques.

scan_typosquats(domain, timeout)

Queries CT logs for certificates issued to typosquat variations of the monitored domain.

send_email_alert(alerts, smtp_host, ...)

Delivers alert notifications via SMTP with both plaintext and HTML formatting.

send_webhook_alert(alerts, webhook_url, timeout)

Posts alert notifications to a webhook endpoint (Slack, Teams, generic).

generate_report(conn, domain, output_path)

Produces a comprehensive JSON report including certificate inventory, issuer breakdown, subdomain list, and recent alerts.

run_monitor_cycle(conn, domains, ...)

Executes a complete monitoring cycle: query crt.sh, store certificates, discover subdomains, run alert checks, and deliver notifications.

Database Schema

Table Purpose
certificates All certificates seen in CT logs with issuer, validity, and SAN data
subdomains Unique subdomains discovered from certificate name_value fields
authorized_cas Whitelist of authorized Certificate Authorities for alert comparison
alerts Generated alerts with type, severity, and acknowledgment status

Alert Types

Alert Type Severity Trigger
unauthorized_ca Critical Certificate issued by CA not in authorized list
new_subdomain Medium Previously unseen subdomain in CT data
wildcard_certificate High New wildcard certificate issuance
short_lived_certificate High Certificate validity under threshold (default 24h)
certificate_expiring Medium/High Certificate approaching expiration
typosquat_detected High CT certificate found for typosquat domain variation