// AttackSurface.jsx — animated radial map of the 9 attack surfaces we cover, // with a live ATT&CK-aligned tactic counter beneath. const SURFACES = [ { id: 'web', label: 'Web Apps', icon: 'globe', cves: 47, vectors: 24 }, { id: 'api', label: 'APIs', icon: 'code', cves: 38, vectors: 18 }, { id: 'mobile', label: 'Mobile', icon: 'fingerprint', cves: 22, vectors: 16 }, { id: 'ext', label: 'External net', icon: 'network', cves: 56, vectors: 21 }, { id: 'int', label: 'Internal AD', icon: 'server', cves: 41, vectors: 28 }, { id: 'cloud', label: 'Cloud', icon: 'cloud', cves: 29, vectors: 19 }, { id: 'iot', label: 'IoT / OT', icon: 'radar', cves: 17, vectors: 14 }, { id: 'redteam', label: 'Red Team', icon: 'target', cves: 8, vectors: 32 }, { id: 'ai', label: 'AI · LLM', icon: 'sparkle', cves: 12, vectors: 11 }, ]; const ATTCK_TACTICS = [ { code: 'TA0043', name: 'Reconnaissance', count: 247 }, { code: 'TA0042', name: 'Resource Dev', count: 84 }, { code: 'TA0001', name: 'Initial Access', count: 631 }, { code: 'TA0002', name: 'Execution', count: 902 }, { code: 'TA0003', name: 'Persistence', count: 458 }, { code: 'TA0004', name: 'Privilege Esc.', count: 712 }, { code: 'TA0005', name: 'Defense Evasion', count: 489 }, { code: 'TA0006', name: 'Credential Access', count: 814 }, { code: 'TA0007', name: 'Discovery', count: 1024 }, { code: 'TA0008', name: 'Lateral Movement', count: 396 }, { code: 'TA0009', name: 'Collection', count: 287 }, { code: 'TA0010', name: 'Exfiltration', count: 142 }, { code: 'TA0040', name: 'Impact', count: 173 }, { code: 'TA0011', name: 'Command & Control', count: 318 }, ]; const AttackSurface = () => { return (

Coverage

Every part of your attack surface

We cover nine attack surfaces and all fourteen MITRE ATT&CK tactics. Every test is logged and every finding is reproducible.

{/* Radial surface map */}
Attack-surface map
9 surfaces · live
{/* ATT&CK tactic counter */}
MITRE ATT&CK alignment
Techniques used across 600+ engagements
v15
{ATTCK_TACTICS.map(t => ( ))}
); }; const SurfaceRadial = () => { const [active, setActive] = React.useState(0); React.useEffect(() => { const id = setInterval(() => setActive(a => (a + 1) % SURFACES.length), 2200); return () => clearInterval(id); }, []); const cx = 50, cy = 50; const radius = 36; const positions = SURFACES.map((_, i) => { const a = (i / SURFACES.length) * Math.PI * 2 - Math.PI / 2; return { x: cx + Math.cos(a) * radius, y: cy + Math.sin(a) * radius, angle: a }; }); return (
{/* Concentric rings */} {[10, 18, 26, 34].map((r, i) => ( ))} {/* Radial spokes */} {positions.map((p, i) => ( ))} {/* Pulsing core */} {/* Surface node circles */} {positions.map((p, i) => ( {i === active && ( )} ))} {/* Center label */} CORE · OPS-2026 {/* Surface labels — SVG text with rect backing, anchored inside viewBox */} {SURFACES.map((s, i) => { const p = positions[i]; const lx = cx + Math.cos(p.angle) * (radius + 5); const ly = cy + Math.sin(p.angle) * (radius + 5); const isLeft = lx < cx; const labelW = Math.max(20, s.label.length * 1.6 + 4); const tx = isLeft ? lx - labelW : lx; const ty = ly - 2.5; const isActive = i === active; return ( setActive(i)} style={{ cursor: 'pointer' }}> {s.label} ); })} {/* Detail card for active surface */}
{SURFACES[active].label}
{SURFACES[active].vectors} vectors · {SURFACES[active].cves} CVEs on file
); }; const TacticRow = ({ t }) => { const max = 1024; const pct = (t.count / max) * 100; return (
{t.code}
{t.name}
{t.count}
); }; Object.assign(window, { AttackSurface });