Guia · Seguretat en apps

Una app mòbil pot guardar un secret?

Una app mòbil s'executa en un dispositiu que no controles. Se'n pot obrir el paquet, observar el trànsit i modificar el comportament. Això no converteix cada valor que hi apareix en una vulnerabilitat, però sí que vol dir que una credencial privada del servidor no hauria de quedar desada a l'app. Aquesta guia explica aquesta frontera amb Firebase, el cas que acostuma a generar més confusió.

La resposta curta: dona per fet que el client es pot inspeccionar

Quan publiques una app per a Android o iOS, cada usuari rep una còpia del codi executable i dels recursos. No rep el codi font ben ordenat, però amb eines corrents es poden recuperar cadenes de text, fitxers de configuració, adreces de serveis i una aproximació força útil a l'estructura del programa. Per buscar un testimoni d'accés o repetir una petició ni tan sols cal reconstruir tota l'app.

Ofuscar continua sent útil: elimina noms entenedors i encareix l'anàlisi. És un obstacle, no una caixa forta. Si l'app necessita llegir un valor, algú que controli el dispositiu acabarà podent-lo llegir. La regla duradora és senzilla: dissenya el client com si fos observable i deixa l'autoritat en un sistema que controlis.

Pot anar a l'appHa de quedar al servidor
ConfiguracióURL base de l'API, ID del projecte, funcions disponiblesAdreces privades i configuració administrativa
IdentitatUn testimoni de curta durada de l'usuari autenticatClaus de comptes de servei i secrets de signatura
Serveis externsUna clau pública i molt restringida, si el servei ho preveuClaus de pagaments, correu, models d'IA i API sense restriccions
Regles de negociValidació que millora la interfíciePermisos, preus, drets d'accés i decisions sobre frau
Una frontera útil: la configuració identifica l'app; les credencials del servidor autoritzen accions privilegiades.
Un mòbil connectat a un portàtil al costat d'un paquet d'aplicació inspeccionat, representat per fulls sense text i una clau metàl·lica.
El paquet instal·lat es pot inspeccionar; les credencials privilegiades no hi haurien de ser.

Què pot revelar realment una app descompilada

La primera revisió acostuma a ser poc espectacular. S'obre el paquet, se'n llisten els recursos i es busquen cadenes. Hi poden aparèixer adreces del servidor, identificadors d'analítica, la configuració de Firebase, indicadors de funcions i credencials que algú va copiar en un fitxer de compilació. Després s'observen les peticions de l'app. Si una acció privilegiada depèn només d'un valor inclòs al client, el problema no és l'habilitat del descompilador: la frontera de confiança és al lloc equivocat.

L'emmagatzematge durant l'execució exigeix la mateixa cura. Un testimoni de l'usuari autenticat ha d'arribar al dispositiu; no es tracta de fer-lo invisible per sempre. Cal donar-li poc abast i una vida curta, desar-lo amb l'emmagatzematge protegit de la plataforma, enviar-lo per TLS i fer que el servidor comprovi a cada petició què pot fer aquell usuari.

Tampoc no convé confondre dificultat amb protecció. Dividir una clau entre diverses cadenes, codificar-la o descarregar-la en arrencar pot amagar-la d'una cerca bàsica, però el valor complet ha d'existir quan es fa servir. Aquestes tècniques frenen el rastreig massiu; no converteixen un secret compartit en un de privat.

L'excepció de la clau API de Firebase i què no justifica

Si obres una app Android amb Firebase, normalment trobaràs una clau API a google-services.json; una app d'Apple porta una configuració equivalent. Molts informes la marquen com a problema, però Firebase explica que aquestes claus són públiques per disseny quan estan restringides a les seves API. Identifiquen el projecte. No autoritzen un usuari a llegir Firestore, Realtime Database o Cloud Storage.

L'accés es controla amb les Firebase Security Rules, aplicades segons la identitat de l'usuari. App Check hi afegeix un altre senyal: ajuda un servei compatible a rebutjar trànsit que no prové d'una instància verificada de la teva app. Amagar la clau de Firebase no substitueix cap d'aquests controls.

El matís importa. Al mateix projecte de Google Cloud hi pot haver altres claus de serveis que cobren o autoritzen per clau. Una clau vàlida per a mapes, pagaments, correu o una API d'IA generativa sí que pot tenir valor per a un atacant. Separa les claus, restringeix cadascuna a l'API i l'aplicació previstes, fixa quotes raonables i posa darrere del servidor qualsevol servei que requereixi un secret de debò.

La clau es limita a serveis de Firebase
Revisa Security Rules, Authentication i App Check.
La clau també habilita una altra API de Google
Separa-la i aplica restriccions d'API i d'aplicació.
L'app inclou un compte de servei o una clau privada
Revoca-la, investiga'n l'ús i mou l'operació al servidor.
Es poden llegir dades sense els permisos previstos
La vulnerabilitat és a les regles o a l'autorització del servidor.
Trobar una clau API de Firebase obre una revisió de configuració; no demostra per si sol que hi hagi una filtració de dades.

Posa la decisió de seguretat al servidor

Imagina una app de reserves que mostra hores disponibles i deixa que un client en triï una. L'app pot conèixer l'adreça pública de l'API i portar un testimoni del client autenticat. El que no hauria de fer és decidir que una hora continua lliure, posar-se el seu propi preu o cridar el proveïdor de pagaments amb la teva clau privada.

El servidor rep la petició, verifica l'usuari, comprova la disponibilitat i el preu actuals, executa l'acció privilegiada amb una credencial que no en surt i retorna només el resultat. L'exemple és fictici, però la frontera és la mateixa en un portal de clients, una app de magatzem o un producte per subscripció.

Les comprovacions al client continuen millorant l'experiència: desactivar un botó no vàlid, detectar una data mal escrita o explicar per què una cosa no està disponible. Tota comprovació que afecti la seguretat s'ha de repetir al servidor, on una app modificada no se la pugui saltar.

  1. 01 L'app sol·licita Intenció de l'usuari i un testimoni d'identitat de curta durada
  2. 02 El servidor verifica Identitat, permís, estat actual i límits
  3. 03 El servei actua La credencial privada no arriba mai al mòbil
  4. 04 Torna el resultat Només les dades que aquell usuari pot rebre
L'app demana; el servidor autentica, autoritza i executa l'acció privilegiada.

Si el servidor es connecta amb sistemes del negoci, revisa també com separar la xarxa i limitar l'accés entre equips.

Què aporten App Check, Play Integrity i App Attest

L'autorització respon si aquest usuari pot fer aquesta acció. La integritat de l'app respon una altra pregunta: sembla que la petició ve d'una instància autèntica i sense modificar? Firebase App Check es pot basar en Play Integrity a Android i en App Attest o DeviceCheck a les plataformes Apple per proporcionar aquest senyal a Firebase o al teu propi servidor.

Serveix per reduir l'abús automatitzat, els clients copiats i una part del trànsit d'apps modificades. No és una prova infal·lible. Hi pot haver dispositius no compatibles o compromesos, el servei de certificació pot fallar i un usuari maliciós pot fer servir una app legítima. Activa el control gradualment i amb observació, decideix què passa quan no està disponible i mantén l'autenticació, l'autorització, els límits i els registres habituals.

Aplica les comprovacions més estrictes a les accions amb més risc: reclamar una promoció, llançar una petició cara a un model d'IA, baixar contingut de pagament o canviar el destí d'un cobrament són millors candidats que consultar un catàleg públic.

Una revisió pràctica abans de publicar

Abans del llançament, inspecciona el mateix fitxer que instal·laran els usuaris, no només el repositori. Busca credencials i material privat al paquet compilat; enumera tots els serveis externs; confirma que cada clau és pública per disseny o està restringida al mínim; i prova les peticions importants sense passar per la interfície de l'app.

Després prova els permisos amb dos comptes normals. Un pot llegir o canviar els registres de l'altre modificant un identificador? Qualsevol pot cridar una ruta administrativa? Les regles de Firebase tenen proves de casos denegats a més dels que funcionen? Finalment, revisa registres, quotes i alertes: costa confiar en producció en un control que no pots observar.

  • No hi ha comptes de servei, secrets de signatura, claus de pagament ni claus privades al paquet.
  • Cada clau de client té responsable, finalitat, restriccions i pla de rotació.
  • El servidor torna a comprovar identitat, propietat, rols, preus i drets d'accés.
  • Les regles de Firebase deneguen per defecte i tenen proves d'accessos permesos i rebutjats.
  • La certificació de l'app complementa, però no substitueix mai, l'autenticació i l'autorització.
  • Límits, pressupostos i alertes fan visible l'abús abans que arribi la factura.

Si trobes un secret real en una app ja publicada

Tracta aquell valor com a exposat. Revoca'l o rota'l primer, fent servir el procediment de solapament segur del proveïdor si un canvi immediat interrompés producció. Revisa els accessos, la facturació i els canvis fets amb la credencial; conserva les proves necessàries per entendre quant de temps va estar exposada; i avisa qui correspongui si ha pogut afectar dades o comptes.

La solució permanent és d'arquitectura: posa la crida privilegiada darrere d'un servidor o una funció gestionada, autoritza-hi l'usuari i dona a aquell entorn només els permisos que necessita. Publicar una altra versió amb el mateix secret més dissimulat manté el mateix problema.

Per entendre com canvia aquesta revisió amb models més capaços, llegeix agents de hacking amb IA: avenços reals i límits.

Fonts i lectures

Dubtes abans de començar

De debò es pot descompilar una app Android o iOS?

Se'n pot inspeccionar el paquet, recuperar recursos i cadenes, aproximar parts del codi i observar el comportament. L'ofuscació augmenta l'esforç, però no fa que un valor utilitzat per l'app sigui secret per sempre.

Exposar una clau API de Firebase és una vulnerabilitat?

Normalment no per si sol. Les claus de client de Firebase identifiquen el projecte. Comprova que estigui restringida a les API previstes i prova Security Rules, Authentication i App Check, que són els controls que protegeixen les dades i el servidor.

Convé amagar una clau amb ofuscació o xifratge?

Només com a obstacle addicional per a una clau que ja sigui segura de distribuir. Si totes les còpies de l'app poden desxifrar una credencial compartida, un analista decidit la pot recuperar. Un secret real del servidor n'ha de quedar fora.

App Check atura qualsevol client copiat o modificat?

No. Afegeix un senyal útil sobre la integritat de l'app i redueix diverses formes d'abús, però necessita observació i alternatives, i no substitueix l'autenticació de l'usuari, l'autorització al servidor, les quotes ni els registres.

PARLEM-NE

Parlem del teu projecte.

ASSISTENT DE PROJECTES

Prepara un resum del teu projecte.

El meu assistent t’ajuda a concretar la idea i preparar un resum per a la nostra primera conversa.

Explica'm la teva idea
Assistent de projectes

Assistent de projectes

ARTUR PUIG

Quin flux de l'app et preocupa?

Explica-m'ho en una o dues frases. T'ajudo a concretar-ho i a preparar una conversa amb l'Artur.

En enviar confirmes que tens almenys 18 anys i acceptes que Google processi la teva idea. L'Artur desa el xat 14 dies i en rep un resum per Telegram. Una galeta de sessió de 30 minuts protegeix aquest xat. No hi incloguis dades sensibles. Google ↗

UNA PRIMERA CONVERSA GRATUÏTA

Reserva una consulta gratuïta.

Una videotrucada de 30 minuts per parlar de la teva idea o del problema que vols resoldre. Si una demo bàsica pot ajudar, acordem què hauria de mostrar.

Gratuïta · 30 min · Google Meet

Reserva una consulta gratuïta

ARTUR PUIG · Gratuïta · 30 min · Google Meet

Tria un dia i una hora.

Parlem del teu projecte

Escriu-me aquí.

Prefereixes escriure? Envia un resum breu i et respondré per correu.

El missatge m'arriba directament a mi. Sense butlletins ni trucades comercials.

Afegeix detalls (opcional)

Faré servir les teves dades per respondre a la consulta. El formulari utilitza la protecció antispam de Cloudflare i em fa arribar el missatge a través de Telegram.

Contacta amb mi a LinkedIn

A Barcelona · Treballo en remot