Oct 22, 2023
DisplayPort: domina l'Altmode
La modalità altmode DisplayPort è semi-proprietaria, ma può essere assolutamente separata se ci proviamo. L'ultima volta, abbiamo trovato un'appnote interessante che descrive in dettaglio la modalità altmode DisplayPort, in cui abbiamo inserito il FUSB302
La modalità altmode DisplayPort è semi-proprietaria, ma può essere assolutamente separata se ci proviamo. L'ultima volta, abbiamo trovato un'app interessante che descrive in dettaglio la modalità altmode DisplayPort, abbiamo commutato l'FUSB302 in modalità sniffing di pacchetti e ottenuto acquisizioni di pacchetti, imparato a conoscere i PD VDM (messaggi definiti dal fornitore) e riprodotto con successo i messaggi catturati per passare a USB-C porta nella modalità alternativa DisplayPort. Oggi esamineremo i sette messaggi che richiamano la modalità altmode di DisplayPort, li implementeremo e li collegheremo tutti in una libreria, quindi scopriremo l'hardware di cui abbiamo bisogno per far funzionare DisplayPort in natura.
Per cominciare, come avrai visto dal diagramma, un singolo comando può essere una richiesta o una risposta. Ad esempio, se ricevi un Discover Identity REQ (richiesta), rispondi con un Discover Identity ACK (risposta), aggiungendo i tuoi dati di identità alla risposta lungo il percorso. Con alcuni comandi, la sorgente DP aggiungerà alcuni dati da utilizzare; per la maggior parte dei comandi, il tuo sink DP dovrà invece fornire informazioni e noi faremo proprio questo, armati del PDF fornito e dei pacchetti acquisiti.
Abbiamo sette comandi che dobbiamo gestire per far uscire DisplayPort da una porta USB-C compatibile: se hai bisogno di un aggiornamento su questi comandi, pagina 13 del PDF della ST sul DP altmode ti mostrerà la sequenza dei messaggi. Questi comandi sono: Discover Identity, Discover SVIDs, Discover Modes, Enter Mode, DP Status Update, DP Configure e Attenzione. Di questi, i primi quattro sono già parzialmente descritti nello standard USB PD di base, i due comandi DP successivi sono specifici di DisplayPort-altmode ma sufficientemente descritti nel PDF che abbiamo, e anche il comando Attenzione proviene dallo standard di base, utile soprattutto per segnalare lo stato del pin HPD. Cominciamo con i primi due!
I primi due comandi non sono affatto specifici di DisplayPort. In particolare, il messaggio Discover Identity è onnipresente. Proprio come con il messaggio Source_Capabilities che non abbiamo nemmeno dovuto richiedere all'alimentatore, se ti colleghi a una porta USB-C di un laptop con capacità DP o anche Thunderbolt, riceverai un messaggio di comando Discover Identity. Se il tuo dispositivo è in grado di gestire qualsiasi modalità alternativa, rispondere a questo messaggio è il modo in cui annunci questa funzionalità.
La tua risposta a Discover Identity dovrà contenere una serie di dati sul tuo dispositivo: la maggior parte di questi dati puoi completamente falsificarli. Questi dati indicano che sei un adattatore in modalità alternativa, ci sono due bit che indicano se sei in grado di gestire l'host USB o il dispositivo USB, un campo "certificazione" che può essere lasciato completamente vuoto, così come USB VID e PID. Per quanto ne so, VID e PID non vengono utilizzati per nulla dal punto di vista delle funzionalità, a differenza dei normali PID e VID della connessione USB, che sappiamo essere utilizzati per la selezione dei driver nei sistemi operativi. L'adattatore in mio possesso ha l'ID fornitore 0xBDA, l'ID prodotto 0x2172 e il numero bcdDevice 0x201. Questi valori vengono inviati una volta e non vengono visualizzati in nessuna ulteriore comunicazione USB-C.
Il secondo comando è Discover SVID: gli SVID sono, essenzialmente, codici a due byte per le modalità alternative supportate dal tuo dispositivo. Se la tua risposta è 0xFF01 (quindi rispondi con 0xFF010000 come dato extra), riceverai un cookie, sotto forma di riconoscimento come dispositivo compatibile con DisplayPort altmode. Uno dei dispositivi che possiedo risponde con 0xFF01, ma aggiunge anche 0x25A4: il mio sospetto è che si tratti di un'interfaccia di aggiornamento del firmware, quindi se mai volessi sondare i dispositivi USB-C per scopi di pentesting, questo sarebbe assolutamente un vettore guardare dentro.
Fornendo la risposta 0xFF01 alla richiesta Discover SVIDs, affermiamo che il nostro dispositivo supporta la modalità altmode DisplayPort, anche se, a dire il vero, siamo a metà strada nell'implementarlo correttamente, fingendolo finché non lo realizziamo. Non preoccuparti, però, perché siamo sulla strada giusta: ora parliamo delle specifiche DisplayPort. Il nostro terzo comando è Discover Modes, in cui lasciamo che la sorgente DP sappia come esattamente la nostra DisplayPort deve essere mappata sul connettore USB-C.