Hacker ignorando iptables

9

(movido de SO)

Eu tenho iptables protegendo um servidor SIP. Ele bloqueia todos os IPs, exceto os que eu abri especificamente, e parece funcionar para quase todos. Eu testei a partir de vários endereços IP que não estão na lista branca e todos são descartados como deveriam.

MAS, eu peguei um "hacker" que parece capaz de ignorar as regras do iptables. Suas investigações INVITEs passam, e eu não tenho idéia de como, ou que isso era possível. Em 10 anos eu não vi isso antes.

Suponho que deve ter sido algo que fiz, mas não consigo ver.

iptables criados assim (MYIP definido na parte superior - redigido):

iptables -F
iptables -X
iptables -N ALLOWEDSIP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -d $MYIP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j ALLOWEDSIP

# This is my white list.
iptables -A ALLOWEDSIP -j RETURN

Agora, com NADA no PERMITIDO PERMITIDO, tudo o que devo fazer é SSH (o que posso). Se eu ligar para eles, todos são descartados. Mas o wireshark me mostra isso (meu ip redigido):

89.163.146.25 -> x.x.x.x SIP/SDP 805 Request: INVITE sip:[email protected] |
x.x.x.x -> 89.163.146.25 SIP 417 Status: 100 Giving a try |
x.x.x.x -> 89.163.146.25 SIP 875 Status: 407 Proxy Authentication Required |

Suas ligações tocaram no meu interruptor e, embora tenham sido rejeitadas pela ACL, elas nunca deveriam chegar lá. Nada mais passa. Puxando meu cabelo. Ninguem sabe?

Apenas para completar, eis o resultado do iptables -L:

# iptables -L --line-numbers -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1       10   640 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
2        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
3        0     0 ACCEPT     tcp  --  any    any     anywhere             <redacted>.com  tcp dpt:6928
4        0     0 ALLOWEDSIP  all  --  any    any     anywhere             anywhere

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 6 packets, 544 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain ALLOWEDSIP (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 RETURN     all  --  any    any     anywhere             anywhere

EDIT: acabei de ver isso no wireshark. Eles poderiam estar fazendo algo horrível como se estabelecer de alguma outra maneira e depois seguir a regra estabelecida? Talvez eles estejam jogando em algum buraco em RELATED?

89.163.146.25 -> <redacted> RTCP 806 Source port: tag-pm  Destination port: sip

EDIT 2: UDP é a chave aqui. Quando defino o OpenSIPS para escutar apenas o TCP, o problema parece desaparecer. Nenhuma de suas tentativas foi concluída, apesar de estarem enviando mais dessas mensagens "tag-pm". No entanto, não explica por que os pacotes estão chegando ao opensips. O iptables deveria tê-los parado primeiro. Gostaria de saber o que fiz de errado aqui.

EDIT 3: Se eu remover RELATED, paro de responder a eles, então isso tem algo a ver com isso. Mas acho que preciso de um parente. Alguma dica sobre soluções alternativas?

David Wylie
fonte
1
ESTABLISHEDdeve funcionar para o UDP. Parece que o pacote flui e aceita respostas para solicitações (de saída). Seus "hackers" têm IPs estáticos? ;-) Em caso afirmativo, verifique / proc / net / nf_conntrack para ver o que a tabela de estado contém sobre eles quando eles estão atualmente / não / conectados ... RELATEDé uma coisa mais complicada ... Não sei o que faz com o SIP . Será modprobetalvez mostrar um módulo ipt_sip ou algo carregado que iria fazer coisas "mágica"?
Marki
@ Marki - obrigado por essa dica. / proc / net / nf_conntrack não existe (centos 7), então precisarei descobrir o que / por que / onde.
David Wylie
2
"conntrack-tools" é a coisa, instalável a partir do repositório, e executar "conntrack -L" parece listá-las. Indo para ver o que isso gera. Típico, porém, ele parou. Esperemos que apenas uma pausa.
David Wylie
1
Se possível: tente limitar RELATEDa -p icmp. Talvez isso o resolva (ou é um trabalho adequado sobre o qual não é necessário que você leia sobre os auxiliares do conntrack).
piegas
1
Você mexeu nas coisas adicionando uma corrente. Se as cadeias ACEITAR forem verificadas antes do seu ALLOWEDSIP personalizado, ALLOWEDSIP poderá ser inútil.
Overmind

Respostas:

1

A única explicação plausível de como isso poderia funcionar é que os datagramas UDP ofensivos de alguma forma passam --state ESTABLISHED,RELATED.

Como o UDP é um protocolo sem estado, duvido que o statemódulo tenha um rastreamento eficaz sobre ele.

Para resolver o problema, limitaria a verificação de estado ao protocolo TCP da seguinte maneira:

-A INPUT -m tcp -m state -p tcp --state ESTABLISHED,RELATED -j ACCEPT`

E pré-filtro ALLOWEDSIPcom protocolo UDP (e de preferência também com a porta de destino):

iptables -t filter -A INPUT -m udp -p udp --dport 5060 -j ALLOWEDSIP
asdmin
fonte
-2

Você pode anular a rota. Isso deve ignorar o iptables.

route add 89.163.146.25 gw 127.0.0.1 lo

Confira

netstat -nr

OU

route -n
remoteitguy
fonte
Ele quer consertar o buraco contra qualquer novo atacante, não apenas bloquear este.
Zdenek