"""스킬 보안 스캔 위협 패턴 정의.

THREAT_PATTERNS: (regex, pattern_id, severity, category, description)
severity: "critical" | "high" | "medium" | "low"
"""

THREAT_PATTERNS: list[tuple[str, str, str, str, str]] = [
    # ── exfiltration ────────────────────────────────────────────────────────
    (
        r"curl.*\$\{?\w*(KEY|TOKEN|SECRET|PASS|API)",
        "EXFIL-001",
        "critical",
        "exfiltration",
        "환경변수 외부 전송",
    ),
    (
        r"wget.*\$\{?\w*(KEY|TOKEN|SECRET|PASS|API)",
        "EXFIL-002",
        "critical",
        "exfiltration",
        "환경변수 외부 전송(wget)",
    ),
    # ── injection ────────────────────────────────────────────────────────────
    (
        r"(?:ignore|disregard|forget)\s+(?:all\s+)?(?:previous|above|prior)",
        "INJ-001",
        "critical",
        "injection",
        "프롬프트 인젝션",
    ),
    (
        r"system\s*prompt\s*[:=]",
        "INJ-002",
        "high",
        "injection",
        "시스템 프롬프트 재정의",
    ),
    # ── destructive ──────────────────────────────────────────────────────────
    (
        r"rm\s+-rf\s+/(?!\S)",
        "DEST-001",
        "critical",
        "destructive",
        "루트 삭제",
    ),
    (
        r"mkfs\.\w+",
        "DEST-002",
        "critical",
        "destructive",
        "파일시스템 포맷",
    ),
    # ── persistence ───────────────────────────────────────────────────────────
    (
        r"crontab\s+",
        "PERS-001",
        "high",
        "persistence",
        "cron 등록",
    ),
    (
        r"authorized_keys",
        "PERS-002",
        "high",
        "persistence",
        "SSH 키 조작",
    ),
    # ── network ───────────────────────────────────────────────────────────────
    (
        r"nc\s+-[le]",
        "NET-001",
        "critical",
        "network",
        "역쉘(netcat)",
    ),
    (
        r"ngrok",
        "NET-002",
        "high",
        "network",
        "터널링",
    ),
    # ── obfuscation ───────────────────────────────────────────────────────────
    (
        r"base64.*\|\s*(?:bash|sh|python)",
        "OBF-001",
        "critical",
        "obfuscation",
        "인코딩 후 실행",
    ),
    (
        r"eval\s*\(",
        "OBF-002",
        "high",
        "obfuscation",
        "eval 사용",
    ),
    # ── supply_chain ──────────────────────────────────────────────────────────
    (
        r"curl.*\|\s*(?:bash|sh)",
        "SC-001",
        "critical",
        "supply_chain",
        "파이프 설치",
    ),
    # ── credential_exposure ───────────────────────────────────────────────────
    (
        r"(?:sk-|ghp_|gho_|AKIA)[A-Za-z0-9]{20,}",
        "CRED-001",
        "critical",
        "credential_exposure",
        "하드코딩 토큰",
    ),
    (
        r"-----BEGIN (?:RSA |EC )?PRIVATE KEY-----",
        "CRED-002",
        "critical",
        "credential_exposure",
        "개인키 노출",
    ),
]

# 보이지 않는 유니코드 문자 집합 (obfuscation 탐지용)
INVISIBLE_CHARS: set[str] = {
    "\u200b",  # zero-width space
    "\u200c",  # zero-width non-joiner
    "\u200d",  # zero-width joiner
    "\u200e",  # left-to-right mark
    "\u200f",  # right-to-left mark
    "\u2060",  # word joiner
    "\u2061",  # function application
    "\u2062",  # invisible times
    "\u2063",  # invisible separator
    "\u2064",  # invisible plus
    "\u202a",  # left-to-right embedding
    "\u202b",  # right-to-left embedding
    "\u202c",  # pop directional formatting
    "\u202d",  # left-to-right override
    "\u202e",  # right-to-left override
    "\ufeff",  # zero-width no-break space (BOM)
}
