LPI-2 202-450 Topico 212.4
Tarefas de segurança
Índice
212.4 Tarefas de segurança- Objetivos
Peso 3
O candidato deve ser capaz de buscar alertas de segurança de diversas fontes, instalar, configurar e operar sistemas de detecção de intrusos, aplicar patches de segurança e corrigir erros.
Conhecimentos-chave:
- Ferramentas para varrer e testar portas em um servidor;
- Endereços e organizações que divulgam alertas de segurança, como Bugtraq, CERT, CIAC ou outras fontes;
- Ferramentas de implementação de sistemas de detecção de intrusos (IDS);
- Noções de OpenVAS e Snort.
Lista parcial dos arquivos, termos e ferramentas utilizados:
212.4 Tarefas de segurança - Conteúdo
Todo administrador deve estar atento a possíveis ataques e invasões. Para isso operações de atualização de sistemas e pacotes de software, e monitoria ativa devem fazer parte da rotina de administração da rede. Além disso, é importante atualizar-se junto a boletins de segurança mantidos por entidades especializadas.
Existem algumas ferramentas de segurança incorporadas ao GNU/Linux, algumas delas são gratuitas e outras custam investimento. Para o exame LPIC2 precisamos de noções nas seguintes:
nmap
;nc
ounetcat
;telnet
;iptables
;fail2ban
;- Snort;
- openVAS;
Entidades de segurança tradicionais
Entidades tradicionais que emitem boletins de segurança, frequentes e relevantes são a lista Bugtraq, atualmente mantida pelo Security Focus, CERT e CIAC.
CERT
- Computer Emergency Response Team ou time de resposta a emergências computacionais (em tradução nossa), especificamente, o CERT Coordination Center ou CRET-CC está localizado na Carnegie Mellon University;
- fornece ferramentas para avaliações e análises de vulnerabilidades, incluindo uma lista abrangente de vulnerabilidades conhecidas e vetores de ataque;
- Frequentemente encontrado trabalhando com organizações governamentais ou instituições privadas em relação a questões de política de segurança de computação.
US-CERT
- United States - Computer Emergency Response Team ou time de resposta a emergências computacionais dos Estados Unidos, em tradução nossa;
- fornece respostas classificadas de governos a incidentes de segurança de computação;
- atua com o CERT-CC em questões de política da informação.
BugTraq
Tratase de uma mailing list hospedada por Security Focus em:
https://bugtraq.securityfocus.com/archive
- Trata-se de uma lista de EMail baseada em subscrição;
- criada e mantida por Security Focus Organization;
- é uma lista moderada (e bastante detalhada) para discuções e anúncios sobre vulnerabilidades de segurança;
- esta lista fornece detalhes sobra as vulnerabilidades à medida que são descobertas e relatadas, incluindo o que é afetado (versões, tipos, dispositivos e sistemas operacionais), qual é a vulnerabilidade e quaisquer vetores de ataque conhecidos.
CIAC
O Computer Incident Advisory Capability (CIAC) foi a equipe original de resposta a incidentes de segurança em computadores do Departamento de Energia dos Estados Unidos. O CIAC foi formado em fevereiro de 1989, com o patrocínio conjunto do Escritório do CIO do DOE e da Força Aérea. A função principal do CIAC era, como o nome indica, avisar as pessoas sobre incidentes de computação. Basicamente, isso significa vulnerabilidades de segurança, alertas de vírus e hoax e preocupações semelhantes com a segurança da informação. O CIAC foi membro fundador do GFIRST, o Fórum Governamental de Equipes de Resposta a Incidentes e Segurança e do FIRST, uma organização internacional de resposta a incidentes e segurança. O CIAC publicou relatórios e boletins de incidentes até ser oficialmente renomeado para DOE-CIRC e transferido para Las Vegas, Nevada, em outubro de 2008.
https://www.energy.gov/cio/about-our-services/integrated-joint-cybersecurity-coordination-center
Ferramentas para varredura de portas
Os scanners de portas são ferramentas que nos ajudam a
identificar portas abertas em um host ou em uma rede de
computadores. Os administradores podem usá-los para revisar as
políticas de segurança e monitorar os serviços de rede. Existe uma
abundância de ferramentas de varredura para o GNU/Linux porém para
o exame LPIC2 vamos focar nas ferramentas nc
ou netcat
, nmap
e telnet
.
nc
ou netcat
O comando netcat
(ou nc
em sua forma abreviada) é um
utilitário poderoso e fácil de usar que pode ser empregado para
praticamente qualquer coisa no GNU/Linux em relação a soquetes TCP
ou UDP ou UNIX.
Pode ser usado para abrir conexões TCP, ouvir em portas TCP e/ou UDP arbitrárias (coisa que já fizemos nos laboratórios do tópico 213-3), enviar pacotes e fazer varredura de portas (propriedade que importa para esse tópico).
┌─[root@Debian-lpi]──[12:25]──[~] └─[502]─># nc -vz localhost 21-500 localhost [127.0.0.1] 80 (http) open localhost [127.0.0.1] 25 (smtp) open localhost [127.0.0.1] 22 (ssh) open ### # Adicionando mais modificadores "v" no comando ### ┌─[root@Debian-lpi]──[12:26]──[~] └─[503]─># nc -vvz localhost 21-50 localhost [127.0.0.1] 50 (?) : Connection refused localhost [127.0.0.1] 49 (tacacs) : Connection refused localhost [127.0.0.1] 48 (?) : Connection refused localhost [127.0.0.1] 47 (?) : Connection refused localhost [127.0.0.1] 46 (?) : Connection refused localhost [127.0.0.1] 45 (?) : Connection refused localhost [127.0.0.1] 44 (?) : Connection refused localhost [127.0.0.1] 43 (whois) : Connection refused localhost [127.0.0.1] 42 (nameserver) : Connection refused localhost [127.0.0.1] 41 (?) : Connection refused localhost [127.0.0.1] 40 (?) : Connection refused localhost [127.0.0.1] 39 (?) : Connection refused localhost [127.0.0.1] 38 (?) : Connection refused localhost [127.0.0.1] 37 (time) : Connection refused localhost [127.0.0.1] 36 (?) : Connection refused localhost [127.0.0.1] 35 (?) : Connection refused localhost [127.0.0.1] 34 (?) : Connection refused localhost [127.0.0.1] 33 (?) : Connection refused localhost [127.0.0.1] 32 (?) : Connection refused localhost [127.0.0.1] 31 (?) : Connection refused localhost [127.0.0.1] 30 (?) : Connection refused localhost [127.0.0.1] 29 (?) : Connection refused localhost [127.0.0.1] 28 (?) : Connection refused localhost [127.0.0.1] 27 (?) : Connection refused localhost [127.0.0.1] 26 (?) : Connection refused localhost [127.0.0.1] 25 (smtp) open localhost [127.0.0.1] 24 (?) : Connection refused localhost [127.0.0.1] 23 (telnet) : Connection refused localhost [127.0.0.1] 22 (ssh) open localhost [127.0.0.1] 21 (ftp) : Connection refused sent 0, rcvd 0
-z
- faz o
netcat
para simplesmente scannear as portas sem necessariamente enviar nenhum dado através delas; -v
- habilita o modo verboso;
-4
ou-6
- faz o
netcat
varrer dentro dos protocolos IPv4 ou IPv6.
O comando nmap
O Nmap é uma ferramenta em código livre (GPLv2) muito útil para administradores de redes e de sistemas GNU/Linux. Ele é usado para explorar redes, realizar varreduras de segurança, auditoria de rede e, também, encontrar portas abertas em máquinas remotas. Ele pode fazer descoberta de hosts, identificação de sistemas operacionais, filtros de pacotes em portas e portas abertas em hosts remotos.
┌─[root@Debian-lpi]──[12:51]──[~] └─[501]─># nmap -v -r 192.168.83.12,30 Starting Nmap 7.40 ( https://nmap.org ) at 2021-12-17 12:51 -03 Initiating ARP Ping Scan at 12:51 Scanning 2 hosts [1 port/host] Completed ARP Ping Scan at 12:51, 0.23s elapsed (2 total hosts) Initiating Parallel DNS resolution of 2 hosts. at 12:51 Completed Parallel DNS resolution of 2 hosts. at 12:51, 0.00s elapsed Initiating SYN Stealth Scan at 12:51 Scanning 2 hosts [1000 ports/host] Discovered open port 22/tcp on 192.168.83.30 Discovered open port 21/tcp on 192.168.83.12 Discovered open port 22/tcp on 192.168.83.12 Discovered open port 25/tcp on 192.168.83.30 Discovered open port 80/tcp on 192.168.83.30 Discovered open port 139/tcp on 192.168.83.12 Increasing send delay for 192.168.83.30 from 0 to 5 due to 28 out of 92 dropped probes since last increase. Increasing send delay for 192.168.83.12 from 0 to 5 due to 28 out of 92 dropped probes since last increase. Discovered open port 445/tcp on 192.168.83.12 Increasing send delay for 192.168.83.30 from 5 to 10 due to 14 out of 46 dropped probes since last increase. Increasing send delay for 192.168.83.12 from 5 to 10 due to 14 out of 46 dropped probes since last increase. Increasing send delay for 192.168.83.30 from 10 to 20 due to 11 out of 33 dropped probes since last increase. Increasing send delay for 192.168.83.12 from 10 to 20 due to 11 out of 33 dropped probes since last increase. Increasing send delay for 192.168.83.30 from 20 to 40 due to 11 out of 31 dropped probes since last increase. Increasing send delay for 192.168.83.12 from 20 to 40 due to 11 out of 31 dropped probes since last increase. Increasing send delay for 192.168.83.30 from 40 to 80 due to 11 out of 28 dropped probes since last increase. Increasing send delay for 192.168.83.12 from 40 to 80 due to 11 out of 29 dropped probes since last increase. SYN Stealth Scan Timing: About 43.06% done; ETC: 12:53 (0:00:41 remaining) Discovered open port 3306/tcp on 192.168.83.30 Discovered open port 9101/tcp on 192.168.83.30 Discovered open port 9102/tcp on 192.168.83.30 Discovered open port 9103/tcp on 192.168.83.30 Discovered open port 9102/tcp on 192.168.83.12 Completed SYN Stealth Scan against 192.168.83.30 in 93.14s (1 host left) Completed SYN Stealth Scan at 12:53, 93.55s elapsed (2000 total ports) Nmap scan report for 192.168.83.12 Host is up (0.00051s latency). Not shown: 995 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 139/tcp open netbios-ssn 445/tcp open microsoft-ds 9102/tcp open jetdirect MAC Address: 0E:EC:A1:5C:CF:B1 (Unknown) Nmap scan report for 192.168.83.30 Host is up (0.00032s latency). Not shown: 993 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 3306/tcp open mysql 9101/tcp open jetdirect 9102/tcp open jetdirect 9103/tcp open jetdirect MAC Address: F4:CE:46:27:2A:A4 (Hewlett Packard) Read data files from: /usr/bin/../share/nmap Nmap done: 2 IP addresses (2 hosts up) scanned in 94.02 seconds Raw packets sent: 2674 (117.624KB) | Rcvd: 2674 (106.992KB)
-v
- esta opção configura o
nmap
para trazer mais informações sobre o host remoto; -r
- scaneia as portas em ordem numérica da menor para a maior.
Existem alguns opcionais que acionam técnicas de varredura específicas:
-sS
,-sT
,-sA
,-sW
,-sM
- TCP SYN, TCP Connect, TCP ACK, TCP Window e TCP Maimon respectivamente;
-sN
,-sF
,-sX
- TCP Null, TCP FIN e TCP Xmas respectivamente;
--scanflags <flags>
- varre uma flag TCP específica;
-sI <zombie host[:porta]>
- Idlescan;
-sO
- varre sobre o protocolo IP;
O comando telnet
Telnet é um comando de usuário e um protocolo sobre TCP/IP para acessar computadores remotos. Por meio do Telnet, um administrador ou outro usuário pode acessar o computador de outra pessoa remotamente. Na Web, os protocolos HTTP e FTP nos permitem solicitar arquivos específicos de computadores remotos, mas não estar realmente conectado como um usuário desse computador. Com o Telnet, nós nos conectamos como um usuário regular com quaisquer privilégios que você possa ter concedido ao aplicativo e dados específicos naquele computador.
Telnet é um dos primeiros protocolos de login remoto na
Internet. Foi lançado inicialmente nos primeiros dias da rede IP
em 1969 e foi por muito tempo a forma padrão de acessar
computadores remotos em rede. É um protocolo cliente-servidor que
fornece ao usuário uma sessão de terminal para um host remoto a
partir do aplicativo cliente telnet
. Como o protocolo não fornece
medidas de segurança integradas, como criptografia do processo de
autenticação ou criptografia dos dados trafegados, ele sofre de
sérios problemas de segurança que limitaram sua utilidade em
ambientes onde a rede não é totalmente confiável. O uso de Telnet
na Internet pública deve ser evitado devido ao risco de espionagem
e coleta de credenciais.
Hoje o uso do Telnet como cliente de sessão está restrito a acessos a ativos de rede simples como switches, roteadores e appliances isolados.
Mas o Telnete encontrou sobrevida como uma eficiente ferramenta de teste de portas e protocolos, pois o comando permite conectar em qualquer socket que seja informado na chamada do programa.
┌─[root@Debianlpi]──[12:53]──[~] └─[502]─># telnet 192.168.10.128 21 Trying 192.168.10.128... Connected to 192.168.10.128. Escape character is '^]'. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 04:38. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity.
OpenVAS
O OpenVAS (Open Vulnerability Assessment System ou sistema aberto de avaliação de vulnerabilidade) é um conjunto de ferramentas que fornece informações sobre vulnerabilidades e vários níveis de alerta quando descoberto. A boa notícia é que todos os produtos OpenVAS são software livre e a maioria dos componentes são licenciados sob a GNU General Public License (GPL).
Características:
- Usa um banco de dados (constantemente atualizado) de vulnerabilidade conhecida para várias ferramentas remotas e aplicativos de acesso remoto;
- Identifica e relata brechas de segurança conhecidas ou descobertas em nosso ambiente;
- testa as definições de configuração para problemas de segurança e destaca as mudanças a serem feitas;
- comercialmente disponível e suportado.
asdf
Estratégias e ferramentas de proteção
Para o GNU/Linux exitem uma grande quantidade de estratégias e de ferramentas de segurança e proteção disponíveis. Para o exame LPIC2 aqui iremos listar alguns pontos chave.
Regras de firewall
Como já esperado podemos utilizar o firewall do GNU/Linux o
iptables
para incrementar a segurança de nosso host.
Imaginemos um host com GNU/Linux atuando como roteador entre uma rede privada e a Internet. Nesse cenário uma estratégia de segurança simples seria bloquear todas as tentativas de conexão para o nosso host provindas de endereços de IP público permitindo entrada apenas de conexções já estabelecidas. A seguir, ẽ mostrado um exemplo de aplicação dessa estratégia:
Libera o tráfego dos pacotes gerados localmente:
iptables -A INPUT -i lo -j ACCEPT
Liberar entrar pela interface
eth0
(no exemplo esta é a interface ligada na Internet) somente os pacotes pertencentes (ESTABLISHED) ou relacionados (RELATED) a uma conexão pré-existente;iptables -A input -m state --state ESTABLISHED,RELATED -j ACCEPT
Estabelecer como DROP a política default na chain INPUT da tabela Filter:
iptables -P INPUT DROP
Por fim, todas as regras relativas a serviços publicados nesse servidor (como por exemplo acesso SSH para administração) devem ser adicionados:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Observação quando o SSH está liberado em uma interface acessível pela internet o acesso por senha no usuário
root
deve ser desabilitado, a autenticação apenas por chaves para esse usuário é uma alternativa interessante principalmente se formos aplicar a ferramenta Fail2ban.
Fail2ban
Fail2ban é um aplicativo de análise de log que monitora os logs
do sistema em busca de sintomas de um ataque automatizado em
nosso servidor. Quando uma tentativa de comprometimento é
localizada, usando os parâmetros definidos, o Fail2ban adicionará
uma nova regra ao iptables
para bloquear o endereço IP do
invasor, por um determinado período de tempo ou
permanentemente.
O Fail2ban também pode nos alertar por e-mail informando que um ataque está ocorrendo.
O Fail2ban concentra-se principalmente em ataques SSH, embora possa ser configurado para funcionar para qualquer serviço que use arquivos de log e possam estar sujeito a um comprometimento.
Após instalado os arquivos de configuração do Fail2ban residem em
/etc/fail2ban
.
┌─[root@Centos7lpi]──[15:16]──[~] └─[1006]─># ls -l total 48 drwxr-xr-x 2 root root 4096 Aug 4 21:00 action.d -rw-r--r-- 1 root root 2328 Jul 31 2015 fail2ban.conf drwxr-xr-x 2 root root 4096 Aug 2 2015 fail2ban.d drwxr-xr-x 3 root root 4096 Aug 4 21:00 filter.d -rw-r--r-- 1 root root 18562 Jul 31 2015 jail.conf drwxr-xr-x 2 root root 4096 Aug 4 21:00 jail.d -rw-r--r-- 1 root root 1939 Jul 31 2015 paths-common.conf -rw-r--r-- 1 root root 642 Jul 31 2015 paths-debian.conf
O Fail2bvan lê os arquivos de configuração .conf
primeiro e, em
seguida, os arquivos .local
substituem quaisquer
configurações. Por isso todas as mudanças na configuração devem
ser feitas nos arquivos .local
, deixando os arquivos .conf
intocados.
O arquivo fail2ban.local
O arquivo fail2ban.conf
contém o perfil de configuração padrão. As
configurações padrão nos darão um trabalho de configuração
razoável. Se quisermos fazer alguma alteração, é melhor fazê-lo
em um arquivo separado, fail2ban.local
, que
sobrescreve fail2ban.conf
. Logo para iniciar o setup execute:
copy fail2ban.conf fail2ban.local
O arquivo jail.local
Em sistemas Debian e derivados o arquivo jail.local
por padrão
já terá as configurações necessárias para proteger o serviço
ssh
, porém em distribuições Redhat e derivadas esse setup
precisa ser feito manualmente. Porém todos os outros protocolos
como HTTP, FTP e tais estarão desabilitados. Para mudar isso
precisamos criar o arquivo jail.local
copiando do arquivo
jail.conf
.
copy jail.conf jail.local
# # JAILS # # # SSH servers # [sshd] port = ssh logpath = %(sshd_log)s [sshd-ddos] # This jail corresponds to the standard configuration in Fail2ban. # The mail-whois action send a notification e-mail with a whois request # in the body. port = ssh logpath = %(sshd_log)s [dropbear] port = ssh logpath = %(dropbear_log)s [selinux-ssh] port = ssh logpath = %(auditd_log)s maxretry = 5
Lista de diretivas gerais importantes:
ignoreip
- para ignoriar endereços de IP específicos, por padrão o Fail2ban nunca banirá o endereço de localhost;
bantime
- o tempo pelo qual o endereço de IP ficará banido. Se setado um tempo negativo ele ficará banido permanentemente. O padrão é 600 segundos (10 minutos);
findtime
- o período de tempo entre as tentativas de login antes que um banimento seja executado. Por exemplo, se o Fail2ban for configurado para banir um IP após 5 tentativas de login malsucedidas, essas 5 tentativas devem ocorrer dentro do limite de tempo definido de 10 minutos. O valor nesse campo sempre é definido em segundos, portanto para 10 minutos usa-se 600;
maxretry
- quantas tentativas de login erradas serão permitidas antes de um bloqueio.
Lista de diretivas relativas a alertas:
destemail
- o endereço de EMail que deverá receber os alertas;
sendername
- o nome sob o qual o EMail será entregue;
sender
- o endereço de EMail que o Fail2ban usará para remeter os alertas.
Lista de diretivas para configuração das jail:
enabled
- habilita a respectiva jail;
port
- a porta que referencia ao Fail2ban o serviço a tratar. Se estiver usando uma porta padrão, o nome do serviço pode ser definido nessa diretiva. Se estiver utilizando uma porta não tradicional, o número dessa porta deve ser colocado nessa diretiva;
filter
- o nome do arquivo em
/etc/fail2ban/filter.d/
que contém a expressão regular que irá filtrar o log em busca dos IPs a serem bloqueados. O sufixo.conf
não precisa ser incluído; logpath
- define o caminho do arquivo de log a analisar;
maxretry
- sobrescreve o valor da diretiva global
maxretry
para a jail específica; action
- aqui pode-se adicionar uma configuração extra, se
a ação padrão não for adequada para a jail em questão. Ações
adicionais devem ser colocadas em
/etc/fail2ba/action.d/
.
Os filtros
O diretório /etc/fail2ban/filter.d/
por padrão já vem populado
com uma boa quantidade de filtros úteis para os mais variados
serviços e propósitos. É uma boa estudar os arquivos que constam aqui.
Firewall vs IDS vs IPS
Qual é a diferença?
- Firewall
- Um dispositivo ou aplicativo que analisa cabeçalhos de pacote e aplica a política com base no tipo de protocolo, endereço de origem, endereço de destino, porta de origem e/ou porta de destino. Os pacotes que não correspondem à política são rejeitados;
- IDS
- Intrusion Detection System ou sistema de detecção de intrusão, em tradução nossa. Consiste em dispositivo ou aplicativo que analisa pacotes inteiros, tanto o cabeçalho quanto a carga útil, procurando por eventos conhecidos. Quando um evento conhecido é detectado, uma mensagem de log é gerada detalhando o evento.
- IPS
- Intrusion Prevention System ou sistema de prevenção de intrusão, em tradução nossa. Consiste num dispositivo ou aplicativo que analisa pacotes inteiros, tanto o cabeçalho quanto a carga útil, procurando por eventos conhecidos. Quando um evento conhecido é detectado, o pacote é rejeitado.
Snort
Snort é um sistema de detecção de intrusão de rede (IDS) de código aberto e gratuito criado por Martin Roesch em 1998. O Snort agora é desenvolvido pela Sourcefireand e a má notícia é que ele é propriedade da Cisco desde 2013.
Características:
- O Snort pode ajudar a determinar quando alguém/algo está "sondando" nosso sistema em busca de vulnerabilidades, ou atacando com vetores conhecidos;
- a análise do tráfego de rede é executada em tempo real (chamada 'sniffing') para determinar se/quando os ataques estão ocorrendo;
O Snort pode ser configurado em três modos:
- sniffer;
- logger de pacotes;
- detecção de intrusão de rede.
No modo sniffer, o programa lerá pacotes de rede e os exibirá no console. No modo de logger de pacotes, o programa registrará os pacotes no disco. No modo de detecção de intrusão, o programa monitora o tráfego da rede e o analisa em relação a um conjunto de regras definido pelo usuário. O programa executará uma ação específica com base no que foi identificado;
Uma boa alternativa ao Snort é o Suricata.