Ads 468x60px

torstai 27. kesäkuuta 2013

Java haittaohjelman tutkimista

Haittaohjelmien tutkimisessa kannattaa olla huolellinen. Niiden tutkimiseen on syytä olla eriytetty ympäristö, jonka voi tyhjentää ja uudelleenasentaa tutkimisen jälkeen. Esimerkiksi niiden suorittaminen debuggaus -ympäristöissä voi johtaa tietokoneiden saastumiseen.

Eräällä seuraamallani foorumilla oli klassinen tapaus, jossa eräs henkilö etsi hyväuskoisia käyttäjiä tarkoituksenaan tartuttaa heidän tietokoneisiinsa haittaohjelma. Kyseinen henkilö liittyi foorumille ja välittömästi loi 3 uutta keskusteluketjua ja kussakin keskustelunavauksessa oli linkki hänen omiin "työkaluihinsa". Viesteissä hän pyysi käyttäjiä testaamaan sovelluksia ja antamaan niistä palautetta. Tämän jälkeen kyseinen henkilö ei enää kirjautunut foorumiin.

Tämä herätti epäilykseni sovellusten luotettavuudesta ja päätin perehtyä asiaan. Ensin latasin yhden sovelluksen ja lähetin sen www.virustotal.com:iin tutkittavaksi. Kyseisessä palvelussa tiedostot skannataan 46 antivirussovelluksella ja niiden tulokset saadaan lähes välittömästi. Haittaohjelmahavaintoja ei tarkastusten mukaan löytynyt. Foliohattu oli kuitenkin niin tiukasti päässäni että päätin tutkia asiaa itse tarkemmin.

Kyseinen sovellus oli Javalla toteutettu ja siksi helpommin tutkittavissa kuin perinteinen sovellus, joka käännetään konekieleksi. Java käännetään tavukoodiksi, jolloin sen toiminnan selvittäminen on helpompaa.

Java-sovellusten tutkimisessa tarvitaan yleensä kahta työkalua: yhtä purkamaan jar-paketeissa olevat tiedostot ja toista palauttamaan käännetty tavukoodi takaisin lähdekoodiksi. Käytin tässä tapauksessa tutkimiseen linux komentorivin unzipiä sekä tavukoodin palauttamiseen Java Decompileria.

Koska kyseessä oli jar-pakattu sovellus, purin sen ensin käyttämällä unzipia ja sain purettua esiin normaalin Java-paketin sisällön: .class-tiedoston, jossa tavukäännetty javakoodi on, favicon.ico-tiedoston (.ico tiedostoja käyteteään yleensä sovellusten pikakuvakkeissa) ja Manifest-kansion.

Palautin tavukoodin lähdekoodiksi Java Decompilerilla ja foliohattu painui jälleen syvemmälle päähäni: koodi oli - joskin huonosti - obfuskoitu. Hetken sitä tutkittuani totesin, että sen ainoa tarkoitus on purkaa Favicon.ico tiedosto sekä suorittaa sen sisällä olevat sovellukset. Favicon.ico ei siis ollutkaan ikonitiedosto vaan vain uudelleennimetty zip-tiedosto. Vahvistin tämän vielä Linuxin file -komennolla, joka tutkii tiedostoa ja sen perusteella arvaa sen varsinaisen sisällön.

Varsinainen haittaohjelmakoodi löytyi Favicon.ico-tiedostosta nimellä 1java_tool.jar. Sen sisällä oli useita .adwind päätteisiä tiedostoja sekä muutama java class -tiedosto. Adwind pääte oli minulle vieras eikä file -komentokaan tunnistanut tiedostoa. Keskityin sitten löytyneisiin class -tiedostoihin ja löysin niistä custom class loaderin, joka ei vain ladannut ja suorittanut javakoodia, vaan myös purki salauksen, jolla .adwind tiedostot oli salattu. Kävi ilmi, että .adwind -päätteiset tiedostot olivat salattuja ja pakattuja java class tiedostoja.

Paketissa oli myös config.xml -tiedosto, joka osoittautui samalla algoritmilla salatuksi, tosin salausavain oli eri. Tiedostosta löytyi mm. master palvelimen DNS-nimi sekä portti, johon troijalainen ottaa yhteyttä. Master -palvelimen avulla haittaohjelman levittäjä pystyy hallitsemaan saastuneita koneita.

Tein pienen koodinpätkän, jonka avulla sain purettua .adwind tiedostot .class tiedostoiksi ja sain kuin sainkin selville, mitä haittaohjema tekee. Kyseinen haittaohjelma oli Remote Access Tool -troijalaienn ja se otti yhteyden hallintapalvelimeen ja käytännössä salli hyökkääjälle pääsyn kohdekoneeseen nykyisen käyttäjän oikeuksin.

Troijalainen oli tehty siten, että sen toiminnallisuutta oli helppo laajentaa. Siihen oli tehty plugin-rakenne ja lisäksi se pystyi päivittämään itsensä ja jopa lataamaan suoritettavia java-tiedostoja isäntäpalvelimelta.

Trojalainen kerää ensin tiedot tietokoneesta, johon se on asennettu. Tämän jälkeen tiedot lähetetään master-palvelimelle ja odotetaan käskyjä. Ilman laajennoksia Trojalainen voi mm:

  1. ottaa kuvankaappauksia ja lähettää ne master-palvelimelle
  2. näyttää dialogeja käyttäjälle (pyytää käyttäjältä tietoja)
  3. avata internet selaimen mihin tahansa osoitteeseen
  4. hallita näppäimistöä ja hiirtä
  5. käyttää saastunutta konetta osana DDoS-hyökkäyksissä
  6. ladata ja suorittaa jar-tiedostoja
  7. päivittää itsensä


Haittaohjelmassa on myös mahdollisuus asettaa se käynnistymään automaattisesti, kun käyttäjä kirjautuu sisään tietokoneelleen. Tämä on Windows -alustalla toteutettu rekisteriä muokkaamalla, Linuxissa autostartin ja Macissä LaunchAgentsien avulla.

Haittaohjelma piiloutuu Windowsissa asettamalla asennuskansionsa Recycle Biniksi desktop.ini-tiedoston avulla. Tämä on melko perinteinen kikka haittaohjelmakoodeissa. Lisäksi kaikille tiedostoille asetetaan System, Hidden ja Read Only -määreet. Maceissä kansio piilotetaan chflags hidden -komennolla ja Linuxeissa luotetaan asennuskansion nimeämiseen pisteellä alkavaksi.

Huomattavaa tutkimuksen aikana on, että en missään vaiheessa ajanut itse tiedostoa, vaan erilaisilla työkaluilla selvitin sen rakennetta ja toimintaa. Mikäli olisin jossain vaiheessa halunnut ajaa ohjelman, olisin tehnyt sen virtuaalikoneessa, jossa ei ole verkon kautta lainkaan yhteyttä muihin koneisiin.

Ei kommentteja:

Lähetä kommentti