Certifique-se de que os binários sejam ofuscados se contiverem informações confidenciais
Título
Detalhes
Componente
Limite de confiança da máquina
Fase SDL
Implementação
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Certifique-se de que os binários sejam ofuscados se contiverem informações confidenciais, como segredos comerciais, lógica de negócios sensível que não deve ser revertida. Isso é para parar a engenharia reversa de montagens. Ferramentas como CryptoObfuscator podem ser usadas para este fim.
Considere o uso do EFS (Sistema de Arquivos Criptografados) para proteger dados confidenciais específicos do usuário
Título
Detalhes
Componente
Limite de confiança da máquina
Fase SDL
Compilar
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Considere o uso do EFS (Sistema de Arquivos Criptografados) para proteger dados confidenciais específicos do usuário de adversários com acesso físico ao computador.
Certifique-se de que os dados confidenciais armazenados pelo aplicativo no sistema de arquivos sejam criptografados
Título
Detalhes
Componente
Limite de confiança da máquina
Fase SDL
Implementação
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Certifique-se de que os dados confidenciais armazenados pelo aplicativo no sistema de arquivos sejam criptografados (por exemplo, usando DPAPI), se o EFS não puder ser imposto
Verifique se o conteúdo confidencial não está armazenado em cache no navegador
Título
Detalhes
Componente
Aplicação Web
Fase SDL
Compilar
Tecnologias aplicáveis
Genérico, Web Forms, MVC5, MVC6
Atributos
N/A
Referências
N/A
Passos
Os navegadores podem armazenar informações para fins de cache e histórico. Esses arquivos armazenados em cache são armazenados em uma pasta, como a pasta Temporary Internet Files no caso do Internet Explorer. Quando essas páginas são referenciadas novamente, o navegador as exibe de seu cache. Se informações confidenciais forem exibidas para o usuário (como endereço, detalhes do cartão de crédito, número de segurança social ou nome de usuário), essas informações podem ser armazenadas no cache do navegador e, portanto, recuperáveis examinando o cache do navegador ou simplesmente pressionando o botão "Voltar" do navegador. Defina o valor do cabeçalho de resposta do controle de cache como "no-store" para todas as páginas.
Isto pode ser implementado através de um filtro. Pode utilizar-se o seguinte exemplo:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext == null || (filterContext.HttpContext != null && filterContext.HttpContext.Response != null && filterContext.HttpContext.Response.IsRequestBeingRedirected))
{
//// Since this is MVC pipeline, this should never be null.
return;
}
var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(System.Web.Mvc.OutputCacheAttribute), false);
if (attributes == null || **Attributes**.Count() == 0)
{
filterContext.HttpContext.Response.Cache.SetNoStore();
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
if (!filterContext.IsChildAction)
{
filterContext.HttpContext.Response.AppendHeader("Pragma", "no-cache");
}
}
base.OnActionExecuting(filterContext);
}
Criptografar seções dos arquivos de configuração do Web App que contêm dados confidenciais
Arquivos de configuração, como Web.config, appsettings.json são frequentemente usados para armazenar informações confidenciais, incluindo nomes de usuário, senhas, cadeias de conexão de banco de dados e chaves de criptografia. Se você não proteger essas informações, seu aplicativo estará vulnerável a invasores ou usuários mal-intencionados que obtenham informações confidenciais, como nomes de usuário e senhas de contas, nomes de bancos de dados e nomes de servidores. Com base no tipo de implantação (azure/on-prem), criptografe as seções confidenciais dos arquivos de configuração usando DPAPI ou serviços como o Azure Key Vault.
Desative explicitamente o atributo HTML de preenchimento automático em formulários e entradas confidenciais
O atributo autocomplete especifica se um formulário deve ter o preenchimento automático ativado ou desativado. Quando o preenchimento automático está ativado, o navegador completa automaticamente os valores com base nos valores que o usuário inseriu antes. Por exemplo, quando um novo nome e senha são inseridos em um formulário e o formulário é enviado, o navegador pergunta se a senha deve ser salva. Depois disso, quando o formulário é exibido, o nome e a senha são preenchidos automaticamente ou são preenchidos à medida que o nome é inserido. Um invasor com acesso local pode obter a senha de texto não criptografado do cache do navegador. Por padrão, o preenchimento automático está habilitado e deve ser explicitamente desativado.
Verifique se os dados confidenciais exibidos na tela do usuário estão mascarados
Título
Detalhes
Componente
Aplicação Web
Fase SDL
Compilar
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Dados sensíveis, como senhas, números de cartão de crédito, CPF, etc., devem ser mascarados quando exibidos na tela. Isso é para evitar que pessoas não autorizadas acessem os dados (por exemplo, senhas de navegação no ombro, pessoal de suporte visualizando números SSN de usuários). Certifique-se de que esses elementos de dados não estejam visíveis em texto sem formatação e estejam adequadamente mascarados. Isso deve ser tomado cuidado ao aceitá-los como entrada (por exemplo, digite type="password"), bem como exibir de volta na tela (por exemplo, exibir apenas os últimos 4 dígitos do número do cartão de crédito).
Implemente o mascaramento dinâmico de dados para limitar a exposição de dados confidenciais a usuários não privilegiados
O objetivo do mascaramento dinâmico de dados é limitar a exposição de dados sensíveis, impedindo que usuários que não deveriam ter acesso aos dados os visualizem. O mascaramento dinâmico de dados não visa impedir que os usuários do banco de dados se conectem diretamente ao banco de dados e executem consultas exaustivas que expõem partes dos dados confidenciais. O mascaramento dinâmico de dados é complementar a outros recursos de segurança do SQL Server (auditoria, criptografia, segurança em nível de linha...) e é altamente recomendável usar esse recurso em conjunto com eles, além disso, para proteger melhor os dados confidenciais no banco de dados. Observe que esse recurso é suportado apenas pelo SQL Server a partir de 2016 e pelo Banco de Dados SQL do Azure.
Verifique se as palavras-passe estão armazenadas no formato hash com salt incluído
As senhas não devem ser armazenadas em bancos de dados de armazenamento de usuário personalizados. Os hashes de palavras-passe devem ser armazenados com valores salt. Certifique-se de que o sal para o usuário é sempre único e você aplica b-crypt, s-crypt ou PBKDF2 antes de armazenar a senha, com uma contagem mínima de iteração de fator de trabalho de 150.000 loops para eliminar a possibilidade de força bruta.
Verifique se os dados confidenciais nas colunas do banco de dados estão criptografados
Dados sensíveis, como números de cartão de crédito, devem ser criptografados no banco de dados. Os dados podem ser criptografados usando criptografia em nível de coluna ou por uma função de aplicativo usando as funções de criptografia.
Verifique se a criptografia no nível de banco de dados (TDE) está habilitada
O recurso TDE (Criptografia de Dados Transparente) no SQL Server ajuda na criptografia de dados confidenciais em um banco de dados e protege as chaves usadas para criptografar os dados com um certificado. Isso impede que qualquer pessoa sem as chaves use os dados. A TDE protege os dados "em repouso", ou seja, os dados e os arquivos de log. Ele fornece a capacidade de cumprir muitas leis, regulamentos e diretrizes estabelecidas em vários setores.
Verifique se os backups do banco de dados são criptografados
O SQL Server tem a capacidade de criptografar os dados durante a criação de um backup. Ao especificar o algoritmo de encriptação e o encriptador (um Certificado ou Chave Assimétrica) ao criar uma cópia de segurança, pode-se criar um ficheiro de cópia de segurança encriptado.
Certifique-se de que os dados confidenciais relevantes para a API da Web não sejam armazenados no armazenamento do navegador
Título
Detalhes
Componente
API da Web
Fase SDL
Compilar
Tecnologias aplicáveis
MVC 5, MVC 6
Atributos
Provedor de Identidade - ADFS, Provedor de Identidade - Microsoft Entra ID
Referências
N/A
Passos
Em determinadas implementações, artefatos confidenciais relevantes para a autenticação da API da Web são armazenados no armazenamento local do navegador. Por exemplo, artefatos de autenticação do Microsoft Entra como adal.idtoken, adal.nonce.idtoken, adal.access.token.key, adal.token.keys, adal.state.login, adal.session.state, adal.expiration.key etc.
Todos esses artefatos estão disponíveis mesmo após o logout ou o navegador ser fechado. Se um adversário tiver acesso a esses artefatos, ele poderá reutilizá-los para acessar os recursos protegidos (APIs). Certifique-se de que todos os artefatos confidenciais relacionados à API da Web não sejam armazenados no armazenamento do navegador. Nos casos em que o armazenamento do lado do cliente é inevitável (por exemplo, aplicativos de página única (SPA) que aproveitam os fluxos implícitos do OpenIdConnect/OAuth precisam armazenar tokens de acesso localmente), use as opções de armazenamento com não ter persistência. por exemplo, prefira SessionStorage a LocalStorage.
Exemplo
O trecho JavaScript abaixo é de uma biblioteca de autenticação personalizada que armazena artefatos de autenticação no armazenamento local. Tais implementações devem ser evitadas.
ns.AuthHelper.Authenticate = function () {
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: ns.Configurations.Tenant,
clientId: ns.Configurations.AADApplicationClientID,
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage', // enable this for Internet Explorer, as sessionStorage does not work for localhost.
};
Criptografar dados confidenciais armazenados no Azure Cosmos DB
Título
Detalhes
Componente
Banco de Dados de Documentos do Azure
Fase SDL
Compilar
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Criptografe dados confidenciais no nível do aplicativo antes de armazenar no banco de dados de documentos ou armazene dados confidenciais em outras soluções de armazenamento, como o Armazenamento do Azure ou o SQL do Azure
Usar a Criptografia de Disco do Azure para criptografar discos usados por Máquinas Virtuais
O Azure Disk Encryption é um novo recurso que está atualmente em visualização. Esse recurso permite criptografar os discos do sistema operacional e os discos de dados usados por uma máquina virtual IaaS. Para Windows, as unidades são criptografadas usando a tecnologia de criptografia BitLocker padrão do setor. Para Linux, os discos são criptografados usando a tecnologia DM-Crypt. Isso é integrado ao Azure Key Vault para permitir que você controle e gerencie as chaves de criptografia de disco. A solução Azure Disk Encryption suporta os seguintes três cenários de encriptação de cliente:
Habilite a criptografia em novas VMs IaaS criadas a partir de arquivos VHD criptografados pelo cliente e chaves de criptografia fornecidas pelo cliente, que são armazenadas no Cofre de Chaves do Azure.
Habilite a criptografia em novas VMs IaaS criadas a partir do Azure Marketplace.
Habilite a criptografia em VMs IaaS existentes já em execução no Azure.
Criptografar segredos em aplicativos do Service Fabric
Os segredos podem ser qualquer informação confidencial, como cadeias de conexão de armazenamento, senhas ou outros valores que não devem ser manipulados em texto sem formatação. Use o Azure Key Vault para gerenciar chaves e segredos em aplicativos de malha de serviço.
Execute modelagem de segurança e use Unidades/Equipes de Negócios quando necessário
Título
Detalhes
Componente
Dynamics CRM
Fase SDL
Compilar
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Execute modelagem de segurança e use Unidades/Equipes de Negócios quando necessário
Minimizar o acesso ao recurso de compartilhamento em entidades críticas
Título
Detalhes
Componente
Dynamics CRM
Fase SDL
Implementação
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Minimizar o acesso ao recurso de compartilhamento em entidades críticas
Treinar os usuários sobre os riscos associados ao recurso Compartilhamento do Dynamics CRM e às boas práticas de segurança
Título
Detalhes
Componente
Dynamics CRM
Fase SDL
Implementação
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Treinar os usuários sobre os riscos associados ao recurso Compartilhamento do Dynamics CRM e às boas práticas de segurança
Incluir uma regra de padrões de desenvolvimento que prescreva os detalhes da configuração no gerenciamento de exceções
Título
Detalhes
Componente
Dynamics CRM
Fase SDL
Implementação
Tecnologias aplicáveis
Genérica
Atributos
N/A
Referências
N/A
Passos
Inclua uma regra de padrões de desenvolvimento que mostre detalhes de configuração no gerenciamento de exceções fora do desenvolvimento. Teste para isso como parte de revisões de código ou inspeção periódica.
Usar a Criptografia do Serviço de Armazenamento do Azure (SSE) para dados em repouso (visualização)
A Criptografia do Serviço de Armazenamento do Azure (SSE) para Dados em Repouso ajuda você a proteger e proteger seus dados para atender aos seus compromissos organizacionais de segurança e conformidade. Com esta funcionalidade, o Armazenamento do Azure encripta automaticamente os dados antes de continuar a armazenar e desencriptar antes da obtenção. A encriptação, desencriptação e gestão de chaves é totalmente transparente para os utilizadores. O SSE aplica-se apenas a blobs de bloco, blobs de página e blobs de acréscimo. Os outros tipos de dados, incluindo tabelas, filas e ficheiros, não serão encriptados.
Fluxo de trabalho de criptografia e descriptografia:
O cliente habilita a criptografia na conta de armazenamento
Quando o cliente grava novos dados (PUT Blob, PUT Block, PUT Page, etc.) no armazenamento de Blob; cada gravação é criptografada usando criptografia AES de 256 bits, uma das cifras de bloco mais fortes disponíveis
Quando o cliente precisa acessar dados (GET Blob, etc.), os dados são automaticamente descriptografados antes de retornar ao usuário
Se a criptografia estiver desativada, as novas gravações não serão mais criptografadas e os dados criptografados existentes permanecerão criptografados até serem reescritos pelo usuário. Enquanto a criptografia estiver habilitada, as gravações no armazenamento de Blob serão criptografadas. O estado dos dados não muda com o usuário alternando entre ativar/desabilitar a criptografia para a conta de armazenamento
Todas as chaves de criptografia são armazenadas, criptografadas e gerenciadas pela Microsoft
Tenha em atenção que, neste momento, as chaves utilizadas para a encriptação são geridas pela Microsoft. A Microsoft gera as chaves originalmente e gerencia o armazenamento seguro das chaves, bem como a rotação regular, conforme definido pela política interna da Microsoft. No futuro, os clientes terão a capacidade de gerenciar suas próprias chaves de criptografia e fornecer um caminho de migração de chaves gerenciadas pela Microsoft para chaves gerenciadas pelo cliente.
Usar a criptografia do lado do cliente para armazenar dados confidenciais no Armazenamento do Azure
O pacote Nuget da Biblioteca de Cliente de Armazenamento do Azure para .NET dá suporte à criptografia de dados em aplicativos cliente antes de carregar no Armazenamento do Azure e descriptografar dados durante o download para o cliente. A biblioteca também suporta a integração com o Cofre de Chaves do Azure para a gestão de chaves da conta do Storage. Aqui está uma breve descrição de como a criptografia do lado do cliente funciona:
O SDK do cliente de Armazenamento do Azure gera uma chave de criptografia de conteúdo (CEK), que é uma chave simétrica de uso único
Os dados do cliente são criptografados usando este CEK
O CEK é então encapsulado (criptografado) usando a chave de criptografia de chave (KEK). O KEK é identificado por um identificador de chave e pode ser um par de chaves assimétricas ou uma chave simétrica e pode ser gerenciado localmente ou armazenado no Cofre de Chaves do Azure. O próprio cliente de armazenamento nunca tem acesso ao KEK. Ele apenas invoca o algoritmo de encapsulamento de chave que é fornecido pelo Cofre de Chaves. Os clientes podem optar por usar provedores personalizados para empacotamento/desempacotamento de chaves, se desejarem
Os dados criptografados são carregados no serviço de Armazenamento do Azure. Verifique os links na seção de referências para obter detalhes de implementação de baixo nível.
Criptografar dados confidenciais ou PII gravados no armazenamento local de telefones
Se o aplicativo escreve informações confidenciais, como PII do usuário (e-mail, número de telefone, nome, sobrenome, preferências, etc.)- No sistema de arquivos do celular, ele deve ser criptografado antes de gravar no sistema de arquivos local. Se o aplicativo for um aplicativo empresarial, explore a possibilidade de publicar o aplicativo usando o Windows Intune.
Exemplo
O Intune pode ser configurado com as seguintes políticas de segurança para proteger dados confidenciais:
Require encryption on mobile device
Require encryption on storage cards
Allow screen capture
Exemplo
Se o aplicativo não for um aplicativo empresarial, use keystore fornecido pela plataforma, chaveiros para armazenar chaves de criptografia, usando o qual a operação criptográfica pode ser executada no sistema de arquivos. O trecho de código a seguir mostra como acessar a chave das chaves usando o xamarin:
protected static string EncryptionKey
{
get
{
if (String.IsNullOrEmpty(_Key))
{
var query = new SecRecord(SecKind.GenericPassword);
query.Service = NSBundle.MainBundle.BundleIdentifier;
query.Account = "UniqueID";
NSData uniqueId = SecKeyChain.QueryAsData(query);
if (uniqueId == null)
{
query.ValueData = NSData.FromString(System.Guid.NewGuid().ToString());
var err = SecKeyChain.Add(query);
_Key = query.ValueData.ToString();
}
else
{
_Key = uniqueId.ToString();
}
}
return _Key;
}
}
Ofuscar binários gerados antes de distribuir para usuários finais
Os binários gerados (montagens dentro do apk) devem ser ofuscados para interromper a engenharia reversa de montagens. Ferramentas como CryptoObfuscator podem ser usadas para este fim.
Definir clientCredentialType como Certificado ou Windows
Usar um UsernameToken com uma senha de texto simples em um canal não criptografado expõe a senha a invasores que podem farejar as mensagens SOAP. Os provedores de serviços que usam o UsernameToken podem aceitar senhas enviadas em texto sem formatação. O envio de senhas de texto sem formatação por um canal não criptografado pode expor a credencial a invasores que podem detetar a mensagem SOAP.
Exemplo
A seguinte configuração do provedor de serviços WCF usa o UsernameToken:
Nenhuma segurança de transporte ou mensagem foi definida. As aplicações que transmitem mensagens sem transporte ou segurança da mensagem não podem garantir a integridade ou confidencialidade das mensagens. Quando uma associação de segurança WCF é definida como Nenhum, a segurança de transporte e de mensagem é desabilitada.
Exemplo
A configuração a seguir define o modo de segurança como Nenhum.
Modo de segurança Em todas as ligações de serviço, há cinco modos de segurança possíveis:
Nenhum. Desativa a segurança.
Transportes. Usa segurança de transporte para autenticação mútua e proteção de mensagens.
Mensagem. Usa a segurança de mensagens para autenticação mútua e proteção de mensagens.
Ambos. Permite que você forneça configurações para transporte e segurança no nível da mensagem (somente o MSMQ suporta isso).
TransportWithMessageCredential. As credenciais são passadas com a mensagem e a proteção de mensagens e a autenticação do servidor são fornecidas pela camada de transporte.
TransportCredentialOnly. As credenciais do cliente são passadas com a camada de transporte e nenhuma proteção de mensagem é aplicada. Use o transporte e a segurança das mensagens para proteger a integridade e a confidencialidade das mensagens. A configuração abaixo informa ao serviço para usar a segurança de transporte com credenciais de mensagem.