Tietoturvatestaus Jenkinsin päällä

Parhaimmillaan tietoturvatestien automaation voi rakentaa jo olemassa olevan infrastruktuurin päälle. Tässä artikkelissa tarkastelemme Zap tietoturvatestien integrointia osaksi Jenkins-pohjaista CI-putkea.

Tietoturvatesteja ei välttämättä kannata ottaa osaksi jokaisesta muutoksesta tehtävää testiajoa, sillä niistä saatavat tulokset vaativat enemmän kuin vilkaisun verran tulkintaa. Tietoturvatestit kannattaa ajaa esimerkiksi joka yö ja ottaa niiden tulosten läpikäyminen osaksi viikottaista rutiinia.

Asennetaan ensin Jenkins CI-palvelin Vagrant-virtuaalikoneeseen. Voit käyttää myös jo olemassa olevaa Jenkins-palvelinta, sikäli kun voit asentaa palvelimeen tarvittavat laajennokset.

Koska Jenkinsin asennus on hiukan vaivalloista, käytettävissä on valmis Vagrant ja Ansible-pohjainen asennustyökalu. Vagrant on virtuaaliympäristöjen hallinta ja konfigurointityökalu ja Ansible on työkalu palvelinympäristöjen konfiguraationhallintaan.

Asenna ensin muutamia paketteja:

sudo apt-get install virtualbox vagrant virtualbox-dkms git vim ansible

https://github.com/Eficode/jenkins-ansible.git

$ vagrant up --provision

Kun Jenkkari on asennettu, avaa sen kotisivu: http://localhost:9090/

jenkins-eka

Jenkinsin kirjoittaa oletussalasanan palvelimella olevaan tiedostoon tietoturvasyistä. Haetaan salasana tiedostosta avaamalla ensin yhteys Vagrant-virtuaalikoneeseen ja lukemalla tiedosto johon se on kirjoitettu:

$ vagrant ssh
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Vinkki: Voit kopioida ja liittää terminaaliin painamalla ctrl+shift+c ja ctrl+shift v (Ubuntu). Kopioi sitten näytölle ilmestynyt salasana Jenkinsin “Administrative Password”-kenttään.

Jenkins kysyy sitten laajennosten asentamisesta. Valitse “Install suggested plugins” -vaihtoehto. Valitettavasti integrointi ZAP:iin ei onnistunut suoraan asennuksen yhteydessä tehtävistä laajennosvalinnoista, asennamme sen siis myöhemmin.

Jenkinsin administroinnista

Luo seuraavaksi admin-käyttäjä täyttämällä kentät:

Jenkins-toka

Seuraavaksi asennamme Jenkinsiin tarvittavat laajennokset, jotka tätä ohjetta varten ovat seuraavat:

Git Plugin
ZAProxy plugin
Custom Tools Plugin

Vinkki: Jenkinsiin on olemassa kaksi ZAPiin liittyvää laajennosta: ZAP Plugin ja ZAProxy plugin. Molemmat toimivat, mutta ZAP Pluginin toiminnallisuus on erittäin rajoittunutta. Käytämme siksi monipuolisempaa ZAProxy pluginia.

Avaa Jenkinsin kotisivu ja valitse valikosta kohta “Manage Jenkins” ja edelleen “Manage Plugins”.

Päivitä ensin Jenkinsin laajennosrekisteri ja valitse sitten välilehti Available. Asenna yllä olevassa listalla olevat laajennokset yksi kerrallaan hakemalla ne oikean reunan haulla ja klikkaamalla asennusvalintaa.

Kun kaikki laajennokset on valittu, paina “Install without restart” ja odota asennuksen valmistumista. Asenna seuraavaksi ZAP, menemällä custom tools valikosta ja luomalla uusi työkalu.

Luo uusi projekti (anna projektille nimi ja valitse projektin tyypiksi “Freestyle Project”)
Valitse Discard old builds ja valitse säilytettävien buildien määrä viiteen.

Lisää Git lähdekoodivarasto

https://github.com/Eficode/security_testing_demo_app.git

Lisätään seuraavaksi kolme Execute Shell -askelta työhön.

./start.sh

Ensimmäinen käynnistää palvelimen skriptillä, joka kirjoittaa palvelimen prosessitunnuksen (PID) tiedostoon.

kill `cat server.pid`

Seuraava:

Jenkins-kolmas

Asennetaan seuraavaksi ZAP Jenkinsin Custom Tools -laajennoksen avulla. Avaa ensin Manage Jenkins -osio, josta edelleen Global Tool Configuration ja vielä Custom Tool Installations.

Täytä seuraavat arvot avautumaan dialoigin:
Name: ZAProxy
Download URL for binary archive: https://github.com/zaproxy/zaproxy/releases/download/2.4.3/ZAP_2.4.3_Linux.tar.gz
Subdirectory of extracted archive: ZAP_2.4.3

Jonka jälkeen lopputulkosen pitäisi näyttää tältä:

Jenkins-neljäs

Paina sitten sivun alareunasta “Save”.

Paina Build Now ladataksesi lähdekoodi sessioineen Jenkins koneelle. Tämä tulee tehdä siksi, että ZAP-laajennoksella on käytössään lähdekoodin mukaan tallennettu ZAP-sessio, jota ZAP käyttää ohjelmiston rajapintojen löytämiseen.

Vinkki: ZAPia voidaan käyttää myös ilman tallennettua sessiota, mutta erityisesti laajemmissa ohjelmistoissa mahdollisimman suuri osa ohjelmiston ja käyttäjän välisistä rajapinnoista on syytä testata.

Kun zap on konfiguroitu, voidaan siirtyä putkessa etenepäni. ZAP:n tuottamien XML raporttien tulkintaan ei ole tällä hetkellä olemassa Jenkins-laajennosta. Tämä ei kuitenkaan ole välttämättä niin huono asia kuin äkkiseltään voisi luulla. Raportit poikkeuksetta sisältävät asioita, joiden eteen ei ohjelmiston luonteen vuoksi voida tehdä mitään tai tietoa jonka ZAP itsekin antaa vain käyttäjän tiedoksi.
Raportit olisi kuitenkin hyvä saada käyttäjän tutkittavaksi. Lisätään siis Post Build Action, joka arkistoi syntyneet raportit ja tarjoaa mahdollisuuden niiden tutkimiseen.

Jenkins-viides

Kun työ ajetaan seuraavan kerran, ilmestyy tulossivulle uusi kohta: Build Artifacts, joka sisältää listan arkistoiduista raporteista.

Jenkins-kuudes

Painamalla raporttia pääset tutkimaan tuloksia. Löydökset on ryhmitelty vakavuusasteensa perusteella ja raportti sisältää tiedon siitä, missä kaikista rajapinnoissa löydöstä esiintyy ja antaa vinkkejä ongelmien korjaamiseen.

Jenkins-seiska

Yleensä raporttimuotoinen tieto ei kuitenkaan riitä. Raportista häviävät seuraavalla ajolla kaikki sellaiset viat jotka on korjattu, mutta on olemassa tilanteita, jossa kaikkia tietoturvaan liittyviä hyviä käytäntöjä voida ohjelmistoon toteuttaa. Näistä päätöksistä pitäisi jäädä jonkinlainen kirjaus. Ratkaisimme tämän rakentamalla automaattisen tietoturvatestausputken Jiran päälle Youtube-videolla.

Kiinnostaako tietoturva? Eficode julkaisee yhdessä kyberhyökkäysyhtiö Silverskinin kanssa ohjelmistoprojektin tietoturvaoppaan. Lue lisää Eficoden syyskuun lopussa järjestettävästä maksuttomasta tietoturvatilaisuudesta, josta saat oppaan ilmaiseksi mukaan! Paina linkistä ja ilmoittaudu pian, sillä paikkoja on rajoitetusti.

Published: Aug 30, 2016

Updated: Mar 26, 2024

CI/CD