Partilhar via


Quadro de segurança: Gerenciamento de configuração | Atenuações

Produto/Serviço Artigo
Aplicação Web
Base de dados
API Web
Dispositivo IoT
Gateway de campo IoT
Gateway de nuvem IoT
Limite de confiança da máquina
Armazenamento do Azure
WCF

Implementar a Política de Segurança de Conteúdo (CSP) e desativar o JavaScript embutido

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Uma introdução à política de segurança de conteúdo, referência de política de segurança de conteúdo, introdução à política de segurança de conteúdo, posso usar CSP?
Passos

A Política de Segurança de Conteúdo (CSP) é um mecanismo de segurança de defesa profunda, um padrão W3C, que permite que os proprietários de aplicativos Web tenham controle sobre o conteúdo incorporado em seu site. O CSP é adicionado como um cabeçalho de resposta HTTP no servidor Web e é imposto no lado do cliente pelos navegadores. É uma política baseada em lista permitida - um site pode declarar um conjunto de domínios confiáveis a partir dos quais o conteúdo ativo, como JavaScript, pode ser carregado.

O CSP oferece os seguintes benefícios de segurança:

  • Proteção contra XSS: Se uma página for vulnerável a XSS, um invasor poderá explorá-la de duas maneiras:
    • Injetar <script>malicious code</script>. Esta exploração não funcionará devido à Restrição de Base do CSP-1
    • Injetar <script src="http://attacker.com/maliciousCode.js"/>. Essa exploração não funcionará, pois o domínio controlado pelo invasor não estará na lista de domínios permitidos do CSP
  • Controle sobre a exfiltração de dados: Se qualquer conteúdo mal-intencionado em uma página da Web tentar se conectar a um site externo e roubar dados, a conexão será abortada pelo CSP. Isso ocorre porque o domínio de destino não estará na lista de permissões do CSP
  • Defesa contra click-jacking: click-jacking é uma técnica de ataque usando a qual um adversário pode enquadrar um site genuíno e forçar os usuários a clicar em elementos da interface do usuário. Atualmente, a defesa contra click-jacking é conseguida através da configuração de um cabeçalho de resposta - X-Frame-Options. Nem todos os navegadores respeitam esse cabeçalho e, no futuro, o CSP será uma maneira padrão de se defender contra clickjacking
  • Relatório de ataque em tempo real: Se houver um ataque de injeção em um site habilitado para CSP, os navegadores dispararão automaticamente uma notificação para um ponto de extremidade configurado no servidor Web. Desta forma, o CSP serve como um sistema de alerta em tempo real.

Exemplo

Exemplo de política:

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com 

Esta política permite que os scripts sejam carregados apenas a partir do servidor da aplicação Web e do servidor do Google Analytics. Os scripts carregados a partir de qualquer outro site serão rejeitados. Quando o CSP está habilitado em um site, os seguintes recursos são automaticamente desativados para mitigar ataques XSS.

Exemplo

Os scripts embutidos não serão executados. Seguem-se exemplos de scripts em linha

<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);

Exemplo

As cadeias de caracteres não serão avaliadas como código.

Example: var str="alert(1)"; eval(str);

Ativar o filtro XSS do navegador

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Filtro de proteção XSS
Passos

A configuração do cabeçalho de resposta X-XSS-Protection controla o filtro de script entre sites do navegador. Este cabeçalho de resposta pode ter os seguintes valores:

  • 0: Isso desativará o filtro
  • 1: Filter enabled Se for detetado um ataque de script entre sites, para parar o ataque, o navegador limpará a página
  • 1: mode=block : Filter enabled. Em vez de limpar a página, quando um ataque XSS é detetado, o navegador impedirá a renderização da página
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. O navegador irá limpar a página e denunciar a violação.

Esta é uma função do Chromium que utiliza relatórios de violação CSP para enviar detalhes para um URI de sua escolha. As duas últimas opções são consideradas valores seguros.

ASP.NET aplicativos devem desabilitar o rastreamento e a depuração antes da implantação

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências ASP.NET Visão geral de depuração, Visão geral de rastreamento de ASP.NET, Como habilitar o rastreamento para um aplicativo ASP.NET, Como habilitar a depuração para aplicativos ASP.NET
Passos Quando o rastreamento está habilitado para a página, cada navegador que o solicita também obtém as informações de rastreamento que contêm dados sobre o estado do servidor interno e o fluxo de trabalho. Essas informações podem ser sensíveis em termos de segurança. Quando a depuração está habilitada para a página, os erros que acontecem no servidor resultam em dados de rastreamento de pilha completa apresentados ao navegador. Esses dados podem expor informações confidenciais de segurança sobre o fluxo de trabalho do servidor.

Aceda apenas a JavaScripts de terceiros a partir de fontes fidedignas

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos JavaScripts de terceiros devem ser referenciados apenas de fontes confiáveis. Os pontos finais de referência devem estar sempre em TLS.

Certifique-se de que as páginas de ASP.NET autenticadas incorporem defesas de correção da interface do usuário ou click-jacking

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências OWASP click-jacking Defense Cheat Sheet, Internet Explorer Internals - Combatendo o click-jacking com X-Frame-Options
Passos

O clickjacking, também conhecido como "ataque de reparação da interface do usuário", é quando um invasor usa várias camadas transparentes ou opacas para induzir um usuário a clicar em um botão ou link em outra página quando pretendia clicar na página de nível superior.

Esta camada é conseguida através da criação de uma página maliciosa com um iframe, que carrega a página da vítima. Assim, o invasor está "sequestrando" cliques destinados à sua página e encaminhando-os para outra página, provavelmente de propriedade de outro aplicativo, domínio ou ambos. Para evitar ataques de clickjacking, defina os cabeçalhos de resposta HTTP X-Frame-Options adequados que instruem o navegador a não permitir o enquadramento de outros domínios

Exemplo

O cabeçalho X-FRAME-OPTIONS pode ser definido via web.config do IIS. Trecho de código Web.config para sites que nunca devem ser enquadrados:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="DENY"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Exemplo

Código Web.config para sites que só devem ser enquadrados por páginas no mesmo domínio:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Certifique-se de que apenas origens confiáveis sejam permitidas se o CORS estiver habilitado em ASP.NET Aplicativos Web

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Formulários Web, MVC5
Atributos N/A
Referências N/A
Passos

A segurança do browser impede que uma página Web realize pedidos de AJAX para outro domínio. Essa restrição é chamada de política de mesma origem e impede que um site mal-intencionado leia dados confidenciais de outro site. No entanto, às vezes pode ser necessário expor APIs com segurança que outros sites podem consumir. O Cross Origin Resource Sharing (CORS) é um padrão W3C que permite que um servidor relaxe a política de mesma origem. Usando o CORS, um servidor pode permitir explicitamente algumas solicitações de origem cruzada enquanto rejeita outras.

O CORS é mais seguro e flexível do que técnicas anteriores, como o JSONP. Em sua essência, habilitar o CORS se traduz em adicionar alguns cabeçalhos de resposta HTTP (Access-Control-*) ao aplicativo Web e isso pode ser feito de algumas maneiras.

Exemplo

Se o acesso ao Web.config estiver disponível, o CORS pode ser adicionado através do seguinte código:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="https://example.com" />
      </customHeaders>
    </httpProtocol>

Exemplo

Se o acesso ao web.config não estiver disponível, o CORS poderá ser configurado adicionando o seguinte código C#:

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")

Observe que é fundamental garantir que a lista de origens no atributo "Access-Control-Allow-Origin" seja definida como um conjunto finito e confiável de origens. A falha ao configurar isso de forma inadequada (por exemplo, definindo o valor como '*') permitirá que sites mal-intencionados acionem solicitações de origem cruzada para o aplicativo >Web sem quaisquer restrições, tornando o aplicativo vulnerável a ataques CSRF.

Ativar o atributo ValidateRequest em páginas ASP.NET

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Formulários Web, MVC5
Atributos N/A
Referências Validação de solicitação - Prevenindo ataques de script
Passos

Validação do pedido, uma caraterística do ASP.NET desde a versão 1.1, impede que o servidor aceite conteúdo com HTML não codificado. Esta funcionalidade foi concebida para ajudar a impedir que alguns ataques de injeção de scripts com o código de script de cliente ou o HTML possam ser submetidos a um servidor, armazenado e, em seguida, apresentados a outros utilizadores. Ainda é altamente recomendável que valide todos os dados de entrada e que o código HTML o codifique quando adequado.

A validação da solicitação é realizada comparando todos os dados de entrada com uma lista de valores potencialmente perigosos. Se ocorrer uma correspondência, ASP.NET gera um HttpRequestValidationExceptionarquivo . Por padrão, o recurso Validação de Solicitação está habilitado.

Exemplo

No entanto, esse recurso pode ser desativado no nível da página:

<%@ Page validateRequest="false" %> 

ou, ao nível da aplicação

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

Observe que o recurso Validação de Solicitação não é suportado e não faz parte do pipeline MVC6.

Usar as versões mais recentes hospedadas localmente das bibliotecas JavaScript

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos

Os desenvolvedores que usam bibliotecas JavaScript padrão como JQuery devem usar versões aprovadas de bibliotecas JavaScript comuns que não contenham falhas de segurança conhecidas. Uma boa prática é usar a versão mais recente das bibliotecas, uma vez que elas contêm correções de segurança para vulnerabilidades conhecidas em suas versões mais antigas.

Se a versão mais recente não puder ser usada devido a razões de compatibilidade, as versões mínimas abaixo devem ser usadas.

Versões mínimas aceitáveis:

  • JQuery
    • JQuery 1.7.1
    • JQueryUI 1.10.0
    • JQuery Validar 1.9
    • JQuery Móvel 1.0.1
    • Ciclo JQuery 2.99
    • JQuery DataTables 1.9.0
  • Kit de ferramentas de controle Ajax
    • Kit de ferramentas de controle Ajax 40412
  • ASP.NET Web Forms e Ajax
    • ASP.NET Web Forms e Ajax 4
    • ASP.NET Ajax 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Nunca carregue nenhuma biblioteca JavaScript de sites externos, como CDNs públicas

Desativar a deteção automática de MIME

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Segurança do IE8 Parte V: Proteção abrangente, tipo MIME
Passos O cabeçalho X-Content-Type-Options é um cabeçalho HTTP que permite aos desenvolvedores especificar que seu conteúdo não deve ser detetado por MIME. Este cabeçalho foi projetado para mitigar ataques MIME-Sniffing. Para cada página que possa conter conteúdo controlável pelo usuário, você deve usar o cabeçalho HTTP X-Content-Type-Options:nosniff. Para habilitar o cabeçalho necessário globalmente para todas as páginas do aplicativo, siga um destes procedimentos

Exemplo

Adicione o cabeçalho no arquivo web.config se o aplicativo for hospedado pelos Serviços de Informações da Internet (IIS) 7 em diante.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>

Exemplo

Adicione o cabeçalho através do Application_BeginRequest global

void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}

Exemplo

Implementar módulo HTTP personalizado

public class XContentTypeOptionsModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += newEventHandler(context_PreSendRequestHeaders);
}
#endregion
void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
if (application == null)
  return;
if (application.Response.Headers["X-Content-Type-Options "] != null)
  return;
application.Response.Headers.Add("X-Content-Type-Options ", "nosniff");
}
}

Exemplo

Você pode habilitar o cabeçalho necessário somente para páginas específicas adicionando-o a respostas individuais:

this.Response.Headers["X-Content-Type-Options"] = "nosniff";

Remova cabeçalhos de servidor padrão em Sites do Windows Azure para evitar impressões digitais

Título Detalhes
Componente Aplicação Web
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos EnvironmentType - Azure
Referências Remoção de cabeçalhos de servidor padrão em Sites do Azure do Windows
Passos Cabeçalhos como Server, X-Powered-By, X-AspNet-Version revelam informações sobre o servidor e as tecnologias subjacentes. Recomenda-se suprimir esses cabeçalhos, evitando assim a impressão digital do aplicativo

Configurar um Firewall do Windows para acesso ao Mecanismo de Banco de Dados

Título Detalhes
Componente Base de Dados
Fase SDL Compilar
Tecnologias aplicáveis SQL Azure, OnPrem
Atributos N/A, Versão SQL - V12
Referências Como configurar um firewall do Banco de Dados SQL do Azure, Configurar um Firewall do Windows para acesso ao Mecanismo de Banco de Dados
Passos Os sistemas de firewall ajudam a prevenir o acesso não autorizado a recursos do computador. Para acessar uma instância do Mecanismo de Banco de Dados do SQL Server por meio de um firewall, você deve configurar o firewall no computador que executa o SQL Server para permitir o acesso

Certifique-se de que apenas origens confiáveis sejam permitidas se o CORS estiver habilitado em ASP.NET API Web

Título Detalhes
Componente API da Web
Fase SDL Compilar
Tecnologias aplicáveis MVC 5
Atributos N/A
Referências Habilitando solicitações entre origens na API Web 2 ASP.NET ASP.NET API Web - Suporte CORS na API Web 2 ASP.NET
Passos

A segurança do browser impede que uma página Web realize pedidos de AJAX para outro domínio. Essa restrição é chamada de política de mesma origem e impede que um site mal-intencionado leia dados confidenciais de outro site. No entanto, às vezes pode ser necessário expor APIs com segurança que outros sites podem consumir. O Cross Origin Resource Sharing (CORS) é um padrão W3C que permite que um servidor relaxe a política de mesma origem.

Usando o CORS, um servidor pode permitir explicitamente algumas solicitações de origem cruzada enquanto rejeita outras. O CORS é mais seguro e flexível do que técnicas anteriores, como o JSONP.

Exemplo

No App_Start/WebApiConfig.cs, adicione o seguinte código ao método WebApiConfig.Register

using System.Web.Http;
namespace WebService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Exemplo

O atributo EnableCors pode ser aplicado a métodos de ação em um controlador da seguinte maneira:

public class ResourcesController : ApiController
{
  [EnableCors("http://localhost:55912", // Origin
              null,                     // Request headers
              "GET",                    // HTTP methods
              "bar",                    // Response headers
              SupportsCredentials=true  // Allow credentials
  )]
  public HttpResponseMessage Get(int id)
  {
    var resp = Request.CreateResponse(HttpStatusCode.NoContent);
    resp.Headers.Add("bar", "a bar value");
    return resp;
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "PUT",                          // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "POST",                         // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
}

Observe que é fundamental garantir que a lista de origens no atributo EnableCors seja definida como um conjunto finito e confiável de origens. A falha ao configurar isso de forma inadequada (por exemplo, definindo o valor como '*') permitirá que sites mal-intencionados acionem solicitações de origem cruzada para a API sem quaisquer restrições, >tornando a API vulnerável a ataques CSRF. EnableCors pode ser decorado ao nível do controlador.

Exemplo

Para desabilitar CORS em um método específico em uma classe, o atributo DisableCors pode ser usado como mostrado abaixo:

[EnableCors("https://example.com", "Accept, Origin, Content-Type", "POST")]
public class ResourcesController : ApiController
{
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  // CORS not allowed because of the [DisableCors] attribute
  [DisableCors]
  public HttpResponseMessage Delete(int id)
  {
    return Request.CreateResponse(HttpStatusCode.NoContent);
  }
}
Título Detalhes
Componente API da Web
Fase SDL Compilar
Tecnologias aplicáveis MVC 6
Atributos N/A
Referências Habilitando solicitações entre origens (CORS) no ASP.NET Core 1.0
Passos

No ASP.NET Core 1.0, o CORS pode ser habilitado usando middleware ou MVC. Ao usar o MVC para habilitar o CORS, os mesmos serviços do CORS são usados, mas o middleware do CORS não.

Abordagem-1 : Habilitando CORS com middleware: Para habilitar o CORS para todo o aplicativo, adicione o middleware CORS ao pipeline de solicitação usando o método de extensão UseCors. Uma política de origem cruzada pode ser especificada ao adicionar o middleware CORS usando a classe CorsPolicyBuilder. Poderá fazê-lo de duas formas:

Exemplo

A primeira é chamar UseCors com uma lambda. O lambda usa um objeto CorsPolicyBuilder:

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
        builder.WithOrigins("https://example.com")
        .WithMethods("GET", "POST", "HEAD")
        .WithHeaders("accept", "content-type", "origin", "x-custom-header"));
}

Exemplo

O segundo é definir uma ou mais políticas CORS nomeadas e, em seguida, selecionar a política pelo nome em tempo de execução.

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowSpecificOrigin",
            builder => builder.WithOrigins("https://example.com"));
    });
}
public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowSpecificOrigin");
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

Abordagem-2 Habilitando CORS no MVC: os desenvolvedores podem, alternativamente, usar o MVC para aplicar CORS específicos por ação, por controlador ou globalmente para todos os controladores.

Exemplo

Por ação: para especificar uma política CORS para uma ação específica, adicione o atributo [EnableCors] à ação. Especifique o nome da política.

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }

Exemplo

Por controlador:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{

Exemplo

Globalmente:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
    });
}

Observe que é fundamental garantir que a lista de origens no atributo EnableCors seja definida como um conjunto finito e confiável de origens. A falha ao configurar isso de forma inadequada (por exemplo, definindo o valor como '*') permitirá que sites mal-intencionados acionem solicitações de origem cruzada para a API sem quaisquer restrições, >tornando a API vulnerável a ataques CSRF.

Exemplo

Para desativar o CORS para um controlador ou ação, use o atributo [DisableCors].

[DisableCors]
    public IActionResult About()
    {
        return View();
    }

Criptografar seções dos arquivos de configuração da API da Web que contêm dados confidenciais

Título Detalhes
Componente API da Web
Fase SDL Implementação
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Como: Criptografar seções de configuração no ASP.NET 2.0 Usando DPAPI, Especificando um provedor de configuração protegido, Usando o Cofre de Chaves do Azure para proteger segredos de aplicativo
Passos 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.

Certifique-se de que todas as interfaces de administração estejam protegidas com credenciais fortes

Título Detalhes
Componente Dispositivo IoT
Fase SDL Implementação
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos Todas as interfaces administrativas que o dispositivo ou gateway de campo expõe devem ser protegidas usando credenciais fortes. Além disso, quaisquer outras interfaces expostas como WiFi, SSH, compartilhamentos de arquivos, FTP devem ser protegidas com credenciais fortes. Senhas fracas padrão não devem ser usadas.

Certifique-se de que o código desconhecido não pode ser executado em dispositivos

Título Detalhes
Componente Dispositivo IoT
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Habilitando a Inicialização Segura e a Criptografia de Dispositivo BitLocker no Windows 10 IoT Core
Passos A Inicialização Segura UEFI restringe o sistema para permitir apenas a execução de binários assinados por uma autoridade especificada. Esse recurso impede que códigos desconhecidos sejam executados na plataforma e potencialmente enfraquecem a postura de segurança dela. Habilite a Inicialização Segura UEFI e restrinja a lista de autoridades de certificação confiáveis para assinar código. Assine todo o código implantado no dispositivo usando uma das autoridades confiáveis.

Criptografar o sistema operacional e outras partições do dispositivo IoT com o BitLocker

Título Detalhes
Componente Dispositivo IoT
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos O Windows 10 IoT Core implementa uma versão leve da Criptografia de Dispositivo BitLocker, que tem uma forte dependência da presença de um TPM na plataforma, incluindo o protocolo pré-OS necessário na UEFI que realiza as medições necessárias. Essas medições de pré-sistema operacional garantem que o sistema operacional mais tarde tenha um registro definitivo de como o sistema operacional foi lançado. Criptografe partições do sistema operacional usando o BitLocker e quaisquer outras partições também no caso de armazenarem dados confidenciais.

Certifique-se de que apenas os serviços/recursos mínimos estão habilitados nos dispositivos

Título Detalhes
Componente Dispositivo IoT
Fase SDL Implementação
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos Não habilite ou desative nenhum recurso ou serviço no sistema operacional que não seja necessário para o funcionamento da solução. Por exemplo, se o dispositivo não exigir que uma interface do usuário seja implantada, instale o Windows IoT Core no modo headless.

Criptografar o sistema operacional e outras partições do IoT Field Gateway com o BitLocker

Título Detalhes
Componente Gateway de campo IoT
Fase SDL Implementação
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos O Windows 10 IoT Core implementa uma versão leve da Criptografia de Dispositivo BitLocker, que tem uma forte dependência da presença de um TPM na plataforma, incluindo o protocolo pré-OS necessário na UEFI que realiza as medições necessárias. Essas medições de pré-sistema operacional garantem que o sistema operacional mais tarde tenha um registro definitivo de como o sistema operacional foi lançado. Criptografe partições do sistema operacional usando o BitLocker e quaisquer outras partições também no caso de armazenarem dados confidenciais.

Verifique se as credenciais de login padrão do gateway de campo foram alteradas durante a instalação

Título Detalhes
Componente Gateway de campo IoT
Fase SDL Implementação
Tecnologias aplicáveis Genérica
Atributos N/A
Referências N/A
Passos Verifique se as credenciais de login padrão do gateway de campo foram alteradas durante a instalação

Certifique-se de que o Cloud Gateway implementa um processo para manter o firmware dos dispositivos conectados atualizado

Título Detalhes
Componente Gateway de nuvem IoT
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos Escolha de gateway - Hub IoT do Azure
Referências Visão geral do Gerenciamento de Dispositivos do Hub IoT, tutorial de Atualização de Dispositivo para o Hub IoT do Azure usando a Imagem de Referência do Raspberry Pi 3 B+.
Passos LWM2M é um protocolo da Open Mobile Alliance for IoT Device Management. O gerenciamento de dispositivos do Azure IoT permite interagir com dispositivos físicos usando trabalhos de dispositivo. Certifique-se de que o Cloud Gateway implementa um processo para manter rotineiramente o dispositivo e outros dados de configuração atualizados usando o Gerenciamento de Dispositivos do Hub IoT do Azure.

Verifique se os dispositivos têm controles de segurança de ponto final configurados de acordo com as políticas organizacionais

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 dispositivos tenham controles de segurança de ponto final, como BitLocker para criptografia no nível de disco, antivírus com assinaturas atualizadas, firewall baseado em host, atualizações do sistema operacional, políticas de grupo, etc., configurados de acordo com as políticas de segurança organizacionais.

Garantir o gerenciamento seguro das chaves de acesso de armazenamento do Azure

Título Detalhes
Componente Armazenamento do Azure
Fase SDL Implementação
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Guia de segurança do Armazenamento do Azure - Gerenciando suas chaves de conta de armazenamento
Passos

Armazenamento de chaves: é recomendável armazenar as chaves de acesso do Armazenamento do Azure no Cofre de Chaves do Azure como um segredo e fazer com que os aplicativos recuperem a chave do cofre de chaves. Isto é recomendado devido às seguintes razões:

  • O aplicativo nunca terá a chave de armazenamento codificada em um arquivo de configuração, o que remove essa avenida de alguém ter acesso às chaves sem permissão específica
  • O acesso às chaves pode ser controlado usando o Microsoft Entra ID. Isso significa que um proprietário de conta pode conceder acesso ao punhado de aplicativos que precisam recuperar as chaves do Cofre de Chaves do Azure. Outros aplicativos não poderão acessar as chaves sem conceder-lhes permissão especificamente
  • Regeneração de chaves: é recomendável ter um processo em vigor para regenerar as chaves de acesso de armazenamento do Azure por motivos de segurança. Os detalhes sobre por que e como planejar a regeneração de chaves estão documentados no artigo de referência do Guia de Segurança do Armazenamento do Azure

Certifique-se de que apenas origens confiáveis sejam permitidas se o CORS estiver habilitado no armazenamento do Azure

Título Detalhes
Componente Armazenamento do Azure
Fase SDL Compilar
Tecnologias aplicáveis Genérica
Atributos N/A
Referências Suporte CORS para os Serviços de Armazenamento do Azure
Passos O Armazenamento do Azure permite-lhe ativar o CORS – Cross Origin Resource Sharing. Para cada conta de armazenamento, você pode especificar domínios que podem acessar os recursos nessa conta de armazenamento. Por padrão, o CORS está desativado em todos os serviços. Você pode habilitar o CORS usando a API REST ou a biblioteca do cliente de armazenamento para chamar um dos métodos para definir as políticas de serviço.

Habilitar o recurso de limitação de serviço do WCF

Título Detalhes
Componente WCF
Fase SDL Compilar
Tecnologias aplicáveis .NET Framework 3
Atributos N/A
Referências MSDN, Reino Fortify
Passos

Não impor um limite à utilização dos recursos do sistema pode resultar no esgotamento dos recursos e, em última análise, numa negação de serviço.

  • EXPLICAÇÃO: O Windows Communication Foundation (WCF) oferece a capacidade de limitar solicitações de serviço. Permitir muitas solicitações de clientes pode inundar um sistema e esgotar seus recursos. Por outro lado, permitir apenas um pequeno número de pedidos a um serviço pode impedir que utilizadores legítimos utilizem o serviço. Cada serviço deve ser ajustado e configurado individualmente para permitir a quantidade apropriada de recursos.
  • RECOMENDAÇÕES Habilite o recurso de limitação de serviço do WCF e defina limites apropriados para seu aplicativo.

Exemplo

Segue-se um exemplo de configuração com a limitação ativada:

<system.serviceModel> 
  <behaviors>
    <serviceBehaviors>
    <behavior name="Throttled">
    <serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" /> 
  ...
</system.serviceModel> 

WCF-Divulgação de informações através de metadados

Título Detalhes
Componente WCF
Fase SDL Compilar
Tecnologias aplicáveis .NET Framework 3
Atributos N/A
Referências MSDN, Reino Fortify
Passos Os metadados podem ajudar os atacantes a conhecer o sistema e a planear uma forma de ataque. Os serviços WCF podem ser configurados para expor metadados. Os metadados fornecem informações detalhadas sobre a descrição do serviço e não devem ser transmitidos em ambientes de produção. As HttpGetEnabled / HttpsGetEnabled propriedades da classe ServiceMetaData definem se um serviço irá expor os metadados

Exemplo

O código abaixo instrui o WCF a transmitir os metadados de um serviço

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb); 

Não difunda metadados de serviço em um ambiente de produção. Defina as propriedades HttpGetEnabled / HttpsGetEnabled da classe ServiceMetaData como false.

Exemplo

O código abaixo instrui o WCF a não transmitir metadados de um serviço.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = false; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb);