Často slýchám nadávat adminy, jak je možné, že mají zašifrovaný server, i když používají antivirové programy a to i na serveru. Zběžnou analýzou logů je pak v 99 % případů zjištěno, že k zacryptování došlo jiným, mnohem jednodušším způsobem než průnikem zero-day ransomwaru.

Tím je právě RDP, neboli Remote Desktop Protocol, které slouží ke vzdálenému připojení na server. Velice často jej totiž mají admini vypublikovaný do internetu. Těžko říci, jestli z neznalosti, nebo lenosti, ale je to zkrátka průšvih.

Nejen RDP, ale i linuxové SSH je často dostupné z internetu. Článek o tom jak se přihlašovat pomocí SSH klíče místo pouhého hesla je zde: https://www.spajk.cz/jak-se-prihlasovat-pomoci-ssh-klice/

Proč je RDP otevřené

Toť otázka 🙂 Z vlastní zkušenosti mám vypozorováno, že si RDP do netu otevírají tyto typy lidí:

  • firmy zabývající se outsorcingem, aby měli na dálku přístupné servery či PC svých zákazníků a ušetřili za benzín
  • admini, kteří neumějí/“nemohou“ nasadit VPN
  • admini, které k tomu donutil ředitel, protože chce přístup i z domova
  • malé firmy nebo domácnosti, kteří neví o co jde
  • bezpečnostní firmy a anylitici, kteří si zřidili honeypot

Poslední skupinu můžeme z našich úvah vynechat, protože těch je minimum a vědí co dělají. Výše zmíněné + další skupiny čelí ale neustále velkému riziku. A to, že jakmile někdo odhalí otevřený port, určitě se na něj pokusí připojit. A ne jednou.

V čem je problém

Problém je v otevřeném portu 3389. Pokud někdo zvysoka ignoruje všechny zásady bezpečnosti a nechá výchozí port proroutovaný z vnitřní sítě ven, je otázkou minut, maximálně hodin, než ho objeví jeden ze scanovacích robotů, kteří neustále skenují otevřené porty na veřejných IP adresách.

Nyní si to projdeme postupně.

K čemu jsou porty

Každé číslo portu odpovídá nějaké službě a ty jsou pevně dány.

Každé číslo portu odpovídá nějaké službě, která na něm (pokud je aktivní) naslouchá. Porty jsou v rozsahu od 1 do 1023 jasně definované a každý patří „své“ službě. Další porty jsou „uvolněné“ a programy si je mohou otevírat dle potřeby.

🤖 Tenhle web je bez reklam! 🤖
💸 Nesbírám a neprodávám data návštěvníků. 💸
🕵️‍♂️ Respektuji Vaše soukromí. 🕵️‍♂️
🌎 Píšu pro dobro lidstva. 🌎

❤️ Líbí se Vám článek? ❤️

Kupte mi kafe!

Nás v tomto případě zajímají porty serverových služeb. Dle toho, jaké služby na serveru běží, snadno zjistíte, jakou roli daný server v síti hraje a k čemu je určen. Například pokud bude na serveru otevřený port 25, jedná se s největší pravděpodobností o mailserver. Když uvidíte otevřené porty 21, 22, 80 a 443, bude to nejspíše linuxový webserver. No a pokud uvidíte někde port 3389, jedná se nejspíše o Windows server s otevřeným vzdáleným přístupem.

Jak skenovat porty

Porty, na kterých nějaká služba běží, je samozřejmě možné oskenovat. K tomu slouží například nástroj nmap. Jedná se asi o nejznámější skener, který si zahrál i v mnoha filmech. Pro nejjednodušší výpis stačí zadat příkaz:

nmap cíl

Tím máte hned přehled o tom, co na daném serveru běží. Nmap má samozřejmě mnoho parametrů a když přidáme ty správné, zjistíme konkrétní službu i verzi aplikace, která na daném portu poslouchá.

nmap -p 1-65535 -sV -sS -T4 target
Teď by stačilo pustit metasploit a zaútočit nějakou zranitelností na nginx.

Pokud neskenujete zařízení ve vnitřní síti, ale třeba adresu svého webserveru který má veřejnou adresu, můžete využít i on-line scanner, například https://hackertarget.com/nmap-online-port-scanner/

Na podobném principu funguje i mnohem pokročilejší nástroj – Shodan. Ten také oskenuje porty, zjistí k nim veřejné klíče certifikátů, zobrazí polohu na mapě a mnohem více informací. Co je ale podstatné pro nás, abychom pochopili v čem je problém – pomocí jednoduchého filtru si necháme zobrazit všechny otevřené porty 3389 v ČR.

port:3389 country:cz

Fíha, máme v ČR čtrnáct tisíc sto sedmdesát tři otevřených portů pro vzdálené přihlášení. Teď už na ně jen začít klepat.

Jak zaútočit na port / službu

Je to překvapivě snadné a věřte tomu, že to zvládne každé 13ti leté děcko s připojením k netu. Vezmeme to nyní tedy prakticky a s příkazy.

Slovníkový útok

Pokud chcete něčí heslo prolomit hrubou silou, tzv. brute force, budete potřebovat slovník.

A nejedná se o ten co Vám doma leží v poličce 🙂 Pokud cílíte útok na konkrétní osobu, není problém si slovník sestavit – zkrátka do texťáku na každý řádek dáte nějaké slovo, které by mohlo být heslem. Samozřejmě existují nástroje, které Vám s tím pomohou, ale o tom jindy.

Pro nás je nejjednodušší si nějaký stáhnout. Stačí do googlu napsat něco jako Top 500 passwords a získáte základní slovník: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/500-worst-passwords.txt

Na netu se ale dají najít mnohem obsáhlejší slovníky, nebo slovníky cílené na určité zájmové skupiny – fotbalisty, milovníky koček, fanoušky Star Treku, adminy…

Slovník pak prostě předhodíte programu na crackování hesel a on zkouší jedno za druhým, dokud neuspěje, nebo slovník nevyzkouší celý.

Ncrack

Použijeme ncrack, protože má oblíbená Hydra má nyní problémy s aktuálními verzemi Windows.

ncrack -vv -u Administrator -P /root/Documents/10pass.txt 192.168.2.186:3389

Tím jsme programu řekli, že se má spustit v ukecaném režimu (-vv) a má použít konkrétní uživatelské jméno (-u) Administrator. Kdybychom tam dali velké písmeno (-U) mohli bysme použít seznam uživatelských jmen. Ten použijeme u hesel (-P) kde je vidět i linuxový zápis cesty k souboru se slovníkem (/root/Documents/10pass.txt). No a nakonec zadáme IP adresu, na kterou chceme zaútočit a definujeme port na němž běží služba, která nás zajímá. Porty jsme skenovali v předchozí kapitole a tak víme, že na 3389 poslouchá opravdu RDP.

Ncrack nějakou dobu poběží, v závislosti na velikosti slovníku, rychlosti vašeho procesoru a přenosu skrz vaší VPN. Nechcete přece aby kdokoliv viděl, že na něj útočíte ze své IP adresy a poslal vám domů polici, že ne?

Ncrack úspěšně našel heslo, které bylo ve slovníku. 

Netřeba asi říkat, že toto hádání hesel generuje vysoké množství neplatných přístupů. Naštěstí pro hackery, admini kteří mají RDP vystrčené ven, stejně nečtou logy, ani nemají zřízený monitoring, tudíž to ani nezjistí. Jediné o co tedy útočníkovi jde, je skrýt svoji IP. Toho docílí buďto použitím VPN, nebo častěji tím, že k útoku zneužije již napadený počítač či server.

Vzdálené připojení

OK. Máme adresu, login i heslo a tak se stačí připojit. Vhodné je počkat na dobu kdy je admin mimo práci, noční hodiny jsou k tomu jako stvořené.

A jsme tam. Nyní máme možnost dělat si co chceme. Obvykle v tuto chvíli útočník stáhne všechny potřebné dokumenty k sobě, aby je mohl zpeněžit, případně začne útočit na další server/stanice/sítě. My, jako whitehati nebo pentesteři bychom samozřejmě oběť upozornili na slabinu v zabezpečení 🙂

Poté, co útočník získá co potřeboval, záleží na tom, jak se dále zachová. Obvyklé jsou tyto možnosti:

  • Smaže security logy a zmizí. Tím se ale časem provalí, že server byl hacknut – chybí logy a toho si obvykle při bližší analýze někdo všimne, ale neví se kdy, kdo a odkud
  • Nainstaluje backdoor a do sítě se pravidelně vrací
  • Nainstaluje trojan a připojí si napadenou mašinu do svého botnetu či armády zombie počítačů, kterou používá k další nekalé činnosti, jako je rozesílání SPAMu, crackování hesel, těžení bitcoinů
  • Zacryptuje data na serveru ransomwarem buďto aby vydělal (častý případ), nebo aby po sobě zametl stopy

Jak se bránit

1.  Omezit RDP 

V první řadě zavřít árdýpko z netu 🙂 A samozřejmě i další služby, které by šlo zneužít a pro vzdálené připojení do sítě používat výhradně VPN. A pak klidně RDP, ale pouze v lokální síti. Ve Windows na to mají přímo super funkci – rozhodně tedy zaškrtněte volbu Allow connections only from computers running remote desktop with network level authentication.

Ve výchozím stavu může RDP používat každý, kdo je ve skupině Administrators, což ale můžete změnit a vyspecifikovat jednotlivé účty.

2. Omezte počet neplatných přihlášení

V angličtině známo jako Account lockout policy. Jakmile nastavíte, že se účet po pátém neplatném pokusu o zadání hesla uzamkne, je na Vás každý slovník krátký.

  1. Otevřete Start menu
  2. Napište Administrative Tools a otevřete je
  3. V otevřeném okně klikněte dvakrát na Local Security Policy
  4. Po levé straně rozklikněte Account Policies > Account Lockout Policy
  5. Dvakrát klikněte na Account lockout threshold
  6. Nastavte maximální počet povolených přístupů
  7. Klikněte na OK a je hotovo
Upozornění: U výchozího (built-in) účtu admina (Administrator) není možné omezit počet neplatných přihlášení – proto doporučuji jej smazat a vytvořit si nový účet admina, kde již omezení bude možné. A ideálně jej pojmenovat jinak než Administrator – tím útočníkům opět ztížíte práci, jelikož budou muset použít dva slovníky.

3. Použijte silné heslo

O heslech toho bylo již napsáno mnohé, já jen zopakuji – nepoužívejte stejná hesla pro více účtů a pokud to nejde jinak (jde!), rozškálujte to. Jiná hesla do práce, jiná k mailům, jiná k sociálním sítím, jiná k čínským e-shopům. To jsou 4 hesla, která jednou za půl roku nebo rok změňte a máte jistotu, že případný útočník neprostřelí všechno. Nejdůležitější je heslo k e-mailu, na který je možné posílat žádosti o změnu hesla k ostatním službám!

Trendem dneška je ale používat fráze. Dlouhá vymyšlená (citáty jsou ve slovnících) fráze je dosti špatně prolomitelná. Pokud na web www.howsecureismypassword.net napíšete MamRadSva4MalaKotatk@ uvidíte sami, jak dlouho bude útočníkům trvat, než to rozlousknou 🙂 Navíc jste v pohodě splnili běžné parametry pro výběr hesla, jelikož má minimálně jedno velké písmeno, jedno číslo i speciální znak a požadovanou délku.

4. Změňte RDP port

Proč to útočníkům trochu neztížit. Když pominu různé triggeringy a port-knocking na bráně/firewallu, je změna výchozího portu to nejjednodušší. Změnu portu můžete provést v tomto registru:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber

5. Kontrolujte logy

Je to opruz, já vím, ale dá Vám to přehled. Spusťte si eventvwr.msc a po levé straně vyhledejte větev „Applications and Services Logs -> Windows -> TerminalServices“. Nejvíce Vás asi bude zajímat sekce „TerminalService-LocalSessionManager“ a Operational log. Případně můžete použít parser – https://gallery.technet.microsoft.com/Remote-Desktop-Connection-3fe225cd/file/136148/7/RDPConnectionParser.ps1 Tento script stáhněte na plochu serveru a spusťte. Vygeneruje CSV (na ploše), ve kterém je vidět z jakých IP adres se k Vám kdy a který uživatelský účet připojil. IP adresa 192.168.2.185 na obrázku výše patří Kali linuxu. Prázdné pole bez IP v 10:39 pak ukazuje na lokální přihlášení.

Microsoft Excel v CSV neodděluje sloupce tak jak by měl, tudíž soubor otevřete přes „Data“ – „Z textu“ a jako oddělovač zvolte čárku 🙂

6. Použijte vícefázovou autentizaci

Takzvaná dvoufaktorová autentizace je dnes již nahrazena multifaktorovou autentizací. Jde o to, že při přihlášení nestačí zadat pouze heslo, ale je potřeba využít i něco dalšího – obvykle mobilní telefon s aplikací, kde máme napárované tokeny. Je to asi nejlepší způsob, jak se podobným útokům bránit! Na toto téma jsem sepsal samostatný článek zde: https://www.spajk.cz/co-je-to-2fa-a-proc-vicefaktorovou-autentizaci-pouzivat/

Závěr

A to je vše, přátelé. Jste zděšeni či potěšeni tím, jak je to jednoduché? Výborně, to bylo cílem tohoto článku. Všem adminům, kteří se dočetli až sem a shledali nějaké nedostatky v zabezpečení své sítě, přeji aby na fix již nebylo pozdě. A whitehatům (rozuměj hodným hackerům) a pentesterům zase kvalitní slovníky a spoustu otevřených portů.

Disclaimer

Tento článek nemá rozhodně za cíl někoho nabádat k hackingu, který je mimochodem trestným činem. Slouží pouze ke studijním účelům a demonstraci moci útočníků a bezmoci obětí.

🤖 Tenhle web je bez reklam! 🤖
💸 Nesbírám a neprodávám data návštěvníků. 💸
🕵️‍♂️ Respektuji Vaše soukromí. 🕵️‍♂️
🌎 Píšu pro dobro lidstva. 🌎

❤️ Líbí se Vám článek? ❤️

Kupte mi kafe!