DisplayPort: domesticando o Altmode
O modo alternativo DisplayPort é semiproprietário, mas pode ser totalmente desmontado se tentarmos. Da última vez, encontramos uma nota de aplicativo interessante descrevendo o modo alternativo DisplayPort em detalhes, alternamos o FUSB302 para o modo de detecção de pacotes e obtivemos capturas de pacotes, aprendemos sobre PD VDMs (mensagens definidas pelo fornecedor) e reproduzimos com êxito as mensagens capturadas para alternar um USB-C porta no modo alt DisplayPort. Hoje, examinaremos as sete mensagens que invocam o modo alternativo DisplayPort, implementá-las e amarrá-las em uma biblioteca – então, descobriremos o hardware que precisamos para que o DisplayPort funcione em estado selvagem.
Para começar, como você deve ter visto no diagrama, um único comando pode ser uma solicitação ou uma resposta. Por exemplo, se você receber um Discover Identity REQ (solicitação), você responderá a ele com um Discover Identity ACK (resposta), adicionando seus dados de identidade à sua resposta ao longo do caminho. Com alguns comandos, a fonte DP irá adicionar alguns dados para você usar; para a maioria dos comandos, seu coletor DP terá que fornecer informações – e faremos exatamente isso, munidos do PDF fornecido e das capturas de pacotes.
Temos sete comandos que precisamos manipular para obter DisplayPort de uma porta USB-C compatível – se você precisar se atualizar sobre esses comandos, a página 13 do PDF do ST no altmode DP mostrará a sequência de mensagens. Esses comandos são: Discover Identity, Discover SVIDs, Discover Modes, Enter Mode, DP Status Update, DP Configure e Attention. Destes, os quatro primeiros já estão parcialmente descritos no padrão USB PD básico, os dois comandos DP posteriores são específicos do DisplayPort-altmode, mas suficientemente descritos no PDF que temos, e o comando Atenção também é do padrão básico, principalmente útil para relatar o estado do pino HPD. Vamos começar com os dois primeiros!
Os dois primeiros comandos não são específicos do DisplayPort. Em particular, a mensagem Discover Identity é onipresente. Assim como acontece com a mensagem Source_Capabilities que nem precisamos solicitar da PSU, se você conectar a uma porta USB-C de um laptop com capacidade de DP ou mesmo Thunderbolt, receberá uma mensagem de comando Discover Identity. Se o seu dispositivo for capaz de lidar com qualquer modo alternativo, responder a esta mensagem é como você anuncia esse recurso.
Sua resposta do Discover Identity terá que conter um monte de dados sobre o seu dispositivo – a maioria desses dados, você pode falsificar completamente. Esses dados indicam que você é um adaptador de modo alternativo, há dois bits que indicam se você é capaz de operar um host USB ou um dispositivo USB, um campo de “certificação” que pode ser deixado completamente vazio, bem como USB VID e PID. Até onde sei, o VID e o PID não são usados para nada em termos de recursos, ao contrário do PID e VID de conexão USB normal, que sabemos serem usados para seleção de driver em sistemas operacionais. O adaptador que possuo possui ID de fornecedor 0xBDA, ID de produto 0x2172 e número bcdDevice 0x201. Esses valores são enviados uma vez e não aparecem em nenhuma outra comunicação USB-C.
O segundo comando é Discover SVIDs – SVIDs são, essencialmente, códigos de dois bytes para os altmodes que seu dispositivo suporta. Se sua resposta for 0xFF01 (então, responda com 0xFF010000 como dados extras), você receberá um cookie, na forma de ser reconhecido como um dispositivo compatível com DisplayPort altmode. Um dos dispositivos que possuo responde com 0xFF01, mas também adiciona 0x25A4 a ele – minha suspeita é que esta seja uma interface de atualização de firmware, então se você quiser testar dispositivos USB-C para fins de pentesting, isso seria absolutamente um vetor Olhar para.
Ao dar a resposta 0xFF01 à solicitação Discover SVIDs, afirmamos que nosso dispositivo suporta o modo alternativo DisplayPort – mesmo que, verdade seja dita, estejamos no meio do caminho para implementá-lo corretamente, fingindo até conseguirmos. Não se preocupe, pois estamos no caminho certo – agora estamos falando de detalhes específicos do DisplayPort. Nosso terceiro comando é Discover Modes, onde informamos à fonte DP como exatamente nossas necessidades DisplayPort são mapeadas no conector USB-C.