Estrutura de segurança: autenticação | Atenuações
Considere o uso de um mecanismo de autenticação padrão para se autenticar no Aplicativo Web
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Detalhes | A autenticação é o processo em que uma entidade comprova sua identidade, normalmente por meio de credenciais, como um nome de usuário e uma senha. Há vários protocolos de autenticação disponíveis que podem ser considerados. Alguns deles são listados abaixo:
Considere usar um mecanismo de autenticação padrão para identificar o processo de origem |
Os aplicativos devem lidar com cenários de autenticação com falha com segurança
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Detalhes | Aplicativos que autenticam os usuários explicitamente devem controlar com segurança cenários de autenticação com falha. O mecanismo de autenticação deve:
Teste de:
|
Habilitar upgrade ou autenticação adaptável
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Detalhes | Verifique se o aplicativo tem autorização adicional (como autenticação step up ou adaptável, por meio da autenticação multifator, como o envio de OTP por mensagem SMS, email etc. ou solicitação de reautenticação) para que o usuário receba um desafio antes de obter acesso a informações confidenciais. Essa regra também se aplica para fazer alterações importantes em uma conta ou uma ação Isso também significa que a adaptação de autenticação deve ser implementada de forma que o aplicativo imponha corretamente a autorização contextual para não permitir uma manipulação não autorizada por meio de violação de parâmetros, como no exemplo |
Verifique se as interfaces administrativas estão adequadamente bloqueadas
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Detalhes | A primeira solução é conceder acesso apenas de determinado intervalo IP de origem para a interface administrativa. Se essa solução não for possível, sempre será recomendável impor uma autenticação step-up ou adaptável para fazer logon na interface administrativa |
Implemente funcionalidades de senha esquecida com segurança
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Detalhes | A primeira coisa é verificar se você esqueceu a senha, e outros caminhos de recuperação enviam um link com um token de ativação de tempo limitado, em vez da própria senha. A autenticação adicional com base em tokens de software (por exemplo, token de SMS, aplicativos móveis nativos etc.) também pode ser necessária antes que o link seja enviado. Em segundo lugar, você não deverá bloquear a conta de usuários enquanto o processo de obtenção de uma nova senha estiver em andamento. Isso poderá levar a um ataque de Negação de serviço sempre que um invasor decidir bloquear intencionalmente os usuários com um ataque automatizado. Em terceiro lugar, sempre que a nova solicitação de senha for definida em andamento, a mensagem que será exibida deverá ser generalizada para evitar a enumeração de nome de usuário. Em quarto lugar, sempre proíba o uso de senhas antigas e implemente uma política de senha forte. |
Verifique se as políticas de conta e senha são implementadas
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Detalhes | A política de conta e senha em conformidade com a política organizacional e as práticas recomendadas deve ser implementadas. Para proteção contra força bruta e adivinhação baseada em dicionário: a política de senha forte deve ser implementada para garantir que os usuários criem senhas complexas (por exemplo, comprimento mínimo de 12 caracteres, caracteres especiais e alfanuméricos). As políticas de bloqueio de conta podem ser implementadas da seguinte maneira:
Para se proteger contra ataques em contas previsíveis e padrão, verifique se todas as chaves e senhas são substituíveis e são geradas ou substituídas após a instalação. Se o aplicativo precisar gerar senhas automaticamente, verifique se as senhas geradas são aleatórias e têm alta entropia. |
Implemente controles para impedir a enumeração de nome de usuário
Title | Detalhes |
---|---|
Componente | Aplicativo Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Etapas | Todas as mensagens de erro devem ser generalizadas para evitar a enumeração de nome de usuário. Além disso, às vezes você não pode evitar o vazamento de informações em funcionalidades como uma página de registro. Aqui, você precisa usar métodos de limitação de taxa, como CAPTCHA, para evitar um ataque automatizado por um invasor. |
Quando possível, use a Autenticação do Windows para se conectar ao SQL Server
Title | Detalhes |
---|---|
Componente | Banco de dados |
Fase do SDL | Build |
Tecnologias aplicáveis | Local |
Atributos | Versão do SQL - Todas |
Referências | SQL Server - escolher um modo de autenticação |
Etapas | A Autenticação do Windows usa o protocolo de segurança Kerberos, fornece imposição de política de senha em relação à validação de complexidade para senhas fortes, além de dar suporte ao bloqueio de contas e à expiração de senhas. |
Quando possível, use a autenticação do microsoft Entra para se conectar ao Banco de Dados SQL
Título | Detalhes |
---|---|
Componente | Banco de dados |
Fase do SDL | Build |
Tecnologias aplicáveis | SQL Azure |
Atributos | Versão do SQL - V12 |
Referências | Conectar-se ao Banco de Dados SQL usando a autenticação do Microsoft Entra |
Etapas | Versão mínima: é necessário ter o Banco de Dados SQL do Azure V12 para permitir que o Banco de Dados SQL use a autenticação do Microsoft Entra no Microsoft Directory |
Quando o modo de autenticação do SQL for usado, verifique se as políticas de conta e senha são impostas no SQL server
Title | Detalhes |
---|---|
Componente | Banco de dados |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Política de senha do SQL Server |
Etapas | Ao usar a Autenticação do SQL Server, são criados logons no SQL Server que não se baseiam em contas de usuário do Windows. O nome de usuário e a senha são criados usando o SQL Server e são armazenados no SQL Server. O SQL Server pode usar mecanismos de política de senha do Windows. Ele pode aplicar a mesma complexidade e as políticas de expiração usadas no Windows para senhas usadas no SQL Server. |
Não use a Autenticação do SQL em bancos de dados independentes
Title | Detalhes |
---|---|
Componente | Banco de dados |
Fase do SDL | Build |
Tecnologias aplicáveis | No local, SQL Azure |
Atributos | Versão do SQL - MSSQL2012, Versão do SQL - V12 |
Referências | Práticas recomendadas de segurança com bancos de dados independentes |
Etapas | A ausência de uma política de senha imposta poderá aumentar a probabilidade de que uma credencial fraca seja estabelecida em um banco de dados independente. Aproveite a Autenticação do Windows. |
Use credenciais de autenticação por dispositivo usando tokens SaS
Title | Detalhes |
---|---|
Componente | Hubs de eventos do Azure |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Visão geral do modelo de autenticação e segurança dos Hubs de Eventos |
Etapas | O modelo de segurança dos Hubs de Eventos se baseia em uma combinação de tokens SAS (Assinatura de Acesso Compartilhado) e de editores de eventos. O nome do publicador representa o DeviceID que recebe o token. Isso ajudaria a associar os tokens gerados aos respectivos dispositivos. Todas as mensagens são marcadas com o originador no lado do serviço, o que permite a detecção de tentativas de falsificação de origem na carga. Na autenticação de dispositivos, gere um token SaS por dispositivo com escopo para um publicador exclusivo. |
Habilitar a autenticação multifator do Microsoft Entra para administradores do Azure
Título | Detalhes |
---|---|
Componente | Limite de Confiança do Azure |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | O que é a autenticação multifator do Microsoft Entra? |
Etapas | a autenticação multifator (MFA) é um método de autenticação que exige mais de um método de verificação e adiciona uma segunda camada crítica a entradas e transações dos usuários. Ela funciona, exigindo dois ou mais dos métodos de verificação a seguir:
|
Restrinja o acesso anônimo ao Cluster de Service Fabric
Title | Detalhes |
---|---|
Componente | Limite de confiança do Service Fabric |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | Ambiente - Azure |
Referências | Cenários de segurança do cluster do Service Fabric |
Etapas | Os clusters sempre devem ser protegidos para evitar que usuários não autorizados se conectem ao cluster, especialmente quando ele tiver cargas de trabalho de produção em execução. Ao criar um cluster de service fabric, verifique se o modo de segurança está definido como "seguro" e configure o certificado de servidor X.509 necessário. Criar um cluster "inseguro" permitirá que qualquer usuário anônimo se conecte a ele se ele expuser pontos de extremidade de gerenciamento para a Internet pública. |
Verifique se o certificado de cliente para o nó de Service Fabric serviço é diferente do certificado de nó para nó
Title | Detalhes |
---|---|
Componente | Limite de confiança do Service Fabric |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | Ambiente - Azure, ambiente - autônomo |
Referências | Segurança de certificado de cliente para nó do Service Fabric, Conectar-se a um cluster seguro usando um certificado de cliente |
Etapas | A segurança de certificado de cliente para nó é configurada durante a criação do cluster por meio do portal do Azure, dos modelos do Resource Manager ou de um modelo JSON autônomo, especificando um certificado de cliente do administrador e/ou um certificado de cliente do usuário. Os certificados de cliente administrador e certificados de cliente de usuário que você especificar devem ser diferentes dos certificados primários e secundários que você especifica para a Segurança de nó para nó. |
Usar o Microsoft Entra ID para autenticar clientes para clusters do Service Fabric
Título | Detalhes |
---|---|
Componente | Limite de confiança do Service Fabric |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | Ambiente - Azure |
Referências | Cenários de segurança - recomendações de segurança de cluster |
Etapas | Clusters em execução no Azure também podem proteger o acesso aos pontos de extremidade de gerenciamento usando o Microsoft Entra ID, além de certificados do cliente. Para clusters do Azure, é recomendável usar a segurança do Microsoft Entra para autenticar clientes e certificados para a segurança de nó para nó. |
Verifique se os certificados de service fabric são obtidos de uma CA (autoridade de certificação) aprovada
Title | Detalhes |
---|---|
Componente | Limite de confiança do Service Fabric |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | Ambiente - Azure |
Referências | Certificados X.509 e Service Fabric |
Etapas | O Service Fabric usa certificados de servidor X.509 para autenticar clientes e nós. Alguns pontos importantes a considerar ao usar certificados em service fabrics:
|
Use cenários de autenticação padrão com suporte no Servidor de Identidade
Title | Detalhes |
---|---|
Componente | Servidor de identidade |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | IdentityServer3 - visão geral |
Etapas | Abaixo estão as interações típicas com suporte no Servidor de Identidade:
|
Substitua o cache de token de identidade de servidor padrão por uma alternativa escalonável
Title | Detalhes |
---|---|
Componente | Servidor de identidade |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Implantação de Servidor de Identidade - cache |
Etapas | IdentityServer tem um cache na memória interno simples. Embora seja adequado para aplicativos nativos de pequena escala, ele não é dimensionado para aplicativos de camada intermediária e back-end pelos seguintes motivos:
|
Verifique se os binários do aplicativo implantado são assinados digitalmente
Title | Detalhes |
---|---|
Componente | Limite de confiança de máquina |
Fase do SDL | Implantação |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Etapas | Verifique se os binários do aplicativo implantado são assinados digitalmente para que seja possível verificar a integridade dos binários |
Habilite a autenticação ao se conectar às filas MSMQ do WCF
Title | Detalhes |
---|---|
Componente | WCF |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico, NET Framework 3 |
Atributos | N/D |
Referências | MSDN |
Etapas | O programa não habilita a autenticação ao conectar-se às filas do MSMQ. Um invasor anônimo pode enviar mensagens à fila para processamento. Se a autenticação não for usada para se conectar a uma fila do MSMQ usada para enviar uma mensagem a outro programa, um invasor poderá enviar uma mensagem anônima mal-intencionada. |
Exemplo
O elemento <netMsmqBinding/>
do arquivo de configuração WCF abaixo instrui o WCF a desabilitar a autenticação ao se conectar a uma fila do MSMQ para entrega de mensagens.
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""None"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
Configure o MSMQ para exigir sempre autenticação de Domínio do Windows ou de Certificado para todas as mensagens de entrada ou saída.
Exemplo
O elemento <netMsmqBinding/>
do arquivo de configuração WCF abaixo instrui o WCF a habilitar a autenticação de certificado ao se conectar a uma fila do MSMQ. O cliente é autenticado usando certificados X.509. O certificado do cliente deve estar presente no repositório de certificados do servidor.
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""Certificate"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
WCF - não defina clientCredentialType de mensagem como none
Title | Detalhes |
---|---|
Componente | WCF |
Fase do SDL | Build |
Tecnologias aplicáveis | .NET Framework 3 |
Atributos | Tipo de Credencial de Cliente - Nenhuma |
Referências | MSDN, Fortalecer |
Etapas | A ausência de autenticação significa que todos podem acessar o serviço. Um serviço que não autentica seus clientes permite acesso a todos os usuários. Configure o aplicativo para autenticação em relação às credenciais do cliente. Isso pode ser feito definindo a mensagem clientCredentialType para Windows ou Certificado. |
Exemplo
<message clientCredentialType=""Certificate""/>
WCF - não defina clientCredentialType de transporte como none
Title | Detalhes |
---|---|
Componente | WCF |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico, .NET Framework 3 |
Atributos | Tipo de Credencial de Cliente - Nenhuma |
Referências | MSDN, Fortalecer |
Etapas | A ausência de autenticação significa que todos podem acessar o serviço. Um serviço que não autentica seus clientes permite que todos os usuários acessem sua funcionalidade. Configure o aplicativo para autenticação em relação às credenciais do cliente. Isso pode ser feito definindo o transporte clientCredentialType para Windows ou Certificado. |
Exemplo
<transport clientCredentialType=""Certificate""/>
Verifique se técnicas de autenticação padrão são usadas para proteger as APIs Web
Title | Detalhes |
---|---|
Componente | API Web |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Autenticação e Autorização na ASP.NET Web API, Serviços de Autenticação Externa com a API Web do ASP.NET (C#) |
Etapas | A autenticação é o processo em que uma entidade comprova sua identidade, normalmente por meio de credenciais, como um nome de usuário e uma senha. Há vários protocolos de autenticação disponíveis que podem ser considerados. Alguns deles são listados abaixo:
Os links na seção de referências fornecem detalhes de baixo nível sobre como cada um dos esquemas de autenticação pode ser implementado para proteger uma API Web. |
Usar cenários de autenticação padrão com suporte no Microsoft Entra ID
Título | Detalhes |
---|---|
Componente | ID do Microsoft Entra |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Cenários de autenticação para o Microsoft Entra ID, Exemplos de código do Microsoft Entra, Guia do desenvolvedor do Microsoft Entra |
Etapas | O Microsoft Entra ID simplifica a autenticação para os desenvolvedores fornecendo identidade como um serviço, com suporte para protocolos padrão do setor, como OAuth 2.0 e OpenID Connect. Abaixo estão os cinco principais cenários de aplicativo com suporte no Microsoft Entra ID:
Confira os links na seção de referências para obter detalhes sobre a implementação de nível baixo |
Substituir o cache de token padrão da MSAL por um cache distribuído
Title | Detalhes |
---|---|
Componente | ID do Microsoft Entra |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Serialização do cache de token na MSAL.NET |
Etapas | O cache padrão que a MSAL (Biblioteca de Autenticação da Microsoft) usa é um cache na memória e é escalonável. No entanto, há diferentes opções disponíveis que podem ser usadas como alternativa, como um cache de token distribuído. Eles têm mecanismos L1/L2, onde L1 está na memória e L2 é a implementação de cache distribuído. Eles podem ser configurados adequadamente para limitar a memória L1, criptografar ou definir políticas de remoção. Outras alternativas incluem caches Redis, SQL Server ou Azure Comsos DB. Uma implementação de um cache de token distribuído pode ser encontrada no Tutorial: Introdução ao ASP.NET Core MVC. |
Verifique se TokenReplayCache é usado para evitar a repetição de tokens de autenticação MSAL
Title | Detalhes |
---|---|
Componente | ID do Microsoft Entra |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Autenticação moderna com o Microsoft Entra ID para aplicativos Web |
Etapas | A propriedade TokenReplayCache permite aos desenvolvedores definir um cache de reprodução de token, um repositório que pode ser usado para salvar os tokens com a finalidade de verificar se nenhum token pode ser usado mais de uma vez. Essa é uma medida contra um ataque comum, o ataque de reprodução de token, cujo nome é bastante apropriado: um invasor que intercepta o token enviado na entrada pode tentar enviá-la novamente ao aplicativo ("repeti-lo") para estabelecer uma nova sessão. Por exemplo, no fluxo de concessão de código do OIDC, após a autenticação bem-sucedida do usuário, uma solicitação para "/signin-oidc" do ponto de extremidade da terceira parte confiável é feita com os parâmetros "id_token", "code" e "state". A terceira parte confiável valida a solicitação e estabelece uma nova sessão. Se um adversário capturar essa solicitação e a repetir, poderá estabelecer uma sessão bem-sucedida e falsificar o usuário. A presença de nonce em OpenID Connect pode limitar, mas não elimina totalmente as circunstâncias em que o ataque pode ser realizado com êxito. Para proteger os aplicativos, os desenvolvedores podem fornecer uma implementação de ITokenReplayCache e atribuir uma instância de TokenReplayCache. |
Exemplo
// ITokenReplayCache defined in MSAL
public interface ITokenReplayCache
{
bool TryAdd(string securityToken, DateTime expiresOn);
bool TryFind(string securityToken);
}
Exemplo
Aqui está uma implementação de exemplo da interface ITokenReplayCache. (Personalize e implemente sua estrutura de cache específica do projeto)
public class TokenReplayCache : ITokenReplayCache
{
private readonly ICacheProvider cache; // Your project-specific cache provider
public TokenReplayCache(ICacheProvider cache)
{
this.cache = cache;
}
public bool TryAdd(string securityToken, DateTime expiresOn)
{
if (this.cache.Get<string>(securityToken) == null)
{
this.cache.Set(securityToken, securityToken);
return true;
}
return false;
}
public bool TryFind(string securityToken)
{
return this.cache.Get<string>(securityToken) != null;
}
}
O cache implementado precisa ser referenciado em opções de OIDC por meio da propriedade "TokenValidationParameters" da maneira a seguir.
OpenIdConnectOptions openIdConnectOptions = new OpenIdConnectOptions
{
AutomaticAuthenticate = true,
... // other configuration properties follow..
TokenValidationParameters = new TokenValidationParameters
{
TokenReplayCache = new TokenReplayCache(/*Inject your cache provider*/);
}
}
Para testar a eficácia dessa configuração, entre no aplicativo local protegido por OIDC e capture a solicitação para o ponto de extremidade "/signin-oidc"
no Fiddler. Quando a proteção não estiver em vigor, repetir essa solicitação no fiddler definirá um novo cookie de sessão. Quando a solicitação for repetida depois que a proteção de TokenReplayCache for adicionada, o aplicativo gerará uma exceção da seguinte maneira:SecurityTokenReplayDetectedException: IDX10228: The securityToken has previously been validated, securityToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ1......
Usar bibliotecas MSAL para gerenciar solicitações de token de clientes OAuth2 ao Microsoft Entra ID (ou AD local)
Título | Detalhes |
---|---|
Componente | ID do Microsoft Entra |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | MSAL |
Etapas | A MSAL (Biblioteca de Autenticação da Microsoft) permite que os desenvolvedores adquiram tokens de segurança a partir da plataforma de identidade da Microsoft para autenticar usuários e acessar APIs Web seguras. Ele pode ser usado para fornecer acesso seguro a Microsoft Graph, outras APIs da Microsoft, APIs Web de terceiros ou sua própria API Web. O MSAL dá suporte a várias arquiteturas e plataformas de aplicativos diferentes, incluindo .NET, JavaScript, Java, Python, Android e iOS. |
A MSAL oferece muitas maneiras de obter tokens, com uma API consistente para várias plataformas. Não é necessário usar as bibliotecas ou o código OAuth diretamente no protocolo em seu aplicativo e pode adquirir tokens em nome de um usuário ou aplicativo (quando aplicável à plataforma).
A MSAL também mantém um cache de token e atualiza tokens para você quando estão perto de expirar. A MSAL também pode ajudá-lo a especificar qual público-alvo desejável para entrar no aplicativo e ajudá-lo a configurar seu aplicativo a partir de arquivos de configuração e solucionar problemas do aplicativo.
Autenticar dispositivos que se conectam ao Gateway de Campo
Title | Detalhes |
---|---|
Componente | Gateway de Campo de IoT |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | N/D |
Etapas | Verifique se cada dispositivo é autenticado pelo Gateway de Campo antes de aceitar dados deles e antes de facilitar as comunicações upstream com o Gateway de Nuvem. Além disso, verifique se os dispositivos se conectam com uma credencial por dispositivo, para que dispositivos individuais possam ser identificados exclusivamente. |
Verifique se os dispositivos conectados ao gateway de nuvem são autenticados
Title | Detalhes |
---|---|
Componente | Gateway de Nuvem IoT |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico, C#, Node.JS, |
Atributos | N/A, Opção de gateway - Hub IoT do Azure |
Referências | N/A, Hub IoT do Azure com .NET, Introdução ao hub IoT e ao Node JS, Como proteger a IoT com SAS e certificados, Repositório do Git |
Etapas |
|
Exemplo
static DeviceClient deviceClient;
static string deviceKey = "{device key}";
static string iotHubUri = "{iot hub hostname}";
var messageString = "{message in string format}";
var message = new Message(Encoding.ASCII.GetBytes(messageString));
deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice", deviceKey));
await deviceClient.SendEventAsync(message);
Exemplo
Node.JS: Autenticação
Chave simétrica
- Criar um hub IoT no Azure
- Criar uma entrada no registro de identidade de dispositivo
var device = new iothub.Device(null); device.deviceId = <DeviceId > registry.create(device, function(err, deviceInfo, res) {})
- Criar um dispositivo simulado
var clientFromConnectionString = require('azure-iot-device-amqp').clientFromConnectionString; var Message = require('azure-iot-device').Message; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>SharedAccessKey=<SharedAccessKey>'; var client = clientFromConnectionString(connectionString);
Token SAS
- É gerado internamente ao usar a chave simétrica, mas também pode gerá-la e usá-la explicitamente
- Defina um protocolo:
var Http = require('azure-iot-device-http').Http;
- Crie um token sas:
resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); var deviceName = "<deviceName >"; var expires = (Date.now() / 1000) + expiresInMins * 60; var toSign = resourceUri + '\n' + expires; // using crypto var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); const hmac = crypto.createHmac('sha256', decodedPassword); hmac.update(toSign); var base64signature = hmac.digest('base64'); var base64UriEncoded = encodeURIComponent(base64signature); // construct authorization string var token = "SharedAccessSignature sr=" + resourceUri + "%2fdevices%2f"+deviceName+"&sig=" + base64UriEncoded + "&se=" + expires; if (policyName) token += "&skn="+policyName; return token;
- Conecte-se usando um token sas:
Client.fromSharedAccessSignature(sas, Http);
Certificados
- Gerar um certificado X509 autoassinado usando qualquer ferramenta, como OpenSSL, para gerar arquivos .cert e .key para armazenar o certificado e a chave, respectivamente
- Provisione um dispositivo que aceite a conexão segura usando certificados.
var connectionString = '<connectionString>'; var registry = iothub.Registry.fromConnectionString(connectionString); var deviceJSON = {deviceId:"<deviceId>", authentication: { x509Thumbprint: { primaryThumbprint: "<PrimaryThumbprint>", secondaryThumbprint: "<SecondaryThumbprint>" } }} var device = deviceJSON; registry.create(device, function (err) {});
- Conectar um dispositivo usando um certificado
var Protocol = require('azure-iot-device-http').Http; var Client = require('azure-iot-device').Client; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>x509=true'; var client = Client.fromConnectionString(connectionString, Protocol); var options = { key: fs.readFileSync('./key.pem', 'utf8'), cert: fs.readFileSync('./server.crt', 'utf8') }; // Calling setOptions with the x509 certificate and key (and optionally, passphrase) will configure the client //transport to use x509 when connecting to IoT Hub client.setOptions(options); //call fn to execute after the connection is set up client.open(fn);
Usar credenciais de autenticação por dispositivo
Title | Detalhes |
---|---|
Componente | Gateway de Nuvem IoT |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | Opção de gateway - Hub IoT do Azure |
Referências | Tokens de segurança do Hub IoT do Azure |
Etapas | Use credenciais de autenticação por dispositivo usando tokens SaS com base na chave do dispositivo ou no certificado de cliente, em vez de políticas de acesso compartilhado de nível de Hub IoT. Isso impede a reutilização de tokens de autenticação de um gateway de campo ou dispositivo por outro |
Verifique se apenas os contêineres necessários e os blobs recebem acesso de leitura anônimo
Title | Detalhes |
---|---|
Componente | Armazenamento do Azure |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | StorageType - Blob |
Referências | Gerenciar acesso anônimo de leitura para contêineres e blobs, Assinaturas de acesso compartilhado, parte 1: noções básicas sobre o modelo SAS |
Etapas | Por padrão, um contêiner e todos os blobs contidos nele podem ser acessados somente pelo proprietário da conta de armazenamento. Para dar aos usuários anônimos permissões de leitura a um contêiner e seus blobs, é possível definir as permissões de contêiner para permitir acesso público. Usuários anônimos podem ler blobs dentro de um contêiner publicamente acessível sem autenticar a solicitação. Os contêineres fornecem as seguintes opções para gerenciar o acesso do contêiner:
O acesso anônimo é ideal para cenários em que determinados blobs sempre devem estar disponíveis para acesso de leitura anônimo. Para um controle mais refinado, é possível criar uma assinatura de acesso compartilhado, que permite delegar o acesso restrito usando diferentes permissões e em um intervalo de tempo especificado. Garanta que os contêineres e os blobs, que podem conter dados confidenciais, não recebam acesso anônimo acidentalmente |
Conceda acesso limitado a objetos no armazenamento do Azure usando SAS ou SAP
Title | Detalhes |
---|---|
Componente | Armazenamento do Azure |
Fase do SDL | Build |
Tecnologias aplicáveis | Genérico |
Atributos | N/D |
Referências | Assinaturas de acesso compartilhado, parte 1: noções básicas sobre o modelo SAS, Assinaturas de acesso compartilhado, parte 2: criar e usar SAS com o armazenamento de Blobs, Como delegar acesso a objetos em sua conta usando assinaturas de acesso compartilhado e políticas de acesso armazenado |
Etapas | O uso de SAS (assinatura de acesso compartilhado) é uma maneira eficiente de conceder acesso limitado a objetos na conta de armazenamento a outros clientes, sem precisar expor a chave de acesso da conta. A SAS é um URI que engloba em seus parâmetros de consulta todas as informações necessárias para o acesso autenticado a um recurso de armazenamento. Para acessar recursos de armazenamento com a SAS, o cliente só precisa passar a SAS ao construtor apropriado ou ao método apropriado. Você pode usar uma SAS quando desejar fornecer acesso aos recursos de sua conta de armazenamento a um cliente não confiável com a chave de conta. As chaves de conta de armazenamento incluem uma chave primária e uma chave secundária, que concedem acesso administrativo à sua conta e a todos os recursos que ela contém. A exposição de qualquer uma de suas chaves de conta torna sua conta vulnerável a um possível uso mal-intencionado ou negligente. As assinaturas de acesso compartilhado são uma alternativa segura que permite que outros clientes leiam, gravem e excluam dados da sua conta de armazenamento de acordo com as permissões que você tiver concedido a eles e sem que eles precisem da chave de conta. Se você tiver um conjunto lógico de parâmetros que são sempre semelhantes, o uso de SAP (política de acesso armazenada) será uma ideia melhor. Como usar uma SAS derivada de uma Política de Acesso Armazenado dá a possibilidade de revogar essa SAS imediatamente, a prática recomendada é, sempre que possível, usar Políticas de Acesso Armazenado. |