TigerTeam - suomalainen tietoturvablogi

4 merkintää avainsanalla ”cve”:

Tällainen on Nixun haavoittuvuusjulkaisukäytäntö

Vuosien varrella asiantuntijamme ovat löytäneet useita aikaisemmin tuntemattomia haavoittuvuuksia asiakkaan käyttämistä sovelluksista ja järjestelmistä. Asiakkaan, järjestelmän auditoineen asiantuntijan ja koko toimintakentän etu on, että haavoittuvuus voidaan korjata ja korjaava tietoturvapäivitys tuoda jakeluun. Tänä keväänä ko. politiikka on laadittu kirjalliseen muotoon. Politiikan voi lukea sivuiltamme sekä suomeksi että englanniksi.

Yksi käytäntöjemme mukaan julkaistu haavoittuvuus on viime vuodelle sijoittuva Nokia E75 -matkapuhelinta koskeva suojakoodin ohittamisen mahdollistava haavoittuvuus. Tapauksessa valmistajan kanssa tehty sopimus mahdollisti haavoittuvuudesta tiedottamisen julkisesti ja teimme yhteistyötä myös CERT-FI-yksikön (CERT Finland) haavoittuvuuskoordinoinnin kanssa.

Osana prosessia pyrimme jatkossa hakemaan haavoittuvuudelle aina myös oman CVE-tunnisteen.

Tagit: cve, haavoittuvuustestaus, tietoturva Delicious Kommentoi

Koodi joka tekee vain sen mitä pitää eikä mitään muuta?

Äskettäinen vakava tietoturvalöydös GitHubissa nostatti varmasti monien kulmakarvoja. Vaikka kyseessä ei ollut pahantahtoinen yritys hyökätä järjestelmää ja sen tietoja vastaan, koko kuviossa on monta mielenkiintoista ja huolestuttavaakin puolta.

Ensinnäkään moni ei varmaankaan ole oikeasti miettinyt, kuinka paljon avoimiin open source -komponentteihin oikeasti luotetaan. Tässä tapauksessa olisi ollut verrattain triviaalia saada ujutettua pahantahtoista koodia sopiviin projekteihin. Ehkä asia olisi huomattu, ehkä ei. Moni ei ole itse käynyt läpi käyttämäänsä avoimen lähdekoodin koodia, mutta voi toivoa että projektin kehittäjät kiinnittäisivät asiaan huomiota.

Toisekseen haavoittuvuuden käsittely (varsinaisesti Ruby on Railsissa) ei ehkä mennyt kaikkien taiteen sääntöjen mukaan. Selviönä ei voi pitää, että aina vakavatkaan ongelmat saataisiin oikeasti nopeasti korjattua.

Asiasta on kuitenkin nostettava esille sen perimmäinen ongelma, eli Ruby on Railsissa oleva haavoittuvuus. Se ei ole mitenkään uniikki, vaan samanlaisia ongelmia on nähty muissakin teknologioissa.

Entä kun parametreina onkin vihamielistä sisältöä

Teknisesti GitHubin tapauksessa kyse oli Ruby on Railsin ns. Mass Assignment -toiminnon väärinkäytöstä, jossa tietokantaa päivitetään automaattisesti käyttäjän lisäämien parametrien perusteella. Näin tapahtuu myös niiden kenttien osalta, joita ei ollut tarkoitettu päivitettäväksi.

Hyvin samantyyppinen ongelma todettiin vuonna 2008 Spring MVC -frameworkissa, tapaus tunnetaan nimellä Data Submission to Non-Editable Fields. Spring MVC:ssä todettiin pari vuotta sitten myös vakavampikin ongelma, jossa käyttäjän lähettämät request-parametrit käsiteltiin niin, että tuloksena palvelin lähti lataamaan taglibien koodia hyökkääjän antamasta HTTP-osoitteesta – uskomatonta mutta totta. Haavoittuvuus referensseineen on kuvattu CVE-2010-1622-dokumentissa.

Vastaavanlainen tapaus on Strutsin OGNL-lausekkeiden käsittely. Struts käsittelee käyttäjän antamia OGNL-muotoisia request-parametreja automaattisesti ja mahdollistaa esimerkiksi järjestelmäkomentojen ajamisen etänä palvelimella. Tekniikkaan liittyy lukuisa määrä vakavia haavoittuvuuksia (vanhimmasta uusimpaan CVE-2007-4556, CVE-2008-6504, CVE-2010-1870, CVE-2012-0391 ja CVE-2012-0838). Nämä haavoittuvuudet ovat siis olemassa vaikkei kyseistä toimintoa varsinaisesti käyttäisikään.

Kaikki tapaukset ovat vakavia tietoturvaongelmia. Parhaiten niitä kuvaa seuraava Dr Dobb’s Journalissa esitetty kaavio (Thompson, Whittaker: ”Testing for Software Security”, Dr Dobb’s Journal November 2002):

Pääosin ohjelmisto tekee sen mitä sen on speksattu tekevän. Kuitenkaan kaikilta osin se mitä järjestelmän speksataan tekevän, ei välttämättä päädy toteutukseen. Tällöin syntyy juuri niitä tyypillisiä ohjelmistobugeja. Yllättävää kyllä, ohjelmisto toisaalta tekee asioita, joita sen ei ole tarkoitettu tekevän.

Nämä ovat hyviä kandidaatteja tietoturvaongelmien lähteiksi, ja juuri tällaisista asioista edellä mainituissa tapauksissa on kyse.

Mistä tällainen speksaamaton toteutus sitten syntyy? Tietenkään harva koodailee järjestelmään ylimääräisiä kiemuroita ilman mitään varsinaista tarvetta, oli se kirjattu spekseihin tai ei.

Käytännössä kyse on jostain seuraavista asioista:

  • Järjestelmän toimintalogiikkaa ei ole mietitty riittävän kattavasti, joten tietyillä syötteen arvoilla oikea toiminta on jätetty määrittämättä. Koska järjestelmän täytyy kuitenkin tehdä jotain syötteelle, ollaan vaarallisella vyöhykkeellä. “Hauskimpia” esimerkkejä ovat online-ostospalvelut, joissa voi esimerkiksi jättää palvelulle negatiivista tippiä. Tällöin ostoksen loppusumma pienenee sopivasti. Koska missään ei erikseen määritelty (tai mietitty) mitä negatiivisille arvoille tehdään, niin järjestelmä luonnollisesti laskee loppusumman ostosten hinnan ja tipin matemaattisena summana.

  • Järjestelmässä käytetään komponentteja, jotka helpottavat koodaajan työtä ja tekevät erilaisia asioita automaattisesti ja pyytämättä. Erilaiset automaattiset request-parametrien käsittelyt menevät juuri tähän kategoriaan. Kätevä toiminto, kyllä, mutta kovin vaarallinen. Jos miettii millainen määrä koodia oikeasti ajaa tyypillistä web-tietojärjestelmää, niin räätälöidyn ohjelmakoodin osuus on häviävän pieni verrattuna frameworkeihin, komponentteihin, sovelluspalvelimen koodiin ja muuhun ajettavaan koodiin, vaikka jättäisi käyttöjärjestelmätason kokonaan huomioimatta. Tämän huomaa helposti katsomalla virhetilanteiden yhteydessä näkyviä ns. stack traceja, joissa kutsupuun muutama taso on räätälöityä koodia ja 100 tasoa kaikenlaista muuta koodia.

  • Järjestelmässä on tuotantokäytön kannalta kuollutta koodia, esimerkiksi testaukseen ja vianselvitykseen käytettävää logiikkaa. Tällaista logiikkaa voi tietenkin olla myös muualla kuin räätälöidyssä koodissa, tyypillisesti vaikkapa frameworkin esimerkkikoodin muodossa.

Pahantahtoisen koodin ja takaporttien mahdollisuutta ei tietenkään voi sulkea pois, mutta käytännössä tällaiset tapaukset ovat kovin harvinaisia.

Mitä asialle sitten pitäisi tehdä?

Pohjimmiltaan pitäisi pystyä tarkasti määrittämään, mitkä ovat järjestelmän kannalta sallittuja ja odotettuja syötteitä (esim. URL-osoitteita, parametrien nimiä ja syötteiden arvoja). Kaikki muu pitäisi olla kiellettyä. Käytännössä tällaisen teknisen määrityksen muodostaminen, ylläpitäminen ja tekninen käyttö on hyvin hankalaa. Yhtenä vaihtoehtona on varmistaa, että käyttäjältä hyväksytään vain toimintoja ja syötteitä, jotka järjestelmä itse tarjoaa käyttäjälle. Parhaimmillaan tähän soveltuu käytetyn UI-frameworkin omat suojaukset (esim. linkkien kryptaus à la Wicket), mutta ulkoisiakin komponentteja voi sovitella paikalleen (esim. HDIV). Voi myös kerätä lokia järjestelmälle tulevista syötteistä ja parametreista ja sitten määrittää sallittu syötejoukko. Tietysti itse syötteiden arvoja harvoin pystyy kiinnittämään.

Jos ongelman onnistuu taklaamaan, samalla tulee usein hoitaneeksi OWASP:in Top 10 -listan ongelmat A4, A5 ja A8. Käänteisesti toimiminen ei kuitenkaan toimi eli Top 10 -listan huomioiminen ei suojaa tällaisilta ongelmilta.

Pahimpaan on kuitenkin syytä varautua ja rakentaa järjestelmän puolustus useamman kerroksen varaan ja hyviä periaatteita noudattaen. Toimiva komponenttihaavoittuvuuksien seuranta on myös keskeinen osa haavoittuvuuskartalla pysymistä.

Vielä lyhyesti alun GitHub/Ruby on Rails -ongelmaan. Hyviä yksirivisiäkin puolustustapoja sitä vastaan löytyy, kunhan niistä ollaan tietoisia ja velvoitetaan koodaajatkin seuraamaan valittua toimintatapaa. Tapa tulee kirjata kehittäjien Secure Coding Guidelinesiin tai vastaavaan käytännön ohjeeseen. Ja jos ohjeistusta ei vielä ole, sellainen on viimeistään nyt hyvä muodostaa ja ottaa käyttöön.

Lisää aiheesta: How Homakov hacked GitHub and the line of code that could have prevented it

Tagit: cve, koodikatselmointi, owasp, sovellusturvallisuus Delicious Kommentoi (1 kommentti)

Jatkuuko CVE-tunnuksen tarina vielä toiset kymmenen vuotta?

Haavoittuvuuksien tunnistamiseen käytettävä CVE-hanke (Common Vulnerabilities and Exposures) on täyttänyt jo kymmenen vuotta.

Tietueiden määrä on noussut alkuaikojen muutamasta sadasta yli 39 000:een. Monien turva-ammattilaisten muistamat, CVE:iden rinnalla kulkeneet CAN-kandidaattitunnukset jäivät nelisen vuotta sitten pois käytöstä.

Ohjelmistovalmistajista omat CVE-sarjansa ovat saaneet käyttöön mm. Adobe, Apple, Debian, Microsoft ja Oracle. Tunnuksia ovat tietoturvatiedonannoissaan (advisory) sitoutuneet käyttämään yli 70 eri kokoista alan toimijaa - jopa piskuinen Slovenian CERT-tiimi.

Kaiken kaikkiaan CVE-hanke elää ja voi paksusti - eikä vähiten Yhdysvaltain Kotimaan turvallisuuden viraston eli DHS:n National Cybersecurity Division -yksiköltä muutaman vuoden ajan saamansa taloudellisen tuen ansiosta.

Tunnusten käyttö on levinnyt laajalle ja toimii hyvin - tunnusten referenssien avulla lisätiedon löytäminen haavoittuvuuksista helpottuu.

Apua haittaohjelmien nimeämissekamelskaan?

Erityisesti tunnuksia soisi näkyvän kuitenkin enemmän haittaohjelmien nimissä helpottamassa esimerkiksi troijalaisten yhdistämistä nollapäivähaavoittuvuuksiin. CVE:n käyttö nimissä on vielä hyvin harvinaista. Tunnusta CVE-2008-4250 on käytetty jonkin verran MS08-067-haavoittuvuutta hyödyntävän RPC-madon nimeämisessä. Fortinet-yhtiöltä löytyy nimiharvinaisuus W32/CVE20065994!exploit, joka tuli käyttöön vuonna 2006 kohdistettuihin hyökkäyksiin käytetyn Microsoft Wordin nollapäivähaavoittuvuuden troijalaisen nimeämisessä.

Kesällä paikattu Windowsin ATL-haavoittuvuus on kirvoittanut virustorjujatoimijat antamaan yllättävän monta CVE-2008-0015:n sisältävää nimeä aukkoa hyödyntävälle JavaScript-haittaohjelmalle:

JS/Exploit.CVE-2008-0015.A.Gen (ESET)

JS:CVE-2008-0015-A (Avast)

Exploit:JS/CVE-2008-0015 (Microsoft)

Paria vuotta aikaisemmin taas löytyy pelkkä CVE-tunnus nimenä: CVE-2006-3059 (F-Secure)

Haittaohjelmien nimien yhtenäistämiseen tähtäävä Mitren CME-sisarhanke (Common Malware Enumeration) on pian kaksi vuotta elänyt hiljaiseloa.

Voisiko CVE-tunnuksesta tulla helpotusta? Ratkaisu pidentäisi nimiä 13 merkillä, mutta tunnus voitaisiin hyvin kirjoittaa myös ilman erotinviivoja. Uudet haittaohjelmathan ovat pitkälti vanhojen muunnoksia, jolloin ainoastaan varianttia kuvaava pääte nimessä muuttuu.

Esimerkiksi kolmisen viikkoa sitten löydetyn Acrobat-haavoittuvuuden troijalaiset tunnetaan Exploit-PDF.x-, TROJ_PIDIEF.XX- ja Troj/PDFJs-X-muotoisilla nimillä. Nimistä on vaikea päätellä niiden liittyvän Adobe Acrobatin nollapäivähaavoittuvuuteen (CVE-2009-3459).

Entä jos tietoturvaihmiset voisivatkin merkkijonon CVE20093459 virustorjunnan lokeista löytäessään saada tiedon organisaationsa joutumisesta kohdistetun hyökkäyksen kohteeksi?

Tagit: cve Delicious Kommentoi

Acrobat-paikka tulossa – mutta mitä ovat CVSS:t ja CWE:t?

Kerroimme viime viikon lopulla Adobe Acrobatia ja Adobe Readeria koskevista nollapäivähaavoittuvuuksista. Valmistaja vahvisti viikonloppuna paikkauksen julkaisuaikataulun – korjaus saapuu 12. toukokuuta mennessä eli noin viikon kuluttua.

Myös CVE-tunnukset noille kahdelle haavoittuvuudelle on julkaistu. getAnnots()-haavoittuvuus on CVE-2009-1492 ja customDictionaryOpen()-haavoittuvuus taas CVE-2009-1493.

Jokainen haavoittuvuuksiin vähänkin enemmän perehtynyt on törmännyt Common Vulnerabilities and Exposures -yhtenäistystunnuksiin, joita jaetaan tuhansia vuosittain. Tunnuksille annetaan pienellä viiveellä myös sen vakavuutta kuvaava numeroarvo asteikolla 0.0 – 10.0. Pisteytysjärjestelmä tuntee nimen Common Vulnerability Scoring System ja siitä käytetään lyhennettä CVSS. Voidaan puhua myös CVSS-pisteytyksestä.

NVD- eli National Vulnerability Database -tietokannan sisältämä ensin mainitun haavoittuvuuden CVSS-arvo on korkeimpaan High-luokkaan kuuluva 9.3.

Haavoittuvuuksille on jo parin vuoden ajan annettu myös haavoittuvuuden aiheuttaneen ohjelmointivirheen tyyppiä kuvaava CWE-luokitus – Common Weakness Enumeration. Luokka on tässä tapauksessa järjestelmäresurssien hallinnassa tapahtunut virhe tunnuksella 399.

Edellä mainituista jälkimmäinen Adobe Acrobat -aukko eli käyttäjän omiin sanastoihin liittyvä haavoittuvuus puolestaan kuuluu CVSS-arvonsa perusteella keskitasolle arvolla 6.8.

Käytämme CVE-, CVSS- ja CWE-tunnuksia ja -arvoja myös asiakkaille toimittamissamme raporteissa.

Uusia CVE-tunnuksia julkaistaan päivittäin ja samalla haavoittuvuudet saavat CVSS-arvon. CWE-lista taas päivittyi uuteen 1.3-versioon maaliskuussa.

Tagit: cve, cvss, cwe, tietoturvapäivitys, tietoturvatermit Delicious Kommentoi