Category: SECURITY

Home / Category: SECURITY

BalkanMP3 FREE DOWNLOAD

December 3, 2019 | SECURITY | No Comments

Ovaj post će otkriti jako zanimljiv propust na jednom popularnom sajtu za preuzimanje muzike, zbog čega im čitav biznis model pada u vodu. Ne ponavljajte ovakve greške!

Kako besplatno preuzeti sadržaj koji bi trebao biti plaćen

1. Izabere se numera.

2. Desni klik na play. Ukoliko ste pokrenuli reprodukciju, refresh stranice (F5), pa desni klik.

3. Izabere se Inspect Element.

4. Kopira se DATA-TRACK-URL (dvoklik za selekciju).

5. Otvori se kopirani link.

6. Gotovo, imate mp3 fajl koji se može sačuvati.
Desni klik i Save Page As… ili Alt pa File>Save Page As…

NE KORISTITE PHP ZA OZBILJNE STVARI!

Biometrijski pasoši (ePassports)

December 1, 2019 | SECURITY | No Comments

Pasoši sada moraju biti mašinski čitljivi, termin koji se za to koristi je mašinski čitljivi putni dokumenti ili MRTD (eng. Machine Readable Travel Documents). Moze se i naći malo slovo e ispred (eMRTD) što označava electronic MRTD. Ukoliko se radi o MRTD ili eMRTD treba znati da su to samo dokumenti koji imaju dvije ili tri linije na dnu prve stranice u tzv. mašinski čitljivoj zoni (eng. Machine Readable Zone) ili kratko MRZ.

Kako su pasoši po ICAO 9303 standardu moguće je pronaći detaljnu specifikaciju za MRZ i podatke koji se nalaze na pasošu u tim dokumentima. Javno su dostupni na adresi: icao.int/publications/. Koga zanima može detaljnije istraživati, ja ću samo sa tehničke strane objasniti strukturu podataka i sigurnosne mehanizme.

Struktura podataka

Podaci na pasošu su organizovani u logičke strukture podataka (LDS), određene grupe podataka (DG) su obavezne dok druge nisu. Postoji 16 DG-ova i od svakog je potrebno sačuvati heš vrijednost u tzv. Document Security Object (EF.SOD).

DG1Informacije iz MRZOBAVEZNO
DG2Lice (Slika)OBAVEZNO
DG3Otisci prstiju [EAC]OPCIONO
DG4Iris očiju [EAC]OPCIONO
DG5Prikazani portretOPCIONO
DG6Rezervisano za buduću upotrebuOPCIONO
DG7Prikazani potpisOPCIONO
DG8Karakteristike podatakaOPCIONO
DG9Karakteristike struktureOPCIONO
DG10Karakteristike supstanciOPCIONO
DG11Dodatni lični podaci OPCIONO
DG12Dodatni detalji dokumenta OPCIONO
DG13Opcionalni detalji OPCIONO
DG14Opcije sigurnostiOPCIONO
DG15Informacije o javnom ključu za AAOPCIONO
DG16Osobe koje treba obavijestitiOPCIONO
SODSigurnosni objekat OBAVEZNO

Sigurnosni mehanizmi

U kontekstu pasoša ste čuli za neke termine tipa “bak” i “sak”, ali google nema riješenje za to, zato sada da objasnimo sve ove jako komplikavane pojmove:

  • Active Authentication (AA)
  • Basic Access Control (BAC)
  • Chip Authentication (CA)
  • Extended Access Control (EAC)
  • Passive Authentication (PA)
  • Supplemental Access Control (SAC)
  • Terminal Authentication (TA)

Kontrola pristupa

BAC je osnovna kontrola pristupa i najvažniji sigurnosni mehanizam povezan sa privatnošću pri implementaciji kontrole pristupa i sigurne komunikacije. Kombinacija broja dokumenta, datuma isteka i datuma rođenja formiraju ključ (lozinku) za pristup čipu. BAC uspostavlja šifrovani komunikacioni kanal koji sprječava prisluškivanje. Broj dokumenta, datum isteka i datum rođenja se mogu pročitati s MRZ-a na dnu dokumenta. Pomoću BAC-a se možete pristupiti gotovo svim informacijama na čipu uz jedan izuzetak, a to su otisci prstiju [DG3]. Pristup njima nije moguć bez odobrenja zemlje izdavanja.

Password Authenticated Connection Establishment (PACE) je nasljednik BAC-a koji koristi moderniju kriptografiju da bi pružio viši nivo sigurnosti. Dodatno, čip može prihvatiti jedan ili više brojeva pristupa kartici (Card Access Numbers – CAN). Obično je CAN dugačak samo 6 cifara i štampa se na dokumentu, kao i MRZ. Od januara 2018 godine dokumenti koji implementiraju PACE, po ICAO standardu, više nije potrebno da implementiraju BAC za kompatibilnost unazad. U trenutnoj (trećoj) generacija pasoša BAC je zamijenjen sa SAC.

Supplemental Access Control (SAC) sam po sebi nije mehanizam kontrole pristupa. SAC je samo pojam koji se koristi za opisivanje dokumenata koji implementiraju PACE (PACE v2). Do januara 2018 SAC je bio pojam za dokumente koji imaju BAC i PACE.

EAC je proširena kontrola pristupa i koristi se za zaštitu više osjetljivih podataka na čipu, posebno otisaka prstiju. EAC nije ICAO standard, ICAO prepušta specifikaciju svojim državama članicama, ali u Europi ih je standardizirao BSI (British Standards Institution). EAC se sastoji od dva mehanizma: Chip Authentication (CA) i Terminal Authentication (TA).

CA ili čip autentifikacija je mehanizam koji ima dvije svrhe: uspostaviti sigurnu komunikaciju između pasoša i terminala i obaviti detekciju kloniranja. Ovo je dobro poznat mehanizam koji nosi ime ‘Diffie-Hellman Key Exchange’. Terminal i pasoš koriste zajedničku tajnu da bi kriptovali svu komunikaciju, omogućujući dekriptovanje poruka samo strankama koje su se pridružile ključnom sporazumu. Trik sa CA je da pasoš ne generše par ključeva, već umjesto toga uvijek koristi iste javne i privatne ključeve.

Izvršenje TA ne uključuje lozinku koja se može izvući iz informacija na stranici s podacima. Umjesto toga, terminal mora na čip predstaviti certifikat izdat od vlade, kako bi dokazao da je ovlašten čitati tako osjetljive podatke. Samo vrlo malo organizacija kao što su policija, granična policija i lokalne samouprave dobijaju dozvolu za čitanje otisaka prstiju iz pasoša.

Provjera integriteta

Digitalni potpis je osnovni princip za provjeru integriteta: podatke potpisuje izdavatelj (npr. Vlada) pomoću takozvanog privatnog ključa i primatelj tih informacija (npr. Policajac) može provjeriti jesu li ti podaci zapravo od vlade, koristeći takozvani javni ključ vlade. Ovo omogućava provjeru da li je pasoš u ovom slučaju zaista izdala vlada i da sadržaj čipa nije izmijenjen. Bankovne kartice i HTTPS u pretraživaču temelje se na ovom principu.

PA ili pasivna autentifikacija je sigurnosni mehanizam za provjeru integriteta. Ovaj sigurnosni mehanizam naziva se pasivnim jer nije potrebna komunikacija s čipom tokom provjere. Certifikat sa javnim ključem je odgovarajući državni certifikat.

Provjera kloniranja

Dok je podrška za BAC i PA u osnovi univerzalna u ICAO 9303 dokumentima, za detekciju kloniranja postoji više varijacija. Neki, uglavnom stariji pasoši, to uopšte ne podržavaju. Trenutno postoje dva mehanizma koja omogućavaju otkrivanje klona: Active Authentication (AA) i Chip Authentication (CA).

AA ili aktivna autentifikacija se zasniva na asimetričnoj kriptografiji pri čemu se nasumično odabran izazov šalje u pasoš, on ga potpisuje privatnim ključem iz čipa. Javni ključ povezan s ovim privatnim ključem se tada može koristiti za provjeru potpisa. Ovaj javni ključ je dio podataka na čipu koji su potpisani od države koja izdaje pasoš. Kako se privatni ključ ne može pročitati (jer je privatan) i stoga ga nije moguće kopirati s čipa pasoša, ovaj mehanizam osigurava da se komunicira sa stvarnim pasošem a ne klonom.
CA mehanizam je objašnjen prethodno u sklopu EAC-CA.

CSCA i CVCA

Podaci na pasošu se digitalno potpisuju pomoću PKI-a nazvanog Country Signing Certification Authority (CSCA), malo jednostavnije rečeno, to je cetifikaciono tijelo države koje potpisuje dokumente i ima svoj certifikat objavljen u ICAO PKD. Taj potpis se provjerava pomoću pasivne provjere identiteta (PA). Dodatno, ovaj PKI pruža pasošu i privatni ključ koji se sigurno pohrani u čip. Taj ključ koriste AA i CA protokoli za dokazivanje autentičnosti pasoša, tj. da nije kloniran.

Autorizacija na pasošu se sprovodi pomoću druge PKI infrastrukture pod nazivom Country Verifying Certification Authority (CVCA). Sistem na graničnom prelazu posjeduje privatni ključ vezan za digitalni certifikat (terminalni certifikat) koji je izdao CVCA. Pasoš je u stanju da provjeri te certifikate i odluči da li je očitavanje otisaka prstiju (EAC) dopušteno ili ne.

Pisajući ovaj post primjetio sam da je jako teško za nekoga ko nije upućen u osnovne pojmove kriptografije da skonta sve. Zato, ukoliko postoji puno nejasnoća, preporučujem da se prvo pogledaju ovi postovi:

Šta je TLV (Tag Length Value)?

December 1, 2019 | SECURITY | No Comments

TLV (Type Length Value / Tag Length Value) je način kodiranja podataka. Ovo kodiranje se često koristi kod pametnih kartica, pogotovo platnih ili EMV kartica. Kako su podaci na tim karticama sačuvani u određenim data grupama kao niz bajtova i imaju jako ograničen prostor. TLV kodiranje je tu idealno, ne mora se zauzimati fiksna dužina za podatke koji su promijenjive dužine, kao na primjer ime ili prezime osobe. Da skratim teoriju, jedan TLV izgleda ovako:

 OC 09 64 72 61 67 61 6E 2E 62 61

Obični niz bajtova zapisan heksadecimalno. U ovom slučaju, prvi bajt [OC] predstavlja oznaku (eng. tag) odnosno vrstu podataka u ovome TLV-u. Tag može zauzimati i više od jednog bajta, to zavisi od nacina kodiranja i po pravilu se moze utvrditi iz prvog bajta. Drugi bajt [09] predstavlja dužinu (eng. length), to znači da nakon njega dolazi 9 bajtova [64 72 61 67 61 6E 2E 62 61] koji predstavljaju vrijednost podataka (eng. value) za ovaj tag.

Moguće je upisati više TLV-ova, jedan do drugog, u jednu data grupu. Tako i u Value od jednog TLV-a se može nalaziti više drugih TLV-ova.

ASN.1 Primjer

ASN.1 (Abstract Syntax Notation One) je jezik za opisivanje strukture podataka. Neka su struktura i konkretan podatak definisani ovako:

ASN.1 struktura

Sequence
{
 Name::= UTF8 String
 Id::= Integer
 Vegetarian::= Boolean OPTIONAL
 Smoker::= [0] Boolean OPTIONAL
}

ASN.1 TLV tagovi

30 : Sequence
OC : UTF8 String
02 : Integer
01 : Boolean

ASN.1 podatak

Sequence
{
 Name::= "dragan.ba"
 Id::= "30"
 Vegetarian::= "false"
 Smoker::= "false"
}

Odgovarajući TLV za ovaj podatak bi izgledao ovako:

30 14
   OC 09 64 72 61 67 61 6E 2E 62 61
   02 01 1E
   01 01 00
   80 01 00

U ovom slučaju prvi bajt [30] je tag koji po definiciji označava da se radi o sekvenci. Drugi bajt [14] je dužina sekvence. Ako se čudite kako 14, polako objasniću.

U value polju se nalazi ta sekvenca TLV-ova. Prvi sa tagom OC, po definiciji je to string/text dužine 09 bajtova. I stvarno kada se heksadecimalno 64 72 61 67 61 6E 2E 62 61 pretvori u ASCII dobijamo tekst “dragan.ba“. Naredni tag je 02 integer/broj, dužine 01 i vrijednosti 1E što je decimalni broj 30. Tag 01 je boolean duzine 01 i vrijednosti 00 (false). Naredni tag je 80 i ima istu vrijednost kao i prethodni.

Za dužinu piše da je 14, ali treba obratiti pažnju da je 14 hexadecimalno = 20 decimalno, što znači da sekvenca ima 20 bajtova u Value polju. Da bi se podaci mogli pravilno parsirati dužina mora biti tačna, brza provjera:

[tag + length + data]
(OC) 1 + 1 + 9 = 11
(02) 1 + 1 + 1 = 3
(01) 1 + 1 + 1 = 3
(80) 1 + 1 + 1 = 3
-------------------
+              = 20

Sve ove konverzije možete jednostavno provjeriti sa ASCII, Hex, Decimal, Binary and Base64 converter.

Puno jednostavniji primjer

UPOZORENJE: Sljedeći tekst otkriva neke vještine koje se mogu zloupotrijebiti i koristiti u ilegalne svrhe. Nemojte biti kriminalci.

Pomoću čitača kartica i aplikacije koja može poslati APDU komande na karticu, poslao sam komandu: 00 A4 0400 07 A0000000041010 00.

[ CLA:00| INS:A4 | P1P2:0400 | Lc:07 | DATA:A0000000041010| Le:00 ]

Odgovor je: 6F1A8407A0000000041010A50F500A4D617374657243617264870101 9000

[ DATA: 6F1A8407A0000000041010A50F500A4D617374657243617264870101| SW:9000 ]

Nikakve koristi od ovoga, za one koji nikada nisu čuli za TLV. Za ostale idemo redom, 6F je tag koji označava Application class – Primitive data object po pravilu kodiranja tagova. Naredni bajt 1A je dužina, to je 26 decimalno, znači do kraja. Sada kada se sadržaj podataka pretvori u text dobijamo informacije o kakvoj se kartici radi.

BONUS: Ako ima neko da je dešifrovao ove hijeroglife u prvom redu ili ako nekoga zanima kako se ovo dešifruje, neka me kontaktira.

Čitaj dalje: Biometrijski pasoši (ePassports)

RFID

December 1, 2019 | SECURITY | No Comments

RFID (Radio Frequency IDentification) je tehnologija koja koristi radio frekvencije za razmjenu informacija. Princip je sličan kao i kod pametnih kartica, samo ovaj put se ne koriste kontakt pinovi za komunikaciju, komunikacija je bezkontaktna. Čip komunicira i dobija napajanje preko RFID antene. Bežično napajanje postoji? Da, magija iza toga se naziva elektromagnetna indukcija i uveliko se koristi u mobilnim telefonima za bežično punjenje (eng. wireless charging). Ja ću u ovom postu koristiti termin RFID kartice, ali ne moraju biti samo kartice, to mogu biti tokeni, naljepnice, privjesci…

Uglavnom postoje tri vrste RFID kartica:

  • Low Frequency (LF) RFID
    • frekvencije: 30 KHz – 300 KHz
    • kartice: 125 KHz / 134 KHz
    • standard: ISO 18000-2
  • High Frequency (HF) RFID
    • frekvencije : 3 MHz – 30 MHz
    • kartice: 13.56 MHz
    • standard: ISO 14443, ISO 18092 (NFC)
  • Ultra-High Frequency (UHF) RFID
    • frekvencije : 300 MHz – 3 GHz
    • frekvencije Gen2: 850 MHz – 950 MHz
    • standard: ISO 18000-6C

Radio talasi se ponašaju različito na svakoj od ovih frekvencija, a tu su i prednosti i nedostaci povezani s korištenjem svakog frekvencijskog opsega. Na primjer, ako RFID sistem radi s nižom frekvencijom, ima manju brzinu očitavanja podataka, ali povećane mogućnosti čitanja u blizini ili u metalnim ili tečnim površinama. Ako sistem radi na većoj frekvenciji, on obično ima veće brzine prenosa podataka i veću udaljenost očitavanja, ali više osjetljivosti na interferencije radio talasa iz okruženja.

LF RFID ima malu udaljenost čitanja (ispod 10 cm) i ima manju brzinu čitanja od viših frekvencija. Najčešća primjena je kontrola pristupa (eng. access control), nadzor zaliha i praćenje životinja (ISO 14223). Ukoliko se čekirate kada dolazite na posao zbog pristupa ili satnice, velika je vjerovatnoća da koristite ovakvu “glupu” karticu. Ona u tom trenutku samo očita određeni identifikator, jer se na njima čuva mala količina podataka zbog male brzine čitanja.

HF RFID se koristi za izdavanje karata, plaćanje, prenos podataka i mnogo toga. U ovu grupu spadaju EMV (Europay Mastercard & Visa) kartice sa bezkontaktnim plaćenjem, platne kartice koje većina nosi u novčaniku i koristi redovno. Ostali podaci na EMV kartici su zaključani i može im se pristupiti samo pomocu PIN koda. Isto važi i za drugu grupu kartica u ovoj kategoriji, identifikacione dokumente, samo kod njih se šifra za pristup dobija iz MRZ zone. O ovome detaljnije u nekom drugom postu. Za sad je važno napomenuti NFC (Near-Field Communication) koju podržava većina mobilnih uređaja i koja baš radi na ovim frekvencijama. Tako da pomoću aplikacija kao što su ReadID možete očitati podatke sa vašeg dokumenta, bio to pasoš ili lična karta. Sa aplikacijom Credit Card Reader je moguće pročitati podatke sa kreditne kartice, a sa NFC Tools sve ostale kartice i tagove bez zaštite na čipu.

UHF RFID ima veliku udaljenost čitanja do 12m i veću brzinu prenosa podataka od LF ili HF, ali je najosjetljiviji na smetnje. UHF tagovi su jednostavniji i jeftiniji za proizvodnju od LF i HF tagova. Većinom se koriste za praćenje robe ili proizvoda bilo to u lageru ili u samoj prodavnici. Pored toga, onaj mali uređaj sa kojim se plaća putarina na auto putu, radi isto na ovim frekvencijama.

Kako otkriti da li je kartica RFID

Sa mobilnim telefonom. Prvo pomoću blica utvrditi da li kartica ima RFID antenu. Zatim, pomoću NFC-a pokušati očitati podatke sa čipa. Ukoliko je telefon u stanju da očita karticu, radi se o 13.56 MHz HF RFID kartici!

Čitaj dalje: TLV

Pametne kartice (Smart Card)

December 1, 2019 | SECURITY | No Comments

U Njemackoj 1968 godine, Helmut Gröttrup je patentirao prvu pametnu karticu, dok je prvi prototip napravio Roland Moreno 1975 godine. Prva masovna upotreba ovih kartica bila je kao telefonska kartica za plaćanje u francuskim telefonskim govornicama, počevši od 1983. godine.

Sve kartice se mogu podijeliti na kartice bez čipova i kartice sa čipovima. Kartice sa čipovima ili čip kartice su poznate kao pametne kartice. Čip može biti memorijski, u tom slučaju se kartica naziva memorijska kartica (memory card), ili mikrokontrolerski, u kojem se slučaju kartica naziva procesorska kartica (processor card). Procesorske kartice se mogu dalje podijeliti na procesorske kartice sa ili bez koprocesora za izvršavanje asimetričnih kriptografskih algoritama.

Dimenzije

Svi tipovi kartica u trenutnoj upotrebi imaju jednu zajedničku karakteristiku, a to je debljina 0.76 mm (ISO/IEC 7810). Dimenzije mogu biti različite ali je najpoznatiji format ID-1. Razlog za široku primjenu ID-1 formata je taj što se praktično sve kreditne kartice i drugi oblici platnih kartica izrađuju u ovom formatu. ID-3 je iskorišten za pasoše, a ID-000 je postao standardni format za kartice koje se koriste u mobilnim telefonima.

Format Širina (mm) Visina (mm)
ID-312588
ID-210574
ID-185.654
ID-000 (miniSIM)2515
Mini-UICC (microSIM)1512

Čip

Modul čipa može imati šest ili osam vidljivih kontakata na vanjskoj strani. Novije pametne kartice koriste samo pet kontakata, ostali kontakti su rezervisani za buduće primjene. Čip mikrokontrolera je postavljen iza modula i povezan je na njegove pinove.

Karakteristike pametne kartice u velikoj mjeri određuje njen mikrokontroler. Obično se koriste mikrokontroleri sa jednim čipom, koji je posebno prilagođen za upotrebu u pametnim karticama. To obuhvata električne i fizičke parametre, kao što su maksimalna potrošnja struje, raspon dozvoljenih frekvencija takta i dozvoljeni raspon temperature.

Kartice kod kojih je čip memorijski i imaju samo mogućnost pisanja i brisanja podataka iz memorije ćemo nazvati “glupim” karticama. Pamtnim karticama ćemo zvati samo kartice kod kojih čip može biti programirani da izvršava razne operacije.

“Glupe” kartice

Pametne kartice

Pored svih ovih funkcionalnih parametara, postoji još jedna suštinska stavka: Mikrokontroler pametne kartice je posebno ojačani protiv napada. Ovo uključuje detekciju podnaponskih i prenaponskih uslova i otkrivanje taktnih frekvencija izvan navedenog raspona. Ovi mikrokontroleri takođe sadrže senzore svijetlosti i temperature koji im omogućavaju da prepoznaju napade kroz ove rute i na odgovarajući način reaguju.

Mikrokontoleri imaju procesor, memoriju i dodatni hardver. U suštini to je mali računar koji nema svoje napajenje već se napaja i komunicira preko pinova – jedan od razloga zašto mobilni telefoni troše više bateriju kada u sebi imaju funkcionalnu sim kartiu.

Prenos podataka

Terminal uvijek pokreće komunikaciju, što znači da je master, a pametna kartica odgovara, pa je slave. Nakon pokretanja mikrokontrolera pametne kartice, terminal šalje signal reseta pametnoj kartici, koja reaguje na ovaj signal sa ATR (eng. Answer To Reset). Nakon toga, pametna kartica ulazi u stanje mirovanja (low-power sleep). U ovom stanju ostaje sve dok terminal ne pošalje komandu pa je vrati u aktivni režim. Komanda se prima i obrađuje, a odgovor se vraća na terminal. Zatim pametna kartica ponovno ulazi u stanje mirovanja i čeka sljedeću komandu. Alternativno, terminal može u tom trenutku pokrenuti sekvencu isključivanja kako bi isključio pametnu karticu.
ATR se uvijek prenosi s razdjelnom vrijednošću (eng. divider value) od 372, brzinom prenosa podataka od 9600 bps i taktnom frekvencijom 3,55712 MHz.

Zapis podataka na nivou prenosa naziva se TPDU (Transport Protocol Data Unit), dok se zapis podataka na nivou aplikacije naziva APDU (Application Protocol Data Unit). APDU komanda se sastoji se od zaglavlja (head) i tijela (body). Zaglavlje je obavezno, ali tijelo nije obavezno. APDU odgovor se sastoji od body-a i trailer-a. U APDU odgovoru obavezan je samo trailer.

Komanda

Head (4 bytes) Body
CLA | INS | P1 | P2Lc | DATA | Le
  • CLA – Klasa (podrazumijevana vrijednost 00)
  • INS – Instrukcija/komanda
  • P1 – Parametar 1
  • P2 – Parametar 2 (00 – podrazumijevani, 80 – lokalni kod)
  • Lc – Dužina podataka u komandi
  • DATA – Dolazni podaci (između 0 i 255 bajtova)
  • Le – Dužina traženih podataka

Primjer za odabir datoteke ili appleta s ID-jem = A0000002471001

00 A4 0400 07 A0000002471001 00
[ CLA:00| INS:A4 | P1P2:0400 | Lc:07 | DATA:A0000002471001 | Le:00 ]


Komande (INS) definisane u ISO 7816-4
  '0E'	Erase binary
  '20'  Verify
  '70'	Manage channel
  '82'	External authenticate
  '84'	Get challenge
  '88'	Internal authenticate
  'A4'	Select file
    P1P2:'0100' DF selection (Lc:02|DATA:DFID)
    P1P2:'0200' EF selection (Lc:02|DATA:EFID)
  'B0'	Read binary
    P1:'1000 0000'  P2 is the offset of the first byte
    P1:'0xxx xxxx'  P1||P2 is the offset of the first byte to be read
    P1:'---- -xxx'  xxx -Short EF (Elementary File) identifier
  'B2'	Read record(s)
  'C0'	Get response
  'C2'	Envelope
  'CA'	Get data
    P1P2:'0000'-'003F' RFU
    P1P2:'0040'-'00FF' BER-TLV tag (1 byte) in P2
    P1P2:'0100'-'01FF' Application data (proprietary coding)
    P1P2:'0200'-'02FF' SIMPLE-TLV tag in P2
    P1P2:'0300'-'3FFF' RFU
    P1P2:'4000'-'FFFF' BER-TLV tag (2 bytes) in P1-P2
  'D0'	Write binary
  'D2'	Write record
    P1:'00' Designates the current record
    P1:'XX' Specified record
      P2:'0000 0---'  Currently selected EF
      P2:'xxxx x---'  (xxxxx - Short EF identifier)
      P2:'1111 1---'  RFU
      P2:'---- -000'  First record
      P2:'---- -001'  Last record
      P2:'---- -010'  Next record
      P2:'---- -011'  Previous record
      P2:'---- -100'  Record number given in P1
  'D6'	Update binary
  'DA'	Put data
  'DC'	Update data
    P1:'00' Designates the current record
    P1:'XX' Specified record
      P2:'0000 0---'  Currently selected EF
      P2:'xxxx x---'  (xxxxx - Short EF identifier)
      P2:'1111 1---'  RFU
      P2:'---- -000'  First record
      P2:'---- -001'  Last record
      P2:'---- -010'  Next record
      P2:'---- -011'  Previous record
      P2:'---- -100'  Record number given in P1
  'E2'	Append record
    P1:'00' Valid
      P2:'0000 0000'	Currently selected EF
      P2:'xxxx x000'	Short EF identifier
      P2:'1111 1000'	RFU

Odgovor

BodyTrailer
DATASW1 | SW2
  • DATA – Odlazni podaci (između 0 i 255 bajtova)
  • SW – Status riječi (Status Words)

Primjer odgovora
Terminal Smart Card
CLA:FF|INS:CA|P1:00
|P2:00|Lc:00 (Max)
—>processing…
processing… <—DATA:04 26 3E CA 83 22 80| SW:9000

Status riječi definisane u ISO 7816-4
The variable 'xx' can take on values in the range of '00' to 'FF'.

Normal processing
  '9000' Process executed successfully
  '61xx' Processing completed successfully. xx data bytes are available in
  response and can be retrieved using GET RESPONSE

Warning processing
  '62xx' Data in nonvolatile memory not modified. See SW2 for details
    '6200'	No information given
    '6281'	Part of returned data may be corrupted
    '6282'	End of file/record reached before reading Le bytes
    '6283'	Selected file invalidated
    '6284'	FCI not formatted according to 1.1.5
  '63xx' Data in nonvolatile memory modified; see SW2 for details
    '6300'	No information given
    '6381'	File filled up by the last write
    '63Cx'	Password verification failed (x - remaining tries)

Execution error
  '64xx' Data in nonvolatile memory not modified; see SW2 for details
  '65xx' Data in nonvolatile memory modified; see SW2 for details
    '6500'	No information given
    '6581'	Memory failure
  '66xx' Security-relevant result

Checking error
  '6700' Incorrect length (no additional information)
  '68xx' Functions in class byte not supported; see SW2 for details
    '6800'	No information given
    '6881'	Logical channel not supported
    '6882'	Secure messaging not supported
  '69xx' Illegal command; see SW2 for details
    '6900'	No information given
    '6981'	Command incompatible with file structure
    '6982'	Security conditions not satisfied
    '6983'	Authentication method blocked
    '6984'	Referenced data invalidated (Password is blocked)
    '6985'	Current state is unknown
    '6986'	Command not allowed (no current EF)
    '6987'	Expected SM data objects missing
    '6988'	SM data objects incorrect
  '6Axx' Incorrect P1/P2 parameters; see SW2 for details
    '6A80'	Incorrect parameters in the data field (Password is too long)
    '6A81'	Function not supported
    '6A82'	File not found
    '6A83'	Record not found
    '6A84'	Not enough memory space in the file
    '6A85'	Lc inconsistent with TLV structure
    '6A86'	Incorrect parameters P1-P2 (Incorrect parameters)
    '6A87'	Lc inconsistent with P1-P2
    '6A88'	Referenced data not found
  '6B00' Incorrect P1 or P2 parameter
  '6Cxx' Bad Le value; see SW2 for correct number of available data bytes
  '6D00' Command code invalid or not supported
  '6E00' Class not supported
  '6F00' No specific diagnosis

Operativn sistem (Java Card)

Operativni sistemi pametnih kartica se mogu podijeliti na nativne operativne sisteme i operativne sisteme zasnovane na prevodiocu. Nativni operativni sistemi i aplikacije koje se pokreću na njima izvršavaju se na mašinskom jeziku ciljnog procesora. Obično je to C i nemaju prevodioca koji bi prevodio programe na mašinski jezik ciljnog procesora.

Većina operativnih sistema zasnovanih na prevodiocu takođe je napisana u C-u. Aplikativni programi koji se pokreću na njima ne moraju da se generišu na mašinskom jeziku, mogu biti napisani na jeziku kao što je Java. Ovi operativni sistem pomoću prevodioca vrše prevođenje programa na mašinski jezik ciljnog procesora. Neki poznati primeri ovakvih operativnih sistema su Java Card, BasicCard i Multos.

Primjer Java Card aplikacije

HelloApplet.java

package com.dxdev.javacard.hello;

import javacard.framework.*;
import javacard.framework.service.*;

public class HelloApplet extends Applet {
   HelloWorld hello;
   Dispatcher disp;
   Service svc;

   private HelloApplet() {
     hello = new HelloWorld();
     svc = new RMIService(hello);
     disp = new Dispatcher((short) 1);
     disp.addService(svc, Dispatcher.PROCESS_COMMAND);
   }

   public static void install(byte[] buf, short ofs, short len) {
     (new HelloApplet()).register();
   }

   public void process(APDU apdu) {
     byte[] buf = apdu.getBuffer();
     switch(buf[ISO7816.OFFSET_INS])
     {
       case 0x40:
         Util.arrayCopy(hello,(byte)0,buf,ISO7816.OFFSET_CDATA,(byte)5);
         apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA,(byte)5);
         break;
       default:
         ISOException.throwIt(ISO7816.SW_WRONG_INS);
     }
   }
}

HelloWorld.java [RMI]

package com.dxdev.javacard.hello;

import java.rmi.RemoteException;

public class HelloWorld implements IHelloWorld {
    private static final byte[] message = {0x48, 0x65, 0x6c, 0x6c, 0x6f };
                                          // H, e, l, l, o
    public byte[] hello() throws RemoteException {
     return message;
   }
}

IHelloWorld.java [INTERFACE]

package com.dxdev.javacard.hello;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IHelloWorld extends Remote {
   public byte[] hello() throws RemoteException;
}

ISO7816 Interface

ISO7816.OFFSET_CLA       // 0
ISO7816.OFFSET_INS       // 1
ISO7816.OFFSET_P1        // 2
ISO7816.OFFSET_P2        // 3
ISO7816.OFFSET_LC        // 4
ISO7816.OFFSET_CDATA     // 5
ISO7816.OFFSET_EXT_CDATA // 7
ISO7816.SW_NO_ERROR           // 0x9000
ISO7816.SW_INS_NOT_SUPPORTED  // 0x6E00

Aplikacija je krajnje jednostavna, ako se posalje APDU komanda 00 40 00 00 00, odgovor će biti 48 65 6C 6C 6F 90 00. Što je heksadecimalno za Hello i SW_NO_ERROR.

Čitaj dalje: RFID

Kriptografija: PKI

November 27, 2019 | SECURITY | No Comments

Infrastruktura javnog ključa se obično naziva PKI (eng. Public Key Infrastructure) i predstavlja termin koji se koristi za opisivanje zakona, politika, procedura, standarda i softvera koji regulišu i kontrolišu sigurne razmjene informacija zasnovane na temelju kriptografije javnog ključa (PKC).

Naredna tabela sadrži osnovne PKI komponente:

KomponentaOpis
Digital CertificatesTemelj PKI, to su elektronski kredencijali koji se sastoje od javnih ključeva.
Certification Authority (CA)Izdaje digitalne certifikate korisnicima ili podređenim CA-ima.
Registration Authority (RA)Prihvata zahtjeve za novim certifikatima, osigurava autentičnost podnositelja zahtjeva i dovršava postupak registracije za CA.
Validation Authority (VA) Pruža uslugu za provjeru valjanosti digitalnog certifikata.
Certificate Policy and Practice StatementsDokumenti koji opisuju kako se CA i njegovi certifikati koriste, stepen povjerenja, pravne obaveze ako je povjerenje narušeno i tako dalje.
Certificate RepositoriesSkup servisa ili lokacija na kojima se certifikati pohranjuju i objavljuju.
Certificate Revocation Lists (CRL)Lista certifikata koji su ukinuti prije navedenog roka isteka.

Svrha ove infrastrukture je upravljanje ključevima i digitalnim certifikatima koji se koriste za kriptovanje i digitalno potpisivanje. U kriptografiji je PKI ugovor koji povezuje javne ključeve sa njihovim identitetima korisnika preko tijela za certificiranje (CA).

Sada da ovo sve pojednostavimo maksimalno, pretpostavićemo da Alice i Bob koriste asimeričnu kriptografiju za komunikaciju. Svako od njih ima par ključeva, jedan privatni i jedan javni. Problem nastaje kada oni objave javne ključeve, kako će Alice znati da je baš ovo javni ključ od Boba i obrnuto. Ovaj problem riješava PKI pomoću CA tijela, ono će potvrditi da je taj javni ključ stvarno od Boba pomoću digitalno potpisanog certifikata. Analogno kao što policajac provjerava identitet preko lične karte koju je izdao nadležni organ, tako se može provjeriti i javni ključ preko certifikata koji je izdao CA.

Kako dobiti digitalni certifikat?

Bob mora prvo generisati par ključeva (ukoliko ih nema), zatim pravi zahtjev za certifikat. Taj zahtjev je obično jedan fajl sa ektenzijom .csr (Certificate Signing Request). Tu popunjava neke svoje osnovne podatke (ime, grad, državu, mail…) i naravno tu je i njegov javni ključ. Neću u detalje ulaziti o strukturi CSR-a, koga zanima moze pogledati Wiki: CSR. Sada ovaj zahtjev potpisuje sa svojim privatnim ključem i šalje CA, tačnije RA. RA možemo zamisliti kao dio CA koji provjerava zahtjeve, potpis zahtjeva provjeri pomoću javnog ključa Boba, možda ga čak i kontaktira. U glavnom kada zahtjev prođe provjeru CA izdaje Bobu digitalni certifikat, fajl po X.509 standardu sa ekstenzijom .cer ili .crt koji dokazuje vlasništvo nad javnim ključem. Bravo Bob!

Kako provjeriti digitalni certifikat?

Tijelo za certificiranje (CA) je entitet od povjerenja koji obavlja izdavanje certifikata, potvrđuje identitet vlasnika certifikata (RA) i pruža dokaz da je certifikat validan (VA). VA kao dio CA pruža uslugu za provjeru valjanosti digitalnog certifikata preko lista za opoziv certifikata (eng. Certificate Revocation List) ili kratko CRL. CA generiše CRL kao fajl sa extenzijom .crl i predaje ga VA. Obično se ponudi download ovih lista preko OCSP protokola.
Ako Alice hoće glumi policajca i provjeri da li je Bobov certifikat dobar prvo će pogledati datum isteka certifikata ako je on dobar obratiće se VA. Preko njihovog servisa poslati certifikat ili ako nemaju servis preuzeti CRL i pogledati ima li tu Bobov certifikat. I stvarno Bobov certifikat se nasao na CRL uz razlog keyCompromise, što znači da je neko doša u posjed Bobovog privatnog ključa. 🙊
Mogući razlozi za opoziv su definisani u RFC 5280 s69.

Zašto postoje RA i VA kad to sve može CA raditi?

Zamislite neko dođe do privatnog kljuca od CA, svi certifikati koje je taj CA izdao više nisu validni. Iz tog razloga obično je CA offline i na mrežu se spaja samo za potpisivanje certifikata i generisanje CRL. U teoriji bi trebala postojati struktura sa tri nivoa CA tijela. Obično jedan Root CA čiji certifikat važi najduže i koji se čuvaju izvan mreže na vrlo sigurnoj lokaciji, Policy CA-ovi koji nisu u jednom domenu a čuvaju se izvan mreže i Issuing CA-ovi koji izdaju certifikate korisnicima i njihov certifikat po pravilu bi trebao da važi duplo duže od certifikata koje izdaju korisniku. Znači Root CA izdaje certifikate za Policy CA, oni izdaju certifikate za Issuing CA, a Issuing CA-ovi onda izdaju certifikate krajnjim korisnicima. U ovom slučaju kao na slici gdje njihov certifikat važi 5 godina, certifikat koji bi izdali korisniku će važiti 2 godine.

Šta je Certificate Chain?

Lanac certifikata (eng. Certificate Chain) predstavlja listu certifikata, od ROOT certifikata do certifikata krajnjeg korisnika. Da bi se certifikatu krajnjeg korisnika moglo vjerovati, taj certifikat mora izdati CA koji je uključen u trusted store sistema ili uređaja gdje se certifikat koristi. Ako certifikat nije izdao pouzdan CA, tada će se provjeriti da li je certifikat od narednog CA u lancu pouzdan i tako dalje (uz lanac) sve dok se ne nađe pouzdan CA.

Šta je sad Trusted Store?

Trusted Store ili TrustStore sadrži certifikate drugih strana ili od CA-ova kojima sistem vjeruje. Windows ima svoj, Firefox ima svoj, moguće ga je otvoriti i gledati certifikate. U suštini skoro svaki sajt ima svoj certifikat. Kada se otvori google.ba, Firefox (ili neki drugi web browser) dobije njegov certifikat i počinje provjeravati lanac dok ne nađe certifikat koji ima u svom TrustStore-u. Ako pronađe takav certifikat dobijete mali katanac 🔒 lijevo pored adrese ili zeleno https. Na slici lijevo je lanac certifikata od google.ba, a desno Trusted Store Root certifikati od Chroma.

Kako napraviti PKI?

Osnova PKI-a je Root CA, tako da je potrebno prvo napraviti Root CA. Ovo će možda zvučiti previše jenostavno, ali bukvano:

  1. Generišete par RSA ključeva (privatni i javni)
    openssl genrsa -out rootCA.key 4096
  2. Kreirate zahtjev za certifikat (CSR)
    openssl req -new -key rootCA.key -out rootCA.csr
  3. Potpišete zahtjev sa privatnim ključem
    openssl x509 -req -days 365 -in rootCA.csr -signkey rootCA.key -out rootCA.crt

To je to, upravo ste kreirali interni CA sa samopotpisanim certifikatom. Interni, jer se ne nalalazi ni u jednom Trusted Store-u, pa mu je primjena ograničena. Sve zavisi od toga za šta i kako planirate koristiti taj PKI. Pravi certifikat (potpisan od Root CA koji se već nalazi u Trusted Store-ima) se može kupiti od Let’s Encrypt, DigiCert, GlobalSign… Postoje i besplatna (Open Sorce) riješenja za CA tijela kao što je EJBCA.

Link Certifikat

Kada CA prelazi sa starog para ključeva na novi, pored novog samopotpisanog certifikata, CA treba izdati certifikat koji sadrži stari javni ključ potpisan novim privatnim ključem i certifikat koji sadrži novi javni ključ potpisan starim privatnim ključem (link certifikat). Oba ova certifikata su samo-izdani, ali nisu samo-potpisani, mehanizam poznat kao Cross Certification. Istek CA ključa je problem jer što se tiče klijenata to je potpuno novi CA. Link certifikat ovo riješava tako što će klijentima reći da ovaj novi certifikat zamjenjuje onaj istekli koji je u njihovom Trust Store-u. Kako oni vjeruju starome, a stari je potpisao ovaj novi, mogu da vjeruju i novom samopotpisanom certifikatu.

Trusted Timestamping

Kratko i jasno ovo je udaranje vremenskog žiga (eng. timestamp) na digitalni dokument. Podrazumijeva sigurno praćenje vremena stvaranja i izmjene dokumenta, tako da ni vlasnik dokumenta nije u mogućnosti da ga promijeni. Da bi vremenska oznaka bila pouzdana mora je izdati Time Stamping Authority ili kratko TSA. Jedno novo CA tijelo koje heš dokumenta i vremanski žig digitalno potpisuje pomoću svoga privatnog ključa. Nadam se da nije potrebno detaljnije objašnjavati ove slike jer je sve već poznato iz prethodnih postova. Više informacija o ovome je moguće pronaći u RFC 3136.

Izrada vremenske oznake
Provjera

Kriptografija: Heš funkcije

November 27, 2019 | SECURITY | No Comments

Heš funkcija je svaka funkcija koja mapira podatake proizvoljne veličine u vrijednosti fiksne veličine. Sam postupak se naziva heširanje, a vrijednosti koje vraća heš funkcija nazivaju se heš kodovi (eng. hash codes) ili samo heš. Malo jednostavnije rečeno, uzmete neki fajl ili tekst i kada on prođe kroz heš funkciju dobijete niz karaktera (slova i brojeva) određene dužine. Taj niz karaktera se zove heš i u slučaju MD-5 funkcije to su 32 karaktera, dok SHA-1 vraća 40 karaktera.

Postupak heširanja mora biti deterministički određen, to jest određena ulazna vrijednost mora uvijek da generiše istu heš vrednost. Na primjer, svaki put kada unesem tekst “lozinka”, očekujem da je za MD-5 funkiju heš “8aa87050051efe26091a13dbfdf901c6”. Dok različiti ulazi i različite heš funkcije moraju imati ražličite izlazne heš vrijednosti. Ako se desi da različiti ulazi za istu heš funkciju imaju iste heš vrijednosti došlo je do kolizije. Suština je da male promjene ulaznih podataka drastično mijenjaju heš vrijednost, a od samog heša bi trebalo biti nemoguće dobiti ulazne podatke.

Heširanje se često koristi za zaštitu lozinki, u praksi bi se uvijek trebao čuvati heš od lozinke a nikad sama lozinka u izvornom tekstu. Tako da ukoliko neko provali u bazu, dođe do tabele sa korisnicima i pronađe kolonu za lozinke, vidi samo neke znakove a ne originalne lozinke.

Naravno da je moguće opet pokušati razne lozinke koje će dati bas tu heš vrijednost, ali su algoritmi do te mijere otporni na kolizije da ću ja ostaviti SHA-256 od svoje Instagram lozinke:
abd6c59226cc23cc67acb737f92a7028ae001c6573f6fb50656a19baf72fac3e.
Sretno!

Da li je dužina lozinke važna?

Ko je pažljivo pratio primjetio je da “lozinka123” i “mojaSuperDugaLozinka” na kraju, kad se pretvore u heš, imaju istu duzinu. Dakle, zbog čega su kratke lozinke slabe?

Odgovor: Brute force napadi. Jednostavno pokušavati sa različitim unosima dok se ne pogodi onaj koji generiše heš lozinke. Što je lozinka duža, to će više trajati napad. Ako je napadaču potrebno 100 godina da pogodi lozinku određene dužine, može se reći da je lozinka sigurna.

Checksum fajlova

Checksum ili kontrolna suma je samo drugi naziv za heš koji računari koriste u pozadini da bi provjerili probleme sa fajlovima, ovo možete uraditi i sami. Na primjer, preuzimate novi operativni sistem i hoćete provjerite da li je taj fajl ispravno preuzet. Obično pri preuzimanju ISO fajlova negdje u opisu budu kontrolne sume.

U Windows PowerShell-u naredba Get-FileHash izračunava heš fajla, samo je potrebno navesti putanju do fajla i naziv algoritma (MD5, SHA1, SHA256… ).

Get-FileHash C:\Downloads\Windows10.iso -Algorithm SHA1

Ako se heš podudara, fajlovi su identični. Ako ne, postoji problem – možda je fajl oštećen ili je neko ubacio virus i planira u pozadini kopati Bitcoin-e preko vas. Razmislite o tome sljedeći put kada skinete neki piratski Windows 10 ili slične “krekovane” aplikacije.

Huawei i Wi-Fi QR kod

Lozinka za Wi-Fi se naravno isto čuva kao heš, pa je relativno teško provaliti. Bar u teoriji, u praksi se neko iz Huawei-a napravio pametan i počeo čuvati lozinke u običnom tekstu pri svakom uspiješnom spajanju na Wi-Fi. Ogroman sigurnosni propust, ali kinezi kao kinezi, da bi ovo zamaskirali jednostavno su to sve stavili u QR kod. Sada se ne vidi lozinka direktno, ali svako ko ima čitač QR koda može da vidi naziv mreže i lozinku.

I onda čitate ovako nešto i pitate se kako je moguće, a bukvano ste im dali lozinke i prihvatili uslove korištenja.

Čitaj dalje: Kriptografija PKI

Kriptografija: Ciljevi

November 27, 2019 | SECURITY | No Comments

Kriptografija se koristi za:

  1. Integritet podataka (eng. Data integrity) – Primalac poruke trebao bi biti u mogućnosti da provjeri da li je poruka modifikovana tokom prenosa. Trebalo bi da niko nije u stanju originalnu poruku ili njene dijelove zamijeniti lažnom porukom.
  2. Autentifikaciju (eng. Authentication) – Primalac poruke trebao bi biti u mogućnosti provjeriti njezino porijeklo. Niko ne bi trebao biti u stanju poslati poruku Bobu i pretvarati se da je Alice (provjera porijekla podataka). Prilikom pokretanja komunikacije, Alice i Bob trebali bi se moći međusobno identificirati (provjera identiteta entiteta).
  3. Neporecivost (eng. Non-repudiation) – Pošiljalac ne bi trebao kasnije moći poreći da je poslao poruku.

Ako su poruke napisane na papiru, papir pruža određenu sigurnost protiv manipulacija. Rukom pisani lični potpisi garantuju autentičnost i neporecivost. Ako se koriste elektronski mediji, taj medij uopšte ne pruža bezbednost, jer je lako zamijeniti neke bajtove u poruci tokom prenosa preko računarske mreže, a posebno je lako ako je mreža javno dostupna, poput Interneta.

Kod za provjeru autentičnosti poruke (MAC)

Postoje simetrični i asimetrični metodi kojima se obezbeđuje integritet poruka. Klasične simetrične metode zahtijevaju tajni ključ koji dijeli pošiljalac i primalac. Poruka je nadopunjena autentifikacijskim kodom poruke (eng. Message Authentication Code – MAC). Kod se generiše algoritmom i zavisi od tajnog ključa. Dopunjena poruka je tako zaštićena od modifikacija. Primalac može testirati integritet dolazne poruke provjerom da li je isti MAC koji dobije iz pristigle poruke i MAC od pošiljaoca. Autentifikacijski kodovi poruka se mogu implementirati pomoću heš funkcija (eng. hash functions).

Digitalni potpis

Digitalni potpis zahtijeva metode javnog ključa (dva različita ključa), kao i kod klasičnih rukom pisanih potpisa, namjera im je pružiti autentičnost i neporecivost. Digitalni potpisi zavise od tajnog ključa potpisnika i može ih generisati samo ta osoba. Sa druge strane, svako može provjeriti da li je potpis validan primjenom javno poznatog algoritma za verifikaciju koji koristi javni ključ potpisnika. Ako Alice želi da potpiše poruku, ona sa tajnim ključem primenjuje algoritam potpisivanja i dobija potpis. Bob dobija potpis za poruku i može potom da izvrši verifikaciju potpisa sa javnim ključem od Alice.

Čitaj dalje: Kriptografija Heš funkcije