Olá! Meu nome é Renan, sou analista de cibersegurança, pen tester e instrutor na Alura.
Audiodescrição: Renan é um homem de pele branca, com cabelos escuros e uma mecha colorida. Ele veste uma camisa preta e está gravando de seu escritório, com uma iluminação neon que combina roxo e azul ao fundo.
Gostaríamos de convidá-los a participar do nosso curso de segurança em aplicações mobile.
Este curso foi desenvolvido para introduzir o Ecosystem Mobile e compreender como falamos sobre a implementação de segurança no ciclo de desenvolvimento. Também abordaremos as ações tomadas por atacantes para explorar vulnerabilidades em aplicações Android e iOS. Vamos entender o que é uma análise estática e dinâmica, trabalhar com diversas ferramentas para explorar essas lacunas de segurança e avaliar a segurança de outras aplicações. Nossa proposta é introduzir o mundo mobile no contexto da segurança da informação. Esperamos que tenha se interessado e nos vemos no curso.
Olá, pessoal. Hoje, vamos iniciar nosso curso de segurança em aplicações mobile. Gostaríamos de começar com uma provocação: imagine que desenvolvemos um aplicativo e pretendemos publicá-lo tanto na Google Play quanto na Apple Store. Surge a dúvida: como garantimos a segurança e a integridade desse aplicativo em ambos os ambientes, Android e iOS? E, além do sistema operacional, como asseguramos a segurança para todos os usuários finais? Parece um escopo amplo, e muitas dúvidas podem surgir. É exatamente sobre isso que vamos falar, tentando desvendar os principais desafios que encontramos nesse contexto.
Vamos começar com um tópico relevante: por que a segurança mobile importa? Trouxemos dois dados para iniciar essa discussão. Primeiramente, aplicativos mobile armazenam e acessam dados sensíveis. Em segundo lugar, o número de ataques a dispositivos móveis está crescendo. Quando falamos de mobile, referimo-nos a um dispositivo pessoal que pode armazenar dados de mensagens, momentos, histórias, fotos, vídeos e, em alguns casos, recursos financeiros, como em aplicativos bancários. Portanto, são muitos dados sensíveis que trafegam por esses dispositivos. Como garantimos a integridade e a segurança desses dados?
Além disso, o número de ataques a dispositivos móveis está aumentando. Os atacantes perceberam que, além de lucrativo, há um vasto espaço para explorar nesse escopo, pois a segurança muitas vezes é negligenciada no desenvolvimento. Trouxemos um dado de uma pesquisa recente da Kaspersky, que mostra que, de 2020 a 2024, os ataques a dispositivos móveis na América Latina cresceram cerca de 70%. Esses ataques não se limitam a explorar um tipo específico de exploit ou a realizar ataques físicos; abrangem explorações de aplicativos, malwares, campanhas, entre outros.
A segurança está deixando de ser apenas uma discussão para se tornar um conceito de Secure by Design, ou seja, trabalhar com segurança desde o início, ao pensar em um protótipo ou em um novo aplicativo. Vamos falar sobre os principais ecossistemas mobile hoje: Android e iOS. Embora existam outros sistemas operacionais, como o Huawei, focaremos nos mais populares: Android e iOS.
O Android é um sistema open source mantido pela Google, com diversos pesquisadores que o mantêm atualizado. Por ser um sistema aberto, há uma variedade de pesquisas em diferentes SDKs e ambientes de desenvolvimento. Temos a linguagem Kotlin, além da possibilidade de usar Java, e vários frameworks moldáveis para o desenvolvimento Android. Contudo, essa flexibilidade também traz brechas de segurança, com SDKs lançados sem maturidade de segurança satisfatória.
Por outro lado, o iOS é restrito à Apple, mas essa restrição atrai pesquisadores curiosos que buscam identificar vulnerabilidades. Embora muitos considerem o sistema da Apple mais seguro, ele também possui vulnerabilidades. Vamos explorar essas diferenças e também discutir sobre o desenvolvimento com Swift no iOS, abordando como o código é compilado e executado no dispositivo do usuário, destacando as diferenças entre Android e iOS.
Além disso, trouxemos um dado de pesquisa da Demonstrate sobre a quantidade de usuários de dispositivos Android e iOS. Atualmente, cerca de 71,85% das pessoas usam Android, enquanto 27,6% usam iOS. Isso mostra que o Android domina o mercado, o que é importante ao falarmos de metodologias e ferramentas de segurança. Muitas vezes, ao desenvolver para ambos os sistemas, a segurança no iOS é negligenciada devido ao menor público, priorizando a proteção no Android.
Por fim, discutiremos a cadeia de distribuição, um tópico crucial para entender como os aplicativos são distribuídos e mantidos. Os aplicativos são distribuídos por lojas oficiais e canais diretos, e as atualizações podem ser lentas ou ignoradas pelos usuários.
Temos aqui uma informação e um problema significativo: os aplicativos. A Google Play é o principal mercado para lançar um aplicativo para Android, enquanto a Apple Store é o principal mercado para lançar um aplicativo para iOS. Assim, temos os canais de distribuição em lojas oficiais e um grande desafio, que é a atualização e manutenção de um aplicativo.
Este é um tópico importante, especialmente quando falamos sobre as versões de dispositivos, pois isso está intimamente ligado à manutenção de um aplicativo. Lançar e manter as versões do aplicativo e trabalhar com a versão do dispositivo são tarefas interligadas, já que existem diferenças entre a versão do dispositivo e a versão do aplicativo. Muitos aparelhos utilizam sistemas desatualizados, e a falta de patches amplia a janela de vulnerabilidades.
Um exemplo prático é o jailbreaking, que é o processo de alcançar o superusuário dentro de um dispositivo, principalmente no iOS, ou o rooting no Android, que também permite se tornar superusuário. Esse processo tende a ser mais fácil devido a vulnerabilidades conhecidas em versões mais antigas desses sistemas. Quando um atacante deseja explorar o iOS, ele pode escolher versões como iOS 12.3 ou iOS 15, que possuem vulnerabilidades conhecidas. Assim, é possível explorar essas vulnerabilidades para alcançar o jailbreaking e realizar ações que normalmente não seriam permitidas no dispositivo. O mesmo ocorre com o Android, onde versões mais antigas tendem a ter mais vulnerabilidades e problemas de segurança. Às vezes, é possível explorar um componente inseguro em uma versão antiga do Android utilizando uma API específica, que em versões mais recentes não seria permitida por ser maliciosa.
No mercado, ao lançar um aplicativo, muitas vezes, devido ao modelo de negócio, não é possível proibir um usuário com um telefone mais antigo de usar o aplicativo, pois esse público pode ser o maior dentro do aplicativo. Existe um desafio constante em proteger o usuário de falhas existentes na versão do sistema, entender o público-alvo, as versões do dispositivo, manter o aplicativo atualizado e ter estratégias para impedir que o usuário sofra exploração ou comprometimento. As versões do dispositivo e das aplicações, os patches e as atualizações andam lado a lado. Sempre existe uma janela de vulnerabilidades em dispositivos mais antigos e em aplicativos que não recebem muitas atualizações, tornando-os vulneráveis devido a problemas em SDKs ou bibliotecas de terceiros.
Existem várias camadas e pontos de entrada que um atacante pode explorar no scope mobile. Além disso, há riscos relacionados à cadeia de distribuição, como o sideloading, que é o principal risco. O sideloading ocorre quando se instala um aplicativo fora de um meio oficial, como instalar um APK diretamente no Android sem passar pela Google Play ou instalar um aplicativo no iOS fora da Apple Store. Esse processo é frequentemente utilizado por fraudadores e campanhas de malware para comprometer dispositivos e extrair dados. O comprometimento de lojas, como a Apple Store ou a Google Play, é mais complicado, mas existem aplicativos fraudulentos e com malware que conseguem ser lançados. A Google Play tem adotado um controle mais rigoroso para o lançamento de aplicativos, mas ainda é possível lançar um aplicativo malicioso em um canal oficial, comprometendo vários dispositivos.
Um desafio constante é proteger o usuário como camada final. Aplicativos maliciosos podem ser aceitos pelo usuário sem que ele entenda as permissões ou para que servem. Quando falamos sobre análise estática, entenderemos mais sobre o problema de aplicativos muito permissivos. O usuário é sempre o elo mais fraco da aplicação, e muitas vulnerabilidades no scope mobile não afetam o aplicativo, mas sim o usuário final. Isso exige maior atenção e complexidade de entendimento para compreender como uma exploração pode afetar um usuário.
Por exemplo, uma vulnerabilidade de um componente exportável ou um insecure login pode expor informações sensíveis do usuário. Logs acessíveis por qualquer aplicativo no dispositivo podem registrar credenciais ou tokens de forma indevida, comprometendo a sessão do usuário para um atacante. Isso não afeta o aplicativo diretamente, mas afeta o usuário e a integridade da comunicação.
O scope mobile apresenta diversos desafios relacionados a versões, sistemas operacionais, modelos de negócio e cadeias de distribuição. Vamos explorar esses aspectos ao longo do curso. O scope mobile exige um pensamento diferente, e vamos construir esse mindset ao longo do curso para entender como criar aplicações mais seguras e trabalhar com sistemas de aplicações de maneira mais eficiente.
Olá, pessoal. Hoje, vamos abordar mais um tema do nosso curso de Segurança em Aplicações Mobile. Neste vídeo, vamos explorar as principais diferenças entre o ecossistema web e o ecossistema mobile.
Uma observação importante é que, no ecossistema web, o código é executado no servidor, enquanto no ecossistema mobile, o código roda no dispositivo do usuário. Vamos entender mais sobre essas diferenças ao longo da aula de hoje.
O principal ponto que vamos discutir é o ambiente de execução. No ecossistema web, geralmente lidamos com uma aplicação front-end que consome um back-end desenvolvido em linguagens como Node.js, PHP, Java ou .NET. São várias linguagens e frameworks. Já no ecossistema mobile, o código e a lógica são executados no dispositivo do usuário, podendo se comunicar com o back-end. Isso apresenta um desafio, pois, como pesquisadores ou atacantes, podemos instrumentar o aplicativo para entender como ele funciona no dispositivo do cliente, o que ele expõe e como lida com informações sensíveis.
Outro ponto importante é a exposição do código. No ecossistema web, o atacante não tem acesso ao código fonte do back-end. Ele precisa supor e utilizar abordagens como fuzzing ativo para identificar vulnerabilidades. No ecossistema mobile, é possível decompilar o pacote do aplicativo, seja um .ipa para iOS ou um .apk para Android, e entender sua lógica, o framework utilizado, a linguagem, como se comunica com recursos e armazena dados. Isso gera preocupações com a exposição do código fonte.
Para proteger o código, utilizamos técnicas como ofuscação e minificação, que dificultam a leitura após a compilação. Essas preocupações são específicas do ecossistema mobile e diferem do ecossistema web.
Além disso, há a questão da persistência de dados. No ambiente web, utilizamos recursos como local storage e cookies, que são mecanismos eficientes para persistência de dados no navegador do usuário, com certo controle de segurança. A exploração é mínima, geralmente limitada a filtrações via InfoStealer ou cross-site scripting.
No ecossistema mobile, lidamos com a persistência de dados sensíveis gerados pelo aplicativo e dados do próprio aplicativo. Por exemplo, ao utilizar comunicação segura com TLS, o certificado precisa ser acessado pelo aplicativo e, portanto, deve ser armazenado localmente no dispositivo.
Essas são algumas das diferenças entre os ecossistemas web e mobile que discutiremos na aula de hoje.
Quando falamos de uma secret (segredo), de uma chave que será utilizada para se comunicar com algum recurso, ela precisa estar dentro do dispositivo. Discutimos também sobre persistência de dados, especialmente de maneira segura. Quando mencionamos a sessão do usuário, ou um cookie na web, esse cookie pode ser acessado e resgatado pelo navegador. O local storage pode ser acessado por algum tipo de back-end ou front-end. No ecossistema mobile, ao guardar um token de sessão de usuário dentro do dispositivo, ele pode ser acessado e comprometido. Às vezes, guardamos credenciais de um usuário, um refresh token, ou uma secret (chave de API). São diversos tipos de dados sensíveis que armazenamos no dispositivo do usuário, e isso nos leva a falar sobre ambiente de execução e exposição.
No contexto mobile, muitas coisas ficam expostas ao lançar um aplicativo, o que se torna um grande desafio para administrar de maneira segura. Quando falamos de persistência de dados, o foco é em como persistir dados de maneira segura. Muitas vulnerabilidades estão associadas ao armazenamento inseguro de dados. Persistir dados, por si só, não é uma vulnerabilidade, mas armazená-los de maneira insegura é.
Além disso, temos o tempo de atualização como um problema diferencial, especialmente quando falamos sobre recursos. A comunicação com a API pode se tornar intermitente. No contexto de observabilidade, ao encontrar problemas ou quando alguém explora um recurso dentro do aplicativo, é importante identificar onde pode estar o problema ou onde um atacante pode explorar uma linha do fluxo para encontrar uma brecha.
Um exemplo pessoal de falha encontrada em um aplicativo envolvia uma proteção contra execução em dispositivos emulados ou com acesso de superusuário. O aplicativo chamava uma API do Android que forçava o desligamento do dispositivo. Ao subverter o comportamento da API nativa de desligamento, o aplicativo ignorava completamente a proteção e não realizava validações adicionais. Isso permitia interagir com o aplicativo e interceptar dados.
O ecossistema mobile exige pensar de forma diferente, fora da caixa. É necessário mapear o aplicativo, identificar a ordem das rotas, como consome recursos, se esses recursos são alocados de maneira segura e como funcionam na memória. No contexto de observabilidade e disponibilidade de um aplicativo, se ele demora para carregar, é importante verificar se a validação está tornando a execução menos eficiente.
Devemos sempre trabalhar com o objetivo de entender como tudo funciona em detalhes e como podemos tornar o desenvolvimento de aplicações mais eficiente. É fundamental envolver segurança em todo o processo de desenvolvimento desde o início.
O curso Segurança Mobile: práticas e técnicas para aplicativos seguros possui 397 minutos de vídeos, em um total de 70 atividades. Gostou? Conheça nossos outros cursos de Segurança em DevOps, ou leia nossos artigos de DevOps.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
2 anos de Alura
Matricule-se no plano PLUS 24 e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Mobile, Programação, Front-end, DevOps, UX & Design, Marketing Digital, Data Science, Inovação & Gestão, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
2 anos de Alura
Todos os benefícios do PLUS 24 e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Para estudantes ultra comprometidos atingirem seu objetivo mais rápido.
2 anos de Alura
Todos os benefícios do PRO 24 e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria individual personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.