Analiza sigurnosti RFID/NFC kartica

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Članovi:

- Tomislav Turek

--Tomislav.turek 14:06, 5. studenog 2015. (CET)

- Mislav Jurinić

--Mjurinic 14:50, 5. studenog 2015. (CET)


Sadržaj

Uvod

Touchatag čitač NFC čipova

Prilikom izrade ovog projekta koristili smo Touchatag čitač NFC čipova tip ACR122U sa Mifare Ultralight Type 2 tagovima. Prije bilo kakvog rada bilo je potrebno ga postaviti za Linux. Budući da se radi o vrlo starom čitaču koji više nema support, a nema niti stranice s koje bi se skinuli driveri ili aplikacije, morali smo koristiti alternativne izvore kako bismo s njim mogli komunicirati.

Kako bi čitač mogao ispravno raditi potrebno je imati postavljene specifične biblioteke i driver. Dubljim istraživanjem, uspjeli smo doći do drivera za čitače tipa ACR122U te nakon instalacije bilo je moguće vidjeti uređaj ispisom naredbe lsusb.

Alt text
Dagle te jzma

Nakon instalacije drivera, mogli smo započeti sa konkretnom komunikacijom. Za komunikaciju sa čitačem korištena je open source biblioteka libnfc te biblioteke koje su nužne da bi libnfc mogao raditi: pcscd, libusb te libccid. Uz libnfc korištena je i dodatna biblioteka libfreefare koja se koristi za operacije koje su specifične za Mifare Ultralight te Mifare Classic tagove.

Navedene biblioteke omogućavaju nam rad sa različitim funkcijama Touchatag čitača koje su objašnjene u nastavku ove stranice.

--Tomislav.turek 17:41, 7. siječnja 2016. (CET)

--Mjurinic 21:46, 8. siječnja 2016. (CET)


MiFare Tag byte layout

Mifare Ultralight Type 2 Tag

NFC čipovi imaju određeni smještaj bajtova gdje svaki od njih ima određenu funkciju. Byte layout Mifare Ultralight čipova dan je u nastavku.

0 1 2 3 Page
UID0 UID1 UID2 Internal0 0
UID3 UID4 UID5 UID6 1
Internal1 Internal2 Lock0 Lock1 2
OTP0-CC0 OTP1-CC1 OTP2-CC2 OTP3-CC3 3
Data0 Data1 Data2 Data3 4
... ... ... ... ...
... ... ... ... 15

Možemo uočiti da je čip sastavljen od stranica (page) kojih na slici ima 16, ali ih može biti i više. Prve tri stranice sadržavaju informacije o samom tagu. Prva i druga stranica jesu UID koja identificira tag, a zatim slijede Internal i Lock bajtovi dok na četvrtoj stranici imamo OTP (one time programmable) bajtove.

Uobičajeno je da je nakon četvrte stranice moguće upisivati konkretne podatke (data pages).

--Tomislav.turek 18:13, 7. siječnja 2016. (CET)

Mifare Classic tag

S druge strane Mifare Classic tagovi imaju malo drukčiju organizaciju koja ovisi do samog taga (postoje različite vrste kao što su Classic 1K ili Classic 4K). Konkretno, Mifare Classic 1K tag sastoji se od 16 sektora gdje svaki sektor sadrži 4 bloka (od 0 do 3). U bloku 3 svakog sektora u Mifare Classic tagu nalaze se tajni ključevi A i B zajedno sa access bitovima koji definiraju autenticiranje tog sektora sa ključevima ovisno o operaciji (pisanje ili čitanje) te GPB (General Purpose Byte). Blok 3 naziva se sector trailer.

Sector Block 6 bytes 3 bytes 1 byte 6 bytes
0 3 Key A Access bits GPB Key B
2 Data
1 Data
0 Data
Sector Block 6 bytes 3 bytes 1 byte 6 bytes
1 3 Key A Access bits GPB Key B
2 Data
1 Data
0 Data
...

--Tomislav.turek 14:15, 9. siječnja 2016. (CET)


Pokušaj otključavanja MiFare Ultralight taga

Prema byte layoutu, uočili smo da svaki Mifare Ultralight tag na stranici 2 ima lock bajtove, konkretno 11. i 12. bajt. Lock bajtovi omogućavaju da se sadržaj zadanog taga više ne može izmjeniti nakon što ga zaključamo. Zaključavanje radi tako da određeni bit u lock bajtu zaključava određenu stranicu unutar taga. Uz pomoć Touchatag čitača možemo isčitati tag i spremiti kompletne njegove podatke na računalo u datoteku.

Alt text
Spremanje sadrzaja taga u dump datoteku

Prva naredba čita 16 stranica taga te sprema bajtove u datoteku kdr. Sadržaj datoteke je sljedeći:

�DO\87Q\96"\80eH\FF\E1��\00��\D1��U�ttag.be/m/04444F51962280\FD	\85I\B1M\F6\AA;ڗy\96\00\00\00\00

Pomoću programskog koda, pokušali smo izmjeniti bajtove očitanog taga kako bi ga mogli otključati. Naime, zaključani tagovi imaju zapisan 0xFF u Lock0 bajtu te 0xF7 u Lock1 bajtu dok otključani tagovi sadrže 0x00 bajtove u oba lock bajta. Ideja otključavanja leži u izmjeni datoteke koja sadrži učitane bajtove te pisanjem kompletne datoteke ponovno na tag. U tu svrhu izrađen je programski kod.


Programski kod za otključavanje

package hr.foi.sis.nfc;

import hr.foi.sis.nfc.tags.Tag;
import hr.foi.sis.nfc.utilities.MfdManager;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Tomislav Turek
 */
public class App {
    
    private static final String FILE_CREATE_NAME = "op";
    private static final String FILE_READ_NAME = "kdr";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        MfdManager manager = new MfdManager();
        try {
            Tag tag = new Tag(manager.readDump(FILE_READ_NAME));
            tag.unlock();
            manager.saveDump(tag.getContent(), FILE_CREATE_NAME);
        } catch (IOException ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}

MfdManager je klasa koja radi sa Mifare dump datotekama, dok je Tag klasa koja definira tag, njena metoda unlock samo postavlja 11. i 12. bajt u 0x00.


Tag klasa

package hr.foi.sis.nfc.tags;

import static hr.foi.sis.nfc.tags.TagValue.LOCK_0;
import static hr.foi.sis.nfc.tags.TagValue.LOCK_1;
import static hr.foi.sis.nfc.tags.TagValue.TAGINFO_MEMORY_SIZE;
import java.util.Arrays;

/**
 * tag class
 * @author Tomislav Turek
 */
public class Tag {
    
    private final int length;
    private byte[] taginfo;
    private byte[] data;
    
    public Tag(int length) {
        this.length = length;
    }
    
    public Tag(byte[] content) {
        this.length = content.length;
        this.taginfo = Arrays.copyOfRange(content, 0,  TAGINFO_MEMORY_SIZE);
        this.data = Arrays.copyOfRange(content, TAGINFO_MEMORY_SIZE, content.length);
    }

    public Tag(byte[] taginfo, byte[] data) {
        this.length = taginfo.length + data.length;
        this.taginfo = taginfo;
        this.data = data;
    }
    
    public void lock() {
        this.taginfo[LOCK_0] = (byte)0xFF;
        this.taginfo[LOCK_1] = (byte)0xF7;
    }
    
    public void unlock() {
        this.taginfo[LOCK_0] = (byte)0x00;
        this.taginfo[LOCK_1] = (byte)0x00;
    }
    
    public byte[] getContent() {
        byte[] content = new byte[this.length];
        System.arraycopy(this.taginfo, 0, content, 0, this.taginfo.length);
        System.arraycopy(this.data, this.taginfo.length, content, this.taginfo.length, content.length);
        return content;
    }

    public byte[] getTagInfo() {
        return taginfo;
    }

    public void setTagInfo(byte[] taginfo) {
        if(this.data != null && getContent().length != this.length)
            throw new RuntimeException("Unable to set tag prefix, tag is of size " + this.length);
        this.taginfo = taginfo;
    }

    public byte[] getData() {
        return data;
    }

    public void setData(byte[] data) {
        if(this.taginfo != null && getContent().length != this.length)
            throw new RuntimeException("Unable to set tag message, tag is of size " + this.length);
        this.data = data;
    }
    
}

Pokretanjem kompajliranog koda sa java -cp . hr.foi.sis.nfc.App dobivamo datoteku "kdr" koja u sebi sadrži jednake bajtove kao i datoteka "op", no lock bajtovi su postavljeni kao otključani. Sljedeći korak je zapisivanje datoteke na isti tag.

Alt text
Pisanje sadržaja datoteke na tag

Iz ispisa možemo vidjeti da niti jedna stranica nije uspješno zapisana. Provjerom taga vidimo da se lock bajtovi ipak nisu izmjenili.

Usprkos našem trudu da otključamo tag, detaljnom analizom dokumentacije Mifare Ultralight Type 2 Tag došli smo do spoznaje da su čipovi izrađeni na način da kada se u lock bajtove neki od bitova postavi u 1, on se više ni na koji način ne može natrag postaviti u 0. Prema tome, nije moguće otključati tag direktnom izmjenom lock bajtova.

--Tomislav.turek 18:59, 7. siječnja 2016. (CET)

--Mjurinic 21:57, 8. siječnja 2016. (CET)


"Otključavanje" taga kloniranjem

Budući da tag nije moguće otključati direktnom izmjenom lock bajtova, možda ga možemo prekopirati na otključani tag te time dobivamo isti ishod koji bismo imali da smo tag uspješno otključali.

Prethodni postupak ponovimo te učitamo zaključani tag u datoteku "op". Sa programskim kodom učitamo datoteku, "otključamo" tag te spremimo sadržaj taga u datoteku "kdr". Sada istim postupkom upišemo sadržaj datoteke "op" na tag, ali ovaj puta to napravimo na otključanom tagu.

Alt text
Pisanje sadrzaja na otkljucani tag

Iz prethodnog ispisa vidimo da su se bajtovi upisali na tag. Ukoliko tag učitamo, on će se ponašati kao i zaključani tag (sadržavati će njegove podatke), ali će lock bajtovi biti postavljeni u 0x00.

Moglo bi se reći da smo uspjeli "otključati" tag, ali ne direktno. Ovakvim postupkom možemo zaključiti da zaključavanje ne predstavlja nikakav mehanizam zaštite podataka, jer se tag može zaključati no on može biti prekopiran na otključani tag u kojem se sadržaj može izmjeniti. Daljnjim ispitivanjem taga došli smo do zaključka da tag sadrži jednake stranice kao i prethodni zaključani tag, no serijski broj i uid se i dalje razlikuju.

Pretpostavimo scenarij u kojem neki tagovi omogućuju ulazak u određeni prostor. Ukoliko je sustav implementiran da provjerava podatkovne bajtove unutar taga, sigurnost takvog taga je vrlo malena jer zaključavanje samog taga ne predstavlja nikakav sigurnosni mehanizam, no ukoliko je sustav implementiran da se provjeravaju data bajtovi kao i uid i serijski broj taga, tada ova metoda neće nositi rezultate.


Mifare Offline Cracker

Mifare Ultralight tagove prezentirani su kao tagovi niske sigurnosti te im je primjena u verifikaciji, plaćanju ili kontroli vrlo malena. Za dodanu razinu sigurnosti koriste se Mifare Classic tagovi. Tagovi takvog tipa omogućuju pisanje, odnosno čitanje podataka izmjenom access bitova sa ključevima A i B. Promotrimo sljedeći prikaz access bitova:

Byte/Bit 7 6 5 4 3 2 1 0
6 C23 C22 C21 C20 C13 C12 C11 C10
7 C13 C12 C11 C10 C33 C32 C31 C30
8 C33 C32 C31 C30 C23 C22 C21 C20


Mifare Classic tagovi imaju access bitove smještene unutar bajtova 6, 7 i 8 te svaka kombinacija bitova unutar tih bajtova označava koje će operacije biti dozvoljene za blok unutar tog sektora (CMn, gdje je 0 < M < 4, definira pristup n-tom bloku za taj sektor). Primjerice za čitanje NDEF sadržaja unutar NFC sektora kombinacija bitova C10 C20 C30 bi značila da u 0-blok unutar sektora se može zapisati ili pročitati vrijednost koristeći ključem A ili ključem B. Detaljnije informacije o NDEF i MAD (Mifare Application Directory) sektorima, access bitovima te postupku čitanja i pisanja na tag mogu se pronaći u dokumentaciji (link dostupan u literaturi).

Budući da je za operacije čitanja i pisanja potrebno znati ključeve A i B unutar svakog sektora Mifare Classic taga, ne može se učiniti puno sa libnfc paketom jer je potrebno paketu prosljediti ključ A, odnosno ključ B prilikom čitanja ili zapisivanja. Na prvi pogled, čini se da nije moguće napraviti mnogo u probijanju takvih tagova, no u Kali Linux operacijskom sustavu postoji program Mifare Classic Offline Cracker (mfoc) dizajniran za probijanje autentikacijskih ključeva na Mifare Classic karticama. Za ovaj projekt posjedujemo dvije prazne Mifare Classic kartice koje smo testirali sa programom mfoc. Navedeni program omogućuje svojevrsni bruteforce ključeva ispitujući svaki sektor sa tipičnim autentikacijskim ključevima (primjerice ffffffff, 00000000, a0b0c0d0e0, itd.), a kasnije i ostalim kombinacijama. Dodatne funkcije ovog programa su dodavanje novih autentikacijskih ključeva te spremanje ključeva u datoteka nakon što su tagovi probijeni.

TODO

Dobivenu Mifare Classic karticu smo krekali sa alatom mfoc na Kali Linux, dump file>

Found Mifare Classic 1k tag
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04  
* UID size: single
* bit frame anticollision supported
       UID (NFCID1): fc  02  ff  b7  
      SAK (SEL_RES): 08  
* Not compliant with ISO/IEC 14443-4
* Not compliant with ISO/IEC 18092

Fingerprinting based on MIFARE type Identification Procedure:
* MIFARE Classic 1K
* MIFARE Plus (4 Byte UID or 4 Byte RID) 2K, Security level 1
* SmartMX with MIFARE 1K emulation
Other possible matches based on ATQA & SAK values:

Try to authenticate to all sectors with default keys...
Symbols: '.' no key found, '/' A key found, '\' B key found, 'x' both keys found
[Key: ffffffffffff] -> [xxxxxxxxxxxxxxxx]
[Key: a0a1a2a3a4a5] -> [xxxxxxxxxxxxxxxx]
[Key: d3f7d3f7d3f7] -> [xxxxxxxxxxxxxxxx]
[Key: 000000000000] -> [xxxxxxxxxxxxxxxx]
[Key: b0b1b2b3b4b5] -> [xxxxxxxxxxxxxxxx]
[Key: 4d3a99c351dd] -> [xxxxxxxxxxxxxxxx]
[Key: 1a982c7e459a] -> [xxxxxxxxxxxxxxxx]
[Key: aabbccddeeff] -> [xxxxxxxxxxxxxxxx]
[Key: 714c5c886e97] -> [xxxxxxxxxxxxxxxx]
[Key: 587ee5f9350f] -> [xxxxxxxxxxxxxxxx]
[Key: a0478cc39091] -> [xxxxxxxxxxxxxxxx]
[Key: 533cb6c723f6] -> [xxxxxxxxxxxxxxxx]
[Key: 8fd0a4f256e9] -> [xxxxxxxxxxxxxxxx]

Sector 00 -  FOUND_KEY   [A]  Sector 00 -  FOUND_KEY   [B]  
Sector 01 -  FOUND_KEY   [A]  Sector 01 -  FOUND_KEY   [B]  
Sector 02 -  FOUND_KEY   [A]  Sector 02 -  FOUND_KEY   [B]  
Sector 03 -  FOUND_KEY   [A]  Sector 03 -  FOUND_KEY   [B]  
Sector 04 -  FOUND_KEY   [A]  Sector 04 -  FOUND_KEY   [B]  
Sector 05 -  FOUND_KEY   [A]  Sector 05 -  FOUND_KEY   [B]  
Sector 06 -  FOUND_KEY   [A]  Sector 06 -  FOUND_KEY   [B]  
Sector 07 -  FOUND_KEY   [A]  Sector 07 -  FOUND_KEY   [B]  
Sector 08 -  FOUND_KEY   [A]  Sector 08 -  FOUND_KEY   [B]  
Sector 09 -  FOUND_KEY   [A]  Sector 09 -  FOUND_KEY   [B]  
Sector 10 -  FOUND_KEY   [A]  Sector 10 -  FOUND_KEY   [B]  
Sector 11 -  FOUND_KEY   [A]  Sector 11 -  FOUND_KEY   [B]  
Sector 12 -  FOUND_KEY   [A]  Sector 12 -  FOUND_KEY   [B]  
Sector 13 -  FOUND_KEY   [A]  Sector 13 -  FOUND_KEY   [B]  
Sector 14 -  FOUND_KEY   [A]  Sector 14 -  FOUND_KEY   [B]  
Sector 15 -  FOUND_KEY   [A]  Sector 15 -  FOUND_KEY   [B]  

We have all sectors encrypted with the default keys..

Auth with all sectors succeeded, dumping keys to a file!
Block 63, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 62, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 61, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 60, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 59, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 58, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 57, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 56, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 55, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 54, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 53, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 52, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 51, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 50, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 49, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 48, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 47, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 46, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 45, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 44, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 43, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 42, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 41, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 40, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 39, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 38, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 37, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 36, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 35, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 34, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 33, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 32, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 31, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 30, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 29, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 28, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 27, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 26, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 25, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 24, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 23, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 22, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 21, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 20, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 19, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 18, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 17, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 16, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 15, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 14, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 13, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 12, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 11, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 10, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 09, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 08, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 07, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 06, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 05, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 04, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 03, type A, key ffffffffffff :00  00  00  00  00  00  ff  07  80  69  ff  ff  ff  ff  ff  ff  
Block 02, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 01, type A, key ffffffffffff :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
Block 00, type A, key ffffffffffff :fc  02  ff  b7  b6  08  04  00  62  63  64  65  66  67  68  69  

Kloniranje tagova

ChameleonMini - Mifare Ultralight

Kako bismo mogli ići korak dalje u analizi sigurnosti tagova, pokušali smo u potpunosti klonirati čip uz pomoć ChameleonMini uređaja. Zamisao kloniranja je da se ciljani tag očita na računalo u datoteku (primjerice o.bin) te se njegov sadržaj nasnimi na ChameleonMini. Čitanje taga odvija se na isti način kao što je to rađeno i ranije (naredba nfc-mfultralight).

Nakon kreiranja datoteke možemo pokušati zapisati datoteku naredbom UPLOAD kroz njegovo standardno sučelje kojem se pristupa naredbom socat

TU IDE SLIKA ZA UPLOAD MFU SADRŽAJA NA CHAMELEON


ChameleonMini (ukoliko nije drugačije programiran) raspolaže setom zadanih naredbi uz pomoć kojih se mogu odraditi neke osnovne radnje. Ispis svih naredbi moguće je naći na GitHub repozitoriju koji je naveden u literaturi ovog projekta. Tako se na slici može vidjeti uporaba naredbe UPLOAD koja omogućava prijenos podataka uz pomoć XMODEM-a. Iz slike se može vidjeti da u lijevom terminalu pozivamo XMODEM prijenos podataka naredbom sx sa parametrom -v (verbose) te definiramo datoteku i sučelje. U desnom terminalu može se vidjeti komunikacija sa sučeljem te uspješan prijenos podataka.

Ukoliko sada očitamo ChameleonMini uz pomoć Touchatag čitača te usporedimo sadržaj tih dviju datoteka naredbom diff, vidjeti ćemo da ChameleonMini savršeno klonira tag (zajedno sa uid-om, serijskim brojem, otp-ovima, itd.). U isto se možemo uvjeriti ukoliko tag očitamo nekim pristupačnijim uređajem kao što je pametni telefon.

TU IDE SLIKA SA ČITANJEM CHAMELEONMINI-a I NAREDBOM DIFF

TU IDE SLIKA SA SCREENOVIMA OD PAMETNOG HTC-a


U ovom scenariju možemo vidjeti savršeno oponašanje Mifare Ultralight taga koji je na razini više od prethodnog pokušaja kloniranja kopiranjem taga.


ChameleonMini - Mifare Classic

S druge strane, ChameleonMini ima sposobnost savršenog kloniranja i MifareClassic tagova. Kombinacijom čitača, mfoc alata te ChameleonMini uređaja možemo izraditi savršeni klon taga tipa Classic slično kao i za prethodni tag.

TODO & CHECK

Alt text
Pisanje sadrzaja taga iz datoteke na Chameleon
Alt text
Citanje sadrzaja Chameleona u zasebnu datoteku
Alt text
Usporedba sadrzaja Classic taga i Chameleona (jednaki su)

opet ista prica sa uploadom

GZ - CHAMELEON SAD EMULATEA MIFARE CLASSIC TAG

BusPirate = PN532 BoB

Spojili smo bus pirate i pn532, instructions>

spoji se buspirate na usb i probeovi sa sljedecim sparivanjima (UART mode):

5.0V na 5.0V (narancasti)

GND na GND (smedi)

RX na MISO (crni)

TX na MOSI (sivi)

po uputsvima na BoB-u spoje se SEL0 i SEL1 medusobno (u off state)


Literatura

  1. Adafruit dokumentacija, dostupno 8.1.2015 na https://learn.adafruit.com/downloads/pdf/adafruit-pn532-rfid-nfc.pdf
  2. Adafruit specifikacija, dostupno 8.1.2015 na https://learn.adafruit.com/adafruit-pn532-rfid-nfc/breakout-wiring
  3. Bus Pirate, dostupno 8.1.2015 na http://dangerousprototypes.com/docs/Bus_Pirate#Introduction
  4. Bus Pirate specifikacija, dostupno 8.1.2015 na http://dangerousprototypes.com/docs/Bus_Pirate_I/O_Pin_Descriptions
  5. Bus Pirate Ubuntu, dostupno 8.1.2015 na http://jumptuck.com/2010/01/20/using-the-bus-pirate-with-ubuntu/
  6. Bus Pirate dokumentacija, dostupno 8.1.2015 na http://dangerousprototypes.com/docs/Bus_Pirate
  7. RFID Cooking, Backtrack Linux, dostupno 8.1.2015 na http://www.backtrack-linux.org/wiki/index.php/RFID_Cooking_with_Mifare_Classic
  8. Minicom uputstva za Bus Pirate, dostupno 8.1.2015 na https://www.raspberrypi.org/forums/viewtopic.php?t=42936&p=346554
  9. ChameleonMini specifikacija komandi, dostupno 8.1.2015 na https://github.com/emsec/ChameleonMini/blob/master/Firmware/Chameleon-Mini/Terminal/Commands.h
  10. ChameleonMini, dostupno 8.1.2015 na http://store.ryscc.com/blogs/news/54097857-getting-started-with-the-chameleonmini
  11. ChameleonMini readme, dostupno 8.1.2015 na https://github.com/emsec/ChameleonMini/blob/master/Doc/DoxygenPages/CommandLine.txt
  12. How to Crack, dostupno 15.1.2016 na https://www.firefart.at/post/how-to-crack-mifare-classic-cards/
  13. RFIDIOt dokumentacija, dostupno 15.1.2015 na https://github.com/AdamLaurie/RFIDIOt
  14. Protokol za nxp citac (onaj s rupom, buspirate), dostupno 15.1.2016 na http://neophob.com/files/rfid/PROTOCOL-821-880%20_2_.pdf
  15. Bus pirate fun, dostupno 15.1.2016 na http://neophob.com/2010/03/bus-pirate-fun-rdm880-rfid-module/
Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima