Eu estava executando uma varredura com o Lynis em uma caixa RHEL 7 e ele disse que uma interface estava no modo promíscuo. Verifiquei e determinei que os links não eram baseados em não ter o sinalizador Promuscuous (apenas Broadcast, multicast, running e UP (BMRU) são visíveis):
$ ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 9001 17217705 0 0 0 17899485 0 0 0 BMRU
Então eu olhei como o Lynis estava verificando e ele executa o comando ip link -o -d show dev eth0 | grep 'promiscuity 1'
e com certeza, encontrei o seguinte:
$ ip -d link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff promiscuity 1 addrgenmode eui64 numtxqueues 8 numrxqueues 8 gso_max_size 65536 gso_max_segs 65535
Minha pergunta é qual é mais autoritário. Estou acostumado a verificar apenas os sinalizadores e não as propriedades da interface. O que promiscuity 1
significa? Essa interface é promíscua?
Conforme explicado no patch que introduziu o
promiscuity
parâmetro somente leitura paraip-link
/iproute2
:E, de fato, a
dev_get_flags()
função do kernel que é usada tanto pelaioctl(SIOCGIFFLAGS)
interface (como usada porifconfig
) quanto pela interface rtnetlink (como usada porip link show
), limpará explicitamenteIFF_PROMISC
do conjunto de sinalizadores exportados para a área do usuário:[o
dev->gflags
acima é um conjunto de sinalizadores de compatibilidade que não são usados pelo kernel, mas apenas definidos e recuperados pelas interfaces do espaço do usuário]A única maneira de verificar no espaço do usuário se uma interface está no modo promíscuo é (assim como
ip -d link show
) por meio doIFLA_PROMISCUITY
atributo recuperado pelartnetlink(7)
interface. Isso reflete a contagem real de promiscuidade do dispositivo:promiscuity > 0
significa que o dispositivo está no modo promíscuo.Atualizar os sinalizadores do dispositivo via
ifconfig DEV promisc
ouip link set dev DEV promisc on
não é a única maneira de definir um dispositivo no modo promíscuo: outra forma é através da interface:packet(7)
setsockopt()
É isso que
tcpdump
(e outras ferramentas de captura e filtragem de rede) estão usando.PROMISCUOUS
é uma bandeira por si só, não uma combinação de outras.O sinalizador não está definido no dump que você forneceu.
Se eu defini-lo no meu sistema manualmente, posso vê-lo claramente:
Se você continuar recebendo o aviso do Lynis, há duas possibilidades:
Lynis está com problemas e relatou um falso positivo.
Seu sistema foi hackeado e protegido por backdoor: o hacker substituiu o
ip
,ifconfig
eroute
os binários por outros corrigidos que escondem o sinalizador promíscuo.