Skip to the content
PCBKitNew board
4 layers170.4 × 73 mmFault injector, the printed circuit board in 3D

Artifact for "Battering RAM: Low-Cost Interposer Attacks on Confidential Computing via Dynamic Memory Aliasing"

Size
170.4 × 73 mm
Copper layers
4
Thickness
1.6 mm
Parts
88
Nets
244
Pads
822
Tracks, vias
1,091, 259
Pours
4
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
30 Sep 2025
Updated
13 Oct 2026

Overview

Fault injector is an open-source printed circuit board by batteringramattack, from the batteringramattack/batteringram repository on GitHub, published under the MIT licence. It is a 4-layer board of 170.4 × 73 mm with 88 parts on 244 nets, routed with 1,091 tracks and 259 vias.

It is built around the ADG902BRMZ. Its parts include 12 resistors, 9 capacitors, 9 ICs and 2 connectors. It belongs with the RP2040 boards of this library.

Main components

1

README

ddr4-interposer/README.md

Battering RAM interposer

This directory contains the schematics and PCB layout (KiCad) of the Battering RAM interposer.

The interposer is configurable: it has several footprints for analog switches, of which only a few are populated, depending on which address lines you want to manipulate. The sections below describe which parts are always required, which depend on the configuration, and the configurations we used in the paper.

Bill of materials

DescriptionReferencePart numberPopulate
DDR4 DIMM connectorJ2CONN-DDR4-288-SMAlways
Raspberry Pi Pico 2U3Raspberry Pi Pico 2Always
Voltage regulator, 2.5 VU8LD1117S25TRAlways
Capacitor, 1206, 10 µFC9Always
Capacitor, 0603, 100 nFC8Always
Analog switchU1, U2, U4–U7, U9ADG902BRMZPer configuration
Resistor, 0402, 1 kΩR1–R7Per configuration
Capacitor, 0603, 100 nFC1–C7Per configuration
Jumper, 0402, 0 ΩR8, R9, R11, R13, R17Per configuration

Switch positions

The interposer has seven switch positions:

  • In-line switches (U4, U1, U6) sit in the path of the A11, A13 and A17 command/address (CA) lines. They are labeled Axx -> Axx on the silkscreen.
  • Redirect switches (U5, U2) connect the CPU-side A11 or A13 line to the DIMM-side A17 line. They are labeled Axx -> A17 on the silkscreen. To connect the switch output to the DIMM, the output jumper must be populated.
  • General-purpose switches (U7, U9) are not connected to any signal. They can be wired to any signal by cutting the bridged jumpers and connecting them to the test points using using thin enameled (magnet) wire.

Each switch has its own pull-up resistor and decoupling capacitor. Each in-line switch also has a passthrough jumper that connects the line directly when the switch is not populated.

SwitchCPU-side lineDIMM-side linePassthrough jumperPull-upDecoupling capOutput Jumper
U4A11A11R11R4C2-
U1A13A13R13R1C3-
U6A17A17R17R5C5-
U5A11A17–R3C4R8
U2A13A17–R2C1R9
U7TP2 / TP11TP6 / TP12–R6C6-
U9TP8 / TP9TP7 / TP10–R7C7-

Configuring the interposer

Each populated switch needs a pull-up resistor (1 kΩ) and a 100 nF decoupling capacitor, see the table above. In-line switches (U4, U1, U6) that are left unpopulated need their passthrough jumper instead, otherwise the corresponding address line is not connected to the DIMM. The exception is A17 when one of the redirect switches (U5, U2) is installed: the redirect switch then drives A17, so R17 is left unpopulated.

[!NOTE] Each DIMM-side line must be driven by exactly one path: its in-line switch, its passthrough jumper, or (for A17) one of the redirect switches. For example, populating both U5 (A11 -> A17) and U6 (A17 -> A17), or U2 (A13 -> A17) together with R17, is invalid, as both would drive A17 on the DIMM.

Bridged jumpers on other signals

Besides the switch positions, many other signals pass through 0402 jumper footprints (JP1–JP20 and JP23–JP43) that are bridged on the PCB by default. This includes most of the CA bus (all address lines except A11, A13 and A17, which go through the switch positions), the clock, reset and chip-select lines, among others. These signals work as-is without populating anything.

To manipulate one of these signals, cut the bridge between the jumper pads to interrupt the line, and wire the two pads to one of the general-purpose switches (U7, U9). To restore the original connection later, simply solder a 0402 0 Ω resistor onto the footprint.

Configurations used in the paper

Single switch (Figure 5a)

PopulatePassthrough jumpers
U1 (A13 -> A13) with R1, C3R11, R17

Redirecting an address line (Figure 5b)

PopulatePassthrough jumpers
U1 (A13 -> A13) with R1, C3R11
U2 (A13 -> A17) with R2, C1, R9

Dual switches (Figure 5c)

PopulatePassthrough jumpers
U4 (A11 -> A11) with R4, C2R17
U1 (A13 -> A13) with R1, C3

Fabrication

Recommended settings when ordering the PCB:

  • Layers: 4
  • PCB thickness: 1.6 mm (or 1.4 mm if available, see note below)
  • Min via: 0.2 mm drill / 0.35 mm diameter
  • Surface finish: ENIG
  • Copper weight: 1 oz outer / 0.5 oz inner
  • Everything else: fab default settings (no controlled impedance or special stack-up required)

[!NOTE] 1.6 mm is slightly thicker than regular DDR4 memory modules (1.4 mm). To avoid damaging the motherboard's DIMM socket, it is recommended to use a DDR4 DIMM extender between the motherboard and the interposer.

Parts

88
QtyValueFootprintReferences
41Jumper_2_Bridgedbadram:Jumper_0402_bridgedJP1, JP2, JP10, JP11, JP12, JP13, JP14, JP15, JP16, JP17, JP18, JP19, JP20, JP23, JP24, JP25 +25
15TestPointTestPoint:TestPoint_Pad_1.0x1.0mmTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15
71kResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR1, R2, R3, R4, R5, R6, R7
7ADG902BRMZPackage_SO:MSOP-8_3x3mm_P0.65mmU1, U2, U4, U5, U6, U7, U9
7C_SmallCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C2, C3, C4, C5, C6, C7
30RResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR11, R13, R17
20Resistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR8, R9
1100nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC8
110uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC9
1DDR4_to_DIMMbadram:ddr4-edge-conn-female-badramJ2
1DDR4_to_MBfi-library:ddr4-edge-conn-maleJ1
1LD1117S25TR_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U8
1Picobadram:RPi_Pico_SMD_THU3

Questions

How big is the Fault injector PCB?

It measures 170.4 × 73 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Fault injector use?

88 parts, built around the ADG902BRMZ. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Fault injector KiCad files?

From the batteringramattack/batteringram repository on GitHub, at the commit this page was made from: the board is ddr4-interposer/fault-injector.kicad_pcb and its schematic ddr4-interposer/dimm-conn.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fault injector design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers133.4 × 23.9 mmFault injector, the printed circuit board in 3D

    Fault injector

    microsoft/mfit

    Memory Fault Injection Tool

    14 parts10MIT
  • 4 layers95 × 95 mmOpenmicro, the printed circuit board in 3D

    Openmicro

    conol-ai/openmicrokbd

    Open-source recreation of OpenAI's Codex Micro macropad — PCB written in CoHDL, an AI-native hardware description language. Rust firmware (embassy) + companion app (makepad). MIT licensed. https://openmicrokbd.org

    88 parts154MIT
  • 4 layers49.3 × 45.4 mmKbxIrBlaster, the printed circuit board in 3D

    KbxIrBlaster

    kbx81/kbxIRBlaster

    ESP32-based IR MegaBlaster!

    88 parts58CC-BY-SA-4.0
  • 4 layers68 × 61.3 mmPipar chip, the printed circuit board in 3D

    Pipar chip

    RasmusKoit/pipar

    Pipar is a collection of keyboards

    88 parts56CERN-OHL-S-2.0
  • 4 layers70 × 48 mmNV Meter PS rev b, the printed circuit board in 3D

    NV Meter PS rev b

    curtisseizert/Nanovoltmeter

    A low noise nanovoltmeter design files and code

    88 parts44
  • 4 layers66.7 × 37.6 mmL0destar, the printed circuit board in 3D

    L0destar

    m4rkw/l0destar

    l0destar open-source tracker project

    88 parts43
  • 4 layers27 × 27 mmO32controller, the printed circuit board in 3D

    O32controller

    qwertpas/O32controller

    Miniature closed-loop controller for brushless DC motors

    88 parts37MIT