Executing arbitrary code on the target system by using a vulnerability. Tools are often for only one vulnerability so I will just say search from Metasploit framework, searchsploit, or create your own.
5. Installation
Installing (multiple) ways to maintain persistence ranging from simple PHP reverse shell on the webserver or an added user on the system to more complex solutions. Tools: cobaltstrike
Includes often malware needed for other tasks as well depending on the objectives.
6. Command & Control (C2)
Way to use previously installed ways to execute commands on the target depending on the chosen technique.
Can often be via HTTPS, DNS, or SSH to avoid detection. Tools: cobaltstrike
7. Action on objectives
Using the installed malware and C2 channels doing what the adversary came to do whether it is exfiltrating data, spying, mining cryptocurrencies, or encrypting data (often combination of previous).
user credentials are stored in database or textfiles, for webapplications in SQL database, in active directory domain in proprietary database
Petya – exploited system using EternalBlue exploit, payload used mimikatz to dump credentials out of memory, then used the stolen credentials to attack other systems on the network using well known protocols PsExec and WMI (normal traffic in Windows)
Passwords need protection on both storage and when transmitted over the network -> encryption + limit access to storage + intrusion protection, endpoint protection, auditing – user: longer passwords + two-factor authentication
Authentication and Authorization attacks
default passwords
password reuse – one password to rule them all
simple passwords generated by humans
domain admin password – compromise all computers on network
capture credentials
sniffing – public hotspots, usually not encrypt traffic between network nodes
man-in-the-middle – capture traffic: telnet, ftp, pop3, imap, http etc.
Nmap – scripts especially for enumerating users via smb and snmp
Password storage mechanisms – hashing
one-way hashing is not encryption
hashing can be used to protect passwords
not reversible
computed quickly
always use salt when hashing
$ echo "cleartextpassword" | sha256sum
Password storage vulnerability
clear text passwords
crack passwords – faster CPUs and GPUs, distribute computations, weak algorithms, dictionaries built from password breaches, rainbow tables
linux passwords are salted – harder to crack
John the Ripper
Built in to Kali – john
Usage: john [options] [password files]
stores cracked password in john.pot
Hashcat
-m --hash-type
-a --attack-mode - brute force, wordlist
--show - show cracked passwords
--username - show usernames for cracked password
--potfile-path - choose where cracked passwords are stored
hashcat is the world’s fastest and most advanced password recovery utility, supporting five unique modes of attack for over 300 highly-optimized hashing algorithms. hashcat currently supports CPUs, GPUs, and other hardware accelerators on Linux, Windows, and macOS, and has facilities to help enable distributed password cracking.
Identify the different types of hashes used to encrypt data and especially passwords. hashID is a tool written in Python 3 which supports the identification of over 220 unique hash types using regular expressions.
Tunnukset löytyvät sen jälkeen /etc/shadow tiedostossa.
Tässä vaiheessa pohdin haluanko yksinkertaisesti kopioida pelkät tiivisteet uuteen tiedostoon, vai haluanko samalla tehdä ns. unshadow . Toiminto löytyy näköjään Johntheripperissä.
Kokeilin ensin copy paste metodilla.
Tässä vaiheessa tiivisteet ovat nyt tallennettuna omaan tiedostoon, ja haluan nyt tarkistaa millä metodilla tiivisteet on luotu. Tähän käytän hashID:tä.
hmm, eli ilmeisesti käyttäjätunnukset ei saisi olla mukana..Sekään ei kuitenkaan auttanut. Yritin vielä tehdä hashcatilla brute forcen, mutta ei onnistunut.
Ilmeisesti /etc/shadowin tiivisteet ovat erikoisesti suojattu, sillä yritin myös googlaamalla selvittää millä tiivisteet on luotu, mutta ei selvinnyt, eli en voinut tehdä hashcatilla tarkempaa hyökkäystä.
Päätin sittenkin luoda tiivisteet helpommin, sillä en halunnut tuhlata turhan paljon aikaa tiedostojen kanssa tappelemiseen.
Seuraavaksi tarkistin miten hashID tulkitsee tiivisteet.
Seuraavaksi murran tiivisteet hashcatilla. HashIDn tuloksista saan myös poimittua hashcatin modet. Päätin käyttää sanalistaa, sillä brute force varmaankin kestää liian kauan. Brute force hyökkäystyypin saa argumentilla -a3.
En tiedä jos hashcat suostuu ottamaan vastaan kolme moodia, mutta näyttipä onnistuvan. Tajusin kuitenkin tässä vaiheessa, etten ollut lisännyt salasanat rockyou-listaan…
Päätin kuitenkin luoda uuden pienemmän listan, johon kopioin rockyoun 100 ensimmäistä ja lisäsin vielä omat salasanat.
Tällä kertaa hashcat onnistui murtamaan yhden kolmesta salasanasta… Näköjään kuitenkin löytyi myös toinen solved.txt tiedostossa, en nyt oikein ymmärrä tätä tulostuslogiikka. Käsittääkseni hashcatin pitäisi tulostaa kaikki murretut salasanat tiedostoon (jo on määritelty) tai outputina, eikä näin, että osa tulostetaan tiedostoon ja osa outputina, se on kummallista.
Jos sen jälkeen ajan komennon uudelleen, sillä kolmannesta salasanasta ei löytynyt merkintää, saan ilmoituksen “INFO: All hashes found in potfile!” Mutta kun tarkistan sen, sieltä löytyy ainoastaan yksi.
Jotain tietoa aiheesta löysin täältä. Ehkä se vain johtuu siitä, että samassa tiedostossa on eri tyyppisiä tiivisteitä.
——————————————————————————————————————-
c) Tee oma sanalista itse tekemästäsi ja keksimästäsi weppisivusta.
Luon yksinkertaisen html sivun, jonka julkaisen yksinkertaisen python webserverin avulla. Tein ensin kansion Omasivu johon tallensin index.html tiedoston ja käynnistin palvelimen kyseisestä kansiosta, jolloin se automaattisesti hakee index.html tiedoston.
$ mkdir Omasivu
$ cd Omasivu/
$ vim index.html
$ python -m SimpleHTTPServer
CeWL is a ruby app which spiders a given url to a specified depth, optionally following external links, and returns a list of words which can then be used for password crackers such as John the Ripper.
Halusin tallentaa sanalistan tiedostoon, ja käytän sitä varten argumentin -w.
$ cewl http://localhost:8000/ -w dict.txt
——————————————————————————————————————-
d) Kokeile sanakirjahyökkäystä verkon yli omaan weppilomakkeeseen. (Vain omaan, eristetyssä verkossa olevaan lomakkeeseen. On kiellettyä tehdä näin kenenkään toisen koneelle.)
Halusin testata Juice Shopia. Python ei ole vielä kovin tuttu, ja vaikka löysin monta Python Flaskin tutorialeja, päätin antaa sen kuitenkin vielä hautua.
Jotain tietoa aiheesta löysin täältä ja Githubista. Tarkistin, että noden versio oli 12.21.0 ja käsittääkseeni pitäisi olla sama kuin juice shopissa. Eli poistan noden (sudo apt purge nodejs) ja kokeilen asentaa version 12.7.2.. Se oli kuitenkin vaikeampaa kuin kuvittelin, ja pitkän tutkistelun ja mietiskelyn jälkeen tajusin kokeilla toisin päin, eli asensin noden uusimman version ja latasin Juice-Shopin yhteensopivan version täältä.
$ mkdir Juice-shop
$ tar zxvf Downloads/juice-shop-12.2.1_node12_linux_x64.tgz -C Juice-shop\n
$ cd Juice-shop
$ sudo apt install npm
$ cd juice-shop_12.2.1
$ npm start
Hydra is a parallelized login cracker which supports numerous protocols to attack. It is very fast and flexible, and new modules are easy to add. This tool makes it possible for researchers and security consultants to show how easy it would be to gain unauthorized access to a system remotely.
Päätin kokeilla Hydraa, sillä siitä oli tunneilla niin paljon puhetta. Varmistan taas, että Hydra on jo asennettu Kalille.
Dictionary Attack will use a precompiled list of words or word list, this will speed up the cracking process over brute force because the program will only run through each word in the wordlist but if the word is not in said word list your attack will fail.
Brute Force will crack a password by trying every possible combination of the password so, for example, it will try aaaa then aaab, aaac, aaae . This quite considerably increases the time the attack takes but reduces the likeliness of the attack to fail.
In hydra, you can use the -x to enable the brute force options.
Kokeilen tutorialin esimerkkiä ensin. Mutta ensin pitää löytää jonkun adminin käyttäjätunnusta. Se löytyikin helposti, sillä admin@juice-sh.op on arvostellut jotain etusivun tuotetta.
Tajusin, että tuohon pitää määritellä se nimenomainen palvelu, jota halutaan murtaa, eli tässä tapauksessa lomake. Muutaman kokeilun ja etsinnän jälkeen löysin täältä tarkentavat ohjeet. Jouduin kuitenkin vielä etsimään netistä ja man sivuilta ennen kuin lopulta löysin toimivan komennon.
Eipä kuitenkaan ollut oikea salasana, niinpä teen uuden murtoyrityksen ja poistan -f argumentin, sillä haluan, että se etsii kaikki mahdollisia.
hmm, eipä nämäkään toimineet.. Tämä tarkoittaa varmaankin sitä, että kyseinen salasana ei löydy rockyou sanalistalla. Kokeilen seuraavaksi brute forcea. Löysin Juice-shopista tiedon, että salasana on 5-20 merkkiä pitkä, muita vaatimuksia ei nähtävästi ollut. Tämä kuitenkin luo liian laajan scopen, eli hydra ei suostu tekemään sellaista.
Kokeilin vielä sanakirjahyökkäystä siten, että poistin argumentin -t 4. Mielestäni hydra ajoi hyökkäykset aika nopeasti ja en halunnut turhia rajoituksia. Nyt löytyikin sitten 16 salasanaa.
Mikään niistä ei kyllä toiminut… googlasin aihetta, ja löysin oikean salasanan täältä.
Salasana vaikuttaa mielestäni sellaiselta, että pitäisi löytyä rockyou listalla, joten tutkiskelin hieman sitä. Todistettavasti se myös löytyy, joten en nyt ymmärrä miten Hydra ei voinut sitä löytää…
Loin uuden ensin file.txt tiedoston, johon asetin salasanan.
$ zip -er file.zip file.txt
e = Encrypt
r = Recurse into directories (tässä turha)
Jotta tiedoston voisi murtaa, täytyy ensin muuttaa sen muoto.
Sen jälkeen varmistin vielä, että valitsemani salasana löytyy rockyou listalla, ja tein murtoyrityksen Johntheripperilla.
Onnistui!
———————————————————————————————————————–
f) Vapaaehtoinen bonus: Kokeile sanakirjahyökkäystä verkon yli johonkin muuhun maaliin kuin weppiin.
Kokeilin hieman hydraa Metasploitable 2:een ssh palveluun. Ensin testasin brute forcea sanalla admin, ei löytynyt mitään. Sen jälkeen testasin vielä sanakirjaa, joka oli hidas.
Koska koko rockyou listan läpikäyminen näytti vievän aivan liian kauan, keskeytin sen ja kokeilin pienemällä listalla, mutta siinä ei näköjään ollut oikeata salasanaa mukana.
———————————————————————————————————————–
g) Vapaaehtoinen bonus: Murra useiden tiedostojen salasanasuojaukset.
RAR
Käytin aikaisempaa file.txt tiedostoa
$ rar a -hppassword123 file.rar file.txt
a = Add files to archive
hp[password] = Encrypt both file data and headers
Muutetaan taas ensin tiedoston muotoa. Käytän sen jälkeen Johntheripperia ja rockyou sanalistaa tiedoston murtamiseen.
Koodin etäsuorittamisen haavoittuvuus HttpFileServer ohjelmistossa Windows koneella.
Tiedustelu – nmap, searchsploit
80/tcp http -> HttpFileServer 2.3
haavoittuvuus CVE-2014-6287 “The findMacroMarker function in parserLib.pas in Rejetto HTTP File Server (aks HFS or HttpFileServer) 2.3x before 2.3c allows remote attackers to execute arbitrary programs via a %00 sequence in a search action.”
Localhostia kuuntelee myös palvelu portissa 5601 -> ssh port forwarding: ssh> -L 5601:localhost:5601
selaimessa kyseessä Kibana instanssi
haavoittuvuus CVE-2018-17246 “Kibana versions before 6.4.3 and 5.6.13 contain an arbitrary file inclusion flaw in the Console plugin. An attacker with access to the Kibana Console API could send a request that will attempt to execute javascript code. This could possibly lead to an attacker executing arbitrary commands with permissions of the Kibana process on the host system.”
nmap avoimet portit 79/tcp finger Sun Solaris, 111/tcp rpcbind
laajempi nmap skannaus (kaikki portit) + kohdennettu näyttää lisäksi 22022/tcp ssh
listataan finger
metasploit -> kertoo käyttäjät
finger-user-enum (perl skripti kloonattu githubista) kertoo enemmän
löytyy kiinnostavia käyttäjiä sammy ja sunny
sunny käyttäjäksi pääsee ssh:lla arvaamalla salasana (voi käyttää myös vaikka patator tai hydra (joka ei toimi koska liian vanha palvelu))
sunnylla on sudo oikeus /root/troll
löytyy myös shadow.backup josta saamme poimittua ja hashcatilla selvitettyä sammy käyttäjän salasanaa
sammy käyttäjällä sudo oikeus wget:iin, jonka avulla voi luoda ja ladata bash skripti troll, jonka sunny voi ajaa -> pääsy rootiksi ja root.txt
a) Etsi ja kokeile 5 uutta työkalua jostain lukemastasi/katsomastasi läpikävelystä.
wfuzz – a web application bruteforcer
Wfuzz is a tool designed for bruteforcing Web Applications, it can be used for finding resources not linked (directories, servlets, scripts, etc), bruteforce GET and POST parameters for checking different kind of injections (SQL, XSS, LDAP,etc), bruteforce Forms parameters (User/Password), Fuzzing,etc.
Tutkin ensin mitä se tekee ja mitä toimintoja siinä on. Testaamiseen tarvitsen targetin ja payloadin (tai encoder/iterator/printer/script).
wfuzzin mukana tulee jotain valmiita wordlistoja, joita hyödynnän.
Käynnistin python testipalvelimen ja testasin wfuzzia sitä vastaan. Parametri -hc 404 filtteröi tuloksista 404 not found vastaukset. Tuloksia ei odotetusti löydy, sillä testipalvelimella ei pyöri mitään.
Tämä ei löytynyt ennestään Kalilla, joten asennan sen ensin.
$ sudo apt install gobuster
Kokeilen taas gobusteria Python testipalvelinta vastaan ja käytän taas wordlistaa. Komento dir lsitaa hakemistot/tiedostot. Taaskaan ei odotetusti löytynyt mitään kiinnostavaa.
$ gobuster dir -u http://localhost:8000 -w /usr/share/wordlists/dirb/common.txt
searchsploit
SearchSploit utility, which will allow you to search through exploits, shellcodes and papers (if installed) using one or more terms.
HTB:n Laboratory koneessa ylläolevassa walktroughssa searchsploitin avulla tunnistettiin gitlab versio 12 haavoittuvuudet.
Alla löytyy searchsploitin löytämät haavoittuvuudet Apache 2.4:ssa.
burp
Burp Suite on monipuolinen työkalu pentestaukseen, sitä voi hyödyntää yksin tai muiden työkalujen kanssa. Burpia voi käyttää skannaamiseen tai hyökkäykseen. Burpin avulla voi esim siepata ja modifioida HTTP kyselyitä ja vastauksia. Hyviä tietoja Burpista ja sen käytöstä löysin sivulla https://portswigger.net/burp/documentation/desktop/penetration-testing
En kuitenkaan keksinyt mitään tapaa testata Burpia, ja se myös vaikutti todella monimutkaiselta, vaikkakin sitä käytettiin jokaisessa walktrough videossa jonka katsoin, eli olisi varmaan erittäin hyödyllinen. Tässä kotitehtävää tehdessäni ei riittänyt aika Burpsuiteen perehtymiseen, joten joudun siirtämän sen myöhemmäksi.
Sherlock -> Watson
Tutkiselin ensin Sherlock haavoittuvuusskanneria (https://github.com/rasta-mouse/Sherlock), joka on Windowsille toimiva Powershell skripti joka etsii puuttuvia ohjelmistopatcheja ja niiden kautta Privilege Escalation haavoittuvuuksia. Sherlock on näköjään vanhentunut ja sen sijaan tulisi käyttää Watsonia https://github.com/rasta-mouse/Watson. Watson skannaa Windowsia ja listaa puuttuvia KB:ta sekä niihin liittyviä mahdollisia Privilege Escalation haavoittuvuuksia.
b) Tiedustele ja analysoi 5 htb konetta perusteellisesti. Käytä ainakin nmap-porttiskanneria. Halutessasi voit käyttää lisäksi muita työkaluja, kuten eyewitness, nikto, wpscan, gobuster, gvm (openvas), msfconsole, ffuf, zaproxy, mitmproxy, sqlmap, searchsploit, exploitdb..
HTB: Spectra
Käytän walktrough videoiden tekijän nmap komentoa, sillä se vaikutti hyvältä.
$ nmap -sC -sV -oA spectra 10.10.10.229
Tästä tiedetään, että avoimia portteja ja palveluita on SSH 22, HTTP 80 jota kuuntelee nginx, MYSQL 3306 josta löytyy kaikenlaisia ssl ja tls erroreita sekä Blackice-icecap? 8081. Ensisilmäyksellä veikkaan, että haavoittuvuuksia löytyy mysql:ssä. Tutkin kuitenkin ensimmäisenä tuota blackice-icecap palvelua, sillä en ole sellaisesta ikinä kuullutkaan.
Blackice-icecap – googlettamalla löytyi vaihtoehtoja siitä, että nmap saattaa tulkita palvelun väärin pelkästään sen kuunteleman portin perusteella, tai kyseessä voi olla ICEcap manager, joka on BlackICE IDS Agents and Sentries hallintakonsoli ja kuuntelee porttia 8081 (https://www.exploit-db.com/exploits/19922). hallintakonsoliin pystyy mahdollisesti kirjautumaan default tunnuksilla, ellei niitä ole vaihdettu. Ensin pitää kuitenkin löytää login sivu…
Portti 8081 taas vie hello world sivustoon, joka myös näkyy nmap tuloksissa.
Portin 3306 sivusto on kiinnostava ja todennäköisesti tämän koneen päämäärä, mihin myös nmap tulos “unauthorized” viittaisi.
wfuzz kertoo saman minkä sivustolla käynti, eli, että löytyy “main” ja “testing”.
Testaan mitä eyewitness sanoo siitä. Ei kerro paljon.
Kokeilin myös niktoa, joka on erittäin hidas, eikä antanut mitään tietoa. En muutenkaan oikein tajunnut mitä sen pitäisi tehdä.
Searchsploit kertoo joku mahdollinen exploitti, ssh ei ole näköjään hyvä kohde mutta nginx voisi olla.
Mutta searchsploit ei kuitenkaan anna paljon tietoa haavoittuvuuden hyväksikäyttämisestä.
Yritin myös käyttää tässä Burpsuitea, mutta en saanut sitä millään toimimaan. se ilmoitti haluavansa käyttää chromiumia, jossa on valmiiksi Burpin vaatimat asetukset, mutta en päässyt surffaamaan sivuille eikä näin ollen myöskään tutkimaan mitään liikennettä.
HTB: Delivery
Aloitan nmap skannauksella
Joka kertoo, että SSH 22 ja HTTP 80 ovat avoimina, käyttöjärjestelmä Debian 10 “buster”.
Ja tutkin sivustoa. Tässä eyewitness ei onnistunut oikein screenshotin kanssa…
wfuzz taas antaa tässä hyviä lisätietoja, jotka myös löytyy surffaamaalla welcome sivustolla. 301 on moved permanently, eli tästä voisi löytyä jotain.
Teen uuden nmap skannauksen kaikista porteista (yllättävän nopea) ja tarkennan vielä portin 8065. En kuitenkaan saa selville mikä palvelu kuuntelee kyseistä porttia.
Googlettamalla kuitenkin selviää, että kyseinen portti saattaa liittyä nginx:ään ja mattermostiin, josta löytyy myös viittauksia sivustolla.
Tässä koneessa halutaan todennäköisesti löytää joku registered user, jota voimme hyväksikäyttää päästääksemme mattermost palvelimeen.
Kirjautumissivu löytyy aika helposti ja tässä voi myös luoda itselleen tilin.
Tässä on mielestäni hyvä kohde etsiä haavoittuvuuksia ja vaikka kokeilla injektionia.
HTB: ScriptKiddie
Aloitan nmapilla, joka kertoo, että SSH 22 ja 5000 http palvelulla Werkzeug ovat avoimina. Käyttöjärjestelmä Ubuntu, mahdollisesti Focal Fossa 20.04.
Laitan vielä allports skannauksen varmuudeksi pyörimään (tällä kertaa kesti todella kauan). Kun nmapin allports skannaus vihdoinkin on valmis, se ei ole löytänyt mitään uutta.
Werkzeug ei ole ennestään tuttu, joten etsin siitä tietoa. Kyseessä on CGI kirjasto ja se voi toimia myös yksinkertaisena web palvelimena.
Sillä välin tutkin sivustoa.
Eyewitness ei kerro mitään uutta tai yllättävää.
Eikä myöskään wfuzz tai gobuster
Tästä en suoraan keksi miten edetä, veikkaisin, että murtautuminen tulisi tapahtua Werkzeugissa, sillä muuten ainoastaan SSH on käytössä ja versio tuore.
HTB: Armageddon
Tutkin uudestaan tätä samaa konetta, jota olen jo aikaisemmassa kotiläksyssä tutkinut. Tämä koska HTB:lla ei ole montaa ilmaista “easy” konetta.
Aloitan taas nmapilla.
Ja tässä avoimet portit ovat SSH 22 ja HTTP 80, jota kuuntelee Apache. Käyttöjärjestelmä CentOS, versiosta en osaa tarkemmin sanoa, ei välttämättä ihan uusin. Muuta kiinnostavaa on varmaankin hakemistot, niistä varmaan löytyy jotain ja lisäksi Drupal 7, tämä on vieras, joten siitä etsin ensin tietoja.
Armageddonissa löytyy kirjautumissivu, jota voisi todennäköisimmin jotenkin hyödyntää.
Gobuster löytää tässä joukko hakemistoja, joista osa voisi tutkia tarkemmin.
wfuzz vahvistaa sen
Searchsploit löytää kyseisellä SSH-versiolla pari exploittia.
Apachesta löytyy myös muutama exploitti, sekä niihin skriptit, joten kokeilen niitä.
en oikein saanut mitään niistä toimimaan, eli joko näitä haavoittuvuuksia ei ole tai en osannut ajaa scriptit oikeilla argumenteillä.
Tutkin gobusterin löytämiä hakemistoja tarkemmin
Näiden joukossa löytyy password tiedosto, joka kertoo miten salasanoja salataan, eli siitä todennäköisesti olisi hyötyä. Myös scripteissä löytyy password hash niminen skripti.
c) Nimeä 1-3 walktrough:ta, joissa tunkeudutaan samantapaisiin palveluihin, joita käsittelit kohdassa b. Mitä työkaluja hyökkääjät käyttivät? Kokeile työkaluja (1-3 työkalua) ensin omassa ympäristössä, sitten HTB:n maalikoneita vastaan, raportoi ja arvioi tulokset.
Testasin työkalun ensin localhostilla. Ensin kloonasin sen GitHubista. Skriptin ajaminen ei heti onnistunut, mutta GitHubista löytyi siihen ratkaisu, piti ladata puuttuvat dependencies. Localhostilla työkalu ei kertonut oikein mitään, sillä portti 80 on kiinni.
Droopescan https://github.com/droope/droopescan testaa haavoittuvuuksia, liittyy käsittääkseeni juuri Drupaliin. Tämän kohdalla samat toimenpiteet kuin drupalgeddon2. En saanut kuitenkaan työkalua toimimaan localhostilla, asennus näköjään onnistui mutta en ymmärtänyt miten työkalun saa käyntiin. Tästä löytyi jotain apua https://github.com/droope/droopescan/issues/51
Vulnhubin Writeup koneessa https://0x00sec.org/t/vulnhub-boredhackerblog-cloud-av-writeup-walkthrough/20360 esiintyy myös Werkzeug. Tämän koneen sivustolla on tarkoitus kirjautua kutsukoodilla, ja sen voi saada sieppaamalla http liikenne. Ei oikein selvinnyt mitä työkalua siihen käytetään (ehkä wireshark?), mutta sen lisäksi tässä läpikäynnissä käytetään ainakin SQLmap, jonka avulla voi etsiä haavoittuuvuuksia SQL injektionille ja vastaavalle. SQLMap https://github.com/sqlmapproject/sqlmap
$ git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
$ python sqlmap.py -h # list of options
Työkalun ajaminen localhostilla ei onnistu, taas todennäköisin syy on suljettu http portti.
Seuraavaksi testaan työkalua ScriptKiddiella. Argumentti –forms testaa jos urlilla olevat lomakkeet ovat haavoittuvia injektionille. Työkalu vaatii aika paljon inputtia, eli siten myös syvempää osaamista.
lists target ip address + reverse-DNS lookup (unless arg -n)
stealth – names of hosts can hint at potential vulnerabilities and give better understanding of the target network, without triggering alerts
double check that target range is correct
port scan (SYN scan is default scan type)
application and version of services + OS
-sS TCP SYN scan, add -u to include UDP
-p specify ports or port range
-PE -PP -PS80,443 -PA3389 -PU40125 host discovery techinques = ping types, alternative: -Pn scan every ip wether it shows available host or not
-A advanced/aggressive: OS and service detection
-T4 adjusts timing to aggressive level
-oA outputs results in all formats (normal, XML, grepable)
-v verbose
scripts:
nmap-wrapper fast daily scan, include OS detection
nmap-diff – daily change reports
nmap-report specifications: open ports, os, rescan – uses version scanning to report true services rathe,nr than guessing based on port number
Phases of Nmap scan
Script pre-scanning
NSE Nmap Scripting Engine, special purpose scripts.
–script or -sC
ex: dhcp-discover and broadcast-dns-service-discovery
Target enumeration
Nmap researches the host specifiers provided by the user, which may be a combination of host DNS names, IP addresses, CIDR network notations etc.
Host discovery (ping scanning)
discover online targets on network
ARP, combinations of TCP, ICMP etc.
default, but can be skipped with -Pn
Reverse-DNS resolution
reverse-DNS names of all online hosts
Sometimes a host’s name provides clues to its function, and names make reports more readable than providing only IP numbers
skipped with -n and expanded to cover all target IPs with -R
Port scanning
open, closed, filtered
default, but can be skipped with -sn
Version detection
version of server software on open ports
enabled with -sV
OS detection -O
Traceroute –traceroute
Script scanning –script or -sC
Output
collects gathered information in file or to screen
Script post-scanning
after scanning and normal output
process results and deliver final reports and statistics
Legal issues
permission to scan – written authorization from target network representatives
specify target for scan as tightly as possible
ex. scan -p80 for webservers and ping scan instead of full scan for available hosts
avoid noisy and intrusive scan , version detection or script
SYN scan -sS is quieter than connect scan -sT
Silmäile (ei tarvitse lukea kokonaan, 40 liuskaa pitkä): Lyon 2009: Nmap Network Scanning: Chapter 15. Nmap Reference Guide
Port Scanning Basics (opettele, mitä tarkoittavat: open, closed, filtered; muuten vain silmäily)
open – an application on target machine is listening for connections/packets (TCP, UDP, SCTP)
open ports show services available for use on the network
closed – no applications listening, can open up at any time.
closed ports are reachable (receives and responds to nmap probes), helpful for host dicovery, ping scan and OS detection
filtered – unable to reach, nmap cannot determine if open or closed, because blocked by packet filtering (dedicated firewall device, router rules, host-based firewall software)
sometimes ICMP error messages (destionation unreachable: communication administratively prohibited) and sometimes just dropped
slows scan
unfiltered – responsive to probes, accessible but nmap cannot determine if open or closed
only ACK scan -> Windows scan, SYN scan or FIN scan can help resolve if port is open
open|filtered – nmap cannot determine if port is open or filtered
scan types where open port give no response (UDP, IP protocol, FIN, NULL, Xmas)
closed|filtered – nmap cannot determine if port is closed or filtered
clear, reliable differentiation between open, closed and filtered
-sT TCP connect scan
default when syn scan not an option (user doesn’t have raw packet privileges)
nmap asks underlying os to establish connection with target machine and port by issuing connect system call -> completes TCP connections
slow, requires more packet to obtain info and can create logs on target machine
-sU UDP scans
can be combined with a TCP scan type (SYN scan -sS)
sends UDP packet to every targeted port
ICMP port unreachable error (type 3, code 3) – port closed
othet ICMP unreachable errors – port filtered
service respond with UDP packet (occasionally) – open
no response – open|filtered – could be open or packet filters are blocking communication -> version detection -sV
slow
Silmäile (ei tarvitse lukea kokonaan): man nmap
a) Miten nmap toimii? Tee nmapilla seuraavat testit, sieppaa liikenne snifferillä (wireshark) ja analysoi tulokset. Tee testit mahdollisimman suppeasti, jotta analysointi on helpompaa. Esimerkiksi skannaa vain yksi portti yhdestä koneesta, jos ominaisuuden esittely ei hyöydy laajemmasta skannauksesta. Selitä myös, miksi nmap lähettää tuollaisia paketteja. Käytä nmap:ia normaalisti sudo:n kanssa. Kannattaa tietysti aloittaa lukemalla man-sivulta tai Nmap Reference Guidesta, mitä noilla toiminnoilla on ylipäänsä tarkoitus tehdä. Porttiskannaa ainoastaan omaa konetta omassa verkossa ja harjoitusmaaleja.
Tässä a-kohdassa jokainen alakohta edellyttää siepattujen pakettien analyysia.
Kokeilin ensin skannata omaa Kalikonettani (localhost), mutta se oli tylsä koska kaikki portit olivat kiinni.
Sen sijaan päätin skannata HTB:n Armageddon konetta. Liikennettä oli kuitenkin hankalaa seurata Wiresharkilla, koska siellä oli paljon muutakin kuin oma porttiskannaukseni.
TCP connect scan -sT
Nmapin tulokset näyttävät, että portit 22 ja 80 ovat auki.
Wiresharkin näkymää en osaa oikein tulkita. Käsittääkseni näkymän värikoodi näyttää minkälainen liikenne on kyseessä, eli vihreä näyttää onnistuneen TCP handshaken ja punainen epäonnistuneen. Tämä koska kyseessä on TCP Connect scan, eli nmap muodostaa yhteyden (= jää loki).
Kun tarkastelee liikennettä vain yhden portin osalta, tässä portti 80, käy helpommin ilmi mitä tapahtuu. Eli paketteja on yhteensä 6 (vaikka ei peräkkäisiä)
TCP SYN “used to be stealth” scan, -sS (tätä käytetään skannatessa useimmin)
SYN scan eroaa Connect scanista siten, että se ei vie TCP handshakea loppuun asti, vaan odottaa ainoastaan portin vastausta ennen kuin droppaa yhteyden. Tämän takia SYN scan on nopeampi (n. 26 sekunttia vs n. 2 sekunttia) ja myös hienovaraisempi (jättää vähemmän jälkiä lokiin).
Tässä näkee, että paketteja on vain 5 kun connect scanissa niitä oli 6, eli näistä puuttuu se lopullinen yhteys handshakesta.
ping sweep -sn
Ping sweep scan tarkistaa vastaako kohde pingiin, eli nmap lähettää ICMP echo requestin ja saa siihen vastauksen.
Jostain syystä liikenteessä näkyy myös SYN portille 443 ja ACK portille 80, ja en oikein ymmärrä mihin nämä liittyy.
don’t ping -Pn
Tämä skannaustyyppi tekee skannauksen ilman host discoverya, eli käytännössä nmap ei tarkista jos kohteet ovat online, vaan olettaa, että kaikki ovat.
version detection -sV (esimerkki yhdestä palvelusta yhdessä portissa riittää)
Versio skannaus etsii mikä palvelun versio porttia kuuntelee.
Tästä voisi ajatella, että nmap kokeilee GET requestilla eri versioita kunnes kohtaa oikean, mutta toisaalta liikenteestä näkyy ainoastaan kyselyitä HTTP 1.0 ja 1.0…. Portilla 80 on liikkunut paketteja yhteensä 125, joista suurin osa liittyy TCP handshakeen.
SSH portin 22 liikenne on ehkä hieman selvempää (ja paketteja vähemmän).
Tässä nähdään, että kone on vastannut SSH:lla kertoen mitä versiota käyttää.
b) Nmap:n toimintoja. Kokeile, anna esimerkit, selitä tulokset ja käyttötarkoitus. Seuraa aina snifferillä, tarvittaessa perustele analyysisi siepatulla liikenteellä.
porttien valinta -p1-100, –top-ports 5
Skannasin tällä HackTheBoxin verkkoa. Tämä skannaa porttinumeroiden 1-100 välissä kaikki verkon ip-osoitteiden top5 porttia, eli näköjään ftp, ssh, telnet, smtp ja http.
Wireshark näyttää kaikkiaan 2247 pakettia, joten tutkin liikennettä vain yhden ip:n osalta. Liikenteestä näkyy ensin ICMP pingi ja sen jälkeen TCP SYN kyselyt kyseisten porttien osalta.
ip-osoitteiden valinta, verkkomaskilla 10.10.10.0/24, alku- ja loppuosoitteella 10.10.10.100-130 (ipcalc auttaa ymmärtämään, miten verkkomaskia tulkitaan)
output files -oA foo
Nmap skannauksen tulokset tallennetaan “foo” nimiseen tiedostoon, joka on saatavilla kaikissa muodoissa (A). Tein ihan perus-skannauksen ilman parametreja, joten se kesti aika kauan, mutta ainakin mielestäni antoi kiinnostavampia tuloksia kuin top5 porttiskannaus. Skannauksesta luotiin kolme erillistä tiedostoa, joita voi helposti selailla.
version scanning -sV
Tässä olisin voinut hieman rajata skannausta, sillä se kesti kauan.
Paljon liikennettä oli myös Wiresharkissa, paketteja kaikkiaan 61120, joten tarkastelen taas vain osan.
Ensin nmap on taas pingannut ja sen jälkeen lähettään SYN kyselyt portteihin, ja saanut paljon hylkyjä (punaiset = RST = reset).
OS fingerprinting, version detection, scripts, traceroute -A (miksei mnemonic ole –and-kitchen-sink?)
Yritin tällä kertaa hieman rajata skannausta (eli skannasin vain yhden osoitteen), mutta silti siitä tuli aika laaja ja kesti kauan.
ajonaikaiset toiminnot (man nmap: runtime interaction): verbosity v/V, help ?, packet tracing p/P, status s (ja moni muu nappi)
v = verbose tulostaa skannauksen aikana tietoa siitä missä mennään. Voi olla hyödyllistä kun on esim. hidas skannaus käynnissä tai jos etsii jotain tiettyä voi skannauksen keskeyttää kun se on löydetty.
–packet-trace tekee suunnilleen saman mikä wireshark, eli näyttää mitä paketteja skannauksessa liikkuu.
normaalisti ‘sudo nmap’. Miten nmap toiminta eroaa, jos sitä ajaa ilman sudoa? Suorita ja analysoi esimerkki.
Sudolla vs ilman sudoa
Sudolla skannaus on hitaampi mutta laajempi, esim. tässä esimerkissä käytetty -A tekee tracerouten ja OS fingerprintin sudolla mutta ei ilman.
vertaile -sV vs -A kestoa (ja lähetetyn datan määrää jos osaat; time, nethogs, wireshark)
-A kesto 27.04 sekunttia ja pakettien määrä (Wiresharkissa) 3114
-sV kesto 11.29 sekunttia ja pakettien määrä 2308
Versioskannaus on luonnollisesti nopeampi ja sisältää vähemmän paketteja, sillä -A skannaushan sisältää versioskannauksen ja tekee sen lisäksi myös OS fingerprintin ja tracerouten.
c) Ninjojen tapaan. Aja nmap-versioskannaus -sV omaan paikalliseen weppipalvelimeen. Weppipalvelimeksi sopii esim ‘python3 -m http.server’ tai oma apache. Piiloutuuko nmap-skannaus hyvin palvelimelta? Vinkki: wiresharkissa “http” on kätevä filtteri, se tulee siihen yläreunan “Apply a display filter…” -kenttään. Nmap-ajon aikana p laittaa packet tracing päälle. Vapaaehtoinen lisäkohta: jääkö Apachen lokiin jokin todiste nmap-versioskannauksesta?
Käytin tähän Pythonin paikallisen testipalvelimen, jonka skannasin versioskannauksella.
Seurasin samalla Wiresharkissa http liikenteen.
En oikein tiedä mihin tämän testipalvelimen loki jää talteen (jos jää), mutta ainakin se tulosti skannauksen aikan lokit terminaaliin, eli lokiin jää skannauksesta jäljet.
d) UDP-skannaus. “Mulla olis vitsi UDP:sta, mutta en tiedä menisikö se perille”. Etsi tarvittaessa itse lähteet.
Mitkä ovat tavallisimmat tai kiinnostavimmat palvelut, joita UDP-skannauksella voisi löytää?
DNS – portti 53, SNMP – portit 161/162 ja DHCP – portit 67/68
Miksi UDP-skannaus on hankalaa ja epäluotettavaa?
Avoimet portit eivät yleensä vastaa tyhjiin tiedusteluihin, ja nmap ei osaa tulkita jos portti on avoin tai filtteröity jos tiedusteluihin ei vastata. Eri UDP palveluiden paketit ovat erilaisia, joten geneerisen paketin käyttäminen skannauksessa ei onnistu. Onnistunut tiedustelu vaatisi, että nmap lähettäisi jokaista palvelua vastaavan tiedustelun, mikä olisi todella hidasta ja vaatisi valtavan tietokannan. Tiedustelujen muodot sisältyvät versioskannauksessa, joten sitä voi hyödyntää kun haluaa välttää portteja tilassa open|filtered.
Miksi UDP-skannauksen kanssa kannattaa käyttää –reason flagia?
–reason lisää tuloksiin kolumnin, joka kertoo miksi nmap on luokitellut portin tietyllä tavalla
Vapaaehtoinen bonuskohta: näytä esimerkki onnistuneesta UDP-skannauksesta, sekä jonkin UDP:n erityisominaisuuden takia epäonnistuneesta tai harhaanjohtavan tuloksen antavasta UDP-skannauksesta.
Tämä ei ole varsinaisesti onnistunut skannaus, mutta ainakin antaa jotain tuloksia, sekä myös esimerkki miten yllä oleva –reason toimii.
e) Avaa yhteys HackTheBoxin verkkoon ja osoita, että yhteys toimii. Varmista esimerkkiosoitteella, että olet yhteydessä oikeaan HackTheBox maaliverkkoon. Voit esimerkiksi tarkistaa ipcalc:lla, että kyseessä on yksityinen IP. Kokeilla pingillä, että osoite vastaa vain, kun VPN-tunneli on päällä. Kokeilla surffata jotain sivua, joka näkyy vain tuolta maaliverkosta. Ja tietysti, että kaikki toimii odotetulla tavalla.
Yhdistän ensin HackTheBoxin VPN-tunneliin.
Käynnistän HTB:n koneen ja tutkin ipcalcilla, että kyseessä on oikea/sopiva maali.
Testaan yhteyden pingaamalla konetta onnistuneesti ja tarkistamalla, että pääsen surffaamaan koneen sivulle.
Seuraavaksi sammutan VPN-yhteyden ja testaan vielä pingata konetta varmistaakseni, että se on tavoitettavissa vain tunnelin kautta.
f) Tiedustele aktiivisesti joitakin HackTheBoxin koneita. Analysoi tulokset. Huomaa, että koneet pitää nykyisin käydä käynnistämässä weppiliittymästä. Käytä nmap-porttiskanneria. Seuraa koko ajan porttiskannerin toimintaa snifferillä, kuten tshark tai wireshark. HTB:n ratkaisut yhdessä sovitun salasanan taakse, jotta emme spoilaa toisten kilpailua. Pelkät komentojen tulosteet ilman analyysia eivät riitä, pääpaino on tulosten selittämisellä ja tulkinnoillasi. Vapaaehtoinen bonuskohta: Osaatko nimetä työkaluja, joilla löytämiäsi palveluita (tai jopa haavoittuvuuksia tai vanhempia versioita) voisi tutkia myöhemmin lisää tai jopa murtaa?
Tiedustelen samaa Armageddon konetta, jonka yhteyttä testailin edellisessä tehtävässä. Koska käytin jo samaa konetta aikaisimmassa tehtävässä, teen tässä hieman erilaisia skannauksia ihan vertailun vuoksi.
Testaan skannata materiaalista Lyon 2009: Nmap Network Scanning: Chapter 1. Getting Started with Nmaplöydetyn yhdistelmän, joka näytti toimivan ihan hyvin vaikka olikin aika hidas.
Skannauksen tuloksista nähdään, että portit 22 ja 80 ovat avoimena ja näissä pyörii OpenSSH 7.4 ja Apache 2.4.6 sekä PHP 5.4.16.
hyökkääjä murtautuu tietokantaan ja voi muuttaa tai tuhota tietoja ja pahimmassa tapauksessa hyökkääjä voi adminina hallita koko tietokantaa
Käytännössä tämän tehdän sotkemalla ja manipuloimalla tietokannan pyyntöjä.
esim. kirjautumissivu, johon hyökkääjä syöttää kirjautumistiedon tilalla SQL kommennon. Kommennon avulla hyökkääjä voi hakea tietokannasta dataa tai tutkia tietokannan rakennetta, jonka avulla hyökkääjä voi tunnistaa haavoittuvuudet.
käyttäjän syöttämä data ei validoida tai filtteröidä
esimerkkisyöte: or 1=1 (lause on aina tosi)
SQL Injectionia voi välttää validoimalla tietokannan pyynnöt, esimerkiksi syötettyjen merkkien perusteella. Tämän voi toteuttaa esimerkiski tietyillä parametreillä koodissa.
A2 Broken Authentication
hyödynnetään todennuksen ja istunnonhallintaan liittyviä virheellisiä asetuksia
höykkääjä voi saada käsiinsä salasanoja, avaimia ja istuntomerkkejä tai esittää toisia käyttäjiä väliaikaisesti tai pysyvästi
käytössä olevat salasanat ovat heikkoja tai defaulteja
session IDt URLssä tai session IDt jäävät voimaan
hyökkäyksiä voi olla salasanaan kohdistuvia esim. brute force tai sanakirjahyökkäyksiä. Vaihtoehtoisesti voi myös manipuloida tai saada haltuun session ID:ä tai avaimia.
hyökkäystä on mahdollista välttää ottamalla käyttään multi-factor autentikaatiota, vaihtamalla default salasanat, salasanapolitiikalla, seuraamalla epäonnistuneet loginit, suojaamalla session IDt
A3 Sensitive Data Exposure
monet sovellukset ja APIt eivät suojaa kunnolla arkaluonteisia tietoja, kuten talous-, terveys- ja henkilötietoja
heikkoa avainten luontia ja hallintaa
heikkoa suojausta voi hyödyntää esim. luottokorttipetoksissa ja henkilöllisyysvarkauksissa
arkaluonteiset tiedot voivat vaarantua tallennuksessa tai siirtymisessä, jos niissä ei ole ylimääräistä suojausta, esim. man-in-the-middle
tietoja on mahdollista saada haltuunsa esim. SQL injectionilla tai packet snifferin avulla (esim. Wireshark)
Haavoittuvuuksia voidaan välttää päivittämällä tietojen salausmenetelmiä, tallentamalla ainoastaan tarvittavaa tietoja ja salattuna
A7 Cross Site Scripting
hyökkäys, jossa hyökkääjä tunkeutuu luotettavien sivustojen tietoihin.
haavoittuvuuksia voi hyödyntää esimerkiksi kaappaamalla kirjautumisia varastamalla evästeiden tietoja tai muuttamalla sivuston näkyvyyttä ja käytettävyyttä.
Sivuston koodiin voi esimerkiksi piilottaa scriptejä jotka uudelleenohjaavat käyttäjän vahingollisiin sivustoihin tai varastavat käyttäjän tietoja.
hyökkääjän on mahdollista jopa saada täysi hallinta käyttäjän järjestelmästä
Cross-site scriptingille sopivia haavoittuvuuksia voi esiintyä esimerkiksi silloin, kun sivusto ei käsittele ja vastaa http-pyyntöihin turvallisella tavalla. Tällöin tätä pyyntöä ja sen vastausta on mahdollista muokata.
Haavoittuvuuksia voidaan välttää esimerkiksi filtteröimällä ja validoimalla käyttäjän antamia tietoja, ja salata näitä.
Authentication – verifying that an individual, entity or website is whoever they are claiming to be
commonly performed by submitting a username or identifier and one or more items of private information, ex. password, key, token
Session management – how a server maintains a state of an entity that it’s actuallt interacting with, remember how to react with subsequent requests
session id – passed back and forth between server and client when transmittinf or receiving requests
should be unique and difficult to predict
Web authentication scheme – method/process to pass credentials from a user authenticating to a system, vary in security and complexity
SSL/TLS – typically used to ensure confidentiality, required for many authentication schemes
digital certificate / PKI – proves ownership of public key
trust chain: Certificate Authority CA -> root cert
browser has list of trusted CAs
simple vs mutual / one-way vs two-way authentication
simple: https connection from browser is established, client is verifying digital certificate of server
mutual: simple process + server requests the client to present certificate and check its owns collection of trusted certificates to determine to trust client
TLS-SRP – Secure Remote Password – password-based client authentication to server without need of certificate, not widely adopted
HTTP Basic Auth – pop-up messages in browser, no cookies, no handshakes
dedicated HTTP header to communicate encoded username and password, requires to cache credentials, pairs with SSL/TLS
drawbacks: no standard way to logout, no way to customize the login, client prompts, client needs to secure transactions, insecure
redirect URI – used for redirecting user from provider back to consumer
consumer makes resource request to provider
provider informs user of request and prompts authentication (any authentication scheme)
temporary access token in HTTP header
user credentials are never exposed to application
OpenID (OID) / OpenID Connect – open standard for providing authentication
used by yahoo, google, wordpress
relying party RP – client outsourcing authentication to OID
attribute exchange extension – profile attributes to be provided from OID to RP
allows a user to maintain a single profile with OID provider of choice + authenticate with any third-party website/mobile app as RP
Security Assertion Markup Language SAML –
XML based open standard, maintained by Oasis
used for both authentication and authorization
capable of exchanging user profile attributes
current leading standard for inter-domain SSO
Web session – sequence of HTTP requests and responses between web client and web server
pre-authentication tasks – authentication process – session management -access control – session finalization
many web applications keep track of information about users for duration of transactions
variables: access rights, localization settings etc.
provide session capabilities both before and after authentication
once an authenticated session has been established, session ID/token is temporarily equivalent to the strongest authentication method used by application
Session ID / token (ID = “12345678abcdefg”)
provided users by applications to keep the authenticated state and track user’s progress
assigned at session creation, shared and exchanged by user and web application for duration of session
“name = value” pair
easily fingerprinted: PHPSESSID -> PHP framework
most be long 128 bits/16 bytes + unique and unpredictable = good PRNG (at least 64 bits of entropy)
Session ID exhange mechanisms – mechanisms in HTTP to maintain session states within web applications
cookies (most widely used), URL parameters (RFC2396), URL arguments on GET requests, body arguments on POST requests: hidden form fields, HTLM forms, or prioprietary HTTP headers
session id should not be included in URL – can lead to manipulation or session fixation attacks (inject or manipulate session id on victim’s web browser)
Session management
web frameworks provide session management features
encrypt entire web session, ensure that elements are only exchanges through an encrypted channel
session management based on cookies uses:
persistent – has “max age” or “expires” attribute, will be stored in browser until expiration
non-persistent (session cookies) – session info is deleted from client if browser instance closed
session id must be carefully validated and verified by application depending on session management mechanism used
session id will be received in GET or POST parameter or in URL or in HTTP header using cookies
if web applications do not validate or filter invalid session IDs they can be potentially exploited by other vulnerabilities
SQL injection if session id is stored in a database or persistent
Cross-site scripting if session is stored and reflected back afterwards by web application
aikaisemmin sama cyber-rikollisryhmä oli hyökännyt samanlaisilla menetelmillä tanskalaisia kiropraktikkoja vastaan
Kohdennettuja ja räätälöityjä sähköposteja täydellisellä tanskan kielellä
Haitallinen koodi sisälsi DarkComet RATin
Spear Phising – Spear phishing is a type of phishing that is highly targeted against a single individual inside an organization. This type of phish is built using content that is personal and believable. It usually doesn’t stand out too much from the company’s normal email stream.
DarkComet RAT – a remote access trojan (RAT) developed by Jean-Pierre Lesueur (known as DarkCoderSc) … DarkComet allows a user to control the system with a graphical user interface. It has many features which allows a user to use it as administrative remote help tool; however, DarkComet has many features which can be used maliciously. DarkComet is commonly used to spy on the victims by taking screen captures, key-logging, or password stealing.
Pääasiallinen haitallinen koodi on suojattu antivirusohjelmalta Cryptorin avulla, payload WebMatcher3.exe . Cryptor voi tehdä seuraavat toimet:
päivittää
käynnistää etähallinnan
lähettää liikennettä verkkosijaintiin
käynnistää DDos hyökkäyksen
Tärkeimmät Command & Control palvelimet ovat Kanadassa
Olisiko ollut vaihtoehtoisia tai parempia tapoja toteuttaa hyökkäys? Millä keinoin hyökkäyksen olisi voinut estää, havaita tai rajoittaa sen vaikutusta?
Tyylikäs ja ammattimainen hyökkäys ja ei ollut täysin samanlainen kuin edellinen
Koska käytetty haittaohjelma DarkComet RAT oli varsin tunnettu, siihen olisi voinut varautua erityisellä suojauksella + pitämällä järjestelmät ja sovellukset päivitettynä
Varmuuskopioimalla järjestelmiä ja tietoja säännöllisesti on mahdollista palauttaa kaiken mahdollisen hyökkäyksen seurauksena
b) Rikun viitteet. Tiivistä tai poimi 3-5 avainoppia jostain (yhdestä) Rikun kalvoilla mainitusta lähteestä.
DNSTwist – mitä tapahtuu, jos käyttäjä kirjoittaa domainin väärin?
Etsii samankaltaisia domaineja, joita on mahdollista käyttää höykkäyksessä
Havaitsee typosquattereita, phising-hyökkäyksiä, petoksia ja tuotemerkin esiintymiset
Kohdennettu uhkatiedustelu
Typosquatting, also called URL hijacking, a sting site, or a fake URL, is a form of cybersquatting, and possibly brandjacking which relies on mistakes such as typos made by Internet users when inputting a website address into a web browser. Should a user accidentally enter an incorrect website address, they may be led to any URL (including an alternative website owned by a cybersquatter).
ajaa annetun domainin fuzzing algoritmiensa läpi ja luo listan potentiaalisista phising domaineista
fuzzy hashing – argument: –ssdeep
dnstwist hakee jokaisen luodun domainin kohdalla vastaavasta HTTP-palvelimesta ja vertaa sen fuzzy hashia alkuperäiseen, samankaltaisuus ilmaistaan prosentteina
suorittaa yksinkertainen testi kullekin sähköpostipalvelimelle (mainostettu DNS MX -tietueella) tarkistaakseen voidaanko palvelua käyttää vihamielisena sähköpostin honey potina
Lähetän ensin tyhjän lomakkeen, ja tarkastelen mitä tapahtuu. Eli se lähettää verify.account POST kyselyn. Koitan muokata sitä, eli valitsen “Edit and resend”.
Tässä jouduin pohtimaan millä tavalla sitä voisi muuttaa, jotta se toimisi haluamallani tavalla. Tähän auttoi vihje: “Have you tried renaming the secQuestion0 and secQuestion1 parameters?” Eli nimeän parametrit uudelleen.
Ja painan uudelleen submit, ja nyt turvakysymykset on ohitettu!
Secure Passwords: 4 How long could it take to brute force your password?
Tämä oli varsin helppo tehtävä. Hyvä salasana on tarpeeksi pitkä, sisältää erilaisia kirjaimia ja numeroita mutta ei kuitenkaan koostuu vain yhdestä sanasta. Salasanalauseita on helppo muistaa ja niistä saa helposti tarpeeksi monimuotoisia.
A3 Sensitive data exposure
Insecure Login: 2 Let’s try
Kokeilin tätä ensin Firefoxin Developer Toolseilla, ja tunnukset löytyivät näin varsin helposti.
Sen jälkeen oli helppoa syöttää tunnukset sopiviin kenttiin.
A7 Cross Site Scripting (XSS): Cross site scripting
2 What is XSS?
Kuten tehtävässä käskettiin, avasin uuden tabin samalle WebGoat-sivulle, ja syötin URLiin javascript:alert(document.cookie);
Vertailin molempien sivujen sessionIDt, ja ne olivat samat.
7 Try It! Reflected XSS
Vihje: Quantity inputs are probably processed as integer values. Not the best option for inputting text right? sulki heti pois suurin osa kentistä.
Myös seuraavista vihjeistä oli apua, What information send to the application gets reflected back after being submitted? ja Just try purchasing something. You want your script to be included in the purchase-confirmation.
Testaan mitä tietoja lomake antaa kun painaa purchase:
Tästä nähdään, että sopiva kenttä XSS:lle on luottokorttinumeron kenttä. Samalla saadaan tietoa, että halutaan vastaukseksi saada jotain JavaScript koodia kyseiseen kenttään. Tehtävänannossa ehdotetaan alert() tai console.log() metodeja.
Tehtävä onnistui, mutta en tiedä oliko tähän tarkoitus syöttää jotain monimutkaisempaa koodia… Myös console.log() antaa samanlaisen vastauksen.
10 Identify potential for DOM-Based XSS
Tutkin sivun JavaScript koodia ja löydän lupaavan GoatRouter.js tiedoston.
Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains
Tutkielma esittää uuden tunkeutumisen tappoketjun mallin, jonka antaa uusia näkemyksiä tunkeutumisen analysointiin sekä puolustaviin toimenpiteisiin.
Uusi uhka-tyyppi: Advanced Persistent Threat (APT)
aikomus on vaarantaa taloudellisia tai sotilallisia tietoja (kohteena esim. teollisuus ja hallitukset (US))
kohdennetut, manuaalisesti toteutetut tunkeutumiset (esim. phising sähköpostit)
edistyneitä, räätälöityjä haittaohjelmia ja nollapäivä-hyökkäyksiä
Älykkyyslähtöinen tietokoneverkon puolustaminen on jatkuva riskinhallintastrategia, joka kohdistuu riskin uhkatekijöihin ja käsittää hyökkäjien analysointiin.
malli näyttää, että hyökkääjillä ei ole välttämättä luontainen etu puolustajiin nähden
mallin tärkein älytekijä on indikaattori -> mikä tahansa tieto, joka kuvaa objektiivisesti tunkeutumista
Atomiset indikaattorit ei voida jakaa pienempiin osiin ja säilyttää tunkeutumisen yhteydessä, esim. IP-osoitteet ja sähköpostiosoitteet
Lasketut indikaattorit ovat johdettu tapaukseen liittyvistä tiedoista, esim. hash-arvot ja säännöllisest lausekkeet
Käyttämisindikaattorit ovat yhdistettyjä atomisia ja laskettuja indikaattoreita
analyytikot paljastavat indikaattoreita analyysin tai yhteistyön avulla, kypsentää niitä vertailemalla niitä työkaluissaan ja hyödyntää niitä samantyypisen toiminnan tutkimiseen
Tappoketju on systemaattinen prosessi, jonka avulla hyökkääjä voidaan kohdistaa ja sitoutua
Tiedustelu – tutkimus, kohteiden tunnistaminen ja valinta
Aseistaminen – hyötykuorman toimittaminen yhdistämällä etäkäyttöisen troijalaisen ja hyväksykäytön, esim. PDF tai Office-asiakirjat
Toimitus – aseen siirtäminen kohde-ympäristöön, esim. sähköpostin liitteenä, verkkosivustoilla tai USB-laitteiden avulla.
Hyväksikäyttö – hyväksikäyttö laukaisee tunkeilijan koodin kohteessa, kohdistuu esim. sovelluksen tai käyttöjärjestelmän haavoittuvuuteen, käyttäjään tai käyttöjärjestelmän automaattisesti suoritettavaan koodiin.
Asennus – etäkäyttöisen troijalaisen tai takaoven asentamisen avulla tunkeilija pystyy jäämään kohde-ympäristöön
Komento ja hallinta (C2) – tyypillisesti vaarantuneet isännät on lähetettävä signaali ohjainpalvelimeen luodaakseen C2-kanavan. APT-haittaohjelma varsinkin vaatii manuaalista toimintaa. Kun C2-kanava on muodostettu, tunkeilijalla on täysi pääsy kohdeympäristöön
Tavoitteisiin liittyvät toimet – tunkeilija voi vasta tässä vaiheessa ryhtyä toimiin alkuperäisten tavoitteidensa saavuttamiseksi. Tavoite voi olla tietojen suodattaminen (kerääminen, salaaminen tai poiminen), tietojen eheyden tai saatavuuden rikkominen, tai kohteen käyttäminen muiden järjestelminen varaantamiseksi.
Älykkyyslähtöinen tietokoneverkon puolustaminen tarkoittaa, että turvallisuuspäätökset ja mittaukset perustuvat tarkkaan vastustajan ymmärrykseen.
täydellisyys vastaa sinnikyyttä, kokonaisvaltainen puolustus tappoketjun eri vaiheissa
sinnikyyden mittaaminen: puolustuksen suorituksen ja tehokkuuden jatkuva mittaaminen, puolustaja voi oppia jotain vastustajasta jokaisesta tunkeutumisyrityksestä ja löytää sen avulla korjattavia aukkoja
Tavanomainen tilanteiden reaktio prosess aloitetaan vasta hyväksikäyttövaiheen jälkeen ja tämä malli korostaa jokaisen vaiheen erityinen analysointi, jolloin hyökkäystä on mahdollista pysäyttää heti alussa. Puolustaja voivat ylläpitää taktisen edun ottamalla käyttöön vastatoimia nopeammin kuin vastustajat.
Analysoimalla useita tunkeutumisen tappoketjuja pidemmältä ajalta on mahdollista tunnistaa yhtäläisyyksiä ja päällekkäisyyksiä, tämän avulla halutaan tunnistaa tunkeilijoiden kuvioita ja käyttäytymistä jotta olisi mahdollista ennakoida tunkeilijoiden toimia.
Tärkeä osa analysoinnissa on ymmärtää tunkeilijoiden tavoitteet ja aikomukset.
Tutkielma esittää myös tapaustutkimuksen, jossa on tarkkailtu kolme tunkeutumisyritystä.
Tunkeutumisyritykset toteutettiin tavanomaisella APT taktiikalla, eli lähettämällä kohdennetut haitalliset sähköpostit jotka sisälsivät aseistetun liitteen joka asentaa takaoven joka aloittaa yhteyden C2 palvelimeen. Hyökkäys käytti hyväkseen nollapäivä-haavoittuuvuuden.
Verkon puolustajat onnistuivat havaitsemaan ja lieventämään tunkeutumisen analysoimalla tappoketjut sekä vankan indikaattorin avulla.
tarkistaa jos kohde on haavoittuvainen exploitille
msf>check
sessions
listaa käytettävissä olevat istunnot
msf>sessions [session number]
Lähde: Jaswal 2020: Mastering Metasploit – 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit
Meterpreter komentoja:
Meterpreter komentoja
Käyttö
Esimerkki
sysinfo
listaa kohteen järjestelmätiedot
meterpreter>sysinfo
ifconfig
listaa kohteen verkkoliitännät
meterpreter>ifconfig
arp
listaa kohteen naapureiden IP:t ja MACit
meterpreter>arp
background
lähettää aktiivisen istunnon taustalle
meterpreter>background
shell
avaa komentorivin kohteessa
meterpreter>shell
getuid
kertoo nykyisen käyttäjän tiedot
meterpreter>getuid
getsystem
laajentaa oikeuksia ja antaa system accessia
meterpreter>getsystem
getpid
kertoo meterpreter accessin prosessi id:n
meterpreter>getpid
ps
listaa kaikki kohteen prosessit
meterpreter>ps
Lähde: Jaswal 2020: Mastering Metasploit – 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit
Miksi Metasploit?
vapaa lähdekoodi, kehitetään aktiivisesti
helppokäyttöinen
mahdollistaa massiivisen verkon tunkeutumis testaamista, jokaista kohdetta ei tarvitse yksitellen testata, vaan ryhmän järjestelmiä voi testata kerralla
hyötykuorman vaihtaminen on helppoa
puhdas poistuminen ja paljon hyväksikäytön jälkeisiä työkaluja
Tietokanta
tulosten automaattinen tallennus tietokantaan
tietopohja: kerää testaukset isännät, palvelut ja haavoittuvuudet
tietokantojen käyttö nopeuttaa hakua ja parantaa vastausaikaa
komentoja:
Komento
Käyttö
analyze
analysoi kohte ip:n tai avaruuden tietokanta tiedot
db_connect
käytetään kun ollaan yhteydessä muihin tietokantoihin kuin defaultiin
db_export
vie kokonaisen datasetin tietokannasta raporttin tai inputtina toiseen työkaluun
db_nmap
tekee nmap skannauksen kohteelle ja tallentaa tulokset Metasploit tietokantaan
db_status
tarkistaa tietokannan yhteyden
db_disconnect
katkaisee yhteyden tietylle tietokannalle
db_import
tuo tuloksia muilta työkaluilta kuten Nessus, Nmap ym.
db_rebuild_cache
luo uudelleen cachen, mikäli edellinen on vanhentunut tai korruptoitu
db_remove
poistaa tallennettu data merkintä
db_save
tallentaa nykyinen data merkintä defaultina
Lähde: Jaswal 2020: Mastering Metasploit – 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit
a) Listaa työkaluja ja tekniikoita, jotka sopivat kuhunkin kybertappoketjun vaiheeseen (Hutchins et al / Lockheed Martin Cyber Kill Chain). Listaa ainakin yksi työkalu tai tekniikka kuhunkin vaiheeseen. Kokeile 1-3 näistä työkaluista.
Reconnaissance
nmap – porttiskannaus
netcat – banner grabbing
verkkosivujen tarkastelu ja hakukoneiden hyödyntäminen ja sosiaalinen media
Weaponization
vulnerability scanners – wireshark, nexpose, metasploit pro
Delivery
sähköpostin liite, usb
Exploitation
haitallinen tiedosto, joka sisältää troijalaisen tai takaoven
metasploit
Installation
käyttäjä avaa tiedoston ja asentaa haittaohjelman
Command and Control C2
Actions on objectives
b) Metasploitable. Asenna Metasploitable 2. Murtaudu sille useilla tavoilla.
The Metasploitable virtual machine is an intentionally vulnerable version of Ubuntu Linux designed for testing security tools and demonstrating common vulnerabilities. …b By default, Metasploitable’s network interfaces are bound to the NAT and Host-only network adapters, and the image should never be exposed to a hostile network.
Skannaan nmapilla avoimet portit ja palveluiden versiot db_nmap -sV [ip-osoite] -oA 3top100sv
Tutkin tarkemmin vsftpd:n search vsftpd + info 0
Otan moduulin käyttöön use 0 ja tutkin vaihtoehtoja show payloads + show options
Asetan kohteen RHOSTSiin set RHOSTS [ip-osoite] (+ show options)
Käynnistän exploitin exploit -> “found shell…command shell session 1 opened” -> eli onnistunut. Haettu koneen salasanatiivisteet cat /etc/shadow
1233456
Seuraavaksi kokeilen tunkeutua koneeseen toisella tavalla
Luon ensin uuden workspacen workspace -a tunk2 ja vaihdan siihen workspace tunk2
Tutkin telnetin mahdollisia moduuleja search telnet
Tutkin tarkemmin muutaman moduulin, jonka rank on “excellent” info 17
Otan moduulin 17 käyttöön use 17 ja tarkastan tarkemmin vaihtoehdot ja vaatimukset
Asetan kohteen ip-osoitteen RHOSTS:iin set RHOSTS [ip-osoite]
Käynnistän exploitin exploit , joka kuitenkin epäonnistuu… koitan asettaa telnetin portin 23 set RPORT 23 , mutta ei edisty, ongelma näyttäisi olevan “ateCommand_flag variable”, jonka ehkä pitäisi asettaa, mutta loogisin komento set ateCommand_flag 1 ei tuota tulosta
23454
c) Asenna jokin kone VulnHubista ja tunkeudu siihen.
Valitsin VulnHubista aika satunnaisesti koneen PWNLAB: INIT https://www.vulnhub.com/entry/pwnlab-init,158/ , joka kuvauksen mukaan sopii aloittelijalle ja jossa lisäksi näkyy olevan jonkinlainen walktrough, jos jää jumiin.
Tavoite: Päästä rootiksi ja lukea flag /root/flag.txt
Ensimmäinen haaste oli löytää koneen IP-osoite, koneessa on DHCP aktivoituna ja se saa automaattisesti IP-osoitteen. Koneessa oli automaattisesti bridged adapater aktivoituna, mutta vaihdoin sen host-only networkiksi, toivottavasti ei riko mitään.
Kokeilen ensin netdiscover netdiscover -r [ip range]
Vaikuttaa lupaavalta
Kokeilen huvikseni myös nmapin pingsweepia, mutta se löytää ainoastaan itseään. nmap -sP [ip range]
3. Seuraavaksi tutkin avoimia portteja nmap -Pn -A [ip-osoite] (-Pn – no ping, -A – aggressive)
HackTheBoxin harjoitusten aloittaminen vaatii, että ensin onnistuu selvittämään kutsu-koodia.
Päätän tarkistaa mitä sivun taustalla tapahtuu, eli avaan selaimen (Google Chrome) Developer toolsit. Tästä heti paljastuu seuraavat askeleet.
Tässä kohtaa jouduin Googlaamaan tuntemattoman sanan obfuscated, jolloin löysin myös työkaluja, joiden avulla koodia pystyy kaunistaa.
Tästä löytyy kiinnostavat kohdat, url, joka ei johda mihinkään (koska POST) sekä funktio makeInviteCode(). Kun funktion syöttää consoleen, avautuu seuraava askel.
Tässä kohtaa jumituin, kun en keksinyt mistä löydän encryption typen. Tauon jälkeen pääsen kuitenkin eteenpäin (liian lähellä, niin kuin usein on).
Eli, voidaan päätellä, että salaustyyppi on ROT13. Tästä en ole aikaisemmin kuullut, eli sitä tutkin seuraavaksi.
ROT13 (“rotate by 13 places“, sometimes hyphenated ROT-13) is a simple letter substitution cipher that replaces a letter with the 13th letter after it in the alphabet. ROT13 is a special case of the Caesar cipher which was developed in ancient Rome.
Kun koodia dekoodataan (https://rot13.com/) saadaan seuraava tulos: “In order to generate the invite code, make a POST request to /api/invite/generate”
Tämä teen curlilla, ja onnistuin saamaan koodin!
Hmm, eipä tainnut toimia…Vaikuttaa siltä, että on ollut useampi välilehti, jotka mennyt sekaisin
Nyt kun tiedän mitä tehdä, voin helposti kokeilla uudelleen…Paitsi, että ei ollutkaan niin helppoa, kun ilmeisesti POST requestin avulla saatu koodi on myös koodattu. Kokeilen ensimmäistä dekoodaria, mitä löytyy (https://www.base64decode.org/), jonka avulla saan vihdoin toimivan koodin!
Success!!
d) Asenna Kali Linux virtuaalikoneeseen. Kokeile jotain Kalin mukana tulevaa työkalua paikalliseen localhost-osoitteeseen.
Teen tässä vaiheessa tehtävät eri järjestyksessä, sillä haluan asentaa WebGoatin Kali Linuxille, joten asennan ensin Kali Linuxin VirtualBoxiin.
Kokeilen asentaa valitsemalla GNOMEn graafiseksi käyttöliittymäksi XFCE:n sijaan, ja tällöin asennus onnistuu.
Asennuksen yhteydessä on automaattisesti havaittu, että asennus tehdään virtuaalikoneelle, joten GuestAdditions on lisätty asennukseen, eli niitä ei tarvitse erikseen asentaa.
Ensimmäiseksi teen päivitykset sekä vaihdan root-käyttäjän salasanaa. En kuitenkaan käytä root-käyttäjää, mutta haluan muuttaa pois default-salasanan.
Päätän kokeilla nmap -työkalua, sillä se on ennestään jokseenkin tuttu.
Nmap (“Network Mapper”) is a free and open source (license) utility for network discovery and security auditing. … Nmap uses raw IP packets in novel ways to determine what hosts are available on the network, what services (application name and version) those hosts are offering, what operating systems (and OS versions) they are running, what type of packet filters/firewalls are in use, and dozens of other characteristics.
Yksinkertaisin skannaus ($ nmap localhost) ei tässä tapauksessa anna kovin paljon mielenkiintoista tietoa, sillä kaikki portit ovat tällä hetkellä suljettuna.
Päätän tässä vaiheessa siirtyä hetkeksi eteenpäin, eli tässä välissä asennan WebGoat, palaan sen jälkeen testaamaan nmapia enemmän.
EDIT 6.4. Kysyin tunnilla miten konetta voisi parhaiten turvata. Se on tietenkin aina tavallaan mielipidekysymys, ja siihen vaikuttaa paljon erilaisia seikkoja. Päädyin kuitenkin seuraamaan Teron tapaa, eli lisään virtuaalikoneelleni kaksi verkkokorttia joista yksi on NAT ja toinen host-only. Näiden välillä vuorottelen sitten tarpeen mukaan. Toki myös ufw on koneessa päällä ja sallin ainoastaan sen minkä tarvitsen.
b) Asenna WebGoat ja kokeile, että pääset kirjautumaan sisään.
WebGoat on minusta kiinnostava, sillä olen opiskeluiden alkuvaiheessa jo kokeillut sitä Tietoturvan perusteet-kurssilla, ja silloin tehtävät tuntuivat todella haastavilta. Jännittävää on nyt nähdä miten on kehittynyt.
Asennan ensin päivitykset sekä java ja ufw. Sen jälkeen lataan ja ajan WebGoat 8 Java JAR paketin.
Avaan ja kirjaudun WebGoatiin. Ennen kuin aloitan WebGoatin käytön, varmistan, että virtuaalikoneeni ei ole verkossa.
c) Ratkaise WebGoatista tehtävät “HTTP Basics”, “Developer tools”, “CIA Triad” ja “A1 Injection (intro)”. Katso vinkit alta.
HTTP Basics – tässä tehtävässä tutkittiin HTTP-liikennettä, pääosin POST ja GET pyyntöjä. Tämä ei ollut kovin monimutkainen, sen jälkeen kun Developer Toolseja oli tullut jo aikaisemmin tutkittua.
Developer Tools – Tehtävä käy läpi developer toolsit Chromessa. Normaalisti käytän Chromea, mutta tällä koneella käytän Firefoxia, mutta tuntuu ihan hyvältä tutkia molempia. Ennen tätä kurssia olin käyttänyt developer toolseja ainoastaan html-projektissa pääosin debuggaamiseen, joten en ole vielä kovin nopea niiden käytössä, vaatii vielä vähän harjoittelua.
CIA Triad – confidentiality, integrity, availability. Tässä tehtävässä käydään läpi nämä kolme käsitettä ja lopuksi niistä quiz.
A1 Injection Intro – Tässä tehtävässä tutustutaan SQL injektioon. Tämä tehtävä oli haastavampi kuin edelliset, tai ainakin vei enemmän aikaa. Tämä johtui enimmäkseen siitä, että SQL taitoni olivat ilmeisesti ruostuneet, joten tarvitsin siihen pienen kertauksen. Ainakin syntaxi oli aluksi hieman hukassa. Injektiotehtävät olivat aika vaikeita ja jouduin tarkistamaan vihjeet sekä miettimään ja kokeilemaan ennen kuin sain tuloksia.
EDIT 6.4. Lisäsin kaikista tehtävistä kuvakaappaukset sekä tarvittaessa tarkemmat selitykset ratkaisusta.
Tehtävä 2 What is SQL?
Tehtävä 3 DML
Tehtävä 4 DDL
Tehtävä 5 DCL
Tehtävä 9 String SQL Injection
Lause 1 = 1 on aina tosi, eli tämä antaa seuraavan kyselyn:
“SELECT * FROM user_data WHERE first_name = ‘John’ AND last_name = ‘ ‘ or ‘1’ = ‘1’ “;
Tehtävä 10 Numeric SQL Injection
Aivan kuten edellisessä tehtävässä, tässä käytän lausetta 1 = 1, joka on aina tosi. Nollan voisi periaatteessa korvata ihan millä tahansa numerolla, sillä ei ole merkitystä. Hipsuja tässä ei vissin tarvinnut käyttää, sillä kenttä ei pyydä stringiä.
Tehtävässä avusti vihjeet, joiden avulla pystyi selvittämään mihin kenttään injektiota voi syöttää.
Tehtävä 11 Compromising confidentiality with String SQL injection
Tässäkin tehtävässä hyödynnän OR ‘1’ = ‘1, joka on aina tosi. Tässä tehtävässä vaikein oli täyttää employee name kenttää, sillä en halunnut tietenkään rajata sitä mitenkään. Käyttämäni metodi, eli syötän kentän vain hipsun ‘ , kenttä jää tavallaan tyhjäksi.
Seuraavat tehtävät en ollut ratkonnut ennen tuntia, mutta koitan nyt uudelleen tunneilla saatujen vihjeiden avulla.
En saanut viimeisiä tehtäviä tehtyä onnistuneesti, näissä oli molemmissa query chaining, eli tämä näköjään vaatii minulta hieman syvempää tutkiskelua.
Tehtävä 12 Compromising Integrity with Query chaining
Tämä tehtävä kesti kauan ratkoa, keksin aika nopeasti lauseen millä sen sai tehtyä, mutta nuo merkit ovat todella vaikeita. Yritin todella pitkään jotain tämä tyyppistä ” 3SL99′; UPDATE employees SET salary=90000 WHERE last_name=’Smith’; ” ennen kuin keksin poistaa viimeiset merkit ‘;.
Tehtävä 13 Compromising Availability
Tämäkin oli vaikea, ja sain sen toimimaan ainoastaan kommenttimerkeillä — , joista oli puhetta tunnilla. En kuitenkaan oikein ymmärrä miten kommenttimerkit ovat tässä olennaisia…
Omassa moduulissani tavoitteena on asentaa Rasberry Pi laitteelle työkaluja, jolla voi onnistuneesti skannata ympäristössä olevia Bluetooth laitteella. Koska kyseessä on Rasberry Pi, haluan luonnollisesti pystyä hallitsemaan sitä etänä, ilman, että tarvitsee kytkeä näyttöä ym laitteita. Haluan toteuttaa tämän toimenpiteen Saltilla, jotta voin helposti hallita laitetta etänä mutta myös, jotta voin kätevästi toistaa toimenpiteet useammalla laitteella kerralla. Tämä sitä varten, että haluaisin rakentaa muutamalla tai useammalla raspberry pi-laitteilla ympäristön, jossa voisi seurata bluetooth laitteiden liikkeitä.
Lataan Rasperry Pi imagerin, jonka avulla asennan Rasbian Lite SD-kortille.
Käynnistän raspberry pin ja aivan ensimmäiseksi vaihdan salasanaa, ja konfiguroin näppäimistön, aikavyöhykkeen sekä verkkoyhteyden. Lisäksi muutan hostnamen omaksi “raspi-skanneri” ja päivitän.
$ sudo raspi-config
$ sudo apt update
Seuraavaksi asennan ufw palomuurin ja asetan sillä säännöt, sallin ssh:n sekä saltin.
Asennan tällä kertaa työkalut ensin käsin raspille, sillä se on kuitenkin laite, jolla on tarkoitus tehdä skannaus.
Teen seuraavat toimenpiteet.
#1 install libbluetooth headers and libpcap2
$ sudo apt-get install python3-dev libbluetooth-dev libcap2-bin
#2 grant the python executable permission to access raw socket data
$ sudo setcap 'cap_net_raw,cap_net_admin+eip' "$(readlink -f "$(which python3)")"
#3 install beacontools with scanning support
$ pip3 install beacontools[scan]
Ensimmäisen asennuksen yhteydessä sain ilmoituksen, että libcap2-bin on jo asennettu.
Kolmas asennus epäonnistui virheellä pip3: command not found. Tutkittuani hieman asiaa totesin, että pip ei ole oletusasetus Rasbian Litessa ja muutenkin monet python paketit saattavat olla vanhentuneita. Lähde: https://www.raspberrypi.org/documentation/linux/software/python.md
Joten asennan siis erikseen pip.
#3 install pip on rasbian lite
$ sudo apt install python3-pip
#4 install beacontools with scanning support
$ pip3 install beacontools[scan]
Ensimmäisen asennuksen jälkeen /etc/-ssä ei löydy ollenkaan muuttuneita tiedostoja, joten tarkistan myös /usr/local/bin. Sielläkään ei löydy muuttuneita tiedostoja, joten asia vaikeutuu…
Ainoat muuttuneet tai lisätyt tiedostot joita löydän on sijainnissa home/pi/.local/bin tiedostot futurize ja pasteurize, jotka liittyvät beacontools kirjastoon.
En välttämättä tarvitse kuitenkaan konfiguraatiotiedostoja, joten siirryn eteenpäin.
Tämä virhe oli helppo korjata, ilmeisesti tuossa ohjeessa on unohdettu importata iBeaconAdvertisement. Korjauksen jälkeen saan ilmoituksen samasta virheestä kuin toinenkin skripti.
Päätän kuitenkin edetä iBeacon-skannerilla, sillä se näköjään löytää laitteet paremmin kuin eddystone.
Vaihdan skriptin nimen scanner_ibeaconista scanneriksi. Kopion skriptin /usr/local/bin/ hakemistoon jotta voin ajaa sen ohjelmana, ja päivitän oikeudet. Eli kaikilla käyttäjillä read+execute oikeudet ja omistajalla, eli rootilla myös write oikeudet.
Testaan myös, että skripti käynnistyy pelkällä “scanner” komennolla. Tämä ei ole tälle projektille välttämätöntä, sillä tarkoitus on kuitenkin käynnistää skanneria salt-tilan avulla, mutta se on kivempi ja selkeämpi testata, ja lisäksi /usr/local/bin on yhteinen hakemisto.
Vaihe 3. Salt
Ensimmäiseksi luon master-slave yhteyden. Käytän tässä samaa master-konetta minkä olen käyttänyt kurssin muissa harjoituksissa. Koska se on jo käynnissä, aloitan setupin raspista, josta tulee uusin minion.
Seuraavaksi siirryn luomaan Salt-tiloja. Päätän selkeyden vuoksi luoda useampi tila, jotta voin tehdä kätevämmin muutoksia skriptiin sekä skannata.
Aloitan setupista. Kerään käsin tehdyt asennusvaiheet:
#1 install libbluetooth headers and libpcap2
$ sudo apt-get install python3-dev libbluetooth-dev libcap2-bin
#2 grant the python executable permission to access raw socket data
$ sudo setcap 'cap_net_raw,cap_net_admin+eip' "$(readlink -f "$(which python3)")"
#3 install pip on rasbian lite
$ sudo apt install python3-pip
#4 install beacontools with scanning support
$ pip3 install beacontools[scan]
#5 install bluez
$ python3 -m pip install pybluez
Ensin lisään pkg.installed moduulilla apt installilla asennetut paketit. Libcap2-bin oli ilmeisesti jo ennestään asennettu, mutta listaan sen selkeyden vuoksi kuitenkin.
Seuraavaksi luon tilan scan-script. Create-argumentilla varmistan, että uusi tiedosto luodaan, mikäli sellaista ei ole ennestään ja replace-argumentilla varmistan, että olemassa oleva tiedosto korvataan päivitetyllä.
Lopuksi muokkaan scan-scan tilan. Require-argumentilla haluan varmistaa, että skripti on olemassa. Argumentti voisi sisältää myös listan setupin paketeista.
Skannaamisesta ei ole välttämätöntä tehdä tila, vaan skriptin saa käyntiin myös ad-hoc komennolla
$ sudo salt 'raspi-skanneri' cmd.run scanner
Vaihe 4. Testaaminen
Ajan tilat yksitellen ja tarkistan tulokset.
Scan-setup tila näyttää osittain hyvältä, mutta hieman huolestuttaa pip-moduuli joka nähtävästi on asentanut uutta, vaikka kaikki nämä osat olisi pitänyt olla jo asennettuna.
Scan-script tila ei olisi myöskään pitänyt aiheuttaa muutoksia, mutta näyttää kuitenkin siltä, että kyseessä oli vain jotain pieniä eroavaisuuksia rivien väleissä, joten hyvältä näyttää.
Scan-scan tila palauttaa virheen, ilmeisesti tuo require-argumentti oli tässä turhaa hifistelyä, eikä toimi odotetulla tavalla. Poistan siis sen osan ja ajan tilan uudelleen.
Kaikki näyttäisi toimivan.
Seuraavaksi asennan raspin uudelleen ja ajan tilat puhtaalta pöydältä.
Toistan vaiheessa 1 tehdyt peruskonfiguraatiot raspille ja teen salt-minion setupit sekä uusin master-slave yhteyden.
Seuraavaksi testaan tilat uudestaan.
$ sudo salt 'raspi-skanneri' state.apply scan-setup
$ sudo salt 'raspi-skanneri' state.apply scan-script
$ sudo salt 'raspi-skanneri' state.apply scan-scan
# tai
$ sudo salt 'raspi-skanneri' cmd.run scanner
Projekti on onnistunut!
Jatkokehityksenä olisi kiva kytkeä tilat yhteen, siten, että ovat riippuvaisia toisistaan. Eli esim. ajamalla pelkän scan-scan tilan saisi samalla käynnistettyä myös setup ja script tilat. Olen kuitenkin edelleen sitä mieltä, että nämä on hyvä pitää erillään, sillä esim. skriptiä haluaa varmaankin muokata, jolloin sen voisi kätevästi päivittää yksin.
Testi kuitenkin näyttää aikaisemmassa tehtävässä asennettua apachen muokattua etusivua…
Johtuu ilmeisesti ainakin siitä, että nginx ei ole käynnissä
‘
Käynnistäminen ei kuitenkaan myöskään toimi. Mahdollisesti johtuu siitä, että apache on jo käynnissä ja sotkee asiat.
Stoppaan apachen ja starttaan nginx:än.
En pääse kuitenkaan vieläkään nginx:än default sivulle. Nginx käyttää näköjään samaa index.html tiedostoa kuin apache, joten tämä on syy.
Tässä voisi esimerkiksi poistaa Apachen kokonaan (senhän saa helposti salt-tilan avulla uudelleen asennettuna jos haluaa). Poistan siis Apachen.
$ sudo apt purge apache2
Tämä ei kuitenkaan poista tuota index.html sivua. Poistamalla index.html tiedoston, saan esille nginx vakiosivun.
Seuraavaksi haluan lisätä oman sivun, joka toimii localhostin aloitussivuna. En halua kuitenkaan, että se on index.html sivu, sillä haluan, että jokainen käyttäjä voisi itse muokata haluamansa sivua. Tarkastelen nginxän tiedostoja.
Luon tiedoston example.html sijaintiin /etc/skel/, josta se latautuu kaikkien käyttäjien kotihakemistoon.
Lisään /etc/nginx/sites-available/ kansioon uuden tiedoston example.
Poistan symlinkin default-configuratioon ja lisään uuden test-käyttäjän, jotta saan /etc/skel -tiedostot ladattua.
Nyt nginx ei kuitenkaan löydä mitään aloitussivua… Tutkin hieman dokumentaatiota ja nginxän man sivuja, ja teen korjauksen /etc/nginx/sites-available/example-tiedostoon.
Nyt sivu näkyy halutulla tavalla.
Tällä konfiguraatiolla nginx etsii eloitussivun /etc/skel kansiosta, enkä keksi mitään tapaa millä saisi muutettua sitä hakemaan tiedostoa käyttäjän kotihakemistosta. Saan sen onnistumaan ainoastaan sillä, että vaihdan /etc/skel käyttäjän kotihakemiston polkuun, mikä ei onnistu eri käyttäjille.
Päätän kuitenkin edetä tällä konfiguraatiolla, sillä tärkeintä tässä on kuitenkin harjoitella saltia.
Vaihe 2. Salt
Luon uuden salt-tilan, johon kopion edellisessä vaiheessa luodut ja muokatut tiedostot.
Huomasin tässä kuitenkin, että kaksi tiedostoista ovat nimettu exampleiksi… joten nimeän toisen uudelleen ja korjaan nimen myös init.sls tiedostoon.
Kun yritin muokata init.sls tiedostoa tajusin, että eihän tuota symlinkkiä tarvitse kopioida salt-tilaan, eli tein ihan turhan vaiheen.
Nyt kun tunnen olevani salt-tilaan tyytyväinen, poistan nginxän ja käynnistän salt-tilan.
Aluksi tila tyssäsi typoon, joten korjasin pilkun pisteeksi. Sen jälkeen tyssäsi puuttuneisiin parent-directoreihin. Ongelma korjaantunee kun tilan ajan uudestaan, sillä käsittääkseni hakemistot luodaan nginx än asennuksen yhteydessä…
Olin kuitenkin väärässä…joten tutkin hakemistot tarkemmin.
Näköjään puuttuva hakemisto onkin /etc/nginx…
Täysi mysteeri miksi tuota hakemisto ei luoda paketin asennuksen yhteydessä, testaan myös minion2, ja sillä toimii ongelmitta.
Minion2:lla on kuitenkin vielä apache, joten localhost etsii sen sivun…
Teen vielä salt-tilaan hieman muutoksia, eli poistan apachen, jos se on asennettu sekä poistan /var/www/html/index.html-tiedoston, jos sellaista on. Lisäksi käynnistän nginx daemonin lopuksi uudelleen. Apachen poistamisen tilalle voisi käyttää service.dead funktiota, joka pysäyttää daemonin.
Hieman edistystä, mutta vielä pitäisi saada oma tiedosto nginx default tiedoston tilalle. Teen lisäyksen init.sls tiedostoon, jossa poistan default symlinkin.
Tämä toimii, mutta vaatii vielä, daemon käynnistetään uudelleen. Ilmeisesti reload: True komento ei tee tätä, vaan ainoastaan huolehtii siitä, että daemoni on jo käynnissä ja restartaa jos ei ole. Saltin dokumentaatiosta en löytänyt mitään muita vaihtoehtoja.
$ sudo systemctl restart nginx.service
b) Tee Nginx:n Saltilla jokin muukin asetus tai uusi ominaisuus.
One of the frequent uses of nginx is setting it up as a proxy server, which means a server that receives requests, passes them to the proxied servers, retrieves responses from them, and sends them to the clients.
Aivan ensimmäiseksi totean, että nginx ei jostain syystä toimi minion1:llä (joka on master-koneella). Arvelen, että tämä johtuu siitä, että poistin manuaalisesti nginx:än tiedostot ($ sudo rm -r /etc/nginx/) ennen salt-tilan ajoa… Tämä ei olisi näköjään kannattanut tehdä, sillä paketin asennus ei ilmeisesti tuo näitä tiedostoja takaisin. Minion2:lla, joka on eri koneella, nginx taas toimii täydellisesti.
Koska olin noin viikko sitten tehnyt tallentanut koneesta snapshotin virtualboxiin, päätän tässä vaiheessa palauttaa kone siihen.
Palautuksen jälkeen luon salt tilan uudelleen, ja ajan sen osissa.
Asennus onnistui ja tiedostot latautuivat onnistuneesti.
Seuraavaksi luon uudelleen tiedostot /etc/skel/example.html ja /etc/nginx/sites-available/example ja kopioin ne salt-tilan hakemistoon. Käyn vielä muokkaamaassa init.sls tiedostoa, niin, että saan ajettua kaikki komennot. Ja ajan tilan kokonaisuudessaan.
Hyvältä näyttää
Ongelmaksi jää edelleen tuo service.running, jolla en saa reloadattua nginxää.
Noniin, eli nyt voin sitten keskittyä tehtävään.
Muutoksena lisään server-blokin, joka lisää proxypalvelimen. Tässä tapauksessa sama palvelin toimii proxyna. Lisään siis edellisessä tehtävässä tehtyyn example tiedostoon (/etc/nginx/sites-available/example) uuden server-blokin.
Luon lisäksi hakemistoon /etc/skel uuden tiedoston nimeltä index.html, jonka proxy palvelin hakee.
Testaan näkymää
Kopion sekä uuden index.html tiedoston että muokatun example tiedoston salt-tilaani.
Teen tarvittavat muutokset init.sls tiedostoon, jotta orjaankin lisätään uudet tiedostot. Samalla lisään watch-komennon, jotta nginxää käynnistetään uudestaan jos example tiedosto muuttuu.
Seuraavaksi testaan, eli ajan nginx tilan molemmille minioneille.
$ sudo salt '*' state.apply nginx
Hyvältä näyttää
Minion2:lla konfiguraatio ei kuitenkaan toimi, vaan proxy sivu näkyy localhostina ja 404 Not Found proxyn sivuna.
Veikkaan, että syynä on index.html, joka on siis default konfiguraation aloitussivu. Eli vaihdan sen nimeksi proxy.html.
Muokkaan myös example tiedostoa.
Se ei kuitenkaan auttanut.
Muokkaan uudestaan konfiguraatiotiedostoa.
Nginxän restartin jälkeen toimii kuten haluan.
Lisään muutetut tiedostot taas salt-tilaan ja poistan index.html tiedoston.
Muokkaan init.sls tiedostoa.
En kuitenkaan saa sivuja toimimaan oikein minion2:lla. Tässä vaiheessa luovutan, sillä pitää ehtiä tehdä vielä seuraava tehtävä.
c) Asenna jokin työpöytä- tai komentoriviohjelma asetuksineen Saltilla.
Päätän asentaa Wiresharkia, sillä se on jokseenkin tuttu työkalu. Tutkin ensin minkälaisia asetuksia siihen voisi tehdä.
Wireshark is a network packet analyzer. A network packet analyzer presents captured packet data in as much detail as possible.
By installing Wireshark packages non-root users won’t gain rights automatically to capture packets. To allow non-root users to capture packets follow the procedure described in /usr/share/doc/wireshark-common/README.Debian
Haluan saada tämän toimimaan myös muilla koneilla, ja aloitan sen vaiheittain. Ensimmäisen vaiheen uskon löytäneeni init.lua tiedostossa hakemistossa /etc/wireshark.
Vaihe 2. Salt
Luon uutta tilaa varten oman hakemiston /srv/salt/wireshark sekä init.sls tiedoston.
Ajaessani tilan, tuo file.managed luonnollisesti epäonnistuu, sillä tuo hakemisto luodaan vasta paketin asennuksen yhteydessä. Joka tapauksessa huomaan, että ilman muokkattua init.lua tiedostoa, wireshark toimii jo tavallisena käyttäjänä. Paketin asennuksessa kone osaa ilmeisesti valita default vastaukset kun asennus tehdään tällä tavalla automatisoituna. Eli käytännössä koko ideani asetuksista oli täysin hyödytön.
Tämän jälkeen yritin vielä muutaman tunnin selailla wiresharkin dokumentaatiota, ja tiedostoja sekä testata erilaisia toimintoja, mutta en löytänyt millään mitään muokattavaa asetusta. Kokeilin esim lisätä omia profileja, mutta en löytänyt tiedostoa, johon nämä tallentuivat.
Monen tunnin tutkimusten jälkeen päätin luovuttaa tässä vaiheessa. Sain kuitenkin wiresharkin asennettuna ja toimimaan nonroot käyttäjänä, minkä alun perin halusinkin, vaikka se olikin aivan liian helppoa.
a) Hei komento! Tee järjestelmään uusi “hei maailma” -komento ja asenna se orjille Saltilla. Liitä raporttiisi ‘ls -l /usr/local/bin/’ tulosteesta ainakin se rivi, jolla näkyy uuden komentotiedostosi oikeudet. Vinkkejä: tee shell script, joka tulostaa “hei maailma”. Kokeile ensin käsin, sitten automatisoi. Luonteva paikka paketinhalllinnan ulkopuolelta asennetuille ohjelmille on /usr/local/bin/. Katso myös ‘salt-call –local sys.state_doc file.managed’. Muista (aina ja kaikessa mitä teet tietokoneella) testata lopputulos. Hyvä testi on mahdollisimman lähellä sitä, mitä käyttäjä tekisi.
Ensimmäiseksi luon uuden komentotiedoston nimeltä hello, jonka kopioin sijaintiin /usr/local/bin/. Varmistan, että tiedoston oikeudet ovat sopivat, jotta kaikki näkee ja pystyy ajamaan tiedoston mutta ainoastaan omistaja (root) pystyy tekemään muutoksia.
Testaan, että skripti toimii pelkällä hello-komennolla.
Koska minulla on jo aikaisemmasta tehtävästä hello-tila, tein nyt uuden salt tilan nimellä hellosh, joka sisältää hei maailma shell scriptin. Kopion myös tiedoston /usr/local/bin/hello hellosh-tilaan.
Ajan tilan minioneille ja testaan, että komento toimii minion2:lle (eri kone). Tarkistan myös uuden tiedoston oikeudet.
sudo salt '*' state.apply hellosh
Onnistui ilman ongelmia!
b) whatsup.sh. Tee järjestelmään uusi komento, joka kertoo ajankohtaisia tietoja; asenna se orjille. Vinkkejä: Voit näyttää valintasi mukaan esimerkiksi päivämäärää, säätä, tietoja koneesta, verkon tilanteesta…
Aloitan taas luomalla tiedoston komennolle. Kokeilen luonnollisesti komennot, jotta tiedän mitä haluan niillä tehdä/näyttää Kun tiedosto on valmis, kopion sen /usr/local/bin/ hakemistoon ja varmistan oikeudet (-rwxr-xr-x/755). Lopuksi testaan, että skripti toimii halutulla tavalla.
whatsup
#!/bin/bash
echo date and time
date
echo machine info
hostnamectl
echo network info
netstat -at
Ajan tilan minioneille ja testaan, että komento toimii.
sudo salt '*' state.apply whatsup
Tilan ajaminen onnistuiTestattu toimivaksi
c) hello.py. Tee järjestelmään uusi komento Pythonilla ja asenna se orjille. Vinkkejä: Hei maailma riittää, mutta propellihatut saavat toki koodaillakin. Shebang on “#!/usr/bin/python3”. Helpoin Python-komento on: print(“Hei Tero!”)
Taas kerran aloitan luomalla itse skripti, tällä kertaa python-skripti. Kopion sen /usr/local/bin/ hakemistoon ja päivitän oikeudet. Testaan, että toimii.
#!/usr/bin/python3
name = input('What is your name?\n')
print('Hello' + name)
Ajan tilan minioneille ja testaan skriptin taas minion2:lla.
$ sudo salt '*' state.apply pyscript
Onnistunut harjoitus!
d) Laiskaa skriptailua. Tee kansio, josta jokainen skripti kopioituu orjille. Vinkki: ‘salt-call –local sys.state_doc file.recurse’. Kun tämä on valmis, on todella helppoa laittaa orjille mikä tahansa yhden tiedoston shell script, Python-ohjelma, Perl-ohjelma, Go-binääri tai muu yhden binäärin ohjelma.
Ensimmäiseksi tutustun file.recursen dokumentaatioon, jotta tiedän mistä on kyse.
Recurse through a subdirectory on the master and copy said subdirectoryover to the specified path.
Recursive directory management allows for a directory on the saltmaster to be recursively copied down to the minion. This is a great tool fordeploying large code and configuration systems.
file.recurse
Luettuani dokumentaation uskon ymmärtäväni miten recurse toimii. Tässä tehtävässä kuitenkin haasteita aiheuttaa tuo kansiollinen skriptejä. Käsittääkseni shell scriptin ajaminen ilman ./ lisäystä vaatii, että se on koneen pathissa. Tarkistan master koneeni pathin.
Käsittääkseni kansio, jossa kommennot sijaitsevat pitää löytyä täältä. Eli yksi vaihtoehto on lisätä haluamani kansion pathiin. Ongelma on kuitenkin, että minion2:n path on eri, joten se ei tule löytämään skriptit. Enkä tiedä miten saltilla saisi lisättyä uuden pathin. Päätän kuitenkin nyt kokeilemaan jotain, eli kokeilen nyt ensin luoda kansiollinen skriptejä, ja kopioida kansion /usr/local/bin/ hakemistoon.
Luon paikallisen kansion (mkdir scripts) ja siihen sekalaisia skriptejä.
/scripts/showfiles
#!/bin/bash
ls -l
/scripts/weather
#!/bin/bash
# show weather in location /etc/timezonels
# source code https://github.com/chubin/wttr.in
curl wttr.in
/scripts/calculator
#!/usr/bin/python3
def calculate():
operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')
number_1 = int(input('Please enter the first number: '))
number_2 = int(input('Please enter the second number: '))
if operation == '+':
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
elif operation == '-':
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
elif operation == '*':
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
elif operation == '/':
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)
else:
print('You have not typed a valid operator, please run the program again.')
# Add again() function to calculate() function again()
def again():
calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')
if calc_again.upper() == 'Y': calculate() elif calc_again.upper() == 'N': print('See you later.') else: again()
calculate()
# from https://www.digitalocean.com/community/tutorials/how-to-make-a-calculator-program-in-python-3
Kopion kansion sisältöineen (-r) /usr/local/bin/ hakemistoon. Päivitän ja tarkistan oikeudet (kaikille lisätään x).
Lopuksi testaan skriptit. Kuten arvasin tehtävän alussa, en onnistunut ajaamaan skriptejä ilman ./.
Ratkaisuksi tähän löydän kaksi vaihtoehtoa, joko lisätä kansion pathiin tai luoda skripteille symboliset linkit. Kumpikaan vaihtoehto ei kuulosta kovin hyvältä tai tehokkaalta. Symboliset linkit aiheuttaa lisää rivejä /usr/local/bin hakemistoon ja path ei ole pysyvä ratkaisu, sillä se nollaantuu rebootissa.
Jotain tapaa pitää kuitenkin valita, joten menen symlinkeillä. Testaan ne ensin käsin.
Hyvin toimii, joten teen saman vielä muille skripteille. Törmäsin yhteen pieneen ongelmaan.
Eli /usr/local/bin hakemistossa oli jo ennestään showfiles tiedosto, jonka olin luonut tunnilla. Niinpä päätän nimetä uudelleen scripts kansiossa olevan showfiles skriptin content-nimiseksi.
Toimii
Seuraavaksi luon uuden lazyscript salt-tilan ja init.sls. Kopion skriptikansion kyseiseen tilaan.
Symlinkkien luonti näytti onnistuvan mutta tiedostojen oikeuksien muokkaaminen epäonnistui. Nähtävästi file.recursen kanssa tulee käyttää file_mode tai dir_mode. Korjaan vielä sen ennen lopullista testiä.
Hyvältä näyttää ohjelmat minion2:lla. Ainoa mikä ei toimi on weather, mutta testattuani sen masterille, totean, että kyseessä on ilmeisesti palvelun huolto.
Puh! Eipäs tuntunut oikein laiskalta tämän tehtävän tekoa. Monta tuntia tähän upposi. Olen kyllä melko varma, että tähän on parempi ratkaisu kuin symlinkit, mutta itse en muuta keksinyt.
e) Intel. Etsi kolme loppuprojektia joltain vanhalta kurssitoteutukselta. Kuvaile projektit tiiviisti ja linkitä alkuperäiseeen raporttin. Vinkkejä: Loppuprojekteja löydät etsimällä opiskelijoiden raportteja vanhoilta kursseilta ja selailemalla sivuja, joilta ne löytyivät. Raportteja löytyy vanhojen kurssitotetusten kommenteista. Ja tietysti kannattaa silmäillä listaa sieltä täältä, niin näet eri projektit kuin muut. Voi hakea myös Googlella ja DuckDuckGolla.
Riku on asentanut SCCM, eli System Center Configuration Manager, joka on Windowsin työkalu etähallintaan. Tämä käytetään tänä päivänä monessa työpaikassa. SCCM:llä hallinnoidaan toimialueen laitteita, hallinnoidaan vakioidun imagen asennus, kerätään erilaisia tietoja laitteista, sekä hallinnoidaan asennuksia ja päivityksiä.
Riku on projektia varten asentanut virtuaaliympäristön, joka koostuu yhdestä työasemasta ja kahdesta palvelimesta, joista toisella palvelimella pyörii SCCM. Riku kertoo raportissaan yksityiskohtaisesti miten SCCM on asennettu sekä minkälaisia konfiguratioita toimialueelle on tehty. Konfigurointia tarvittiin mm. Active Directorya (AD), palomuuria, SQL serveriä sekä toimialueen verkkoa ja DNS:ä varten. Lisäksi toimialueen palvelimille oli määriteltävä rooleja, eli SCCM-palvelimelle Riku määritteli WSUS ja IIS roolit sekä AD-palvelimelle DNS, DHCP ja AD roolit. Raportissa ei oikein selvinnyt miksi roolit jaettin tällä tavalla, mutta varmaankin selvisi Rikun käyttämässä ohjeessa.
Lopuksi Riku on kuvilla näyttänyt miltä SCCM näyttää, miten työasemalle voi asentaa SCCM-clientin sekä miten SCCM:llä voi asentaa työasemalle paketin tai ohjelman. Työasema vastaanottaa paketit Software Centeriin. Paketit voi olla pakotetusti tai vapaaehtoisesti asennettavia. Riku kertoo ja näyttää kuvilla lisäksi miten SCCM kerää tietoja SQL tietokantoihin.
Rikun raportista päätellen voisin todeta, että SCCM vaikuttaa monimutkaiselta sekä asentaa että käyttää. Salt vaikuttaa paljon loogisemmalta ja kivemmalta!
Juho on projektissaan luonut salt-tilan, joka asentaa Vagrantin avulla minioneille virtuaalikoneen, johon asennetetaan Apache, joka näyttää nettisivun.
Ensin Juho asensi master-koneelle käsin Vagrantin ja Virtualboxin. Tässä hänellä esiintyi ensin ongelmia, mutta sai virtualboxin käyntiin aktivoimalla virtualisointi. Juho asensi Saltstackin masterkoneelle bootstrap-menetelmällä, eli hakemalla ensin repo ja gpg-avain ja sen jälkeen asentamalla. Ensimmäiseksi tilaksi Juho loi tilan joka asentaa Vagrantin ja Virtualboxin, kopioi Vagrantfile (varmaankin Vagrantin jokin konfigurointitiedosto) sekä määrittää ja käynnistää uuden virtuaalikoneen (VM). Tilalla hän ei saanut kuitenkaan Vagrantia käyntiin, ja selvitti, että Vagrantfilen sekä sen parentkansion oikeudet ja omistajuus olivat rootilla. Ajettuaan korjatun tilan Juho pystyi onnistuneesti testaamaan yhteyden koneiden välillä ssh:lla.
Lopuksi Juho loi skriptin, jonka avulla hän asensi Apachen ja loi siihen testisivun apachen vakiosivun tilalle. Vagrantfileen hän myös lisäsi porttiohjaukset, jotta testisivu näkyisi myös master koneella. Nämä loput lisäykset näyttivät onnistuvan ongelmitta.
Juholla oli mukavan näköinen projekti, jolla saa nopeasti pystyyn apachen.
Antti on projektissaan luonut yhden salt-tilan jolla hän on pystyttänyt Mumble-palvelimen.
Antti on ensin asentanut palvelimen käsin ja testannut sen oletusasetuksia sekä lukenut dokumentaatiota. Antti sai palvelimen toimimaan paikallisesti, mutta ei internetissä. Sen selvittämiseksi hän luki Virtual Boxin dokumentaatiota, sekä testasi ensin NAT + port forwardingia ennen kuin päätyi käyttämään Bridged Adapteria. Lisäksi Antti avaa portin 64738, jota Murmur oletuksena käyttää. Kun Antti testasi ja totesi yhteyden toimivaksi, hän siirtyi Murmur asetuksiin, jotka sijaitsevat tiedostossa /etc/mumble-server.ini. Hän päättää haluavansa lisää kanavia, ja testaa sitä murmus superuserilla.
Kun käsin tehty asennus on todettu tomivaksi, ja asetustiedosto tutkittu, Antti siirtyy luomaan salt-tilan. Antti luo ensin minion-koneen vagrantilla ja testaa yhteyden toimivuuttaa hei maailma-tilalla. Murmuria varten Antti luo tilan, joka asentaa mumble-palvelimen ja joka päivittää tiedostot /etc/default/mumble-server sekä /etc/mumble-server.ini sekä lisäksi valvoo, että palvelin on käynnissä. Testattuaan Mumble-palvelinta Antti toteaa kuitenkin, että asetukset eivät päivity, ja arvelee, että asetukset ovat tallennettu tietokantaa. Hän testaa teorian lisäämällö /var/lib/mumble-server/mumble-server.sqlite salt tilaansa. Tämän jälkeen palvelin toimii halutulla tavalla.
Hienosti tehty projekti ja hyvin dokumentoitu. Ainoa, mikä jäi ehkä epäselväksi, oli mitä asioita noissa asetustiedostoissa oli muutettu, ja oliko niihin kaikkiin tehty muutoksia.
e) Lukua, ei luottamusta. Kokeile yhtä kohdassa d-Intel löytämääsi modulia koneella. Tämä on infraa koodina, joten luottamusta ei tarvita. Voit lukea koodista, mitä olet ajamassa.
Tutkituista projekteista päätän yrittää toistaa viimeisen, eli Antin projektin. Päädyin tähän, sillä Rikun SCCM vaikuttaa aivan liian monimutkaiselta ja työläältä (ja lisäksi Windows…). Juhon projekti olisi muuten varmaankin myös kiinnostava, mutta koska itse käytän kurssissa VirtualBoxia, epäilen, että se ei oikein tykkäisi, että virtuaalikoneelle asentaisi VirtualBoxia. Vaikuttaa ns. doomed to fail -ajatukselta.
Asennus onnistui ongelmitta ja seuraavaksi käynnistän palvelimen sekä teen alkukonfiguraatiot.
$ sudo dpkg-reconfigure mumble-server
Lisäksi tarkistan, että palvelin on käynnissä.
Minulla on jo ennestään virtuaalikoneellani käytössä Bridged Adapter verkkoa, joten avaan ainoastaan reiän palomuuriin.
En pystynyt testamaan yhteyttä ulkomaailmasta kuten Antti, sillä minulla käytettävissä ainoastaan yksi verkko.
Siirryn seuraavaksi tutkimaan asetuksia. /etc/mumble-server.ini
Kirjaudun superuserilla.
Minulla on vaikeuksia löytää kanava-asetukset, joita Antti on muokannut. Joudun tässä vaiheessa tutkimaan dokumentaatiota https://wiki.mumble.info/wiki/Main_Page. Sivulta https://wiki.mumble.info/wiki/Murmurguide löytyi jonkun verran hyödyllistä tietoa täysin uudelle käyttäjälle. Tältä sivulta löytyi myös ohjeet, miten pääsen kirjautumaan superUserina sekä lisäämään ja muokkaamaan kanavia.
Vaihe 2. Salt
Seuraavaksi siirryn salt tilan luomiseen. Minulla on jo ennestään toimiva master-slave ympäristö, joten en luo tässä vaiheessa uutta.
Asennus onnistui mutta tiedostojen muokkaus epäonnistui.
Saattaa olla, että tiedostoja voi luoda vasta kun palvelu on käynnissä, joten kokeilen ajaa tilan uudelleen. Se ei kuitenkaan auta, ja sama virhe tulee edelleen, eli näköjään ei löydä sourcefilejä… Tarkistan, että nämä ovat paikallaan ja tuplatarkistan pathit, enkä löydä mitään ongelmia…
Epäonnistuneiden tiedostojen oikeudet ovat kuitenkin rootilla, kun taas mumble-serverillä kaikilla on read-oikeudet. Testaan mikäli read-oikeuden lisääminen korjaa tilanteen.
Ja sehän korjasi sen!
Lopuksi testaan vielä mumblen minion2:lla.
En saa sitä kuitenkaan avattua, enkä löydä ohjelmaa koneella… Mietin käsin tehtyä asennusvaihetta, kun siinä asennetaan mumble-server ja sitten erikseen vielä mumble, siihen on varmaan jokin syy. Molempia paketteja ei ole kuitenkaan tällä salt-tilalla asennettu, joten muokkaan hieman init.sls -tiedostoa.
Ja sehän auttoi! Minion2:lla avautui Mumble Audio Wizard.
Vaikuttaisi toimivan, mutta en kuitenkaan pääse kirjautumaan, vaan saan vain virheviestin “connection refused”. Näyttää kuitenkin toimivan, veikkaan että tässä on nyt käyttäjässä vika, kun en yhtään osaa tätä mumblea käyttää.