Verificator RDP automat pentru configurare

Având în vedere subiectul vulnerabilităților sistemului Windows, vom continua să vorbim despre atacuri care vizează rețelele corporative afectate. În mod surprinzător, tehnica Pass-the-Hash funcționează acum pentru conexiunile RDP. Adică, ne putem autentifica folosind hash-ul NTLM al utilizatorului atunci când ne conectăm prin RDP!

Pe de altă parte, am aflat recent că nu toți oamenii știu ce este PtH. Așa că vă voi spune pe scurt despre această chestiune.
Deci, să începem cu faptul că sistemul de operare Windows este un sistem multi-utilizator și, prin urmare, trebuie să stocheze parolele utilizatorului. Dar stocarea lor în text clar nu este sigură și, prin urmare, sunt stocate hashing. Hashing este o funcție unidirecțională, al cărei rezultat nu poate fi determinat din valoarea de intrare (adică nu poate fi „decriptată”). NT hash este formatul în care Windows stochează parolele. Mai mult, aș dori să subliniez că, chiar dacă este o gazdă sau un domeniu separat, formatul de stocare este același.


Al doilea punct important este suportul profund pentru Single Sign-on (autentificare automată „unică”) de către Windows pe baza autentificării NTLM. Nu transmite în text clar nici parola, nici hash-ul NT în sine. Algoritmul este următorul: mai întâi clientul trimite o cerere de conectare, apoi serverul returnează o secvență (provocare) generată aleatoriu. După aceasta, clientul ia hash-ul utilizatorului, îl conectează cu provocarea, îl hash și îl trimite la server. El, la rândul său, face la fel. Și dacă hashurile se potrivesc, atunci utilizatorul are dreptate.

Concluzia aici este că hash-ul NT este echivalentul exact al parolei utilizatorului. La urma urmei, aproape toate serviciile care există în ecosistemul Windows acceptă autentificarea NTLM. De exemplu, HTTP, SMB (prin care ne putem conecta și gestiona gazda de la distanță), SMTP, FTP, conexiuni la un server SQL și așa mai departe.

Astfel, prin piratarea unei gazde din domeniu, putem obține hash-uri ale utilizatorilor din memorie și apoi să ne mutăm prin rețea, autentificându-ne cu ele peste tot. Această tehnică se numește Pass-the-Hash. Drept urmare, protecția domeniului se pliază ca un castel de cărți.

Excepția a fost întotdeauna protocolul RDP. Anterior, te puteai conecta doar introducând o parolă. Și aceasta a fost o problemă, deoarece foarte des există segmente închise (DMZ, de exemplu) într-o rețea corporativă, unde doar accesul RDP este permis pe firewall (pentru ca administratorii să poată administra).

Deci, în Windows 8.1 și 2012 R2, în mod implicit există acum suport pentru autentificarea hash. Dar inițial Microsoft a numit această funcție Mod de administrare restricționat și, desigur, nu vorbesc despre „suport” pentru PtH.

Prin urmare, să le mulțumim cercetătorilor de la labs.portcullis.co.uk pentru că au spus întregul adevăr lumii (pentru detalii, urmăriți videoclipul de acolo). Acum, pe scurt, despre practică. Tot ce trebuie să ne conectăm este rezultatul eforturilor proiectului FreeRPD, adică un client RDP open source (inclus implicit în Kali). După publicarea studiului, au integrat suportul PtH chiar în studiu. Prin urmare, pentru a ne conecta avem nevoie de următoarea linie în consolă:

xfreerdp /d:nume_domeniu /u:Administrator /pth: 8846F7EAEE8FB117AD06BDD830B7586C/v: 192.168.0.1

unde după /d: este numele domeniului,
după /u: - nume de utilizator,
după /pth: -hash,
după /v: - IP-ul serverului.

De vânzare este un verificator de configurare a serverului RDP cu mai multe fire complet automat. Verificatorul este scris în C++ și se bazează pe protocolul RDP pur, fără a utiliza biblioteci terțe. Organizarea corectă a multi-threading-ului vă permite să profitați la maximum de hardware și să minimizați timpul necesar pentru a scana liste mari.

Verificatorul are următoarele avantaje
Funcționează în mai multe fire, nu procese. Acest lucru se datorează în primul rând faptului că este utilizată o implementare pură de socket a protocolului. Nu sunt folosite biblioteci specializate de la Microsoft.
Procesul de verificare a serverului este complet automatizat. Nu este necesară manipularea manuală! Este suficient să rulați verificatorul o dată și să uitați de funcționarea acestuia. El va face el însuși restul.
Funcționează cu toate versiunile familiei de sisteme de operare Windows - de la XP la Windows 10. Sunt acceptate și sistemele de operare server. La testare au participat diverse mașini, inclusiv Windows 7, Windows Server 2003, Windows Server 2008, Windows Server 2012.
În timpul funcționării, clipboard-ul rămâne neatins. Este utilizată o schemă de sincronizare a fișierelor, care face ca funcționarea verificatorului pe mașină să fie invizibilă. Poți să te ocupi cu calm de treburile tale și să uiți că el își face treaba.
Este partajat doar un director temporar special și nu întregul disc. Acest lucru vă permite să rulați verificatorul și să nu vă fie teamă că cineva de pe server va putea obține sau modifica fișiere de pe mașina care rulează verificatorul.

Checker poate face
Lansați fișiere exe arbitrare (în orice cantitate) pe o mașină de la distanță.
Primiți informații despre sistem despre computer: numele și versiunea sistemului de operare, adâncimea de biți a sistemului de operare, dacă contul are drepturi administrative, modelul procesorului și numărul de nuclee, dimensiunea RAM.
Determinați viteza de intrare și de ieșire a conexiunii la Internet (cel mai apropiat server pentru testare este determinat automat).
Determinați adresa IP externă reală și, din aceasta, determinați țara, regiunea, orașul, ZIP, furnizorul, ISP-ul, serverul de e-mail, fusul orar.
Verificați adresa IP externă reală pentru prezența acesteia în listele negre și, de asemenea, determinați scorul proxy al acestei adrese.
Determinați browserul implicit.

Caracteristici Checker
Abilitatea de a întrerupe verificatorul și de a continua de unde s-a oprit.
Posibilitatea de a schimba la cald numărul de fire în timpul unei pauze. Nu este nevoie să începeți din nou procesul de verificare doar pentru a schimba numărul de fire. Puteți modifica complet alte setări în același mod. Trebuie doar să întrerupeți, să faceți modificări și apoi să continuați.
Control total asupra tuturor timeout-urilor.
Posibilitatea de a specifica numărul de încercări cu timeout-uri care cresc automat în cazul unei încercări nereușite de conectare. Acest lucru vă permite să vă conectați chiar și la cele mai problematice servere rdp.

Cerințe de sistem
Microsoft Visual C++ 2012 Redistributable trebuie să fie instalat pe sistem
Numărul de fire posibile depinde în întregime de RAM și capacitățile procesorului. Cantitatea medie de memorie necesară pentru un fir este de 3 megaocteți.

Costul verificatorului: 0,7 BTC (neconectat) [~400 USD]
jid contact:

La fel ca și în cazul versiunilor client anterioare ale sistemelor de operare Microsoft, utilizatorii edițiilor Pro și Enterprise ale edițiilor Windows 10 (dar nu Home) se pot conecta de la distanță la computerele lor prin Remote Desktop Services (RDP). Cu toate acestea, există o limită a numărului de sesiuni RDP simultane - doar un utilizator la distanță poate lucra la un moment dat. Când încercați să deschideți o a doua sesiune RDP, sesiunea primului utilizator este solicitată să se încheie.

În versiunea în limba engleză avertismentul este:

Un alt utilizator este conectat. Dacă continuați, acestea vor fi deconectate. Doriți să vă conectați oricum?

Faptul este că în edițiile desktop ale sistemelor de operare Microsoft există următoarele restricții principale privind utilizarea serviciului desktop la distanță:

  1. Suportul pentru acces RDP este disponibil numai în edițiile mai vechi de Windows (Professional și ulterioare), iar în edițiile de acasă (Home) această funcționalitate este dezactivată.
  2. Este posibilă o singură conexiune RDP la distanță. Când încearcă să deschidă o a doua sesiune RDP, utilizatorului i se solicită să încheie conexiunea existentă.
  3. În acest caz, există un utilizator care lucrează la consola computerului (local), cu o conexiune RDP la distanță, sesiunea sa va fi deconectată (blocata). Afirmația opusă este de asemenea adevărată: sesiunea RDP la distanță este încheiată forțat dacă utilizatorul se conectează la consola de sistem

De fapt, limitarea numărului de conexiuni rdp simultane nu este tehnică, ci mai degrabă una de licențiere, interzicând crearea unei stații de lucru bazate pe Terminal Server RDP pentru mai mulți utilizatori. Deși din punct de vedere tehnic, orice ediție de Windows, dacă există suficientă memorie, poate suporta munca simultană a câtorva zeci de utilizatori la distanță (în medie, 150-200 MB de memorie sunt necesare pentru o sesiune de utilizator, excluzând aplicațiile care rulează) . Acestea. Numărul maxim de sesiuni simultane este, teoretic, limitat doar de resursele computerului.

Vom analiza două moduri de a dezactiva limita numărului de conexiuni RDP simultane în Windows 10:

Important. Inițial, în prima versiune a articolului, principala opțiune de lucru pentru a elimina limita numărului de conexiuni simultane de utilizatori RDP a fost metoda de modificare și înlocuire a unui fișier termsrv.dllîn folderul %SystemRoot%\System32. Cu toate acestea, atunci când instalați o nouă versiune a Windows 10 sau unele actualizări de securitate, acest fișier este actualizat. Ca rezultat, trebuie să editați acest fișier cu un editor Hex de fiecare dată, ceea ce este destul de obositor. Prin urmare, principala modalitate de a organiza un server terminal gratuit pe client Windows 10 este să luați în considerare utilitarul Biblioteca Wrapper RDP.

Notă. Modificările sistemului descrise în acest articol vor fi probabil considerate o încălcare a Acordului de licență Windows, cu toate consecințele care decurg.

Biblioteca Wrapper RDP

O alternativă la modificarea fișierului termsrv.dll este utilizarea proiectului Biblioteca Wrapper RDP. Acest program funcționează ca un strat între managerul de control al serviciului (SCM-Service Control Manager) și serviciul terminal (Servicii terminale) și vă permite să activați nu numai suportul pentru mai multe sesiuni RDP simultane, ci și să activați suportul pentru gazdă RDP pe edițiile de acasă. din Windows 10. RDP Wrapper nu face nicio modificare fișierului termsrv.dll, pur și simplu încărcând termsrv cu parametrii modificați.

Astfel, această soluție va funcționa chiar dacă actualizați versiunea fișierului termsrv.dll, astfel încât să nu vă faceți griji cu privire la actualizările Windows.

Important. Înainte de a instala RDP Wrapper: este important să utilizați versiunea originală (nepatchată) a fișierului termsrv.dll. În caz contrar, RDP Wrapper poate să nu funcționeze stabil sau să nu pornească deloc.

Puteți descărca RDP Wrapper din depozitul GitHub: https://github.com/binarymaster/rdpwrap/releases (cea mai recentă versiune disponibilă a RDP Wrapper Library v1.6.2 a fost lansată relativ recent - 28 decembrie 2017). Judecând după informațiile de pe pagina dezvoltatorului, toate versiunile de Windows sunt acceptate. Windows 10 este acceptat până la versiunea Insider Preview 10.0.17063.1000 din 13 decembrie 2017.

Sfat. Apropo, sunt disponibile sursele RDP Wrapper Library, ceea ce vă permite să asamblați singur fișierele executabile dacă doriți.

Arhiva RDPWrap-v1.6.2.zip conține mai multe fișiere:

  • RDPWinst.exe - program de instalare/eliminare pentru RDP Wrapper Library
  • RDPConf.exe - Utilitar de configurare RDP Wrapper
  • RDPCheck.exe - Local RDP Checker - Utilitar de verificare RDP
  • install.bat, uninstall.bat, update.bat - fișiere batch pentru instalarea, dezinstalarea și actualizarea RDP Wrapper

Pentru a instala utilitarul, rulați fișierul install.bat cu drepturi de administrator.

După finalizarea instalării, rulați RDPConfig.exe. Și asigurați-vă că în secțiune Diagnosticare toate elementele sunt vopsite în verde.

Notă. În cazul meu, pentru că Nu există acces la Internet pe computer; programul nu a putut obține de la Github versiunea curentă a fișierului INI cu setări pentru versiunea mea de Windows. De aceea statutul spune . Descărcați fișierul rdpwrap.ini din resursa de dezvoltare și plasați-l în directorul de instalare. Reporniți serviciul și asigurați-vă că eticheta se schimbă în .

Printre caracteristicile interesante ale noii versiuni de RDP Wrapper:

  • opțiune Ascundeutilizatoriipeconectareecran- permite.
  • Când dezactivați opțiunea O singură sesiune per utilizator— vor fi permise mai multe sesiuni RDP simultane sub un singur cont (cheia de registry este setată fSingleSessionPerUser= 0 în ramura HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser).

Dacă, după actualizarea versiunii Windows, RDP Wrapper nu funcționează, verificați dacă secțiunea Diagnosticare conține inscripția.

Încercați să actualizați fișierul ini cu un script update.bat, sau manual și reinstalați serviciul

rdpwinst.exe -u
rdpwinst.exe -i

Încercăm să deschidem o a doua sesiune RDP. Totul a mers! Acum, Windows 10 permite a doi utilizatori la distanță să se conecteze simultan prin RDP.

Utilitarul ar trebui să funcționeze pe toate edițiile de Windows acceptate în prezent: Windows Vista, Windows 7, Windows 8, Windows 8.1 și Windows 10. Astfel, puteți face un server terminal din orice versiune client de Windows.

Modificarea fișierului termsrv.dll

Notă. Această metodă este aplicabilă numai la versiunea RTM a Windows 10 x64 (10240).

Puteți elimina limita numărului de conexiuni RDP modificând fișierul termsrv.dll (un fișier de bibliotecă utilizat de serviciul Remote Desktop Services). Fișierul se află în directorul C:\Windows\System32).

Înainte de a modifica fișierul termsrv.dll, este recomandabil să creați o copie de rezervă a acestuia (dacă este necesar, puteți reveni la versiunea originală a fișierului):

copiați c:\Windows\System32\termsrv.dll termsrv.dll_backup

Înainte de a edita fișierul termsrv.dll, trebuie să deveniți proprietarul acestuia și să acordați grupului de administratori drepturi depline asupra acestuia (toate operațiunile sunt efectuate în mod similar cu cele descrise în articol). Apoi opriți serviciul Desktop la distanță (TermService) din consola services.msc sau din linia de comandă:

Net stop TermService

Pentru ediția Windows 10 x64 RTM (versiunea fișierului termsrv.dll - 10.0.10240.16384): deschideți fișierul termsrv.dll folosind orice editor HEX (de exemplu, Tiny Hexer)

Găsiți linia:

39 81 3C 06 00 00 0F 84 73 42 02 00

Și înlocuiește-l cu:

B8 00 01 00 00 89 81 38 06 00 00 90

Salvați fișierul și porniți serviciul TermService.