sunnuntai 16. maaliskuuta 2014

ICT4TN003-12: Wordpress-palvelimen optimoiminen

Aloitin puhtaalta pöydältä, eli Ubuntu 12.04 LTS live-CD:ltä. Asensin aluksi L:ään (Linux) AMP:in (Apache, MySQL ja PHP). Testasin asennukset (tai oikeastaan tässä vaiheessa ainoastaan Apachen) kirjoittamalla Firefoxiin osoitteeksi "localhost". "It works!"-sivu aukesi, kuten pitikin, joten ainakin Apache on asentunut oikein.

Seuraavaksi asensin edellisen tehtävän komennoin Wordpressin ja siirsin sen var/www/-kansioon. Lisäsin yhden kuvallisen artikkelin ja tein nopeasti vastaavan staattisen sivun kopioimalla Firefoxin näyttämän lähdekoodin erilliseen html-tiedostoon. Selvyyden vuoksi kävin vielä muuttamassa dynaamisen sivun nimeä.

Sitten testaamaan! Käytin oppaana tehtävänannossa mainittua sivua ja ajoin ensiksi suoraan sieltä poimitun komennon:

ab -c 500 -n 1000 http://localhost/

Vastaukseksi tuli seuraavaa:

apr_socket_recv: Connection reset by peer (104)
Total of 11 requests completed

Tämän jälkeen kone meni aivan jumiin ja koska live-CD-sessioista ei jää mitään talteen, olisin joutunut aloittamaan jälleen alusta, johon minulla ei ollut enää aikaa. Tämän sijaan päätin tarkastella muiden vastauksia ja oppia niiden kautta.

Lähteet:

sunnuntai 9. maaliskuuta 2014

ICT4TN003-12: WordPress-blogin siirtäminen ".comista" omaan domainiin

Tällä kertaa sovelletaan hieman. Tehtävänantona on WordPressin asentaminen, esimerkkisisällön kirjoittaminen sekä joukko valinnaisia lisätehtäviä. Koska tämä tehtävä menee niin lähelle asiaa, joka minun pitäisi muutenkin tehdä, päätin iskeä kaksi kärpästä yhdellä iskulla.

Eli tarkoituksena on siirtää osoitteessa kaunishumala.wordpress.com jo vajaan vuoden toiminut olutblogi omaan www.kaunishumala.fi-domainiin. Domainin ja virtuaalipalvelimen olen hankkinut jo aiemmin Hostingpalvelu.fi:stä.

WordPressin asentaminen kyseisen palvelun virtuaalipalvelimelle on varsin helppoa, sillä hallintapaneelista löytyy linkki Asennusohjelma. Tämän jälkeen voi valita haluamansa ohjelman sisällönhallintaohjelmissa on WordPressin lisäksi tarjolla muun muassa Joomla ja itselleni töiden kautta hyvinkin tuttu Drupal. Lisäksi tarjolla on foorumi- ja verkkokauppasovelluksia.



Käyn kuitenkin ensin luomassa (edelleen hallintapaneelin kautta) WordPress-käyttäjän MySQL:ään. Tämän jälkeen aloitan varsinaisen asennuksen, jonka aikana pitää valita käytettävä domain ja tarkempi polku. Näiden osalta ei tarvitse muutoksia tehdä, koska haluan, että WordPress-sisältö löytyy domainin juuresta. Käytännössä asennus suoritetaan käyttäjän public_html-kansioon.

Jos haluat asentaa WordPressin käsin suoraan terminaalista, se onnistuu nopeiten, kun annat seuraavat komennot (testattu toisella serverillä):

wget http://wordpress.org/latest.tar.gz
tar -xf latest.tar.gz

Tämän jälkeen kopiot wordpress-hakemistoon purkautuneet tiedostot siihen hakemistoon, johon haluat WordPressin asentaan. Yleensä tämä on, kuten edellä, käytäjän public_html-hakemisto. Tämän jälkeen asennus jatkuu ohjaamalla selain siihen kansioon, johon tiedostot (ja erityisesti index.php) siirrettiin.

Takaisin omaan asennukseeni, jossa tehdään tietyt valinnat ennen asennusta. Seuraavaksi valitaan versio, kieli ja automaattisen päivityksen sekä varmuuskopioinnin asetukset. Sen jälkeen valitaan admin-tunnuksen nimi, salasana, sähköposti sekä sivuston nimi ja kuvaus. Ja sitten vielä valitaan halutaanko käyttää multi-site-toimintoa, rajoittaa sisäänkirjautumisyrityksiä, luodaanko uusi tietokanta automaattisesti ja niin edelleen.

Sitten painetaan nappia.



Noin 30 sekunnissa asennus on valmis ja on aika siirtyä seuraavaan vaiheeseen, joka on sisällön siirtäminen wordpress.com-blogista omalle palvelimelle. Olen jo ladannut vanhasta blogista XML-tiedoston, joka sisältää käytännössä kaiken muun paitsi kuvat.


Kun siirtotyökalu on ladattu on aika ottaa se käyttöön.



Asennuksen jälkeen pääsen valitsemaan, mitä tehdään mukana tulleille käyttäjile. Muutan nimet yksinkertaisempaan ja keskenään samanlaiseen muotoon. Tämän valinnan alla on jännittävin rasti: "Download and import file attatchments". Voisiko tämä tuoda kuvat vai vaatiiko se enemmän työtä?

Kauniin humalan puolella lataus on vihdoin valmistunut ja selain päätynyt virhesivulle, jolla lukee "Mitään ei löytynyt". Siirtyiköhän loppujen lopuksi yhtään mitään? Vastaus selviää pian: ei siirtynyt. Ei kuvia, ei edes tekstejä. Päätän kokeilla samaa vielä uudestaan, tällä kertaa ilman tiedostoliitteitä.

Tällä kertaa prosessi on nopeampi ja tuloksena toisenlaisia virheitä, joiden päässä rohkaisevasti "All Done. Have fun!"

Ilmeisesti kaikki sisältö oli kuitenkin siirtynyt jo ensimmäisellä kerralla, sillä virheet liittyvät sivuilla jo oleviin tiedostoihin. Litanjan alussa oli kuitenkin se ikävin ilmoitus, jonka mukaan käyttäjätietojen siirto ei onnistunut, joten kaikki sisältö laitetaan adminin nimiin. Tämä on hieman kurjaa, kun kirjoituksia on lähes 300 ja kirjoittajia useampia. Jos kyse olisi vain minusta, ongelma ei olisi näin suuri, mutta tämän kanssa ei voi elää. Toinen vielä ratkaistavaksi jäävä ongelma on kuvien palauttaminen.

Epäilen, että kirjoittajatietojen vääristyminen johtuu siitä, että tekstit ja käyttäjät siirtyivät jo ensimmäisellä yrityksellä, mutta eivät syystä tai toisesta näkyneet. Kun toin niitä toista kertaa, ei uusien käyttäjien luominen samoilla nimillä enää onnistunut, joten Tuo-toiminta muutti tekijät varmuuden vuoksi adminille. Päätän aloittaa alusta ja tyhjennän tietokannan WordPress Reset -lisäosalla.

Kolmas kerta toden sanoo? Kyllä nyt näyttäisi olevan kaikki tekstit oikeilla kirjoittajilla järjestelmässä.

Entäs ne kuvat? Käyttämäni ohjeen lopusta löydän linkin, jossa kehotetaan käyttämään Import External Images -lisäosaa. Se ei kuitenkaan sovellus, koska alkuperäisessä blogissa kuvat on sijoitettu gallerioihin, ei suoraan <img>-tägeihin. Tähän ei näytä olevan mitään järkevää ratkaisua, sillä lukuisilla foorumeilla viime vuosina esitettyihin kysymyksiin ei ole tullut ratkaisevia vastauksia.

Päätän siis kokeilla vielä kerran WordPressin nollaamista ja sisällön tuomista tuon "Download and import file attatchments"-rastin kanssa. Muistan vanhan sananlaskun siitä, että yksi hulluuden määritelmistä on tehdä sama asia uudelleen ja odottaa toista lopputulosta.

No, saan kuitenkin toisen lopputuloksen, joskaan se ei ole aiempaa mieluisampi: 500 Internal Server Error. Osa kuvista on kuitenkin siirtynyt, teksteistä ei ole tietoakaan. Kokeilen seuraavaksi sitä, että jätän kaikki jo siirtyneet aloilleen ja teen prosessin uudestaan: josko tällä kertaa pääsisin vähän pidemmälle...

Jyräämistaktiikka näyttäisi toimivan. Tekstejä ei ole edelleenkään siirtynyt, mutta toisella kierroksella kuvien määrä tuplaantui noin 75:stä 150:een. Koska kuvia on lähes 500, voisi olettaa, että kierroksia vaaditaan ainakin seitsemän, ehkä kahdeksas teksteille.

Ihan noin montaa ei tarvittu, mutta noin kuuden kierroksen jälkeen kaikki on siirretty ja näyttäisi toimivan. Tai ainakin sillä tasolla, että kuvat ovat löytäneet oikeat paikkansa. Seuraavaksi on aika ottaa käyttöön sama teema kuin alkuperäisessä blogissa. Se onnistuu mutkattomasti hallintasivujen kautta: ensin ladataan haluttu teema sivuilla ja sen jälkeen valitaan se aktiiviseksi:


Tämä onnistuu ilman suurempia mutkia, mutta joko teemaa on muutettu tai sitten wordpress.com mahdollisti perusteellisemman "customoinnin" sillä fontit eivät täsmää. Ja kuvatkin näkyvät hieman väärällä tavalla. Ulkoasuasetuksista löytyy kuitenkin asetus fontin vaihtamiseen.

Nyt vielä gallerian tyyppi uusiksi "and I'm all set"...

Galleriatyypin vaihtaminen ei kuitenkaan onnistu, sillä koko valintavaihtoehtoa ei enää ole näkyvissä. Googlailu paljastaa, että kyseessä on tyypillinen ongelma, sillä tyypit kuuluvat vain .com-hostattuihin sivuihin. Ratkaisuksi tarjotaan Jetpack-lisäosaa.

Tarvitsemani tiled-tyyppi ei kuitenkaan tule automaattisesti näkyviin vaan se on aktivoitava erikseen Jetpackin asetuksista. Sitten on seuraavan haasteen vuoro: miten muuttaa nopeasti ja yksinkertaisesti kaikkien artikkelien galleriatyyppi rectangularista tilediksi.

Ei mutta hei! Alunperin (edellisessä blogissa) tiled-tilassa olleet galleriat ovat nyt (kun kyseinen tyyppi on aktivoitu) muuttuneet automaattisesti siihen. Upeaa, olin jo ajatellut, että joudun ajamaan muutoksia suoraan tietokantaan. Tosin, galleriat piirretään edelleen liian kapeina (491 pikseliä) eivätkä ne siten aiemman blogin tapaan täytä koko palstaa.

Koska teeman muokkaus ei korjannut leveysongelmaa vaan rikkoi sivun, päätin kokeilla seuraavaksi Custom Content Width -lisäosaa. Tämä toimii, eikä ennakkoluuloistani poiketen edes riko teeman responsiivisuutta.

Permalinksit kuntoon asetuksista ("Osoiterakenne"):



Vielä pientä säätöä kuten Jetpackin mahdollistama Facebook-vimpaimen lisääminen sekä faviconin asettaminen ja sivu alkaa vihdoin näyttää samalta kuin alunperin:


Olin muuten onnistunut faviconia lisätessä rikkomaan header.php-tiedoston, minkä seurauksena jokaiselle sivulle ilmestyi ylimääräinen muotoilematon otsikko vasempaan alakulmaan. Onneksi tämä oli helppo korjata yhdellä ">"-merkillä.

Olisikohan tehtävä tässä? Pakolliset (WordPress-asennus ja esimerkkisisältö) on ainakin tehty. Sitten pitäisi tehdä neljä vapaavalintaista. Näistä ainakin teeman vaihtaminen, sisällön palauttaminen puhtaaseen asennukseen, lisäosan (plugin) asentaminen ja toimivien kuvien lisääminen on tehty, joten tehtävä pulkassa!

Lähteet:

sunnuntai 2. maaliskuuta 2014

ICT4TN003-12: Virtuaalipalvelimet ja "name based virtual hosting" Apachella

Tällä kertaa tehtävänä oli harjoitella Apachen käyttöä hankkimalla virtuaalipalvelin. Itse hankin tällaisen harjoittelu- ja kokeilukäyttöön ranskalaiselta Netcieliltä jo reilu kuukausi sitten. Päädyin palveluun, koska se oli yksi edullisimmista jollain Ubuntu-sivustolla listatuista palveluista.

Palvelu maksaa 4,5 euroa kuukaudessa ja siihen sisältyy 10 gigatavua palvelintilaa, jonka pyörittämiseen on varattu "yhden ytimen teho" ja 256 megatavua RAM-muistia. Tiedonsiirtonopeudeksi luvataan 15 megabittiä sekunnissa eikä kokonaissiirtomäärää ole rajoitettu. Viimeisimmästä lupauksesta tosin sain kuulla tunnilla, ettei tämä käytännössä koskaan pidä paikkaansa vaan jossain vaiheessa tulee raja vastaan.

Muista palveluun liittyvistä lisätoiminnoista keskeisimmäksi nousi mahdollisuus SSH-yhteyteen, joka vaikutti olevan tässä hintaluokassa enemmän poikkeus kuin sääntö.

Edullisesta hinnasta ja vaatimattomasta palvelutasostaan huolimatta palvelu on toiminut sitä käyttämäni noin kuusi viikkoa moitteettomasti.

Olen myös oppinut omalla palvelimella leikkiessäni yhtä sun toista. Esimerkiksi yksinkertainen php-etusivuni meni rikki, kun aktivoin käyttäjäkansiot edellisen tunnin harjoituksissa antamalla /etc/apache2/mods-enababled -kansiossa komennot:

sudo ln -s ../mods-available/userdir.load
sudo ln -s ../mods-available/userdir.conf

Myöhemmin tunnilla opin, että sama olisi hoitunut ketterämmin komennolla:

sudo a2enmod userdir

Apachen uudelleen käynnistyksen jälkeen käyttäjäkansioiden aktivoiminen siis johti siihen, ettei serveri enää ajanut sivuilla olevaa php-koodia vaan tulosti sen sellaisenaan näkyviin. Hämmästelin asiaa jonkin aikaa löytämättä Googlella mitään kunnollista ohjetta tai apua. Lopulta löysin Apachen mods-available-kansion php5.conf-tiedostosta kohdan, josta ongelman syy ja ohjeet postamiseen löytyivät:



On tietysti aivan ymmärrettävää, ettei oikeuksia php:n ajamiseen haluta automaattisesti antaa kaikille käyttäjille, mutta omassa tapauksessani, jossa a) olen ainoa käyttäjä ja b) sivuston juuri on omassa käyttäjähakemistossani, siitä on haittaa ei hyötyä. Siispä toimin ohjeiden mukaisesti ja vuosiluku alkoi taas näkyä sivulla, kuten pitikin.

No, tämä ei varsinaisesti kuulunut tehtävänantoon, eli siirrytään itse asiaan nimeltä nimipohjainen virtuaalipalvelin Apachella. Tämän teen oman virtuaalipalvelimeni sijaan suljetummassa ympäristössä, eli aiemmista tehtävistä tutulla testikoneella.

Vaikka yritin suorittaa tehtävän pilkulleen verkosta löytämieni ohjeiden mukaisesti, en saanunt enää Apachea käyntiin. Httpd.conf jäi tämän näköisesksi:



Uudelleenkäynnistys antoi tällaiset virheet:



Ja Apachen omasta error.logista ei juurikaan ollut apua varsinkaan, kun sinne tulostui sama rivi, vaikka olin tehnyt käsin tuon lokitiedoston:



Kokeilin tehtävää vielä ohjeilla, jotka olivat kurssitoverilla toimineet, mutta tämäkään ei toiminut. Mahtaako sitten johtua, että käytössäni oli vanhempi Ubuntu, josta en esimerkiksi löytänyt lisäsäätöä vaatinutta /etc/NetworkManager/dnsmasq.d/hosts.conf-tiedostoa.

Lähteet:

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:

lauantai 25. tammikuuta 2014

ICT4TN003-12: LAMP-asennus

Blogi herää pitkän tauon jälkeen henkiin ja syynä on uusi kurssi, jonka tehtävät suositeltiin tehtävän tällä tavoin julkisesti. Eli tästä se taas alkaa.

Tehtävänä on ratkaista aiemmin käydyn kurssin (Työasemat ja tietoverkot) Linux-koe. Suoritan tehtävän vanhalla, nurkassa pölyttyneellä HP-pöytäkoneella, jota käytin jo aikanaan harjoitteluun tuolla samaisella kurssilla. Otin koneen käyttöön "uutena" ja asensin siihen live-CD:ltä Ubuntu 12.04 LTS -käyttöjärjestelmän. Myöhemmin, ehkä jo aika pian, tarkoituksenani on hankkia itselleni virtuaaliserveri paitsi tällaiseen treenailuun myös olutblogin uudeksi (=joustavammaksi) alustaksi.

Asentamisen jälkeen pikainen testailu osoittaa, että tehtävän ensimmäinen osio on suoritettu, sillä samalla asentuivat nettiselain (Firefox)  ja tekstinkäsittelyohjelma (LibreOffice Writer). Asennuksen aikana annettu WLAN-salasana oli tosin unohtunut uudelleenkäynnistyksen aikana, joten se piti antaa vielä uudestaan. Muuten kaikki toimi suoraan aivan kuten pitikin. Esimerkiksi näppäimistön kieliasetus oli pysynyt tallessa.

Seuraavaksi päästäänkin itse asiaan eli tekemään asennuksia ja laittamaan asetuksia terminaalin kautta näpyttelemällä. Aloitetaan käyttäjätunnuksien luonnilla, joka onnistuu komennolla:

sudo adduser evahak

Sitten vain annetaan mahdolliset lisätiedo ja lisätään samalla logiikalla myös kolme muuta käyttäjää. Tämän jälkeen voidaan tarkastaa käyttäjät komennolla:

cat /etc/passwd

Pitkän listan lopusta löytyvät juuri tehdyt käyttäjät tietoineen.

Yksinkertainen shell-skripti, joka näyttää vapaan levytilan sekä ip-osoitteen, onnisttu kirjoittamalla:

nano mystatus

Tämän jälkeen kirjoitetaan itse skripti:

#!/bin/bash
# Shows the amount of free disc space and IP-address
df -h
ifconfig

Ja tallennetaan painamalla Ctrl+X ja sen jälkeen Y. Tämän jälkeen annetaan muillekin oikeudet lukea tai ajaa kyseinen skripti:

chmod 755 mystatus

Sitten siirretään tiedosto kaikkien saataville:

sudo mv mystatus /bin

Ja koska ei ole mitään syytä olla tähtäämättä huipputulokseen, asennetaan vielä Apache, MySQL ja PHP. Varmistetaan aluksi, että koneella on tiedot uusimmista versioista kirjoittamalla:

sudo apt-get update

Lyhyen ajon jälkeen jatketaan varsinaiseen asennukseen:

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install apache2
sudo apt-get install php5
sudo service apache2 restart

Tämän jälkeen Firefox löytää "It works!" -sivun, kun osoitteeksi kirjoittaa localhost. Jatketaan vielä PhpMyAdminin asennuksella näiden ohjeiden mukaan:

sudo apt-get install phpmyadmin
sudo nano /etc/apache2/apache2.conf

Lisätään tiedoston loppuun rivi:

Include /etc/phpmyadmin/apache.conf

Ja käynnistetään Apache vielä kerran uudelleen:

sudo service apache2 restart

Ensi viikolla taas lisää tätä. Sitä ennen ehkä muuta lätinää opintojen etenemisestä.

Lähteet: