Pradžia / Dirbtinis intelektas (AI) / Penetration testing pagrindai

Penetration testing pagrindai

Kas iš tikrųjų yra penetration testing ir kodėl tai ne tas pats, kas įsilaužimas

Daugelis žmonių, išgirdę žodį „penetration testing”, iš karto įsivaizduoja kažką iš Holivudo filmų – tamsiame kambaryje sėdintį vyrą su gobtuvu, kuris greitais pirštų judesiais „nulaužia” sistemas. Realybė, žinoma, yra kiek kitokia ir, drįsčiau sakyti, daug įdomesnė.

Penetration testing (arba trumpiau – pen testing) yra kontroliuotas, legalus procesas, kurio metu specialistai bando įsilaužti į sistemas, tinklus ar aplikacijas – bet tik turėdami aiškų leidimą ir tikslą surasti pažeidžiamybes, kol to dar nepadarė tikri užpuolikai. Skirtumas tarp pen testerio ir įsilaužėlio yra ne techninis, o teisinis ir etinis. Tas pats įrankis, tas pats metodas – vienas žmogus eina į kalėjimą, kitas gauna atlyginimą.

Šiandien penetration testing tapo neatsiejama kibernetinio saugumo dalimi. Kompanijos, kurios rimtai žiūri į savo infrastruktūros apsaugą, reguliariai samdo specialistus arba turi savo vidines red team komandas, kurių vienintelis tikslas – surasti silpnąsias vietas prieš tai, kai jas suranda kiti.

Pen testingo tipai – ne viskas vienoda

Prieš pradedant kalbėti apie metodologiją, svarbu suprasti, kad penetration testing nėra monolitinis procesas. Yra keletas skirtingų tipų, ir kiekvienas tinka skirtingoms situacijoms.

Black box testing – tai scenarijus, kai testeris neturi jokios informacijos apie sistemą. Jis žino tik tai, ką žinotų bet kuris išorinis užpuolikas: galbūt domeną, galbūt IP adresą. Šis metodas geriausiai imituoja realų ataką iš išorės, bet užima daugiausiai laiko, nes reikia viską atrasti nuo nulio.

White box testing – priešingas kraštutinumas. Testeris gauna viską: source kodą, architektūros dokumentus, kredencialus, tinklo schemas. Tai leidžia atlikti daug gilesnę analizę ir surasti pažeidžiamybes, kurios black box metodu galbūt niekada nebūtų rastos. Tinka, kai norima maksimaliai išnaudoti testingo laiką.

Gray box testing – ir tai yra praktikoje dažniausiai naudojamas metodas – yra kažkas tarp šių dviejų. Testeris gauna dalį informacijos, pavyzdžiui, vartotojo paskyros kredencialus, bet ne administratoriaus teises. Tai imituoja scenarijų, kai vidinis darbuotojas ar kompromituota paskyra bando plėsti savo prieigą.

Be šių trijų pagrindinių tipų, dar skiriamas network penetration testing (tinklo infrastruktūros tikrinimas), web application testing (web aplikacijų pažeidžiamumų paieška), social engineering testing (žmogiškojo faktoriaus tikrinimas per phishing ar pretexting atakas) ir physical penetration testing (fizinės saugos tikrinimas – ar tikrai negali įeiti į serverių kambarį apsimetęs IT specialistu).

Metodologija: kaip iš tikrųjų atrodo pen testingo procesas

Profesionalus penetration testing vyksta pagal aiškią metodologiją. Čia praverčia tokios standartizuotos sistemos kaip OWASP Testing Guide, PTES (Penetration Testing Execution Standard) arba NIST gairės. Bet nesvarbu, kurią sistemą naudoji – bendri etapai išlieka panašūs.

Reconnaissance (žvalgybos etapas) yra pirmasis ir dažnai labiausiai nuvertinamas žingsnis. Čia renkama visa viešai prieinama informacija apie taikinį: DNS įrašai, WHOIS duomenys, darbuotojų vardai LinkedIn, el. pašto adresų formatai, naudojamos technologijos (kurias galima matyti iš HTTP antraščių ar metaduomenų). Šis etapas skirstomas į passive reconnaissance (kai su taikiniu tiesiogiai nesusisiekiama) ir active reconnaissance (kai jau pradedama aktyviai skenuoti). Tokie įrankiai kaip theHarvester, Maltego ar tiesiog gerai sukonfigūruoti Google dork’ai gali atskleisti stebėtinai daug informacijos.

Scanning ir enumeration – kai jau žinai, su kuo dirbi, pradedi aktyviai skenuoti. Nmap yra čia karalius: su juo galima nustatyti atvirus portus, veikiančias paslaugas, operacinę sistemą. Bet svarbu žinoti, kad agresyvus skenavimas gali sukelti aliarmus IDS/IPS sistemose, tad reikia balansuoti tarp greičio ir nepastebimumo.

Vulnerability analysis – radus atviras paslaugas, ieškoma žinomų pažeidžiamumų. Nessus, OpenVAS ar Nikto (web serverių tikrinimui) automatizuoja didžiąją dalį šio darbo, bet automatiniai skeneriai niekada neatstos rankinio tikrinimo. Jie dažnai generuoja false positives ir praleidžia sudėtingesnius logikos klaidų tipus.

Exploitation – čia prasideda tikrasis „įsilaužimas”. Radus pažeidžiamumą, bandoma jį išnaudoti. Metasploit Framework yra standartinis įrankis, turintis tūkstančius paruoštų exploit’ų. Bet verta žinoti – tikri profesionalai dažnai rašo savo exploit’us arba modifikuoja esamus, nes tikri taikiniai retai būna tokie pat kaip laboratorinės aplinkos.

Post-exploitation – kai jau turi prieigą, kitas žingsnis yra suprasti, ką galima padaryti su ta prieiga. Privilege escalation (teisių padidinimas), lateral movement (judėjimas per tinklą į kitas sistemas), persistence (prieigos išlaikymas) – visa tai yra post-exploitation fazės dalis. Čia dažnai atsiskleidžia tikrasis pažeidžiamumo rimtumas: gal ir pavyko patekti į sistemą, bet ar galima iš ten pasiekti kažką vertingo?

Įrankiai, kuriuos verta žinoti

Pen testingo ekosistema yra milžiniška, ir bandyti išmokti viską iš karto – garantuotas kelias į nusivylimą. Geriau suprasti pagrindinius įrankius gerai, nei paviršutiniškai žinoti šimtus.

Kali Linux – tai ne tiek įrankis, kiek platforma. Ši Linux distribucija yra sukurta specialiai saugumo specialistams ir ateina su šimtais iš anksto įdiegtų įrankių. Jei pradedi nuo nulio, čia yra tavo namai. Galima naudoti kaip virtualią mašiną, live USB arba tiesiog įdiegti kaip pagrindinę sistemą.

Burp Suite – web aplikacijų testingui tai yra neišvengiamas įrankis. Jis veikia kaip proxy tarp naršyklės ir serverio, leidžiant perimti, modifikuoti ir pakartoti HTTP užklausas. Community versija yra nemokama ir pakanka pradedantiesiems, bet Professional versija su automatizuotu skeneriu ir papildomomis funkcijomis yra verta investicija profesionalams.

Wireshark – tinklo srauto analizatorius. Kai reikia suprasti, kas vyksta tinkle žemame lygyje, Wireshark yra pirmas pasirinkimas. Ypač naudingas testuojant tinklus, kuriuose dar naudojami nešifruoti protokolai.

John the Ripper ir Hashcat – slaptažodžių krekingo įrankiai. Kai randi password hash’ą duomenų bazėje ar konfigūraciniame faile, šie įrankiai padeda suprasti, ar slaptažodžiai yra pakankamai stiprūs. Hashcat su GPU akceleracija gali bandyti milijardus kombinacijų per sekundę.

SQLmap – automatizuotas SQL injection aptikimo ir išnaudojimo įrankis. Jei web aplikacija yra pažeidžiama SQL injection atakoms, SQLmap gali tai aptikti ir išnaudoti su minimaliu rankiniu darbu. Bet vėlgi – suprasti, kaip SQL injection veikia rankiniu būdu, yra būtina prieš pasikliaujant automatizavimu.

Teisiniai ir etiniai aspektai – tai nėra smulkmena

Čia reikia stabtelėti ir pakalbėti apie tai, apie ką daugelis techninio turinio kūrėjų vengia kalbėti detaliai. Penetration testing be leidimo yra nusikaltimas. Lietuvoje tai reguliuoja Baudžiamojo kodekso 198 straipsnis (neteisėtas prisijungimas prie informacinės sistemos). Europoje veikia NIS2 direktyva, kuri dar labiau sugriežtino reikalavimus. Jungtinėse Valstijose – Computer Fraud and Abuse Act (CFAA).

Prieš bet kokį testingą turi būti pasirašytas Rules of Engagement (RoE) dokumentas, kuriame aiškiai nurodyta: kokios sistemos gali būti testuojamos, kokios atakos yra leidžiamos, kokiu laiku galima testuoti, kas yra kontaktinis asmuo incidento atveju ir kaip bus tvarkomi rasti duomenys.

Praktinis patarimas: net jei testuoji savo paties serverį, kuris yra debesyje (AWS, Azure, GCP), būtinai patikrink paslaugų teikėjo sąlygas. Dauguma debesų paslaugų teikėjų reikalauja iš anksto pranešti arba gauti leidimą prieš atliekant saugumo testus jų infrastruktūroje. AWS turi specialų pažeidžiamumo testavimo politikos puslapį, kuriame nurodyta, ką galima daryti be atskiro leidimo ir ko – ne.

Dar vienas svarbus aspektas – scope creep. Pen testingo metu dažnai atsitinka taip, kad randi kelią į sistemą, kuri nėra testingo apimtyje. Profesionalas tokiu atveju sustoja, dokumentuoja radinį ir praneša klientui – net jei techniškai galėtų tęsti. Tai yra etikos, o ne tik teisės klausimas.

Kaip pradėti mokytis – praktinis kelias

Jei nori rimtai mokytis penetration testing, teorija yra tik pradžia. Šioje srityje praktika yra viskas. Laimei, yra daugybė legalių būdų treniruotis.

Hack The Box (HTB) ir TryHackMe yra dvi populiariausios platformos pradedantiesiems ir vidutinio lygio specialistams. TryHackMe yra šiek tiek labiau struktūruota ir tinkama absoliučiai pradedantiesiems, nes turi daug guided path’ų. Hack The Box yra sunkesnė ir labiau imituoja realius scenarijus. Abu turi nemokamas versijas, kurios yra pakankamos pradžiai.

VulnHub – čia galima atsisiųsti pažeidžiamas virtualias mašinas ir jas testuoti savo aplinkoje. Tai puiku tiems, kurie nori dirbti offline arba nori daugiau kontrolės.

DVWA (Damn Vulnerable Web Application) – specialiai sukurta pažeidžiama web aplikacija, skirta mokytis web saugumo. Galima įdiegti lokaliai ir saugiai eksperimentuoti su SQL injection, XSS, CSRF ir kitomis atakomis.

Sertifikatų atžvilgiu – CompTIA Security+ yra geras pradinis sertifikatas, bet pen testingui specifiškai rekomenduočiau eJPT (eLearnSecurity Junior Penetration Tester) kaip pirmą žingsnį, o vėliau – OSCP (Offensive Security Certified Professional). OSCP yra pramonės standartas ir žinomas tuo, kad jo egzaminas yra 24 valandų praktinis testas, kurio metu reikia įsilaužti į kelias mašinas. Tai nėra egzaminas, kuriam galima pasiruošti tik skaitant – reikia tikros praktikos.

Kalbant apie programavimą – Python yra būtinas. Ne todėl, kad reikia kurti sudėtingas aplikacijas, bet todėl, kad reikia mokėti automatizuoti užduotis, modifikuoti esamus skriptus ir kartais parašyti paprastą exploit’ą. Bash scripting taip pat labai praverčia Linux aplinkoje.

Dažniausios klaidos, kurias daro pradedantieji

Per daugelį metų stebint, kaip žmonės mokosi šios srities, išryškėja keletas pasikartojančių klaidų, kurias verta žinoti iš anksto.

Per didelis pasitikėjimas automatiniais įrankiais. Nessus ar Nikto gali surasti daug dalykų, bet jie taip pat praleidžia daug dalykų. Ir svarbiausia – jie nesupranta konteksto. Automatinis skeneris gali pažymėti kažką kaip pažeidžiamumą, bet tik žmogus gali suprasti, ar tas pažeidžiamumas yra realiai išnaudojamas konkrečioje aplinkoje.

Praleisti reconnaissance etapą. Daugelis pradedančiųjų nori iš karto pereiti prie „įdomios” dalies – exploitation. Bet profesionalai žino, kad geras recon gali atskleisti tokių dalykų, kurie sutaupo valandas vėlesnio darbo. Kartais vienas gerai parinktas Google dork atskleidžia daugiau nei valanda aktyvaus skenavimo.

Netvarkinga dokumentacija. Pen testingo rezultatas yra ataskaita, ne tik sėkmingas įsilaužimas. Jei negali aiškiai paaiškinti, ką radai, kaip tai radai ir kaip tai pataisyti – darbas nėra baigtas. Pradedantieji dažnai pamiršta daryti ekrano kopijas, neužsirašo komandų, kurias naudojo, ir vėliau negali atkurti, kaip pasiekė tam tikrą rezultatą.

Ignoruoti tinklo saugumo pagrindus. Norint suprasti, kaip atakuoti tinklą, reikia suprasti, kaip tinklai veikia. TCP/IP modelis, DNS veikimo principai, kaip veikia ARP – tai ne boring teorija, tai fundamentas, be kurio sunku suprasti, kodėl tam tikros atakos veikia.

Bandyti viską iš karto. Penetration testing apima labai daug sričių: web aplikacijos, tinklai, Active Directory, mobilios aplikacijos, IoT, socialinė inžinerija. Bandyti viską mokytis vienu metu – efektyvus būdas neišmokti nieko gerai. Geriau pasirinkti vieną sritį, ją išstudijuoti gerai, o tada plėstis.

Kai testingas virsta karjera – ką reikia žinoti

Penetration testing kaip karjera yra patraukli dėl kelių priežasčių: darbas yra intelektualiai stimuliuojantis, atlyginimas yra geras (Lietuvoje patyręs pen testeris gali tikėtis 3000-5000 EUR bruto, tarptautinėje rinkoje – žymiai daugiau), ir paklausa nuolat auga. Bet yra keletas dalykų, kuriuos verta žinoti prieš pasirenkant šį kelią.

Pirma – tai nėra vien techninis darbas. Didelė dalis laiko eina į ataskaitų rašymą, komunikaciją su klientais ir rezultatų pristatymą. Gebėjimas aiškiai paaiškinti techninę problemą netechniniam vadovui yra toks pat svarbus kaip gebėjimas rasti tą problemą.

Antra – sritis keičiasi labai greitai. Naujos technologijos reiškia naujus atakų vektorius. Kas buvo aktualu prieš penkerius metus, gali būti visiškai neaktualu šiandien. Nuolatinis mokymasis nėra pasirinkimas – tai darbo reikalavimas.

Trečia – yra skirtumas tarp dirbti konsultacine įmone (kur kiekvieną savaitę turi naują klientą ir naują aplinką) ir dirbti vidinėje red team komandoje (kur gerai pažįsti savo organizacijos infrastruktūrą, bet gali trūkti įvairovės). Abu keliai turi savo privalumų ir trūkumų.

Jei rimtai svarstai apie karjerą šioje srityje, rekomenduočiau pradėti nuo bug bounty programų. Platformos kaip HackerOne ar Bugcrowd leidžia legaliai ieškoti pažeidžiamumų realiose sistemose ir gauti atlygį už radinius. Tai ne tik pinigai – tai realus portfelis, kurį galima parodyti potencialiam darbdaviui. Daug geriau nei bet koks sertifikatas.

Penetration testing yra sritis, kur tikrasis meistriškumas atsiskleidžia ne per tai, kiek įrankių žinai, o per tai, kaip mąstai. Gebėjimas pamatyti sistemą iš užpuoliko perspektyvos, surasti neakivaizdžius ryšius tarp skirtingų komponentų ir suprasti, kaip mažos klaidos gali sudaryti didelę saugumo spragą – tai yra tai, kas skiria gerą pen testerį nuo puikaus. Ir tai, kaip ir bet koks meistriškumas, ateina tik per praktiką, klaidas ir nuolatinį smalsumą.