"Surveillance sociale." Score 1: 0 en notre faveur

introduction


L'application est sortie → a vu une horreur tranquille → a commencé à écrire des critiques négatives → triées par les étagères → l'application a été supprimée (envoyée pour révision).

Bonjour à tous, dans cet article, quand tout est passé, je veux vous parler des deux étapes clés de ce qui précède.

Quel type d' application peut être lu ici .
Et sur les excuses et l'envoi de révision ici .

Sous la coupe, nous allons voir avec vous ce que nous avons vu au tout début de l'analyse de l'application et passer en revue tous les points intéressants du code. Nous apprécierons l'application qui fuit et n'accepterons pas "regardez combien de temps nous l'avons fait".

Contexte


Tout a commencé pour moi dans la chaîne Telegram « IT and COPM ». Je n'ai pas vu immédiatement un message avec un lien vers l'application dans le Play Market et les apk ci - dessous. Ce n'est qu'après environ 30 minutes, à partir du nombre de messages dans cette chaîne, que j'ai décidé de lire. À cette époque, les gars avaient déjà décompilé l'application et regardé activement où les données étaient envoyées. Ils ont retiré certains points de terminaison, des hôtes, un jeton, ont commencé à publier des captures d'écran de morceaux de code. Après avoir appliqué des apk, ils ont demandé à quelqu'un de publier le code décompilé sur GitHub - après une heure et demie, il a été publié . Ensuite, je me suis connecté ...

Partie principale


Support


Au tout début, je tiens à dire qu'à l'intérieur de l'application, il y avait un jeton pour travailler avec l' API du service de reconnaissance faciale Identix.one . Ces gars-là travaillent de sorte qu'au début, ils doivent charger la base de données des utilisateurs avec des photos et des données, et alors seulement ils peuvent envoyer des photos pour la reconnaissance.

Le jeton était dans l'application, fonctionnant avec l' API de ce service via le client, et non votre backend. Ainsi, tout utilisateur, après avoir arraché un jeton, pourrait commencer à télécharger des photos de citoyens de la Fédération de Russie et recevoir des informations à leur sujet. Cela semble merveilleux.

Après avoir regardé les tarifs de ce service, j'ai réalisé que c'était généralement pour les caméras de vidéosurveillance. Pour chaque caméra, vous devez payer un bon montant et vous avez été surpris de voir combien les développeurs d'applications devaient payer pour cela.

En entrant dans la section de documentation de l' API , il m'a semblé intéressant d'obtenir une base d'utilisateurs chargée et d'autres choses. J'ai donc décidé de répondre à la demande et de vérifier le jeton. Heureusement ou malheureusement, le token a été désactivé, ce que j'ai immédiatement informé le propriétaire de la chaîne informatique et COPM via Twitter .

J'ai commencé mon étude avec un dos, car je comptais y trouver quelque chose d'intéressant ( sql inj , par exemple). Nous avions déjà des hôtes et un lien pour entrer dans le panneau d'administration. Dans la zone d'administration et est allé. En regardant les requêtes immédiatement, il est devenu clair qu'il s'agit d'une sorte de cadre de l' atmosphère. Quand j'ai vu l'âne sauvage dans les demandes, comment il marque quel bouton a été enfoncé, quel drapeau dans le formulaire a été défini, j'ai été déprimé. Je ne voulais pas me plonger dans ce sujet et j'ai fait le maximum que j'ai fait - j'ai introduit "Atmosphere Framework CVE" dans Google. En regardant rapidement les gros titres, je n'ai rien vu d'intéressant à part XSS et je suis allé plus loin. Et puis je suis allé à d'autres points finaux que nous connaissons.

Ces points limites étaient des stylos pour commencer et terminer votre travail. Ce qui caractériserait la plage de temps passé au travail. Il y avait déjà un code. J'ai ouvert le projet, nettoyé au bon endroit et commencé à étudier les paramètres. Parmi eux se trouvaient deviceEUI , idxid , latitude et longitude. Si avec les deux derniers c'est immédiatement clair, alors avec le premier - non. Ayant passé N le nombre de minutes pour la réussite de la demande, je me suis installé sur Accès refusé .

Ensuite, pour comprendre l'objet d'étude, j'ai décidé de télécharger moi-même l'application. Je l'ai téléchargé, mais je ne pouvais plus me connecter ... À ce moment-là, ils avaient mis la sauvegarde (mais je ne le savais pas encore).

Après avoir ouvert le code du projet non pas sur GitHub , mais entièrement en idées, j'ai commencé à chercher de nouveaux points de terminaison. A trouvé! Nom approprié: / api / covid / Device ...

J'ai commencé à rechercher déjà dans ces stylos. Pendant longtemps, je n'ai pas compris comment va l'autorisation, où est l'en-tête avec un jeton ou autre chose. Et puis ça m'est venu à l'esprit ... Elle est partie! Après m'être assuré de cela, après avoir analysé le traitement et la génération des demandes, j'ai fait ma conclusion sur la partie backend et l'ai renvoyée à Twitter .

Conclusion sur la partie backend : l'inscription se fait par l'envoi d'informations sur votre appareil (téléphone). Cela comprend l'adresse, le numéro de téléphone, le nom, etc. Immédiatement après l'inscription, ils ont besoin d'une photo de votre part et de la télécharger sur votre profil. En fait, afin d'indiquer de quelle photo il s'agit, un paramètre supplémentaire est indiqué dans la demande - IMEI . Il se trouve dans le champ deviceId du modèle de périphériqueque nous avons envoyé dans la première étape de l'inscription. Il n'y a aucune validation que l' IMEI vous appartient. Cela vaut la peine d'envoyer quelqu'un d'autre - et vous avez réussi à répondre à la demande, prétendument à partir d'un autre appareil. Il est à noter que parmi les points de terminaison, il y a / api / covid / Device / password , cependant, le traitement de la réponse est le suivant:



Après l'enregistrement de l'appareil, l' API renvoie authCode , mais, malheureusement, ce code est stocké dans le champ objet et se trouve là, ramassant de la poussière. Pas impliqué dans la formation d'autres demandes.

Ainsi, sans avoir d'authentification, tout utilisateur connaissant IMEIune personne (ou la ramasser / la trier) pourrait envoyer une fausse géolocalisation, télécharger une photo, envoyer un état vers le début de la journée de travail, etc.

J'adorerais jouer avec une implémentation aussi amusante, mais, hélas, tout était éteint.

Depuis ce temps, j'ai commencé à exécuter complètement le code et à décrire ce que je vois dans ma chaîne Telegram . Il s'est avéré un non-sens complet sans aucun lien entre les paragraphes, mais après ce post, j'ai trouvé la force (c'était déjà 2-3 nuits) de le réécrire et de le rendre lisible.

Analyse de l'application


Il convient de noter immédiatement que l'application à ce moment-là ne fonctionnait plus. Par conséquent, je n'avais aucune idée que cela pouvait être visuel. Il a tout étudié à l'aveugle et par code, ce qui était loin d'être tout! Nous savons tous ce qu'est la décompilation, mais ce qui s'est passé a suffi pour tirer certaines conclusions.

L'application stocke des informations sur votre appareil, nom, numéro de téléphone, adresse. Il existe des champs obscurs, tels que des commentaires . Et il y en a des intéressants - un médecin.

Pour identifier les visages, le service identix est utilisé (le même paramètre de la partie arrière). Il vous permet de renvoyer l'âge, le sexe et d'autres informations de la photo téléchargée. Il existe un identifiant unique d'une personne qui est utilisé dans l'application.

Deux types d'appareils sont utilisés pour la navigation: bluetooth, wifi. Les deux ont un nom et RSSI (qualité du signal, parler de la distance à un point).

Votre géolocalisation se fait grâce à Google et au module GPS .

Parmi les différents types d'informations stockées, il existe un emplacement. Étonnamment, il possède un grand nombre de domaines. Y compris le niveau de la batterie, le nombre d'étapes (malgré le modèle séparé pour cela) et plus encore.

Dans les paramètres, vous pouvez définir l'intervalle de télémétrie. Collecte et expédition. Pas sûr de la possibilité de modifier ces paramètres.

Il existe trois types différents d'identifiants uniques:

  • Appareils IMEI.
  • ID de l'appareil (non étudié).
  • Adresse MAC du WiFi.

Ainsi, ce que j'ai écrit ci-dessus sur le transfert et la sélection d' IMEI est une simplification , pour la compréhension. Il s'agit en fait de l'un des trois identifiants.

Votre ID dépend de la version du SDK dont vous disposez . Autrement dit, est-il possible d'obtenir l'un ou l'autre type d'identifiant unique. Les développeurs d'applications eux-mêmes sont confus en eux et ne peuvent pas converger en un seul nom.

Le seul endroit où j'ai mis le code dans l'article.

if (Build.VERSION.SDK_INT >= 29) {
    return getMac(context);
}
return getImei(context);

Et à l'intérieur de getImei, voici un if:

if (Build.VERSION.SDK_INT >= 26) {
    str = telephonyManager.getImei();
} else {
    str = telephonyManager.getDeviceId();
}

L'application peut également obtenir un numéro de carte SIM, mais uniquement dans les cas délicats. Il y a une opportunité - elle le sera.

Un code QR est généré avec l' ID de texte , qui peut être de trois types. Ce sujet, ainsi que le service de reconnaissance faciale, a été débattu par tous. Je ne me concentre pas .

Une fonctionnalité intéressante de l'application est la notification push sur l'appareil. Les développeurs peuvent envoyer des commandes à distance et elles seront exécutées par vous. L'une des équipes s'appelle OPEN_CAMERA . Un autre - SERVER_ADDRESS_KEY - ici, très probablement, par analogie avec Telegram . Lorsqu'il a été bloqué, il a envoyé de nouvelles adresses IP à tous les utilisateursadresses et nous avons continué à utiliser le messager. De plus, ils peuvent définir à distance l'intervalle d'envoi et de collecte de la télémétrie. Ici sur les notifications push possibles .

Vous pouvez bien sûr encore parler de l'avatar, comment il peut être tourné, comment ils l'enregistrent localement, comment ils le normalisent. Vous pouvez parler du désir de faire une mise à jour automatique de l'application, mais vous n'avez pas eu le temps, de pouvoir accéder au numéroteur par numéro, de maintenir une liste de contacts (le carnet d'adresses le plus primitif est le nom et le numéro), du fait qu'ils interagissent avec le nombre de points de fichier actifs autour mais tout s'ennuie.

Conclusion


Vous savez, je ne dirai pas à quel point ils sont mauvais, je ne dirai pas à quel point ils sont bons. Chacun tirera une conclusion pour lui-même. Failles critiques, vulnérabilités et choses d'espionnage que je vous ai décrites. Je peux seulement dire qu'en dépit des délais, le développement d'une application manifestement vulnérable ne doit en aucun cas être autorisé.

Je ne peux que constater la cohésion du peuple. Tout le monde a commencé à partager ses conclusions, à être actif et qui ne pouvait pas le faire - mettez 1 dans les critiques. 4207 unités ont été enregistrées par mes soins autant que possible et l'absence (à mon avis) d'autres notations.

Le même message délirant avec des brouillons et la conclusion originale sur le support sont dans ma chaîne Telegram , et c'est parmi les liens dans le profil.

La dernière chose que je veux vous montrer, c'est qu'il s'agit d'une fonction «illégale» d'obtenir l' adresse MAC à partir de leur code et la même sur stackoverflow (merci ntoskrnl):

Et comme toujours, merci d'avoir lu jusqu'ici!

PS Tout le monde peut se tromper et je ne fais pas exception. Peut-être que quelque chose n'allait pas, peut-être que je n'avais pas bien compris la mise en œuvre. Maintenant, ils viendront et diront que lors de l'enregistrement, la propriété intellectuelle est mémorisée et qu'il est impossible d'exécuter des demandes à une autre personne, hein?! Et je répondrai que c'est un non-sens et que le propriétaire lui-même perdra l'accès lors de la reconnexion au réseau mobile ... En général, vous comprenez, les commentaires sont ouverts!

All Articles