40 Dicas de Segurança

Nada mais, nada menos do que 40 dicas para reforçar a segurança do seu servidor ou mesmo do seu computador pessoal rodando sob kernel Linux!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


Conteúdo ocultar

Introdução

Seguinte meus queridos, segurança digital é algo importante hoje em dia e sei que tem uma galera aqui que quer reforçar a segurança de seus servidores caseiros ou mesmo aprender técnicas de reforço de segurança para seus computadores domésticos – muitas das dicas dadas aqui servirão para ambos!

A maioria das dicas valem para distros que usam gerenciador de pacotes YUM ou o APT, abrangendo a maior parte dos usuários de Linux.

Portanto sem muita enrolação porque o post é imenso, seguem abaixo 40 dicas de como melhorar, reforçar e otimizar a segurança do seu servidor – ou mesmo do seu computador doméstico que roda sob GNU/Linux!

1) Criptografe sua Comunicação

Todos os dados transmitidos pela rede estão abertos á monitoramento. Criptografar os dados transmitidos sempre que possível, com senhas ou chaves/certificados.

Use algum protocolo como o scp, ssh, rsync ou sftp para transferir arquivos pela rede pois estes suportam criptografia nativamente.

GnuPG permite criptografas e assinar seus arquivos além de um sistema de gerenciamento de chaves com módulos para acesso a chaves em diretórios públicos/compartilhados.

OpenVPN possui um bom custo-benefício, uma conexão SSL VPN leve para assegurar os dados conectados remotamente.

2) Corra das Conexões FTP, Telnet, e rlogin/rsh Services

Sob configurações de servidores, nomes de usuário, senhas, comandos via FTP/telnet/rsh e arquivos transferidos por eles podem ser interceptados por sniffers de rede. Uma maneira de solucionar isso é usar protocolos criptografados e mais modernos como OpenSSH , SFTP, ou FTPS (FTP over SSL), que adiciona criptografia SSL ou TLS ao FTP. Esse comando remove todos os principais serviços obsoletos de seu sistema:

# yum erase xinetd ypserv tftp-server telnet-server rsh-server

Se utiliza um sistema baseado no Debian:

$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa 
telnetd rsh-server rsh-redone-server

3) Diminua a Quantidade de Software Instalado para Diminuir Vulnerabilidades.

Você realmente precisa de todo aquele monte de serviços Web ativos?
Remova softwares inativos e desnecessários para diminuir a probabilidade de possuir vulnerabilidades em seu sistema.

Se você utiliza o gerenciador Yum:

# yum list installed
# yum list nome-do-pacote
# yum remove nome-do-pacote

Ou se você utiliza pacotes .deb:

# dpkg --list
# dpkg --info nome-do-pacote
# apt-get remove nome-do-pacote

4) Execute um Serviço de Rede por Sistema, ou Instância de Máquina Virtual

Tente rodar diferentes serviços em servidores ou máquinas virtuais diferentes. Isso limita o numero de serviços comprometidos num possivel ataque. Por exemplo, se um atacante for bem sucedido e afetar o Apache, ele pode ter acesso aos demais serviços como MySQL,/MariaDB/PGSql, servidor de email e etc.

5) Mantenha seu Kernel Linux e seu Sistema Atualizados!

Aplicar patches de segurança são uma parte importante da manutenção de um servidor GNU/Linux. Os sistemas sob kernel Linux naturalmente fornecem ferramentas para manter o sistema atualizado e permite facilmente dar upgrade entre as diversas versões. Todos os updates de segurança devem ser feitos rapidamente para garantir que esteja tudo em ordem!.

Para sistemas com pacotes rpm:

# yum update && yum upgrade

Para sistemas com pacotes .deb:

# apt-get update && apt-get upgrade

Você pode ainda configurar seu Red hat / CentOS / Fedora Linux a enviar notificações de update via email usando um comando do cron. Sob o Debian / Ubuntu Linux você pode usar o apticron para enviar notificações de segurança para seu email. Tambem pode configurar para updates não autorizados.

Para configurar os pacotes em sistemas baseados em Debian:

$ sudo apt-get install unattended-upgrades apt-listchanges bsd-mailx

6) Use Extensões de Segurança para o Linux

O Linux utiliza diversas ferramentas de segurança nativas para proteger seus programas e seu sistema. É possivel usar o SELinux e outras extensões de segurança para reforçar os acessos á rede por diversos programas.

7) SELinux

Recomendo fortemente que use o SELinux, que provém um sistema MAC bem flexivel (Mandatory Access Control). Sob essa diretriz, um programa ou processo em execução só roda sob a UID ou SUID do usuário que o abriu restringindo ainda mais as permissões que o habitualmente nativo do sistema. O sistema SELinux pode reforçar a segurança do seu sistema consideravelmente!

8) Contas de Usuário e Senhas mais Seguros

Use o comando useradd/usermod para criar e dar manutenção em contas de usuario no sistema. Tambem tenha certeza de que utiliza senhas seguras e fortes! Por exemplo, uma boa senha inclui pelo menos 8 caracteres em tamanho misturados com caracteres especiais, maiusculas e minusculas.

Você ainda pode utilizar ferramentas como “John the Ripper” (ParrotOS ou KaliLinux) para fazer testes de penetração em seu sistema.

9) Prazo de Validade da Senha

O comando “chage” altera o numero de dias entre a ultima troca de senha e a criação da senha atual. Essa informação é usada pra saber quando uma senha deve ser trocada. O arquivo /etc/login.defs define explicitamente configurações que definem a idade de uma senha e sua expiração. Para desativar a validade de uma senha:

# chage -M 99999 userName

Para pegar informações de expiração de senha:

# chage -l usuario

Finalmente, você pode editar o arquivo /etc/shadows editando os seguintes campos:

{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}:
  • Minimum_days: O tempo minimo em dias que a senha deverá mudar. Por exemplo, o numero de dias que um usuário terá de prazo para mudar sua senha.
  • Maximum_days: O tempo máximo de duração da senha (depois disso o usuário será obrigado a troca-la)
  • Warn: O numero de dias para a senha expirar depois que o usuário é alertado.
  • Expire: Dias desde 1 de Janeiro de 1970 que a conta será desabilitada. Você pode usar o comando chage para editar esses parâmetros sem ter que necessariamente editar o arquivo shadow:
# chage -M 60 -m 7 -W 7 userName

10) Evitando o Reaproveitamento de Senhas Anteriores.

Você pode prever que todos os usuários reutilizem senhas velhas no seu sistema Linux. Um parametro do modulo pam_unix permite essa configuração do numero de senhas anteriores que não podem ser reutilizadas.

11) Trancando Contas de quem Erra o Login!

O Linux permite que você use o log de falha de login para limitar a quantidade de erros de login que um usuário pode ter. Para detalhes do log de falha de login:

# faillog

Para destravar uma conta bloqueada por errar demais a senha:

# faillog -r -u usuario

Note que você pode usar o comando passwd para bloquear e desbloquear contas:
Bloquear conta:

# passwd -l userName

Desbloquear conta:

# passwd -u userName

12) Verificando se uma Conta possui Senhas em Branco

Comando:

# awk -F: '($2 == "") {print}' /etc/shadow

Travar as contas com senha em branco:

# passwd -l accountName

13) Tenha certeza que Contas não-Root não possuem UID 0

Somente o usuário root pode ter UID 0 com acesso total ao sistema!
Digite esse comando para descobrir quem tem UID = 0:

# awk -F: '($3 == "0") {print}' /etc/passwd

Você só pode ver essas linhas, qualquer coisa fora disso e a conta tem permissões acima do permitido:

root:x:0:0:root:/root:/bin/bash

14) Desabilitar o Login do Root

Nunca, repito NUNCA dê login como usuário Root!
Você deve executar sudo antes de qualquer comando que vá requerer acesso root. Sudo tambem permite mapear o que um usuário fez de forma simples e prática.

15) Segurança Física do Servidor

Você deve proteger seu servidor contra acessos locais/fisicos: Configure sua BIOS para desativar o boot por mídias externas como DVD/CD/USB e etc.
Para tal coloque uma senha de administrador no acesso da BIOS.
Não esqueça da senha no GRUB tambem, ele possui a opção de bootar com senha.

16) Desative Serviço Indesejados

Desabilitar serviços indesejados ajuda a diminuir possiveis meios de penetração de malwares e outras moléstias.Com esse comando você adiciona todos os serviços de boot do sistema para runlevel 3:

# chkconfig --list | grep '3:on'

Para desabilitar um serviço:

# service nome-do-serviço stop
# chkconfig nome-do-serviço off

17) Encontre Portas Desnecessariamente Abertas da sua Rede

Use esse comando para listar todos os programas e portas associadas:

# netstat -tulpn

Ou use o comando ss:

$ ss -tulpn

Temos tambem o nmap:

$ nmap -sT -O localhost
$ nmap -sT -O server.example.com

18) Delete o X.Org – Para sistemas CentOS/RHEL!

Se você utiliza um servidor que não requer interface de usuário, desabilite ela. Isso aumenta a performance geral e a segurança. Para isso edite o arquivo /etc/inittab e mude o runlevel para 3. E para remover o

# yum groupremove "X Window System"
No servidor CentOS 7/RHEL 7:

# yum group remove "GNOME Desktop"
# yum group remove "KDE Plasma Workspaces"
# yum group remove "Server with GUI"
# yum group remove "MATE Desktop"

19) Configure o iptables e o TCPWrappers

O Iptables e o TCPWrappers funcionam como firewall de redes e local, reforçando a segurança do seu sistema. Existe uma GUI pro IPTable: UFW.

20) Efetue o Hardening do Kernel editando o /etc/sysctl.conf.

O Hardening é basicamente um reforço manual de segurança do kernel.

Exemplo:

  • # Habilita o execshield
    kernel.exec-shield=1
    kernel.randomize_va_space=1
  • # Habilite o IP Spoofing
    net.ipv4.conf.all.rp_filter=1
  • # Disabilite a rota de fontes do IP:
    net.ipv4.conf.all.accept_source_route=0
  • # Ignore requisições de transmissão:
    net.ipv4.icmp_echo_ignore_broadcasts=1
    net.ipv4.icmp_ignore_bogus_error_messages=1
  • # Habilitar o log de pacotes pegos na rede próxima:
    net.ipv4.conf.all.log_martians = 1

21) Separe suas Partições de Sistema

Separar suas partições reforça a segurança e permissões de acesso entre elas para/com o sistema. As principais são:

  • /usr
  • /home
  • /var e /var/tmp
  • /tmp

Separe a partição /var das demais principalmente se você possui servidores Apache e/ou FTP. Reforce a segurança editando as credenciais da montagem dessas partições em /etc/fstab:

  • noexec – Proibe a execução de binários dentro da partição, mas permite scripts.
  • nodev – Não permite o uso de devices próprios ou especiais, na partição, como o /dev/zero ou acesso a /dev/sda.
  • nosuid – Não permite o acesso SUID/SGID á partição.

Abaixo, um exemplo de entrada que limite o acesso a usuários em /dev/sda5 (diretório root do servidor FTP):

/dev/sda5 /ftpdata ext3 defaults,nosuid,nodev,noexec 1 2

22) Cotas de Disco

Tenha certeza que os usuários possuem cotas de disco habilitadas. Isso limita o uso do HD e não deixa que o usuário extrapole o uso definido.

Cotas por arquivo podem ser definidas editando o arquivo /etc/fstab.
Remonte o sistema de arquivos
Crie a base dos arquivos e gere a tabela de uso do disco.
Alinhe as politicas de cotas.

23) Desligue o IPV6

O protocolo IPV6 trouxe uma nova camada de uso para o TCP/IP e possui muitas melhorias; mas enquanto ela não é ativamente utilizada, pode ser a porta de entrada para algum malware sob vulnerabilidades.

24) Desabilite Binarios SUID e SGID Inuteis

Se um executável sob SUID/SGID tiver um problema de segurança, ele pode ser a porta para maiores problemas. Com esses comandos você encontra esse arquivos que sejam indesejáveis:

  • # Veja todos os arquivos com ID do usuário:
    find / -perm +4000
  • # Veja todos os arquivos com ID de grupo do usuário:
    find / -perm +2000
  • # OU combinando os 2 comandos em 1:
    find / \( -perm -4000 -o -perm -2000 \) -print
    find / -path -prune -o -type f -perm +6000 -ls

25) Verifique Arquivos com Acesso Total (777)

Qualquer um pode modificar esses arquivos globais e isso pode ser um problema de segurança. Use o seguinte comando para encontrar eles:

$ find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Você deve investigar os arquivos que forem encontrados para definir o usuário e grupo corretos que terão permissão sob ele; ou exclua-o.

26) Arquivos Sem Dono

Da mesma forma que arquivos com permissão total são um perigo, arquivos sem dono ou sem grupos podem ser um problema de segurança. Encontre-os, defina um usuário/grupo ou exclua-os:

$ find /dir -xdev \( -nouser -o -nogroup \) -print

27) Use um Sistema de Autenticação Centralizado

Sem um sistema de autenticação centralizado, os arquivos de propriedade do sistema podem ficar inconsistentes e levar a credenciais obsoletas ou a contas esquecidas que deveriam ser excluídas. Não use o sistema NIS para isso, recomendo que use o OpenLDAP para sincronizar dados de clientes e servidores.

28) Kerberos

O Kerberos permite autenticar usando um serviço terceirizado com criptografia de ponta a ponta para arquivos e dados. Ele centraliza tudo que foi falado acima no quesito comunicação remota via SSL por exemplo, somando isso a um sistema de autenticação centralizado que pode ser gerido remotamente.
Possui todas as ferramentas necessárias para quem utiliza ativamente a internet e precisa de uma segurança reforçada combinada localmente com acesso remoto.

29) Login e Autenticação

Você deve configurar o log de login e auditoria para coletar dados de quaisquer tentativas de hacking ou cracking do seu sistema. Por padrão tudo fica guardado em /var/log.
Um comando interessante é o journal control:

# journalctl

Ele permite visualizar os logs do kernel e de todo o sistema; qualquer tentativa de conexão á máquina, mesmo que mal sucedida, fica registrada.

30) Monitore Mensagens de Log suspeitas com Logwatch/Logcheck

Leia os logs do sistema com o logwatch (logcheck). Essas ferramentas fazem sua leitura de log mais facil! Aqui um exemplo de saída que esses comandos proporcionam:

############ Logwatch 7.3 (03/24/06) ####################
Processing Initiated: Fri Oct 30 04:02:03 2009
Date Range Processed: yesterday
( 2009-Oct-29 )
Period is day.
Detail Level of Output: 0
Type of Output: unformatted
Logfiles for Host: www-52.nixcraft.net.in
##################################################################

——————— Named Begin ————————

**Unmatched Entries**
general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s)
general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s)

———————- Named End ————————-

——————— iptables firewall Begin ————————

Logged 87 packets on interface eth0
From 58.y.xxx.ww – 1 packet to tcp(8080)
From 59.www.zzz.yyy – 1 packet to tcp(22)
From 60.32.nnn.yyy – 2 packets to tcp(45633)
From 222.xxx.ttt.zz – 5 packets to tcp(8000,8080,8800)

———————- iptables firewall End ————————-

——————— SSHD Begin ————————

Users logging in through sshd:
root:
123.xxx.ttt.zzz: 6 times

———————- SSHD End ————————-

——————— Disk Space Begin ————————

Filesystem Size Used Avail Use% Mounted on
/dev/sda3 450G 185G 241G 44% /
/dev/sda1 99M 35M 60M 37% /boot

———————- Disk Space End ————————-

###################### Logwatch End #########################

31) Contas de Sistema Auditadas com “auditd”

O auditd permite auditoria de sistema. É responsável por gravar dados no disco; durante o boot, regras do /etc/audit.rules são lido por esse daemon.

Ele fornece respostas a essas questões:

  • Eventos de Boot e Desligamento do Sistema
  • Data e Hora do Evento
  • Tentativa de acesso a determinado arquivo por determinado usuário
  • Tipos de evento (edição, acesso, deleção, escrita, update e comandos)
  • Evento bem sucedido e mal sucedido
  • Registro dos eventos que modificam data e hora
  • Quem mudou as configurações de rede
  • Eventos de quem modificou determinado grupo ou usuário.

32) Assegure o Servidor OpenSSH

O protocolo SSH é recomendado para login e transferencias remotas de arquivos mas por si só é bem inseguro. Lembre-se de habilitar as chaves privadas e publicas para conexão desse protocolo.

33) Instale e use Sistema de Detecção de Intrusões

O Sistema de Detecção de Intrusão de Sistema (NIDS) é um detector de intrusão que detecta atividades maliciosas como ataques de negação de serviço (DDoS), se algo ou alguem está scaneando portas de rede ou se está só sondando a rede atrás de falhas.

Tambem é interessante rodar um software que cheque a integridade do sistema antes de conecta-lo á rede; pode estar infectado por algum problema na instalação e etc. O AIDE é um software de detecção de intrusões (HIDS) que monitora o sistema internamente (quase um antivirus).

Soma-se a isso a instalação do rkhunter, que busca rootkits (malwares) de kernel.

34) Desabilite o USB/Thunderbolt/Firewire

Se seu servidor não precisa das portas USB, rode os seguintes comandos:

# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf

O mesmo método desabilita o firewire e o thunderbolt:

# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf
# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf

35) Desabilite Serviços Inuteis

Se tiver conhecimento de algum serviço inutil do sistema como impressão, desabilite-o assim:

$ sudo systemctl stop service
$ sudo systemctl disable service

Por exemplo, se você não usar mais o serviço nginx, rode:

$ sudo systemctl stop nginx
$ sudo systemctl disable nginx

36) Use o fail2ban/denyhost como IDS (Sistema de Detecção de Intrusão).

O fail2ban ou o denyhost escaneiam os arquivos de log atrás de tentativas de login falhas; quem erra demais, está com más intenções e será banido por IP!

O denyhost é mais complicado de ser instalado e gerido; o Fail2Ban existe nativamente nos repositórios das principais distros:

$ sudo apt-get install fail2ban
Ou
$ sudo yum install fail2ban

Edite o arquivo de configuração do fail2ban para saciar suas necessidades:

$ sudo vi /etc/fail2ban/jail.conf

Reinicie o serviço:

$ sudo systemctl restart fail2ban.service

37) Reforce a Segurança do seu Servidor Apache/PHP/nginx

Edite o arquivo httpd.conf e adicione:

ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By

Reinicie o serviço apache2/httpd:

$ sudo systemctl restart apache2.service
$ sudo systemctl restart httpd.service

38) Proteja Arquivos, Diretórios e Email

Os sistemas Linux possuem grandes proteções nativas para acesso não autorizado a arquivos e dados. Permissões de arquivos e permissões MAC ajudam nisso mas eles não servem pra nada se um atacante estiver localmente no PC, pegar o HD e pluga-lo em outra máquina, copiando e analisando os arquivos sensiveis.
Para reforçar sua segurança contra esse tipo de situação:

  • Criptografe arquivos com uma senha usando o comando gpg
  • Criptografe seu disco! Essa opção é sugerida no momento da instalação do sistema. Tenha certeza que o SWAP tambem é criptografado.
  • Tenha certeza que a conta do correio do usuário root está linkada a uma conta de confiança.
  • Servidores de Email IMAP, POP3, Postfix, tudo que for do seu servidor local, criptografe por SSL sempre que possível.
  • Tambem habilite o SSL para criptografar emails enviados e recebidos.

39) Backups

“Quem tem 2, tem 1. Quem tem 1, não tem nenhum.”
Não preciso reforçar o quanto é importante ter backup de tudo ne?
Lembre-se de fazer o backup para um servidor NAS/FreeNAS ou mesmo AWS, desde que fique bem longe do servidor de produção.

40) Recomendações

Como quadragésima opção, deixo mais alguns detalhes interessantes:

Habilite o ExecShield Buffer Overflow Protection no seu sistema

APPArmor

#UrbanCompassPony

Créditos:
Alpha: islonline
Textos: Cyberciti
ComputerWorld

4 comentários em “40 Dicas de Segurança”

  1. Você poderia, por gentileza, enumerar quais são as vulnerabilidades apresentadas pelo X Windows System e também um comparativo sobre a performance antes e depois da referida remoção ?

    Agradeço antecipadamente por sua atenção.

    Responder

Deixe um comentário