01. VISÃO GERAL

O objetivo desta documentação é auxiliar os nossos clientes na parametrização para aumentar o nível de segurança do Meu RH. Através de Pentest realizado internamente e pelos nossos clientes, chegamos em uma orientação que deve ser seguida para aumentar o nível de segurança do ambiente exposto na internet.

02. CONFIGURAÇÕES INICIAIS

DescriçãoDocumentação

Habilitar a utilização de Token da aplicação (Recomendado)

RH - RM - Meu RH - Utilizar token para o Meu RH
Utilizar um certificado SSL válido (Recomendado)RH - RM - Meu RH - Usando certificado SSL
É recomendado que os protocolos criptográficos considerados inseguros detectados na
aplicação - TLSv1.0 e TLSv1.1 - sejam desativados, fazendo uso apenas dos protocolos mais seguros TLSv1.2 e TLSv1.3 (Recomendado)

https://thesecmaster.com/how-to-disable-tls-1-0-and-tls-1-1-on-windows-server/

Configurar bloqueio de usuário ao inserir senha incorreta no login (Recomendado)

CONFIGURAÇÃO DE BLOQUEIO POR ERRO AO LOGAR NO SISTEMA - Linha RM - TDN

A comunicação com o HOST já é feita com segurança e os dados não são trafegados em “plain text” por padrão. Porém para aumentar a segurança e fazer com que as informações trafeguem criptografadas e com ainda mais segurança, sugerimos que habilitem o SSL no HOST. (Opcional)

Habilitar SSL/TLS no Host - Linha RM

Ao realizar a integração com o TOTVS Identity deverá utilizar o MFA (Recomendado)

Autenticação utilizando TOTVS Identity

Ao realizar a integração com o Azure AD deverá utilizar o MFA (Recomendado)

Integração Azure AD utilizando OAUTH2

É recomendado que as cifras inseguras sejam desabilitadas no ativo, permitindo somente o uso de cifras criptográficas seguras que conseguem garantir a confidencialidade no tráfego dos dados, impedindo assim que ataques de interceptação possam capturar e quebrar as cifras utilizadas. (Recomendado)

Cipher suites recommendations · Cloudflare SSL/TLS docs

03. CONFIGURAÇÕES NO Web.Config

Para realizar as configurações abaixo será necessário acessar o arquivo web.config da pasta FrameHTML.


  • Desabilitar o VERB TRACE

Com o Verb TRACE habilitado, é possível obter acesso a informações em cabeçalhos HTTP, como cookies e dados de autenticação.

Desabilitar o TRACE
<security>
    <requestFiltering removeServerHeader="true"> 
       <verbs allowUnlisted="true">  
          <add verb="TRACE" allowed="false" />
       </verbs>  
    </requestFiltering>
</security>

Para verificar se o TRACE foi desabilitado corretamente, basta executar o comando abaixo via CMD, o retorno de Connection deve ser close.

Referência: https://www.tenable.com/audits/items/CIS_v1.1.1_MS_IIS_10_Level_1.audit:0fb65afb0c7ec92660216033477e726c

O trecho de código mencionado deve ser incluído no nó <system.webServer>



  • Desabilitar o Debug: "ASP.NET DEBUG Method Enabled"

Definir o debug como false garante que as informações detalhadas de erro não sejam exibidas indevidamente durante o uso da aplicação, reduzindo o risco de vazamento de informações.

Incluir a tag debug="false" no compilation
<compilation debug="false" />

Referência: https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/aspnet/development/disable-debugging-application

O elemento compilation pode ser localizado no nó <system.web>



  • Configurando os Headers

AtributoValores possíveisDescriçãoReferência
X-Content-Type-Optionsnosniff
Para evitar o sniffing do tipo MIME, você pode adicionar o cabeçalho X-Content-Type-Options. 
Isso torna mais difícil para os hackers adivinharem o tipo certo de mime, inspecionando o conteúdo.
X-Content-Type-Options - HTTP | MDN
X-Xss-Protection
0
1
0; mode=block
1; mode=block
O X-Xss-Protection é um recurso implementado no navegador mais moderno, que interrompe o carregamento da página quando um ataque de script entre sites é detectado.

X-XSS-Protection - HTTP | MDN


X-Frame-Options
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-Frame-Options: ALLOW-FROM https://example.com/
O cabeçalho X-Frame-Options garante que os hackers não criem iframe para o seu site, a fim de induzi-lo a clicar em links que você nunca quis. 
X-Frame-Options - HTTP | MDN
Cache-Control

public

private

no-cache

no-store

max-age

A diretiva Cache-Control é usada para especificar como os caches devem se comportar ao armazenar uma resposta HTTP e como os navegadores devem tratar essa respostaCache-Control - HTTP | MDN
Strict-Transport-Security

maxage=tempoEmSegundos

includeSubDomains

preload

É um mecanismo de política que ajuda a proteger sites contra ataques man-in-the-middle, como ataques de downgrade de protocolo e sequestro de cookies.Segurança de Transporte Estrita - HTTP | MDN
Cross-Origin-Embedder-Policy

require-corp

unsafe-none

O cabeçalho de resposta HTTP Cross-Origin-Embedder-Policy é incluído pelo servidor para impedir que um documento acesse recursos entre origens que não o permitem explicitamente.Cross-Origin-Embedder-Policy - HTTP | MDN
Cross-Origin-Resource-Policy

same-origin

same-site

cross-origin

Cross-Origin Resource Policy é uma política definida pelo cabeçalho HTTP Cross-Origin-Resource-Policy que permite que sites e aplicativos optem pela proteção contra determinadas solicitações de outras origens.Política de Recursos entre Origens (CORP) - HTTP | MDN
Cross-Origin-Opener-Policy

same-origin

same-origin-allow-popups

unsafe-none

É um cabeçalho de segurança que controla como uma janela ou aba pode interagir com outras abas ou janelas em diferentes origens. Isso ajuda a proteger contra ataques de abertura de origem cruzada (Cross-Origin Window Opener Abuse), garantindo que janelas ou abas só possam ser abertas por scripts em seu próprio contexto de origem.Cross-Origin-Opener-Policy - HTTP | MDN
Permissions-Policy

camera

microphone

geolocation

fullscreen

A diretiva Permissions-Policy é um cabeçalho de segurança que permite que um site controle quais recursos e APIs estão disponíveis para uso no navegador. Isso ajuda a proteger a privacidade dos usuários, limitando o acesso a recursos sensíveis apenas a sites confiáveis.Permissions-Policy - HTTP | MDN
Referrer-Policy

no-referrer

no-referrer-when-downgrade

origin

origin-when-cross-origin

same-origin

strict-origin

strict-origin-when-cross-origin

A diretiva Referrer-Policy é um cabeçalho de segurança que controla como o cabeçalho Referer é incluído nas requisições HTTP. O cabeçalho Referer informa ao servidor de destino de onde veio o usuário, o que pode ser útil para fins de análise, mas também pode expor informações sensíveis, como URLs completas.Referrer-Policy - HTTP | MDN
Content Security Policy (CSP)

default-src

script-src

style-src (Obrigatório incluir 'unsafe-inline' e 'unsafe-eval')

img-src

font-src

frame-src

frame-ancestors 

A diretiva Content-Security-Policy (CSP) é um cabeçalho de segurança importante que ajuda a mitigar os riscos de ataques como XSS (Cross-Site Scripting) e outros tipos de ataques baseados em injeção de código. Ela permite que os desenvolvedores controlem quais recursos são carregados em uma página web e de onde eles podem ser carregados.Content Security Policy (CSP) - HTTP | MDN
Sugestão de configuração
   <httpProtocol>
      <customHeaders>
        <add name="X-Content-Type-Options" value="nosniff" />
        <add name="X-Xss-Protection" value="1; mode=block" />
        <add name="X-Frame-Options" value="SAMEORIGIN" />
        <add name="Cache-Control" value="no-store" />
        <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
		<add name="Cross-Origin-Embedder-Policy" value="require-corp" />
        <add name="Cross-Origin-Resource-Policy" value="same-origin" />
		<add name="Cross-Origin-Opener-Policy" value="same-origin" />
  		 <add name="Permissions-Policy" value="camera=(self), microphone=(self), geolocation=(self), fullscreen=(self)" />
	    <add name="Referrer-Policy" value="no-referrer-when-downgrade" />
		<add name="Content-Security-Policy" value="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'" />
       </customHeaders>
    </httpProtocol>

ATENÇÃO!

As configuração mencionadas acima são apenas uma sugestão de parametrização, pois dependerá da configuração do ambiente de cada cliente. 

Os atributos 'unsafe-inline' e 'unsafe-eval' na diretiva script-src são obrigatórios de devido a exigência do funcionamento da aplicação,

O elemento HttpProtocol deve ser incluído no nó <system.webServer>



  • Removendo cabeçalho de resposta X-Powered-By

Alguns cabeçalhos HTTP, como o "X-Powered-By", podem expor a tecnologia de servidor utilizada. Remover esses cabeçalhos dificultará um pouco mais para um invasor identificar o servidor que está executando o aplicativo.

Removendo cabeçalho X-Powered-By
   <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>

Referência: How to delete IIS custom headers like X-Powered-By: ASP.NET from response? - Stack Overflow

O elemento HttpProtocol deve ser incluído no nó <system.webServer>



  • Removendo cabeçalho de resposta X-AspNet-Version

Definir a propriedade enableVersionHeader como false no elemento HttpRuntime fará com que as informações da versão do ASP.NET utilizada não sejam evidenciadas nos cabeçalhos de resposta.

Removendo cabeçalho X-AspNet-Version
<httpRuntime targetFramework="4.8" enableVersionHeader="false" />

Referência: Remove header information from responses sent by your website

O elemento HttpRuntime pode ser localizado no nó <system.web>



  • Reduzindo detalhamento de mensagens exibidas para o usuário

Essa configuração é recomendada para reduzir o nível de detalhamento de mensagens exibidas para o usuário.

Reduzindo detalhamento de mensagens
<add key="StackTraceVisible" value="false" />

Referência: Improper Error Handling | OWASP Foundation

A key StackTraceVisible deve ser incluída no nó <appSettings>



  • Trafegando cookies por HTTPS e controlando mensagens de erro.

É recomendado que os cookies sejam transitados via HTTPS e que as mensagens de erro sejam apresentadas para o usuário de forma mais amigável.

Transitando cookie por HTTPS
<customErrors mode="On" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />

As tags mencionadas acima devem ser incluídas no nó <system.Web>


  • Desabilitando o acesso ao Swagger


           Para desabilitar o swagger, deverá seguir o procedimento abaixo, segue a documentação completa em APIs de Framework - Módulo Serviços Globais#1-APIsdeFrameworkeswagger




ATENÇÃO!

Todas as informações sugeridas acima foram checadas e testadas em um ambiente controlado com o apoio do nosso time de segurança e com resultados de Pentests executados internamente ou externamente pelos nossos clientes. No entanto, é recomendado que as configurações sejam realizadas inicialmente em um ambiente de homologação, devido à variedade e complexidade das configurações e especificidades dos servidores de cada cliente.



  • Sem rótulos