Quadro de segurança: Autorização | Atenuações
Verifique se as ACLs adequadas estão configuradas para restringir o acesso não autorizado aos dados no dispositivo
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 | Verifique se as ACLs adequadas estão configuradas para restringir o acesso não autorizado aos dados no dispositivo |
Certifique-se de que o conteúdo confidencial do aplicativo específico do usuário seja armazenado no diretório de perfil de usuário
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 o conteúdo confidencial do aplicativo específico do usuário esteja armazenado no diretório de perfil de usuário. Isso é para evitar que vários usuários da máquina acessem os dados uns dos outros. |
Certifique-se de que os aplicativos implantados sejam executados com privilégios mínimos
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 o aplicativo implantado seja executado com o mínimo de privilégios. |
Impor ordem de etapa sequencial ao processar fluxos de lógica de negócios
Título | Detalhes |
---|---|
Componente | Aplicação Web |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | Para verificar se esse estágio foi executado por um usuário genuíno, você deseja impor o aplicativo para processar apenas fluxos de lógica de negócios em ordem de etapas sequenciais, com todas as etapas sendo processadas em tempo humano realista, e não processar fora de ordem, etapas ignoradas, etapas processadas de outro usuário ou transações enviadas muito rapidamente. |
Implementar mecanismo de limitação de taxa para evitar a enumeração
Título | Detalhes |
---|---|
Componente | Aplicação Web |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | Certifique-se de que os identificadores confidenciais são aleatórios. Implemente o controle CAPTCHA em páginas anônimas. Certifique-se de que o erro e a exceção não devem revelar dados específicos |
Garantir que a autorização adequada esteja em vigor e que o princípio dos privilégios mínimos seja seguido
Título | Detalhes |
---|---|
Componente | Aplicação Web |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | O princípio significa dar a uma conta de usuário apenas os privilégios que são essenciais para que os usuários trabalhem. Por exemplo, um usuário de backup não precisa instalar software: portanto, o usuário de backup tem direitos apenas para executar aplicativos relacionados a backup e backup. Quaisquer outros privilégios, como a instalação de novo software, são bloqueados. O princípio aplica-se também a um utilizador de computador pessoal que normalmente trabalha numa conta de utilizador normal e abre uma conta privilegiada protegida por palavra-passe (ou seja, um superutilizador) apenas quando a situação o exige. Este princípio também pode ser aplicado às suas aplicações Web. Em vez de depender apenas de métodos de autenticação baseados em função usando sessões, queremos atribuir privilégios aos usuários por meio de um sistema de autenticação baseada em banco de dados. Ainda usamos sessões para identificar se o usuário estava conectado corretamente, só que agora, em vez de atribuir a esse usuário uma função específica, atribuímos a ele privilégios para verificar quais ações ele tem o privilégio de executar no sistema. Também um grande pró deste método é, sempre que um usuário tem que ser atribuído menos privilégios, suas alterações serão aplicadas na hora, uma vez que a atribuição não depende da sessão que, de outra forma, tinha que expirar primeiro. |
A lógica de negócios e as decisões de autorização de acesso a recursos não devem ser baseadas em parâmetros de solicitação de entrada
Título | Detalhes |
---|---|
Componente | Aplicação Web |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | Sempre que você estiver verificando se um usuário está restrito a revisar determinados dados, as restrições de acesso devem ser processadas no lado do servidor. O userID deve ser armazenado dentro de uma variável de sessão no login e deve ser usado para recuperar dados do usuário do banco de dados |
Exemplo
SELECT data
FROM personaldata
WHERE userID=:id < - session var
Agora, um possível invasor não pode adulterar e alterar a operação do aplicativo, uma vez que o identificador para recuperar os dados é manipulado no lado do servidor.
Certifique-se de que o conteúdo e os recursos não são enumeráveis ou acessíveis por meio de navegação forçada
Título | Detalhes |
---|---|
Componente | Aplicação Web |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | Arquivos estáticos e de configuração confidenciais não devem ser mantidos na raiz da web. Para conteúdos que não têm de ser públicos, devem ser aplicados controlos de acesso adequados ou a remoção do próprio conteúdo. Além disso, a navegação forçada geralmente é combinada com técnicas de Força Bruta para coletar informações, tentando acessar o maior número possível de URLs para enumerar diretórios e arquivos em um servidor. Os atacantes podem verificar todas as variações de ficheiros normalmente existentes. Por exemplo, uma pesquisa de arquivo de senha englobaria arquivos incluindo psswd.txt, password.htm, password.dat e outras variações. Para atenuar esta situação, devem ser incluídas capacidades de deteção de tentativas de força bruta. |
Verifique se as contas com privilégios mínimos são usadas para se conectar ao servidor de banco de dados
Título | Detalhes |
---|---|
Componente | Base de Dados |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Hierarquia de permissões SQL, protegíveis SQL |
Passos | As contas menos privilegiadas devem ser usadas para se conectar ao banco de dados. O login do aplicativo deve ser restrito no banco de dados e deve executar apenas os procedimentos armazenados selecionados. O login do aplicativo não deve ter acesso direto à tabela. |
Implementar RLS de segurança em nível de linha para impedir que os locatários acessem os dados uns dos outros
Título | Detalhes |
---|---|
Componente | Base de Dados |
Fase SDL | Compilar |
Tecnologias aplicáveis | Sql Azure, OnPrem |
Atributos | Versão SQL - V12, Versão SQL - MsSQL2016 |
Referências | Segurança em nível de linha (RLS) do SQL Server |
Passos | A Segurança ao Nível da Linha permite aos clientes controlar o acesso às linhas numa tabela de base de dados com base nas características do utilizador que executa uma consulta (por exemplo, associação a um grupo ou contexto de execução). A Segurança em Nível de Linha (RLS) simplifica o design e a codificação da segurança em seu aplicativo. O RLS permite-lhe implementar restrições ao acesso à linha de dados. É possível, por exemplo, garantir que os colaboradores só têm acesso às linhas de dados que são pertinentes para o departamento deles ou limitar o acesso a dados por parte de um cliente apenas àqueles que são relevantes para a empresa dele. A lógica de restrição de acesso está localizada na camada de banco de dados em vez de longe dos dados em outra camada de aplicativo. O sistema de banco de dados aplica as restrições de acesso sempre que o acesso aos dados é tentado a partir de qualquer camada. Isto torna o sistema de segurança mais fiável e robusto, reduzindo a área de superfície do sistema de segurança. |
Observe que a RLS como um recurso de banco de dados pronto para uso é aplicável somente ao SQL Server a partir de 2016, ao Banco de Dados SQL do Azure e à Instância Gerenciada do SQL. Se o recurso RLS pronto para uso não for implementado, deve-se garantir que o acesso aos dados seja restrito Usando exibições e procedimentos
A função Sysadmin só deve ter usuários necessários válidos
Título | Detalhes |
---|---|
Componente | Base de Dados |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Hierarquia de permissões SQL, protegíveis SQL |
Passos | Os membros da função de servidor fixa SysAdmin devem ser muito limitados e nunca conter contas usadas por aplicativos. Revise a lista de usuários na função e remova todas as contas desnecessárias |
Conecte-se ao Cloud Gateway usando tokens menos privilegiados
Título | Detalhes |
---|---|
Componente | Gateway de nuvem IoT |
Fase SDL | Implementação |
Tecnologias aplicáveis | Genérica |
Atributos | Escolha de gateway - Hub IoT do Azure |
Referências | Controle de acesso do Hub Iot |
Passos | Forneça permissões de privilégios mínimos para vários componentes que se conectam ao Cloud Gateway (Hub IoT). Exemplo típico é – O componente de gerenciamento/provisionamento de dispositivos usa registryread/write, o Event Processor (ASA) usa o Service Connect. Dispositivos individuais se conectam usando credenciais de dispositivo |
Usar uma chave SAS de permissões somente de envio para gerar tokens de dispositivo
Título | Detalhes |
---|---|
Componente | Hub de Eventos do Azure |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Visão geral do modelo de autenticação e segurança dos Hubs de Eventos |
Passos | Uma chave SAS é usada para gerar tokens de dispositivo individuais. Use uma chave SAS de permissões somente de envio ao gerar o token de dispositivo para um determinado editor |
Não use tokens de acesso que forneçam acesso direto ao Hub de Eventos
Título | Detalhes |
---|---|
Componente | Hub de Eventos do Azure |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Visão geral do modelo de autenticação e segurança dos Hubs de Eventos |
Passos | Um token que concede acesso direto ao hub de eventos não deve ser fornecido ao dispositivo. Usar um token menos privilegiado para o dispositivo que dá acesso apenas a um editor ajudaria a identificar e não permitir que ele fosse um dispositivo fraudulento ou comprometido. |
Conectar-se ao Hub de Eventos usando chaves SAS que têm as permissões mínimas necessárias
Título | Detalhes |
---|---|
Componente | Hub de Eventos do Azure |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Visão geral do modelo de autenticação e segurança dos Hubs de Eventos |
Passos | Forneça permissões de privilégios mínimos para vários aplicativos back-end que se conectam ao Hub de Eventos. Gere chaves SAS separadas para cada aplicativo back-end e forneça apenas as permissões necessárias - Enviar, Receber ou Gerenciar para elas. |
Usar tokens de recursos para se conectar ao Azure Cosmos DB sempre que possível
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 | Um token de recurso é associado a um recurso de permissão do Azure Cosmos DB e captura a relação entre o usuário de um banco de dados e a permissão que o usuário tem para um recurso de aplicativo específico do Azure Cosmos DB (por exemplo, coleção, documento). Sempre use um token de recurso para acessar o Azure Cosmos DB se não for possível confiar no cliente para manipular chaves mestras ou somente leitura - como um aplicativo de usuário final, como um cliente móvel ou de desktop. Use a chave mestra ou chaves somente leitura de aplicativos de back-end que podem armazenar essas chaves com segurança. |
Habilitar o gerenciamento de acesso refinado à Assinatura do Azure usando o RBAC do Azure
Título | Detalhes |
---|---|
Componente | Limite de Confiança do Azure |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Atribuir funções do Azure para gerir o acesso aos seus recursos de subscrição do Azure |
Passos | O controle de acesso baseado em função do Azure (Azure RBAC) permite o gerenciamento de acesso refinado para o Azure. Usando o RBAC do Azure, você pode conceder apenas a quantidade de acesso que os usuários precisam para executar seus trabalhos. |
Restringir o acesso do cliente às operações de cluster usando o RBAC do Service Fabric
Título | Detalhes |
---|---|
Componente | Limite de confiança do Service Fabric |
Fase SDL | Implementação |
Tecnologias aplicáveis | Genérica |
Atributos | Ambiente - Azure |
Referências | Controle de acesso baseado em função do Service Fabric para clientes do Service Fabric |
Passos | O Azure Service Fabric dá suporte a dois tipos diferentes de controle de acesso para clientes conectados a um cluster do Service Fabric: administrador e usuário. O controle de acesso permite que o administrador do cluster limite o acesso a determinadas operações de cluster para diferentes grupos de usuários, tornando o cluster mais seguro. Os administradores têm acesso total aos recursos de gerenciamento (incluindo recursos de leitura/gravação). Os usuários, por padrão, têm apenas acesso de leitura aos recursos de gerenciamento (por exemplo, recursos de consulta) e a capacidade de resolver aplicativos e serviços. Você especifica as duas funções de cliente (administrador e cliente) no momento da criação do cluster fornecendo certificados separados para cada uma. |
Execute modelagem de segurança e use Segurança de Nível de Campo 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 Segurança de Nível de Campo quando necessário |
Execute a modelagem de segurança das contas do portal tendo em mente que o modelo de segurança do portal difere do restante do CRM
Título | Detalhes |
---|---|
Componente | Dynamics CRM Portal |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | Execute a modelagem de segurança das contas do portal tendo em mente que o modelo de segurança do portal difere do restante do CRM |
Conceder permissão refinada em uma variedade de entidades no Armazenamento de Tabela do Azure
Título | Detalhes |
---|---|
Componente | Armazenamento do Azure |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | StorageType - Tabela |
Referências | Como delegar acesso a objetos em sua conta de armazenamento do Azure usando SAS |
Passos | Em determinados cenários de negócios, o Armazenamento de Tabela do Azure pode ser necessário para armazenar dados confidenciais que atendem a diferentes partes. Por exemplo, dados sensíveis pertencentes a diferentes países/regiões. Nesses casos, as assinaturas SAS podem ser construídas especificando os intervalos de chaves de partição e linha, de modo que um usuário possa acessar dados específicos de um determinado país/região. |
Habilitar o controle de acesso baseado em função do Azure (Azure RBAC) para a conta de armazenamento do Azure usando o Azure Resource Manager
Título | Detalhes |
---|---|
Componente | Armazenamento do Azure |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | Como proteger sua conta de armazenamento com o controle de acesso baseado em função do Azure (Azure RBAC) |
Passos | Ao criar uma nova conta de armazenamento, você seleciona um modelo de implantação do Classic ou do Azure Resource Manager. O modelo Clássico de criação de recursos no Azure permite apenas o acesso de tudo ou nada à subscrição e, por sua vez, à conta de armazenamento. Com o modelo do Azure Resource Manager, você coloca a conta de armazenamento em um grupo de recursos e controla o acesso ao plano de gerenciamento dessa conta de armazenamento específica usando a ID do Microsoft Entra. Por exemplo, você pode dar a usuários específicos a capacidade de acessar as chaves da conta de armazenamento, enquanto outros usuários podem exibir informações sobre a conta de armazenamento, mas não podem acessar as chaves da conta de armazenamento. |
Implementar jailbreak implícito ou deteção de enraizamento
Título | Detalhes |
---|---|
Componente | Cliente Móvel |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | O aplicativo deve proteger sua própria configuração e dados do usuário no caso de o telefone está enraizado ou jail broken. Rooting/jail break implica acesso não autorizado, o que usuários normais não farão em seus próprios telefones. Portanto, o aplicativo deve ter lógica de deteção implícita na inicialização do aplicativo, para detetar se o telefone foi rooteado. A lógica de deteção pode ser simplesmente acessar arquivos que normalmente apenas o usuário root pode acessar, por exemplo:
Se o aplicativo pode acessar qualquer um desses arquivos, isso indica que o aplicativo está sendo executado como usuário root. |
Referência de classe fraca no WCF
Título | Detalhes |
---|---|
Componente | WCF |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérico, NET Framework 3 |
Atributos | N/A |
Referências | MSDN, Reino Fortify |
Passos | O sistema usa uma referência de classe fraca, que pode permitir que um invasor execute código não autorizado. O programa faz referência a uma classe definida pelo usuário que não é identificada exclusivamente. Quando o .NET carrega essa classe fracamente identificada, o carregador de tipo CLR procura a classe nos seguintes locais na ordem especificada:
Se um invasor explorar a ordem de pesquisa do CLR criando uma classe alternativa com o mesmo nome e colocando-a em um local alternativo que o CLR carregará primeiro, o CLR executará involuntariamente o código fornecido pelo invasor |
Exemplo
O <behaviorExtensions/>
elemento do arquivo de configuração do WCF abaixo instrui o WCF a adicionar uma classe de comportamento personalizada a uma extensão WCF específica.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name=""myBehavior"" type=""MyBehavior"" />
</behaviorExtensions>
</extensions>
</system.serviceModel>
Usar nomes totalmente qualificados (fortes) identifica exclusivamente um tipo e aumenta ainda mais a segurança do seu sistema. Use nomes de assembly totalmente qualificados ao registrar tipos nos arquivos machine.config e app.config.
Exemplo
O <behaviorExtensions/>
elemento do arquivo de configuração do WCF abaixo instrui o WCF a adicionar classe de comportamento personalizado fortemente referenciada a uma extensão WCF específica.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name=""myBehavior"" type=""Microsoft.ServiceModel.Samples.MyBehaviorSection, MyBehavior,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"" />
</behaviorExtensions>
</extensions>
</system.serviceModel>
WCF-Implementar controle de autorização
Título | Detalhes |
---|---|
Componente | WCF |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérico, NET Framework 3 |
Atributos | N/A |
Referências | MSDN, Reino Fortify |
Passos | Este serviço não usa um controle de autorização. Quando um cliente chama um serviço WCF específico, o WCF fornece vários esquemas de autorização que verificam se o chamador tem permissão para executar o método de serviço no servidor. Se os controles de autorização não estiverem habilitados para serviços WCF, um usuário autenticado poderá obter escalonamento de privilégios. |
Exemplo
A configuração a seguir instrui o WCF a não verificar o nível de autorização do cliente ao executar o serviço:
<behaviors>
<serviceBehaviors>
<behavior>
...
<serviceAuthorization principalPermissionMode=""None"" />
</behavior>
</serviceBehaviors>
</behaviors>
Use um esquema de autorização de serviço para verificar se o chamador do método de serviço está autorizado a fazê-lo. WCF fornece dois modos e permite a definição de um esquema de autorização personalizado. O modo UseWindowsGroups usa funções e usuários do Windows e o modo UseAspNetRoles usa um provedor de função ASP.NET, como o SQL Server, para autenticar.
Exemplo
A configuração a seguir instrui o WCF a certificar-se de que o cliente faz parte do grupo Administradores antes de executar o serviço Adicionar:
<behaviors>
<serviceBehaviors>
<behavior>
...
<serviceAuthorization principalPermissionMode=""UseWindowsGroups"" />
</behavior>
</serviceBehaviors>
</behaviors>
O serviço é então declarado da seguinte forma:
[PrincipalPermission(SecurityAction.Demand,
Role = ""Builtin\\Administrators"")]
public double Add(double n1, double n2)
{
double result = n1 + n2;
return result;
}
Implementar o mecanismo de autorização adequado em ASP.NET API Web
Título | Detalhes |
---|---|
Componente | API da Web |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérico, MVC5 |
Atributos | N/D, Provedor de Identidade - ADFS, Provedor de Identidade - Microsoft Entra ID |
Referências | Autenticação e autorização em ASP.NET API Web |
Passos | As informações de função para os usuários do aplicativo podem ser derivadas de declarações do Microsoft Entra ID ou ADFS se o aplicativo depender deles como provedor de identidade ou se o próprio aplicativo puder fornecê-lo. Em qualquer um desses casos, a implementação de autorização personalizada deve validar as informações da função de usuário. As informações de função para os usuários do aplicativo podem ser derivadas de declarações do Microsoft Entra ID ou ADFS se o aplicativo depender deles como provedor de identidade ou se o próprio aplicativo puder fornecê-lo. Em qualquer um desses casos, a implementação de autorização personalizada deve validar as informações da função de usuário. |
Exemplo
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class ApiAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
public async override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
if (actionContext == null)
{
throw new Exception();
}
if (!string.IsNullOrEmpty(base.Roles))
{
bool isAuthorized = ValidateRoles(actionContext);
if (!isAuthorized)
{
HandleUnauthorizedRequest(actionContext);
}
}
base.OnAuthorization(actionContext);
}
public bool ValidateRoles(actionContext)
{
//Authorization logic here; returns true or false
}
}
Todos os controladores e métodos de ação que precisam ser protegidos devem ser decorados com o atributo acima.
[ApiAuthorize]
public class CustomController : ApiController
{
//Application code goes here
}
Execute verificações de autorização no dispositivo se ele oferecer suporte a várias ações que exijam diferentes níveis de permissão
Título | Detalhes |
---|---|
Componente | Dispositivo IoT |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | O dispositivo deve autorizar o chamador a verificar se ele tem as permissões necessárias para executar a ação solicitada. Por exemplo, digamos que o dispositivo é uma fechadura de porta inteligente que pode ser monitorada a partir da nuvem, além de fornecer funcionalidades como bloquear remotamente a porta. A fechadura inteligente fornece funcionalidade de desbloqueio apenas quando alguém se aproxima fisicamente da porta com um cartão. Neste caso, a implementação do comando e controle remoto deve ser feita de tal forma que não forneça nenhuma funcionalidade para destrancar a porta, pois o gateway de nuvem não está autorizado a enviar um comando para destrancar a porta. |
Execute verificações de autorização no Field Gateway se ele oferecer suporte a várias ações que exijam diferentes níveis de permissão
Título | Detalhes |
---|---|
Componente | Gateway de campo IoT |
Fase SDL | Compilar |
Tecnologias aplicáveis | Genérica |
Atributos | N/A |
Referências | N/A |
Passos | O Gateway de Campo deve autorizar o chamador a verificar se ele tem as permissões necessárias para executar a ação solicitada. Por exemplo, deve haver permissões diferentes para uma interface de usuário admin / API usada para configurar um gateway de campo v/s dispositivos que se conectam a ele. |