sunnuntai 16. helmikuuta 2014

ICT4TN003-12: Paketoimista Ubuntulla

Tällä kertaa tehtävänä metapaketin tekeminen, pakettivaraston tekeminen repreprolla ja skriptin paketoiminen. Vapaaehtoisena lisähaasteena repreprolla tehdyn varaston allekirjoittaminen. Tällä kertaa käytössä Netcieliltä vuokrattu ranskalainen virtuaalipalvelin, jossa käyttöjärjestelmänä Ubuntu 13.04. Yhteys serveriin Windows 7 -läppärin PuTTY:llä.

Aloitetaan opettajan ohjeiden mukaan asentamalla equivs.

sudo apt-get update
sudo apt-get install equivs

Asennus sujui hyvin. Ja sitten tekemään metapakettia, joka asentaa suosikkiohjelmani. Paremman ajatuksen puuttuessa, päädyn geo-ip:hen. Ensin tehdään paketti:

equivs-control lasse-geoip.cfg
sudo nano lasse-geoip.cfg

Sitten editoidaan cfg-tiedosto tällaiseen kuntoon:


Ja sitten varsinainen rakentaminen:

equivs-build lasse-geoip.cfg

Ja eipä onnistunutkaan vaan tuloksena on valituksia: "badly formatted heading line", "found blank line where expected first heading" ja niin edelleen. Käydäänpä katsomassa miltä se cfg-näyttikään... Korjailen sen perusteella, mitä virheilmoitusket saattaisivat tarkoittaa, mutta lopputulos on sama. Otan alusta asti uudestaan, mutta ei auta aina vaan tuloksena on samankaltainen litanja virheitä:


En ymmärrä vastoinkäymisiä, sillä vastaava onnistui tunnilla käyttämälläni live-CD:llä ilman ongelmia. Päätän jättää harjoituksen tällä erää tähän ja palata siihen vanhalla, tutulla ja turvallisella testikoneella.

* * *

Ja nyt jatkuu! Tällä kertaa alustana edellisistä tehtävistä tuttu HP-torni ja käyttöjärjestelmänä Ubuntu 12.04 LTS live-CD:ltä ajettuna. Tällä se ainakin tunnilla onnistui...

Eli sitten vaan tuttuja komentoja syöttämään. Tällä kertaa päätän tehdä ainakin teoriassa hyödyllisen paketin, joka asentaa Linuxiin "ampin", että saadaan LAMP (Linux-Apache-MySQL-PHP). Laiskuuttani ajan kaikki komennot sudona.

su sudo

apt-get update

apt-get install equivs

...jota ei kuitenkaan löydy, joten edetään kuten aiemmassa tehtävässä hakemalla universe-repository:

sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse"

apt-get update

apt-get install equivs

Nyt onnistui! Sitten tehdään paketti:

equivs-control lasse-lamp.cfg

sudo nano lasse-lamp.cfg

Päivitetään tiedosto näyttämään tältä:



Sitten rakennetaan:

equivs-build lasse-lamp.cfg

Ja ladataan lintian testaamista varten:

apt-get install lintian

Testataan:

lintian lasse-lamp_0.1_all.deb

Lintian valittaa sähköpostiosoitteesta, jonka jätin oletukseksi. Kun taas korjaan siihen oman osoitteeni ja poistan #-kommentointimerkin, equivs-build ei suostu rakentamaan pakettia vaan valittaa "trailer linen" väärästä formaatista. Tyydyn lopulta siihen versioon, josta lintian valittaa. Se kuitenkin syntyi, enkä testaamisella pääse virheestä eroon.

Seuraavaksi kokeillaan paketin asennusta:

gdebi -n lasse-lamp_0.3_all.deb

gdebiä ei tietenkään koneella ole, joten se on vielä asennettava:

apt-get install gdebi

Ja sitten alkaa tapahtua! Ohjelmat asentuvat nätisti, ainoa katko on MySQL:n pyyntö saada salasana.

Seuraavana tehtävänä reprepron käyttö. Sekin pitää aluksi asentaa:

apt-get install reprepro

Sitten ohjeiden mukaisesti teen kansion conf ja sinne tiedotston distributions. Se sisällöksi seuraavaa:



Sitten vaan varsinainen rakennus:

reprepro includedeb lammas lasse-lamp_0.3_all.deb

Ja valmista tulee!

Sitten vielä skriptin paketoiminen, siten että se on asennettuna kaikkien käyttäjien käytettävissä. Teen nimellä tiedot.sh yksinkertaisen skriptin työskentelykansion ja vapaan levytilan näyttämiseen. Se sisältö on:

pwd
df

Ja tälle ajo-oikeudet:

chmod 755 tiedot.sh

Sen jälkeen ajan equivsin tehdäkseni tästä paketin:

equivs-control tiedot.cfg

Sen sisältöä muokkaan aiemmin oppimani mukaan:



Sitten ajan buildin:

equivs-build tiedot.cfg

Ja asennan paketin kokeeksi:

gdebi -n tiedot_0.1_all.deb

Ja se olikin sitten siinä!


Lähteet:

sunnuntai 9. helmikuuta 2014

ICT4TN003-12: Rosvoja ja kunnon kansalaisia

Tällä kertaa tehtävänä on ratkaista HoneyNetin Scan of the Month 15 ja selittää omin sanoin yksi OWASP Top 10 -listan hyökkäyksistä. Aloitetaan HoneyNetistä. Opettajan suosituksen mukaisesti teen harjoituksen Ubuntu (12.04 LTS) live-CD:llä. Koneena aiemmissa tehtävissä kuvattu HP.

Lataan tar-paketin. Sen jälkeen tarkistan oikean komennon purkamiseen:

tar --help

Ja sitten itse purkaminen:

tar -xf honeynet.tar.gz

Tuloksena on honeynet-niminen kansio. Sitä ei tosin pääse heti lukemaan, joten joudun muuttamaan oikeuksia:

sudo chmod 755 -R honeynet

Kansiosta löytyy yhden levyosion sisältävä dd-tiedosto. Tässä kohdassa joudun hakemaan apua Googlen kautta, sillä en ottanut tunnilla ylös, millä työkaluilla tuon kimppuun kannatti käydä, kun ajattelin löytäväni tiedon kuitenkin netistä. Löydän Googlella erään aikaisemman kurssin ratkaisun ja luen varovaisesti alusta vain sen verran, että pääsen eteenpäin. Tarvittava ohjelma on Sleuth Kit.

Sen asennus ei kuitenkaan onnistu ennen kuin olen ajanut seuraavan komennon. Ohje tähänkin löytyi eräästä kurssiblogista tai oikeastaan siinä linkatusta Ask Ubuntu -sivusta:

sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse"

Tämän jälkeen ohjelmistolistan päivitys, jossa kestää tällä kertaa tavanomaista huomattavasti pidempään, mutta sen jälkeen Sleuth Kit asentuu mutkitta.

sudo apt-get install sleuthkit

Ohjeiden mukaan puran paketista poistetut tiedostot ja muut tiedostot. Koska en kuitenkaan oikein keksi miten edetä tämän jälkeen, käyn kurkkimassa kansioihin. Aloitan ensin poistetuista tiedostoista. Sieltä löydän lk.tgy-paketin sekä kansiot etc ja $OrphanFiles. Kansioista en löydä mitään kiinnostavaa, joten tarkastelen paketin sisältöä komennolla:

lz lk.tgy

Sen sisältö näyttää sen verran epäilyttävältä, että kyseessä lienee rootkit. Tiedostonimet viittavaat yhteydenpitoon (ssh), nuuskimiseen (sniffer) ja piilotteluun (cleaner). Ajattelen käydä tutkimassa lokitiedostoja, mutta niitä ei löydy paketista. README-tiedosto paljastaakin, että ne ovat olleet osiolla, jota ei ole sisällytetty tehtävään.

Koska en osaa oikein tehdä muutakaan, katson, miten muut ovat tehtävässä edenneet. Aiemmin käymissäni blogeista toisessa on käytetty vastaavia keinoja kuin itsekin käytin, mutta perusteellisemmin ja taitavammin. Toisessa taas on käytetty Autopsyn selainpohjaista käyttöliittymää, mutta päädytty samaan tulokseen, eli tuon lk.lgz-paketin ihmettelyyn.

Pitää ehkä joskus tarttua johonkin toiseen Scan of the Monthiin, nyt kun on vähän enemmän ymmärrystä siitä, mistä aloittaa ja miten edetä.

Mutta nyt OWASP:in kimppuun. Luettuani tiivistelmät kaikista läpi, valitsen tarkempaan tarkasteluun A2:n (Broken Authentication And Session Management). Tämä kohta koskee uhrin istunnon kaappaamista, joka on mahdollista, jos käytettävän palvelun tietoturvassa on sopiva aukko. OWASP:in mukaan täysin pitävän istunnonhallinnan rakentaminen on vaikeaa.

Tällaisille murroille ovat alttiita esimerkiksi ne palvelut, joissa istuntotunnukset on huonosti salattu, helposti arvattavissa tai jopa suoraan url:ssa näkyvissä. OWASP:issa on havainnollinen esimerkki:
  1. Uhri on kirjautuneena lentoja myyvälle sivustolle.
  2. Hän näkee tarjouksen ja päättää lähettää sen sähköpostitse ystävälleen kopioimalla url:n (http://www.example.com/sale/saleitemsjsessionid=2P0OC2JSNDLPSKHCJUN2JV?dest=Hawaii).
  3. Kaveri avaa linkin ja onkin yhtäkkiä kirjautuneena sivustolle, jonne uhri on jo aiemmin tallentanut luottokorttinumeronsa. 
Toinen mahdollinen aukko voisi olla se, että istunto ei vanhene. Uhri esimerkiksi käy julkisella tietokoneella kirjautumassa johonkin palveluun eikä lopetettuaan kirjaudu ulos vaan ainoastaan sulkee selaimen. Hyökkääjä voi tulla vaikka tunnin päästä koneelle ja havaita, että istunto on yhä auki.

Lähteet Honeynet-tehtävään:

keskiviikko 5. helmikuuta 2014

ZaggKeys ja miten opinnot ovat edenneet

Ajattelin tässä blogissa esitellä välillä myös hyviksi havaitsemiani tuotteita, ainakin niissä tapauksissa, kun kyseessä on joku iPhonea eksoottisempi tuote. Tämä homma on hyvä aloittaa vuodenvaihteessa hankkimallani ZaggKeys Folio for iPad Airilla.

Yksinkertaistettuna: ZaggKeys tekee iPadista miniläppärin. Hiirtä (tai mitään korviketta) ei tietenkään ole, mutta normaali iOS:n kosketusohjaaminen toimii normaalisti. Ostin saksalaisen version, joka toimii kätevästi "suomalaisena" pienin varauksin: Z ja Y -näppäimet ovat väärillä paikoilla, vaikka toki toimivat normaalisti (tämän voisi tietysti korjata, jos uskaltaisi repiä napit irti ja vaihtaa niiden paikkoja). Menikä sekavaksi? Siis, suomalaisen näppäimistö kirjaimen Y paikalla on näppäin Z, jota painamalla tulee kuitenin Y. Eli jos ei kirjoittaessa tuijottele sormiaan, ei tämä ole mikään ongelma. Lisäksi Å-napissa on "u mit umlaut".

Numpadia ei näppäimistössä ole, mutta sen sijaan F-näppäimien paikalla on mukava kokoelma pikanäppäimiä: navi-nappi, lukitus, undo, redo, virtuaalinäppäimistö esiin/pois, copy, paste sekä äänenhallinta. Lisäksi näppäimistössä on aivan oma akkunappi, jonka painamisen jälkeen kyseisen napin ledi välähtää 1-4 kertaa kertoen akun varauksen. Valmistajan mukaan akun pitäisi kestää kuukausia, eikä minulla ole toistaiseksi perusteita epäillä tätä.

Fyysisesti laite on, joistain netti kommenteista poiketen, erittäin laadukkaan oloinen. Näppäimistöä on miellyttävä käyttää ja iPad asettuu tukevasti paikalleen. Kaksi pientä miinusta: Laitteen irroittaminen ei ole yhtä kätevää kuin kiinnittäminen, mutta jos kynsiä ei ole syöty aivan loppuun, oppii tämänkin melkon nopeasti. Toinen liittyy tasapainoon: avatessa kantta "liikaa" tietyn kohdan jälkeen iPad-puoli painaa enemmän kuin näppäimistö, jolloin laite kellahtaa kumoon. Jos tähän ei osaa varautua, voi se pahimmillaan johtaa yhdistelmän putoamiseen lattialle.

Yksi tärkeimpiä syitä siihen, että päädyin ZaggKeysiin oli taustavalaistu näppäimistö. Valaistusta voi kaiken lisäksi säätää. On/off-säädön lisäksi tarjolla on seisemän eri värivaihtoehtoa ja kolme kirkkausvaihtoehtoa. Tämän pitäisi riittää vaativampaankin tarpeeseen, vaikka noin monipuolinen valikoima onkin monelle lähinnä lelu.

Suurin miinus koko laitteessa liittyy Applen tarkoituksellisiin tai tarkoituksettomiin rajoituksiin. Eli näppäimistöllä on mahdollista käyttää vain tiettyjä toimintoja ja näppäimistöoikoteitä. Ärsyttävimmät puutteet ovat sovellusten välillä hyppiminen ja Safari-sivujen selaus nuolinäppäimillä.

Mutta kokonaisuutena ZaggKeys on todella upea ja käyttökelpoinen lisälaite markkinoiden parhaaseen tablettiin. Sata euroa on paljon, mutta jos pädillä kirjoittaa muutakin kuin satunnaisesti urleja tai FB-statuksia, on kyseessä kannattava sijoitus.

Ja samaan hengenvetoon iso kehu ZaggKeysin kanssa erinomaisesti pelaavalle Textastic-sovellukselle: vähäisellä testauksen perustella erittäin käyttökelpoinen sovellus kevyeen koodailuun. Esimerkiksi nettisivupäivitykset onnistuvat vaivattomasti ssh-yhteyden kautta.

Ja ne opinnot? Syksyllä tuli suoritettua Haaga-Heliassa tietokantojen ja ohjelmoinnin peruskurssit. Molempien tentit ovat tosin vielä edessä, koska olin tenttiviikon aikaan lomalla.

Code Academyssä edistyminen on ollut vaisumpaa. Naksuttelin läpi PHP-kurssin, koska sille tuntui olevan niin paljon tarvetta varsinaisessa työssäni, mutta kurssi oli niin perusasiaa, ettei siitä juurikaan ollut apua.

Isoin ja haastavin juttu syksyn aikana on ollut uuden teeman tekeminen Vihreän Langan Drupal-pohjoisille verkkosivuille. Tämä työ on jo pitkällä, mutta matkaa maaliin vähintään yhtä paljon.

Tänä keväänä Haaga-Helia jatkuu ohjelmistokehityksellä ja käyttöliittymillä sekä Langan verkkoprojekin kannalta hyödyllisellä Linux palvelimena -kurssilla, jonka tehtävien vastauksia onkin tässä blogissa jo julkaistu. Code Academy jäänee vähemmälle, mutta Langan verkkoprojektin ohessa jatkan PHP:n ja Drupalin itseopiskelua.

lauantai 1. helmikuuta 2014

ICT4TN003-12: Linux-palvelimen kuormittamista

Tällä kertaa harjoitellaan koneen kuormituksen ja tilan arviointi. Läksynä on viisi tehtävää, joista ensimmäinen on kuormitustietojen kerääminen munin-ohjelmalla. Koneena edellisestä tehtävästä tuttu HP-harjoituskone, jossa AMD Sempron LE-1300 -prosessori ja 1,8 gigatavua muistia sekä viime viikon tehtävässä asennettu LAMP.

Aloitetaan asentamalla munin:

sudo apt-get install munin

munin-check

Tämän jälkeen tulee useita virheilmoituksia tiedostojen ja kansioiden vääristä omistusoikeuksista. Korjaan ne käsin yksi kerrallaan, jonka jälkeen testaan muninia Firefoxin kautta osoitteessa localhost/munin. Ja sehän toimii!



Sitten stressaamaan!

sudo apt-get install stress

Päätän aloittaa prosessorilla:

stress -c 1

top näyttää, että vahnha prosessori on kovilla:



Testataan seuraavaksi muistin kuormittamista komennolla joka käynnistää neljä prosessia, jotka kukin vievät 256 megatavua muistia:

stress -m 4



Kuten kuvasta näkyy muistin rasittaminen aiheuttaa huomattavaa rasitusta myös prosessorille. Kokeillaan viimeiseksi kovalevyn rasittamista seuraavalla komennolla. Tässä yhteydessä on syytä varmistaa, ettei käytä kaikkea jäljelläolevaa levytilaa, eli kannattaa ensin varmistaa (df -h) vapaana olevan tilan määrä.

stress -d 1

Tämä ei aluksi onnistunut (virheilmoituksena "permission denied"). Google-haku osoitti, että muilla on ollut vastaava ongelma ja se ratkeaa yksinkertaisesti antamalla komento sudo:na:

sudo stress -d 1

Tällä kertaa käytin monitorointiin iotop-ohjelmaa:



Loppuhuipennuksena vielä 90 sekunnin yhteisrasitus:

sudo stress -c 1 -m 4 -d 1 -t 90s



Testien jälkeen muninin keräämissä kuvaajissa näkyy jo jotain elämää, mutta koska aika-akseli on lyhimmilläänkin (päivä) niin pitkä, on tietojen tarkempi tarkastelu hyvin vaikeaa. Siirrytään siis viimeiseen tehtävään ja katsotaan, jos se aikana muniniin kirjautuisi jotain käyttökelpoisempaa.

Ja yksinkertainen esimerkki lokeista. Apachen lokitiedostojen reaaliaikainen seuraaminen onnistuu komennolla:

tail -F /var/log/apache2/*log

Seuraavassa kuvassa näkyy kolme tapahtumaa. Ylimpänä näkyy, että kello 12.05.21 on otettu yhteyttä osoitteesta 192.168.100.23. IP-osoitteen jälkeen tulevat kaksi viivaa tarkoittavat, ettei yhteydenottajasta ole tarkempia tunnistetietoja (RFC 1413 ja HTTP Authentication).



Sen jälkeen tulee päivämäärän ja kellonajan sisältävä timestamp. Seuraavaksi on vuorossa yhteydenottajan antama vaatimus halutuista tiedoitsa, eli tässä tapauksessa halutaan näkyviin "juuri" tai etusivu (/) käyttäen HTTP-protokollaa.

Seuraavat numerot (304 ja 210) ovat HTTP-koodit, joista ensimmäinen kertoo, että kyseessä on muokkaamaton sivu ja jälkimmäinen ilmeisesti sen, että yhteys on muodostettu uudelleen, mitä ikinä se tarkoittaakaan.

Loppuosa on sen verran omituinen, etten osaa sanoa, miksi siinä mainitaan käyttämäni Chromen lisäksi Mozilla ja Windows NT. Ilmeisesti kyse on siitä, että selain ei kerro ainoastaan mikä se on vaan myös mille eri selaimille sopivia muotoiluja se ymmärtää.

Kuvan toinen ja kolmas rivi liittyvät samaan yhteydenottoon. Yritin iPhonellani avata tiedoston /pitsa.html, jota (kuten hyvin tiesin) ei serverillä ole. Kakkosrivin tiedot ovat error.log-tiedostosta, josta näkyy, että osoitteesta 192.168.100.28 tehtyyn yhteydenottoon on jouduttu vastaamaan "File does not exist". Viimeinen rivi on saman tapahtuman kirjaus access.log-tiedostossa. Se on muuten vastaava kuin ensimmäinen pöytäkoneeltani sivuston juureen otettu yhteys, mutta HTTP-koodit ovat toiset: 404 (file not found) ja 502 (bad gateway).

Käydään lopuksi vielä kurkistamassa, miltä munin näyttää:


Suurta eroa kuormitustestin ja muun käytön ei pääsääntöisesti näy, tai sitä ei pysty näin epätarkassa tarkastelussa näkemään. Prosessorin käyttöasteessa näkyy sentään selvä ero, sillä vihreä "järjestelmäkäyttö" on ollut korkeimmillaan juuri silloin, kun ajoin stress-testejä.

Lähteet: