Vývojáři aplikací mohou minimalizovat podvody pomocí App Attest a DeviceCheck, dvou nástrojů od společnosti Apple. Zde je návod, jak je používat, abyste zabránili neoprávněným úpravám vaší aplikace a zabránili uživatelům v nelegitimním získávání prémiového obsahu.
Jako vývojář aplikací existuje několik způsobů, jak můžete vydělávat peníze ze svých výtvorů. Ne každý však může být ochoten platit, ale přesto chce mít přístup k některým placeným prémiovým funkcím.
Vývojáři se snaží tomuto druhu chování vyhnout. Zde zasahují Apple App Attest a DeviceCheck.
Pomocí rozhraní DeviceCheck společnosti Apple můžete zajistit, že pouze oprávnění uživatelé budou mít přístup k prémiovému obsahu a propagačním akcím.
DeviceCheck
Společnost Apple poskytuje rámec DeviceCheck, který vaší aplikaci pomůže snížit pokusy o podvodné použití funkcí prémiové aplikace.
DeviceCheck pomáhá zmírnit podvody u propagačních nabídek v aplikacích.
Pokud například vaše aplikace nabízí propagační akce nebo prémiový obsah, někteří uživatelé se mohou pokusit zneužít funkce k získání více bezplatných položek. Mohli by to udělat odinstalováním a opětovnou instalací vaší aplikace.
Rámec DeviceCheck umožňuje vaší aplikaci zjistit, zda konkrétní hardwarové zařízení již obdrželo propagační nabídku.
Tyto kontroly jsou vázány na Secure Enclave v každém zařízení Apple. Pro zajištění autorizace jsou kombinovány s účtem Apple a soukromým kryptografickým klíčem.
- Dva bity stavu zařízení uložené společností Apple spolu s časovým razítkem
- Na zařízení, na vývojáře
- Trvalé při resetování hardwarových zařízení
Dva bity uložené společností Apple spojují každý Apple vývojář do známého stavu pro všechny dříve registrované propagace na aplikaci. Spolu s časovým razítkem můžete bity použít libovolným způsobem, aby vaše aplikace určila stav propagace.
DeviceCheck sleduje zařízení pro jednotlivá zařízení a vývojáře aplikace.
Stav DeviceCheck se ukládá při resetování zařízení, pokud by bylo zařízení Apple zcela resetováno do továrního stavu.
Tyto kontroly může vaše aplikace použít ke zjištění, zda byla daná promo akce dříve použita nějakou aplikací a jakýmkoli účtem Apple na jakémkoli zařízení Apple.
Atest aplikace
App Attest je také součástí DeviceCheck.framework a umožňuje vám sledovat jakoukoli danou službu, kterou vaše aplikace obsahuje, abyste zjistili, zda je tato služba službou, kterou vaše aplikace rozpoznává.
Abyste mohli používat App Attest, budete potřebovat server nebo cloudovou službu pro příjem hardwarových tokenů ze zařízení uživatele spolu s požadavkem App Attest. Váš server pak musí tyto požadavky aplikace přeposlat na server Apple App Attest k ověření.
Pokud server Apple vrátí, že aplikace a služba jsou platné, váš server informuje odesílající zařízení, že požadavek je platný.
Vzhledem k tomu, že každý požadavek je spojen s konkrétními informacemi o hardwaru zařízení, nelze požadavky zfalšovat ani zkopírovat pro jiná zařízení.
App Attest také zabraňuje kopírování nelegitimních kopií funkcí prémiové aplikace nebo služby z jednoho zařízení do druhého.
Tři snadné kousky
App Attest poskytuje tři klíčové informace, které může vaše aplikace použít k ověření, že požadavek přišel z autentického, autorizovaného zařízení Apple:
- Originální zařízení Apple
- Autentická identita aplikace
- Spolehlivé užitečné zatížení
Kontrola originálního zařízení Apple vám umožní ověřit, že aplikace a prémiový obsah jsou ve skutečnosti spuštěny na skutečném zařízení Apple.
Autentická identita aplikace zajišťuje, že aplikace, která žádá, je vaše aplikace a že se jedná o legitimní kopii. Ten, který byl stažen z App Store.
Důvěryhodné užitečné zatížení lze zkontrolovat a potvrdit, že prémiová funkce nebo propagační obsah je autorizován, byl zakoupen a nebyl s nimi manipulován.
Pomocí těchto tří informací může vaše aplikace zajistit, aby byl obsah uživateli dostupný. To zabraňuje hackerům a útočníkům z vězení v pokusu o stažení nebo opětovné použití prémiového obsahu placeného a autorizovaného na jiném zařízení Apple.
Kontrola pravosti zařízení se provádí prozkoumáním páru bezpečných klíčů na zařízení, který používá Secure Enclave. Je kombinován s požadavkem App Attest ze zařízení, který je vygenerován pomocí platného páru klíčů.
Zabezpečené páry klíčů jsou součástí toho, co se nazývá Infrastruktura veřejného klíče (PKI), která používá šifrování k vytváření bezpečných klíčů a odesílá je přes síť.
Pomocí bezpečných klíčů a digitálních podpisů může aplikace a zařízení potvrdit, že požadavek pochází od toho, na koho si nárokuje.
PKI je extrémně bezpečný a dokonce i ty nejvýkonnější superpočítače na světě vyžadují roky, aby jej prolomily.
Když vaše aplikace odešle požadavek App Attest, může k tomu použít zabezpečené klíče, které pak může server ověřit. Každý zabezpečený klíč je pro každou instalaci jedinečný a nesynchronizuje se ani nekopíruje mezi zařízeními.
Zakódovaná kopie každé žádající aplikace ID balíčku je také zasílán s každou žádostí o ověření.
Přidání Atestu aplikace do aplikace
Chcete-li přidat App Attest do své aplikace v Xcode, musíte nejprve zahrnout DeviceCheck.framework na kartě Build Info v podokně rámců každého cíle projektu.
Abyste mohli ve své aplikaci používat App Attest, musí být aplikace spuštěna na zařízení s Secure Enclave. Proto musíte vždy předtím, než tak skutečně učiníte, zkontrolovat možnost použití App Attest ve vaší aplikaci.
Přidání Atestu aplikace do aplikace má také tři části:
- Generování klíče AppAttest
- Ověřování klíčů
- Generování a ověřování tvrzení
Chcete-li vytvořit klíč AppAttest v kódu vaší aplikace, použijte .shared
nemovitost na DCAppAttestService
objekt třídy takto:
let appAttestService = DCAppAttestService.shared
Tím se vytvoří lokální proměnná s názvem appAttestService
z .shared
vlastnost a ukládá kopii objektu sdílené služby.
Jakmile budete mít instanci .shared
vlastnost, můžete ji použít k vytvoření klíče:
Ve výše uvedeném kódu nejprve získáte sdílenou instanci souboru DCAppAttestService
třída. Pak to zkontroluješ .isSupported
vlastnost, abyste se ujistili, že AppAttest je na tomto zařízení k dispozici, a poté vygenerujte klíč s .generatekey
metoda.
Li .generatekey
vrátí chybu, vy ji zkontrolujete a zpracujete, jinak se klíč vrátí keyId
.
Jakmile budete mít klíč, můžete jej uložit pro pozdější použití – pravděpodobně v objektu, který jste definovali a vytvořili dříve.
DeviceCheck.framework také podporuje rozhraní Objective-C, pokud stále používáte tento jazyk místo Swift.
Pokud .isSupported
majetkové výnosy NO
nebo se klíč vrátí nil
ve své aplikaci nemůžete použít AppAttest.
Uvědomte si, že existují případy, kdy se kód může stále vrátit NO
pro .isSupported
. I když zařízení obsahuje Secure Enclave (obvykle pokud je kód volán z rozšíření aplikace).
Vaše aplikace musí být připravena zvládnout i tyto případy. V těchto situacích předpokládejme, že volající je nedůvěryhodný, pak navrhněte vlastní logiku kódu na základě sady pravidel pro hodnocení rizik, abyste určili, zda by měly být povoleny prémiové funkce.
Tento přístup je druhým nejlepším ověřením, když .isSupported
majetkové výnosy NO
.
Ověřte klíč
Za předpokladu, že máte platný klíč z výše uvedeného kódu, je dalším krokem ověření nebo potvrdit klíč.
Chcete-li to provést, vaše aplikace bude muset vytvořit jednorázovou výzvu serveru. Tato výzva je navržena tak, aby potvrdila klíč, který jste vygenerovali pomocí výzvy z vašeho serveru, která ověřuje klíč v kombinaci s informacemi o uživatelském účtu.
Budete také muset navrhnout kód na straně serveru, abyste to provedli pro každý výskyt atestu klíče.
Atestace klíče poskytuje další úroveň zabezpečení tím, že zabraňuje útokům typu man-in-the-middle a replay.
Prvním krokem v tomto procesu je vygenerování atestace klíče. Používáte stejný objekt serveru atestu aplikace jako výše, ale s .attestKey
metoda.
Pomocí této metody předáte originál keyID
hash klientských dat, an attestationObject
a volitelná chybová proměnná, která .attestKey
metoda bere jako vstup.
Při návratu, attestationObject
lze použít pro výzvu serveru.
Účelem .attestKey
metodou je použití soukromého klíče zařízení k vytvoření neprůhledného požadavku na atestaci hardwaru. Jeden přivázaný ke klíči a tomuto konkrétnímu zařízení.
Tato atestace hardwaru je poté odeslána na atestační server Apple k ověření hardwaru. Po ověření vrátí server Apple vaší aplikaci anonymní atestační objekt.
Pouze server společnosti Apple ví, jak ověřit zařízení na hardwarové úrovni na základě informací, které mu byly zaslány, takže je pro hackery velmi obtížné zachytit požadavek a vrátit falešně pozitivní, což umožňuje prémiové funkce.
Jakmile aplikace obdrží odpověď od společnosti Apple a ujistí se, že je platná, aplikace by pak měla odeslat odpověď spolu s veškerým vlastním nákladem na váš server ke konečnému ověření.
Tento poměrně složitý proces v kombinaci s ověřením hardwaru Apple a soukromým klíčem velmi ztěžuje komukoli hacknout vaše prémiové funkce a umožnit neautorizovaný obsah.
V dokumentaci rámce DeviceCheck jsou čtyři další části, které si budete chtít prohlédnout:
- Přístup k datům jednotlivých zařízení a jejich úpravy
- Posouzení rizika podvodu
- Stanovení integrity vaší aplikace
- Ověřování aplikací, které se připojují k vašemu serveru
Manipulační chyby
Ve výše uvedeném kódu jsme viděli, že některá rozhraní API DeviceCheck společnosti Apple vracejí volitelný chybový kód.
Vaše aplikace by měla tyto kódy zpracovat a informovat uživatele, pokud se vyskytnou nějaké chyby.
Podívejte se na dokumentaci k DCDevice
a DCError
třídy v rámci DeviceCheck.
Uživatelsky zobrazitelné chybové kódy můžete také získat z jakéhokoli rozhraní API DeviceCheck, které vrací a DCError
získáním jeho hodnoty .Code
vlastnictví. Toto je definováno jako an enum
(číslo), které lze namapovat na sadu předdefinovaných chybových kódů Apple.
Pomocí standardního Swift/C case
můžete poté namapovat výsledek chybového kódu na uživatelsky zobrazitelný řetězec, který vaše aplikace uživateli zobrazí.
V současné době je jich předdefinováno pět DCError
kódy nastavené společností Apple:
- funkceNepodporována
- neplatný vstup
- špatný klíč
- Server nedostupný
- neznámé selhání systému
featureUnsupported
znamená, že některá nebo všechna rozhraní DeviceCheck API nejsou k dispozici. invalidKey
znamená, že klíč, který jste se pokusili použít, selhal.
Při každém návratu chyby z Apple API nebo atestace klíče by vaše aplikace měla uživateli zobrazit vhodný lokalizovaný textový řetězec a informovat jej, proč to nefungovalo.
Můžete také zkontrolovat globální proměnnou DCErrorDomain
po chybách k určení domény poslední chyby.
Představte si chybové domény jako Kategorie chyby jsou uspořádány do. Pomocí DCErrorDomain
řetězec, můžete uživatelům poskytnout další užitečné informace o tom, jaký typ chyby se vyskytl.
DeviceCheck a AppAttest jsou vítanými přírůstky do vývoje aplikací Apple. Jejich používáním ve vaší aplikaci si můžete zajistit své prémiové funkce a příjmy bez přílišné práce navíc.
Zdroj: appleinsider.com