Mobil jako kritická hranice bezpečnosti v kryptoekosystému
Smartphone je dnes primárním nástrojem pro správu digitálních aktiv, a tím i nejzranitelnějším článkem řetězce. Útočné vektory se soustředí kolem tří oblastí: QR kódy (phishing, neviditelná manipulace parametrů), signer malware (škodlivé aplikace a překrývající vrstvy, které vynutí neautorizované podpisy) a root/jailbreak (obcházení bezpečnostních modelů operačního systému). Následující článek mapuje technická rizika, reálné scénáře útoků, detekční techniky a doporučená architektonická i procesní opatření pro jednotlivce, týmy i vývojáře peněženek a dApps.
Model hrozeb: co vlastně chránit a před kým
- Cíle: privátní klíče a seed fráze, schvalování on-chain oprávnění (approvals), podpisy transakcí a zpráv (EIP-191/712/Sign-In with Ethereum), session klíče (WalletConnect), biometrické zámky, přístupy k trezoru, schránka a obrazovka.
- Útočníci: škodlivé aplikace (APK/IPA), adware/spyware, přebalené peněženky, klamavé deeplinky, fyzický útočník se zařízením, síťový MITM, „legitimní“ SDK s exfiltrací dat.
- Vektory: QR kódy, deeplinky/URL schémata, Android Intents, accessibility a overlay, trojanizované klávesnice, manipulace s úložným prostorem a keychain/keystore API, root/jailbreak hooky (Frida/Magisk/Substrate).
QR kódy: pohodlí vs. neviditelné změny parametrů
QR kód je pouze transportní formát. Jeho riziko spočívá v tom, že obsah (adresa, chainID, množství, calldata, endpoint) je pro člověka nečitelný:
- Phishing QR: například kód na „claim“ airdropu odkazuje na falešnou doménu, která po deeplinku vyžádá škodlivé schválení (infinite approval).
- Podvrh příjemce/chainu: kód vypadá jako USDC na mainnetu, ale obsahuje token na jiném chainID s nízkou hodnotou nebo odkaz na kontrakt permit() s vysokým limitem.
- Stitching a pixel swap: tištěné nebo digitální bannery s vyměněným QR vedou do legitimního uživatelského rozhraní, ale s přednastaveným to=attacker.
Opatření: vždy zobrazovat před podpisem přehledné, lidsky čitelné shrnutí (adresa, částka, chain, funkce), validovat doménu přes Verified Domains/ENS, používat QR parity check (např. krátký hash parametrů vedle QR) a preferovat read-only simulaci transakce před jejím odesláním.
Deeplinky, URL schémata a Android Intents: tichá eskalace oprávnění
Mobilní dApps a peněženky komunikují přes schémata (ethereum:, wc:), Universal Links/App Links a Intents. Chybná validace může vést k „podepiš cokoliv“:
- Open redirect: dApp přesměruje na škodlivý odkaz, peněženka ho přijme bez doménové vazby.
- Parameter smuggling: legitimní deeplink, ale s vloženou
calldataměnící funkci ztransfer()naapprove(). - Cold start důvěra: peněženka po spuštění nedostatečně zobrazuje source doménu, čímž maskuje původ požadavku.
Opatření: striktně vázat podepsané žádosti na ověřenou doménu (origin binding), session klíče per-origin, explicitní potvrzení chainID a kontraktu, denylist/allowlist schémat a defenzivní parsování všech parametrů deeplinku.
Signer malware: útok na moment rozhodnutí
Signer malware přímo nekrade seed; jeho cílem je dosáhnout, aby uživatel legitimním signerem podepsal něco škodlivého:
- Overlay/tapjacking: průhledná vrstva překryje tlačítko „Detail“ a uživatel kliká na „Approve max“.
- Zneužití accessibility: malware čte obrazovku, extrahuje adresy a mění je ve schránce; dokonce simuluje dotyky.
- Keyboard exfiltration: „moderní klávesnice“ loguje seed a hesla; kombinováno s povolením screenshotů.
- Falešná peněženka: rebranding známé appky, která podstrčí podpisy Permit2/schválení s vysokým limitem.
Opatření: zakázat obrazovkové overlaye na kritických obrazovkách (FLAG_SECURE, filtrace dotyků při překrytí), detekovat accessibility služby a přepínat do „zvýšené citlivosti“ (vyžadovat dodatečné potvrzení, roztáhnout UI, zablokovat automatické potvrzení), zakázat externí klávesnice při vkládání seedu, povolit pouze lokálně generované klávesnice bez predikce.
Root/jailbreak: když sandbox přestane být sandboxem
Root (Android) a jailbreak (iOS) ruší zásadní garance: izolaci aplikací, integritu systémových API a ochranu keychain/keystore. Útočník může injektovat hooky (Frida, Magisk, Substrate), obcházet SSL pinning, číst paměť a live-patchovat aplikaci.
- Důsledky: získání přístupu k nekrytým klíčům, zachytávání obrazovky a dotyků, okamžitá manipulace se signerem.
- Detekce: kontrola přítomnosti su, známých knihoven/hooků, integrity boot chainu, Play Integrity/App Attest signálů, anomálií v procfs/entitlements.
- Rozumná reakce: buď „tvrdá stop“ (nepovolit kritické operace), nebo „degradovaný režim“ (pouze read-only, bez podpisů a zobrazování seed-recovery obrazovek).
Síť a MITM: když podepisujete to, co nevidíte
I bez rootu stačí slabý TLS model a podepisujete data, která útočník změnil v síti:
- DNS hijack / captive portal: přesměrování dApp API; změněná calldata.
- Chybějící certificate pinning: akceptace útočníkova certifikátu.
Opatření: TLS 1.3, certifikátový pinning (s bezpečným obcházením přes remote config a rotaci), ověřování chainId a rpc origin, lokální simulace transakcí bez důvěry v backend.
Approvals, blind signing a EIP-712: nebezpečí „OK, OK, OK“
Nejčastější ztráty jsou přes schválení (ERC-20/721/1155) a blind signing zpráv:
- Infinite approval: útočník získá právo převádět vaše tokeny, i když jste nic „neodeslali“.
- Neparsované EIP-712: peněženka nezobrazí čitelnou strukturu; uživatel potvrdí, čemu nerozumí.
Opatření: výchozí limited approvals, u neznámých kontraktů vyžadovat simulation diff (očekávaný stav vs. po podpisu), vysvětlit spender a rozsah, povolit rychlý revoke panel a automatické připomínky u dlouhodobě otevřených schválení.
Session klíče a WalletConnect: útoky na delegovanou důvěru
Session klíče jsou pohodlné, ale rizikové, pokud nejsou omezené:
- Přesazené session: bez omezení metod, času a chainů; útočník je zneužije pro batch approvals.
- Re-binding domény: stejná session použitá s jinou doménou (origin).
Opatření: per-origin per-chain sessions, time-boxed a scope-limited (pouze metody potřebné pro UX), vizuálně zvýraznit obnovu/„reconnect“ a vynucovat reautentizaci u rizikových volání.
Úložiště klíčů: Secure Enclave/Keystore nestačí, pokud UI selže
Hardware-backed klíče (Secure Enclave, StrongBox, TEE) chrání proti exfiltraci, nikoli proti špatnému rozhodnutí uživatele. Proto je klíčové:
- vyžadovat biometriku při každém rizikovém podpisu (nejen při odemknutí aplikace),
- izolovat import/export seedu do samostatných toků (bez screenshotů, bez schránky),
- neukládat seed v prostém textu JSON (žádné „export.txt“ do stahování),
- umožnit externí signer (hardwarová peněženka) a air-gapped QR podpis.
Detekce a hardening aplikací: od attestation po anti-hooking
- Attestation: Play Integrity/SafetyNet (Android), DeviceCheck/App Attest (iOS) – vázat funkce na integritu zařízení a verzi aplikace.
- Anti-hooking: detekce Frida/Magisk/Substrate, randomizovat symboly, anti-debug spouštět pouze u kritických akcí.
- SSL pinning + remote pin rotace: minimalizovat MITM, ale počítat s recovery cestou.
- Privacy by design: minimum logů, žádné citlivé údaje v crash reportech, FLAG_SECURE na citlivých obrazovkách.
Lidské faktory a školení: rozhodnutí v posledním kroku
- Čtení obrazovek podpisu: trénovat rozpoznávání approve/permit/setApprovalForAll vs. transfer.
- „Dvojitý kanál“: u větších částek potvrzení na jiném zařízení (hardware signer nebo desktop s verifikací adresy na displeji zařízení).
- Hygiena QR: skenovat jen z důvěryhodných zdrojů; nevěřit náhodným QR ve skupinách a reklamách.
Incident response: když se to stane
- Okamžitý revoke: odvolat schválení pro ohrožené tokeny; v případě krádeže zkusit whitehat rescue s multisigem.
- Migrace klíčů: považovat zařízení za kompromitované, přesunout aktiva do nové peněženky s fresh seed.
- Forenzní stopa: uložit tx hashe, verze aplikací, snímky deeplinků; nahlásit marketplace/mosty kvůli blacklistingu adres.
Tabulka: typ útoku – symptomy – rychlá obrana
| Útok | Symptomy | Okamžitá akce | Prevence |
|---|---|---|---|
| Phishing QR | Neočekávané approve/permit, neznámá doména | Zrušit podpis, zkontrolovat doménu/ENS | Simulace, origin binding, hash vedle QR |
| Signer overlay | Tlačítka „nepasují“, nezvyklé překrytí | Ukázat aplikaci, vypnout accessibility/overlay | FLAG_SECURE, filtrace dotyků, zvýšený režim |
| Clipboard hijack | Adresa se změní po vložení | Ověřit poslední znaky na displeji hardware signeru | Zakázat externí klávesnice a clipboard v seed flow |
| Root/jailbreak hook | Neobvyklá stabilita/lag, aplikace „neprojde“ attestation | Stop kritickým operacím, migrace zařízení | Attestation, anti-hooking, degradovaný režim |
| MITM/bez pinningu | Podpisy požadavků „mimo zvyk“, změněné RPC | Odpojit síť, použít jiné připojení, ověřit RPC | Pinning, lokální simulace, validace chainId |
Checklist pro jednotlivce (power users)
- Používejte hardwarovou peněženku nebo alespoň mobil+HW kombinaci pro větší částky.
- Vypněte overlay a nepovolujte accessibility neznámým aplikacím; nepoužívejte třetí klávesnice při práci se seedem.
- Čtěte podpisy: hledejte approve/permit/setApprovalForAll; při pochybnostech zrušte a ověřte kontrakt.
- Revidujte schválení měsíčně; používejte limitované allowance.
- QR skenujte pouze z ověřených zdrojů; preferujte manuální kontrolu adresy na displeji hardware signeru.
Checklist pro týmy/treasury
- Multisig s prahem a policy (denní limity, require-simulate-before-sign, povinné druhé zařízení).
- Oddělená zařízení: jedno pro podpisy (čisté, bez sociálních sítí), druhé pro komunikaci.
- MDM/EMM politika: zákaz root/jailbreak, povinné attestation, kontrola verzí peněženek.
- Runbook pro incidenty: okamžitý revoke, kontakty na burzy/mosty, předkonfigurovaný whitehat multisig.



























