blog conviso

Hardening de Sistemas, o que é e como executar

March 3, 2020

By

Rodrigo Maués

Hardening de Sistemas

Quando falamos de Hardening de Sistemas estamos nos referindo à análise feita em sistemas que hospedarão a aplicação em busca de serviços, configurações padrão, portas lógicas e outras coisas desnecessárias para aquela aplicação.

Sempre que tratamos de segurança de aplicações web com nossos clientes deixamos bem claro que não há segurança de uma aplicação web se esta não for suportada por um sistema bem configurado e protegido.

Realizar o hardening é buscar reduzir a superfície de ataque!

Superfície de ataque

A superfície de ataque de uma aplicação web é toda combinação de vulnerabilidades e outros vetores de ataque presentes na aplicação e na infraestrutura que suporta a aplicação.

Isso não apenas inclui sistemas e firmware desatualizados mas também configurações que foram implementadas de forma errada e desta forma podem levar para a aplicação riscos.

Além destes pontos, precisamos pensar como superfície de ataque senhas e usuários deixados por padrão no código das aplicações (hard-coded) bem como a falha em implementar de forma correta soluções de criptografia.

A redução do risco de ataques de malware e outras ameaças à segurança, é minimizado pela redução da superfície de ataque, mas também há uma série de outros benefícios. 

Os sistemas onde foram feitas configurações para o hardening são mais fáceis de manter, isso porque a quantidade de componentes ativos é menor. 

Ainda, o processo de hardening também melhora o desempenho da aplicação e do próprio sistema, pois foram  eliminadas funcionalidades desnecessárias que poderiam drenar recursos valiosos.

O processo de hardening de sistema só traz pontos positivos para sua aplicação e por isso é um dos pontos mais importantes que equipes de DevOps devem observar quando da construção de um ambiente que irá hospedar sua aplicação.

Algumas formas de executar um hardening

A realização de hardening em sistemas não é apenas uma boa prática, em algumas áreas pode ser uma exigência regulamentar e sempre com o objetivo de minimizar os riscos à segurança e garantir a segurança das informações.

Por exemplo, se o seu sistema processar dados de pacientes médicos, poderá estar sujeito aos requisitos de proteção dos dados baseados na nova Lei Geral de Proteção de Dados (LGPD).

Outro exemplo é se seu sistema opera no processamento de pagamentos usando cartão de crédito. Neste caso seus sistema terá que se adequar aos controles indicados no PCI DSS.

Como podemos ver, nem sempre a simples introdução de um novo sistema em nossa infraestrutura deve ser entendida como apenas a inicialização de um sistema, temos vários aspectos que podem fortemente impactar neste produto. 

As equipes de DevOps devem estar sempre atentas aos casos onde há regulamentações ou mesmo exigências contratuais.

Ainda, há várias organizações que criam e publicam seus próprios padrões e ou procedimentos que podem ser adotadas pelas empresas que podem assim apresentar a seus clientes e ou parceiros uma demonstração de que estão dispostos a investir em segurança.

Alguns destes exemplos podem ser vistos quando olhamos para a documentação produzida pelo Centro de Segurança na Internet (CIS) ou pela Organização Internacional de Padronização (ISO) ou ainda pelo Instituto Nacional de Padrões e Tecnologia (NIST).

Alguns do principais fornecedores de software também fornecem seus próprios guias de proteção para produtos específicos.

Tenha um Checklist

Sempre que vamos desenvolver uma ação que pode ser repetitiva, como por exemplo a validação e ou a execução de hardening de alguns serviços, é aconselhável que tenha este tipo de ação organizada e validada de alguma forma.

Pensando nisso, a construção de uma lista com  todas as etapas necessárias para executar o hardening é aconselhável.

Sua lista de verificação varia de acordo com o infraestrutura, aplicativos e configuração de segurança.

Uma aplicação implantada em uma estrutura baseada em soluções de cloud exigirá ações muito diferentes de uma infraestrutura física completa, mas os objetivos são os mesmos.

Para a criação da sua lista sugerimos que comece na construção de um inventário de todos os ativos que são relevantes, tanto de software quanto de hardware. 

Para completar este seu primeiro inventário, busque por identificar superfícies de ataques externas, o que pode ser conseguido por meio de auditorias especializadas.

Além disso, é aconselhável que sejam executados testes de intrusão, scans de vulnerabilidades e outros métodos que possam ajudar a identificar pontos falhos na sua estrutura externa.

Ao levantar suas aplicações web, pode ser possível que sejam identificadas aplicações que já deveriam estar desativadas ou mesmo que apresentam falhas graves que aumentariam ainda mais os riscos dos sistemas.

Avalie as contas de usuários e de sistemas

Hoje ainda encontramos estruturas onde ao se implantar os sistemas que dão suporte à aplicação web, existem usuários trazidos pelo sistema de forma padrão e com suas devidas senhas e permissões.

Este é um dos primeiros pontos que devem ser observados para melhorar a segurança de uma aplicação, retirar todo e qualquer usuário que não é necessário para a execução da aplicação.

Este tipo de ação deve ser feita independente da estrutura física ou lógica que você está avaliando no momento. 

O que queremos neste ponto é melhorar e elevar o controle de acesso aos dados, que ainda é um dos maiores problemas de segurança em aplicações e sistemas.

Este conceito deve se aplicar a todos os níveis de software e hardware, pois o seu objetivo principal é impedir o acesso indevido a sistemas e dados.

Neste ponto o primeiro controle que deve ser colocar é usar como regra padrão o "deny all", ou seja, todos os acessos são negados por padrão e somente são liberados os acessos necessários para que cada usuários tenham a possibilidade de trabalhar no sistema de forma correta. 

Após esta validação, defina quais serão os critérios das diretivas de senha para aplicar senhas fortes e rotação de senhas, conforme necessário.

Dentro da sua estrutura, sempre busque impor políticas de centralização de dados o que facilita a proteção e o gerenciamento e não esqueça de proteger seus arquivos de backup de forma criptografada.

Olhe para sua rede e servidores

Proteger o servidor é o principal aspecto da proteção de um aplicativo da web.

Isso não quer dizer que somente os servidores que suportam as aplicações web serão protegidos.

A proteção deve se estender a todos os servidores que dão suporte à solução por completo e isso inclui servidores de banco de dados e arquivos, sistemas de armazenamento em nuvem e interfaces com qualquer sistema externo.

O primeiro passo é iniciar removendo  ou desativando softwares e ou serviços que não são necessários para o suporte da aplicação, e isso inclui serviços como compartilhamento de arquivos e ou FTP. 

Tenha poucas formas de acesso aos sistemas, dê preferência a sistema mais seguros como as conexões feitas por meio de protocolos como o SSH e quando possível desative sua interface administrativa baseada na Web.

Garantir a  segurança da rede é fundamental no hardening do sistema.

Assegurar que uma falha seja corrigida o mais rápido possível pode ser a diferença entre garantir a segurança do seu sistema ou ter seu sistema comprometido.

Portanto, aplique os patches de segurança mais recentes após testá-los fora do ambiente de produção. 

Para garantir que o máximo de eficiência é entregue às tarefas de atualizações, avalie usar sempre que puder automatização para o processo de atualização e geração de alertas dos produtos desatualizados.

Como manter a segurança do seu ambiente

Se tudo foi feito, agora surge a pergunta "Mas como mantemos tudo sempre atualizado e seguro?"

O processo de hardening de sistemas não é estático e nem deve ser executado em uma única vez, muito pelo contrário é um processo dinâmico e contínuo.

A primeira vez que você for executar o seus hardening de sistema deve gerar o procedimento que será usado como um modelo, um guia base para as demais execuções. 

Após isso, toda e qualquer mudança deve ser avaliada e novamente passar pelo processo de hardening, garantindo assim que todas as avaliações foram feitas e que foram seguidos os procedimentos necessários.

O que temos que lembrar é que o cenário de segurança está em constante mudanças e novas ameaças aparecem a cada dia e devemos sempre estarmos atentos a estas mudanças.

Se entendermos que as ameaças que aparecem diariamente são apenas algumas das ameaças que nosso sistema enfrenta, vamos buscar sempre melhorar nossa capacidade de proteção.

Para garantir a segurança do sistema, é uma boa ideia planejar o uso de ferramentas de verificação de vulnerabilidades sempre alinhadas a execução de testes intrusão Web usando para isso profissionais experientes e qualificados e não apostar todas as suas fichas em ferramentas que apenas entregam relatórios sem a menor análise refinada dos resultados.

[hubspot type=cta portal=5613826 id=29916ad3-79d1-4666-9af3-32c982e7f3c0]

Sobre o autor

Rodrigo Maués

Bachelor's degree in Computer Science from the Federal University of Alagoas. He has spoken at events such as the NullByte Security Conference and Hackers to Hackers Conference, and presented research projects at national and international events. He has experience in application security, exploit development, and vulnerability research in both userland and kernel land, having discovered vulnerabilities for companies like Microsoft, AMD, and Intel. His interests include operating system internals, compilers, malware development, vulnerability research, and EDR evasion.

Saiba mais