Tunkeutumistestaus vko. 1

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.

bandit0 ratkaistu.
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 
bandit1 ratkaistu.
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
bandit2 ratkaistu.
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
bandit3 ratkaistu.
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
bandit4 ratkaistu.

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.

Virtuaalikoneen luonti.
Virtuaalikovalevyn luonti.
Levykuvan valinta.

Käynnistin luomani virtuaalikoneen.

Valitsin “Add” ja valitsin Kalin levykuvan.

Levykuvan valinta.
Asennusohjelman valinta.

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.

Sisäänkirjautuminen.

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.

WebGoatin kirjautumissivu.

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.

WebGoat ja WebWolf toiminnassa.

Testasin WebWolfin sähköpostiominaisuutta, jolla simuloidaan käyttäjän sähköpostilaatikkoa.

Sähköpostilaatikkoon tuli vahvistuskoodi, joka hyväksyttiin.

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ä.

Hyökkääjän vastaanottama tieto.

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.

HTTP Basics ratkaisu.
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.

Funktiokutsu palautti numerosarjan.

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ä.

POST pyynnön sisältämä data.
HTTP Basics ja Developer Tools suoritettu.
A1 Injection (intro)

Tiedon haku tietokannasta.

Tiedon haku tietokannasta.

SELECT department
FROM Employees
WHERE last_name='Franco';

Data Manipulation Language (DML) avulla dataa voidaan tallentaa, hakea, muokata ja poistaa.

Tietokannan päivitys.

UPDATE Employees
SET department = 'Sales'
WHERE last_name = 'Barnett';

Data Definition Language (DDL) avulla muokataan tietokannan taulun rakennetta.

Attribuutin lisääminen.

ALTER TABLE Employees
ADD phone varchar(20);

Data Control Language (DCL) avulla määritellään tietokannan käyttäjäkohtaisia oikeuksia.

Oikeuksien antaminen.

GRANT ALL on grant_rights to unauthorized_user;

Merkkijono SQLi. Pudotusvalikoista piti valita oikeat arvot, jotka toteuttavat injektion.

String SQL Injection.

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.

Numeric SQL Injection.

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.

Luottamuksen vaarantaminen.

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.

Eheyden vaarantaminen.

'; UPDATE employees SET salary = 100001 WHERE auth_tan = '3SL99A';--

Saavutettavuuden vaarantaminen. Viidennessä injektiossa lokitietokanta access_log oli mahdollista poistaa.

Saavutettavuuden vaarantaminen.

'; DROP TABLE access_log;--
(A1) Injection (intro) on suoritettu.

Leave a Reply