Alura > Cursos de DevOps > Cursos de Segurança > Conteúdos de Segurança > Primeiras aulas do curso Segurança Mobile: práticas e técnicas para aplicativos seguros

Segurança Mobile: práticas e técnicas para aplicativos seguros

Introdução à segurança Mobile - Apresentacao

Apresentando o instrutor e o curso

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.

Convidando para o curso de segurança em aplicações mobile

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.

Introdução à segurança Mobile - Overview sobre seguranca mobile

Introduzindo o curso de segurança em aplicações mobile

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?

Discutindo o aumento de ataques a dispositivos móveis

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.

Explorando os ecossistemas 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.

Analisando a distribuição de usuários 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.

Discutindo a cadeia de distribuição de aplicativos

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.

Abordando desafios de versões e atualizações

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.

Enfrentando desafios de segurança em dispositivos antigos

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.

Explorando riscos na cadeia de distribuição

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.

Protegendo o usuário final

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.

Concluindo com desafios e mindset de segurança mobile

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.

Introdução à segurança Mobile - Seguranca Web vs. seguranca mobile

Introduzindo o tema da aula

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.

Comparando ambientes de execução

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.

Protegendo o código e persistência de dados

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.

Desafios de segurança no ecossistema mobile

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.

Armazenamento seguro de dados sensíveis

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 é.

Problemas de atualização e observabilidade

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.

Pensando fora da caixa no desenvolvimento mobile

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.

Sobre o curso Segurança Mobile: práticas e técnicas para aplicativos seguros

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:

Aprenda Segurança acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas