Quadro de segurança: gerenciamento de configurações | Atenuações

Produto/Serviço Artigo
Aplicativo Web
Backup de banco de dados
API da Web
Dispositivo IoT
Gateway de Campo de IoT
Gateway de Nuvem IoT
Limite de confiança de computador
Armazenamento do Azure
WCF

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

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
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?
Etapas

A CSP (Política de Segurança de Conteúdo) é um mecanismo de defesa aprofundado, um padrão de W3C, que permite aos proprietários do aplicativo Web ter controle sobre os conteúdos inseridos em seus sites. A CSP é adicionada como um cabeçalho de resposta HTTP no servidor Web e é aplicada pelos navegadores do cliente. É uma política baseada em lista de permissões ─ um site pode declarar um conjunto de domínios confiáveis, dos quais conteúdos ativos, como JavaScript, podem ser carregados.

A 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>: essa exploração não funcionará devido à primeira restrição básica da CSP
    • Injetar <script src="http://attacker.com/maliciousCode.js"/>: Essa exploração não funcionará porque o domínio controlado pelo invasor não estará na lista de permissões de domínios da CSP
  • Controle sobre o vazamento de dados: se algum conteúdo mal-intencionado em uma página da Web tentar se conectar a um site externo e roubar dados, a conexão será anulada pelo CSP. Isso acontece porque o domínio de destino não estará na lista de permissões do CSP
  • Defesa contra furto de clique: o furto de clique é uma técnica de ataque na qual um invasor adultera um site genuíno e faz com que os usuários cliquem nos elementos de sua interface do usuário. Para se proteger contra o furto de clique atualmente, basta configurar um cabeçalho de resposta X-Frame-Options. Nem todos os navegadores respeitam esse cabeçalho, por isso a CSP será a melhor maneira de se defender contra o furto de clique
  • Relatórios de ataque em tempo real: se houver um ataque de injeção em um site com o CSP habilitado, os navegadores disparam automaticamente uma notificação para um ponto de extremidade configurado no servidor Web. Dessa forma, a CSP atua como um sistema de aviso em tempo real.

Exemplo

Política de exemplo:

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

Essa política permite que os scripts sejam carregados somente no servidor do aplicativo Web e no servidor do Google Analytics. Os scripts carregados em qualquer outro site serão rejeitados. Quando a CSP estiver habilitada em um site, os seguintes recursos serão desabilitados automaticamente para atenuar ataques de XSS.

Exemplo

Os scripts embutido não serão executados. Veja abaixo exemplos de scripts embutidos:

<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);

Habilitar o filtro XSS do navegador

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Filtro de proteção contra XSS
Etapas

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

  • 0: - esse valor desabilitará o filtro.
  • 1: Filter enabled - se for detectado um ataque de script entre sites, o navegador corrigirá a página para interromper o ataque.
  • 1: mode=block : Filter enabled. Em vez de limpar a página, quando um ataque de XSS for detectado, o navegador impedirá a renderização da página
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. o navegador corrigirá a página e relatará a violação.

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

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

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Visão geral sobre depuração do ASP.NET, Visão geral sobre rastreamento do ASP.NET, Como: habilitar o rastreamento de um aplicativo ASP.NET, Como: habilitar a depuração de aplicativos do ASP.NET
Etapas Quando o rastreamento estiver habilitado para a página, todos os navegadores que a solicitarem também obterão as informações de rastreamento que contêm dados do fluxo de trabalho e do estado interno do servidor. Elas podem ser informações confidenciais de segurança. Quando a depuração estiver habilitada para a página, os erros ocorridos no servidor serão apresentados ao navegador como uma pilha de dados de rastreamento. Esses dados podem conter informações confidenciais de segurança sobre fluxo de trabalho do servidor.

Acessar JavaScripts de terceiros somente de origens confiáveis

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas Os JavaScripts de terceiros devem ser referenciados somente de origens confiáveis. Os pontos de extremidade de referência devem estar sempre no TLS.

Garantir que as páginas ASP.NET autenticadas incluam defesas contra adulterações de interface do usuário ou furto de clique

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Folha de dados do OWASP sobre mecanismos de proteção contra furto de clique, Internals IE – Combatendo o furto de clique com X-Frame-Options
Etapas

O furto de clique, também conhecido como "ataque de adulteração de IU", ocorre quando um invasor utiliza várias camadas transparentes ou opacas para fazer com que o usuário clique em um botão ou link de outra página quando, na verdade, ele pretendia clicar na página de nível superior.

Para aplicar essas camadas, é preciso criar uma página mal-intencionada com um iframe para carregar a página da vítima. Assim, o invasor é "sequestra" os cliques destinados a uma página e os encaminha para outra página, que provavelmente pertence a outro aplicativo, domínio ou ambos. Para evitar esse tipo de ataque, defina os cabeçalhos de resposta HTTP de X-Frame-Options adequados que instruem o navegador a não permitir enquadramentos de outros domínios

Exemplo

O cabeçalho X-FRAME-OPTIONS pode ser definido com o arquivo web.config do IIS. O snippet de código do arquivo 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

O código do arquivo web.config para sites que só devem ser enquadrados por páginas do mesmo domínio:

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

Garantir que apenas fontes confiáveis sejam permitidas se o CORS estiver habilitado em aplicativos Web do ASP.NET

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Web Forms, MVC5
Atributos N/D
Referências N/D
Etapas

A segurança do navegador impede que uma página da Web envie solicitações do AJAX para outro domínio. Essa restrição se chama política da mesma origem e impede que um site mal-intencional leia dados confidenciais de outro site. No entanto, às vezes pode ser necessário expor APIs de forma segura para que os outros sites possam utilizá-las. O CORS (Compartilhamento de Recursos entre Origens) é um padrão W3C que permite ao servidor relaxar a política de mesma origem. Usando o CORS, um servidor pode explicitamente permitir algumas solicitações entre origens e rejeitar outras.

O CORS é mais seguro e flexível do que técnicas anteriores, como o JSONP. Essencialmente, habilitar o CORS significa adicionar alguns cabeçalhos de resposta HTTP (Access - Control-*) ao aplicativo da Web. Isso pode ser feito de duas formas.

Exemplo

Se o acesso ao arquivo Web.config estiver disponível, o CORS poderá ser adicionado ao 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 arquivo web.config não estiver disponível, o CORS pode ser adicionado no seguinte código C#:

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

É essencial garantir que a lista de origens no atributo "Access-Control-Allow-Origin" esteja definida como um conjunto finito e confiável de origens. Se isso for configurado incorretamente (por exemplo, definindo o valor como '*') sites mal-intencionados poderão disparar solicitações entre origens ao aplicativo Web > sem restrições, tornando o aplicativo vulnerável a ataques de CSRF.

Habilitar o atributo ValidateRequest em páginas ASP.NET

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Web Forms, MVC5
Atributos N/D
Referências Solicitar validação - evitando ataques de script
Etapas

A validação de solicitação, um recurso do ASP.NET oferecido desde a versão 1.1, impede que o servidor aceite conteúdo sem HTML codificado. Esse recurso foi desenvolvido para ajudar a impedir alguns ataques de injeção de script, nos quais o código de script do cliente ou HTML pode ser enviado sem saber para um servidor, armazenado e apresentado a outros usuários. Ainda recomendamos que você valide todos os dados de entrada e os codifique com HTML quando for apropriado.

A validação de solicitação é executada pela comparação de todos os dados de entrada com uma lista de valores potencialmente perigosos. Se uma correspondência for encontrada, o ASP.NET gera uma HttpRequestValidationException. Por padrão, o recurso de validação de solicitação está habilitado.

Exemplo

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

<%@ Page validateRequest="false" %> 

ou no nível do aplicativo:

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

Observe que o recurso de validação de solicitação não tem suporte no pipeline do MVC6 nem faz parte dele.

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

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas

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

Se a versão mais recente não puder ser usada por motivos 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 Validate 1.9
    • JQuery Mobile 1.0.1
    • JQuery Cycle 2.99
    • JQuery DataTables 1.9.0
  • Ajax Control Toolkit
    • Ajax Control Toolkit 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 quaisquer bibliotecas JavaScript de sites externos, como CDNs públicas.

Desabilitar a detecção automática de MIME

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Segurança do IE8 parte V: proteção abrangente, Tipo de MIME
Etapas O cabeçalho X-Content-Type-Options é um cabeçalho HTTP que permite aos desenvolvedores especificar que seus conteúdos não devem ter o MIME detectado. Esse cabeçalho foi criado para reduzir os ataques de detecção de MIME. Para cada página que pode incluir conteúdo controlável pelo usuário, você deve usar o cabeçalho HTTP X-Content-Type-Options:nosniff. Para habilitar globalmente o cabeçalho necessário para todas as páginas do aplicativo, você tem as seguintes opções:

Exemplo

Adicionar o cabeçalho no arquivo web.config se o aplicativo estiver hospedado no Internet Information Services (IIS) 7 ou posterior.

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

Exemplo

Adicionar o cabeçalho usando a Aplication_BeginRequest global

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

Exemplo

Implementar o 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 apenas para páginas específicas adicionando-o a respostas individuais:

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

Remover cabeçalhos de servidor padrão nos sites do Microsoft Azure para evitar impressões digitais

Title Detalhes
Componente Aplicativo Web
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos Tipo de ambiente - Azure
Referências Removendo cabeçalhos de servidor padrão nos sites do Microsoft Azure
Etapas Cabeçalhos como Server, X-Powered-By e X-AspNet-Version revelam informações sobre o servidor e as tecnologias subjacentes. É recomendável suprimir esses cabeçalhos, impedindo, assim, a impressão digital do aplicativo

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

Title Detalhes
Componente Banco de dados
Fase do SDL Build
Tecnologias aplicáveis SQL Azure, OnPrem
Atributos N/D, Versão do SQL - V12
Referências Como configurar um firewall de Banco de Dados SQL do Azure, Configurar um Firewall do Windows para Acesso ao Mecanismo do Banco de Dados
Etapas Os sistemas de Firewall ajudam a impedir o acesso não autorizado aos recursos do computador. Para acessar uma instância do mecanismo de banco de dados do SQL Server por meio de um firewall, você precisa configurar o firewall no computador que está executando o SQL Server para permitir o acesso.

Garantir que apenas fontes confiáveis sejam permitidas se o CORS estiver habilitado na ASP.NET Web API

Title Detalhes
Componente API Web
Fase do SDL Build
Tecnologias aplicáveis MVC 5
Atributos N/D
Referências Permitindo solicitações entre origens na ASP.NET Web API 2, ASP.NET Web API - suporte ao CORS na ASP.NET Web API 2
Etapas

A segurança do navegador impede que uma página da Web envie solicitações do AJAX para outro domínio. Essa restrição se chama política da mesma origem e impede que um site mal-intencional leia dados confidenciais de outro site. No entanto, às vezes pode ser necessário expor APIs de forma segura para que os outros sites possam utilizá-las. O CORS (Compartilhamento de Recursos entre Origens) é um padrão W3C que permite ao servidor relaxar a política de mesma origem.

Usando o CORS, um servidor pode explicitamente permitir algumas solicitações entre origens e rejeitar outras. O CORS é mais seguro e flexível do que técnicas anteriores, como o JSONP.

Exemplo

No arquivo 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 aos 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);
  }
}

É essencial garantir que a lista de origens no atributo EnableCors esteja definida como um conjunto finito e confiável de origens. Se isso não for configurado corretamente (por exemplo, definindo o valor como '*'), sites mal-intencionados poderão disparar solicitações de origem cruzada para a API sem restrições, >tornando-a vulnerável a ataques de CSRF. O atributo EnableCors pode ser decorado no nível do controlador.

Exemplo

Para desabilitar o CORS em um determinado método de uma classe, use o atributo DisableCors conforme 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);
  }
}
Title Detalhes
Componente API Web
Fase do SDL Build
Tecnologias aplicáveis MVC 6
Atributos N/D
Referências Permitindo solicitações entre origens (CORS) no ASP.NET Core 1.0
Etapas

No ASP.NET 1.0, o CORS pode ser habilitado com o middleware ou o MVC. Quando o MVC é usado para habilitar o CORS, os mesmos serviços do CORS são usados, mas o middleware CORS não.

Abordagem 1 Habilitar CORS com middleware: para habilitar o CORS para todo o aplicativo, adicione o middleware do CORS ao pipeline de solicitação usando o método da extensão UseCors. Uma política entre origens pode ser especificada quando o middleware do CORS for adicionado usando a classe CorsPolicyBuilder. Há duas maneiras de fazer isso:

Exemplo

A primeira é chamar UseCors com um lambda. O lambda utiliza 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

A segunda é definir uma ou mais políticas CORS e, em seguida, selecionar a política pelo nome no 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 Habilitar CORS no MVC: os desenvolvedores podem usar o MVC como uma alternativa à aplicação de um CORS específico por ação, por controlador ou globalmente para todos os controladores.

Exemplo

Por ação: para especificar uma política de 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"));
    });
}

É essencial garantir que a lista de origens no atributo EnableCors esteja definida como um conjunto finito e confiável de origens. Se isso não for configurado corretamente (por exemplo, definindo o valor como '*'), sites mal-intencionados poderão disparar solicitações de origem cruzada para a API sem restrições, >tornando-a vulnerável a ataques de CSRF.

Exemplo

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

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

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

Title Detalhes
Componente API Web
Fase do SDL Implantação
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Como Criptografar seções de configuração no ASP.NET 2.0 usando DPAPI, Especificar um provedor de configuração protegido, Como usar o Azure Key Vault para proteger os segredos do aplicativo
Etapas Arquivos de configuração, tais como Web. config e appsettings.json geralmente são usados para armazenar informações confidenciais, incluindo nomes de usuários, senhas, cadeias de conexão de banco de dados e chaves de criptografia. Se você não proteger essas informações, o aplicativo ficará vulnerável a usuários mal-intencionados, que podem obter informações sigilosas, como nomes usuários e senhas de contas, nomes de bancos de dados e nomes de servidores. Com base no tipo de implantação (no Azure ou local), criptografe as seções confidenciais dos arquivos de configuração usando a DPAPI ou serviços, como o Azure Key Vault.

Garantir que todas as interfaces de administrador sejam protegidas com credenciais fortes

Title Detalhes
Componente Dispositivo IoT
Fase do SDL Implantação
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas Quaisquer interfaces administrativas expostas pelo gateway de campo ou pelo dispositivo devem ser protegidas com credenciais fortes. Outras interfaces expostas, como Wi-Fi, SSH, compartilhamentos de arquivos e FTP, também devem ser protegidas com credenciais fortes. Senhas fracas padrão não devem ser usadas.

Garantir que um código desconhecido não seja executado em dispositivos

Title Detalhes
Componente Dispositivo IoT
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Habilitar a Inicialização Segura e a Criptografia do Dispositivo do BitLocker no Windows 10 IoT Core
Etapas A Inicialização Segura de UEFI restringe o sistema a permitir somente a execução dos binários assinados por uma autoridade especificada. Esse recurso impede que códigos desconhecidos sejam executados na plataforma e enfraqueçam sua postura de segurança. Habilite a Inicialização Segura de UEFI e restrinja a lista de autoridades de certificação confiáveis para assinatura de código. Assine todos os códigos implantados no dispositivo usando uma das autoridades confiáveis.

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

Title Detalhes
Componente Dispositivo IoT
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas O Windows 10 IoT Core implementa uma versão leve da Criptografia do Dispositivo do BitLocker, que tem uma dependência forte na presença de um TPM na plataforma, incluindo o protocolo preOS necessário na UEFI que realiza as medições necessárias. Essas medições do preOS garantem que o sistema operacional tenha posteriormente um registro definitivo de como foi iniciado. Use o BitLocker para criptografar as partições do sistema operacional e outras partições que armazenem dados confidenciais.

Garantir que apenas o mínimo de serviços/recursos estejam habilitados nos dispositivos

Title Detalhes
Componente Dispositivo IoT
Fase do SDL Implantação
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas Não habilite ou desabilite no sistema operacional recursos ou serviços que não sejam necessários ao funcionamento da solução. Por exemplo, se o dispositivo não precisar da implantação de uma IU, instale o Windows IoT Core no modo sem periféricos.

Criptografar o sistema operacional e partições adicionais do Gateway de Campo de IoT com o BitLocker

Title Detalhes
Componente Gateway de Campo de IoT
Fase do SDL Implantação
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas O Windows 10 IoT Core implementa uma versão leve da Criptografia do Dispositivo do BitLocker, que tem uma dependência forte na presença de um TPM na plataforma, incluindo o protocolo preOS necessário na UEFI que realiza as medições necessárias. Essas medições do preOS garantem que o sistema operacional tenha posteriormente um registro definitivo de como foi iniciado. Use o BitLocker para criptografar as partições do sistema operacional e outras partições que armazenem dados confidenciais.

Garanta que as credenciais de logon padrão do gateway de campo sejam alteradas durante a instalação.

Title Detalhes
Componente Gateway de Campo de IoT
Fase do SDL Implantação
Tecnologias aplicáveis Genérico
Atributos N/D
Referências N/D
Etapas Garanta que as credenciais de logon padrão do gateway de campo sejam alteradas durante a instalação.

Garantir que o Gateway de Nuvem implemente um processo para manter atualizado o firmware de dispositivos conectados

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 Visão geral do gerenciamento de dispositivo 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+.
Etapas O LWM2M é um protocolo da Open Mobile Alliance destinado ao gerenciamento de dispositivos IoT. O gerenciamento de dispositivos IoT do Azure permite que você interaja com dispositivos físicos usando os trabalhos do dispositivo. Certifique-se de que o Gateway de Nuvem implemente um processo para manter constantemente atualizados o dispositivo e outros dados de configuração usando o gerenciamento de dispositivos do Hub IoT do Azure.

Garantir que os controles de segurança de ponto de extremidade estejam configurados nos dispositivos de acordo com as políticas organizacionais

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 dispositivos têm controles de segurança de ponto de extremidade, como o BitLocker, para a criptografia de nível de disco, além de um antivírus com assinaturas atualizadas, um firewall baseado em host, atualizações de sistema operacional, políticas de grupo etc., e se eles estão configurados de acordo com as políticas de segurança organizacionais.

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

Title Detalhes
Componente Armazenamento do Azure
Fase do SDL Implantação
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Guia de segurança do Armazenamento do Azure - Gerenciando as chaves da conta de armazenamento
Etapas

Armazenamento de chave: recomenda-se armazenar as chaves de acesso do Armazenamento do Azure como um segredo no Azure Key Vault e solicitar que os aplicativos recuperem a chave diretamente do cofre de chaves. Recomendamos que você faça isso pelos seguintes motivos:

  • O aplicativo nunca adicionará a chave de armazenamento ao código de um arquivo de configuração, o que remove a possibilidade de alguém obter acesso às chaves sem uma permissão específica.
  • O acesso às chaves pode ser controlado usando a ID do Microsoft Entra. Isso significa que um proprietário de conta pode conceder acesso a diversos aplicativos que precisam recuperar as chaves do Azure Key Vault. Outros aplicativos não poderão acessar as chaves sem que recebam uma permissão específica para isso.
  • Regeneração de chave: por motivos de segurança, recomendamos que você implante um processo para regenerar chaves de acesso no Armazenamento do Azure. Para obter informações detalhadas sobre por que e como planejar a regeneração de chaves, consulte o arquivo mencionado na seção Referência, incluído no Guia de segurança do Armazenamento do Azure.

Garantir que apenas fontes confiáveis sejam permitidas se o CORS estiver habilitado no Armazenamento do Azure

Title Detalhes
Componente Armazenamento do Azure
Fase do SDL Build
Tecnologias aplicáveis Genérico
Atributos N/D
Referências Suporte ao CORS para os serviços de armazenamento do Azure
Etapas O Armazenamento do Azure permite habilitar o CORS – Compartilhamento de Recursos entre Origens. Para cada conta de armazenamento, é possível especificar os domínios que podem acessar os recursos na conta de armazenamento. Por padrão, o CORS está desabilitado em todos os serviços Você pode habilitar o CORS usando a API REST ou a biblioteca de cliente de armazenamento para chamar um dos métodos e definir as políticas de serviço.

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

Title Detalhes
Componente WCF
Fase do SDL Build
Tecnologias aplicáveis .NET Framework 3
Atributos N/D
Referências MSDN, Fortify Kingdom
Etapas

Não definir um limite para o uso de recursos do sistema pode resultar no esgotamento de recursos e, por fim, em uma negação de serviço.

  • EXPLICAÇÃO: o Windows Communication Foundation (WCF) oferece a opção de restringir as solicitações de serviço. Permitir muitas solicitações de clientes pode sobrecarregar o sistema e esgotar seus recursos. Por outro lado, permitir apenas um pequeno número de solicitações para um serviço pode impedir usuários legítimos de usar 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ços do WCF e defina os limites apropriados para o aplicativo.

Exemplo

Veja abaixo um exemplo de configuração com a limitação habilitada:

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

Divulgação de informações do WCF por meio de metadados

Title Detalhes
Componente WCF
Fase do SDL Build
Tecnologias aplicáveis .NET Framework 3
Atributos N/D
Referências MSDN, Fortify Kingdom
Etapas Os metadados podem ajudar invasores a obter mais informações sobre o sistema e a planejar uma forma de ataque. Os serviços do WCF podem ser configurados para expor os metadados, que fornecem informações descritivas detalhadas do serviço e que não devem ser transmitidos em ambientes de produção. As propriedades HttpGetEnabled / HttpsGetEnabled da classe ServiceMetaData definem se um serviço deve expor os metadados.

Exemplo

O código mostrado 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 transmita os metadados de um serviço em um ambiente de produção. Defina as propriedades HttpGetEnabled / HttpsGetEnabled da classe ServiceMetaData classe como false.

Exemplo

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

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