- COMP.SEC.100
- 7. Haittaohjelmat ja hyökkäystekniikat
- 7.1 Haittaohjelmat
Haittaohjelmat¶
Haittaohjelmalla (engl. malware = malicious software) tarkoitetaan ohjelmaa, joka tekee tarkoituksellisesti jotain haitallista. Haittaohjelmatyyppejä ovat mm. virukset, madot, Troijan hevoset, vakoiluohjelmat (spyware), botnet-haittaohjelmat ja kiristyshaittaohjelmat (ransomware)
Viruksen ja madon määritelmä on lähes yksiselitteinen: Ohjelma (tai koodinpätkä) kykenee tekemään itsestään rekursiivisesti ja itsenäisesti leviäviä kopioita. Rekursiivisuus tarkoittaa tässä sitä, että kopioilla on samat kyvyt. Kopioiden ei silti tarvitse olla identtisiä eikä jokaisen kopion tarvitse kyetä leviämään. Määritelmä ei sellaisenaan ota kantaa haitallisuuteen.
Troijan hevosella tarkoitetaan ohjelmaa, joka sisältää tai vaikuttaa sisältävän jonkin hyödyllisen toiminnon, mutta siihen on tarkoituksella piilotettu jokin haitallinen toiminto. Toisin kuin virus ja mato, Troijan hevonen ei leviä itsenäisesti.
Botnet-haittaohjelmalla tarkoitetaan mitä tahansa haittaohjelmaa, joka on osa botnettiä eli joukkoa tietokoneita tai laitteita, jotka yhdessä pystyvät tekemään ohjattuja hyökkäyksiä. Botnet-verkko on tyypillisesti muodostettu murretuista koneista, joista osa on ohjauskoneita (master) ja osa ohjattavia koneita (slave).
Haittaohjelmien luokittelu¶
Haittaohjelmia on monenlaisia ja tarkka luokittelu ei ole aina mahdollista. Haittaohjelma edellyttää tahallista haitallista tarkoitusta, mutta tekijän mieltä ei voi tietää. Alun perin normaaliin käyttötarkoitukseen kehitettyä ohjelmaa voidaan soveltaa haitallisesti, esimerkkinä ohjelma, joka poistaa tiedostoja. On silti tärkeää tutustua luokitukseen, jotta haittaohjelmia pystyy ymmärtämään sekä käyttämään ja kehittämään suojautumiskeinoja. Tässä esitetään Cybokin mukainen luokittelu (ja suluissa muutamia huomautuksia eriävistä luokitustavoista).
Keskeinen jako on, onko haittaohjelma itsenäinen vai osa jotain toista ohjelmakoodia. Tämä on yksi tapa erotella madot ja virukset: molemmat kykenevät tekemään rekursiivisesti leviäviä kopioita itsestään. Madot ovat itsenäisiä, kun taas virukset ovat osa jotain toista ohjelmakoodia. (Tästä eroava määritelmä on luokitella madot virusten osajoukoksi.) Itsenäinen tiedostossa oleva haittaohjelma on helpompi löytää, koska tiedoston sormenjälki on löydettävissä. Viruksen lisäksi isäntäohjelmaa edellyttäviä haittaohjelmia ovat mm. haitalliset selainten liitännäiset, selaimissa ajettavat skriptit ja ohjelmien makrot.
Haittaohjelma voi olla pysyvä tai poistuva. Useimmat haittaohjelmat ovat pysyviä (persistent) eli tyypillisesti osa tiedostojärjestelmää. Haittaohjelma on poistuva (transient, myös muistinvarainen, memory-resident) silloin, kun se on asennettu osaksi (keskus)muistia, josta se katoaa kun laite sammutetaan. Esimerkiksi osa IoT-laitteisiin tarttuvista haittaohjelmista poistuu, kun laitteen käynnistää uudestaan. (Viruksiin on usein rakennettu sekä keskusmuistiin jäävä osa, että pysyvä tiedostossa oleva osa, jolloin haittaohjelma ei poistu.)
| Haittaohjelma | Isäntäohjelma vai ilman | Pysyvä vai poistuva | Järjestelmän kerros | Automaattisesti leviävä? | Päivitettävissä? | Koordinoitu? |
|---|---|---|---|---|---|---|
| Virukset | Isäntäohjelma | Pysyvä | Laiteohjelmistosta ylöspäin | Kyllä | Kyllä | Ei |
| Haitalliset selainlaajennukset | Isäntäohjelma | Pysyvä | Sovellus | Ei | Kyllä | Kyllä |
| Botnet-haittaohjelma | Molemmat | Pysyvä | Kernelistä ylöspäin | Kyllä | Kyllä | Kyllä |
| Muistiinjäävä haittaohjelma | Ilman | Poistuva | Kernelistä ylöspäin | Kyllä | Kyllä | Kyllä |
Monet haittaohjelmat sisältävät hämäännyttämistä (obfuscation). Tavoitteena on löytämisen vaikeuttaminen sekä manuaalisesti että automaattisesti. Tähän on useita tekniikoita ja haittaohjelmien tekijät voivat käyttää valmiita työkaluja. Yksi jo 1990-luvulla joidenkin virusten käyttämä tekniikka on muuntuvuus eli polymorfisuus. Tämä tarkoittaa, että haittaohjelman kopiot poikkeavat toisistaan. Toteuttamiseen on erilaisia tekniikoita, kuten ohjelmakäskyjen järjestyksen muuttaminen, saman toiminnon eri käskyillä toteuttaminen, tyhjät käskyt, pakkaaminen ja salakirjoitus. Salakirjoitettaessa voidaan käyttää vaihtuvaa avainta. Kun haittaohjelma on joka kerralla riittävän erilainen, perinteinen tapa verrata binäärikoodia tai sen osia ennalta tallennettuun bittijonoon ei enää toimi tunnistamisessa.
Tietyn haittaohjelman pysyvää bittijonoa kutsutaan sen sormenjäljeksi (fingerprint). Kyseessä voi olla bittijonojen yhdistelmä, sillä joissain haittaohjelmissa polymorfisuus kattaa osia koodista, mutta jotkin osat ovat pysyviä. Täysin polymorfisen haittaohjelman sormenjälki voi siis olla joka kerta erilainen. Haittaohjelman purku on kuitenkin oltava viruksen itsensä tehtävissä, joten koodia analysoimalla sen purkumekanismi on mahdollista jäljittää. Torjuntaohjelma voi myös virtuaalisesti suorittaa haittaohjelman koodia riittävän pitkälle ja saa näin salauksen puretuksi ja ohjelman tunnistetuksi.
Virus liittyy osaksi isäntäohjelmaa lisäämällä siihen haitallisen koodin siten, että kun isäntäohjelma suoritetaan, myös viruskoodi ajetaan. Virus etsii muita tartutettavia kohteita ja liittää itsensä osaksi niitä. Virus voi olla myös päivitettävissä, jos se pystyy ottamaan internet-yhteyden.
Mahdollisesti ei-toivotut ohjelmat¶
Jotkin ohjelmat ovat mahdollisesti ei-toivottuja (Potentially Unwanted Program, PUP). Sellaiset voivat olla jossain tilanteessa haitallisia mutta toisissa haluttuja. Raja ei ole itsestään selvä, sillä ohjelman käyttöyhteys ja käyttäjä vaikuttavat. PUP-ohjelma on tyypillisesti jokin hyödyllinen ohjelma, joka sisältää haitallisen toiminnon. PUP-ohjelmat sisältävät usein tiedon toiminnastaan käyttöehdoissaan. Harva kuitenkaan huomaa, mitä niissä kerrotaan.
Yksi esimerkki PUP-ohjelmasta on ohjelma, joka sisältää mainoksia (Adware). Tyypillisesti PUP-ohjelma myös kerää tietoa käyttäjästä. Jos tämä tapahtuu ilman käyttäjän lupaa, on kyseessä vakoiluohjelma (Spyware). Vakoiluohjelma voi olla tietoisesti tehty keräämään laajakin joukko tietoa, kuten yhteystietoja ja salasanoja. Tällöin kyse on selkeästä haittaohjelmasta.