Pri vývoji vstavaného (embedded) softvéru je štandardné protokolovanie na úrovni softvéru (ako napríklad používanie funkcie printf() cez sériovú linku UART) často nedostatočné na diagnostikovanie zložitých problémov s časovaním (timing), tvrdých pádov jadra (hard faults) alebo chýb pri prepínaní kontextu v operačných systémoch RTOS. Inžinieri si vyžadujú hlbokú, neintruzívnu viditeľnosť (visibility) priamo do samého jadra procesora. Túto viditeľnosť poskytujú hardvérové ladiace rozhrania, a to predovšetkým JTAG a SWD.
JTAG (Joint Test Action Group)
Štandardizovaný pod označením IEEE 1149.1, JTAG bol pôvodne vyvinutý v 80. rokoch minulého storočia nie na ladenie softvéru, ale na účely testovania vo výrobe. Ako sa dosky plošných spojov (PCB) stávali hustejšími a puzdrá typu BGA (Ball Grid Array) skrývali svoje spájkované spoje pod samotným čipom, tradičné fyzické testovanie pomocou kontaktných polí ihiel (tzv. “bed-of-nails”) sa stalo takmer nemožným a nespoľahlivým.
JTAG tento problém vyriešil pomocou technológie Boundary Scan (hraničné snímanie). Pripája vnútorný posuvný register (shift register) na každý jeden hardvérový pin integrovaného obvodu (IC). Posúvaním bitových vzorov 1 a 0 sériovo do čipu a ich následným načítaním späť dokáže testovací systém overiť, či sú fyzické spájkované spoje na DPS neporušené, a to bez akejkoľvek potreby fyzického prístupu sondou.
Postupom času výrobcovia kremíka rozšírili funkcionalitu architektúry JTAG tak, aby umožňovala vnútornú manipuláciu so samotným stavom procesora (CPU stat). Štandardné kompletné rozhranie JTAG vyžaduje vyvedenie štyroch (niekedy piatich) vyhradených pinov:
- TDI (Test Data In): Sériový dátový vstup do boundary scan reťazca.
- TDO (Test Data Out): Sériový dátový výstup z reťazca.
- TCK (Test Clock): Hodinový signál (clock), ktorý synchronizuje testovací radič prístupového portu zvaný TAP (Test Access Port).
- TMS (Test Mode Select): Pin, ktorý riadi stavový automat TAP radiča.
- TRST (Test Reset, Voliteľný): Asynchrónne resetuje TAP radič do východzieho stavu.
Keďže JTAG využíva topológiu “daisy-chain” (reťazenie za sebou), je možné sériovo pripojiť viacero integrovaných obvodov (napríklad jeden MCU, FPGA a pamäť. obvod CPLD) na jednu jedinú zbernicu JTAG rozhrania. To umožňuje jedinému ladiacemu konektoru na doske naprogramovať a následne otestovať celú zostavu hardvéru PCB.
SWD (Serial Wire Debug)
SWD je alternatíva k rozhraniu JTAG vyvinutá špecificky spoločnosťou ARM, navrhnutá najmä pre moderné, plošne a pinovo obmedzené mikrokontroléry Cortex-M. Vývojári ARM si totiž uvedomili, že alokovať 4 alebo 5 vyhradených pinov predstavuje pri malých integrovaných obvodoch drahú plošnú daň, a preto vytvorili protokol, ktorý dosahuje identické možnosti ladenia kódu a prístupu do fyzickej pamäte s použitím iba dvoch pinov:
- SWDIO (Serial Wire Data Input/Output): Obojsmerný fyzický dátový pin.
- SWCLK (Serial Wire Clock): Hodinový synchronizačný signál.
Tretí pin tohto rozhrania, označený ako SWO (Serial Wire Output), je výnimočne výkonný, avšak vývojármi bohužiaľ často a nevedome podceňovaný. SWO funguje prostredníctvom bloku ARM ITM (Instrumentation Trace Macrocell). Samotný pin zabezpečuje vysokorýchlostný, jednosmerný dátový tok prúdiaci von z čipu bez toho, aby sa musel inštrukčne pozastaviť (halt) beh procesora alebo akokoľvek spotrebovávať chabé cykly UART sériového portu. Toto majstrovské riešenie umožňuje absolútne real-time hardvérové profilovanie programu, bezstratové sledovanie pamäte premenných a výkonnostne nulové (zero-overhead) printf() logovanie a odlaďovanie kódu prostredníctvom pinu SWO synchrónne bez spomalenia bežiaceho kódu.
Bezpečnostná dilema ladiacich portov
JTAG a SWD poskytujú tzv. “božský mód” (god-mode) pre prístup k štruktúram na samotnom kremíku. Inžinier (či útočník) pripojený do fyzických padov týchto portov môže natvrdo prerušiť procesor, čítať absolútne ľubovoľné pamäťové miesta, získať okamžitý celistvý dump obsahu pamäte flash a donekonečna voľne manipulovať s vnútornými registrami CPU.
Z pohľadu kybernetickej bezpečnosti je preto vystavený a nechránený ladiaci port na prístroji tou najkatastrofálnejšou zraniteľnosťou. Exponovaný debug port totižto kompletne obchádza mechanizmy systému Secure Boot aspoň u lacnejších čipov a robí softvérové šifrovanie aplikácie len triviálne prekonateľným zraniteľným bodom. Neetickí hackeri a útočníci na trhu bežne cielene hľadajú práve testovacie plôšky rozhraní JTAG/SWD priamo na hotových PCB doskách komerčných zariadení s jediným cieľom - pre reverzné inžinierstvo chráneného komerčného firmvéru alebo pre finálnu extrakciu súkromných kryptografických kľúčov užívateľa.
Prístup spoločnosti Inovasense k ladeniu hardvéru
V spoločnosti Inovasense sú systémy pre rozhrania slúžiace ladeniu kódu počas celého ich životného cyklu (lifecycle) obrovsky a drsne chránené pod prísnym neustálym dohľadom. Dbáme, aby sa tieto zraniteľné porty využívali len na profesionálny vývoj (Development Phase) s použitím nástrojov Segger a Lauterbach, a pre produkčné nasadenie plne dodržiavame CRA normy zavádzaním viacúrovňového zabezpečenia - od fyzického odstavenia spojov, po odpálenie eFuses v jadre, a v kritických prípadoch používame Autentifikované Asymetrické Bezpečné Ladenie pre povolenie servisu bez narušenia obrannej škrupiny hardvéru.