Throughout this series, I've shared patterns discovered during a security audit on a Go authentication service: PKCS#12, timing oracle, lockout, CSRF, mTLS, CRL, CQRS. Let's now talk about the methodology itself: how the audit was conducted, and how we turned results into permanent tests.

The audit in successive passes

An audit isn't a single scan. It's an iterative process in passes, each with a different objective and decreasing yield:

Static analysis — read the code, identify security patterns (or their absence), note questions

Reconnaissance — understand flows, dependencies, trust boundaries, TLS/session/auth configurations