Home / Blog / Hardware security

Securing debug and test interfaces on circuit boards

Published Nov 2026•Hardware security

Securing debug and test interfaces on circuit boards

Every microcontroller and system-on-chip ships with ways for engineers to halt the core, read memory and reprogram flash. Those same abilities are exactly what an attacker wants. When the pins or pads that reach them are still live on a shipped product, the device is effectively open to anyone with a few pounds of adapter and an afternoon.

What is usually exposed

Three interfaces account for most findings. JTAG and its two-wire cousin SWD give low-level control of the processor: halting, single-stepping, reading and writing memory, and dumping flash. A UART console often provides a boot log and, on many products, a root shell or bootloader prompt. Finally, bare test pads and unpopulated header footprints frequently connect straight to these signals, even when no connector is fitted.

How attackers find and use them

The process is routine. The attacker opens the case, looks for rows of pads, vias or unpopulated headers near the main chip, and traces them against the datasheet. A multimeter finds ground and the supply rail; a logic analyser or a pin-identification tool sorts out which pad is transmit, receive, clock or data. Once a UART is identified, the boot messages reveal the software stack and often a login prompt. Once a debug port answers, the attacker can dump the firmware, read stored keys and credentials, patch the code in memory, or step through a security check to understand how to defeat it. A single extracted image usually exposes every unit of that model, because secrets baked into firmware are shared.

What to disable or lock

  • Enable readout protection. Most vendors offer protection levels that block flash reads over the debug port. Use the strongest level the product can live with, and understand which levels are reversible (often by erasing flash) and which are permanent.
  • Disable the debug access port in production. Many parts let you turn the port off through option bytes or one-time-programmable fuses. Blowing the fuse is a one-way step, so confirm the production flow first.
  • Use authenticated debug where available. Some silicon supports debug unlock only after a challenge-response with a device-specific key, which lets engineering return failed units without leaving the door open.
  • Gate the console. Remove the login shell, require authentication on the bootloader, and compile out verbose boot logging in release builds.
  • Do not rely on obscurity. Hiding pads under a component or renaming them on the silkscreen delays an attacker by minutes.

Remove or depopulate before shipping

Header footprints should be left unpopulated on production boards, and debug traces should avoid obvious breakout locations. Where the design allows, route debug signals on inner layers or disconnect them with a zero-ohm link that is not fitted on release units. This is a supporting measure only: the protection that matters is in the silicon configuration, not the copper.

Keeping production test possible

Factory programming and test still need access. The usual approach is to use a bed-of-nails or spring-contact fixture that presses onto small test pads at the end of the line, rather than a populated header that stays on the product. The fixture programs the firmware, runs functional checks, and only then sets the lock bits as the final step. Failed-unit analysis can go through the authenticated debug route, or through a separate engineering build that is never sold. Record which lock state each serial number was shipped in, so that an audit can show nothing left the factory open.

Checklist

ItemCheck
Readout protectionSet to the chosen level on every unit, verified by trying a read
Debug portDisabled by fuse or option bytes, or authenticated
UART consoleNo unauthenticated shell or bootloader prompt
HeadersUnpopulated on production boards
Test padsReachable by fixture only, no secrets on the nets
Lock stepFinal stage of the factory flow, logged per serial
Sample auditRandom shipped unit attacked with a debug probe each batch

The last row matters most. Locking is easy to describe and easy to get wrong in the factory, so test it on real production units rather than trusting the process document.

Key takeaways

  • Debug ports give full memory access, so treat them as a key to the product.
  • Silicon-level protection (readout levels, fuses, authenticated debug) matters more than hiding pads.
  • Use spring-contact fixtures on pads for factory test, not populated headers.
  • Make locking the last factory step and audit shipped units with a real probe.