Palvelinten hallinta Week 5

Tehtävänanto

  1.  Home Work XII – Read chapters 5-7 from course book (Jinja. High States and Salt Cloud) 
  2. Home Work XIII – Create the states listed in week47 mindmap, you can find the VKO47.zip from home work folder below.
  3. Optional Extra: Configure the apache reverse proxy to your “documentation wordpress” apache as instructed in W47homework.pdf document.

Vastaukset

Useimpien mindmapin tilatiedostojen sisältö on jo edellisen viikon dokumentoinnista löytyvässä endstate.sls tiedostossa, joten en toista niitä tässä, puhumattakaan, että pilkoisin niitä turhan päiten osiin. Myös ssh-autentikaation toteutus on dokumentoitu edellisen viikon dokumentoinnissa manage_ssh.sls-tiedostossa. Yksi poikkeus on pillar-muuttuja pohjainen tilatiedosto apachen/httpd:n asennukselle, mikä on tarpeeksi erilainen kirjan esimerkistä ollakseen mielenkiintoinen. Tämänkin tehtävänannon sanoitus olisi voinut olla tarkempi, mutta päätin toteuttaa kirjan luvun 5 ssh-avain esimerkkiä muistuttavan toteutuksen.

Ensinnäkin Apachen asennus- ja konfigurointi tiedosto generalApache.sls näyttää tältä:

install_apache:
  pkg.installed:
    - name: {{ pillar['apachePkgName'] }}

apache_is_running:
  service.running:
    - name: {{ pillar['apachePkgName'] }}
    - enable: True
    - require:
      - pkg: install_apache
    - watch:
      - file: sync status.conf
{% if 'status_load' in pillar %}
      - file: sync status.load
{% endif %}

sync status.conf:
  file.managed:
    - name: {{ pillar['status_conf'] }}
    - source: salt://status.conf
    - user: root
    - group: root
    - mode: 600

{% if 'status_load' in pillar %}
sync status.load:
  file.managed:
    - name: {{ pillar['status_load'] }}
    - source: salt://status.load
    - user: root
    - group: root
    - mode: 600
{% endif %}

Tiedot löytyvät ubuApacheVars.sls ja centApacheVars.sls -tiedostoista /srv/pillar/ kansiosta.

ubuApacheVars.sls:

apachePkgName: apache2
status_conf: /etc/apache2/mods-available/status.conf
status_load: /etc/apache2/mods-available/status.load

centApacheVars.sls:

apachePkgName: httpd
status_conf: /etc/httpd/conf.modules.d/status.conf

Lopuksi /srv/pillar/top.sls tiedosto relevanteilta osiltaan:

base:
  'os:Ubuntu':
    - match: grain
    - ubuApacheVars
  'os:CentOS':
    - match: grain
    - centApacheVars

Ja lopuksi kaikki kappaleiden 4-6 tehtävät! Oletko tosissasi? 60 sivua lähes suoraa copy/pastea, josta 85% on jo jossain muodossa dokumentoitu täällä tai labrakokeen dokumentoinnissa. Minä menen nyt nukkumaan.

Palvelinten hallinta Week 4

Tehtävänanto

  1. Home Work X – Read the chapters 4-6 from course book – Salt States
  2. Home Work XI – Implement Tero Karvinen’s home work in this link to your Ubuntu web-tier minion. (this configures ssh-server to port -8888 with salt.
  3. Complete the other tasks listed in the week46.zip included word-document.
  4. For your own sanity’s sake configure your editor of choise to support YAML and Jinja -syntax highlighting!

Vastaukset

Käyttäjät loin yhtä tilatiedostoa käyttäen sisältäen sekä end goal sliden käyttäjät että omanimi käyttäjän. Kaikkilla käyttäjillä on admin oikeudet heille relevantteihin koneisiin. users.sls tiedoston koodi:

olli:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
{% if grains['os_family'] == 'Debian' %}
      - sudo
{% elif grains['os_family'] == 'RedHat' %}
      - wheel
{% endif %}

{% if grains['role'] == 'Web_tier' %}
bob:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
      - sudo
{% endif %}

{% if grains['role'] == 'DB_tier' %}
mary:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
      - wheel
{% endif %}

kevin:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
{% if grains['os_family'] == 'Debian' %}
      - sudo
{% elif grains['os_family'] == 'RedHat' %}
      - wheel
{% endif %}

stuart:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
{% if grains['os_family'] == 'Debian' %}
      - sudo
{% elif grains['os_family'] == 'RedHat' %}
      - wheel
{% endif %}

En ole ihan varma minkä takia tehtävissä käsketään kasvattamaan CentOS asennuksen levykapasiteettia 20 gigaan, kun se selkeästi on jo 20 gigainen:

Useimpien palveluiden asentaminen onnistui yhdellä tilatiedostolla, lukuun ottamatta luonnollisesti WordPressiä. MariaDB:n konfiguroimisen menin kuitenkin hoitamaan manuaalisesti ssh:lla, koska saltin mysql moduulien toiminnan selvittäminen alkoi käydä hermoille.
endstate.sls:

{% if grains['role'] == 'Web_tier' %}
install_lamp:
  pkg.installed:
    - pkgs:
      - apache2
      - php
      - mariadb-client
      - php-mysql
      - unzip

apache_is_running:
  service.running:
    - name: apache2
    - enable: True
    - require:
      - pkg: install_lamp
{% endif %}


{% if grains['role'] == 'DB_tier' %}
install_mariaDB:
  pkg.installed:
    - pkgs:
      - mariadb
      - mariadb-server
{% endif %}

WordPressin asennus hoitui tilatiedostolla, jonka ensimmäinen osa on käytännössä bash-skripti ja toinen osa kopioi valmiit tietokanta konfiguroinnit palvelimelle. Konfigurointi-tiedosto on muokattu versio tämän valmiin Worpress asennuksen sample konfiguraatiosta. Asennuksen viimeistelyn tein perinteisesti selaimessa, vaikka kai saltin wordpress moduulia olisi pitänyt käyttää siihenkin.
wpinstall.sls:

install_WP:
  cmd.run:
    - name:  |
        cd /tmp
        wget https://wordpress.org/latest.zip
        unzip -d /var/www/html/ latest.zip
        chown www-data:www-data -R /var/www/html/wordpress/

sync wp-config.php:
  file.managed:
    - name: /var/www/html/wordpress/wp-config.php
    - source: salt://wp-config.php
    - user: www-data
    - group: www-data
    - mode: 755

Se toimii:

Ssh-autentikaation toteutus kopio pillar-tiedostoon tallennetut ssh-avaimet (sekä julkisen että yksityisen) id_rsa ja authorized_keys tiedostoihin kaikkien koneiden olli käyttäjälle mahdollistaen olli-käyttäjän avainpohjaisen tunnistautumisen jokaiselta koneelta jokaiselle toiselle koneelle. Pieni ongelma tässä on, että tämä ratkaisu ylikirjoittaa authorized_keys-tiedoston, joten muita kirjautumisavaimia ei voi olla rinnalla.
manage_ssh.sls:

{% if 'ssh_key' in pillar %}
manage_ssh_key:
  file.managed:
    - name: /home/olli/.ssh/{{ pillar['ssh_key_name'] }}
    - mode: 700
    - contents_pillar: ssh_key
    - show_diff: False
    - makedirs: True
    - user: olli
    - group: olli

manage_pub_ssh_key:
  file.managed:
    - name: /home/olli/.ssh/{{ pillar['pub_ssh_key_name'] }}
    - mode: 700
    - contents_pillar: pub_ssh_key
    - show_diff: False
    - makedirs: True
    - user: olli
    - group: olli
{% endif %}

SSH palvelinten porttien muuttaminen 8888:aan oli enimmäkseen copy/paste tehtävä, mutta CentOS onnistui taas heittämään mutkan matkaan, koska CentOS:n käyttämä SELinux-järjestelmä oletuksena estää ssh:n portin muuttamisen mihinkään muuhun porttiin. (Huomasin vasta tehtävän jo tehtyäni että tarkoitus oli implementoida tämä vain Web minionille, eikä CentOS:lle). Tämä korjaantuu onneksi yhdellä komennolla:

salt -G 'os_family:RedHat' cmd.run 'semanage port -a -t ssh_port_t -p tcp 8888'

Ja kirjautuminen CentOS:llekkin portista 8888 toimii:

olli@UbuntuSaltMaster:~/.ssh$ ssh -p 8888 10.208.0.244
Last login: Mon Dec 30 00:52:22 2019
[olli@CentOS7Db1 ~]$ 

Palvelinten hallinta Week 3

Tehtävänanto

  1. Home Work VIII – Read the chapters 3-6 from course book
  2. Home Work IX – Deploy the 3 additional VMs to your Rovius LAB environment and bootstrap and test saltstack in the roles documented in Week45.zip -file which you can find from HOME_WIII-folder below. Check the correct vm-templates from the word-dock included in zip.
  3. Complete the other tasks listed in the week45.zip included word-document.

Vastaukset

Uusien virtuaalikoneiden luominen ja saltstackin bootsrappaus onnistui ongelmitta, samoin kuin apachen, vimin, linksin, wgetin, curlin ja tmuxin asennus saltilla kaikkiin koneisiin. Grain-tiedotkin tallentuivat odotetusti. Sen verran poikkesin ohjeista, että asensin CentOS- virtuaalikoneelle MySQL:n sijaan MariaDB:n.

Cowsayn kanssa oli pieniä ongelmia. Vaikka cowsay asentuikin kaikille koneille odotetusti ja se toimi paikallisesti ajettuna kaikissa koneissa, saltilla etäajettuna se toimi ainoastaan CentOS-minionissa. Oletan, että tämä johtuu siitä, että Debian pohjaisissa distroissa cowsay asentuu /usr/games kansioon, josta salt ei osaa etsiä binäärejä. Kun absoluuttinen polku cowsay’hin spesifioitiin, se toimi oletetusti.

Palvelinten hallinta Week 2

Tehtävänanto

  1.  Home Work III – Install Docker and pull Harri’s ready to run Salt Master and Minion container to your Buster ws. Learn to use the container and write states to it with Geany! Instructions in HOME_WII – folder Below
  2. Home Work IV –  Read Chapters 1-3 from the book.
  3. Combined Lab 1 and Home Work V – Install Docker, Docker-Compose,Portainer to Debian10BusterAdmin-workstation virtual machine
  4. Combined Lab 2 and Home Work VI – Pull Harri’s ready to run Ubuntu Salt Master and Minion to your docker based  Debian10BusterAdmin-workstation virtual machine. Configure hostname and restart salt master and minion and test salt cmd line usage especially the documentation help system! Note! Detailed instruction are atteached below under section I – Bootstrapping salt below in this Moodle!
  5. Combined Lab 3 and Home Work VII – Get to know Saltstack using the Medium article in HOME_WII-folder below. https://medium.com/@timlwhite/the-simplest-way-to-learn-saltstack-cd9f5edbc967

Vastaukset

Dockerin ja Portainerin asennuksissa ei ollut varsinaisesti mitään sen vaikeampaa. Dockerissa pyörivä minioni vastasi käskyihin odotetusti. Ei varsinaisesti intuitiivisin tapa oppia salttia, mutta tulipahan opittua samalla jotain dockereista.

Palvelinten hallinta Week 1

Tehtävänanto

  1.  Home Work I – Buy Course Book 
  2. Home Work II – Install WordPress and ssh-key-based auth to a separate Ubuntu server image to our Rovius Cloud. Note! You should keep the course learning Blog of yours on this WordPress instance. – Installation instructions are in HOME_WI – folder below. (These we taken from Linux Admin Course final lab). 

Vastaukset

Ensimmäisen viikon tehtävä tuli tavallaan skipattua, koska tämä blogi tuli luotua jo viime keväänä Tero Karvisen Tunkeutumistestauksen intensiivikurssille ja uuden luominen toista kurssia varten tuntui turhalta. Tämä WordPress instanssi pyörii VPS:lläni UpCloudin servereillä Frankfurtissa (, koska Suomen serverit ovat 50% kaikkia muita sijainteja kalliimpia). Alkuperäinen ja pääasiallinen tarkoitus tälle VPS:lle on pyörittää Nextcloud instanssiani.

Ainoa ongelma tuli siitä, että olin unohtanut WordPressin salasanan, mutta omalla serverillä hostamiisessa on se hyvä puoli, että minulla on täysi pääsy suoraan MariaDB-tietokantaan, joten ylikirjoitin vanhan salasana hashin uudella suoraan SQL-komennoilla.

Mitä tulee kirjan ostamiseen, päätin luottaa perinteiseen paperikirjaan, vaikka se hieman enemmän maksoikin.

Tunkeutumistestaus 2. päivä

Tehtävänanto

h2
a) Ratkaise jokin WebGoatin tehtävä. Hyödynsitkö jotain OWASP10 -haavoittuvuutta? Mitä niistä?
b) Mainitse esimerkki MITRE:n Att&ck tekniikasta, joka soveltuu weppiin. Osaatko antaa esimerkin hyökkäyksestä tai haittaohjelmasta, jossa sitä on käytetty?

Vastaukset

a) LAB: Client Side Filtering STAGE 1: Tarkoituksena on selvittää Toimitusjohtaja Neville Bartholomewin palkka. Tämän sain selville Firefoxin inspector toolia käyttämällä, valitsemalla ensin Select user elementin sivulta ja katsomalla sitä vastaavaa html-pätkää. Kaikkien työntekijöiden id-numerot ovat järjestyksessä 101:stä 110:een, joten kokeilin muuttaa yhden vaihtoehdon id:tä ensin 111:ksi, joka oli John Waynen id ja sitten 112:ksi, joka osoittautui oikeaksi. OWASP10 -haavoittuvuuksista tässä on tuntomerkkejä sekä Sensitive Data Exposuresta, että Broken Access Controllista. Jälkimmäinen lienee oikeampi luokitus sillä tässä tapauksessa käyttäjä oli oikea autentikoitunut käyttäjä, joka pääsi kuitenkin käsiksi myös sellaisiin tietoihin, joihin hänellä ei olisi pitänyt olla oikeuksia.

b) Exploit Public-Facing Application on laaja kategoria Web-hyökkäyksiä, joissa käytetään hyväksi julkisten web-sivujen tai muiden internettiin auki olevien palveluiden haavoittuvuuksia. SQL-injektio on klassinen esimerkki tälläisestä haavoittuvudesta. Havij on esimerkki sekä hyökkääjien että tunkeutumistestaajien käyttämästä ohjelmasta, joka automatisoi SQL-injektioita.

Tunkeutumistestaus 1. päivä

Tehtävänanto

h1.
a) CTF walktrough. Katso verkosta (esim Youtubesta) jonkin capture the flag -kilpailun ratkaisu. Mitä uusia työkaluja opit? Kokeile jotain mainittua työkalua (tarvittaessa koneella, joka ei ole kiinni Internetissä).
b) Kali Live USB. Tee Kali Live USB -tikku. Kokele, että se käynnistyy. Vinkki: käytä USB3-tikkua ja dd:tä. Olet tarkkana, mitä laitat of= kohtaan, ettet kirjoita kovalevysi päälle.

Vastaukset

a) Katsoin seuraavan CTF walkthrough’n: https://www.youtube.com/watch?v=82S8wFSypB4, jossa käytettiin mm. jo aiemmin kokeilemaani nmappia, malicious-wordpress-pluginia, joka mahdollistaa käänteisen shelliyhteyden ottamisen palvelimeen kaappaamalla ensin wordpress instanssi, ja joka itsessään käyttää msfvenomia hyötykuorman luomiseen, sekä unix-privesc-check -skriptiä, joka käy läpi tiedostojärjestelmän oikeuksien nostamisen mahdollistavien väärin konffittujen tiedostojen varalta. Näistä kokeilin unix-privesc-check -skriptiä pöytäkoneellani (Manjaro Linux), eikä se löytänyt mitään varoitettavaa.

b) Kali Linux Live USB -tikun tekeminen onnistui helposti ja se käynnistyi moitteettomasti läppärilläni. Tarkka komento oli “sudo dd if=kali-linux-xfce-2019.1a-amd64.iso of=/dev/sdf bs=512k”. Teknisesti asensin sen itseasiassa 32GB microSD-kortille USB3-sovitinta käyttäen, koska vaihtoehto oli 10+ vuotta vanha 4GB USB2-tikku.