Como um grande fã de telefones Android, se o seu telefone cair repentinamente, seu primeiro pensamento seria "Oh meu Deus!" ou que seu dinheiro no Google Pay ou Paypal não está seguro? Se o aplicativo baixado mais recente não apenas exibisse vários anúncios chatos, mas também notificações inesperadas, você pensaria que poderia ser uma tentativa de phishing e desinstalaria o aplicativo imediatamente?
Como podemos garantir que nosso aplicativo forneça uma experiência segura para usuários que não têm conhecimento suficiente das vulnerabilidades de segurança do Android? Quais são as vulnerabilidades de segurança no ecossistema Android? Onde podemos explorar novas técnicas de teste de segurança do Android? Como podemos agilizar o processo de testes de segurança?
Em primeiro lugar, a vantagem de desenvolvimento de código aberto do sistema operacional Android também esconde problemas de segurança inerentes ao seu desenvolvimento, como o sistema sandbox do sistema Android (ou seja, máquina virtual). No entanto, a camada subjacente tem uma vulnerabilidade após a outra, permitindo que programas (ou ferramentas) maliciosos obtenham acesso root e quebrem as restrições da sandbox. Assim como na era do PC, não existe um sistema operacional de PC absolutamente seguro; na era da Internet móvel, também não existe um sistema operacional móvel absolutamente seguro. Os riscos de segurança do ecossistema de código aberto Android são como alarmes manchados de sangue, atingindo os corações de todos os desenvolvedores Android.
Em segundo lugar, os riscos de segurança no processo de desenvolvimento de APP/SDK Android são como buracos negros desconhecidos. Nunca sabemos onde está o ponto final do confronto de segurança, quem são os invasores, quem são os exterminadores e como nos defender contra eles.
Finalmente, no nível do usuário, quais são algumas vulnerabilidades de comportamento de segurança comuns e reconhecíveis?
Tanto os aplicativos Android quanto os SDKs apresentam vulnerabilidades de segurança até certo ponto. Talvez um dia seu aplicativo seja afetado por uma das vulnerabilidades de segurança acima. Coincidentemente, ao testar recentemente um SDK Android, descobrimos uma vulnerabilidade de segurança relacionada aos componentes de aplicativos Android. Com base neste exemplo, os métodos, técnicas e processos para testes de segurança do Android SDK são resumidos.
Visão geral das causas da vulnerabilidade
Um componente opcional de um aplicativo (doravante denominado aplicativo) Android SDK abriu uma porta aleatória localmente para monitorar se o serviço da camada Java está ativo. Porém, quando a camada Java se comunica com o componente, ela não verifica rigorosamente os parâmetros de entrada, resultando na possibilidade de ser preenchida com códigos de ataque e ataques maliciosos ao chamar a função "system()" do sistema Linux.
A captura de tela a seguir mostra que após a porta de simulação ser atacada, a intenção do componente do aplicativo modifica o conteúdo da URL durante a comunicação e o Webview exibe código ilegível:
Os quatro principais componentes de aplicativos de aplicativos Android: atividade, receptor, serviço e provedor de conteúdo, bem como as funções de segurança dos componentes de aplicativos que se comunicam por meio de intenção para IPC, não serão discutidos em detalhes aqui. Aproveitando a vulnerabilidade relacionada ao componente no exemplo acima, o diagrama a seguir mostra as dimensões do ataque relacionadas ao lado do APP do terminal:
Devido ao ambiente de aplicativo local do Android APP, o soquete de rede carece inerentemente de mecanismo de autenticação e autorização refinado. Portanto, se o cliente Android for usado como servidor, o código reverso for usado para pesquisar o número da porta aleatória local do aplicativo e o ataque for enviado ativamente para a porta, os seguintes riscos de segurança estarão à espreita:
Execução de comando local: Quando o nome do pacote do aplicativo incorporado é especificado como o próprio aplicativo e o nome do componente é especificado como a atividade do aplicativo, qualquer atividade do aplicativo pode ser iniciada, incluindo a actividade não exportada protegida, causando assim um risco de segurança. Por exemplo, uma vulnerabilidade de negação de serviço pode ser encontrada iniciando diversas atividades não exportadas, uma por uma, por meio de solicitações HTTP.
Controle de comando para modificar as permissões do aplicativo: passe a intenção de iniciar componentes do aplicativo Android por meio da porta de soquete aberta e, em seguida, execute operações como iniciar atividade e enviar transmissão com as permissões do aplicativo atacado. Como as intenções transmitidas pelo soquete não podem realizar verificações refinadas na identidade e nas permissões do remetente, ignorando a proteção de permissão fornecida pelo Android para componentes do aplicativo, e podem iniciar os componentes do aplicativo não exportados e protegidos por permissão, representando um risco à segurança
Divulgação de informações confidenciais, controle do telefone móvel: Um serviço local abre a porta UDP para escutar e, após receber uma palavra de comando específica, pode retornar as informações confidenciais do telefone celular. Por exemplo, o mordomo do celular Baidu pode gerenciar remotamente a secretKey do celular e, então, invasores não autorizados podem gerenciar totalmente o celular por meio da rede.
Otimização da versão de reforço de segurança do Android
Adicione verificações para comandos do sistema e filtragem de caracteres especiais nas camadas Nativa e Java.
Criptografar a comunicação do soquete para o processo daemon JNI Watchdog.
Adicione verificação de recurso para URLs, intenções e atividades em funções de notificação local para evitar o redirecionamento para links maliciosos ao clicar em notificações.
Altere o local de armazenamento do nome do pacote no armazenamento local do aplicativo.
Adicionar funcionalidade de configuração on-line.
Estes são os requisitos importantes para esta otimização de reforço de segurança.
Se você seguir testes de sistema convencionais ou testes de desempenho, precisará apenas realizar testes futuros com base nas mudanças de requisitos. No entanto, para testes de segurança, garantir a robustez da segurança do SDK requer testes especiais reversos, simulando vários métodos de ataque à segurança e casos de teste divergentes para os pontos modificados.
Privacidade de dados: Segurança de armazenamento externo e segurança de armazenamento interno; verifique se nomes de usuários, senhas, registros de bate-papo, informações de configuração e outras informações privadas estão salvas localmente e criptografadas; verifique a integridade das informações antes de usá-las.
Ataques de permissão: Verifique o diretório do aplicativo e certifique-se de que suas permissões não permitem que outros membros do grupo leiam ou escrevam; verifique se as permissões do sistema estão sob ataque.
Proteção de permissão de componentes Android: evita que componentes internos do aplicativo sejam chamados arbitrariamente por programas de terceiros: evita que atividades sejam chamadas por programas de terceiros, evita o sequestro de atividades; garantir a segurança da recepção e transmissão da transmissão, receber apenas as transmissões enviadas pelo aplicativo e evitar que terceiros recebam o conteúdo transmitido; impedir o início ou interrupção maliciosa de serviços; verifique as permissões de operação do Provedor de Conteúdo; se os componentes precisarem ser chamados externamente, verifique se as restrições de assinatura foram aplicadas ao chamador.
Atualizações: verifique a integridade e a legalidade do pacote de atualização para evitar sequestro.
Bibliotecas de terceiros: se bibliotecas de terceiros forem usadas, acompanhe suas atualizações e verifique sua segurança.
Segurança de ROM: Use ROMs oficiais ou ROMs fornecidas por equipes autorizadas para evitar a adição de anúncios implantados, Trojans, etc.
Contramedidas anti-cracking: Neutralizam a descompilação, impossibilitando a descompilação usando ferramentas de descompilação ou obtendo o código de desmontagem correto após a descompilação; neutralizar a análise estática usando ofuscação e criptografia de código; neutralizar a depuração dinâmica adicionando código para detectar depuradores e emuladores; evite a recompilação verificando assinaturas e verificando o valor hash do arquivo dex compilado.
Depois de concluir os testes especiais de segurança e os testes regulares de processo, execute testes de regressão contínua para os recursos existentes do aplicativo, compatibilidade entre versões novas e antigas e compatibilidade com diferentes versões do sistema operacional Android.
Em comparação com os casos de teste comuns de desempenho e funcionalidade do sistema, os casos de teste de segurança exigem uma compreensão mais abrangente do ecossistema Android, como: abrangendo o nível de aparência de segurança do usuário, nível de ataque local e remoto do sistema de aplicativo e nível de vulnerabilidade do sistema operacional, com mais foco no projeto de casos de teste de pensamento de ataque reverso.
Se o ponto de partida do desenvolvimento é a defesa da segurança, o ponto de partida do teste é a mentalidade de ataque de hackers. Projetar casos de teste para cenários de ataque e implementar técnicas de teste de ataque determina a robustez da segurança do SDK.
Para garantir o mais alto nível de segurança para seus aplicativos, considere utilizar o WeTest Application Security Testing. Este serviço fornece uma avaliação abrangente de problemas de segurança em aplicativos, detecção oportuna de vulnerabilidades de programas e oferece exemplos de reparo de código para auxiliar nos reparos de vulnerabilidades.
Confie na WeTest para proteger seu aplicativo contra possíveis ameaças e manter uma experiência de usuário segura.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3