Si è mai chiesto cosa faccia realmente l’opzione da riga di comando “/public” in MSTSC? Attiva la “modalità pubblica” nel client RDP, una funzionalità per certi versi simile alla “modalità in incognito” dei browser web. È pensata per essere utilizzata su un computer “pubblico” o “condiviso”, dove gli utenti potrebbero voler evitare che credenziali, dettagli di sessione e immagini nella cache vengano memorizzati localmente.
Per gli analisti forensi, le tracce lasciate da un aggressore malintenzionato che utilizza MSTSC su un sistema compromesso possono essere una miniera d’oro di informazioni. Ecco un elenco di tutte le funzionalità interessate dalla modalità pubblica di RDP.
Impostazioni di connessione
Sapeva che mstsc salva le impostazioni di connessione nel file nascosto Default.rdp? Con la modalità pubblica attivata, mstsc non consentirà di salvare le modifiche alle impostazioni di connessione in quel file:

Il modo più semplice per modificarlo manualmente è avviare Notepad dalla riga di comando: notepad "~\Documents\Default.rdp".
Memorizzazione nella cache delle credenziali
Il gestore delle credenziali di Windows viene utilizzato da mstsc per salvare le credenziali localmente e riutilizzarle per le nuove connessioni allo stesso server. La modalità pubblica disabilita l’uso delle credenziali memorizzate nella cache, in modo che le credenziali vengano richieste anche se disponibili localmente:

Le credenziali salvate utilizzano il prefisso “TERMSRV/” e possono essere elencate con questo comando:
cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " }
La modalità pubblica impedisce inoltre all’utente di salvare le credenziali nella finestra di accesso:

Memorizzazione nella cache bitmap persistente
L’artefatto più significativo lasciato da mstsc è la cache bitmap persistente. In RDP, il server suddivide l’immagine del desktop in frammenti bitmap, memorizzandoli nella cache sul client. Quando un frammento si ripete, il server indica al client di riutilizzare la versione memorizzata nella cache invece di rinviarla. Tuttavia, la memorizzazione nella cache migliora le prestazioni solo dopo che il client ha memorizzato un numero sufficiente di frammenti. Per accelerare le nuove connessioni, la cache bitmap persistente consente di conservare le bitmap tra una sessione e l’altra.
Sebbene la modalità pubblica disabiliti questa funzionalità, è anche possibile disabilitarla separatamente utilizzando BitmapCachePersistEnable:i:0 nel file .RDP. La cache bitmap persistente memorizza i file (bcache24.bmc, Cache0000.bin, Cache0001.bin, ecc.) in %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache. Sebbene il formato della cache non sia documentato, è possibile utilizzare BMC-Tools per estrarre i contenuti bitmap:
git clone <https://github.com/ANSSI-FR/bmc-tools> && cd bmc-tools
python .\bmc-tools.py -s "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -d .
È quindi possibile esplorare migliaia di frammenti bitmap provenienti da sessioni desktop remoto precedenti:

Va tenuto presente che la cache bitmap non è un metodo di registrazione attendibile: è come cercare di ricostruire documenti distrutti scavando nel cestino della carta riciclata. Detto ciò, può comunque rappresentare una miniera di informazioni.
Server utilizzati più di recente
Il client RDP di Microsoft memorizza fino a 10 server utilizzati più di recente (MRU), facilitando la selezione di un server dal menu a discesa senza doverlo digitare nuovamente:

La modalità pubblica disabilita l’aggiornamento di questo elenco di server, memorizzato nel registro:
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default]
"MRU0"="10.10.0.25"
"MRU1"="IT-HELP-TEST.ad.it-help.ninja"
"MRU2"="IT-HELP-DVLS.ad.it-help.ninja"
"MRU3"="IT-HELP-WAC.ad.it-help.ninja"
"MRU4"="IT-HELP-GW.ad.it-help.ninja"
In altre parole, l’elenco a discesa continuerà a essere visibile con la modalità pubblica attiva, ma mstsc non lo aggiornerà con i nuovi server ai quali ci si connette.
Suggerimenti sul nome utente del server
Per velocizzare la procedura nella finestra di accesso, mstsc ricorda l’ultimo nome utente utilizzato per connettersi a un determinato server e lo preseleziona automaticamente:

Questa informazione viene memorizzata nel registro in HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\UsernameHint, come segue:
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.0.25]
"UsernameHint"="Administrator@ad.it-help.ninja"
Oltre a rivelare il nome utente, questa chiave di registro rivela anche i server ai quali ci si è connessi. Anche in questo caso, la modalità pubblica impedisce che queste informazioni vengano utilizzate e memorizzate.
Eccezioni per i certificati del server
Non esiste un amministratore IT al mondo che non conosca la finestra di avviso gialla relativa ai certificati mostrata da MSTSC. Sì, è possibile distribuire certificati adeguati per RDP, ma siamo onesti: tutti abbiamo utilizzato almeno una volta la casella di controllo “Non chiedermelo più per le connessioni a questo computer”:

Come si può intuire, la modalità pubblica di RDP disabilita le eccezioni per i certificati del server, poiché queste vengono salvate nel registro in HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\CertHash, come segue:
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.0.25]
"CertHash"=hex:13,fe,21,42,92,fc,6a,9d,ac,ea,a0,3d,b5,9b,59,c8,90,6f,37,b9,cc,\
31,08,9d,63,f7,4b,e7,c4,3b,77,f2
L’hash del certificato in sé non è molto utile, ma poiché viene memorizzato per nome del server, lascia una traccia dei server ai quali ci si è connessi.
Eccezioni per l’autenticazione del server
Il livello di autenticazione del server in RDP è un po’ più difficile da comprendere: il server può essere autenticato tramite il proprio certificato, Kerberos, o entrambi. Per vedere come la modalità pubblica influisce sull’autenticazione del server, assicurarsi che l’autenticazione del server sia impostata per avvisare in caso di esito negativo dell’autenticazione stessa. In alternativa, modificare il file .RDP con authentication level:i:2:

Quando ci si connette a un server non attendibile (quando né la validazione del certificato né quella Kerberos possono essere utilizzate per autenticare il server), dovrebbe apparire questa finestra di avviso di sicurezza:

Si noti come la modalità pubblica disabiliti la casella di controllo “Non chiedermelo più per le connessioni a questo computer”, ma disabiliti anche l’utilizzo delle credenziali salvate. Se si aggiunge un’eccezione di sicurezza per un server, questa verrà memorizzata in HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices, come segue:
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices]
"10.10.0.25"=dword:0000004d
Il nome del server di destinazione viene memorizzato, quindi, anche in questo caso, può essere utilizzato per individuare i server ai quali ci si è connessi. Per quanto riguarda il valore DWORD associato, esso varia in base alle risorse o ai dispositivi locali autorizzati per la connessione (unità, appunti, stampante, ecc.).
Pulizia
La modalità pubblica di RDP è ottima, ma cosa fare se non è stata utilizzata in precedenza e si desidera ripristinare mstsc a uno stato pulito? Ecco un frammento di codice PowerShell per eliminare tutti gli artefatti locali lasciati (credenziali salvate, cache bitmap persistente e chiavi di registro):
cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " } | % { cmdkey /delete:$_ }
Remove-Item -Path "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\Default" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\Servers" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\LocalDevices" -Recurse -Force -ErrorAction SilentlyContinue
Utilizzare la modalità pubblica di RDP può essere utile per risolvere problemi anomali, spesso causati da credenziali salvate residue e suggerimenti sul nome utente. Sebbene raro, un cache bitmap persistente danneggiato può causare anomalie visive in RDP. Consiglio di provare la modalità pubblica quando non si ha idea di quale possa essere il problema, ma potrebbe essere collegato a una delle funzionalità elencate sopra.
