IOS Security i aplikativni primjer koji koristi Apple Touch ID FingerPrint API

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

Članovi: Darijan Vertovšek Hrvoje Hrvoić


Sadržaj

Uvod

iOS je ime za mobilni operacijski sustav razvijen od strane Apple-a prvenstveno za iPhone uređaje no s vremenom je proširen i na sljedeće proizvode: iPad, Apple TV i IPod Touch. U lipnju 2015. iOS je na tržištu mobilnih uređaja kotirao sa udjelom zastupljenosti od 39%, iza Androida koji trenutno zauzima 52% tržišta. Trenutno najnovija verzija iOS-a jest iOS 9. Svaki Apple uređaj koji radi na iOS operacijskom sustavu kombinira softver, hardver i servise koji u integraciji osiguravaju sigurnost i transparentni UI što će biti i prikazano u nastavku.

Arhitektura iOS-a

Core OS

Arhitektura iOS operacijskog sustava ima četiri sloja. Prvi i najniži (korisniku najudaljeniji) sloj je operacijski sustav u užem smislu (eng. Core OS). U njemu se nalazi jezgra (eng. kernel) koja je zapravo baziran na Unix operacijskom sustavu (BSD) pa zato možete i vidjeti sličnosti naredbi unutar ljuske između Linuxa i OS X-a. Tu su socketi, dio za upravljanje napajanjem i Bonjour - dio za upravljanje mrežnom konfiguracijom (dodjela adresa i DNS). Mach 3.0 je dio koji služi za podršku multiprocesorskom radu. Sve to i ostale komponente arhitekture koje su samoobjašnjavajuće možete vidjeti na sljedećoj slici:

iOS Arhitektura: najniži sloj, izvor: Stanford

Core Services

Na sljedećoj slici moguće je vidjeti drugi sloj odnosno sloj glavnih servisa. To je skup osnovnih sistemskih servisa koji služe aplikacijama. Sadrži individualne tehnologije koje pružaju funkcionalnosti poput lokacije, iCloud-a (pruža vašim aplikacijama da spremaju podatke na server) i upravljanja mrežom tipa servisi za mreže ravnopravnih čvorova (eng. P2P). Također, kao i u Androidu pruža servis za rad s SQLite bazama podataka. Brine se za pristup sklopovlju putem objektno orijentirane paradigme preko servisa.

iOS Arhitektura: Core Services sloj, izvor: Stanford

Multimedijski sloj

Multimedijski sloj obuhvaća razvojne okvire za 3D, audio, video formate itd. Ovaj sloj, te biblioteke za pristup istome, su najbitniji developerima igrica ili programa koji koriste uređivanje videa ili zvuka.

iOS Arhitektura:Multimedijski sloj, izvor: Stanford

Cocoa Touch sloj

Zadnji i korisniku najbliži sloj, jest Cocoa Touch sloj. Služi za komunikaciju s korisnikom odnosno programer će putem ovog sloja ostvariti interakciju s krajnjim korisnikom. Sastoji se od osnovnih razvojnih okvira za izgradnju iOS aplikacija. Ovi okviri definiraju izgled vaše aplikacije. Pružaju ključne tehnologije poput višezadaćnosti, skup klasa za definiranje Viewa i njihovih kontrolera, prepoznavanja ulaznih gesti na dodir, push notifikacija te sistemske servise visoke razine. Dakle, programer će prilikom dizajniranja aplikacije prvo potražiti rješenje u ovom skupu biblioteka, ukoliko njegove potrebe nisu zadovoljene strovaliti će se u niže slojeve.

iOS Arhitektura: Cocoa Touch sloj, izvor: Stanford

Sigurnost iOS-a

iOS i njegovi uređaji pružaju napredne funkcionalnosti koje se tiču sigurnosti, no unatoč tome one se lako koriste. Mnogo njih je inicijalno uključeno, tako da smanji broj potrebnih sigurnosnih konfiguracija. S druge strane, neki sigurnosni aspekti koji su ključni za funkcioniranje ovakvog sustava su ugrađeni u srž uređaja tako da se ne mogu promijeniti. Za primjer, enkripcija uređaja je uvijek uključena, tako da nepažljivi/needucirani korisnici isključivanjem te opcije ne bi kompromitirali sigurnost uređaja. Druge funkcionalnosti poput Touch ID-ja zbog svoje intuitivnosti i jednostavnosti poboljšavaju iskustvo korištenja (UX) prilikom primjena sigurnosnih mjera nad uređajem.

iOS Arhitektura: sigurnosni pogled, izvor: iOS Security Guide

Podjela sigurnosnih aspekata

Prema Appleu postoji 8 područja sigurnosti iOS-a:

  1. Sigurnost sustava - integrirani softver i hardver koji su platforma za uređaje iPhone, iPad, i iPod touch.
  2. Enkripcija i zaštita podataka - arhitektura i dizajn koji će štititi korisnikove podatke ako je uređaj ukraden ili ako neautorizriana osoba proba modificirati podatke.
  3. Aplikativna zaštita - sustav koji omogućuje sigurno pokretanje i izvođenje aplikacija securely bez kompromitiranja rada sustava (integritet sustava ostaje netaknut).
  4. Mrežna sigurnost - standardni mrežni protokoli koji osiguravaju sigurnu autentifikaciju i enkripciju podataka prilikom njihova prijenosa.
  5. Internet servisi - Apple-ova mrežna infrastruktura za slanje poruka, backup i sinkronizaciju.
  6. Apple Pay - Apple-ova implementacija sigurnog plaćanja.
  7. Kontrola uređaja - metode koje sprječavaju neautorizirano korištenje uređaja + daljinsko brisanje podataka ukoliko je uređaj ukraden/izgubljen.
  8. Kontrola privatnosti - kontrola pristupa servisima koji se tiču lokacije i korisničkih podataka.

Sigurnost sustava

Ovo je aspekt koji uključuje boot process, update Software-a i tzv. Sigurnosnu Enklavu (eng. Secure Enclave). Osigurava sigurnost hardvera i softvera unutar sustava (diljem cijele arhitekture), međusobno optimiziranost i da koriste resurse na pravi način.

Secure boot chain

Kako mu ime govori, ovo je proces sigurnosnog pokretanja sustava prilikom čega su koraci digitalno potpisani od strane Apple-a = chain of trust. Dakle, svaki korak u lancu se brine za sljedeći odnosno svaki korak osigurava da je sljedeći digitalno potpisan od Apple-a (izvršava se validacija prije pokretanja sljedećeg koraka). Konkretno, to se događa na sljedeći način:

  1. Uključite iOS uređaj
  2. Aplikacijski procesor (još postoji i mrežni - baseband procesor) izvršava kod iz ROM-a = Boot ROM. Pošto je nepromjenjiv (stvoren prilikom proizvodnje čipa - "ulijan"), implicitno mu se vjeruje.
  3. The Boot ROM kod također sadrži javni ključ od Apple Root CA, koji se koristi za validaciju da je Low-Level Bootloader (LLB) potpisan od strane Apple-a prije njegovog učitavanja.
  4. LLB izvršava svoje zadatke, kada ih završava, provjerava (na isti način kao i prije) i pokreće bootloader više razine, tzv. iBoot
  5. iBoot provjerava i pokreće jezgru iOS operacijskog sustava.

Ukoliko samo jedan korak zakaže dobit će se poruka “Connect to iTunes”- tzv. recovery mode. Tada se morate spojiti preko USB-a i riješiti problem resetiranjem na tvorničke postavke putem iTunes-a. Ako Boot ROM ne može loadati ili verificirati LLB, ulazi u tzv. DFU (Device Firmware Upgrade) način rada gdje možete restore-ati vaš softver i biti uvjereni da je softver nemodificiran. Kako samostalno ući u DFU mode: [1]
Kao što vidimo, ovakav lanac validacije osigurava da najniže razine softvera nisu modificirane te omogućuje iOS-u pokretanje samo na validiranim Apple uređajima.

Ilustracija: Secure boot chain, izvor: fhshh.com

Autorizacija sistemskog softvera

Apple objavljuje sigurnosna (kao i sva druga) ažuriranja softvera te će korisnici za to dobiti notifikaciju i u tom slučaju se mogu spojiti na iTunes te skinuti novu verziju softvera. Kako bi spriječili spuštanje verzije OS-a na nižu (stariju) kojoj fale zadnja sigurnosna ažuriranja (u slučaju da napadač samostalno downgrade-a softvare), iOS koristi autorizaciju sistemskog softvera (eng. System Software Authorization). U novijim verzijama uređaja (koji koriste A7+ verzije procesora) dodatni procesor zvan "Sigurnosna Enklava" pokreće autorizaciju da bi osigurao integritet softvera prevencijom downgrade-anja. Dva su načina ažuriranja: direktno na uređaju (eng. Over the Air - OTA) ili putem iTunesa. Razlika je samo u tome što se putem iTunesa skida potpuna kopija iOS sustava a OTA način skida samo potrebne nadogradnje. Konkretno, ažuriranje se odigrava na slijedeći način:

  1. iTunes / sam uređaj(OTA način) povezuje se na Appleov server za autorizaciju instalacije i šalje:
    • listu kriptografskih mjera za svaki dio instalacije. Dio instalacije npr. može biti prethodno spomenuti LLB, iBoot, jezgra ili image OS-a.
    • nonce (za prevenciju man-in-the middle modifikacije)
    • jedinstveni ID uređaja - ECID.
  2. Autorizacijski server provjerava listu kriptografskih mjera te ako nađe pogodak (jednu od mjera prikladnu za dio nadogradnje koji će poslati natrag) dodaje ECID mjeri i potpisuje rezultat. Dakle, server će poslati set potpisanih podataka uređaju. Dodavanje ECID-a personalizira autorizaciju točno za taj uređaj.
  3. Prethodno spomenuta validacija kod pokretanja sustava (chain-of-trust) provjerava dolazi li potpis od strane Applea (root CA public key) i da kriptografska mjera određenog dijela koji se boot-a (npr. LLB) kombinirana s ECID-om uređaja potvrđuje ono što je bilo pokriveno potpisom (provjerava se hash).

Ovi koraci osiguravaju autorizaciju za specifični uređaj te da stara verzija iOS-a s jednog uređaja ne može biti kopirana na drugi. Nonce spriječava da napadač presretne odgovor servera te ga modificira u svrhu promjene sistemskog softvera (kojeg poslije može exploitati).

Sigurnosna Enklava

Zanimljiva stvar koja se javlja u Appleovim A7+ procesorima je zasebni procesor/koprocesor "The Secure Enclave". Koristi se za odvajanje dvaju prethodno spomenutih procesa: sigurnog pokretanja sustava i autoriziranog ažuriranja softvera odvojeno od aplikacijskog procesora. Specijaliziran je za kriptografske operacije koje se tiču upravljanja sigurnosnim ključevima te brine za integritet podataka i kada je jezgra (u apl. procesoru) kompromitirana. Kormunikacija između Enklave i aplikacijskog procesora je izolirana na prekidno-pogonjeni "mailbox" i zajedničke spremnike memorije. Svaka sigurnosna enklava ima svoj UID (jedinstveni ID) koji je potpuno izoliran od svih dijelova sustava te čak ni Apple nema podatak o njegovoj vrijednosti. Prilikom svakog pokretanja uređaja, stvara se ključ te mu se dodaje UID. Ta kombinacija se koristi za kriptiranje memorijskog prostora uređaja osiguranog samo za Enklavu. Podaci koji će se spremati od strane Sigurnosne Enklave bit će kriptirani tom kombinacijom te nonce counterom (eng. anti-replay counter). Također, Sigurnosna Enklava je odgovorna za obradu podataka otiska prsta s Touch ID senzora (o Touch ID-u čitaba ide u nastavku) te provjeru odgovara li uneseni otisak registriranom. Komunikacija između Enklave i Touch ID senzora ide putem aplikacijskog procesora koji ne može čitati proslijeđene podatke. Ta komunikacija je pak kriptirana ključem sesije koji je predviđen za komunikaciju između Enklave i senzora. Za kriptiranje ključa sesije koristi se AES algoritam.

Touch ID

Touch ID je sustav prepoznavanja otisaka prstiju koji osigurava siguran pristup uređaju bržim i lakšim. Tehnologija čita podatke o otiscima prsta iz bilo kojeg kuta te tijekom vremena uči više o otisku prsta korisnika. Naime, senzori iz dana u dan proširuju mapu otiska te identificiraju dodatne čvorove koji se isprepliću sa svakim novim korištenjem. Touch ID čini korištenje dugih i kompleksnijih lozinki praktičnijim jer ih korisnici ne moraju unositi tako često. Touch ID također nadvladava nezgodno zaključavanje pomoću lozinke, i to ne tako da ga zamjenjuje, već da pruža pristup uređaju unutar razumnih vremenskih intervala.

Touch ID i pristupni kodovi

Kako bi se koristio Touch ID, korisnici moraju postaviti svoj uređaj tako da je potreban pristupni kod za otključavanje. Kada Touch ID skenira te prepozna zapisani otisak prsta, uređaj se otključava bez da se korisnika pita za pristupni kod uređaja. No, uvijek se može koristiti pristupni kod umjesto Touch ID-ja, te se i mora koristiti u sljedećim situacijama:

  • Uređaj je upravo uključen ili ponovno pokrenut
  • Uređaj nije bio otključavan više od 48 sati
  • Uređaj je zaprimio udaljenu naredbu zaključavanja
  • Nakon 5 neuspješnih pokušaja da se analizira podudarajući otisak prsta
  • Kada se postavljaju ili zapisuju novi otisci prsta sa Touch ID-jem


Kada se uključi Touch ID, uređaj se smjesta zaključa kada se pritisne tipka Sleep/Wake. Sa razinom sigurnosti koja koristi samo pristupni kod, mnogi korisnici postavljaju period zaključavanja uređaja, kako bi izbjegli unošenje koda svaki put kad se uređaj koristi. S Touch ID-jem, uređaj se zaključava svaki put kad ode u Sleep način rada, te traži otisak prsta(ili opcionalno-pristupni kod) prilikom svakog buđenja.


Touch ID je moguće "istrenirati" da prepozna do 5 različitih otisaka prsta. S jednim upisanim otiskom, šanse za nasumičnim podudaranjem sa nekim drugim su 1:50 000. Međutim, Touch ID dozvoljava samo 5 neuspješnih pokušaja za podudaranjem otiska prsta prije nego se od korisnika zatraži da unese pristupni kod kako bi dobio pristup.


Ostale primjene za Touch ID

Touch ID se isto tako može postaviti da potvrđuje kupnje unutar iTunes Store-a, App Store-a te iBooks Store-a, tako da korisnici ne moraju unositi Apple ID lozinku. Kada se odabere opcija za autorizacijom kupnje, tokeni za autentikaciju se razmjenjuju između korisnika i Store-a. Token te kriptografski slučajni broj se drže u sigurnosnoj enklavi. Slučajni broj se porpisuje sa ključem sigurnosne enklave koji dijele svi uređaji zajedno sa iTunes Store-om. Touch ID se također može koristiti i za Apple Pay, odnosno Apple-ovom implementacijom sigurnog plaćanja. Dodatno, aplikacije treće strane može koristiti sustavske API-je kako bi tražili od korisnika autentikaciju pomoću Touch ID-ja ili pristupnog koda. Aplikacija se samo obavještava o tome je li autentikacija bila uspješna ili ne, te ne može pristupiti povezanim podacima o upisanom otisku prsta.

Stavke unutar keychain-a se također mogu zaštiti pomoću Touch ID-a, te se otpuštaju samo od strane sigurnosne enklave u slučaju da se otisak prsta ili pristupni kod podudaraju. Developeri aplikacija također imaju na raspolaganju API-je koji provjeravaju da li je pristupni kod postavljen od strane korisnike, te da li mogu autenticirati ili otključati stavku keychain-a pomoću Touch ID-ja.

Touch ID sigurnost

Senzor za otisak prsta je aktivan samo onda kada čelični prsten koji okružuje Home tipku detektira dodir prsta, što pokreće naprednu slikovnu matricu koja skenira prst te šalje sliku sigurnosnoj enklavi. Raster slike se privremeno sprema u enkriptiranoj memoriji unutar sigurnosne enklave dok se vektorizira za analizu, nakon čega se odbacuje. Analiza koristi mapiranje potkožnog reljefnog kuta toka (engl. subdermal ridge flow angle mapping), što je proces koji uzrokuje nestajanje detalja koji su potrebni za rekonstrukciju stvarnog otiska prsta korisnika. Rezultirajuća mapa čvorova se sprema bez ikakve informacije o identitetu u enkriptiranom formatu koji može čitati samo sigurnosna enklava, te se nikad ne šalje Apple-u niti se sprema na iCloud ili iTunes.

Kako Touch ID otključava iOS uređaj?

Ukoliko se Touch ID isključi, prilikom zaključavanja uređaja, ključevi za klasu zaštite podataka, koji se čuvaju u sigurnosnoj enklavi, se odbacuju. Datoteke, te keychain stavke u toj klasi nisu dostupne sve dok korisnik ne otključa uređaj unošenjem svog pristupnog koda. Kada se Touch ID uključi, prilikom zaključavanja uređaja, ključevi se ne odbacuju. Umjesto toga, oni se u umotavaju s ključem koji se predaje Touch ID podsustavu unutar sigurnosne enklave. Kada korisnik pokuša otključati uređaj, ako Touch ID prepozna korisnikov otisak prsta, predaje ključ za otključavanje ključeva za zaštitu podataka, te se uređaj otključava. Ovaj proces pruža dodatnu zaštitu tako da traži od podsustava Touch ID i podsustava za zaštitu podataka da surađuju kako bi se uređaj otključao. Ključevi koji su potrebni kako bi Touch ID otključao uređaj se gube ukoliko se uređaj ponovno pokrene te se odbacuju od strane sigurnosne enklave nakon 48 sati ili nakon 5 propalih pokušaja prepoznavanja Touch ID-ja.

Touch ID senzor, izvor: iPhoneHacks

Aplikativni primjeri

Touch ID API Demo App

Priprema za korištenje Touch ID funkcionalnosti

Kako bi Touch ID Funkcionirao, prvo se treba konfigurirati tako da u postavkama postoji bar jedan otisak prsta. Na Appleovoj stranici objašnjena je procedura postavljanja otiska prsta. Touch ID senzor (koji se nalazi na Home gumbu) je trenutno (siječanj 2016.) dostupan na sljedećim uređajima: iPhone 5s ili kasnije verzije, iPad Pro, iPad Air 2, or iPad mini 3 ili kasnije verzije. Prije korištenja samog Touch ID senzora treba podesiti 6-brojčanu šifru koja se koristi u iste svrhe. Touch ID se može koristiti za zaključavanje uređaja, kupnje na iTunesu i Appstoreu (umjesto regularne AppleID autentifikacije). Također, ponuđen je API za Touch ID tako da programeri mogu na intuitivan način zaštititi kritične dijelove svoje aplikacije.

Touch ID settings, izvor: Apple

Touch ID API Demo

Izrađena je jednostavna iOS aplikacija koja prikazuje korištenje Touch ID funkcionalnosti. Korišteno je razvojno okruženje za razvoj Apple aplikacija - Xcode 7.2 te programski jezik Swift. Kod je dostupan na javnom repozitoriju. Također, bitno je napomenuti da za testiranje ovakve aplikacije treba imati uređaj koji podržava ovu funkcionalnost, no na sreću, u Xcodeovom simulatoru koji podržava sve Apple uređaje postoji opcija uključivanja TouchID funkcionalnosti te simuliranja ispravnog/krivog otiska što je u videu (vidi dolje) i prikazano. Što se tiče tehničke strane, treba samo uključiti biblioteku LocalAuthentication i koristiti ponuđenu funkciju evaluatePolicy objekta tipa LAContext i dati joj argument LAPolicy.DeviceOwnerAuthenticationWithBiometrics (enumeracija) koji označava da će se koristiti lokalna autentifikacija koja koristi biometriju (potrebna je TouchID funkcionalnost). Nakon 3 neuspjela pokušaja s otiskom prsta autentifikacija nije zadovoljena i u praktičnim slučajevima korisniku će se zabraniti ulazak u kritični dio aplikacije.

Video

Touch ID demo - video

Aplikacija za kriptiranje/potpis datoteke - Crypt

Izrađena je demo iOS aplikacija (Github repo) koja će:

Korišteno je razvojno okruženje za razvoj Apple aplikacija - Xcode 7.2 te programski jezik Swift. Aplikacija koristi vanjske biblioteke: Heimdall za RSA i digitalni potpis (MIT licencirani FW) te CryptoSwift za AES kriptiranje.

Video

Video dema


Literatura

https://www.apple.com/business/docs/iOS_Security_Guide.pdf

https://www.youtube.com/watch?v=GOEPVM5OzJk

https://github.com/henrinormak/Heimdall

https://github.com/krzyzanowskim/CryptoSwift

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima