Criar aplicativos seguros no Azure
Neste artigo, apresentamos as atividades de segurança e os controles a serem considerados ao criar aplicativos para a nuvem. Recursos de treinamento, juntamente com perguntas e conceitos de segurança a serem considerados durante as fases de solicitação e criação do Microsoft SDL (Security Development Lifecycle) que são abordados. A meta é ajudar você a definir atividades e serviços do Azure que você possa usar para criar um aplicativo mais seguro.
As seguintes fases do SDL são abordadas neste artigo:
- Treinamento
- Requisitos
- Design
Treinamento
Antes de começar a desenvolver seu aplicativo de nuvem, Reserve um tempo para entender a segurança e a privacidade no Azure. Ao realizar essa etapa, você pode reduzir o número e a gravidade das vulnerabilidades exploráveis em seu aplicativo. Você estará mais preparado para reagir adequadamente ao panorama de ameaças em constante mudança.
Use os seguintes recursos durante o estágio de treinamento para se familiarizar com os serviços do Azure que estão disponíveis para desenvolvedores e com as melhores práticas de segurança no Azure:
O Guia do desenvolvedor para o Azure mostra como começar a usar o Azure. O guia mostra quais serviços você pode usar para executar aplicativos, armazenar dados, incorporar inteligência, criar aplicativos de IoT e implantar soluções de maneira mais eficiente e segura.
O Guia de introdução para desenvolvedores do Azure fornece informações essenciais para os desenvolvedores que procuram começar a usar a plataforma Azure para as próprias necessidades de desenvolvimento.
SDKs e ferramentas descreve as ferramentas que estão disponíveis no Azure.
O Azure DevOps Services fornece ferramentas de colaboração de desenvolvimento. As ferramentas incluem pipelines de alto desempenho, repositórios Git gratuitos, quadros Kanban configuráveis e amplos testes de carga baseados em nuvem automatizados. A Central de Recursos de DevOps combina nossos recursos para aprendizagem de práticas de DevOps, controle de versão do Git, métodos Agile, como trabalhamos com DevOps na Microsoft e como você pode avaliar a sua progressão em DevOps.
Os cinco principais itens de segurança a serem considerados antes de enviar para produção mostram como ajudar a proteger os aplicativos Web no Azure e proteger os aplicativos contra os ataques mais comuns e perigosos de aplicativos Web.
O Kit de Segurança de DevOps para Azure é uma coleção de scripts, ferramentas, extensões e automações que atende às necessidades abrangentes de segurança de recursos e de assinatura do Azure das equipes do DevOps que usam automação ampla. O Kit de Segurança de DevOps para Azure pode mostrar como integrar perfeitamente a segurança aos seus fluxos de trabalho nativos do DevOps. O kit aborda ferramentas como SVTs (testes de verificação de segurança), que podem ajudar os desenvolvedores a escrever código seguro e testar a configuração segura dos aplicativos deles na nuvem nos estágios de codificação e desenvolvimento inicial.
Padrões e melhores práticas de segurança do Azure – Uma coleção de melhores práticas de segurança que devem ser usadas ao projetar, implantar e gerenciar soluções de nuvem usando o Azure. A orientação tem como objetivo ser um recurso para profissionais de TI. Isso pode incluir designers, arquitetos, desenvolvedores e testadores que compilam e implantam soluções seguras do Azure.
Requisitos
A fase de definição de requisitos é uma etapa crucial para definir o que é o aplicativo e o que ele fará quando for lançado. A fase de requisitos também é um momento para pensar sobre os controles de segurança que você integrará ao aplicativo. Durante essa fase, você também inicia as etapas que serão executadas em todo o SDL para garantir que você libere e implante um aplicativo seguro.
Considerar problemas de segurança e privacidade
Essa fase é o melhor momento para considerar problemas fundamentais de segurança e privacidade. Definir níveis aceitáveis de segurança e privacidade no início de um projeto ajuda uma equipe:
- Entenda os riscos associados a problemas de segurança.
- Identificar e corrigir bugs de segurança durante o desenvolvimento.
- Aplique níveis estabelecidos de segurança e privacidade em todo o projeto.
Ao escrever os requisitos para o aplicativo, considere os controles de segurança que podem ajudar a manter o aplicativo e os dados seguros.
Fazer perguntas de segurança
Faça perguntas de segurança como:
Meu aplicativo contém dados confidenciais?
Meu aplicativo coleta ou armazena dados que exigem a adesão a padrões do setor e programas de conformidade como o FFIEC (Federal Financial Institution Examination Council) ou o PCI DSS (Padrão de Segurança de Dados do Setor de Cartões de Pagamento)?
O meu aplicativo coleta ou contém dados confidenciais pessoais ou dos clientes que podem ser usados, por conta própria ou com outras informações, para identificar, contatar ou localizar uma pessoa?
Meu aplicativo coleta ou contém dados que podem ser usados para acessar informações médicas, acadêmicas, financeiras ou trabalhistas de um indivíduo? A identificação do nível de confidencialidade dos dados durante a fase de requisitos ajuda a classificá-los e a identificar o método de proteção de dados que você usa para o aplicativo.
Onde e como meus dados são armazenados? Considere como monitorar os serviços de armazenamento que o aplicativo usa para mudanças inesperadas (como tempos de resposta mais lentos). Você é capaz de influenciar o registro em log para coletar dados mais detalhados e analisar um problema detalhadamente?
Meu aplicativo está disponível para o público (na Internet) ou apenas internamente? Se o aplicativo estiver disponível para o público, como você protegerá os dados que poderão ser coletados contra uso indevido? Se o aplicativo estiver disponível apenas internamente, considere quem em sua organização deve ter acesso a ele e por quanto tempo.
Você entende o seu modelo de identidade antes de começar a projetar o aplicativo? Você consegue determinar se os usuários são quem dizem ser e o que um usuário está autorizado a fazer?
O meu aplicativo executa tarefas confidenciais ou importantes (como transferir dinheiro, destrancar portas ou entregar remédios)? Considere como você valida que o usuário executando uma tarefa confidencial está autorizado a executar a tarefa e como você autentica que a pessoa é quem diz ser. A autorização (AuthZ) é o ato de conceder permissão a uma entidade de segurança autenticada para fazer algo. A autenticação (AuthN) é o ato de exigir credenciais legítimas de uma parte.
Meu aplicativo executa atividades de software arriscadas, como permitir que usuários carreguem ou baixem arquivos ou outros dados? Se o aplicativo executar atividades arriscadas, considere como o aplicativo protegerá os usuários de lidar com arquivos ou dados mal-intencionados.
Analisar os dez principais riscos do OWASP (Open Web Application Security Project)
Considere revisar os Dez principais riscos de segurança de aplicativo do OWASP. Os dez principais riscos do OWASP abordam os riscos de segurança críticos para aplicativos Web. A conscientização sobre esses riscos de segurança pode ajudar você a tomar decisões de design e de requisitos que minimizem esses riscos em seu aplicativo.
Pensar sobre os controles de segurança para evitar violações é importante. No entanto, você também desejará supor que uma violação ocorrerá. Pressupor que uma violação ocorrerá ajuda a responder algumas perguntas importantes sobre segurança com antecedência, para que elas não precisem ser respondidas em uma emergência:
- Como vou detectar um ataque?
- O que vou fazer se houver um ataque ou uma violação?
- Como vou me recuperar do ataque, como vazamento de dados ou adulteração?
Design
A fase de design é essencial para estabelecer melhores práticas para design e especificações funcionais. Ela também é essencial para a realização da análise de risco que ajuda a reduzir problemas de segurança e de privacidade em um projeto.
Quando você tem requisitos de segurança em vigor e usa conceitos de design seguro, pode evitar ou minimizar oportunidades para uma falha de segurança. Uma falha de segurança é uma supervisão no design do aplicativo que pode permitir que um usuário execute ações mal-intencionadas ou inesperadas após o lançamento do aplicativo.
Durante a fase de design, pense também em como você pode aplicar segurança em camadas; um nível de defesa não é necessariamente suficiente. O que acontece se um invasor ultrapassar o WAF (Firewall do Aplicativo Web)? Convém que você tenha outro controle de segurança para se defender contra esse ataque.
Com isso em mente, discutiremos os seguintes conceitos de design seguro e os controles de segurança que você deve abordar ao projetar aplicativos seguros:
- Usar uma biblioteca de codificação segura e uma estrutura de software.
- Verificar se há componentes vulneráveis.
- Usar a modelagem de ameaças durante o design do aplicativo.
- Reduzir a superfície de ataque.
- Adotar uma política de identidade como o perímetro de segurança primário.
- Exigir uma nova autenticação para transações importantes.
- Usar uma solução de gerenciamento de chaves para proteger chaves, credenciais e outros segredos.
- Proteger dados confidenciais.
- Implementar medidas à prova de falhas.
- Aproveitar o tratamento de erros e exceções.
- Usar o registro em log e os alertas.
Usar uma biblioteca de codificação segura e uma estrutura de software
Para o desenvolvimento, use uma biblioteca de codificação segura e uma estrutura de software que tenha segurança inserida. Os desenvolvedores podem usar recursos existentes e comprovados (criptografia, limpeza de entrada, codificação de saída, chaves ou cadeias de conexão e qualquer outra coisa que seja considerada um controle de segurança) em vez de desenvolver controles de segurança do zero. Isso ajuda a proteger contra falhas de implementação e design relacionadas à segurança.
Verifique se você está usando a versão mais recente da estrutura e todos os recursos de segurança que ela oferece. A Microsoft oferece um conjunto abrangente de ferramentas de desenvolvimento para que todos os desenvolvedores, trabalhando em qualquer plataforma ou linguagem de programação, forneçam aplicativos de nuvem. Você pode codificar com a linguagem de programação de sua escolha, escolhendo entre vários SDKs. Você pode aproveitar os IDEs (ambientes de desenvolvimento integrado) completos e editores que têm funcionalidades de depuração avançadas e suporte interno do Azure.
A Microsoft oferece várias linguagens de programação, estruturas e ferramentas que você pode usar para desenvolver aplicativos no Azure. Um exemplo é o Azure para desenvolvedores .NET e .NET Core. Para cada linguagem de programação e estrutura que oferecemos, você pode encontrar guias de início rápido, tutoriais e referências de API para ajudá-lo a começar rapidamente.
O Azure oferece vários serviços que você pode usar para hospedar sites e aplicativos Web. Esses serviços permitem que você desenvolva usando sua linguagem de programação favorita, seja ela .NET, .NET Core, Java, Ruby, Node.js, PHP ou Python. Os Aplicativos Web do Serviço de Aplicativo do Azure (aplicativos Web) são um desses serviços.
Os Aplicativos Web acrescentam o poder dos recursos do Microsoft Azure ao seu aplicativo. Eles incluem segurança, balanceamento de carga, dimensionamento automático e gerenciamento automatizado. Você pode também aproveitar suas funcionalidades de DevOps em Aplicativos Web, como gerenciamento de pacotes, ambientes de preparo, domínios personalizados, certificados TLS/SSL e implantação contínua desde o Azure DevOps, GitHub, Docker Hub e outras fontes.
O Azure oferece outros serviços que você pode usar para hospedar sites e aplicativos Web. Os Aplicativos Web são a melhor opção para a maioria dos cenários. Para uma arquitetura de microsserviços, considere o Azure Service Fabric. Se você precisar de mais controle sobre as VMs nas quais seu código é executado, considere as Máquinas Virtuais do Azure. Para saber mais sobre como escolher entre esses serviços do Azure, confira uma comparação entre o Serviço de Aplicativo, as Máquinas Virtuais, o Service Fabric e os Serviços de Nuvem do Azure.
Aplicar atualizações aos componentes
Para evitar vulnerabilidades, você deve inventariar continuamente os componentes do lado do cliente e do servidor (por exemplo, estruturas e bibliotecas) e as respectivas dependências para atualizações. Novas vulnerabilidades e versões de software atualizadas são lançadas continuamente. Verifique se você tem um plano em andamento para monitorar, fazer triagem e aplicar atualizações ou alterações de configuração às bibliotecas e aos componentes que você usa.
Confira a página Open Web Application Security Project (OWASP) em usando componentes com vulnerabilidades conhecidas para obter sugestões de ferramenta. Você também pode assinar alertas por email para vulnerabilidades de segurança relacionadas aos componentes que você usa.
Usar a modelagem de ameaças durante o design do aplicativo
A modelagem de ameaças é o processo de identificar possíveis ameaças à segurança para negócios e aplicativos e garantir que as atenuações adequadas estejam em vigor. O SDL especifica que as equipes devem se envolver na modelagem de ameaças durante a fase de design, na qual a resolução de possíveis problemas é relativamente fácil e econômica. O uso da modelagem de ameaças na fase de design pode reduzir muito o custo total de desenvolvimento.
Para ajudar a facilitar o processo de modelagem de ameaças, projetamos o Threat Modeling Tool do SDL, destinado a pessoas não especialistas em segurança. Essa ferramenta facilita a modelagem de ameaças para todos os desenvolvedores, fornecendo diretrizes claras sobre como criar e analisar modelos de ameaça.
A modelagem do design do aplicativo e a enumeração das ameaças STRIDE (falsificação, adulteração, repúdio, divulgação de informações confidenciais, negação de serviço e elevação de privilégio) em todos os limites de confiança foi comprovada como uma forma eficaz de detectar erros de design nas fases iniciais. A tabela a seguir lista as ameaças STRIDE e fornece algumas mitigações de exemplo que usam recursos fornecidos pelo Azure. Essas mitigações não funcionam em todas as situações.
Ameaça | Propriedade de segurança | Possível mitigação para a plataforma Azure |
---|---|---|
Falsificação | Autenticação | Exigir conexões HTTPS. |
Adulteração | Integridade | Validar certificados SSL/TLS. Os aplicativos que usarem SSL/TLS precisarão verificar os certificados X.509 das entidades às quais se conectarem. Usar certificados do Azure Key Vault para gerenciar seus certificados X509. |
Repúdio | Não repúdio | Habilitar o monitoramento e diagnóstico do Azure. |
Divulgação de informações confidenciais | Confidencialidade | Criptografar dados confidenciais inativos e em trânsito. |
Negação de serviço | Disponibilidade | Monitorar as métricas de desempenho quanto a possíveis condições de negação de serviço. Implementar filtros de conexão. A Proteção contra DDoS do Azure, combinada com as práticas recomendadas de design de aplicativo, oferece defesa contra ataques de DDoS. |
Elevação de privilégio | Autorização | Usar o Microsoft Entra ID Privileged Identity Management. |
Reduzir a superfície de ataque
Uma superfície de ataque é a soma total de onde possíveis vulnerabilidades podem ocorrer. Neste artigo, nos concentramos na superfície de ataque de um aplicativo. O foco é proteger um aplicativo contra ataques. Uma forma simples e rápida de minimizar a superfície de ataque é remover recursos e códigos não utilizados do aplicativo. Quanto menor o aplicativo, menor a superfície de ataque. Por exemplo, remova:
- Código para recursos que você ainda não lançou.
- Código de suporte à depuração.
- Adaptadores de rede e protocolos que não são usados ou que foram preteridos.
- Máquinas virtuais e outros recursos que você não está usando.
Fazer uma limpeza regular de seus recursos removendo o código não utilizado é uma ótima maneira de garantir que haja menos oportunidades para ataques maliciosos.
Uma forma mais detalhada e aprofundada de reduzir a superfície de ataque é concluir uma análise da superfície de ataque. Uma análise da superfície de ataque ajuda a mapear as partes de um sistema que precisam ser examinadas e testadas quanto a vulnerabilidades de segurança.
A finalidade de uma análise da superfície de ataque é entender as áreas de risco em um aplicativo para que os desenvolvedores e especialistas em segurança saibam quais partes do aplicativo estão vulneráveis a ataques. Em seguida, você pode encontrar maneiras de minimizar esse potencial, acompanhar quando e como a superfície de ataque muda e o que isso significa de uma perspectiva de risco.
Uma análise da superfície de ataque ajuda você a identificar:
- Funções e partes do sistema você precisa examinar e testar quanto a vulnerabilidades de segurança.
- Áreas de código de risco alto que exigem proteção de defesa avançada (partes do sistema que você precisa defender).
- Quando você altera a superfície de ataque e precisa atualizar uma avaliação de ameaça.
Para reduzir as oportunidades de invasores explorarem um possível ponto fraco ou uma vulnerabilidade, é necessário que você analise minuciosamente a superfície de ataque geral do aplicativo. Isso também inclui a desabilitação ou restrição do acesso aos serviços do sistema, a aplicação do princípio de privilégios mínimos e o emprego de defesas em camadas sempre que possível.
Abordamos a realização de uma análise da superfície de ataque durante a fase de verificação do SDL.
Observação
Qual é a diferença entre a modelagem de ameaças e a análise da superfície de ataque? A modelagem de ameaças é o processo de identificar possíveis ameaças à segurança ao aplicativo e garantir que as atenuações adequadas contra as ameaças estejam em vigor. A análise da superfície de ataque identifica áreas de código de risco alto que estão vulneráveis a ataques. Isso envolve encontrar maneiras de defender áreas de risco alto do aplicativo e revisar e testar essas áreas de código antes de implantar o aplicativo.
Adotar uma política de identidade como o perímetro de segurança primário
Quando você projeta aplicativos de nuvem, é importante expandir seu foco de perímetro de segurança de uma abordagem centrada na rede para uma abordagem centrada em identidade. Historicamente, o perímetro de segurança local primário era a rede de uma organização. A maioria dos designs de segurança locais usa a rede como o eixo de segurança primário. Para aplicativos de nuvem, você obtém resultados melhores considerando a identidade como o parâmetro de segurança primário.
Coisas que você pode fazer para desenvolver uma abordagem centrada em identidade para o desenvolvimento de aplicativos Web:
- Impor a autenticação multifator para os usuários.
- Use plataformas de autorização e autenticação fortes.
- Aplicar o princípio de privilégios mínimos.
- Implementar o acesso Just-In-Time.
Impor a autenticação multifator para os usuários
Use a autenticação de dois fatores. A autenticação de dois fatores é o padrão atual para autenticação e autorização porque evita os pontos fracos de segurança inerentes nos tipos de autenticação de nome de usuário e senha. O acesso às interfaces de gerenciamento do Azure (portal do Azure/PowerShell remoto) e aos serviços voltados para o cliente deve ser projetado e configurado para usar a autenticação multifator do Microsoft Entra.
Usar plataformas de autorização e autenticação fortes
Use os mecanismos de autenticação e autorização fornecidos pela plataforma em vez de código personalizado. Isso ocorre porque o desenvolvimento de código de autenticação personalizado pode ser propenso a erros. O código comercial (por exemplo, da Microsoft) é amplamente analisado quanto à segurança, com frequência. O Microsoft Entra ID (Microsoft Entra ID) é a solução do Azure para gerenciamento de identidade e acesso. Essas ferramentas e serviços do Microsoft Entra ajudam com o desenvolvimento seguro:
A plataforma de identidade da Microsoft é um conjunto de componentes que os desenvolvedores usam para criar aplicativos que conectam usuários com segurança. A plataforma ajuda os desenvolvedores que estão criados aplicativos de locatário único, LOB (linha de negócios) e desenvolvedores que desejam desenvolver aplicativos multilocatários. Além de entrada básica, os aplicativos criados usando a plataforma de identidade da Microsoft podem chamar APIs da Microsoft e APIs personalizadas. A plataforma de identidade da Microsoft dá suporte a protocolos padrão do setor, como OAuth 2.0 e OpenID Connect.
O Azure Active Directory B2C (Azure AD B2C) é um serviço de gerenciamento de identidade usado para personalizar e controlar como os clientes se inscrevem, entrar e gerenciam os perfis deles ao usar seus aplicativos. Isso inclui aplicativos desenvolvidos para iOS, Android e .NET, entre outros. O Azure AD B2C habilita essas ações e, simultaneamente, protege as identidades dos seus clientes.
Aplicar o princípio de privilégios mínimos
O conceito de privilégios mínimos significa fornecer aos usuários o nível preciso de acesso e controle de que eles precisam para realizar seus trabalhos e nada mais.
Um desenvolvedor de software precisa de direitos de administrador de domínio? Um assistente administrativo precisaria de acesso a controles administrativos no próprio PC? A avaliação do acesso ao software não é diferente. Se você usar o Controle de Acesso Baseado em Função do Azure (RBAC do Azure) para fornecer aos usuários diferentes habilidades e autoridade em seu aplicativo, não permitirá que todos tenham acesso a tudo. Limitando o acesso ao que é necessário para cada função, você limita o risco de um problema de segurança ocorrer.
Verifique se o aplicativo impõe privilégios mínimos nos padrões de acesso.
Observação
As regras de privilégios mínimos precisam ser aplicadas ao software e às pessoas que criam o software. Os desenvolvedores de software poderão ser um grande risco para a segurança de TI se receberem muito acesso. Se um desenvolvedor for mal-intencionado ou receber um nível de acesso elevado demais, as consequências poderão ser severas. Recomendamos que as regras de privilégios mínimos sejam aplicadas aos desenvolvedores em todo o ciclo de vida do desenvolvimento.
Implementar o acesso Just-In-Time
Implemente o acesso JIT (Just-In-Time) para reduzir ainda mais o tempo de exposição dos privilégios. Use o Microsoft Entra Privileged Identity Management para:
- Fornecer aos usuários apenas as permissões de que eles precisam, com acesso JIT.
- Atribua funções por uma duração reduzida com confiança de que os privilégios são revogados automaticamente.
Exigir uma nova autenticação para transações importantes
A solicitação entre sites forjada (também conhecida como XSRF ou CSRF) é um ataque contra aplicativos Web hospedados, no qual um site mal-intencionado pode influenciar a interação entre um navegador cliente e um aplicativo Web que confia nesse navegador. Os ataques de solicitação entre sites forjada são possíveis porque os navegadores da Web enviam alguns tipos de tokens de autenticação automaticamente com cada solicitação a um site. Essa forma de exploração também é conhecida como ataque de um clique ou montagem de sessão, pois o ataque aproveita a sessão autenticada anteriormente pelo usuário.
A melhor maneira de se defender contra esse tipo de ataque é pedir ao usuário algo que apenas o usuário possa fornecer antes de cada transação importante, como uma compra, desativação de conta ou alteração de senha. Você pode pedir ao usuário para digitar novamente a senha, completar um captcha ou enviar um token secreto que apenas o usuário teria. A abordagem mais comum é o token secreto.
Usar uma solução de gerenciamento de chaves para proteger chaves, credenciais e outros segredos
Perder chaves e credenciais é um problema comum. A única coisa pior do que perder as chaves e as credenciais é quando um terceiro não autorizado tem acesso a elas. Os invasores podem aproveitar as técnicas automatizadas e manuais para encontrar chaves e segredos armazenados em repositórios de código como o GitHub. Não coloque chaves e segredos nesses repositórios de código públicos nem em nenhum outro servidor.
Sempre coloque suas chaves, certificados, segredos e cadeias de conexão em uma solução de gerenciamento de chaves. Você pode usar uma solução centralizada em que as chaves e os segredos são armazenados em HSMs (módulos de segurança de hardware). O Azure fornece a você um HSM na nuvem com o Azure Key Vault.
O Key Vault é um repositório de segredos: um serviço de nuvem centralizado para armazenar segredos do aplicativo. O Key Vault mantém os dados confidenciais seguros, mantendo os segredos do aplicativo em uma localização central e fornecendo acesso seguro, controle de permissões e log de acesso.
Os segredos são armazenados em cofres individuais. Cada cofre tem políticas de segurança e configuração próprias para controlar o acesso. Você acessa os seus dados por meio de uma API REST ou por meio de um SDK de cliente disponível para a maioria das linguagens de programação.
Importante
O Azure Key Vault foi projetado para armazenar segredos de configuração para aplicativos para servidores. Ele não se destina ao armazenamento de dados que pertencem aos usuários do aplicativo. Isso é refletido em suas características de desempenho, na API e no modelo de custo.
Os dados do usuário devem ser armazenados em outro lugar, como em uma instância do Banco de Dados SQL do Azure com TDE (Transparent Data Encryption) ou em uma conta de armazenamento que usa a Criptografia do Serviço de Armazenamento do Azure. Os segredos usados pelo aplicativo para acessar esses armazenamentos de dados podem ser mantidos no Azure Key Vault.
proteger dados confidenciais
A proteção dos dados é uma parte essencial da estratégia de segurança. Classificar seus dados e identificar as suas necessidades de proteção de dados ajuda a projetar o seu aplicativo com a segurança de dados em mente. Classificar (categorizar) dados armazenados por sensibilidade e impacto nos negócios ajuda os desenvolvedores a determinar os riscos associados aos dados.
Rotule todos os dados aplicáveis como confidenciais ao projetar seus formatos de dados. Verifique se o aplicativo trata os dados aplicáveis como confidenciais. Estas práticas podem ajudar você a proteger os seus dados confidenciais:
- Usar criptografia.
- Evitar segredos de codificação rígida como chaves e senhas.
- Assegurar que os controles de acesso e a auditoria estejam em vigor.
Usar criptografia
A proteção dos dados deve ser uma parte essencial da estratégia de segurança. Se os dados estiverem armazenados em um banco de dados ou se forem movidos entre localizações, use a criptografia de dados inativos (enquanto no banco de dados) e a criptografia de dados em trânsito (a caminho do e para o usuário, o banco de dados, uma API ou um ponto de extremidade de serviço). Recomendamos que você use sempre protocolos SSL/TLS para a troca de dados. Verifique se você está usando a versão mais recente do TLS para criptografia (atualmente, é a versão 1.2).
Evitar hard-coding
Algumas coisas nunca devem ser embutidas em código em seu software. Alguns exemplos são nomes de host ou endereços IP, URLs, endereços de email, nomes de usuário, senhas, chaves de conta de armazenamento e outras chaves de criptografia. Considere a implementação de requisitos em relação ao que pode ou não ser embutido em seu código, incluindo essas informações nas seções de comentário do seu código.
Quando você colocar comentários em seu código, não salve nenhuma informação confidencial. Isso inclui seu endereço de email, senhas, cadeias de conexão, informações sobre o aplicativo que só seriam conhecidas por alguém em sua organização e qualquer outra coisa que possa dar a um invasor uma vantagem para atacar o aplicativo ou a organização.
Basicamente, suponha que tudo em seu projeto de desenvolvimento seja de conhecimento público quando ele for implantado. Evite incluir dados confidenciais de qualquer tipo no projeto.
Anteriormente, discutimos o Azure Key Vault. Você pode usar o Key Vault para armazenar segredos como chaves e senhas, em vez de embuti-los no código. Ao usar o Key Vault em combinação com identidade gerenciadas para recursos do Azure, o aplicativo Web do Azure pode acessar valores secretos de configuração com facilidade e segurança sem a necessidade de armazenar nenhum segredo na configuração ou no controle do código-fonte. Para saber mais, confira Gerenciar segredos em seus aplicativos de servidor com o Azure Key Vault.
Implementar medidas de prevenção contra falhas
O aplicativo precisa ser capaz de tratar erros que ocorrem durante a execução de uma forma consistente. O aplicativo deve detectar todos os erros e falhar de maneira segura ou ser fechado.
Você também deve garantir que os erros sejam registrados com contexto de usuário suficiente para identificar atividades suspeitas ou mal-intencionadas. Os logs devem ser retidos por um tempo suficiente para permitir uma análise forense posterior. Os logs devem estar em um formato que seja facilmente consumido por uma solução de gerenciamento de logs. Certifique-se de que os alertas relacionados à segurança sejam disparados. O registro em log e o monitoramento insuficientes permitem que os invasores ataquem mais sistemas e mantenham a persistência.
Aproveitar o tratamento de erros e exceções
Implementar um tratamento de erros e exceções correto é uma parte importante da codificação defensiva. O tratamento de erros e exceções é essencial para tornar um sistema confiável e seguro. Equívocos no tratamento de erro podem levar a tipos diferentes de vulnerabilidades de segurança, como vazamento de informações para invasores e fornecimento de informações adicionais aos invasores sobre sua plataforma e design.
Verifique se:
Você trata exceções de maneira centralizada para evitar blocos try/catch duplicados no código.
Todos os comportamentos inesperados são tratados dentro do aplicativo.
As mensagens exibidas aos usuários não vazam dados críticos, mas fornecem informações suficientes para explicar o problema.
As exceções são registradas e fornecem informações suficientes para que as equipes forenses ou de resposta a incidentes investiguem.
Os Aplicativos Lógicos do Azure fornecem uma experiência de primeira classe para lidar com erros e exceções causadas por sistemas dependentes. Você pode usar os Aplicativos Lógicos do Azure para automatizar tarefas e processos para a integração de aplicativos, dados, sistemas e serviços entre empresas e organizações.
Usar o registro em log e os alertas
Registre seus problemas de segurança para investigações de segurança e dispare alertas sobre problemas para garantir que as pessoas saibam sobre esses problemas em tempo hábil. Habilite a auditoria e log em todos os componentes. Os logs de auditoria devem capturar o contexto do usuário e identificar todos os eventos importantes.
Verifique se você não registrou em log nenhum dado confidencial que um usuário tenha enviado ao seu site. Exemplos de dados confidenciais:
- Credenciais de usuário
- Número do seguro social ou outras informações de identificação
- Números de cartão de crédito ou outras informações financeiras
- Informações de integridade
- As chaves particulares ou outros dados que podem ser usados para descriptografar informações criptografadas
- Informações do sistema ou aplicativo que podem ser usadas para atacar com mais eficiência o aplicativo
Verifique se o aplicativo monitora eventos de gerenciamento de usuário, como logons de usuário bem-sucedidos e com falha, redefinições de senha, alteração de senha, bloqueio de conta e registro de usuário. O registro desses eventos ajuda você a detectar comportamentos potencialmente suspeitos e reagir a eles. Ele também permite a coleta de dados de operações, como quem está acessando o aplicativo.
Próximas etapas
Nos artigos a seguir, recomendamos os controles de segurança e as atividades que podem ajudá-lo a desenvolver e implantar aplicativos seguros.