courses

Attacks

Why this matters

The rest of this course teaches techniques one at a time: find the UART, decode the bus, dump the flash, load it in Ghidra. This page is about how they compose into an assessment, what vulnerability classes you should expect to find, and how to say something defensible about what you found.

It is also where the course connects to the standards a real report gets measured against — because “I got a root shell” is a demonstration, and “this device fails ETSI EN 303 645 provision 5.1-1” is a finding.

⚠️ Scope and authorization. Everything here applies to hardware you own or hardware the course provides. Attaching a logic analyzer to someone else’s device, decoding someone else’s radio traffic, or extracting firmware from a device you do not own ranges from a licence-agreement violation to a federal crime depending on the device and jurisdiction. Ask before you probe.

The attack surfaces

The OWASP IoT Security Testing Guide decomposes a device into surfaces, and its model maps almost one-to-one onto this course:

ISTG surface Course coverage
Processing units Chip identification, JTAG
Memory Dumping flash
Firmware Software RE
Internal interfaces UART, I2C, SPI
Data exchange services Network capture, OTA analysis
Wireless interfaces Radio
Physical interfaces Ports, headers, tamper protection

Structuring a report around these demonstrates coverage rather than asserting it, which is the difference between a finding list and an assessment.

Vulnerability classes you should expect

These are not exotic. They recur across vendors, price points, and decades.

Credentials

Class What it looks like
Hardcoded credentials Passwords compiled into the binary or shipped in the filesystem
Universal default passwords The same admin/admin on every unit — banned outright by ETSI EN 303 645
Undocumented service accounts A vendor backdoor for field support, absent from every manual
Credentials in the update image Rotating user passwords while the service account stays put

The last one is worth dwelling on. Vendors rotate what a password-policy audit checks. The hardcoded account is in the code, and nobody’s checklist covers it.

Authentication logic

Update mechanisms

The highest-value finding class in IoT, because it is remotely reachable and compromises every unit at once:

Debug and diagnostic interfaces

Memory corruption, and why it is worse here

Stack overflows, off-by-ones, missing bounds checks, format strings — the classic set from Memory Corruption. What changes is the consequence.

On a no-MMU RTOS, any memory corruption bug is total compromise. There is no privilege boundary to cross, no ASLR, frequently no stack canaries, and the mitigations you rely on elsewhere simply do not exist. A stack overflow in a FreeRTOS network task is game over in a way it has not been on desktop Linux since roughly 2004.

System Isolation Consequence of a memory bug
OpenWRT / embedded Linux MMU, processes, users Compromise of one process; mitigations apply
Zephyr MPU, optional userspace Contained if configured
FreeRTOS None by default Immediate total compromise
VxWorks MMU on supported targets Varies by configuration

Cryptographic failures

Physical attacks

Beyond reading interfaces, two classes need dedicated hardware and are worth knowing even if you never perform them.

Fault injection

Deliberately inducing hardware faults — voltage glitches, clock glitches, electromagnetic pulses — to make a processor skip or corrupt an instruction at a chosen moment. It defeats software checks that are otherwise sound, which makes it the standard answer to a locked debug port or a signature check you cannot bypass logically.

The mechanism: a protection check is a branch. Glitch the supply rail during that branch and the comparison may produce the wrong result, or the branch may not execute at all. Success rates are typically low per attempt and it does not matter, because attempts are cheap and automatable.

The course kit has a ChipWhisperer Lite and a Faultier. This is the Project C final-project option.

Side channels

Recovering secrets from physical measurements rather than from the computation’s output:

Evaluating against a baseline

Findings are more useful when they are measured against something. Three documents define what “reasonably secure” means for consumer IoT, and any makes a defensible report structure.

ETSI EN 303 645 — the European consumer IoT baseline. Thirteen outcome-focused provisions: no universal default passwords, a vulnerability disclosure policy, keep software updated, securely store sensitive security parameters, minimise exposed attack surfaces. Outcome-focused means testable, which is what makes it useful to an assessor rather than only to a lawyer.

NIST IR 8259A — the US device-capability core baseline, aimed at manufacturers. Six capability areas: device identification, device configuration, data protection, logical access to interfaces, software update, and cybersecurity state awareness.

OWASP IoT Security Testing Guide — a testing methodology rather than a requirements list, decomposing the device into the surfaces tabulated above and specifying test cases per surface.

The older OWASP IoT Top 10 (2018) remains widely cited and is a reasonable vocabulary for describing findings, but it is a risk list rather than a methodology and has not been revised in some years. Prefer the ISTG for structuring actual testing.

Writing it up

A finding that cannot be reproduced is an anecdote. Each one needs:

  1. What. One sentence, specific. Not “weak authentication” but “the password comparison uses the supplied string’s length, so any prefix authenticates”.
  2. Where. File, offset, function, or interface. Address if you have it.
  3. How to reproduce. Enough for a competent reader with the same hardware.
  4. Impact, argued. What can an attacker do, from what position? “Remote unauthenticated” and “physical access plus an hour” are very different.
  5. Severity, justified. Against stated criteria, not asserted.
  6. Remediation, priced. What to change, and what it costs the vendor in engineering effort and field risk. Recommendations that ignore cost are not recommendations.

Depth beats breadth

Twelve superficial findings are weaker than four with one taken all the way down to the instruction that causes it. This is stated in the final project rubric and it reflects how assessment reports are actually read: a client skims the list and reads the one finding that proves you understood their device.

Report what you did not find

“Debug port present but locked; confirmed by X; did not pursue fault injection” is a finding about the device’s security posture. Silence is not. A stage that produced nothing still needs its method documented, or the reader cannot tell whether you looked.

Coordinated disclosure

If you find something real in a device you do not have permission to break:

  1. Check for a published policy. A security.txt at /.well-known/, a bug-bounty page, a security contact in the manual.
  2. Report privately first, with enough detail to reproduce.
  3. Agree a timeline. 90 days is the common default.
  4. Have a plan for non-response, because non-response is the common case for consumer IoT vendors. CERT/CC will coordinate on your behalf.

For anything found in this course, talk to the instructor before contacting a vendor. The technical work is the easy part; the rest benefits from institutional backing.

Key takeaways

References


Related course pages: Schedule · Final Project · Software RE · Dumping flash · Radio · JTAG and SWD · Threat Modeling · Memory Corruption

🛠️ Maintenance note: the baselines move slowly but they do move — ETSI EN 303 645 and the NIST IR 8259 series are both worth re-checking for revisions each offering, and the OWASP IoT Top 10 has been due an update for several years. The vulnerability classes themselves have been stable for a decade and are unlikely to need revision; the examples illustrating them will date faster than the classes do.