• Ei tuloksia

Kiristyshaittaohjelmien salausalgoritmit ja lunnasliikenne - kahden avoimen tietoaineiston eksploratiivinen data-analyysi

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Kiristyshaittaohjelmien salausalgoritmit ja lunnasliikenne - kahden avoimen tietoaineiston eksploratiivinen data-analyysi"

Copied!
52
0
0

Kokoteksti

(1)

KIRISTYSHAITTAOHJELMIEN SALAUSALGO- RITMIT JA LUNNASLIIKENNE - KAHDEN AVOIMEN TIETOAINEISTON EKSPLORATIIVI-

NEN DATA-ANALYYSI

Henri Toivanen

Pro-Gradu -tutkielma

Tietojenkäsittelytieteen laitos Tietojenkäsittelytiede

Toukokuu 2021

(2)

i

ITÄ-SUOMEN YLIOPISTO, Luonnontieteiden ja metsätieteiden tiedekunta, Kuopio Tietojenkäsittelytieteen laitos

Tietojenkäsittelytiede

Henri Toivanen: Kiristyshaittaohjelmien salausalgoritmit ja lunnasliikenne – kahden tietoaineiston eksploratiivinen data-analyysi

Pro gradu –tutkielma, 46 sivua

Pro gradu –tutkielman ohjaaja: FT Virpi Hotti Toukokuu 2021

Kiristyshaittaohjelmat ovat haittaohjelmien alakategoria, jonka tarkoituksena on ra- joittaa uhrinsa pääsy tämän tietokonejärjestelmään, joko salaamalla sen tiedostoja ja ohjelmia tai lukitsemalla. Kirjallisuuskatsauksen lisäksi tutkielmassa tarkasteltiin kahta eri tietoaineistoa (Ransomware Payments in the Bitcoin Ecosystem ja Ran- somware Overview), joista toisessa oli listattuna eri kiristyshaittaohjelmia ja niistä löydettyjä ominaisuuksia ja toisessa oli seurattu eri kiristyshaittaohjelmien Bitcoin- osoitteiden avulla niistä maksettuja lunnaita. Näiden tietoaineistojen avulla pyrittiin löytämään, kuinka hyvin tietoaineistojen kiristyshaittaohjelmat vastaavat kirjalli- suuskatsauksessa löydettyjä kiristyshaittaohjelmien ominaisuuksia ja menetelmiä.

Tämän lisäksi tarkasteltiin, kuinka eri ominaisuudet ovat vaikuttaneet kiristyshaitta- ohjelmiin maksetuista lunnaista.

Kirjallisuuskatsauksessa havaittiin, että kiristyshaittaohjelmat ovat käyttäneet sym- metrisisiä, epäsymmetrisisiä sekä hybridejä salausmenetelmiä. Hybrideissä salaus- menetelmissä hyödynnetään sekä symmetrisiä että epäsymmetrisiä salausmenetel- miäkin. Kuitenkin tietoaineistoja tutkittaessa huomattiin, että kiristyshaittaohjelmat ovat käyttäneet näiden menetelmien lisäksi muun muassa hajautusalgoritmeja. Tieto- aineistoja tutkittaessa huomattiin, että suurimmat lunnaat oli maksettu niille kiristys- haittaohjelmille, jotka olivat käyttäneet salausmenetelmänään symmetristä AES- salausalgoritmia (Advanced Encryption Standard), joka myös esiintyi tietoaineistossa eniten. Kun taas tutkittiin kiristyshaittaohjelmien kestoa huomattiin, että epäsymmet- ristä RSA-salausalgoritmia (Rivest-Shamirin-Adleman) käyttäneet kiristyshaittaoh- jelmat olivat kestäneet pisimpään. Kaiken kaikkiaan tietoaineistojen kiristyshaittaoh- jelmat olivat keränneet yli 17 miljoonan dollarin edestä lunnaita uhreiltaan.

Avainsanat: haittaohjelma; kiristyshaittaohjelma; kiristysohjelma; lunnasliikenne;

salaaminen;

ACM-luokat (ACM Computing Classification System, 2012 version): Security and privacy→Intrusion/anomaly detection and malware mitigation→Malware and its mitigation; Social and professional topics→Computing / technology poli- cy→Computer crime→Malware / spyware crime; Information systems→Data man- agement systems→Data structures→Data layout→Data encryption;

(3)

ii

UNIVERSITY OF EASTERN FINLAND, Faculty of Science and Forestry, Kuopio School of Computing

Computer Science

Henri Toivanen: Ransomware encryption algorithms and ransom payments - explora- tory data analysis of two datasets

Master’s Thesis, 46 pages

Supervisor of the Master’s Thesis: PhD Virpi Hotti May 2021

Abstract: Ransomware is a category of malware that aims to restrict access to its vic- tim’s computer system by either encrypting systems files and software or by locking it. The literature review was complemented with up-to-date material in addition to examining malware and how they are categorized. In addition to the literature review two datasets (Ransomware Payments in the Bitcoin Ecosystem ja Ransomware Overview), were examined in this thesis in which one listed different ransomware found and their features, and the other one focused on ransom payments which were traced by using Bitcoin addresses of different ransomware. The aim of examination of the datasets was to find out how well ransomware found in the datasets correspond to features and methods found in the literature review. In addition to this, it was ex- amined how different features of ransomware have affected to the amount of paid ransom.

The literature review showed that ransomware have used symmetric, asymmetric and hybrid encryption methods. Hybrid encryption methods utilize both symmetric and asymmetric encryption methods. However, examination of the datasets showed that in addition, these methods’ ransomware have used other encryption methods includ- ing hashing algorithms. The examination of the datasets showed that symmetric en- cryption algorithm AES (Advanced Encryption Standard) collected the most ransom payments and was the most popular. In contrary when examined the duration of the ransomware asymmetric encryption algorithm RSA (Rivest-Shamirin-Adleman) was found to last the longest. Overall ransomware in the datasets collected over 17 mil- lion dollars in ransom payments.

Keywords: encryption; malware; ransomware; ransom payments;

CR Categories (ACM Computing Classification System, 2012 version):

Security and privacy→Intrusion/anomaly detection and malware mitiga- tion→Malware and its mitigation; Social and professional topics→Computing / technology policy→Computer crime→Malware / spyware crime; Information sys- tems→Data management systems→Data structures→Data layout→Data encryption;

(4)

iii

Esipuhe

Tämä tutkielma on tehty Itä-Suomen yliopiston Tietojenkäsittelytieteen laitokselle vuosien 2020–2021 välisenä aikana. Tutkielmassa hyödynnettiin syksyllä 2017 teh- tyä kandidaatin tutkielmaa, jossa tutkittiin yleisesti kiristyshaittaohjelmia sekä tarkas- teltiin yksittäistä kiristyshaittaohjelmaa. Tutkielman tarkka aihe eli pitkään omaa elämäänsä vaikkakin kandidaatin tutkielman jatkaminen olikin jo päätetty lähes sa- man tien kandidaatin tutkielman palautuksen jälkeen.

Iso kiitos kuuluu tutkielman ohjaajalle FT Virpi Hotille, jonka avustuksella tutkiel- man aihe pysyi raiteillaan ja tätä myöten myös viimein tuli valmiiksi. Kiitokset tuesta myös UEF:in Digiteknologian TKI-ympäristöhankkeelle (Digikeskus-hanke; Hanke- koodi: A74338), josta saatiin tarvittavaa viimeistely- ja tarkastusapua graduun liitty- en.

Henri Toivanen

(5)

iv

Lyhenneluettelo

ASCII American Standard Code for Information Interchange; eräs tietokonei- den merkistö

CSV Comma-separated values; eräs tiedostomuoto, jossa taulukkomuotoinen tieto tallennetaan tekstitiedostoon

DES Data Encryption Standard; eräs symmetrinen salausalgoritmi

IOC Indicators of Compromise; eräs tietoturva-ammattilaisten käyttämä termi

(6)

v

Sisällysluettelo

1 Johdanto ... 1

2 Haittaohjelmat ja kiristyshaittaohjelmat ... 3

2.1 Haittaohjelmat ... 3

2.2 Kiristyshaittaohjelmat ... 5

3 Avoimien tietoaineistojen arviointi ja analysointi ... 8

3.1 Ransomware Payments in the Bitcoin Ecosystem - tietoaineiston arviointi ja analysointi ... 9

3.2 Ransomware Overview -tietoaineiston arviointi ja analysointi ... 17

3.3 Tietoaineistojen yhteisanalysointi ... 30

4 Pohdinta ja jatkotutkimusideat ... 40

Viitteet ... 44

(7)

1

1 JOHDANTO

Haittaohjelmat (malware) ovat ohjelmia, jotka on suunniteltu suorittamaan pahan- suopaisia ja häiritseviä toimenpiteitä (Oriyano, 2016). Haittaohjelmat voidaan jakaa eri tyyppeihin, joita ovat muun muassa virukset (virus), madot (worm), Troijan hevo- set (Trojan horse), rootkitit ja kiristyshaittaohjelmat (ransomware) (Aslan & Samet, 2020). Tässä tutkielmassa keskitytään pääasiassa edellä mainituista haittaohjelmien tyypeistä kiristyshaittaohjelmiin. Kiristyshaittaohjelma pyrkii rajoittamaan pääsyä tartunnan saaneeseen tietokonejärjestelmään, jonka jälkeen hyökkääjä vaatii uhriaan maksamaan lunnaan rajoituksien poistamiseksi (Yun et al., 2017).

Tässä tutkielmassa tarkastellaan yleisesti haittaohjelmia ja niiden luokittelua. Tut- kielmassa tarkastellaan tarkemmin yhtä haittaohjelmien luokkaa kiristyshaittaohjel- mia (luku 2.1). Tässä tutkielmassa tarkastellaan yleisesti haittaohjelmia ja niiden luokittelua. Tutkielmassa hyödynnetään vuonna 2017 tehtyä kirjallisuuskatsausta Kiristysohjelmien (ransomware) toimintaperiaatteet ja salausalgoritmit – esimerkki- nä WannaCry (Toivanen, 2017), jota täydennettiin ajankohtaisilla aineistoilla sekä tarkasteltiin haittaohjelmia ja niiden luokittelua. Kiristyshaittaohjelmista tutkitaan, kuinka niitä on luokiteltu niiden ominaisuuksien perusteella ja pyritään löytämään tietoa eri kiristyshaittaohjelmista kuten niiden käyttämistä salausalgoritmeista (luku 2.2).

Tutkielmassa pyritään vastaamaan seuraaviin tutkimuskysymyksiin:

• Mitä haittaohjelmat ovat ja kuinka niitä on luokiteltu?

• Mitä kiristyshaittaohjelmat ovat ja kuinka niitä on luokiteltu?

• Millaisia eri menetelmiä kiristyshaittaohjelmat ovat käyttäneet?

• Voidaanko kiristyshaittaohjelmille löytää piirteitä, jotka lisäävät niiden onnis- tumisen todennäköisyyttä tarkastelemalla kiristyshaittaohjelmiin liittyvää lunnasliikennettä?

(8)

2

Tutkielmassa hyödynnetään kahta eri kiristyshaittaohjelmiin liittyvää tietoaineistoa, joita ovat Paquet-Clouston et al. (2018) julkaisema Ransomware Payments in the Bitcoin Ecosystem sekä Roth et al. (2016) ylläpitämä Ransomware Overview. Luvus- sa 3.1 arvioidaan ja analysoidaan Paquet-Clouston et. al. (2018) tietoaineistoa, jossa on kerätty tietoa eri kiristyshaittaohjelmien lunnasliikenteestä. Luvussa 3.2 arvioi- daan ja analysoidaan Roth et. al. (2016) ylläpitämää tietoaineistoa, johon on kerätty tietoa eri kiristyshaittaohjelmien toiminnallisuuksista. Lisäksi luvussa 3.3 tarkastel- laan tietoaineistoja yhdessä ja pyritään selvittämään, onko kirityshaittaohjelmien ominaisuuksilla merkitystä niiden menestymiseen. Tietoaineistoja tarkastellaan eks- ploratiivista data-analyysiä (exploratory data analysis) käyttäen.

(9)

3

2 HAITTAOHJELMAT JA KIRISTYSHAITTAOH- JELMAT

Haittaohjelmiksi luokitellaan mikä tahansa tietokoneohjelma (software), joka tarkoi- tuksellisesti suorittaa ilkeämielistä hyötykuormaa (payload) uhrin laitteella kuten tietokoneessa, älypuhelimessa tai tietokoneverkossa. Haittaohjelmista käytetään myös termejä kuten ilkeämielinen ohjelma (malicious software) ja ilkeämielinen koodi (malicious code), josta on myös johdettu termi malcode (Deylami et al., 2016).

Tietyt kiristyshaittaohjelmat salaavat tiedon järjestelmän paikallisessa muistissa, jon- ka seurauksena salauksen poistaminen on usein lähes mahdotonta ilman lunnaan maksamista. Toiset kiristyshaittaohjelmat puolestaan saattavat vain lukita järjestel- män ja esittää lunnasvaatimuksen, jonka tarkoituksena on saada uhri maksamaan (Yun et al., 2017). Hyökkääjät vaativat useimmiten lunnaat maksettavaksi Bitcoinei- na tai muina digitaalisina valuuttoina (Toivanen, 2017).

Tässä luvussa käsitellään haittaohjelmia ja kiristyshaittaohjelmia käsitteinä ja niiden yleisiä piirteitä. Luvussa on hyödynnetty vuonna 2017 tehtyä kandidaatin tutkielmaa.

Luku 2.1 käsittelee yleisesti haittaohjelmien erilasia tyyppejä ja niiden ominaisuuk- sia. Luvussa 2.2 käsitellään tarkemmin kiristyshaittaohjelmien yleisiä piirteitä, kuin- ka niitä on luokiteltu näiden piirteiden avulla sekä niiden käyttämiä salausalgoritme- ja.

2.1 Haittaohjelmat

Tässä luvussa käsitellään yleisesti mitä haittaohjelmat ovat ja millaisia ominaisuuksia ne sisältävät. Lisäksi tarkastellaan, kuinka haittaohjelmia on luokiteltu niiden käyt- tämien ominaisuuksien perusteella.

Haittaohjelmat voidaan teoreettisesti jakaa useaan kategoriaan niiden ilkeämielisten tavoitteiden ja käyttäytymisen perusteella (Naz & Singh, 2019). Aslan ja Samet (2020) määrittelee taas haittaohjelmiksi minkä tahansa ohjelman, joka tarkoitukselli-

(10)

4

sesti suorittaa ilkeämielistä hyötykuormaa (malicious payload) uhrinsa laitteille, ku- ten tietokoneille, älypuhelimille tai tietojärjestelmille.

Oriyano S. (2016) on jaotellut haittaohjelmat viruksiin, matoihin, Troijan hevosiin, rootkitteihin, vakoiluohjelmiin (spyware) sekä mainosohjelmiin (adware). Aiemmin mainitun Deylami et al. (2016) kanssa yhteisiä kategorioita olivat seuraavat:

Virus: Virus on tunnetuin haittaohjelman muoto (Oriyano, 2016). Deylami et.

al. (2016) sekä Oriyano S.-P. (2016) mukaan viruksien tarkoituksena on mo- nistautua tai lisääntyä uhrin laitteella korruptoiden muita ohjelmia ja tiedosto- ja. Lisäksi molemmat mainitsevat, että yleisesti virukset vaativat jonkinlaista käyttäjän toimenpidettä tartuttavien toimenpiteidensä aloittamiseksi.

Madot: Madot eroavat viruksista niin, että ne eivät tarvitse ulkoista apua li- sääntyäkseen tai monistuakseen tietoverkossa (Deylami et al., 2016). Madot ilmestyivät ensimmäisen kerran 1980-luvulla ja ne ovat olleet vastuussa suu- rimmissa palvelunestohyökkäyksissä (denial-of-service attack), joita tunne- taan (Oriyano, 2016).

Troijan hevoset: Troijan hevoset turvautuvat suurelta osin sosiaaliseen mani- pulointiin (social engineering) aloittaakseen uhrinsa laitteen tartuttamisen.

Troijan hevoset on piilotettu aidon näköiseen ohjelmaan, joka samanaikaisesti tekee haittaa uhrinsa laitteessa (Oriyano, 2016).

Vakoituohjelmat: Vakoiluohjelmat on suunniteltu keräämään tietoa uhrin toiminnoista tai tämän laitteesta. Vakoiluohjelman yleisin muoto on näppäin- nauhuri (keylogger) (Oriyano, 2016). Useimmiten uhrilla ei ole tietoa asenne- tusta vakoiluohjelmasta (Deylami et. al., 2016).

Rootkitit: Rootkitit ovat hyökkääjien usein käyttämiä työkaluja silloin kun tartutetun laitteen pääkäyttäjäoikeudet (administrative privileges) on murret- tu. Niiden toiminnassa näkyy vivahteita Troijan hevosten toiminnasta, joka näkyy niin, että ne muuttavat käyttöjärjestelmän alkuperäisiä tiedostoja saas- tutetuilla tiedostoilla. Lisäksi niillä on tapana mahdollistaa hyökkääjälle etäyhteys (remote access) uhrin laitteelle (Deylami et al., 2016). Rootkitit voidaan piilottaa järjestelmän ydinkomponentteihin, jolloin ne pystyvät ole-

(11)

5

maan tunnistamattomana moderneilta skannereiltakin. Tämä tekee niistä to- della hankalia tunnistaa ja poistaa tartutetusta laitteesta (Oriyano, 2016).

Kuten määrittelyissä kävi ilmi, useat eri haittaohjelmat vaativat uhriltaan jonkinlaista toimenpidettä. Näitä toimenpiteitä haittaohjelmat pyrkivät toteuttamaan esimerkiksi naamioimalla haittaohjelman näyttämään aidolta ohjelmalta tai muilla sosiaalisilla manipuloinnin keinoilla.

2.2 Kiristyshaittaohjelmat

Kiristyshaittaohjelmat tai kiristysohjelmat jaetaan yleisesti kahteen luokkaan: salaa- viin (encrypting ransomware) ja ei-salaaviin kirityshaittaohjelmiin (non-encrypting ransomware) (Modak, 2016). Salaaviin kiristyshaittaohjelmiin kuuluvat ne kiristys- haittaohjelmat, jotka salaavat saastuneen tietokonejärjestelmän tiedostoja ja ohjelmia.

Ei-salaavat kiristysohjelmat käyttävät jotain järjestelmän heikkoutta, jonka avulla ne voivat lukita uhrin järjestelmän. Tämän jälkeen ei-salaavat kiristysohjelmat esittävät viestin, jonka avulla ne pyrkivät houkuttelemaan uhria maksamaan lunnaan, jotta tämä saisi järjestelmänsä takaisin käyttöönsä. Kiristyshaittaohjelmien lunnaat makse- taan salatuilla digitaalisilla valuutoilla tai luottokorteilla, mutta hyökkääjät suosivat digitaalisia valuuttoja, koska niiden jäljittäminen on hankalampaa pankkien korttei- hin verrattuna (Alzahrani & Alghazzawi, 2019).

Ensimmäiset salaavat kiristyshaittaohjelmat käyttivät salauksessaan symmetrisisiä salausalgoritmeja, joissa käytetään samaa salausavainta sekä salaamiseen että salauk- sen purkamiseen. Symmetriset salausalgoritmit eivät kuitenkaan toimineet riittävän hyvin, koska useimmiten salausavain pystyttiin paikantamaan muun muassa ohjel- man lähdekoodista, jolloin salauksen purkaminen oli helppoa. Tämän jälkeen kiris- tyshaittaohjelmat alkoivat käyttämään epäsymmetrisiä salausalgoritmeja, joissa symmetrisen salauksen käyttämän yhden salausavaimen sijaan käytettiinkin kahta salausavainta, julkista avainta (public key) ja salaista avainta (private key). Epäsym- metristä salausta käyttävät kiristyshaittaohjelmat käyttävät julkista avainta tiedon salaamiseen, jonka jälkeen ne vaativat lunnaita salaista avainta vastaan, jolla salaus

(12)

6

pystytään purkamaan. Epäsymmetriset salausalgoritmit on tarkoitettu käytettäviksi pienten viestien salaamiseen toisin kuin suurten tiedostojen. Tästä johtuen se ei so- veltunut hyvin kiristyshaittaohjelmien käyttötarkoitukseen vaikkakin se toimi pa- remmin kuin edeltäjänsä (Toivanen, 2017).

Modernit kiristyshaittaohjelmat lainaavat vakiintuneita tekniikoita hyvänlaatuisilta salausjärjestelmiltä ja useimmiten hyödyntävät risteytettyä tai hybridiä salausjärjes- telmää (hybrid cryptosystem) (Kolodenker et al., 2017). Hybridisalausjärjestelmässä hyödynnetään niin symmetristä kuin epäsymmetristäkin salausta, jossa uhrin tiedos- tot salataan käyttäen hyödyksi nopeaa symmetristä salausta, jonka jälkeen symmetri- nen avain salataan epäsymmetrisen salausalgoritmin julkisella avaimella (Toivanen, 2017). Myös tässä tapauksessa uhrilta vaaditaan lunnasmaksua vastineeksi epäsym- metrisen salausalgoritmin salaisesta avaimesta (Toivanen, 2017).

Alzahrani & Alghazzawi (2019) jakaa kirityshaittaohjelmat neljään eri perustyyppiin toisin kuin muut aiemmin mainitut lähteet. Tässä jaossa on aiemmin mainittujen sa- laavien ja ei-salaavien kiristyshaittaohjelmien lisäksi myös scareware ja doxware.

Scarewareihin kuuluvat kiristyshaittaohjelmat pyrkivät pelon kautta saamaan uhrinsa maksamaan. Alzahrani & Alghazzawi mukaan scarewaret voivat olla esitetty esimer- kiksi viruksentorjuntaohjelmina tai työkaluina, jotka puhdistavat ja kiihdyttävät lai- tetta. Nämä ohjelmat väittävät löytäneensä ongelmia laitteesta ja pyytävät tietyn mää- rän rahaa korjatakseen nämä ongelmat. Heidän mukaansa osa näistä kiristyshaittaoh- jelmista myös lukitsee laitteen tai täyttävät näytön ärsyttävillä mainoksilla. Doxwaret Alzahrani ja Alghazzawi taas kuvaavat olevan haittaohjelmia, jotka uhkaavat uhrinsa henkilökohtaisten tietojen julkaisemisella, mikäli nämä eivät maksa heidän pyytämi- ään lunnaita.

Yun et al., (2017) jakavat salaavat kiristyshaittaohjelmat vielä kahteen alempaan luokkaan A ja B. Luokkaan A kuuluvat kiristyshaittaohjelmat ylikirjoittavat salatta- van tiedoston muuttamatta tiedoston nimeä, jolloin kyseistä tiedostoa ei voida palaut- taa. Luokkaan B kuuluvat kiristyshaittaohjelmat taas luovat uuden tiedoston kuten esimerkiksi ”B.txt.crypt”. Tässä tapauksessa alkuperäistä tiedostoa käytetään uuden tiedoston luonnissa, jonka jälkeen alkuperäinen tiedosto poistetaan. Tämän seurauk-

(13)

7

sena alkuperäisen tiedoston palauttaminen on mahdollista joissakin tapauksissa, kos- ka itse alkuperäistä tiedostoa ei ole ylikirjoitettu. Salaavien kiristyshaittaohjelmien luokittelua helpottaa se, että luokan B kiristyshaittaohjelmien luomat tiedostot omaa- vat tietyn tiedostopäätteen toisin kuin luokassa A. Tätä luokittelua hyödynnetään luvun 3.1 ja 3.3 tietoaineistojen arvioinnissa ja analysoinnissa, jossa on listattuna kiristyshaittaohjelmia ja niiden käyttämiä salausalgoritmeja ja niiden salaamien tie- dostojen tiedostopäätteitä.

WannaCry-kirityshaittaohjelman vaikutuksia tutkittaessa huomattiin sen vaikutta- neen laajasti muun muassa energia-, liikenne-, merenkulku-, pankki-, televiestientä- ja terveydenhuoltosektoreihin. Kyseisen kiristyshaittaohjelman seurauksena Britan- nian kansallisessa terveyspalvelussa potilaiden hoito oli vaikeutunut sekä hyökkäyk- sen huipussa kyettiin hoitamaan ainoastaan kriittisen potilaat. (Toivanen, 2017)

(14)

8

3 AVOIMIEN TIETOAINEISTOJEN ARVIOINTI JA ANALYSOINTI

Tässä luvussa käsitellään kahden kiristyshaittaohjelmiin liittyvän tietoaineiston arvi- ointia ja analyysiä. Tämän lisäksi tietoaineistoja analysoidaan yhdessä yksittäisiä arvioita ja analyysejä hyödyntäen. Tietoaineistoja analysoidessa tarkastellaan muun muassa kunkin tietoaineiston yleistä rakennetta sekä asiaankuuluvuutta tutkielman tutkimuskysymyksiin verraten. Tietoaineistojen tarkastelussa käytetään eksploratii- vista data-analyysiä, joka on käsitteellinen kehys, jonka tarkoituksena on tarjota oi- valluksia tiedosta usein visuaaleja hyödyntäen (Behrens et al., 2012).

Tietoaineistoja etsittiin Googlen Dataset Search -palvelun avulla käyttäen hakulau- setta ”Ransomware”. Haku rajattiin sisältämään pelkästään taulukkomuotoiset (table) sekä arkistoidut (archive) tiedostomuodot. Tämän lisäksi hakua rajattiin sisältämään ilmaiset tietoaineistot viimeisen kolmen vuoden ajalta. Tällä hakulauseella tulokseksi saatiin 9 kappaletta tietoaineistoja, joista valittiin Paquet-Clouston et al. (2018)

”Ransomware Payments in the Bitcoin Ecosystem” -tietoaineisto, joka sisältää eri kiristyshaittaohjelmiin liittyviä Bitcoin-maksutapahtumia. Kyseinen tietoaineisto valittiin siksi, että se sisälsi 67 eri kiristyshaittaohjelmaan liittyviä tietoja, toisin kuin haun muut tietoaineistot, joiden rakenne ja laajuus eivät vastanneet tutkielman tutki- muskysymyksiin. Tietoaineiston arvioinnissa sekä analysoinnissa on myös hyödyn- netty Paquet-Clouston et al. (2019) julkaisemaa tutkimusartikkelia, jossa tietoaineis- toa on käsitelty.

Toisena tutkielman käsiteltävänä tietoaineistona on Roth. et al. (2016) julkaisema taulukko, johon 13 kirjoittajaa on täyttänyt vuosina 2016–2018 sekä satunnaisesti 2019 esiin tulleita kiristyshaittaohjelmia ja niihin liittyviä tietoja. Kokonaisuudessaan taulukko sisältää 413 eri kiristyshaittaohjelmasta saatua tietoa kuten kiristyshaittaoh- jelman nimi, mahdolliset tiedostopäätteet, käytetyt salausalgoritmit ja nimiä, joilla kyseinen kiristyshaitta myös tunnetaan.

(15)

9

Tietoaineistojen arviointi ja analysointi toteutettiin Googlen Colab -palvelussa, jossa voidaan kirjoittaa ja suorittaa Python-koodia selaimessa. Lisäksi Colab -palvelussa kirjoitettuun koodiin voidaan yhdistää tekstielementtejä ja kuvia. Tietoaineistojen arviointi ja analyysi toteutettiin pääasiallisesti Python Pandas-moduulia hyödyntäen.

Googlen Colab -työkalun lisäksi tietoaineistoja käsiteltiin Microsoftin Power BI - työkalulla.

Luvussa 3.1 arvioidaan Ransomware Payments in the Bitcoin Ecosystem - tietoaineiston rakennetta ja sisältöä, kuten kuinka eri kiristyshaittaohjelmien lunnaita on maksettu. Luvussa 3.2 arvioidaan Ransomware Overview -tietoaineiston sisältöä sekä analysoidaan tietoa hyödyntäen muun muassa luvussa 2 esille nousseita määri- tyksiä, sekä tarkastellaan tietoaineistojen käyttämien salausalgoritmeja. Luvussa 3.3 tarkastellaan lukujen 3.1 ja 3.2 tietoaineistoja yhdessä. Luvussa tarkastellaan muun muassa mitkä kiristyshaittaohjelmat esiintyvät molemmissa tutkielman tietoaineis- toissa sekä millaisia ominaisuuksia voidaan löytää niistä.

3.1 Ransomware Payments in the Bitcoin Ecosystem - tietoaineis- ton arviointi ja analysointi

Tietoaineiston esittely

Tässä luvussa arvioidaan ja analysoidaan Paquet-Clouston et al. (2018) Ransomware Payments in the Bitcoin Ecosystem -tietoaineistoa, joka koostuu 30 CSV-tiedostosta.

Luvussa tarkastellaan tietoaineiston rakennetta ja sen laajuutta. Lisäksi tietoaineiston arvioinnissa hyödynnetään Paquet-Clouston et al. (2019) julkaisemaa kyseistä tieto- aineistoa käsiteltävää tutkimusartikkelia, jossa muun muassa kuvataan, kuinka tieto- aineisto on kerätty.

Paquet-Clouston et al. (2018) kuvaavat julkaisussaan tietoaineiston koostuvan 7037 Locky-kiristyshaittaohjelmaan liittyvästä Bitcoin-osoitteesta sekä 185 muista lähteis- teistä löytyneestä Bitcoin-osoitteesta, jotka liittyvät eri kiristyshaittaohjelmiin. Kai- ken kaikkiaan tietoaineisto sisältää siis 7222 eri Bitcoin-osoitetta, jotka jakautuvat 67 eri kiristyshaittaohjelmaan. Tietoaineistossa nämä osoitteet ovat listattuna

(16)

10

seed_addresses.csv-tiedostossa. Kuitenkin laajennetun tietoaineiston 100 osoitetta poistettiin, koska niissä ei ollut havaittu kyseisen tutkimuksen aikana aktii- visuutta. Tämän seurauksena myös kiristyshaittaohjelmien lukumäärä laski 38 kappa- leeseen. Tässä tutkielmassa keskitymme laajennettuun tietoaineiston osaan.

Tietoaineisto koostuu 14 tiedostoparista sekä kahdesta yksittäisestä tiedostosta, joita ovat collector_addresses.csv ja seed_addresses.csv. Tiedostoparit koostuvat otsaketiedostosta sekä datatiedostosta. Otsaketiedostot ovat nimettyinä kunkin vastaavan datatiedoston mukaan sisältäen ”headers”-päätteen. Tiedostoja on myös kategorioitu tiedoston nimen alussa, joko ”collector” (kerääjä) tai ”expanded”

(laajennettu) aluilla, poislukien blockchain_stats.csv, blockchain_stats_headers.csv ja seed_addresses.csv -tiedostot.

Kuten jo aiemmin mainittiin, tässä tutkielmassa hyödynnetään laajennettua aineistoa.

Laajennettu tietoaineisto koostuu seitsemästä eri tiedostoparista, joista tutkielmassa päädyttiin käyttämään kuitenkin vain Expanded addresses stats -tietoaineistoa, koska kyseinen datajoukko sisältää yhteenkasatun tiedon laajennetusta tietoaineistosta. Li- säksi Expanded addresses cluster stats sekä Expanded addresses cluster tags - tietoaineistot jätetään pois tutkielman käsittelystä siksi, että tutkielman tarkoituksena on tarkastella kiristyshaittaohjelmia, jolloin edellä mainittujen tietoaineistojen mu- kaan tuominen toisi hankaluutta analyysin toteuttamiseen, koska kumpikaan aineisto ei sisällä kiristyshaittaohjelmien nimiä.

Expanded addresses stats -tietoaineisto koostuu yhdeksästä eri sarakkeesta:

Address: Sisältää Bitcoin-osoitteen, jota tietoaineistoa kerätessä on seurattu.

Family: Kiristyshaittaohjelman nimi, jonka avulla voidaan tarkastella yksitäi- sen kiristyshaittaohjelman vaikutusta. Lisäksi saraketta hyödynnetään luvussa 3.3, jossa tietoaineistoja yhdessä tarkasteltaessa tietoaineistot voidaan yhdis- tää kyseistä saraketta hyödyntäen.

Cluster: Sisältää alkuperäisessä tietoaineistossa muodostettuja klustereita.

Tämä sarake voidaan jättää pois käsittelystä, koska se ei tuo mitään lisäarvoa aineiston käsittelyyn.

(17)

11

NoIncomingTxs: Saapuvien rahasiirtojen lukumäärä (number of incoming transactions), jota tarkastelemalla voidaan nähdä tiettyyn Bitcoin-osoitteeseen saapuvien rahansiirtojen lukumäärä.

NoOutgoingTxs: Lähtevien rahasiirtojen lukumäärä (number of outgoing transactions), jota tarkastelemalla voidaan nähdä tietystä Bitcoin-osoitteista lähtevien rajansiirtojen lukumäärä.

FirstTx: Ensimmäinen rahasiirto (first transaction), joka sisältää aikaleiman ensimmäisestä osoitteeseen kohdistuneesta rahasiirrosta.

LastTx: Viimeinen rahasiirto (last transaction), joka sisältää aikaleiman vii- meisestä osoitteeseen kohdistuneesta rahasiirrosta.

TotalReceivedSATOSHI: Sisältää osoitteen keräämän kokonaissumman SA- TOSHEINA, jolla kuvataan pienintä Bitcoin-yksikköä.

TotalReceivedUSD: Sisältää osoitteen keräämän kokonaissumman Amerikan dollareissa.

Cluster-sarakkeen poistamisen lisäksi tietoaineiston firstTx- ja lastTx-sarakkeiden aikaleimat muutettiin luettavampaan muotoon Colab-palvelua käyttäen.

Python koodi

# Tuodaan käytettävät paketit import tarfile

import numpy as np import re

import pandas as pd import requests

from datetime import datetime import matplotlib.pyplot as plt import seaborn as sns

# Haetaan tietoaineisto

url='https://zenodo.org/record/1238041/files/ransomware_dataset_04_11_2018.t ar.gz?download=1'

response = requests.get(url) if response.status_code == 200:

open('ransomware_dataset.tar.gz', 'wb').write(response.content) print('Lataus onnistui')

else:

print('Lataus epäonnistui')

# Tarkastellaan ladatun tietoaineiston sisältöä file_count = 0

header_files_count = 0 collector_files_count = 0

collector_header_files_count = 0 expanded_files_count = 0

(18)

12

expanded_header_files_count = 0

with tarfile.open('ransomware_dataset.tar.gz', 'r:gz') as tar:

for tarinfo in tar:

if tarinfo.isreg():

file_count = file_count + 1

if re.search('_headers', tarinfo.name):

header_files_count = header_files_count + 1 if re.search('collector_', tarinfo.name):

collector_files_count = collector_files_count + 1 if re.search('_headers', tarinfo.name):

collector_header_files_count = collector_header_files_count + 1 if re.search('expanded_', tarinfo.name):

expanded_files_count = expanded_files_count + 1 if re.search('_headers', tarinfo.name):

expanded_header_files_count = expanded_header_files_count + 1 print('Kaikkien tiedostojen lukumäärä: %d kpl' % (file_count))

print('Kaikkien otsaketiedostojen lukumäärä: %d kpl' % (header_files_count)) print('Kaikkien \'collector\' alkuisten tiedostojen lukumäärä: %d kpl' % (collector_files_count))

print('Kaikkien \'collector\' alkuisten otsaketiedostojen lukumäärä: %d kpl'

% (collector_header_files_count))

print('Kaikkien \'expanded\' alkuisten tiedostojen lukumäärä: %d kpl' % (expanded_files_count))

print('Kaikkien \'expanded\' alkuisten otsaketiedostojen lukumäärä: %d kpl'

% (expanded_header_files_count))

# Puretaan haettu tietoaineisto file_names = []

with tarfile.open('ransomware_dataset.tar.gz', 'r:gz') as tar:

for tarinfo in tar:

if tarinfo.isreg():

print(tarinfo.name.split('/')[-1])

file_names.append(tarinfo.name.split('/')[-1].replace('.csv', '')) tar.extract(tarinfo)

# Etsitään tiedostot, jotka eivät olleet tiedostopareja header_files = [i.replace('_headers', '') for i in file_names if re.search('_headers', i)]

other_files = [i for i in file_names if not re.search('_headers', i)]

for f in other_files:

if f not in header_files:

print(f)

# Tarkastellaan tiedostojen sisältöä

bs=pd.read_csv('/content/dataset/blockchain/blockchain_stats_headers.csv') bs.info()

headers = ['blocks', 'transactions', 'addresses', 'clusters', 'addressRel', 'clusterRel']

bs = pd.read_csv('/content/dataset/blockchain/blockchain_stats.csv', names=headers)

bs.info()

bs.describe(include='all')

eacs=pd.read_csv('/content/dataset/blockchain/expanded_addresses_cluster_sta ts_headers.csv')

eacs.info()

headers=['cluster', 'noAddresses', 'NoIncomingTxs', 'noOutgoingTxs', 'firstTx', 'lastTx', 'totalReceivedSATOSHI', 'totalReceivedUSD']

eacs=pd.read_csv('/content/dataset/blockchain/expanded_addresses_cluster_sta ts.csv', names=headers)

eacs.info()

eacs.describe(include='all')

eact=pd.read_csv('/content/dataset/blockchain/expanded_addresses_cluster_tag s_headers.csv')

eact.info()

(19)

13

headers = ['cluster', 'tagCount', 'tags', 'categories']

eact=pd.read_csv('/content/dataset/blockchain/expanded_addresses_cluster_tag s.csv', names=headers)

eact.info()

ero=pd.read_csv('/content/dataset/blockchain/expanded_rel_outgoing_headers.c sv')

ero.info()

headers = ['dstAddress', 'address', 'family', 'srcCluster', 'estimat- edValueUSD', 'estimatedValueSATOSHI', 'noTransactions', 'dstCluster']

ero=pd.read_csv('/content/dataset/blockchain/expanded_addresses_stats.csv', names=headers)

ero.info()

ero.describe(include='all')

# Tarkastellaan valittuja tiedostoja

eas=pd.read_csv('/content/dataset/blockchain/expanded_addresses_stats_header s.csv')

eas.info()

headers = ['address', 'family', 'cluster', 'NoIncomingTxs', 'noOutgoingTxs', 'firstTx', 'lastTx', 'totalReceivedSATOSHI', 'totalReceivedUSD']

eas=pd.read_csv('/content/dataset/blockchain/expanded_addresses_stats.csv', names=headers)

eas.info()

# Muutetaan firstTx ja lastTx ajat luettavampaan muotoon

eas['f_firstTx'] = [datetime.fromtimestamp(i) for i in eas['firstTx']]

eas['f_firstTx'] = pd.to_datetime(eas['f_firstTx'])

eas['f_lastTx'] = [datetime.fromtimestamp(i) for i in eas['lastTx']]

eas['f_lastTx'] = pd.to_datetime(eas['f_lastTx']) eas.head()

eas.describe(include='all')

# Muodostetaan pylväskaavio Bitcoin-osoitteiden jakautumisesta ki- ristyshaittaohjelmien mukaan

eas['family'].value_counts(ascending=True).plot.barh(figsize=(8, 8), log=True)

# Lasketaan kaikkien aineiston kiristyshaittaohjelmien lunnaat total_usd = eas['totalReceivedUSD'].sum()

total_satoshi = eas['totalReceivedSATOSHI'].sum()

print('Kiristyshaittaohjelmien keräämät lunnaat yhteens:') print('USD: ' + str(total_satoshi))

print('USD: ' + str(total_usd))

# Muodostetaan pylväskaavio saapuneiden tapahtumien määrästä kiris- tyshaittaohjelmakohtaisesti

incoming_by_family=eas.groupby('family').agg(incoming_sum=('NoIncomingTxs', 'sum'))

incoming_by_family.sort_values('incoming_sum', inplace=True)

incoming_by_family.plot.barh(figsize=(8, 8), log=True, legend=False)

# Muodostetaan pylväskaavio lähteneiden tapahtumien määrästä kiris- tyshaittaohjelmakohtaisesti

outgoing_by_family = eas.groupby('family').agg(outgoing_sum = ('noOut- goingTxs', 'sum'))

outgoing_by_family.sort_values('outgoing_sum', inplace=True)

outgoing_by_family.plot.barh(figsize=(8, 8), log=True, legend=False)

# Muodostetaan pylväskaavio, jossa on kunkin kiristyshaittaohjelman keräämien lunnaiden summa

usd_by_family = eas.groupby('family').agg(usd_sum = ('totalReceivedUSD', 'sum'))

(20)

14

usd_by_family.sort_values('usd_sum', inplace=True)

usd_by_family.plot.barh(figsize=(8, 8), log=True, legend=False)

# Lasketaan kestoja kiristyshaittaohjelmakohtiasesti families = eas.family.unique().tolist()

mins = eas.groupby('family').agg(min_start = ('firstTx', 'min')) maxs = eas.groupby('family').agg(max_end = ('lastTx', 'max')) durations = {}

for i in families:

delta=datetime.fromtimestamp(maxs.loc[i]['max_end']) - datetime.fromtimestamp(mins.loc[i]['min_start'])

durations[i] = delta.days

ddf = pd.DataFrame.from_dict(durations, orient='index') ddf.rename(columns={0: 'duration'}, inplace=True) ddf.sort_values('duration', inplace=True)

ddf

# Muodostetaan pylväskaavio kiristyshaittaohjelmien kestoista ddf.plot.barh(figsize=(8, 8), log=False, legend=False)

Tulokset

Expanded addresses stats -tietoaineistoa käsitellessä tarkasteltiin, kuinka useasti ysit- täiset kiristyshaittaohjelmat esiintyivät tietoaineistossa (kuva 1), joka tässä tapauk- sessa tarkoittaa seurattujen Bitcoin-osoitteiden määrää. Useimmiten tietoaineistossa esiintyi Locky-kiristyshaittaohjelma. Tämä on mitä todennäköisimmin seurausta sii- tä, että alkuperäinen tietoaineisto koostui suurimmalta osin juuri Locky- kiristyshaittaohjelman Bitcoin-osoitteista. Kuvasta voidaan kuitenkin nähdä, että osoitteet eivät ole pelkästään keskittyneet kyseiseen kiristyshaittaohjelmaan.

(21)

15

Kuva 1. Seurattujen Bitcoin-osoitteiden määrä kiristyshaittaohjelmien mukaan.

Tietoaineiston Bitcoin-osoitteet sisälsivät maksettuja lunnaita yhteensä 17 337 085.22 dollarin verran. Kun tarkasteltiin näiden lunnaiden jakautumista (kuva 2) huomattiin, että verrattuna osoitteiden määrään jakautuminen oli huomattavasti tasaisempaa. Kuitenkin Locky-kiristyshaittaohjelma sisälsi suurimman lunnasmak- sumäärän.

(22)

16

Kuva 2. Lunnaiden jakautuminen eri kiristyshaittaohjelmien kesken.

Tietoaineistossa esiintyneiden kiristyshaittaohjelmien mahdollisia kestoja tarkastel- tiin tutkimalla kunkin kiristyshaittaohjelman Bitcoin-osoitteiden ensimmäisten ja viimeisten maksutapahtumien aikaleimoja. Kiristyshaittaohjelmien aloitusajankohta laskettiin ottamalla pienin arvo kunkin kiristyshaittaohjelman Bitcoin-osoitteiden ensimmäisistä maksutapahtumista ja lopetusajankohta laskettiin ottamalla suurin arvo kunkin kiristyshaittaohjelman Bitcoin-osoitteiden viimeisistä maksutapahtumis- ta. Kunkin kiristyshaittaohjelman kesto päivissä laskettiin ottamalla erotus lopetus- ja aloitusajankohdasta (kuva 3). Kiristyshaittaohjelmien kestoja analysoidessa huomat- tiin, että isolla osalla aineiston kiristyshaittaohjelmista kyseinen kesto on ollut melko lyhyt mutta viisi suurinta kestoa omaavalla kiristyshaittaohjelmalla kesto oli yli tuhat päivää. Pisin kesto oli Razy-kiristyshaittaohjelmalla, jonka laskettu kesto oli 1466 päivää.

(23)

17

Kuva 3. Kiristyshaittaohjelmien lunnastapahtumien avulla laskettu kesto päivissä.

Kaiken kaikkiaan tieto on tutkielman tutkimuskysymyksiin hyödynnettävissä. Tietoa analysoidessa tulee kuitenkin ottaa kriittisesti huomioon Bitcoin-osoitteiden keskit- tyminen pääasiassa Locky-kiristyshaittaohjelmaan.

3.2 Ransomware Overview -tietoaineiston arviointi ja analysointi

Tietoaineiston esittely

Tässä luvussa arvioidaan ja analysoidaan Roth et al. (2016) Ransomware Overview - tietoaineistoa, joka on 13 kirjoittajan vuosina 2016–2018 sekä satunnaisesti vuonna 2019 keräämä ja ylläpitämä taulukko, johon on listattuna 413 havaittua uniikkia kiri- tyshaittaohjelmaa sisältäen tietoa niiden ominaisuuksista. Luvussa tarkastellaan tie- toaineiston rakennetta sekä sen sisältöä. Lisäksi luvussa tarkastellaan millaisia omi-

(24)

18

naisuuksia kuten salausalgoritmeja kiristyshaittaohjelmissa on käytetty sekä niiden toistuvuutta tietoaineistossa.

Tietoaineisto on taulukkomuotoinen ja se sisältää 7 eri välilehteä. Tässä tutkielmassa keskitytään ainoastaan Ransomware -välilehteen, koska se on ainut välilehdistä, jossa on oleellista tietoa eri kiristyshaittaohjelmista. Ransomware -välilehti sisältää 14 saraketta, joita ovat nimi (name), tiedostopäätteet (extensions), tiedostopäätteiden mallinne (extension pattern), lunnasviestin tiedostonimet (ransom note filenames), kommentti (comment), salausalgoritmi (encryption algorithm), muita tunnettuja ni- miä (also known as), lisäys-/muokkauspäivä (date added/modified), salauksenpurka- ja (decryptor), info 1 ja info 2, kuvankaappaukset (screenshots) sekä kaksi IOC- saraketta. Edellä mainituista sarakkeista valittiin kiristyshaittaohjelmien nimet, nii- den käyttämät tiedostopäätteet ja salausalgoritmit sekä muita tunnettuja nimiä. Muita sarakkeita ei valittu seuraavista syistä:

Tiedostopäätteiden mallinne: Sarakkeen tieto ei vastaa tutkielman tutkimus- kysymysiin, sarakkeen arvot ovat enimmäkseen tyhjiä ja tieto ole riittävän yhdenmukaista.

Lunnasviestin tiedostonimet: Sarakkeen sisältämät tiedot eivät vastaa tutkiel- man tutkimuskysymyksiin.

Kommentti: Sarakkeen sisältämät tiedot eivät ole yhdenmukaisia, jolloin myöskään niiden käsittely ei ole kannattavaa.

Lisäys-/muokkauspäivä: Sarake ei sisällä riittävästi arvoja, koska sarakkeelle on määriteltynä arvo vain viidelle kiristyshaittaohjelmalle.

Salauksen purkaja: Sarake sisältää ainoastaan linkkejä, joiden hyödyntämi- nen tietoaineiston analyysissä on hankalaa.

Info 1 ja 2: Sarakkeet sisältävät ainoastaan linkkejä sekä sarakkeiden sisältä- mää tietoa ei ole kuvattuna, jolloin niiden arviointi ja hyödyntäminen analyy- sissä on mahdotonta.

Kuvankaappaukset: Sarake sisältää linkkejä kuvakaappauksiin kiristyshaitta- ohjelmista. Tätä saraketta ei hyödynnetä, koska tieto ei vastaa tutkielman tut- kimuskysymyksiin.

(25)

19

IOC-sarakkeet: Sarakkeita ei valittu analyysiin, koska molemmat sarakkeet sisältävät tietoa vain yhdellä rivillä.

Tietoaineistoa arvioidessa huomattiin, että kiristyshaittaohjelma WannaCry ei sisäl- tänyt tietoa sen käyttämästä salausalgoritmista. Kyseisen kiristyshaittaohjelman on kuitenkin todettu käyttävän niin sanottua hybridiä salausmenetelmää, jossa hyödyn- netään sekä symmetristä AES- että epäsymmetristä RSA-salausalgoritmia (Toivanen, 2017). Tämän seurauksena tieto korjattiin käsiteltävään taulukkoon. Lisäksi tietoai- neiston name-sarake nimettiin uudelleen arvoksi ”family” vastaamaan luvun 3.1 Ransomware Payments in the Bitcoin Ecosystem -tietoaineiston samannimistä sara- ketta, jotta tietoaineistojen yhdistäminen onnistuu helpommin.

Python koodi

# Tuodaan käytettävät paketit import requests

import pandas as pd

import matplotlib.pyplot as plt import numpy as np

from datetime import datetime import re

# Haetaan käsiteltävä tietoaineisto

url='https://docs.google.com/spreadsheets/d/1TWS238xacAto- fLKh1n5uTsdijWdCEsGIM0Y0Hvmc5g/pub?output=xlsx'

response = requests.get(url) if response.status_code == 200:

open('Ransomware Overview.xlsx', 'wb').write(response.content) print('Lataus onnistui')

else:

print('Lataus epäonnistui')

# Tarkastellaan tietoaineiston sisältöä

headers = ['Name', 'Extensions', 'Extension Pattern', 'Ransom Note File- name(s)', 'Comment', 'Encryption Algorithm', 'Also known as', 'Date Add- ed/Modified', 'Decryptor', 'Info 1', 'Info 2', 'Scre

df=pd.read_excel('Ransomware Overview.xlsx',sheet_name='Ransomware', head- er=2, names=headers)

df.info()

df.describe(include='all')

# Muodostetaan Dataframe valituista sarakkeista (Name, Extensions, Encryption Algorithm ja Also known as)

headers = ['Name', 'Extensions', 'Encryption Algorithm', 'Also known as']

cols = [1, ]

df = pd.read_excel('Ransomware Overview.xlsx', sheet_name='Ransomware', header=2, names=headers, usecols=[0, 1, 5, 6])

df.info()

df.describe(include='all')

# Lisätään salausalgoritmi WannaCry-riville

df.loc[df['Name'] == 'WannaCry', 'Encryption Algorithm'] = 'AES + RSA'

(26)

20

df.describe(include='all')

# Muodostetaan ympyräkaavio mikäli kiristyshaittaohjelmalle on tie- toaineistossa määriteltynä salausalgoritmi

plt.figure(figsize=(6,6))

plt.title('Salausalgoritmi määritetty')

plt.pie(x=[df['Encryption Algorithm'].isna().sum(), df['Encryption Algo- rithm'].notna().sum()], labels=['Ei', 'Kyllä'], autopct=lambda p: ‘{:.2f}%

({:.0f})’.format(p, (p/100) * len(df[‘Encryption Algorithm’])), startan- gle=90, colors=['dodgerblue', 'darkorange'])

plt.show()

# Tarkastellaan tietonaineistosta kiristyshaittaohjelmien lukumäärä, joille ei ole määritetty salausalgoritmia

yea = df[df['Encryption Algorithm'].notna()]

# Muodostetaan ympyräkaavio Yun et al., (2017) määrittämien luokkien A ja B jakautumisesta data-aineistossa

plt.figure(figsize=(6,6))

plt.title('Ransomware Overview -datan analysointia Yun et. al., (2017) luo- kittelun perusteella')

plt.pie(x=[yea['Extensions'].isna().sum(), yea['Extensions'].notna().sum()], labels=['Luokka A', 'Luokka B'], autopct=lambda p: ’{:.2f}%

({:.0f})’.format(p, (p/100) * len(yea)), startangle=90, co- lors=['dodgerblue', 'darkorange'])

plt.show()

# Ryhmitellään listasta eri kirjoitusasuja

# AES

aes = ['AES', 'AES(256)', 'AES(128)', 'AES-256', 'AES (256)', 'AES(256) (RAR implementation)', 'AES-128-CBC', 'AES, but throws key away, destroys the files', 'Custom (net shares), XTS-AES (disk)

# RSA

rsa = ['RSA', 'RSA(2048)']

# AES + RSA

aes_and_rsa = ['AES + RSA', 'AES(256) + RSA(2096)', 'AES, RSA (hardcoded)', 'AES(256), RSA (2048)', 'AES(256) in ECB mode, \nVersion 2-4 also RSA', 'AES(256), RSA (1024)', 'mix of RSA and AES-25

# GPG

gpg = ['GnuPG', 'GPG', 'uses gpg.exe']

ignores = []

vc = df['Encryption Algorithm'].value_counts() vc_dict = vc.to_dict()

new_dict = {}

for key, value in vc.items():

if key in ignores:

continue if key in aes:

if 'AES' in new_dict:

new_dict['AES'] = new_dict.get('AES') + value else:

new_dict['AES'] = value continue

if key in rsa:

if 'RSA' in new_dict:

new_dict['RSA'] = new_dict.get('RSA') + value else:

new_dict['RSA'] = value continue

if key in aes_and_rsa:

if 'AES & RSA' in new_dict:

new_dict['AES & RSA'] = new_dict.get('AES & RSA') + value else:

(27)

21

new_dict['AES & RSA'] = value continue

if key in gpg:

if 'GPG' in new_dict:

new_dict['GPG'] = new_dict.get('GPG') + value else:

new_dict['GPG'] = value continue

new_dict[key.replace('\n', ' + ')] = value algorithms = []

counts = []

for key, value in new_dict.items():

algorithms.append(key) counts.append(value)

ea = pd.DataFrame(list(zip(algorithms, counts)), columns=['Encryption Algo- rithm', 'Counts'])

ea.sort_values(by=['Counts'], ascending=False, inplace=True) ea

# Muodostetaan pylväskaavio salausalgoritmien jakautumisesta plt.figure(figsize=(8,8))

plt.title('Salausalgoritmien jakautuminen Ransomware Overview datajoukossa')

#plt.xticks(range(1, 100, 5))

plt.barh(ea['Encryption Algorithm'], ea['Counts'], log=True) plt.show()

# Tallennetaan tieto Power BI-analyysiä varten df.to_csv('Ransomware_Overview.csv')

Muutetun datajoukon uudelleenkäsittely

headers = ['Family', 'Extensions', 'Encryption Algorithm', 'Also known as']

df = pd.read_csv('Ransomware Overview.csv', names=headers, sep=';', head- er=0)

df.info()

df.describe(include='all')

df['Extension count'] = [len(str(i).split(';')) if type(i) == str else 0 for i in df['Extensions']]

df['Encryption Algorithm count'] = [len(str(i).split(';')) if type(i) == str else 0 for i in df['Encryption Algorithm']]

df['Also known as count'] = [len(str(i).split(';')) if type(i) == str else 0 for i in df['Also known as']]

df.describe(include='all')

Tulokset

Luvun 2.2 esille nousseen Yun et. al. (2017) määrityksen mukaan salaavat kiristys- haittaohjelmat voidaan jakaa kahteen luokkaan A ja B. Luokan A kiristyshaittaoh- jelmat salaavat tiedostot muuttamatta tiedoston nimeä, kun taas luokan B kiristyshait- taohjelmat luovat uuden tiedoston, jollain tietyllä tiedostopäätteellä. Tietoaineistoa tarkasteltaessa salaaviksi kiristyshaittaohjelmiksi luokiteltiin sellaiset kiristyshaitta- ohjelmat, joille oli tietoaineistossa määriteltynä salausalgoritmi. Tulokseksi saatiin, että tietoaineiston 413 kiristyshaittaohjelmasta tämän määrityksen perusteella 140

(28)

22

olivat salaavia kiristyshaittaohjelmia ja 273 olivat ei-salaavia kiristyshaittaohjelmia (kuva 4).

Kuva 4. Ransomware Overview -tietoaineiston jakautuminen salaaviin ja ei-salaaviin kiristys- haittaohjelmiin.

Tämän jälkeen tarkasteltiin, kuinka tietoaineiston kiristyshaittaohjelmat ovat jakau- tuneet Yun et. al. (2017) määrittelemiin luokkiin. Luokkaan A katsottiin määrittelyn perusteella kuuluvan ne kiristyshaittaohjelmat, joille ei oltu tietoaineistossa määritel- tynä tiedostopäätteitä. Kun taas luokkaan B katsottiin kuuluvan ne kiristyshaittaoh- jelmat, joille tiedostopäätteet oli määritelty. Analyysin seurauksena saatiin tuloksek- si, että käsiteltävästä 140 salaavasta kiristyshaittaohjelmasta 34 ei sisältänyt määri- tystä tiedostopäätteistä, kun taas 106 kiristyshaittaohjelmalle tiedostopäätteet oli määritelty (kuva 5).

(29)

23

Kuva 5. Tietoaineiston salaavien kiristyshaittaohjelmien jakautuminen Yun et al. (2017) määri- tyksen perusteella luokkiin A ja B.

Käsiteltävän tietoaineiston sarakkeet eivät sisältäneet tietoa yhdenmukaisessa muo- dossa, jonka seurauksena tiedostopääte-, salausalgoritmi- sekä muut tunnetut nimet - sarakkeet käytiin läpi ja muutettiin kukin solu yhteneväiseen muotoon jakaen usean arvon sisältävät solut käyttäen ”;”-merkkiä. Tiedostopäätteitä käsiteltäessä sarakkees- ta poistettiin arvoja, jotka eivät olleet tiedostopäätteitä vaan tiedostopääteen kuvauk- sia. Näistä useimmiten ilmeni arvo random (satunnainen), joka ilmeni yhteensä kol- me kertaa tietoaineiston 413 listaamassa kiristyshaittaohjelmassa. Kiristyshaittaoh- jelmien käyttämien salausalgoritmien käsittelyssä arvojen jakamisen lisäksi muutet- tiin algoritmeja yhtenäisempään muotoon. Tietoaineistossa oli kuvattu tietyissä ta- pauksissa algoritmin käyttämän avaimen kokoa kuten esimerkiksi AES(256) tai RSA 2048. Näissä tapauksissa tieto muutettiin muotoon algoritmi(avaimen koko). Osa tämän sarakkeen soluista sisälsi algoritmin lisäksi kommentteja algoritmin toimin- nasta, jotka poistettiin jättäen jäljelle ainoastaan käytetty salausalgoritmi. Tämän lisäksi sarakkeet sisälsivät myös pelkästään kuvaavia arvoja, joista ei ilmennyt käy- tettyä algoritmia. Nämä arvot poistettiin tietoaineistosta. Muita tunnettuja nimiä - saraketta käsiteltiin aiemmin mainittujen sarakkeiden tapaan jakamalla yksittäiset

(30)

24

nimet käyttäen ”;”-merkkiä. Tämän lisäksi sarakkeen soluista poistettiin arvot, joissa oli mainittu joko kyseisen kiristyshaittaohjelman olevan periytynyt tietystä toisesta kiristyshaittaohjelmasta tai mainittujen kiristyshaittaohjelmien olevan kyseisen kiris- tyshaittaohjelman muunnelmia.

Tietoaineiston kirityshaittaohjelmien tiedostopääteitä tarkasteltaessa sarakkeen käsit- telyn jälkeen huomattiin, että 262 kirityshaittaohjelmalle oli määritetty aiemmin mainitun kriteerin täyttämiä tiedostopäätteitä. Näistä tiedostopäätteistä useimmiten tietoaineistossa esiintyi ”.locked”-tiedostopääte, joka esiintyi yhteensä 26 eri kiris- tyshaittaohjelmassa. Kuvassa 6 esitetään kymmenen useimmin esiintynyttä tiedosto- päätettä.

Kuva 6. Kymmenen useimmiten esiintynyttä kiristyshaittaohjelman tiedostopäätettä Ran- somware Overview -tietoaineistossa.

Kustakin kiristyshaittaohjelmasta tarkasteltiin myös niiden käyttämien eri tiedosto- päätteiden lukumääriä. Keskiarvoisesti kukin kiristyshaittaohjelma käytti noin 1.11 eri tiedostopäätettä. Samas-Samsam -kiristyshaittaohjelma käytti yhteensä 23 eri tie- dostopäätettä, joka oli tietoaineiston kiristyshaittaohjelmista suurin määrä. Kuvassa 7 on kuvattuna kymmenen eniten eri tiedostopäätteitä käyttänyttä kiristyshaittaohjel- maa.

(31)

25

Kuva 7. Kymmenen eniten tiedostopäätteitä käyttävä kiristyshaittaohjelma Ransomware Over- view -tietoaineistossa.

Tietoaineiston sisältämiä kiristyshaittaohjelmien käyttämiä salausalgoritmeja tarkas- teltaessa huomattiin tietoaineiston sarakkeiden käsittelyn jälkeen olevan 276 tyhjää arvoa. Löydetyistä salausalgoritmeista AES (Advanced Encryption Standard, edisty- nyt salausstandardi) ilmaantui 115 eri aineiston kiristyshaittaohjelmista. Tämä tar- koittaa, että AES oli lähes 28 % todennäköisyydellä kiristyshaittaohjelman käytössä.

Tietoaineistossa kävi ilmi, että AES-salauksessa oli käytetty 128-, 192- sekä 256- bittisiä salausavaimia. Toiseksi yleisimpänä salausalgoritmina tietoaineistossa ilmeni RSA (Rivest-Shamirin-Adleman), joka oli mainittuna yhteensä 16 kertaa. Tietoaineis- tossa oli mainittu RSA-salauksessa käytettyinä 1024- ja 2048-bittisiä salausavaimia.

Tämän lisäksi huomattiin, että luvussa 2.2 mainittua hybridisalausta, jossa on hyö- dynnetty sekä AES- että RSA-salausalgoritmeja ilmeni aineistossa 15 kertaa. Salaus- algoritmien jakautumista on kuvattu kuvassa 8 sisältäen algoritmien ilmentymisien määrän tietoaineiston eri kiristyshaittaohjelmissa. Tietoaineistoa tarkasteltaessa löy- dettiin seuraavia algoritmeja, joita kiristyshaittaohjelmat ovat käyttäneet:

AES: AES (Advanced Encryption Standard) eli kehittynyt salausstandardi, joka tunnetaan myös nimellä Rijndael, on NIST:in (National Institute of Standards and Technology) valitsema seuraaja DES-salausalgoritmille käytet- täväksi Yhdysvaltojen salauksen standardina. AES on tiivis ja nopea symmet-

(32)

26

rinen salausalgoritmi, jossa voidaan hyödyntää 128-, 192- tai 256-bittisiä sa- lausavaimia. (Oriyano, 2016)

RSA: RSA on epäsymmetrinen salausalgoritmi, jota hyödynnetään niin sa- laamiseen kuin tunnistautumiseenkin. Algoritmin nimi tulee sen kehittäjien Ron Rivestin, Adi Shamirin ja Leonard Adlemanin nimistä. (Oriyano, 2016) RSA-salausalgoritmissa muodostetaan epäsymmetristen salausalgoritmien ta- paan kaksi avainta, joista toinen on julkinen ja toinen salainen. Näitä avaimia käytetään tiedon salaamiseen ja salauksen purkamiseen (Toivanen, 2017).

XOR: Eksklusiivinen disjunktio (Exclusive OR) on looginen funktio, joka on myös perustavanlaatuinen salakirjoitus, joka tunnetaan yksinkertaisuudestaan.

Kyseinen salakirjoitus on symmetrinen algoritmi, jonka perusidea perustuu totuusarvomuuttuja-algebraan, jossa arvo tosi palautetaan tapauksissa, joissa sille annetut argumentit ovat eriarvoiset. Algoritmin vahvuuteen vaikuttaa, siinä käytetyn avaimen pituus (Natsheh et al., 2016).

Blowfish: Blowfish on salausasiantuntijan Bruce Schneiderin kehittämä symmetrinen salausalgoritmi, joka hyödyntää 338-bittistä salausavainta. Tä- män lisäksi se on optimoitu käytettäväksi nykypäivän 32- ja 64-bittisissä pro- sessoreissa, toisin kuin tämän edeltäjä DES-salausalgoritmi (Oriyano, 2016).

SHA (Secure Hash Algorithm): SHA on maailman suosituin hajautusalgo- ritmi. Hajautusfunktiot ovat keskeinen alkeellinen salauskirjoituksen katego- ria, joita kutsutaan myös yksisuuntaisiksi hajautusfunktioiksi (one-way hash functions) (Sklavos & Koufopavlou, 2003).

GOST: GOST (Government Standard) eli Hallituksen standardi on Neuvosto- liiton kylmän sodan aikaan kehittämä menetelmä arkaluontoisen tiedon sa- laamiseen. GOST on yksinkertainen salausalgoritmi, joka käyttää 64-bittisiä lohkoja 256-bittisen salausavaimen kanssa (Najm et al., 2020).

DES: DES-standardi (Data Encryption Standard) on Yhdysvaltojen hallituk- sen vuonna 1977 käyttöönottama symmetrinen salausalgoritmi. Siinä hyö- dynnetään 56 bittistä salausavainta, joka on kuitenkin liian pieni käytettäväksi nykypäivänä. Algoritmia kuitenkin hyödynnetään edelleen vaikkakaan sitä ei suositella (Oriyano, 2016).

(33)

27

TripleDES: TripleDES tai 3DES on jatke symmetrisestä DES- salausalgoritmista. Sen nimi on seurausta siitä, että siinä hyödynnetään DES- algoritmin 56-bittistä salausavaimen sijaan kolme kertaa suurempaa 168- bittistä salausavainta. Algoritmi on laajassa käytössä muun muassa verkko- kaupoissa (e-commerce) (Oriyano, 2016).

Salsa-20: Salsa20 on jonosalain (stream cipher), joka saa syötteenään 256- bittisen salausavaimen sekä 64-bittisen nonssin (nonce) ja lohkolaskurin (block counter), jolla ylläpidetään sijaintia jonossa. Tästä tulosteena saadaan 512-bittisen sarja avainjonolohkoja (keystream blocks), joka yhdistetään sel- kokieliseen tietoon XOR-operaatiota hyödyntäen (Yadav et al., 2016).

RC-2: RC-2 on Ron Rivestin vuonna 1987 kehittämä symmetrinen lohkosa- laus, joka tunnetaan myös nimellä ARC2 (Gunasundari & Elangovan, 2014).

Algoritmi sallii 1–2048-bittiset salausavaimet, joka oli kuitenkin rajattu 40- bitin kokoiseksi NSA:n (National Security Agency) vaatimuksesta (Oriyano, 2016).

RC-4: RC-4 tukee edeltäjänsä tapaan 1–2048-bittisiä salausavaimia. Se kui- tenkin lisäsi tuen WEP-protokollalle (Wired Equivalent Protection) (Oriyano, 2016).

RC-6: RC-6 on edeltäjiensä tapaan symmetrinen lohkosalaus. Se oli finalisti AES-kisassa, jonka Rijndael voitti. RC-6 tukee 128-, 192- ja 256-bittisiä sa- lausavaimia ja käyttää 128-bittisiä lohkoja (Gunasundari & Elangovan, 2014).

Base64: Base64-koodausta (encode) hyödynnetään pääasiassa tarpeesta muuttaa binäärimuotoista dataa ASCII-muotoon esimerkiksi siirron tai tallen- nuksen seurauksena ympäristöön, joka on muun muassa perinnöllisistä syistä rajattu US-ASCII-muotoon. Kyseinen koodaus perustuu 64-merkkiseen aak- kostoon, joka sisältää niin isot kuin pienetkin aakkoset välillä A-Z sekä mer- kit ’+’ ja ’/’. Sitä on yleisimmin hyödynnetty MIME-sähköpostien (Multipur- pose Internet Mail Extensions) lähetyksessä vaikkakaan ei sähköpostien sa- laamiseen (Singh & Supriya, 2013).

(34)

28

ROT13: ROT13-salausalgoritmi on Caesarin salakirjoituksen (Caesar cipher) erikoistapaus, jossa käytettynä avaimena on 13. Tällä tarkoitetaan sitä, että jokainen salattava kirjain korvataan siirtymällä aakkostossa 13 kirjainta eteenpäin. Algoritmi perustuu latinalaiseen aakkostoon, jonka pituus on 26 merkkiä, jonka seurauksena salauksen purku ja salaaminen tapahtuu samalla algoritmilla (Sujitha & Pushpa, 2015).

ChaCha: ChaCha on Salsa20-jonosalaimen muunnelma. Sen tarkoituksena on tuottaa parempaa hajaantuneisuutta lähes samalla tehokkuudella kuin edeltä- jänsä (Yadav et. al., 2016).

Aiemmin mainittujen symmetrisien, epäsymmetrisien ja hybrisalausjärjestelmien lisäksi tietoaineistossa löydettiin myös hajautusalgoritmeja (hashing algorithm) ku- ten SHA-hajautusalgoritmin eri versioita. Hajautusalgoritmit ovat yksisuuntaisia sa- lausalgoritmeja (one-way encryption). Ne luovat syötteestä sekoitetun tulosteen, jota ei ole tarkoitus pystyä purkamaan, jonka seurauksena niiden purkaminen on käytän- nössä mahdotonta (Oriyano, 2016).

Tietoaineistossa oli myös käytettyjen salausalgoritmien lisäksi listattuna muita tie- dostojen salaamiseen käytettyjä menetelmiä. Useimmin näistä esiintyi ECDH- pohjainen (Elliptic Curve Diffie-Hellman Key Exchange) avainten vaihto, joka on anonyymi avainsopimusjärjestelmä (anonymous key agreement scheme). Tämän avulla kaksi osapuolta pystyvät luomaan jaetun salaisen avaimen turvattomassa ka- navassa. Tietoaineistossa oli myös mainittu Curve25519-funktio. Kyseinen funktio on suunniteltu yksinkertaistamaan ja nopeuttamaan Diffie-Hellman-avainsopimusta (key agreement) (Sasdrich & Güneysu, 2014). Lisäksi tietoaineistossa esiintyi GPG, joka tunnetaan myös nimellä GnuGPG (Gnu Privacy Guard), työkalu, jonka avulla voidaan hyödyntää hybridiä salausjärjestelmää käyttäen eri symmetrisiä ja epäsym- metrisiä salausalgoritmeja sekä muun muassa eri hajautusalgoritmeja (Nguyen, 2004). GPG-työkalu esiintyi tietoaineistossa kahdessa eri kiristyshaittaohjelmassa.

(35)

29

Kuva 8. Salausalgoritmien ja -menetelmien määrät Ransomware Overview -tietoaineistossa.

Tietoaineiston kiristyshaittaohjelmia tarkasteltaessa huomattiin, että keskimäärin kukin kiristyshaittaohjelma käytti noin 0.42 eri salausalgoritmia. Eniten eri salausal- goritmeja käytti HappyDayzz -kirityshaittaohjelma, joka käytti 7 eri salausalgo- ritmia. Kuvassa 9 on kuvattu tietoaineiston kymmenen eniten eri salausalgoritmeja sisältänyttä kiristyshaittaohjelmaa.

(36)

30

Kuva 9. Kymmenen eniten salausalgoritmeja käyttänyttä kiristyshaittaohjelmaa Ransomware Overview -tietoaineistossa.

Kaiken kaikkiaan tietoaineistosta voidaan selkeästi nähdä, että se on usean vapaaeh- toisen kerryttämä tietojoukko, sen sisältämän tiedon rakenteen yhdenmukaisuuden puutteen perusteella. Tämän seurauksena myös sen sisältämää tietoa tulee käsitellä kriittisesti.

3.3 Tietoaineistojen yhteisanalysointi

Tietoaineistojen yhdistäminen

Tässä luvussa käsitellään lukujen 3.1 ja 3.2 tietoaineistojen yhteiskäsittelyä. Luvussa kuvataan tietoaineistojen yhteisiä piirteitä, niiden yhdistämistä ja tarkastellaan myös millaisia kiristyshaittaohjelmien ominaisuuksia voidaan löytää hyödyntämällä kahta eri tietoa sisältävää tietoaineistoa. Tietoaineistojen yhdistäminen ja analysointi toteu- tettiin Googlen Colab -työkalua hyödyntäen.

Tietoaineistojen yhdistämisessä hyödynnetään Paquet-Clouston et al. (2019) Ran- somware Payments in the Bitcoin Ecosystem -tietoaineiston Expanded addresses stats -tietoaineiston family -saraketta sekä Roth et al. (2016) Ransomware Overview - tietoaineiston nimi -saraketta, joka aiemmin muutettiin vastaamaan Paquet-Clouston

(37)

31

et al. (2019) aineiston saraketta. Tietoaineistoja yhdistäessä otettiin huomioon myös Roth et al. (2016) tietoaineiston kiristyshaittaohjelmien muut tunnetut nimet sisältävä sarake. Kaiken kaikkiaan nämä huomioon otettaessa Ransomware Overview - tietoaineistosta saatiin käsittelyyn yhteensä 498 eri kiristyshaittaohjelman nimeä.

Ransomware Payments in the Bitcoin Ecosystem -tietoaineisto sisälsi yhteensä 38 eri kiristyshaittaohjelmaa ja tietoaineistoille yhteisiä kiristyshaittaohjelmia löytyi yh- teensä 22 kappaletta.

Python koodi

# Haetaan aiemmassa osiossa muodostettu tietoaineisto df = pd.read_csv('/content/Ransomware Overview_2.csv', sep=';') df.info()

df.describe(include='all')

# Luodaan algoritmeista kopio, jossa ei ole avainkokoja

df['Encryption Algorithm without key size'] = [';'.join(re.sub(r'\([0- 9]*\)', '', j) for j in i.split(';')) if type(i) == str else np.nan for i in df['Encryption Algorithm']]

# Poistetaan ylimääräiset merkit

df['Extensions'] = [i.strip('\"') if type(i) == str else np.nan for i in df['Extensions']]

df.describe(include='all')

# Haetaan Expanded addresses stats -tietoaineisto headers = ['address',

'family',

'NoIncomingTxs', 'noOutgoingTxs', 'firstTx', 'lastTx',

'totalReceivedSATOSHI', 'totalReceivedUSD']

eas =

pd.read_csv('/content/dataset/blockchain/expanded_addresses_stats.csv', names=headers,

usecols=[0, 1, 3, 4, 5, 6, 7, 8]) eas.head()

# Muutetaan firstTx- ja lastTx-ajat luettavampaan muotoon

eas['f_firstTx'] = [datetime.fromtimestamp(i) for i in eas['firstTx']]

eas['f_firstTx'] = pd.to_datetime(eas['f_firstTx'])

eas['f_lastTx'] = [datetime.fromtimestamp(i) for i in eas['lastTx']]

eas['f_lastTx'] = pd.to_datetime(eas['f_lastTx']) eas.head()

# Yhdistetään tieto kiristyshaittaohjelman nimen perusteella

# ottaen huomioon muut tunnetut nimet

# Otetaan talteen uniikit kiristyshaittaohjelmien nimet

# Ransomware Overview -tietoaineistosta ro = df.Family.dropna().unique().tolist()

# Lisätään muut tunnetut nimet

ro_aka_tmp = df['Also known as'].dropna().unique().tolist()

Viittaukset

LIITTYVÄT TIEDOSTOT

In light of these case studies, we evaluate the relevance of existing Finnish ecosystem service indicators, the data availability for ecosystem accounting in Finland, and the

Kuva-analyysin suhteen tarkastelen viittä eri kuva-analyysin menetelmään, jotka ovat ikonografinen analyysi, formalistinen analyysi, semioottinen analyysi, biografinen

Kuvion 2 komponentit voi jakaa myös sen perusteella, mitä komponentti tekee materialle. Komponentti voi muokata, korvata tai säästää materiaa tai komponentti voi liikuttaa

Työryhmä pitää keskustelua talous- ja rahaliiton päätöksenteon puutteellisesta demo- kraattisesta katteesta tärkeänä, mutta on tyyty- mätön viiden puheenjohtajan

Tärkein ero varsinaiseen luomista- pahtumaan on kuitenkin siinä, että Luojalla oli aikaa ja keinoja pureutua yksityiskohtiin ja me- kanismeihin, joista niin monet ovat meille

5G-radioliityntäverkossa (5G-RAN) tulee olemaan keskitetty pilvi 5G- verkon ytimessä (C-RAN) ja jakautunut pilvi (Fog-RAN), sekä lisäksi jakautunut vertaismobiilipilviverkko

Mutta, kysyy Eve polee- misesti, onko oikein, että tutkimustiedon tieteellisestä merkittävyydestä ja näin muodoin myös julkaisemisesta päättää etukäteen vain

Kerro miltä autoregressiivinen malli näyttäisi aineistolle Puuttuvan Muuttujan harha:.. Mikä on