Conheça o que há de novo na segurança no Android…
... com a chegada do Android 4.4.
Com a chegada do Android 4.4 KitKat muitas novidades chegaram. Nova interface, novas funcionalidades, simplificação para os programadores e também a camada de segurança foi bem reforçada.
Já tínhamos falado há uns tempos que o SELinux vinha para dificultar quem quisesse fazer ROOT ou que algum malware se tentasse espalhar pelo sistema. Mas a Google não achou este mecanismo suficiente e incluiu um novo e poderoso sistema de segurança.
O SELinux foi apresentado no Android 4.3 JellyBean de forma a reforçar a segurança do sistema, controlando as acções das aplicações que instalamos. Com a chegada do Android 4.4, a Google introduziu uma nova funcionalidade chamada de DM-Verity (device-mapper-verity).
O que é e como funciona o DM-Verity?
Trata-se de uma funcionalidade a nível do kernel que permite uma verificação transparente da integridade do sistema de ficheiros dos equipamentos. O DM-Verity ajuda a prevenir a modificação de ficheiros e da instalação de rootkits persistentes (Ex.: busybox) que podem comprometer a segurança do equipamento. Desta forma, sempre que for detectada uma alteração, este mecanismo deverá restaurar o sistema de ficheiros para o original, o que quer dizer que se fizerem ROOT, ficarão logo a seguir sem ele.
Esta funcionalidade pode ser aproveitada pelos fabricantes onde podem ser incluídos registos de tentativas de root, do mesmo género do Samsung Knox.
Cada bloco de armazenamento do dispositivo (um bloco é simplesmente uma unidade de endereço de armazenamento, normalmente de 4KB de tamanho) é verificado pelo dm-verity, aplicando um hash SHA-256. Ao longo das páginas, é gerada uma árvore de hashs e basta que o que esteja no topo da árvore (conhecido como o hash raiz) ser confiável para que todo o sistema de arquivos o ser também. Se qualquer um dos blocos for modificado, automaticamente o hash raiz será também alterado, o que irá quebrar a sequência e assim accionar o dm-verity.
A partição boot contém uma chave pública. Será aqui que, possivelmente, os OEMs irão verificar esta chave através do bootloader ou a partir de alguma funcionalidade do CPU. Esta chave pública é usada para assegurar a assinatura do hash no sistema de ficheiros e verificar se é válida e/ou que não foi modificada.
De forma a reduzir o tempo necessário para verificar o sistema de ficheiros, o DM-Verity foi implementado de forma a que os blocos sejam apenas verificados quando são utilizados e são verificados em paralelo com a operação de leitura normal (para eliminar essencialmente qualquer latência no acesso ao armazenamento). Se forem detectadas alterações na partição do sistema, é gerado um erro de leitura.
Todas as aplicações que necessitarem de acesso total ao armazenamento verão essa funcionalidade rejeitada, a não ser que esta funcionalidade permita escolher que tipos de acesso o programador quer dar à sua aplicação, se leitura e escrita crítica (acesso a todos os ficheiros incluindo aos de sistema) ou se leitura e escrita normal (leitura do armazenamento interno e externo). Sendo assim, aplicações que necessitem de ROOT e que façam leitura de armazenamento, são consideradas críticas, logo não irão funcionar devidamente.
Embora nada seja impossível, o enraizamento destes mecanismos no sistema, desbloquear bootloads, ou seja, onde sejam necessários exploits para desbloquear o bootloader ou mexer no kernel, pode levar a que seja muito mais difícil fazê-lo nesta versão do que nas versões anteriores do Android. Esta funcionalidade é semelhante ao boot seguro UEFI ou ao que foi implementado nos computadores com o Chrome OS.
No entanto, para quem comprar equipamentos sem bootloader bloqueado, esta funcionalidade pode ser desactivada através da alteração do kernel ou simplesmente o novo kernel utilizar chaves próprias para autenticar os hashs. Para os utilizadores que optam por comprar equipamentos com bootloader bloqueado, por exemplos os Sony Xperia, é melhor ter muito cuidado.
Não é de todo improvável que os OEMs implementem sistemas de controlo de alteração de hashs e assim verem a garantia do equipamento sem efeito. Se quer comprar um equipamento e depois querer alterar o sistema à sua maneira, é recomendável a compra de equipamentos sem bootloader bloqueado ou que possam alterar facilmente o kernel para desactivar o dm-verity.
O dm-verity está incluído no utilitário Veritysetup que ,quem utiliza o Linux, deve certamente conhecer bem. Este utilitário tem como principal função e explicada em cima, que se resume a configurar a verificação do sistema de ficheiros de armazenamento.
Para os que não sabem, o Android tem incluído os dois principais utilitários do projecto LUKS (Linux Unified Key Setup), o Veritysetup (dm-verity) e o Cryptsetup (dm-crypt), que é usado para encriptar o dispositivo. Este último já está incluído no Android desde há bastante tempo, já não é de certeza uma novidade.
O LUKS foi criado por Clemens Fruhwirth e tornou-se em, nada mais nem nada menos, do que o conjunto de especificações padrão de criptografia de discos rígidos no Linux.
Resumidamente, o DM-Verity será uma enorme dor de cabeça para os utilizadores que pretendam alterar o sistema à sua maneira, bem como para os programadores.
Apesar de actualmente já conseguirem fazer root em alguns modelos do Galaxy Note 3 sem que o Samsung Knox seja activado, este mecanismo parece bem mais poderoso e bem mais difícil de ultrapassar.
Podem consultar todas as informações sobre o dm-verity, aqui.
Para além do dm-verity, esta nova versão do Android trouxe mais reforços na segurança.
Modo Execução (Enforcing) do SELinux
O SELinux passou de modo permissivo (que simplesmente registava falhas), para o modo Execução (Enforcing).
O SELinux, que foi introduzido no Android 4.3, é um sistema de controlo de acesso que funciona sobre o kernel Linux, de forma a ajudar o utilizador a ter controlo sobre as permissões das aplicações.
Com este modo Enforcing, as permissões das aplicações serão devidamente controladas e bloqueadas se necessário.
Suporte para Elliptic Curve Digital Signature Algorithm (ECDSA) nas chaves de assinatura
Agora o sistema que fornece chaves de encriptação no Android já tem suporte para Eliptic Curve Cryptography. O ECC recebeu durante algum tempo maus comentários, no entanto não foram comprovados.
O ECC é a forma mais viável de fornecimento de chaves públicas para criptografia e pode ser visto como uma boa alternativa ao RSA e a outros algoritmos. Como a criptografia assimétrica não vai ter suporte para computação quântica, o Android 4.4 trouxe outra alternativa para os programadores.
Para armazenamento de dados a longo prazo, a criptografia simétrica continua a ser a melhor escolha.
Avisos para falsos SSL Certificate Authority
Vários sectores IT adoptam software de monitorização SSL, que adiciona uma Autoridade Certificadora (Certificate Authority, CA) ao computador ou ao browser, de forma a evitar não só que as sessões HTTPS sejam atacadas ou interceptadas mas também para questões de monitorização.
Isto já é possível no Android desde há muito, onde é possível adicionar explicitamente uma chave adicional CA, permitido que o gateway - que pode ser por exemplo uma empresa - se faça passar por qualquer site/destino.
No Android 4.4 os utilizadores são notificados sempre que é adicionado uma chave CA, evitando assim que a chave seja adicionada por algum exploit sem que o utilizador se aperceba.
Detecção automatizada de Buffer Overflow
Agora o compilador do Android compila o código com FORTIFY_SOURCE nível 2 e garante que todo o código C seja compilado com esta protecção bem como se for compilado com clang.
O FORTIFY_SOURCE é uma funcionalidade de segurança do compilador que tenta identificar algumas formas de Buffer Overflow (que pode ser explorado por software malicioso ou por utilizadores que pretendam ganhar acesso a execução de código arbitrário num dispositivo).
No entanto esta funcionalidade não tem capacidade de lidar com todas as possibilidades de Buffer Overflow, mas sempre é melhor ter esta funcionalidade do que não ter, pelo menos protege das formas mais conhecidas para executar este ataque.
Como sempre, atrás de grandes implementações de segurança, vêm também alguns problemas de segurança e desta vez não foi excepção.
Em Julho falámos aqui sobre como corrigir uma das maiores vulnerabilidades do Android que já vinha desde praticamente o seu aparecimento, a vulnerabilidade MasterKey.
A Google lançou um patch a corrigir duas vulnerabilidades relacionadas com o MasterKey e lançou o Android 4.3 também já corrigido. Ainda em Julho, uma empresa chinesa conhecida como Android Security Squad, descobriu outra variante desta vulnerabilidade.
Com o lançamento do Android 4.4 KitKat, a Google prometeu que esta vulnerabilidade estava totalmente corrigida, mas, infelizmente, nada é totalmente seguro.
O especialista em segurança Jay Freeman, também conhecido como Saurik na Cydia Software, descobriu uma nova vulnerabilidade relacionada com a verificação da assinatura das aplicações (MasterKey) e para demonstrar o que é possível fazer, desenvolveu, como exemplo, um exploit em Python.
Now, last night, the source code for Android 4.4 was released to AOSP, which included a patch for yet another bug, #9950697, in the signature verification of Android application packages. This bug is somewhat weaker than the previous ones, but is still sufficient to support the general exploit techniques I have described. In this article, I describe this third bug and show how it can be used, providing both a proof-of-concept implementation in Python and a new version of Impactor that adds support for this signature bug.
Esta nova vulnerabilidade é semelhante à descoberta em Julho pela Android Security Squad, onde cada aplicação é assinada com a chave de encriptação privada dos seus criadores. O gestor de aplicações do Android determina que as aplicações podem partilhar informações, ou que permissões são capazes de as obter através da análise aos certificados usados para verificar a assinatura do autor.
Even the system software itself is signed by the manufacturer of the device; applications signed by that same key are thereby able to do anything that the system software can. Normally, this is only possible if you are the manufacturer; however, using bug #8219321, anyone could steal those signatures for their own. A key concern this raises is that applications in the wild might be signed with the system keys of your device; while you think you are just installing a harmless game, that application would look to the package manager as if it came from the manufacturer, giving it elevated and dangerous system permissions. The vulnerability involves discrepancies in how Android applications are cryptographically verified & installed, allowing for APK code modification without breaking the cryptographic signature; that in turn is a simple step away from system access & control.
Até ao momento ainda não se conhece que esta vulnerabilidade esteja a ser explorada. Uma vez que ainda nenhum equipamento recebeu o Android 4.4 oficialmente para além do Nexus 5, é possível que, com esta revelação, a Google esteja já a tratar de um patch bem como a CyanogenMod na CM11.
Para que a aplicação Cydia Impactor não seja "atacada", Saurik já corrigiu a sua aplicação contra esta vulnerabilidade.
Enquanto não for lançado um patch a corrigir esta falha, é extremamente recomendado que só instalem aplicações a partir da Play Store e de programadores conhecidos e fidedignos.
Pode consultar todas as informações desta descoberta no site oficial do Jay Freeman (Saurik).
Este artigo tem mais de um ano
Penso que o utilizador aquando a aquizição do smartphone deveria de ter a opção com ROOT e sem ROOT. Nos pagamos o smartphone, logo é nosso, é nosso problema e responsabilidade o que fazemos com ele.
Já que a Google é “contra” o ROOT,pq têm apps que requerem root na app store?
Concordo contigo Samuel !
Ora nem mais!
+1
Concordo e não concordo.
Concordo quando dizes que se a Google é “contra” o ROOT, não devia ter apps no Play, que só trabalham com ROOT.
Não concordo (até certo ponto)… quando dizes que como compramos o smartphone, podemos fazer o que quisermos com ele. Quando se compra o iPhone, não “conseguimos” alterar o sistema ou fazer ROOT. Por isso essa regra pode-se aplicar a outros SOs.
Não há ROOT mas há o jailbreak. São coisas diferentes mas ambos não são permitidos pela Google e Apple.
Eu concordo com o Samuel. Se pagamos por um equipamento é para tirar o máximo partido dele!
Tudo bem que pode vir assim para proteger o equipamento de quem não percebe da coisa. Mas também só mexe quem sabe. Pelo menos devia ser assim 😉
Se fores a net já tens maneira de fazer root ao nexus 5 logo, não é impossível. Acalmem se que nestas coisas a comunidade ganha sempre.
Basta ver o caso do knox e o regional lock da samsung
Desde quando é que a Apple cria jurisprudência?
Nao é propriamente contra, tanto que existem modelos que podes fazelo, mas quando o fazes, o SO desaparece, ficas só com o bootloader, ja que eles nao se responsabilizam por qualquer problema de segurança a partir daquele ponto.
Queres instalas outro, mas qualquer programa que instalas pode fazer trinta por uma linha, a começar por sacar-te todas as passwords que tenhas no telemóvel.
+ 1
Em relação a isto “Uma vez que ainda nenhum equipamento recebeu o Android 4.4 oficialmente para além do Nexus 5” há perspectivas de quando os restantes equipamentos nexus irão receber o update?
supostamente em 1 mes, excepto o galaxy nexus, que oficialmente não recebe.
obrigado 😉
Acho que fazem eles bem, tirem as principais razões do pessoal geek…
Os sistemas de segurança que andam a implementar, estão muito bons, mas deviam deixar os utilizadores poderem instalar acesso root sem represálias.
De uma forma ou de outra, mais cedo ou mais tarde, acabará por ser descoberta uma maneira de se fazer root sem comprometer a segurança e os novos mecanismos de segurança.
Sim, root já é possivel..
Uma das coisas que o android tem de bom é a comunidade.. E isso nota-se logo, principalmente em aparelhos nexus..
[OFF RECORD] Já agora, quando é que está disponível o Android KitKat para os outros dispositivos. Ex. Galaxy S2?
Estou ansioso! 😐
Quando a CM lançar mas não tenhas pressa que para já vão lançar a versão estável do 4.3 que já não deve faltar muito.
Já estão a trabalhar nisso e está por pouco… Vai ao site deles e lê as notícias.
“Não é de todo improvável que os OEMs implementem sistemas de controlo de alteração de hashs e assim verem a garantia do equipamento sem efeito”.
Os OEMS podem implementar o que lhes der na gana. Não é por isso que invalidamos a garantia por instalar software.
Se o que tu instalares for a causa do problema não são obrigados a reparar, mas isso já se estava a espera. Um bom exemplo é instalar programas para fazer as colunas dar mais som e estragar as mesmas!
Enganas-te Pedro Ribeiro.
Estes mecanismos servem para isso mesmo, impossibilitar a instalação de software não original, custom roms, root, custom recovery, etc.
Ou melhor, sem root e sem custom recovery, não se instala uma custom ROM.
Ou muito me engano ou eles vão falhar a comunidade android é muito forte e talentosa.
Gostava era de ver um artigo a falar do ART, estou a gostar bastante dos artigos sobre o Kitkat, muito boa qualidade tanto técnica como escrita, continuação do excelente trabalho!
Golias17, em breve 😉
Boas,
O acer Liquid E2 irá receber o update?
E já que se fala no SELinux:
Samsung KNOX protects its operating system using SE for Android, which is built on the SELinux technology developed by NSA.
Do artigo Samsung:
https://www.samsungknox.com/overview/technical-details
Espero que o LKM tenha melhorado, porque ta por fora toda aplicaçao android, ficar usando memoria, ou em processo de cache.
isso torra a paciencia. alias, o android todo ja irrita, ano que vem devo dizer adeus a android e usar windows phone.
Arkan, vejo que não é utilizador de distros Linux.
A questão do Android adicionar toda e qualquer aplicação na memória RAM, deve-se ao uso do kernel Linux.
O Linux também adiciona todas as aplicações na memória para as tornar facilmente acessíveis e desta forma poupar outros recursos ao ter que as carregar novamente.
Uma coisa é uma coisa e outra coisa é outra coisa. Com o mundo seria mais feliz se certos paranóicos não existissem, ou se estivessem internados…