Projetar aplicativos seguros no Azure

Neste artigo, apresentamos atividades e controles de segurança a serem considerados ao projetar aplicativos para a nuvem. São abordados recursos de treinamento, juntamente com perguntas e conceitos de segurança a serem considerados durante as fases de requisitos e design do Microsoft Security Development Lifecycle (SDL). O objetivo é ajudá-lo a definir atividades e serviços do Azure que você pode usar para projetar um aplicativo mais seguro.

As seguintes fases do SDL são abordadas neste artigo:

  • Formação
  • Requisitos
  • Estruturar

Formação

Antes de começar a desenvolver seu aplicativo na nuvem, reserve um tempo para entender a segurança e a privacidade no Azure. Ao executar esta 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 cenário 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 práticas recomendadas de segurança no Azure:

  • O guia do desenvolvedor do Azure mostra como começar a usar o Azure. O guia mostra quais serviços você pode usar para executar seus aplicativos, armazenar seus dados, incorporar inteligência, criar aplicativos IoT e implantar suas soluções de forma mais eficiente e segura.

  • Guia de introdução para desenvolvedores do Azure fornece informações essenciais para desenvolvedores que estão procurando começar a usar a plataforma Azure para suas necessidades de desenvolvimento.

  • SDKs e ferramentas descreve as ferramentas que estão disponíveis no Azure.

  • Os Serviços de DevOps do Azure fornecem ferramentas de colaboração de desenvolvimento. As ferramentas incluem pipelines de alto desempenho, repositórios Git gratuitos, quadros Kanban configuráveis e extensos testes de carga automatizados e baseados em nuvem. O Centro de Recursos de DevOps combina nossos recursos para aprender práticas de DevOps, controle de versão do Git, métodos ágeis, como trabalhamos com DevOps na Microsoft e como você pode avaliar sua própria progressão de DevOps.

  • Os cinco principais itens de segurança a considerar antes de enviar para a produção mostram-lhe como ajudar a proteger as suas aplicações Web no Azure e a proteger as suas aplicações contra os ataques mais comuns e perigosos a aplicações Web.

  • O Secure DevOps Kit for Azure é uma coleção de scripts, ferramentas, extensões e automações que atendem às necessidades abrangentes de assinatura do Azure e segurança de recursos das equipes de DevOps que usam automação extensiva. O Kit de DevOps Seguro para Azure pode mostrar como integrar facilmente a segurança em seus fluxos de trabalho de DevOps nativos. O kit aborda ferramentas como testes de verificação de segurança (SVTs), que podem ajudar os desenvolvedores a escrever código seguro e testar a configuração segura de seus aplicativos em nuvem nos estágios iniciais de codificação e desenvolvimento.

  • Práticas recomendadas e padrões de segurança do Azure - Uma coleção de práticas recomendadas de segurança para usar ao projetar, implantar e gerenciar soluções de nuvem usando o Azure. As orientações destinam-se a ser um recurso para profissionais de TI. Isso pode incluir designers, arquitetos, desenvolvedores e testadores que criam e implantam soluções seguras do Azure.

Requisitos

A fase de definição de requisitos é uma etapa crucial para definir o que é seu aplicativo e o que ele faz quando é lançado. A fase de requisitos também é um momento para pensar nos controles de segurança que você cria em seu aplicativo. Durante essa fase, você também começa as etapas que executa em todo o SDL para garantir que libere e implante um aplicativo seguro.

Considere questões de segurança e privacidade

Esta fase é o melhor momento para considerar questões 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 a:

  • Compreender os riscos associados a problemas de segurança.
  • Identifique e corrija bugs de segurança durante o desenvolvimento.
  • Aplique os níveis estabelecidos de segurança e privacidade em todo o projeto.

Ao escrever os requisitos para seu aplicativo, considere os controles de segurança que podem ajudar a manter seu aplicativo e seus dados seguros.

Faça perguntas de segurança

Faça perguntas de segurança como:

  • A minha aplicação contém dados confidenciais?

  • Meu aplicativo coleta ou armazena dados que exigem que eu cumpra os padrões do setor e programas de conformidade, como o Federal Financial Institution Examination Council (FFIEC) ou o Payment Card Industry Data Security Standards (PCI DSS)?

  • A minha aplicação recolhe ou contém dados pessoais ou de clientes sensíveis que podem ser utilizados, isoladamente ou com outras informações, para identificar, contactar ou localizar uma única pessoa?

  • A minha candidatura recolhe ou contém dados que podem ser utilizados para aceder a informações médicas, educacionais, financeiras ou laborais de um indivíduo? Identificar a sensibilidade de seus dados durante a fase de requisitos ajuda a classificar seus dados e identificar o método de proteção de dados usado para seu aplicativo.

  • Onde e como são armazenados os meus dados? Considere como você monitora os serviços de armazenamento que seu aplicativo usa para quaisquer alterações inesperadas (como tempos de resposta mais lentos). Você é capaz de influenciar o registro para coletar dados mais detalhados e analisar um problema em profundidade?

  • A minha candidatura está disponível ao público (na Internet) ou apenas internamente? Se a sua aplicação estiver disponível ao público, como proteger os dados que possam ser recolhidos de serem utilizados de forma errada? Se o seu aplicativo estiver disponível apenas internamente, considere quem em sua organização deve ter acesso ao aplicativo e por quanto tempo eles devem ter acesso.

  • Você entende seu modelo de identidade antes de começar a projetar seu aplicativo? Você pode determinar que os usuários são quem dizem ser e o que um usuário está autorizado a fazer?

  • A minha aplicação executa tarefas sensíveis ou importantes (como transferir dinheiro, desbloquear portas ou entregar medicamentos)? Considere como você valida que o usuário que executa uma tarefa confidencial está autorizado a executar a tarefa e como você autentica que a pessoa é quem ela diz ser. Autorização (AuthZ) é o ato de conceder a uma entidade de segurança autenticada permissão para fazer algo. A autenticação (AuthN) é o ato de desafiar uma parte por credenciais legítimas.

  • Meu aplicativo executa alguma atividade de software arriscada, como permitir que os usuários carreguem ou baixem arquivos ou outros dados? Se seu aplicativo executa atividades arriscadas, considere como seu aplicativo protege os usuários contra o tratamento de arquivos ou dados mal-intencionados.

Revisão OWASP top 10

Considere rever os 10 principais riscos de segurança de aplicativos do OWASP. O OWASP Top 10 aborda riscos críticos de segurança para aplicações web. A consciência desses riscos de segurança pode ajudá-lo a tomar decisões de requisitos e design que minimizem esses riscos em seu aplicativo.

Pensar em controles de segurança para evitar violações é importante. No entanto, você também quer assumir que uma violação ocorrerá. Assumir uma violação ajuda a responder a algumas perguntas importantes sobre segurança com antecedência, para que elas não precisem ser respondidas em uma emergência:

  • Como vou detetar um ataque?
  • O que vou fazer se houver um ataque ou violação?
  • Como vou me recuperar do ataque, como vazamento ou adulteração de dados?

Estruturar

A fase de projeto é crítica para estabelecer as melhores práticas de projeto e especificações funcionais. Também é fundamental para realizar análises de risco que ajudam a mitigar problemas de segurança e privacidade em todo o projeto.

Quando você tem requisitos de segurança em vigor e usa conceitos de design seguro, você pode evitar ou minimizar as oportunidades de 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 maliciosas ou inesperadas depois que seu aplicativo é lançado.

Durante a fase de projeto, pense também em como você pode aplicar a segurança em camadas; Um nível de defesa não é necessariamente suficiente. O que acontece se um invasor passar pelo firewall do aplicativo Web (WAF)? Você quer outro controle de segurança para se defender contra esse ataque.

Com isso em mente, discutimos os seguintes conceitos de design seguro e os controles de segurança que você deve abordar ao projetar aplicativos seguros:

  • Use uma biblioteca de codificação segura e uma estrutura de software.
  • Analise se há componentes vulneráveis.
  • Use a modelagem de ameaças durante o design do aplicativo.
  • Reduza a superfície de ataque.
  • Adote uma política de identidade como o perímetro de segurança principal.
  • Exigir reautenticação para transações importantes.
  • Use uma solução de gerenciamento de chaves para proteger chaves, credenciais e outros segredos.
  • Proteja dados confidenciais.
  • Implementar medidas à prova de falhas.
  • Aproveite o tratamento de erros e exceções.
  • Use o registro em log e alertas.

Use 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 incorporada. Os desenvolvedores podem usar recursos existentes e comprovados (criptografia, saneamento 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 projeto e implementação relacionadas à segurança.

Certifique-se de que você está usando a versão mais recente da sua estrutura e todos os recursos de segurança que estão disponíveis na estrutura. A Microsoft oferece um conjunto abrangente de ferramentas de desenvolvimento para todos os desenvolvedores, trabalhando em qualquer plataforma ou linguagem, para fornecer aplicativos em nuvem. Você pode codificar com o idioma de sua escolha, escolhendo entre vários SDKs. Você pode aproveitar os ambientes de desenvolvimento integrado (IDEs) e editores completos que têm recursos avançados de depuração e suporte interno do Azure.

A Microsoft oferece várias linguagens, 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 e estrutura que oferecemos, você pode encontrar inícios rápidos, 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 em sua linguagem favorita, seja .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 adicionam o poder do Microsoft Azure ao seu aplicativo. Inclui segurança, balanceamento de carga, dimensionamento automático e gerenciamento automatizado. Você também pode aproveitar os recursos de DevOps em Aplicativos Web, como gerenciamento de pacotes, ambientes de preparação, domínios personalizados, certificados SSL/TLS e implantação contínua do Azure DevOps, GitHub, Docker Hub e outras fontes.

O Azure oferece outros serviços que você pode usar para hospedar sites e aplicativos Web. Para a maioria dos cenários, as Web Apps são a melhor escolha. Para uma arquitetura de microsserviços, considere o Azure Service Fabric. Se precisar de mais controlo sobre as VMs em que o seu código é executado, considere as Máquinas Virtuais do Azure. Para obter mais informações sobre como escolher entre esses serviços do Azure, consulte uma comparação do Serviço de Aplicativo do Azure, Máquinas Virtuais, Service Fabric e Serviços de Nuvem.

Aplicar atualizações aos componentes

Para evitar vulnerabilidades, você deve inventariar continuamente os componentes do lado do cliente e do lado do servidor (por exemplo, estruturas e bibliotecas) e suas dependências para atualizações. Novas vulnerabilidades e versões de software atualizadas são lançadas continuamente. Certifique-se de ter um plano contínuo para monitorar, triar e aplicar atualizações ou alterações de configuração às bibliotecas e componentes que você usa.

Consulte a página Open Web Application Security Project (OWASP) sobre o uso de componentes com vulnerabilidades conhecidas para obter sugestões de ferramentas. Também pode subscrever alertas por e-mail para vulnerabilidades de segurança relacionadas com componentes que utiliza.

Use 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 de seus negócios e aplicativos e, em seguida, garantir que as mitigações adequadas estejam em vigor. O SDL especifica que as equipes devem se envolver na modelagem de ameaças durante a fase de projeto, quando a resolução de possíveis problemas for relativamente fácil e econômica. O uso da modelagem de ameaças na fase de projeto pode reduzir significativamente o custo total de desenvolvimento.

Para ajudar a facilitar o processo de modelagem de ameaças, projetamos a SDL Threat Modeling Tool com especialistas não relacionados à segurança em mente. Essa ferramenta facilita a modelagem de ameaças para todos os desenvolvedores, fornecendo orientações claras sobre como criar e analisar modelos de ameaças.

Modelar o design do aplicativo e enumerar ameaças STRIDE - falsificação, adulteração, repúdio, divulgação de informações, negação de serviço e elevação de privilégio - em todos os limites de confiança provou ser uma maneira eficaz de detetar erros de projeto antecipadamente. A tabela a seguir lista as ameaças STRIDE e fornece alguns exemplos de atenuações que usam recursos fornecidos pelo Azure. Essas mitigações não funcionam em todas as situações.

Ameaça Propriedade de segurança Potencial mitigação da plataforma Azure
Spoofing Autenticação Requer conexões HTTPS.
Adulteração Integridade Valide certificados SSL/TLS. Os aplicativos que usam SSL/TLS devem verificar completamente os certificados X.509 das entidades às quais se conectam. Use os certificados do Azure Key Vault para gerenciar seus certificados x509.
Rejeição Não rejeição Habilite o monitoramento e o diagnóstico do Azure.
Divulgação de Informações Confidencialidade Criptografe dados confidenciais em repouso e em trânsito.
Negação de Serviço Disponibilidade Monitore métricas de desempenho para 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 aplicativos, fornece defesa contra ataques DDoS.
Elevação de Privilégios Autorização Use o Microsoft Entra ID Privileged Identity Management.

Reduza a sua superfície de ataque

Uma superfície de ataque é a soma total de onde as vulnerabilidades potenciais podem ocorrer. Neste artigo, nos concentramos na superfície de ataque de um aplicativo. O foco é proteger um aplicativo contra ataques. Uma maneira simples e rápida de minimizar sua superfície de ataque é remover recursos e código não utilizados do seu aplicativo. Quanto menor for a sua aplicação, menor será a sua superfície de ataque. Por exemplo, remova:

  • Código para recursos que você ainda não lançou.
  • Depurando código de suporte.
  • Interfaces 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 e garantir que você remova o código não utilizado são ótimas maneiras de garantir que haja menos oportunidades para agentes mal-intencionados atacarem.

Uma maneira mais detalhada e aprofundada de reduzir sua 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 revisadas e testadas quanto a vulnerabilidades de segurança.

O objetivo de uma análise de superfície de ataque é entender as áreas de risco em um aplicativo para que os desenvolvedores e especialistas em segurança estejam cientes de quais partes do aplicativo estão abertas a ataques. Em seguida, você pode encontrar maneiras de minimizar esse potencial, rastrear quando e como a superfície de ataque muda e o que isso significa de uma perspetiva de risco.

Uma análise da superfície de ataque ajuda a identificar:

  • Funções e partes do sistema que você precisa para revisar e testar vulnerabilidades de segurança.
  • Áreas de código de alto risco que exigem proteção de defesa profunda (partes do sistema que você precisa defender).
  • Quando você altera a superfície de ataque e precisa atualizar uma avaliação de ameaça.

Reduzir as oportunidades para os invasores explorarem um potencial ponto fraco ou vulnerabilidade exige que você analise minuciosamente a superfície de ataque geral do seu aplicativo. Também inclui desabilitar ou restringir o acesso aos serviços do sistema, aplicar o princípio do menor privilégio e empregar defesas em camadas sempre que possível.

Discutimos a realização de uma revisão da superfície de ataque durante a fase de verificação do SDL.

Nota

Qual é a diferença entre modelagem de ameaças e análise de superfície de ataque? A modelagem de ameaças é o processo de identificar possíveis ameaças à segurança de seu aplicativo e garantir que as mitigações adequadas contra as ameaças estejam em vigor. A análise da superfície de ataque identifica áreas de código de alto risco que estão abertas a ataques. Isso envolve encontrar maneiras de defender áreas de alto risco do seu 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

Ao projetar aplicativos na nuvem, é importante expandir o foco do perímetro de segurança de uma abordagem centrada na rede para uma abordagem centrada na identidade. Historicamente, o principal perímetro de segurança local era a rede de uma organização. A maioria dos projetos de segurança local usa a rede como o principal pivô de segurança. Para aplicativos em nuvem, você fica mais bem servido ao considerar a identidade como o principal perímetro de segurança.

Coisas que você pode fazer para desenvolver uma abordagem centrada na identidade para desenvolver aplicativos Web:

  • Imponha a autenticação multifator para os usuários.
  • Use plataformas de autenticação e autorização fortes.
  • Aplicar o princípio do menor privilégio.
  • Implemente o acesso just-in-time.

Impor autenticação multifator para 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 as falhas de segurança inerentes aos 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 autenticação e autorização fortes

Use 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) geralmente é extensivamente revisado quanto à segurança. O Microsoft Entra ID (Microsoft Entra ID) é a solução do Azure para gerenciamento de identidade e acesso. Estas ferramentas e serviços do Microsoft Entra ajudam no desenvolvimento seguro:

  • A plataforma de identidade da Microsoft é um conjunto de componentes que os desenvolvedores usam para criar aplicativos que entram com segurança nos usuários. A plataforma auxilia desenvolvedores que estão criando aplicativos de linha de negócios (LOB) de locatário único e desenvolvedores que desejam desenvolver aplicativos multilocatário. Além do início de sessão básico, as aplicações criadas utilizando a plataforma de identidade da Microsoft podem chamar APIs da Microsoft e APIs personalizadas. A plataforma de identidade da Microsoft suporta protocolos padrão do setor, como OAuth 2.0 e OpenID Connect.

  • O Azure Ative Directory B2C (Azure AD B2C) é um serviço de gerenciamento de identidades que você usa para personalizar e controlar como os clientes se inscrevem, entram e gerenciam seus perfis quando usam seus aplicativos. Isso inclui aplicativos que são desenvolvidos para iOS, Android e .NET, entre outros. O Azure AD B2C habilita essas ações enquanto protege as identidades dos clientes.

Aplicar o princípio do menor privilégio

O conceito de menor privilégio significa dar aos usuários o nível preciso de acesso e controle de que precisam para fazer seu trabalho e nada mais.

Um desenvolvedor de software precisaria de direitos de administrador de domínio? Um assistente administrativo precisaria ter acesso aos controles administrativos em seu computador pessoal? Avaliar o acesso ao software não é diferente. Se você usar o controle de acesso baseado em função do Azure (Azure RBAC) para dar aos usuários diferentes habilidades e autoridade em seu aplicativo, não daria a todos acesso a tudo. Ao limitar o acesso ao que é necessário para cada função, você limita o risco de ocorrência de um problema de segurança.

Certifique-se de que seu aplicativo imponha privilégios mínimos em todos os seus padrões de acesso.

Nota

As regras de menor privilégio precisam ser aplicadas ao software e às pessoas que o criam. Os desenvolvedores de software podem ser um grande risco para a segurança de TI se tiverem muito acesso. As consequências podem ser graves se um desenvolvedor tiver intenção maliciosa ou tiver acesso excessivo. Recomendamos que as regras de menor privilégio sejam aplicadas aos desenvolvedores durante todo o ciclo de vida do desenvolvimento.

Implementar acesso just-in-time

Implemente o acesso just-in-time (JIT) para reduzir ainda mais o tempo de exposição dos privilégios. Use o Microsoft Entra Privileged Identity Management para:

  • Dê aos usuários as permissões de que eles precisam apenas de JIT.
  • Atribua funções por um período reduzido com a confiança de que os privilégios são revogados automaticamente.

Exigir reautenticação para transações importantes

A falsificação de solicitação entre sites (também conhecida como XSRF ou CSRF) é um ataque contra aplicativos hospedados na Web no qual um aplicativo Web mal-intencionado influencia a interação entre um navegador cliente e um aplicativo Web que confia nesse navegador. Os ataques de falsificação de solicitação entre sites são possíveis porque os navegadores da Web enviam alguns tipos de tokens de autenticação automaticamente a cada solicitação para um site. Essa forma de exploração também é conhecida como ataque de um clique ou condução de sessão porque o ataque tira proveito da sessão previamente autenticada do usuário.

A melhor maneira de se defender contra esse tipo de ataque é pedir ao usuário algo que apenas o usuário pode 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 redigitar sua senha, completar um captcha ou enviar um token secreto que apenas o usuário teria. A abordagem mais comum é o token secreto.

Use 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 suas chaves e credenciais é ter uma parte não autorizada obter acesso a elas. Os atacantes podem tirar proveito de 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 ou em qualquer 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 na qual chaves e segredos são armazenados em módulos de segurança de hardware (HSMs). O Azure fornece um HSM na nuvem com o Azure Key Vault.

O Key Vault é um armazenamento secreto: é um serviço de nuvem centralizado para armazenar segredos de aplicativos. O Key Vault mantém seus dados confidenciais seguros, mantendo os segredos do aplicativo em um único local central e fornecendo acesso seguro, controle de permissões e registro de acesso.

Os segredos são armazenados em cofres individuais. Cada cofre tem suas próprias políticas de configuração e segurança para controlar o acesso. Você acessa 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 de servidor. Não se destina a armazenar dados que pertencem aos utilizadores da aplicação. Tal reflete-se nas suas características de desempenho, na API e no modelo de custos.

Os dados do usuário devem ser armazenados em outro lugar, como em uma instância do Banco de Dados SQL do Azure que tenha TDE (Criptografia de Dados Transparente) ou em uma conta de armazenamento que use a Criptografia do Serviço de Armazenamento do Azure. Os segredos usados pelo seu aplicativo para acessar esses armazenamentos de dados podem ser mantidos no Cofre da Chave do Azure.

Proteger dados confidenciais

Proteger os dados é uma parte essencial da sua estratégia de segurança. Classificar seus dados e identificar suas necessidades de proteção de dados ajuda você a projetar seu aplicativo com a segurança de dados em mente. Classificar (categorizar) os 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. Certifique-se de que o aplicativo trate os dados aplicáveis como confidenciais. Estas práticas podem ajudá-lo a proteger os seus dados confidenciais:

  • Use criptografia.
  • Evite segredos de codificação, como chaves e senhas.
  • Certifique-se de que os controles de acesso e a auditoria estejam em vigor.

Usar criptografia

Proteger os dados deve ser uma parte essencial da sua estratégia de segurança. Se seus dados estiverem armazenados em um banco de dados ou se forem movidos entre locais, use a criptografia de dados em repouso (enquanto estiver no banco de dados) e a criptografia de dados em trânsito (no caminho de e para o usuário, o banco de dados, uma API ou ponto de extremidade de serviço). Recomendamos que você sempre use protocolos SSL/TLS para trocar dados. Certifique-se de usar a versão mais recente do TLS para criptografia (atualmente, esta é a versão 1.2).

Evite a codificação rígida

Algumas coisas nunca devem ser codificadas no seu software. Alguns exemplos são nomes de host ou endereços IP, URLs, endereços de e-mail, nomes de usuário, senhas, chaves de conta de armazenamento e outras chaves criptográficas. Considere a implementação de requisitos em torno do que pode ou não ser codificado em seu código, incluindo nas seções de comentários do seu código.

Ao colocar comentários em seu código, certifique-se de não salvar nenhuma informação confidencial. Isso inclui seu endereço de e-mail, senhas, cadeias de conexão, informações sobre seu aplicativo que só seriam conhecidas por alguém em sua organização e qualquer outra coisa que possa dar a um invasor uma vantagem ao atacar seu aplicativo ou organização.

Basicamente, assuma que tudo em seu projeto de desenvolvimento é de conhecimento público quando ele é implantado. Evite incluir dados sensíveis de qualquer tipo no projeto.

Anteriormente, discutimos o Azure Key Vault. Você pode usar o Cofre da Chave para armazenar segredos, como chaves e senhas, em vez de codificá-los. Quando você usa o Cofre da Chave em combinação com identidades gerenciadas para recursos do Azure, seu aplicativo Web do Azure pode acessar valores de configuração secretos de forma fácil e segura, sem armazenar segredos em seu controle ou configuração de origem. Para saber mais, consulte Gerenciar segredos em seus aplicativos de servidor com o Azure Key Vault.

Implementar medidas à prova de falhas

Seu aplicativo deve ser capaz de lidar com erros que ocorrem durante a execução de maneira consistente. O aplicativo deve detetar todos os erros e falhar à prova ou fechado.

Você também deve garantir que os erros sejam registrados com contexto de usuário suficiente para identificar atividades suspeitas ou maliciosas. Os registos devem ser conservados durante um período de tempo suficiente para permitir um atraso na análise forense. 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 de erros relacionados à segurança sejam acionados. O registro e o monitoramento insuficientes permitem que os invasores ataquem ainda mais os sistemas e mantenham a persistência.

Aproveite o tratamento de erros e exceções

A implementação do tratamento correto de erros e exceções é uma parte importante da codificação defensiva. O tratamento de erros e exceções é fundamental para tornar um sistema confiável e seguro. Erros no tratamento de erros podem levar a diferentes tipos de vulnerabilidades de segurança, como vazar informações para invasores e ajudar os invasores a entender mais sobre sua plataforma e design.

Certifique-se de que:

  • Você lida com exceções de forma 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 as equipes forenses ou de resposta a incidentes investigarem.

Os Aplicativos Lógicos do Azure fornecem uma experiência de primeira classe para lidar com erros e exceções causados por sistemas dependentes. Você pode usar Aplicativos Lógicos para criar fluxos de trabalho para automatizar tarefas e processos que integram aplicativos, dados, sistemas e serviços entre empresas e organizações.

Usar registro em log e 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 os problemas em tempo hábil. Habilite a auditoria e o registro em 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 registra nenhum dado confidencial que um usuário envia ao seu site. Exemplos de dados sensíveis incluem:

  • Credenciais do utilizador
  • Números de Segurança Social ou outras informações de identificação
  • Números de cartão de crédito ou outras informações financeiras
  • Informação sobre saúde
  • Chaves privadas ou outros dados que podem ser usados para desencriptar informações encriptadas
  • Informações do sistema ou do aplicativo que podem ser usadas para atacar o aplicativo de forma mais eficaz

Certifique-se de que o aplicativo monitore eventos de gerenciamento de usuários, como logins de usuário bem-sucedidos e com falha, redefinições de senha, alterações de senha, bloqueio de conta e registro de usuário. O registo destes eventos ajuda-o a detetar e reagir a comportamentos potencialmente suspeitos. Ele também permite que você reúna dados de operações, como quem está acessando o aplicativo.

Próximos passos

Nos artigos a seguir, recomendamos controles de segurança e atividades que podem ajudá-lo a desenvolver e implantar aplicativos seguros.