Apache, mySql ja phpAdmin

Ubuntun versio 10.0.4

Aika la 18.2.2012 klo 9-13:15

Tämän viikon aiheena on webbi-palvelimen pystytys Linuxille. Tarkoituksenani oli tehdä asennus live-rompulle, jotten sotkisi jo olemassa olevaa asennustani, mutta ajatus tyssäsi alkuunsa verkkoyhteyden puuttumiseen. Jostain kumman syystä langaton verkkoyhteys live-rompulta ei onnistunut, vaikka langaton verkkoyhteytemme näkyi saatavilla olevissa yhteyksissä. Tunnistautuminen avainrenkaalla ei onnistunut.

Koneellani on siis toiminnassa oleva Apache2-asennus (asennettu keskiviikkona 25.2.2011 komennolla: $ sudo apt-get install apache2), joten asennan sen rinnalle mySql-kannan ja phpAdminin. Asennuksen ohjeet katson Tero Karvisen kotisivuilta.

Alla kuva yksinkertaisesta kotisivustani /home/a1003645/public_html -hakemistossa:

Asennan mySql-kannan ja phpmyadmin-hallintatyökalun komennolla:

$ sudo apt-get install mysql-server phpmyadmin

Päivitän asennuspaketit:

§ sudo apt-get install

Asennan mySql-kannan ja phpmyadmin-hallintatyökalun komennolla:

$ sudo apt-get install mysql-server phpmyadmin

Annan mySql-kannan salasanan

ja valitsen webbi-palvelimeksi Apache2:n ja automaattisen tietokannan konfiguraation dbconfig-komennolla.

Asennus onnistui, sellä selaimella osoite http://localhost/phpmyadmin-osoite antaa minulle phpAdmin-käyttöliittymän. Kirjaudun sisään käyttäjätunnuksella root, sekä asennusvaiheessa antamallani salasanalla.

Luon public_html -hakemiston alle geditillä uuden welcome.htm sivun, joka näyttää tältä:

Nimeän welcome.htm -tiedoston welcome.php:ksi komennolla:

$ mv welcome.htm welcome.php

Lisään welcome.php:n hötskän sisään hieman php-koodia:

<?
//Ohjelma tulostaa sarjaa 1, 5, 25, 125, …, kunnes sarjan jäsenen arvo on yli 30000.
$i;

for ($i=1; $i <= 30000; $i*5)
{
echo $i.'<br />’;
$i = $i*5;
}
?>

Yrittäessäni avata  Firefoxilla tätä welcome.php -sivua, saan FF:ltä vain kysymyksen, että millä sen tahdon avata. Firefox ei osaa avata tätä .php-tiedostoani!

Googlaan hieman ongelmaani ja Ubuntu-forumilta paljastuu, että kyseessä lienee ongelma Ubuntun 10.0.4-versiossa, joka siis minullakin on käytössäni. Selviää, että /etc/apache2/mods-enabled/php5.conf -tiedostossa on joitakin rivejä, jotka estävät /home/*/public_html -hakemistoon asennettujen .php -tiedostojen toiminnan selaimessa.

/etc/apache2/mods-enabled/php5.conf -tiedoston sisältö on:

<IfModule mod_php5.c>
    <FilesMatch ”\.ph(p3?|tml)$”>
    SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch ”\.phps$”>
    SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule …> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

Kommentoin <IfModule mod_userdir.c> ja </IfModule> -väliset rivit ja restarttaan apache2:n komennolla:

$ sudo /etc/init.d/apache2 restart

Ongelma ei poistu vieläkään. Seuraavaksi luen ohjeita tältä sivulta ja teen uuden sivun defaultin pohjalta:

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mysite

Avaan uuden mysite-sivuni tekstieditoriin ja muokkaan sen sisältämät rivin:

DocumentRoot ja Directory rivit osoittamaan /var/www -hakemiston sijasta omaan public_html-hakemistooni:

    DocumentRoot /home/a1003645/public_html/
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/a1003645/public_html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

Seuraavalla komennolla otan tämän uuden hakemiston käyttöön:

§ sudo a2dissite default && sudo a2ensite mysite

Site default disabled.
Run ’/etc/init.d/apache2 reload’ to activate new configuration!
Enabling site mysite.
Run ’/etc/init.d/apache2 reload’ to activate new configuration!
a1003645@sanna-laptop:/etc/apache2/sites-available$

Lopuksi vielä apachen restartti:

§ sudo /etc/init.d/apache2 restart

Homma toimii!!!

Metapaketteja

Metapaketti on näppärä tapa asentaa Linuxille/Unixille ohjelmia. Metapaketti ei sisällä itse ohjelmakoodia, vaan ikään kuin linkin siihen ja sen riippuvuuksiin. Metapaketteja käyttäen ohjelmistoja voidaan asentaa ja hallita keskitetysti. Metapaketti päivittää automaattisesti ohjelmista uusimmat versiot.  Seuraavaksi rakennan metapaketin käyttäen Dependicer-ohjelmaa. Ohjeita metapakettien luontiin dependicerin avulla ja itse dependicerin asennuspaketin saan Tero Karvisen sivuilta.

Asennan Dependicer-ohjelman paketin koneelleni Teron sivuilta, teen sille oman hakemiston /opt/Dependicer ja puran sen sinne. Jotta purku onnistuu, joudun muuttamaan hakemiston omistajaa omalle tunukselleni. Sudo-komennolla omistajaksi tuli root, mutta komennolla

$ sudo chown oma_tunnus Dependicer

muutan omistajan omaksi tunnuksekseni, jolloin saan paketin purettua sinne.

-rwxrwx–x 1 oma_tunnus oma_tunnus 2419 2011-09-14 13:32 dependicer
-rw-rw—- 1 oma_tunnus oma_tunnus   258 2011-09-14 14:46 dependicer-packages.dpd

Dependicer-packages.dpd-tiedostoa voidan muokata ja tallentaa sinne haluttu metapaketin sisältö.  Tutkin dependicer-packages.dpd-tiedostoa nano-editorilla:

GNU nano 2.2.2         File: dependicer-packages.dpd

# Multiple metapackages for dependicer
# package:      dependency1, dependency2…
dependicer-coding:   nano emacs git bzr
dependicer-graphics: inkscape, gimp
dependicer-server: apache2
dependicer-workstation:      teros-coding, teros-drawing, dependicer-server

Muokkaan dependicer-packages.dpd:n sisältöä seuravanlaiseksi:

# Multiple metapackages for dependicer
# package:      dependency1, dependency2…
dependicer-coding:   nano emacs git bzr
dependicer-graphics: inkscape, gimp, shutter
dependicer-server: apache2
dependicer-workstation:    dependicer-server

Seuraavaksi luon metapaketin komennolla

§ ./dependicer dependicer-packages.dpd

Tuloksena neljä kpl metapaketteja Dependicer-hakemistossani:
-rwxrwx–x 1 oma_tunnus oma_tunnus 2419 2011-09-14 13:32 dependicer
-rw-r–r– 1 oma_tunnus oma_tunnus 2120 2012-02-11 09:30 dependicer-coding_0.20120211.0930_all.deb
-rw-r–r– 1 oma_tunnus oma_tunnus 2120 2012-02-11 09:30 dependicer-graphics_0.20120211.0930_all.deb
drwxr-xr-x 2 oma_tunnus oma_tunnus 4096 2012-02-11 09:30 dependicer-output
-rw-rw—- 1 oma_tunnus oma_tunnus  236 2012-02-11 09:28 dependicer-packages.dpd
-rw-r–r– 1 oma_tunnus oma_tunnus 2094 2012-02-11 09:30 dependicer-server_0.20120211.0930_all.deb
-rw-r–r– 1 oma_tunnus oma_tunnus 2102 2012-02-11 09:30 dependicer-workstation_0.20120211.0930_all.deb

Kurkistan dependicer-output-hakemistosta erikseen jokaisen paketin outputin. Dependicer-graphic-paketilla se on tällainen:

# Created with dependicer. Build with ’equivs-build dependicer-graphics’
Section: misc
Priority: optional
Standards-Version: 3.6.2
Package: dependicer-graphics
Version: 0.20120211.0930
Maintainer: Undefined Maintainer <nomail@example.com.invalid>
Depends: inkscape, gimp, shutter
Description: Metapackage
Installed files listed in dependencies
dependicer-graphics.cfg (END)

Tarkistan vielä lintianilla pakettien eheyden, esimerkkinä dependicer-coding:

§ lintian dependicer-coding_0.20120211.0930_all.deb

Kaikki pakettini ovat eheitä. Seuraavaksi allekirjoitan pakettini debsign-ohjelmaa käyttäen. Asennan debsign-ohjelman:

$ sudo apt-get install devscripts

Generoin aluksi itselleni gpg-avaimen komennolla (Tässä kohtaa katson mallia Purple Floydin sivuilta):

§ gpg –gen-key

Valitsen default-arvot ja syötän omat tietoni nimen ja spostin kyselyyn. Lopputulemana oma avainpari, jolla voin allekirjoittaa luomani metapaketit 🙂

dbgpg: /home/oma_tunnus/.gnupg/trustdb.gpg: trustdb created
gpg: key 2A981094 marked as ultimately trusted
public and secret key created and signed.

Yritän allekirjoittaa Dependicerillä tehdyt pakettini debsign-ohjelmalla. Debsignille pitäisi antaa parametrina joko .changes, .dsc tai .commands -päätteinen tiedosto. Googlaan ja haen tiedostojärjestelmästä, mutta en löydä tähän ohjetta. Dpkg-buildpackage -ohjelma hoitaisi koko paketoinnin, myös allekirjoituksen, mutta tässä oli tarkoitus käyttää debsignia. Monen tunnin tuhraus tähän saa nyt riittää ja siirryn pakettivaraston teko hommiin.

Pakettivarasto tehdään reprepro-ohjelman avulla. Ohjeet pakettivaraston luontiin reprepro:lla löytyy AwaseConfigurationsin blogista (http://awaseconfigurations.wordpress.com/2011/10/26/reprepro/).

Ensin asennetaan reprepro:

§ sudo apt-get install reprepro

Luodaan hakemisto nimeltään conf

§ mkdir conf

sekä sen alle tiedosto distributions (aluksi loin jakelut-nimisen tiedoston, mutta se ei kelvannut myöhemmässä vaiheessa), jonka sisältö on tämä:

Origin: Sanna
Label: Sanna-All
Suite: stable
Codename: natty
Version: 0.1
Architectures: i386 amd64 source
Components: main non-free contrib
Description:  SannanJakelut

Ajetaan komento:

$ reprepro -Vb . includedeb natty /opt/Dependicer/dependicer-graphics_0.20120211.0930_all.deb

joka luo liudan hakemistoja:

Created directory ”./db”
/opt/Dependicer/dependicer-graphics_0.20120211.0930_all.deb: component guessed as ’main’
Created directory ”./pool”
Created directory ”./pool/main”
Created directory ”./pool/main/d”
Created directory ”./pool/main/d/dependicer-graphics”
Exporting indices…
Created directory ”./dists”
Created directory ”./dists/natty”
Created directory ”./dists/natty/main”
Created directory ”./dists/natty/main/binary-i386”
Created directory ”./dists/natty/main/binary-amd64”
Created directory ”./dists/natty/main/source”
Created directory ”./dists/natty/non-free”
Created directory ”./dists/natty/non-free/binary-i386”
Created directory ”./dists/natty/non-free/binary-amd64”
Created directory ”./dists/natty/non-free/source”
Created directory ”./dists/natty/contrib”
Created directory ”./dists/natty/contrib/binary-i386”
Created directory ”./dists/natty/contrib/binary-amd64”
Created directory ”./dists/natty/contrib/source”

Lataan muutkin .deb-pakettini tähän varastoon. Distribution-tiedosto ja sen codename natty ilmeisesti linkkaavat näihin reprepro:n synnyttämiin db-, pool- ja dists-hakemistojen alla oleviin tiedostoihin, jotka sisältävät tiedot asennuspaketeista.

Rosvoja ja kunnon kansalaisia

Viikon tehtävänä oli tutkia verkossa vuonna 2001 tapahtunut rikos. Honeynet-projekti asettaa hunajapurkkeja, eli syötti-koneita   verkkoon odottamaan hyökkäystä. Maaliskuun 15. 2001 tällaiseen hunajapurkkiin hyökättiin ja siitä tehtiin case nro 15 (http://old.honeynet.org/scans/scan15/), jolla jokainen tietoverkkorikostutkijan urasta haaveileva voi testata kykynsä. Tässä case15:ssä tehtävänä on löytää hyökkääjän asentama rootkit, eli haittaohjelma. Alla omat toimeni ja tutkimukseni rikoksesta.

Asennettuani VirtualBox OSE-virtuaalikoneen Ubuntun 11.04-käyttiksellä ja sen jälkeen tutkintaohjelma Autopsyn, yritin asentaa erikseen vielä Sleuthkitin, mutta se olikin asennettu jo Autopsyn mukana.

Seuraavaksi latasin http://old.honeynet.org/scans/scan15/ -sivustolta pakatun levykuvan, purin sen komennolla tar -xf honeynet.tar.gz. Komento luo honeynet-hakemiston. Tämän jälkeen loin uuden hakemiston nimeltään honey15 komennolla mkdir honey15, jonne mounttasin honeynet-levykuvan komennolla:

sudo mount /home/aXXXXXXX/honeynet/honeypot-hda8.dd /home/a1003645/honeynet15 -o loop.

Komennosta jäi pois noexec ja nodev-parametrit, joita en millään saanut päähäni (myöhemmin huomasin ne casen kotisivulla). Mounttaamisen jälkeen avaan autopsy-ohjelman komennolla sudo autopsy ja valitsen terminaalista linkin selaimeen.

Aloitan tutkijan hommat valitsemalla Open case ja seuraavasta New case. Luon uuden Honey15-nimisen keissin ja tutkijanimekseni kirjoitan Sanna. Tutkittavan koneen nimeän defaulttina host1:ksi. Add image-kohtaan anna ao. arvot ja siirryn nextillä eteen päin. Ignooraan Hash value-arvojen tarkistukset.

Valitsen Analyzen ja aloitan tutkintani tiedostoista. Ensimmäisen kerran epäilykseni herää /etc-hakemistossa, jonka altalöydä mtab-tiedoston, jota järjestelmä käyttää mounttausten tallentamiseen. Löydän myös epäilyttävän mtab~ -tiedoston, joka ei näytä laisinkaan mtabilta, vaan sisältää smurf-, linsnffer yms. rivejä, ks. kuva alla.

Seuraava jännittävä löydös on /root/.bash_history -tiedosto, jonka mukaan viimeiset komennot ovat olleet:


Löydöstä innostuneena hain Autopsylla Keyword search-toiminnolla ”mech”:iä. Löysin fragmentista 9086 epäilyttävää sisältöä.

Sen perusteella kävin vielä tarkistamassa /dev/.ida -hakemiston sisällön. Ko. hakemistossa oli tcp.log-niminen tiedosto, jossa näkyi mm. ns2.giant.net -niminen Yhdysvaltalainen osoite, joka on usealla mustalla listalla netissä, asdf1 lienee sen hostname tms.

Rootkittiä en ole vielä löytänyt, enkä oikein edes tiedä mitä etsin, joten päädyn takaisin /etc-hakemistoon. Tarkistan sen alta löytyvän hosts-tiedoston, jossa siis määritellään ne koneet, jotka saavat ottaa yhteyden tähän honeypot-koneeseemme. Sieltä löytyykin pari ip-osoitetta 172.16.1.108 ja -109. 108:n hostnamena on tuttu asdf1. Tämän honeypotin hostname:ksi lienee vaihdettu tuo asdf1 edellisessä kohdassa (mech-kohta yllä).

Luen Linuxforumilta (http://www.linuxforu.com/2011/09/rootkits-the-enemy-within/). Rootkitin määritelmän mukaan rootkit koostuu yleensä useista tavallisista binääri-paketeista, mm. linsnifferistä ja lokeja muokkaavista sovelluksista. Muistan nähneeni tämän linsnifferin jossain tiedostojärjestelmässä pyöriessäni.

Haen Autopsyn Keyword searchilla linsniffer:iä ja löydän sen yllä mainitusta /dev/ida/.drag-on -hakemistosta. Samassa hakemistossa on myös lokeja sormeilevia sovelluksia yms. Uskon löytäneeni rootkitin täältä /dev/ida/.drag-on -hakemistosta. Piste hakemiston edessä tarkoittaa että hakemisto on piilotettu. Sitä ei siis ole deletoitu kokonaan. Bonus-kysymyksessä kysytään, että asennettiinko rootkittiä varsinaisesti koskaan. Varmaa vastausta en tiedä, mutta tämän rootkitin sisältö saattaa sisältää ihan tavallisia Linuxin asennuksessa asennettuja paketteja, joita on vain muokattu.

Tein tehtävää kolmen päivän aikana, yhteensä noin 8-10 h.