"Monitoramento social". Pontuação 1: 0 a nosso favor

Introdução


O aplicativo saiu → viu um horror silencioso → começou a escrever críticas negativas → classificados pelas prateleiras → o aplicativo foi excluído (enviado para revisão).

Olá pessoal, neste artigo, quando tudo tiver passado, quero falar sobre os dois principais estágios do exposto.

Que tipo de aplicativo pode ser lido aqui .
E sobre as desculpas e o envio para revisão aqui .

Abaixo do corte, veremos com você o que vimos no início da análise do aplicativo e abordaremos todos os pontos interessantes do código. Apreciaremos o aplicativo com vazamento e não aceitaremos "ver quanto tempo o fizemos".

fundo


Tudo começou para mim no canal Telegram " IT and COPM ". Não vi imediatamente uma postagem com um link para o aplicativo no Play Market e no apk abaixo. Somente cerca de 30 minutos depois do número de postagens neste canal, decidi ler. Naquela época, os caras já haviam descompilado o aplicativo e assistiam ativamente para onde os dados foram enviados. Eles pegaram alguns pontos de extremidade, hosts, um token e começaram a publicar capturas de tela de trechos de código. Depois de aplicar os apk, eles pediram que alguém publicasse o código descompilado no GitHub - após uma hora e meia, ele foi postado . Então eu liguei ...

Parte principal


Apoio


No começo, quero dizer que dentro do aplicativo havia um token para trabalhar com a API do serviço de reconhecimento de rosto Identix.one . Esses caras trabalham para que, a princípio, eles precisem carregar o banco de dados do usuário com fotos e dados, e só então eles possam enviar fotos para reconhecimento.

O token estava no aplicativo, trabalhando com a API desse serviço por meio do cliente, e não do seu back-end. Assim, qualquer usuário, ao retirar um token, pode começar a enviar fotos de cidadãos da Federação Russa e receber informações sobre eles. Soa maravilhoso.

Tendo analisado as tarifas desse serviço, percebi que isso geralmente é para câmeras de CFTV. Para cada câmera, você precisa pagar uma boa quantia e ficou surpreso quanto os desenvolvedores de aplicativos tiveram que pagar por isso.

Entrando na seção de documentação da API , pareceu-me interessante obter uma base de usuários carregada e outras coisas. Decidi atender à solicitação e verificar o token. Felizmente ou infelizmente, o token foi desativado, o que informei imediatamente o proprietário do canal de TI e COPM via Twitter .

Comecei meu estudo com as costas, porque estava planejando encontrar algo interessante lá ( sql inj , por exemplo). Já tínhamos hosts e um link para entrar no painel de administração. Na área de administração e foi. Observando as consultas imediatamente, ficou claro que esse é algum tipo de estrutura da atmosfera. Quando vi o idiota em pedidos, como marcava qual botão foi pressionado, qual sinalizador no formulário foi definido, fiquei deprimido. Eu não queria me aprofundar nisso e fiz o máximo que eu fiz - eu dirigi o "Atmosphere Framework CVE" para o Google. Olhando rapidamente para as manchetes, não vi nada de interessante, exceto o XSS, e fui além. E então eu fui a outros pontos finais que conhecemos.

Esses pontos de extremidade eram canetas para iniciar e finalizar seu trabalho. O que caracterizaria o intervalo de tempo gasto no trabalho. Já havia um código. Abri o projeto, esfreguei no lugar certo e comecei a estudar os parâmetros. Entre eles estavam deviceEUI , idxid , latitude e longitude. Se com os dois últimos estiver imediatamente claro, então com o primeiro - não. Depois de gastar N o número de minutos para a conclusão bem-sucedida da solicitação, decidi pelo Acesso negado .

Então, para entender o objeto de estudo, decidi baixar o aplicativo pessoalmente. Fiz o download, mas não consegui mais fazer login ... Naquela época, eles haviam colocado o backup (mas ainda não sabia).

Tendo aberto o código do projeto não no GitHub , mas totalmente em idéias, comecei a procurar novos pontos de extremidade. Encontrado! Nome apropriado: / api / covid / Device ...

Comecei a pesquisar já nessas canetas. Durante muito tempo, não entendi como é a autorização, onde está o cabeçalho com um token ou outra coisa. E então me dei conta ... Ela se foi! Depois de me certificar disso, analisando o processamento e a geração de solicitações, concluí a parte de back-end e a enviei novamente ao Twitter .

Conclusão na parte de back-end : o registro ocorre enviando informações sobre o seu dispositivo (telefone). Isso inclui o endereço, número de telefone, nome etc. Imediatamente após o registro, eles exigem uma foto sua e a enviam para o seu perfil. De fato, para indicar de quem é a foto, um parâmetro adicional é indicado na solicitação - IMEI . Está localizado no campo deviceId do modelo do dispositivoque enviamos na primeira etapa do registro. Não há validação de que o IMEI pertence a você. Vale a pena enviar outra pessoa - e você conclui com êxito a solicitação, supostamente de outro dispositivo. Vale ressaltar que entre os pontos de extremidade existe / api / covid / Device / password , no entanto, o processamento da resposta é o seguinte:



Após registrar o dispositivo, a API retorna o authCode , mas, infelizmente, esse código é armazenado no campo de objeto e fica lá, acumulando poeira. Não está envolvido na formação de outros pedidos.

Assim, sem autenticação, qualquer usuário que conheça IMEIuma pessoa (ou pegando / classificando) pode enviar uma localização geográfica falsa, fazer upload de uma foto, enviar status sobre o início do dia útil e assim por diante.

Eu adoraria brincar com uma implementação tão divertida, mas, infelizmente, tudo foi desligado.

Desde então, comecei a me deparar com o código e descrever o que vejo no meu canal Telegram . Acabou sendo um absurdo completo, sem qualquer conexão entre os parágrafos, mas após este post, encontrei forças (já eram 2-3 noites) para reescrevê-lo e torná-lo legível.

Análise de aplicativo


É importante notar imediatamente que o aplicativo nesse momento não estava mais funcionando. Portanto, eu não tinha ideia de que poderia ser visual. Ele estudou tudo cegamente e por código, o que estava longe de tudo! Todos sabemos o que é descompilação, mas o que aconteceu foi suficiente para tirar certas conclusões.

O aplicativo armazena informações sobre o seu dispositivo, nome, número de telefone, endereço. Existem campos obscuros, como comentários . E há outros interessantes - um médico.

Para identificar faces, o serviço identix é usado (o mesmo parâmetro da parte traseira). Permite retornar a idade, sexo e outras informações da foto carregada. Existe um identificador exclusivo de uma pessoa que é usada dentro do aplicativo.

Dois tipos de dispositivos são usados ​​para a navegação: bluetooth, wifi. Ambos têm um nome e RSSI (qualidade do sinal, falando sobre a distância a um ponto).

Sua geolocalização é obtida graças ao módulo Google e GPS .

Entre os vários tipos de informações armazenadas, há um local. Surpreendentemente, ele tem um grande número de campos. Incluindo o nível da bateria, o número de etapas (apesar do modelo separado para isso) e muito mais.

Nas configurações, você pode definir o intervalo de telemetria. Coleta e envio. Não tenho certeza sobre a capacidade de alterar esses parâmetros.

Existem três tipos diferentes de identificadores exclusivos:

  • Dispositivos IMEI.
  • ID do dispositivo (não estudado).
  • Endereço MAC de WiFi.

Assim, o que escrevi acima sobre a transferência e seleção de IMEI é uma simplificação para a compreensão. Este é realmente um dos três identificadores.

Seu ID depende da versão do SDK que você possui . Simplificando, é possível obter um ou outro tipo de identificador exclusivo. Os desenvolvedores de aplicativos estão confusos e não podem convergir em um nome.

O único lugar em que coloquei o código no artigo.

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

E no getImei, aqui está um if:

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

O aplicativo também pode obter um número de cartão SIM, mas apenas em casos complicados. Existe uma oportunidade - será.

Um código QR é gerado com o ID do texto , que pode ser de três tipos. Este tópico, assim como o serviço de reconhecimento de rosto, foi debatido por qualquer pessoa. Eu não foco .

Um recurso interessante do aplicativo são as notificações por push para você no dispositivo. Os desenvolvedores podem enviar comandos remotamente e eles serão executados por você. Uma das equipes é chamada OPEN_CAMERA . Outro - SERVER_ADDRESS_KEY - aqui, provavelmente, por analogia com o Telegram . Quando foi bloqueado, enviou novos IPs para todos os usuáriosendereços e continuamos a usar o messenger. Além disso, eles podem definir remotamente o intervalo para envio e coleta de telemetria. Aqui sobre possíveis notificações push .

É claro que você ainda pode falar sobre o avatar, como ele pode ser girado, como eles o salvam localmente, como o normalizam. Você pode falar sobre o desejo de fazer uma atualização automática do aplicativo, mas não teve tempo, sobre a capacidade de acessar o discador por número, mantendo uma lista de contatos (o bloco de endereços mais primitivo é o nome e o número), sobre o fato de que eles interagem com o número de pontos de arquivos ativos ao redor mas está tudo entediado.

Conclusão


Você sabe, eu não vou dizer o quão ruim eles são, não vou dizer o quão bom eles são. Todo mundo fará uma conclusão por si mesmo. Falhas críticas, vulnerabilidades e coisas de espionagem que descrevi para você. Só posso dizer que, apesar dos prazos, em nenhum caso o desenvolvimento de um aplicativo obviamente vulnerável deve ser permitido.

Não posso deixar de notar a coesão do povo. Todo mundo começou a compartilhar suas descobertas, ser ativo e quem não podia fazer isso - coloque 1 nas revisões. 4207 unidades foram registradas por mim o máximo possível e a ausência (na minha opinião) de outras classificações.

A mesma mensagem ilusória com rascunhos e a conclusão original sobre o suporte estão no meu canal do Telegram , e estão entre os links no perfil.

A última coisa que quero mostrar é que isso é uma função de "ilegal" obter o endereço MAC do código e o mesmo no stackoverflow (obrigado ntoskrnl):

E como sempre, obrigado por ler até aqui!

PS Qualquer um pode cometer um erro e eu não sou exceção. Talvez algo estivesse errado, talvez não entendesse bem a implementação. Agora eles vão dizer que durante o registro o IP é lembrado e é impossível executar solicitações para outra pessoa, hein ?! E eu responderei que não faz sentido, e o próprio proprietário perderá o acesso ao se reconectar à rede móvel ... Em geral, você entende, os comentários estão abertos!

All Articles