Oikolue pakettisi – typosquatting vaanii varomatonta

Alkusyksystä maailmalla tapahtui kaksi typosquatting-hyökkäystä, jotka kohdistuivat NPM ja PyPi -rekistereihin. Mitä tapahtui ja miten hyökkäystä vastaan voi suojautua?

typosquatting.jpg

Elokuun alussa havaittiin maailmanlaajuisesti erittäin suositun NodeJS-ohjelmointikehyksen julkisessa pakettienhallintarekisterissä (NPM) lukuisia vihamielisiä paketteja, joiden tavoitteena oli lukea palvelimien sensitiivistä tietoa ja lähettää tiedot eteenpäin ulkopuoliselle palvelimelle internetissä.

Syyskuussa vastaava hyökkäys havaittiin Python-ohjelmointikielen vastaavassa julkisessa rekisterissä (PyPi). Molemmat rekisterit ovat julkisia ja niihin voi kuka tahansa ladata pakettejaan muiden kehittäjien käytettäväksi. Idea näissä rekistereissä on luoda uudelleenkäytettävää koodia valmiiksi ratkaisuiksi yleisiin ja harvinaisempiinkin ongelmiin.

Molemmat pakettienhallintarekisterit ovat kehittäjien keskuudessa Suomessakin erittäin yleisiä. On aivan normaalia, että kehittäjät ratkaisuja kehittäessään lataavat ja asentavat näistä rekistereistä riippuvuuksia suoraan omille koneilleen.

Molemmissa tapauksissa käytettiin jo internetin alkuajoilta tuttua hyökkäystekniikkaa nimeltä typosquatting. Tekniikka on ollut vuosikymmeniä käytössä url-osoitteiden kohdalla ja kohdistunut erityisesti pankkeihin. Oletetaan esimerkiksi, että tavallinen käyttäjä haluaa kirjautua Nordean verkkopankkiin, mutta kirjoittaa selaimen osoitekenttään vahingossa nrdea.com. Kyseinen url-osoite ohjaa huijaussivustolle, joka näyttää ja toimii kuten Nordean sivusto. Sivustolla pahaa aavistamaton käyttäjä syöttää verkkopankkitunnuksensa, jolloin huijaussivuston tekijät saavat nuo tiedot haltuunsa.

NPM ja PyPi -rekistereihin ladatut paketit oli nimetty yleisimpien riippuvuuskirjastojen mukaan yhden kirjaimen erolla. Monissa kirjastoissa ero oli esimerkiksi väliviivan lisääminen tai poistaminen (alkuperäinen: cross-env, muutettu: crossenv) eli hyvin huomaamaton. Mikäli kehittäjä latasi ja asensi riippuvuuden koneelleen, paketti toimi täysin identtisesti alkuperäisen kanssa, mutta samalla luki koneen ympäristömuuttujat ja muutamia muita tietoja lähettäen ne eteenpäin tuntemattomalle koneelle internetissä. Hyökkäyksestä teki erittäin vaarallisen se, että sitä oli todella vaikea havaita, koska riippuvuus toimi ohjelmakoodissa aivan kuin alkuperäinen. Pahimmillaan kirjoitusvirhe voi valua tuotantoon asti, jolloin hyökkääjä voi onnistua saamaan haltuunsa tuotantotietokannan tunnukset anastaen täten vaikkapa luottokorttitietoja.

Hyökkäyksestä tekee entistä vaarallisemman se, että usein ladattujen pakettien asennusohjeissa pyydetään asennusta root-tason oikeuksilla. Tällöin paketissa oleva haittakoodi myös suoritetaan pääkäyttäjä-oikeuksin, jolloin koodi saa täydet oikeudet järjestelmään. Varsinkin root-oikeuksilla, mutta toisinaan myös peruskäyttäjän oikeuksin, voi haitallinen koodi lukea vaikkapa koneen SSH-avaimen tai AWS-kredentiaalit. Tämän jälkeen hyökkääjä voi potentiaalisesti kaapata esimerkiksi yrityksen AWS-tilin tai laajentaa hyökkäystä sisäisiin järjestelmiin.

Miten suojautua?

Tässä kohtaa on hyviä ja huonoja uutisia. Huono uutinen on se, että ainoa 100% keino suojautua näitä hyökkäyksiä vastaan on olla käyttämättä kolmansien osapuolien NodeJS- tai Python -kirjastoja. Ei nimittäin ole olemassa idioottivarmaa keinoa suojautua typosquatting hyökkäykseltä, mikäli näitä kirjastoja käyttää.

Koska kuitenkin näissä ohjelmointikielissä on selkeät omat vahvuutensa ja hyötynsä niin niiden kokonaan käyttämättä jättäminen ei ole oikea ratkaisu. Samalla logiikallahan ihmisen ei kannattaisi koskaan poistua kodistaan, mikäli haluaa välttää auton alle jäämisen. Hyvä uutinen onkin se, että on olemassa joitakin toimenpiteitä millä potentiaalista typosquatting hyökkäystä voi mitigoida.

Paras ja tehokkain toimenpide on huolehtia ratkaisunsa sensitiivisen tiedon säilytystavoista. Esimerkiksi ympäristömuuttujissa ei koskaan saisi säilyttää mitään tunnuksia tai salasanoja. Jokaisessa ohjelmointikielessä ja –kehyksissä on omat best practice –suositukset kuinka salasanoja ja muita kredentiaaleja tulisi säilyttää.

Toinen melko tehokas toimenpide on konttiteknologian käyttäminen. Jos paketti ladataan ja asennetaan kontin sisään, pääsee haittakoodi lukemaan vain kontin sisältöä, ei konttia pyörittävää palvelinta.

Todennäköistä kuitenkin on, että julkiset pakettienhallintarekisterit tulevat kehittämään tietoturvaansa. Yksinkertaisin parannus mikä varmasti on tulossa nopeasti, on jakaa paketit luotettuihin ja ei-luotettuihin (trusted/untrusted). Käyttäjät voivat määritellä hakiessaan paketteja lataavatko vain luotettuja. Nykyisin ainoa keinoa näissä rekistereissä havaita typosquatting hyökkäyksiä on saada ilmoitus rekisterien käyttäjiltä. Esimerkiksi Linux-pakettien vastaavissa rekistereissä vain luotetut ja tunnistetut käyttäjät voivat ladata pakettejaan jakoon. Nykyisin kuka tahansa voi ladata pakettejaan jakoon NPM ja PyPi -rekistereihin. Hyökkäyksestä ja sen mitigoinnista löytyy hyvää keskustelua mm. täältä.

NPM ja PyPi -rekistereihin kohdistunut hyökkäys on kuitenkin konkreettinen esimerkki siitä, että kehittäjien on suhtauduttava huolellisesti ja vakavasti tietoturvaan. Myös ratkaisuja tilaavien yritysten on osattava vaatia toimittajilta riittävää ymmärrystä tietoturvasta ja tietoturvallisesta kehittämisestä.

Lue lisää tietoturva-aiheisia blogejamme >>

tietoturva




Tero Niemistö | Tiimiesimies, teknologia-johtaja

Tero Niemistö | Tiimiesimies, teknologia-johtaja

Tero on ”managerisoitunut” pitkän linjan arkkitehti. Noin 14 teknisen vuoden jälkeen Tero siirtyi esimiesrooliin tahtonaan johtaa alan huippuasiantuntijoita kuten itseään haluaa johdettavan. ”Esimiehen tärkein tehtävä on mahdollistaa alaistensa onnistuminen”, Tero sanoo. Teron johtamisfilosofiassa esimies ei ole perinteisen hierarkisen mallin mukaisesti joukkojen yläpuolella vaan tukee heidän päivittäistä työtä alhaalta. Hän haluaa olla läsnä ja kiinnostunut alaistensa arjesta sekä tukea heitä sparraamalla ja valmentamalla niin usein kuin mahdollista. Kun Tero laittaa ns. haalarit päälle ja kädet saveen, niin hänet löytää usein julistamassa DevOps-kulttuurin ilosanomaa ja rakentamassa sovelluskehityshankkeisiin täysin automatisoitua jatkuvan julkaisun putkea.

Kirjoittajan kaikki blogitekstit

Tilaa blogikirjoitukset sähköpostiisi




Seuraa meitä somessa

LinkedIn Twitter Facebook YouTube YouTube