IPS - Intrusion Prevention System / Bloqueio de Port Scanning
O IPS também é um mecanismo de defesa que impede que o atacante execute seu port scanning com sucesso, colocando seu ip em uma lista de bloqueio. Para isso, vamos utilizar o portcentry. Ele vai simular algumas portas falsas na nossa máquina e misturar com as portas originais, assim que o atacante fizer um scan em uma dessas portas falsas, o sistema já dispara uma ação para realizar o bloqueio.
sudo apt install portsentry
O portsentry fica localizado em /etc/portsentry. Se utilizarmos o netstat para ver as portas abertas, teremos apenas duas (antes de utilizar o portsentry).
┌──(user㉿kali)-[~/Desktop]
└─$ netstat -nlpt
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
Quando startamos o serviço, podemos perceber que ele irá gerar as portas falsas.
┌──(user㉿kali)-[~/Desktop]
└─$ netstat -nlpt
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:12346 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:635 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:49724 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:540 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:1 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:20034 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:32771 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:32772 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:40421 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:32773 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:1524 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:119 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
No portsentry.conf há um parte em que você pode fazer o bloqueio de porta TCP e UDP, basta passar o valor de "1".
BLOCK_UDP="0"
BLOCK_TCP="0"
Por agora, vamos deixar como 0 para vermos alguns detalhes.
Outras configurações que vamos fazer, é comentar essa linha. Essa configuração basicamente adiciona uma regra de bloqueio de rota do IP que está atacando.
#KILL_ROUTE="/sbin/route add -host $TARGET$ reject"
Ao invés de usar essa regra, vamos utilizar a do iptables. Que vai adicionar uma regra de DROP para o alvo. Nesse caso vamos descomentar a linha.
KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP
Pronto, configurações finalizadas.
Quando fazemos um scan para detectar qual é o tipo de serviço que está rodando em determinada porta, ele retorna "tcpwrapped" para aquelas portas que o portsentry subiu como portas falsas. As demais que realmente estavam abertas, a resposta vem normalmente dizendo qual o tipo de serviço.
┌──(user㉿kali)-[/etc/portsentry]
└─$ sudo nmap -sV -Pn 192.168.2.134
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-07 17:15 EDT
Nmap scan report for 192.168.2.134
Host is up (0.0000030s latency).
Not shown: 983 closed ports
PORT STATE SERVICE VERSION
1/tcp open tcpwrapped
22/tcp open ssh OpenSSH 8.4p1 Debian 5 (protocol 2.0)
79/tcp open tcpwrapped
80/tcp open http Apache httpd 2.4.46 ((Debian))
111/tcp open tcpwrapped
119/tcp open tcpwrapped
143/tcp open tcpwrapped
1080/tcp open tcpwrapped
1524/tcp open tcpwrapped
2000/tcp open tcpwrapped
6667/tcp open tcpwrapped
12345/tcp open tcpwrapped
31337/tcp open tcpwrapped
32771/tcp open tcpwrapped
32772/tcp open tcpwrapped
32773/tcp open tcpwrapped
32774/tcp open tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Quando o nmap retorna com esse "tcpwrapped", é muito provável que tenha um firewall ou algum IPS bloqueando esse serviço (o alvo estabeleceu o 3WH, só que depois ele bloqueou o acesso, ou enviou um RST de volta, etc). Esse detalhe é muito importante, por isso não foi habilitado ainda para bloqueio, para que pudéssemos ver como que é retornado caso acontecer isso.
Agora, vamos setar as configurações para bloquear.
BLOCK_UDP="1"
BLOCK_TCP="1"
Precisamos reiniciar o portsentry apĂłs isso.
Ao fazer o scan, percebemos que não há resposta alguma, e nosso IP foi colocado em uma lista de bloqueio.
┌──(user㉿kali)-[/etc/portsentry]
└─$ cat /etc/hosts.deny
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
# See the manual pages hosts_access(5) and hosts_options(5).
#
# Example: ALL: some.host.name, .some.domain
# ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "rpcbind" for the
# daemon name. See rpcbind(8) and rpc.mountd(8) for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
ALL: 192.168.2.107 : DENY
┌──(user㉿kali)-[/etc/portsentry]
└─$ sudo iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 192.168.2.107 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Porém, precisamos de saber um detalhe. Para isso, vamos apagar o nosso IP da lista de bloqueio e resetar as regras do iptables com o comando iptables -F. O que acontece é que quando fazemos um Syn Scan, mesmo com esse bloqueio, ele retorna as portas. Para isso não ocorrer, precisamos setar uma outra configuração no portsentry.
Primeiramente precisamos parar o serviço do portsentry com service portsentry stop. Vamos localizar onde está o binário do portsentry com whereis portsentry. Vamos direto onde está o binário dele para aplicar uma outra configuração.
/usr/sbin/portsentry
Esse -stcp Ă© justamente para evitar scans "sealth", ele nĂŁo aguarda o 3WH ser concluĂdo para dropar. Executamos entĂŁo
/usr/sbin/portsentry -stcp
Pronto, agora está bloqueando Syn Scan.
Last updated
Was this helpful?