NinjaStik salauksen haavoittuvuus

Bittirahalaiset tykkäävät vekottimista ja tekniikasta. Ei ole siis ihme, että meidät löytää testaamasta uusia kauppaan tulevia tuotteita. Näin tapahtui myös NinjaStikin kohdalla.

Testaamisen aikana heräsi kuitenkin kysymyksiä, kuten voiko kaupallisiin turvallisuustuotteisiin luottaa ja miten NinjaStikin kohdalla ollaan voitu varmistaa, että se on täysin turvallinen. Päädyttiin keskustelemaan NinjaStikissä käytetystä osion salauksesta, jolloin heräsi eräs tärkeä kysymys: Mitä jos valmistaja onkin päättänyt valmistaa tikut kloonaamalla?

Itse olen hyvin skeptinen kaikenlaisia turvallisuustuotteita kohtaan, ellei niistä ole tarkkaa selvitystä, miten ne on valmistettu. NinjaStikin sivuilla löytyy kyllä tekniset speksit siitä, mitä tikkuun on laitettu ja se toimii varmasti hyvänä lähtökohtana oman tikun tekemiseen, mutta piru on kuuluisasti yksityiskohdissa.

NinjaStikissäkin käytetyssä LUKS-osioissa on salausavain, joka avataan salasanaa tai salasanana toimivaa tiedostoa käyttäen. NinjaStikin valmistaja ei ollut lainkaan ottanut huomioon valmistaessaan tikkuja kloonaamalla sitä, että se tarkoittaa käytännössä salatun osion varsinaisen salausavaimen olevan julkisessa jakelussa. Salasanaa vaihtamalla kun ei itse salausavain mihinkään muutu ja salausavaimen saa hankkimalla uuden NinjaStikin. Tikkuun ei myöskään voi evätä vaikkapa mustasukkaiselta puolisolta pääsyä salasanaa vaihtamalla, jos kyseinen puoliso on aikaisemmin saanut salausavaimen haltuunsa.

Jotta NinjaStikkien valmistus olisi mielekästä ja käyttäminen turvallista olisi valmistajan pitänyt tehdä sellainen ratkaisu, että ensimäisellä kerralla tikkua käynnistettäessä uusitaan tikun salaus. Bittiraha aikoo uusia kaikkien myytävien tikkujen salausavaimet ja liittää mukaan ohjeet kuinka asiakas itse voi uusia salausavaimen. Periaatteena pitäisi turvallisuustuotteita myyvillä tahoilla olla aina se, että kertoo asiakkaalle suoraan, ettei edes luotettavanakaan pidetyn tahon tuotteeseen pidä sokeasti luottaa. Oikea turvallisuus syntyy siitä, että asiakkaalle kerrotaan, miten tuotetta käytetään oikein ja miten todistetusti varmistetaan, ettei edes valmistajakaan pysty pääsemään käsiksi asiakkaan tallennettuun tietoon.

Bittiraha on ollut yhteydessä NinjaStikkien valmistajaan ja he ilmoittivat heti lopettavansa kloonaamalla tikkujen valmistamisen ja ottavansa yhteyttä niihin asiakkaisiin, jotka ovat saaneet kloonaamalla valmistetun NinjaStikin. Valmistajan kertoman mukaan kloonamalla on tehty vain vähän tikkuja ja vastaisuudessa NinjaStikit valmistetaan alkuperäisellä menetelmällä, rakentamalla ne yksitellen huoneella täynnä koneita.

Korjaus

Ellei käytössäsi ole jo linuxjakelua, jossa tarvittavat työkalut ovat, tarvitset boottaavan LiveCD:n. Suosittelen Fedora Live Desktoppia, koska siihen saa asennettua tarvittavan cryptsetup-reencrypt työkalun antamalla terminaalissa seuraavanlaisen komennon:

sudo yum -y install cryptsetup-reencrypt

Tietääkseni ainakaan Ubuntun LTS versiossa ei ole riittävän uutta versiota cryptsetup paketista, joten se ei sisällä tarvittavaa työkalua, joka tuli vasta cryptsetupin version 1.5 aikana. Bootattuasi LiveCD:n, ja asenenttuasi cryptsetup-reencrypt paketin, hanki pääkäyttäjän oikeudet(sudo su), liitä NinjaStick koneeseen ja seuraa näitä ohjeita:
 

//tunnista viimeksi tökätty laite

dmesg|tail
[ 1494.609774] sd 6:0:0:0: [sdf] Write Protect is off
[ 1494.609781] sd 6:0:0:0: [sdf] Mode Sense: 23 00 00 00
[ 1494.610406] sd 6:0:0:0: [sdf] No Caching mode page present
[ 1494.610409] sd 6:0:0:0: [sdf] Assuming drive cache: write through
[ 1494.613495] sd 6:0:0:0: [sdf] No Caching mode page present
[ 1494.613500] sd 6:0:0:0: [sdf] Assuming drive cache: write through
[ 1494.614011]  sdf: sdf1
[ 1494.616820] sd 6:0:0:0: [sdf] No Caching mode page present
[ 1494.616824] sd 6:0:0:0: [sdf] Assuming drive cache: write through
[ 1494.616827] sd 6:0:0:0: [sdf] Attached SCSI removable disk

//viimeksi liitetty laite näyttäisi olevan /dev/sdf
//NinjaStikin toinen osio on se salattu, joten
//osio, jonka haluaisimme tässä tapauksessa uudelleenkryptata on /dev/sdf2

//uudelleenkryptaa osio
cryptsetup-reencrypt -B 32 -c aes-xts-plain64 /dev/sinunlaite
Vaihtoehtoisesti ja ehkä mielummin kannattaa ottaa NinjaStikin toisesta osiosta levykuva ja tehdä samat operaatiot levykuvalle. Siten voit tarkistaa, että levykuvalla oleva osio tosiaan toimii ennenkuin kirjoitat levykuvan takaisin tikulle.

Täällä lisäinfoa uudelleenkryptauksesta: http://asalor.blogspot.fi/2012/08/re-encryption-of-luks-device-cryptsetup.html

Kannattaa tarkistaa salausavaimen tiedot komennolla cryptsetup luksDump /dev/sinunlaite. Oletuksena ollut headeri näytti meille tulleissa NinjaStikeissä tällaiselta:

Version:       	1
Cipher name:   	aes
Cipher mode:   	cbc-essiv:sha256
Hash spec:     	sha1
Payload offset:	4096
MK bits:       	256
MK digest:     	bb 49 14 91 26 e1 be 4e 45 2c 9e 81 15 95 45 43 14 1d 9c eb 
MK salt:       	09 b3 d0 c4 15 8e cb 0b 4c 20 02 39 a3 71 7c 67 
               	61 5c 3a ef 8b 3f f9 87 fb d5 bc 03 b9 eb ca 21 
MK iterations: 	18750
UUID:          	4f85fbe5-2d73-47e4-a59f-3ae3b080d913

Vaikka oma salausavaimesi näyttää erilaiselta, kannattaa silti tehdä uudelleenkryptaus. Siten voit olla ihan oikeasti varma, ettei kellään ole pääsyä tikullesi.
Lisää aiheesta: NinjaStik encryption vulnerability

 

Kuva – Flickr Creative Commons: R’eyes