Application Security Melhores Práticas
Desde que existem aplicativos, existem agentes maliciosos com licenças para burlar e propriedade intelectual para roubar.
dados para roubar e ações para subverter. Os proprietários de aplicativos desenvolveram medidas de mitigação contra essas ameaças e
Então, os agentes de ameaças reagiram com novas ferramentas e processos para contornar as medidas de mitigação. Um verdadeiro jogo de gato e rato.
O ciclo continua até hoje. E embora algumas técnicas específicas não funcionem mais, existem princípios gerais.
Princípios que permanecem válidos na luta contínua para proteger os aplicativos contra usos não intencionais.
Temos vindo a desenvolver e a aperfeiçoar estas Boas Práticas há mais de duas décadas. E embora elas sejam
De modo geral, algumas são aplicáveis, outras são contraditórias entre si, e algumas só fazem sentido em determinados cenários.
O mais importante é lembrar de ser intencional, considerando as ameaças e, em seguida, aplicando medidas.
mitigações relevantes. Depois disso, veja o que acontece e então faça alterações, porque a variação é uma das...
Os principais princípios subjacentes. Portanto, quer você pratique o ciclo OODA (Observar, Orientar, Decidir, Agir) ou o PDCA (Planejar, Executar, Verificar e Agir).
(Planejar, Executar, Verificar, Agir): não deixe sua proteção estagnar. Você investiu na sua segurança.
O objetivo da aplicação é realizar algo valioso; não deixe de garantir a integridade do seu funcionamento.
A seguir, apresentamos uma lista de princípios e ideias. Escolha aqueles que funcionam para você, mas faça-o conscientemente. Se você
Se você quiser ignorar uma ideia, tudo bem. Apenas certifique-se de ter um motivo válido para isso.
Siga os padrões
Primeiro, se existirem padrões gerais como o OWASP MASVS (https://mas.owasp.org/MASVS/11-MASVSRESILIENCE/) ou diretrizes pertinentes ao seu setor ou modelo de distribuição, utilize-os.
Criar e priorizar ameaças para que você não deixe passar nada inadvertidamente nessas listas de verificação. Aqui
Existem alguns tipos específicos de guarda mapeados para as categorias de resiliência do OWASP MASVS.
Princípios de mentalidade
Pense como um psicólogo
Em seguida, lembre-se de que os agentes de ameaça são humanos com as mesmas tendências e preconceitos que todos nós compartilhamos.
Ao pensar em proteger sua aplicação, preste atenção às possíveis motivações e desejos conflitantes.
comportamentos típicos e quaisquer outras características humanas que influenciem o desejo de uma pessoa de atacar você
aplicação. Considere o Modelo de Motivação de Maslow, os vieses cognitivos e outros fatores que influenciam as formas de
Pense nisso e use-os a seu favor.
Conheça seu adversário
Saber o que um agente malicioso deseja e por que o deseja pode ajudá-lo a projetar a proteção adequada para o seu sistema.
aplicação. Em relação ao Modelo de Motivação de Maslow, um agente malicioso pode querer monetizar um ataque para ajudar
atender às suas necessidades mais básicas. Um agente de ameaça diferente pode querer "credibilidade" e, portanto, pode estar procurando por
estima perto do topo da hierarquia. O primeiro pode ser convencido a parar de atacar sua candidatura se
Existe um aplicativo semelhante de outra organização que é mais fácil de atacar com sucesso. Neste último caso,
Nesse caso, o agente da ameaça pode prosperar ao atacar o maior desafio conhecido, de modo que, se/quando tiver sucesso,
Eles podem reivindicar status de elite. Cada um tem um conceito diferente de "retorno" e "investimento". Portanto,
Compreender o modelo de ROI (retorno sobre o investimento) do seu adversário pode ajudá-lo a planejar sua proteção.
Frustre seu adversário
Em geral, quanto mais suas proteções frustrarem os agentes maliciosos, maior a probabilidade de eles desistirem.
o ataque deles. Bater a cabeça contra a parede muitas vezes acaba levando a pessoa a questionar o
benefício de continuar.
Princípios Preparatórios
Modele suas ameaças
Comece enumerando as ameaças contra sua aplicação e, em seguida, classifique-as por ordem de prioridade. Você precisará disso.
A classificação serve para determinar quais ameaças abordar primeiro ou qual mitigação deve prevalecer caso duas ameaças sejam concorrentes.
mitigações. Esta lista também será útil caso precise realizar algum ajuste de desempenho. A robustez da segurança pode ser
ajustado para fornecer mais ciclos para a lógica do seu aplicativo, mas sem ignorar o mais importante.
ameaças impactantes.
Investigar ferramentas de ataque
Se você quer entender como é fácil atacar um aplicativo, dê uma olhada no OWASP MASTG (Móvel
Application Security Guia de Testes). Ele lista diversas ferramentas de teste de ameaças e exemplos de como usá-las para realizar testes.
Resiliência da aplicação. Realizar análises antes e depois da proteção lhe dará a confiança de que você está
Abordando as ameaças mais importantes. [Nota: Tenha cuidado com jailbreaks, rootkits e frameworks de ataque.]
pois exigem a desativação dos controles de segurança e podem conter cargas maliciosas!]
Seja o vilão
Antes de desenvolver uma proteção, ataque sua aplicação (pelo menos mentalmente) para entender o que representa uma ameaça.
O ator pode tentar. Desenvolver uma mentalidade adversária é importante para criar proteções eficazes. Muitos
As medidas de segurança e proteção só farão sentido quando você entender o vetor de ataque contra o qual elas protegem.
Faça a sua parte antes de proteger
Produtos de proteção de aplicativos podem aumentar a segurança do seu aplicativo, mas comece com soluções seguras.
práticas de codificação e uso de todas as outras ferramentas aplicáveis (SAST, DAST, SCA, etc.) para procurar outros
Identifique vulnerabilidades com frequência e o mais cedo possível. Aproveite as ferramentas OWASP MASTG e OWASP MASVS para...
Informações sobre práticas de programação segura, bom uso da plataforma, etc.
Princípios básicos de proteção
Multiplique as opções
Assim como muitas pessoas, os agentes maliciosos provavelmente escolherão o caminho de menor resistência quando confrontados com múltiplas ameaças.
possibilidades. Portanto, crie vários caminhos usando vários guardas com diferentes reações para conduzir os agentes da ameaça.
em direção a becos sem saída, potes de mel ou “um labirinto de passagens tortuosas, todas iguais”. Mesmo sem adicionar mel.
vasos, etc., adicionar mais feno ao monte de feno sempre torna mais difícil encontrar a agulha.
Causa e efeito da quebra
Causa e efeito são ferramentas valiosas para o agente da ameaça. Cada vez que ele faz uma alteração e vê um efeito, ele percebe uma mudança.
Ao analisar a reação, eles aprendem mais sobre quando seu aplicativo realiza as verificações e como ele responde a elas.
adulterar eventos que vê. Quebrar a ligação entre causa e efeito — ou pelo menos afrouxá-la um pouco — é um
contramedida eficaz. Portanto, embora seja tentador — e faça algum sentido — travar ou sair imediatamente
Quando um ataque é detectado em um aplicativo, uma abordagem melhor é interromper sutilmente o aplicativo em execução. Se
Os atacantes acionam uma detecção, mas não sabem disso; provavelmente tentarão a próxima coisa. Se eles forem
vários passos se desenrolam numa cadeia de eventos que compõem o ataque antes que eles percebam que foram pegos,
A tarefa deles de isolar o ponto único de falha torna-se muito mais difícil. Isso dificulta a ação dos atacantes.
Localize e desative seus guardas.
Eliminar pontos únicos de falha
Pontos únicos de falha tornam sua proteção frágil, portanto, interligue várias proteções e estabeleça uma
nível limite do que indica adulteração. Isso é especialmente verdadeiro quando os guardas usam heurísticas. Como um
Por exemplo, a Detecção de Controle Virtual utiliza técnicas baseadas em heurísticas para identificar se houve interação com o
O dispositivo provavelmente representa uma pessoa ou não. Como em qualquer decisão baseada em heurísticas, a Detecção de Controle Virtual é
aproximado e pode nem sempre refletir a verdadeira origem da interação. Combine o Controle Virtual.
Detecção com outras entradas ao determinar como reagir.
Imite o mosquito
Um número maior de guardas menores é preferível a um número menor de guardas maiores. Guardas menores são
Mais difíceis de encontrar do que guardas maiores, além de proporcionarem maior capacidade de sobreposição, oferecendo maior proteção.
medida de defesa em profundidade. Além disso, pequenas ações de adulteração ocultas que se acumulam podem ser usadas para eliminar um
ataque por mil picadas.
Use redes de proteção
Redes de guarda são grupos de guardas que trabalham juntos para proteger o aplicativo e os outros guardas.
a rede. Ao criar uma complexa rede de proteções, você pode dificultar muito a remoção de qualquer uma delas.
guarda. Nesse caso, quanto maior o emaranhado, melhor, até o ponto em que guardas adicionais seriam necessários.
um efeito adverso no desempenho.
Utilizar guardas direcionados
Implemente medidas de segurança para proteger seus ativos mais importantes e considere os vetores de ataque mais prováveis.
perigoso. Por exemplo, se a cassação da licença for uma preocupação, suas proteções devem se concentrar em sua licença.
lógica, caminhos de código de licenciamento, validação de argumentos de licença e valores de retorno da rotina de licença.
Mude e agite regularmente
As proteções são semi-aleatórias com base no seu código, na sua especificação de proteção ou projeto, na versão do produto e
a semente de proteção. Altere sua semente a cada lançamento (e salve-a) para que você possa ter certeza de que
Sua proteção será diferente a cada vez. Faça isso irritará o atacante, obrigando-o a recomeçar do zero.
para cada versão. Não há motivo para facilitar o trabalho do atacante mais do que o necessário.
Não ofereça brindes.
Nunca publique uma aplicação em produção com quaisquer mecanismos de segurança ou outros recursos configurados para o modo de depuração.
As mensagens de depuração podem revelar que tipo de proteção está sendo aplicada e onde ela está sendo injetada. Você está tentando
Dificulte a vida do agressor, portanto não baixe a guarda.
Comece com o básico e vá iterando.
Ao integrar a proteção em sua aplicação pela primeira vez, aproveite todas as opções de proteção automática disponíveis.
(configurações padrão, configuração zero, etc.) para realizar a integração inicial da proteção em seu pipeline de CI.
Isso permitirá que você integre a proteção mais rapidamente ao seu Ciclo de Vida de Desenvolvimento de Software.
Mais tarde, podemos personalizar a proteção de acordo com suas necessidades específicas de segurança e desempenho. Lembre-se de vir
Retorne e personalize sua proteção para o nível apropriado, conforme identificado em sua avaliação inicial de ameaças.
Princípios de proteção avançada
Introduzir comportamento não determinístico
Além de garantir que muitos de seus guardas reajam apenas de forma invisível, considere também guardas que apenas
acionado algumas vezes. Usando probabilidades de execução, limites de tempo real ou combinações de
As saídas de proteção podem introduzir alguma incerteza sobre o que seu aplicativo está fazendo. Use ações de adulteração que
Modifique seu código apenas de forma sutil, mas que ainda proteja sua intenção original.
Denuncie tudo
Mesmo que você utilize algumas dessas técnicas de reação sutis, ainda é importante relatar cada ocorrência de adulteração à
Compatível com aplicativos. Esses dados valiosos podem ser estudados em busca de padrões que podem ajudar a melhorar seu futuro.
proteções — especialmente para ajudar a distinguir entre usuários normais, desenvolvedores de exploits e usuários que exploram vulnerabilidades.
Redes de Guarda Separadas
Leve o conceito de rede de vigilância a um novo patamar. Utilize múltiplas redes de vigilância independentes.
umas das outras, de forma que, se um agente malicioso identificar uma rede de proteção, você terá outras prontas para agir.
nas laterais para detectar o ataque.
Usar guardas não direcionados
Além de proteções direcionadas, adicione algumas proteções em partes incomuns ou sem importância da sua aplicação. Isso
Impede que seu código mais importante e mais protegido se destaque demais. Também pode
Capture ataques que você não considerou ao construir sua proteção. Este é mais um caso em que a defesa em profundidade se destaca.
Incluir casos de falha esperados
Se você tem uma função que avalia alguma condição e então escolhe entre o caminho feliz e o...
Em um caminho infeliz, um agente malicioso pode tentar substituir a função de avaliação por uma função que sempre retorna.
Verdade. Se você adicionar uma chamada a essa função com argumentos que deveriam causar sua falha, mas ela ainda assim for bem-sucedida, você...
Saber que algo está errado. Observe que essa prática de programação segura não requer aplicação.
proteção para funcionar. No entanto, adicionar e proteger esse código aumenta a segurança geral do seu aplicativo.
Postura de defesa em profundidade, portanto ambas são recomendadas.
Use os fios estrategicamente
Considere executar algumas de suas proteções em threads de segundo plano. Faça tudo em uma única thread.
Isso facilita o trabalho do atacante. Forçar um atacante a monitorar várias threads torna seu trabalho mais difícil.
Cuidado com problemas de rosca
Ao instalar proteções ou outros mecanismos de segurança em código multithread (recomendado!), certifique-se de que...
Os recursos que você está usando são threads safeSe um tipo de guarda não for thread safe Pense fora da caixa.
Colocar todas as proteções de um tipo em uma única thread ou adicionar um mutex para sincronizar várias threads.
Combine os padrões cuidadosamente.
Ao usar expressões regulares para identificar locais de invocação ou intervalos protegidos, revise cuidadosamente sua configuração.
Os registros de proteção são verificados regularmente para garantir que você esteja correspondendo ao que espera. Não intencional
A sobreposição de recursos pode ter consequências como degradação severa de desempenho, inchaço extremo do código e pode...
até mesmo introduzir falhas. Use recursos de correspondência para facilitar sua vida, não para dificultá-la, quando você precisar.
Depurar erros obscuros.
Variar as funções de reação à adulteração personalizadas
Utilizar várias funções de reação a adulterações em vez de uma só é outra forma de eliminar pontos únicos de falha.
Dê ao atacante mais trabalho, não menos.
Use reações invioláveis para realizar tarefas importantes.
Se você usar apenas reações de adulteração, fica mais fácil para um invasor remover proteções inteiras. Colocar significado
As operações em reações sem adulteração impedem que coisas boas aconteçam se um atacante remover uma proteção.
Em cada ponto, você quer fazer com que o atacante use um bisturi, não um machado.
Utilize código e dados danificados e reparados onde
Possiveis
Algumas plataformas, como o Windows, permitem danificar, reparar e danificar novamente o código para criar código estático e
A análise dinâmica é mais difícil. Se isso for possível na sua plataforma, faça! Outras plataformas, como o iOS, não permitem.
Alterar o código, mas você ainda pode alterar os dados. Em plataformas restritivas, considere danificar, reparar e
Danos recorrentes aos dados que controlam a execução do seu código. Uma instrução switch contendo dados reais e falsos.
O código selecionado por um valor de dados pode fornecer parte da proteção oferecida por códigos menos restritivos.
.
Escolha locais de invocação adequados, sempre que possível.
Ao usar produtos de proteção que permitem especificar locais de invocação, varie. Não acione todos os seus mecanismos de proteção simultaneamente.
Guardas em um só lugar. Coloque algumas invocações no início das funções. Coloque algumas invocações dentro das funções. Coloque
Algumas invocações ocorrem na inicialização. Outras são programadas para ocorrerem em intervalos regulares. Variações podem aumentar a confusão.
Princípios de manutenção
Depure de forma mais inteligente
Nossos produtos de proteção possuem recursos para auxiliar na depuração de problemas de proteção e de tempo de execução. Verifique
Consulte a documentação para obter detalhes.
Ajuda Suporte Ajuda Você
Ao solicitar ajuda ao suporte ao cliente, forneça o máximo de informações possível, incluindo registros.
especificações/projetos de proteção, aplicativos desprotegidos, informações de depuração, arquivos de mapeamento, comandos de proteção,
versões dos produtos de proteção utilizados, etc. Ter tudo o que é necessário para reproduzir um problema sempre leva a
para a resolução mais rápida.
Princípios de Criptografia
Use criptografia de caixa branca
Por fim, se seu aplicativo processa dados sensíveis, esperamos que você já utilize criptografia. Embora, se
Se você incluir chaves no seu aplicativo, elas geralmente podem ser encontradas e copiadas usando uma das muitas ferramentas de ataque disponíveis.
criada para esse propósito. Usando uma solução criptográfica de caixa branca como Digital.ai A proteção de chaves e dados pode
Garanta que suas chaves nunca existam na memória, permitindo ainda que seu aplicativo execute as tarefas necessárias.
operações criptográficas.
A criptografia de caixa branca substitui as chaves canônicas por código, de forma que elas não possam ser facilmente encontradas e obtidas.
E mesmo que suas chaves estejam em um formato diferente, elas ainda permitem que seu aplicativo interaja com
endpoints que utilizam implementações criptográficas normais, como o OpenSSL.
A criptografia de caixa branca protege suas chaves porque o código equivalente é irreversível em relação à criptografia de chave clássica.
formato. Ao mesmo tempo, Digital.ai As chaves criptográficas de caixa branca da Key & Data são efetivamente vinculadas de forma rígida.
à implementação do algoritmo de caixa branca com ligação estática. Uma vez que essas chaves criptográficas de caixa branca podem
Ao serem facilmente substituídos por uma biblioteca alternativa, seus aplicativos ganham maior resiliência contra ameaças.
atores.
Siga em frente, com segurança!
Lembre-se de que proteger aplicativos contra agentes de ameaças em constante evolução é um desafio permanente.
O ciclo contínuo de gato e rato entre proprietários de aplicativos e agentes maliciosos exige que você
Manter uma postura proativa e adaptável diante das ameaças em constante evolução. Digital.ai é seu parceiro neste ciclo, e
Recomendamos que utilize as ferramentas que disponibilizamos dentro do âmbito das orientações apresentadas neste documento.
Para preservar seu patrimônio, em caso de dúvida, entre em contato! Estamos aqui para ajudar.