Desenvolvimento Seguro de
Aplicações para Android
Desenvolvimento Seguro-Android
Android dominated the smartphone market with a share of 82.8%
Desenvolvimento Seguro-Android
Conhecendo o Android AndroidManifest Service SQLInjection ContentProviders Armazenamento InternoArquitetura
Conhecendo o Android
l Cada app Android executa em sua própria
sandbox
l Multi-usuário cada app é um usuário
diferente
l Por padrão o sistema assina cada app
como um único usuário Linux(ID usado
somente pelo sistema e desconhecido pelo app)
l O sistema atribui permissões para os
arquivos de modo que apenas o User ID assinado possa acessá-los
Conhecendo o Android
l Cada processo tem sua própria máquina
virtual, uma app executa isolada das demais
l Cada app é executada em um processo
linux próprio
l Diferentes apps podem ser assinadas com
o mesmo certificado
l Todas as permissões de acesso de uma app
deve ser permitida pelo usuário no momento da instalação
AndroidManifest.xml
l Toda aplicação deve possuir o arquivo no
diretório raiz
l Fornece informações do que o sistema
deve ter antes de executar a app
l O nome do pacote para a aplicação que
servirá como identificação única para a aplicação
l Descreve os componentes da aplicação
(Activities, services, broadcast receivers e content providers)
AndroidManifest.xml
l
Contém o nível mínimo do Android API
requerido pela aplicação
l
Contém quais permissões a aplicação
deve ter inclusive as permissões
AndroidManifest.xml
AndroidManifest.xml
l <permission> - Níveis de proteção l Normal
l Dangerous l Signature
AndroidManifest.xml
l Explorando o AndroidManifest no Android
Service
Pode executar ações de longa duração
Background , não fornece interface para o
usuário
Um componente inicia o serviço e ele
continuará em segundo plano, mesmo que o usuário saia do aplicativo
Não é um processo separado, permite que os
erros sejam visualizados na aplicação principal.
Service
Assume basicamente duas formas:
Started – quando um componente inicia
através do startService(), após isso ele
executará indefinidamente. Até a chamada do stopService ou até que o prórpio
serviço(stopSelf) termine
Bound – Um componente da aplicação liga-se
a ele, estabelece uma interface
cliente-servidor que permite interagir com o serviço e até mesmo realizar uma intercomunicação entre processos
Service
Cada Service deve estar declarado no
AndroidManifest
Por Padrão services não são exportados para
outras aplicações
Se você adicionar um intent filter ele passa a
ser exportado por padrão
Recomenda-se que declare explicitamente no
manifest se deve ser exportado, neste caso outros aplicativos precisarão utilizar a tag <uses-permission> para o acesso
Service
l Caso precise fazer chamadas importantes,
como armazenar uma senha ou mensagens privadas é necessário validar se está
conectado ao service correto ou a um programa hostil
l É possível explicitar o componente que está
tentando conectar
l http://developer.android.com/training/articles/
SQL Injection
Entendendo Banco de Dados - Android
l SQLite
l Android provê suporte l Leve
l Multiplataforma l OpenSource
l Cada Aplicação pode criar um ou mais BD l O BD só pode ser acessado pela aplicação
SQL Injection
Entendendo Banco de Dados - Android
l SQLite Classes
l SQLiteDatabase – Manipulação l SQLiteOpenHelper - Criação
SQL Injection
l Entendendo Banco de Dados - Android l SQLiteOpenHelper
Fonte:
SQL Injection
Entendendo Banco de Dados - Android l SQLiteDatabase
l execSQL(String sql);
l RawQuery( String sql, String[] SelectionArgs); l insertOrThrow(String table, String
nullColumnHack, ContentValues values);
l delete(String table, String whereClause, String[] whereArgs)
l update(String table, ContentValues values, String whereClause, String[] whereArgs)
SQL Injection
SQL Injection
l SQLInjection – Sistema Login
Usuário: ana
SQL Injection
SQL Injection
l SQLInjection – Sistema Login
l SQL = SELECT * FROM usuario WHERE
usuario = ana AND senha ='
2' OR '1 = 1
' l Sempre será verdadeiro!SQL Injection
l Como Prevenir?l Evitar rawQuery
l Conhecer os métodos e utilizar o adequado
l Utilizar Query parametrizada
l Filtrar os caracteres na inserção
SQL Injection
Consulta :SQL Injection
SQL Injection
Content Provider
Compartilhando informações entre Apps
l Permite que determinadas informações sejam
públicas para as demais aplicações instaladas no sistema operacional .
l Permite a outras aplicações: consultar, inserir,
alterar e excluir informações.
l Provedores de conteúdo nativos do android:
contatos da agenda, imagens e vídeos
l Forma de comunicação com o provedor(nativo
Content Provider
Content Provider
Caso você não pretenda que outras aplicações
façam uso de seu contentProvider, configure no Android Manifest android:exported = false
Entre Aplicações Próprias deve fazer uso do
atributo de proteção android:protectionlevel
= signature, A permissão signature não requer
confirmação do usuário, utilizadas quando as aplicações são assinadas com a mesma chave
Lembre-se das prevenções vistas anteriormente
sobre SQLInjection, sempre em seu ContentProvider
Content Provider
l When creating a ContentProvider that will be
exported for use by other applications, you can specify a single permission for reading and
writing, or distinct permissions for reading and writing within the manifest. We recommend that you limit your permissions to those required to accomplish the task at hand. Keep in mind that it’s usually easier to add permissions later to
expose new functionality than it is to take them away and break existing users.
WebView
l Permite mostrar páginas web em sua Activity l Permitir o acesso no AndroidManifest
WebView
l Prevenindo Cross-Site Scripting(XSS) l Diminuir a capacidade do webview
APENAS para as funcionalidades que serão usadas pelo seu app
l Se sua aplicação não usa diretamente
JavaScript NÃO chamar o método setJavaScriptEnabled()
l Se necessário use addJavaScriptInterface()
WebView
l Prevenindo Cross-Site Scripting(XSS)
l Recomenda-se que utilize
addJavaScriptInterface () apenas para Scripts contidos em seu próprio aplicativo APK
l Utilize clearCache() para deletar aquivos
armazenados localmente
l Dispositivos com Android mais antigo que 4.4
utilizam uma versão WebView com questões de segurança, nestes dispositivos recomenda-se sempre confirmar que o webview deve exibir apenas conteúdo confiável
Armazenamento Interno
Arquivos Criados por sua aplicação são
acessíveis apenas por sua aplicação
Caso outras aplicações necessitem utilizar
EVITAR o uso dos modos
MODE_WORLD_WRITEABLE ou
MODE_WORLD_READABLE para realizar a interconexão de processos
Utilize ContentProviders com permissões
Desenvolvimento Seguro-Android
ConclusãoConhecer os mecanismos disponíveis para a
comunicação correta entre aplicações
Manter-se atualizados sobre os vírus e malwares que
surgem
Validar client-side e server-side
Aproveitar o crescente mercado de dispositivos com
Ana Cláudia Costa
Mestra em Informática – UFPB
Analista de Sistemas/Desenvolvolvedora Contato:
E-mail: anaclaudiaa@gmail.com