Yamaha sünthaizeris avastatud peidetud käsurea liides, mis võimaldas koodi täitmist MIDI kaudu

Anna Antonenko, kes tegeleb sisseehitatud süsteemide arendamisega ja arendab vabajal BOSS-i (BEAM-põhine opsüsteem, millel on turvalisus), avaldas tulemused Yamaha PSR-E433 muusikalisüntesaatori tagasijälgimisest. Tehtud töö käigus avastati sünthaizerist obfuskeeritud shell-liides, mis võimaldas käivitada oma koodi püsivara tasemel. Juurdepääs shell-liidesele toimub MIDI-pakettide saatmise kaudu SysEx sõnumitega, mida saab edastada sünthaizeri USB-porti ühendamisel. Tagasijälgimise käigus saadud teave mikroskeemi ja püsivara kohta, samuti koodinäidised ja silumistooted on saadaval GitHubis.

Tagasitõmbamise huvi tekkis paar aastat tagasi, kui Anna otsustas süntesaatori sisemust tolmust puhastada ja rahuldada oma uudishimu, uurides seadme sisu. Plaadil oli YAMAHA SWL01U kiip, mille kohta ei leidunud internetis põhjalikku teavet. Mõni kuu tagasi leidis Anna sarnase süntesaatori mudeli juhendi, milles oli selle kiibi pinout. Anna koosseisu lahti võtnud ja katsetama asunud, kasutas ta plaadilt leiduvaid JTAG ja UART debugimise liidese väljundeid.

Yamaha sünthaizeris avastatud peidetud käsurea liides, mis võimaldas koodi täitmist MIDI kaudu

OpenOCD häälestaja abil, ühendudes JTAG-ga ja katsetades, selgus, et plaadil on ARM7TDMI protsessorituuma kiip. Uurides mälumooduli jaotust häälestajas, õnnestus laadida välja BIOS-i ja Flash-mälu sisu. Pärast seda analüüsiti BIOS-i pilte Ghidra tagasitõmbamise pakendis.

Vaadat unustamise käigus nähtud tarkvarastringide andmetest leiti hulk ridu ("help", "info", "ver", "logout" jne), mis meenutavad käsurealiidese käsklusi. Nende ridade näidikute uurimine võimaldas leida koodi, mis kutsub üles funktsioone käsu töötlemiseks, meenutades sisselogimisliidest ja käsurealiidest. Samuti tuvastati, et shelli aktiveerimiseks on ette nähtud käsk "login", millele tuleb anda parool "#0000". void shell_run_command(char* command_input) { if (shell_login_state == 0) { if (shell_compare_command(command_input, "login") == 0) { shell_ask_passwd(); // prindib "passwd? " shell_login_state = 1; } } else if (shell_login_state == 1) { if (shell_compare_command(command_input, "#0000") == 0) { shell_login_ok(); // prindib "login OK" shell_login_state = 2; } else { shell_print("Passwd Error\r"); shell_login_state = 0; } } else { // täida käsk } }

Edasi uurides tarkvara, selgus, et käsud töödeldakse pakettidena, mis algavad alati samade 8 baitiga andmetega ja lõpevad koodiga 0xf7. Kuna välised suhted sünteesijaiga toimuvad ainult läbi MIDI ning MIDI spetsifikatsioonis on ette nähtud spetsiaalne teenindustüüp avaldusi SysEx, siis oletati, et just seda kasutatakse käskude edastamiseks. Eeldust toetas ka see, et SysEx sõnumid ja shell'i käideldud paketid algasid koodiga 0xf0, millele järgnes tootja identifikaator 0x43 (Yamaha).

Hüpoteesi kontrollimiseks valmis Python-skript, mis tõlkis sisestatud andmed MIDI protokolli paketiteks. Ja meetod töötas: login passwd? #0000 login OK > help logout help ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ADDRESS DATA m/b ADDRESS DATA m/w ADDRESS DATA m/l ADDRESS DATA > info DevelopName PSR-E433 DevelopNumber #3341 Main DevelopNumber #3341 Make data & time MAY 16 2012 19:00:57 J/E Select English >

Vihikus, mis kuvatakse käsu "help" saatmise ajal, olid muu hulgas käsud, mis võimaldasid muuta mälu sisu. Nende käskude abil oli võimalik laadida juhuslikku koodi mällu ja edastada sellele juhtimist, asendades funktsiooni tagasituleku pointeri, mida kasutatakse käsu töötlemise lõpus. Eksperimendina paigutati kasutamata mälu piirkonda lihtne assembleril kirjutatud rakendus, mis kuvab 8-kohalist "HeloWrld" stringi LCD-indikaatoris. Programm oli vormistatud tavaliseks MIDI-failiks, mille edastamine seadmele oli piisav.

Yamaha sünthaizeris avastatud peidetud käsurea liides, mis võimaldas koodi täitmist MIDI kaudu

Seejärel hakati uurima graafika kuvamise iseärasusi LCD-ekraanil, mille tipphetkeks oli koodi ettevalmistamine, mis kuvab juhuslikku pikslisisu tähestikulises piirkonnas, sünkroonselt Bad Apple video esitamisega välisseadmel (demonstreeriva videoga).

Yamaha sünthaizeris avastatud peidetud käsurea liides, mis võimaldas koodi täitmist MIDI kaudu
Vaata videot


Allikas: opennet.ru
Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster