Я обрабатываю уязвимости, обнаруженные сканером PCI-DSS, и одна из них для меня нова:
заглавие
Обход набора правил порта 53 источника пакетов UDP межсетевого экрана
Синопсис:
Наборы правил брандмауэра можно обойти.
Влияние:
Можно обойти правила удаленного брандмауэра, отправив UDP-пакеты с портом источника, равным 53. Злоумышленник может использовать эту уязвимость для передачи пакетов UDP на удаленные хосты, несмотря на наличие брандмауэра.
Смотрите также :
http://archives.neohapsis.com/archives/fulldisclosure/2003-q2/0352.html
http://www.nessus.org/u?4368bb37
Первая связанная статья дает доказательство использования команды эксплойта, nmap -v -P0 -sU -p 1900 ${IP} -g 53
, который фактически возвращает один 56-байтовый пакет, если исходный порт - 53. Но почему? В этом примере он сообщает, что порт 1900 «закрыт», но был возвращен 56-байтовый ответ. Напротив, запрос к порту 1900 с исходным портом UDP 123 (также открытым) возвращает 0 байт.
#
# Source port 53:
#
$ sudo nmap -v -P0 -sU -p 1900 ${IP} -g 53
Starting Nmap 6.47 ( http://nmap.org ) at 2015-11-24 20:19 CST
Initiating Parallel DNS resolution of 1 host. at 20:19
Completed Parallel DNS resolution of 1 host. at 20:19, 0.00s elapsed
Initiating UDP Scan at 20:19
Scanning *HOST* (*IP*) [1 port]
Completed UDP Scan at 20:19, 0.21s elapsed (1 total ports)
Nmap scan report for *HOST* (*IP*)
Host is up (0.038s latency).
PORT STATE SERVICE
1900/udp closed upnp
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
Raw packets sent: 1 (28B) | Rcvd: 1 (56B)
#
# Source Port 123:
#
$ sudo nmap -v -P0 -sU -p 1900 ${IP} -g 123
Starting Nmap 6.47 ( http://nmap.org ) at 2015-11-24 20:20 CST
Initiating Parallel DNS resolution of 1 host. at 20:20
Completed Parallel DNS resolution of 1 host. at 20:20, 0.00s elapsed
Initiating UDP Scan at 20:20
Scanning *HOST* (*IP*) [1 port]
Completed UDP Scan at 20:20, 2.42s elapsed (1 total ports)
Nmap scan report for *HOST* (*IP*)
Host is up.
PORT STATE SERVICE
1900/udp open|filtered upnp
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.46 seconds
Raw packets sent: 2 (56B) | Rcvd: 0 (0B)
На этом сервере Linux работает панель управления (InterWorx-CP), которая управляет установкой APF, которая, в свою очередь, генерирует правила iptables. Они здесь:
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REFRESH_TEMP all -- anywhere anywhere
TALLOW all -- anywhere anywhere
TGALLOW all -- anywhere anywhere
TDENY all -- anywhere anywhere
TGDENY all -- anywhere anywhere
DROP tcp -- anywhere anywhere tcp dpts:epmap:netbios-ssn
DROP udp -- anywhere anywhere udp dpts:epmap:netbios-ssn
DROP tcp -- anywhere anywhere tcp dpt:sunrpc
DROP udp -- anywhere anywhere udp dpt:sunrpc
DROP tcp -- anywhere anywhere tcp dpt:login
DROP udp -- anywhere anywhere udp dpt:who
DROP tcp -- anywhere anywhere tcp dpt:microsoft-ds
DROP udp -- anywhere anywhere udp dpt:microsoft-ds
DROP tcp -- anywhere anywhere tcp dpt:ms-sql-s
DROP udp -- anywhere anywhere udp dpt:ms-sql-s
DROP tcp -- anywhere anywhere tcp dpt:ms-sql-m
DROP udp -- anywhere anywhere udp dpt:ms-sql-m
DROP tcp -- anywhere anywhere tcp dpt:search-agent
DROP udp -- anywhere anywhere udp dpt:search-agent
DROP tcp -- anywhere anywhere tcp dpt:ingreslock
DROP udp -- anywhere anywhere udp dpt:ingreslock
DROP tcp -- anywhere anywhere tcp dpt:ctx-bridge
DROP udp -- anywhere anywhere udp dpt:ctx-bridge
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:lmtp
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:imap
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:imaps
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3s
ACCEPT tcp -- anywhere anywhere tcp dpt:autodesk-nlm
ACCEPT tcp -- anywhere anywhere tcp dpt:powerclientcsf
ACCEPT tcp -- anywhere anywhere tcp dpts:50000:51000
ACCEPT tcp -- anywhere anywhere tcp dpt:submission
ACCEPT udp -- anywhere anywhere udp dpt:ftp-data
ACCEPT udp -- anywhere anywhere udp dpt:ftp
ACCEPT udp -- anywhere anywhere udp dpt:ntp
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT icmp -- anywhere anywhere icmp destination-unreachable limit: avg 14/sec burst 5
ACCEPT icmp -- anywhere anywhere icmp redirect limit: avg 14/sec burst 5
ACCEPT icmp -- anywhere anywhere icmp time-exceeded limit: avg 14/sec burst 5
ACCEPT icmp -- anywhere anywhere icmp echo-reply limit: avg 14/sec burst 5
ACCEPT icmp -- anywhere anywhere icmp type 30 limit: avg 14/sec burst 5
ACCEPT icmp -- anywhere anywhere icmp echo-request limit: avg 14/sec burst 5
DROP tcp -- anywhere anywhere tcp flags:!FIN,SYN,RST,ACK/SYN state NEW
ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp spt:domain dpts:1023:65535
ACCEPT tcp -- anywhere anywhere tcp spt:domain dpts:1023:65535
DROP tcp -- anywhere anywhere
DROP udp -- anywhere anywhere
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
REFRESH_TEMP all -- anywhere anywhere
TALLOW all -- anywhere anywhere
TGALLOW all -- anywhere anywhere
TDENY all -- anywhere anywhere
TGDENY all -- anywhere anywhere
DROP tcp -- anywhere anywhere tcp dpts:epmap:netbios-ssn
DROP udp -- anywhere anywhere udp dpts:epmap:netbios-ssn
DROP tcp -- anywhere anywhere tcp dpt:sunrpc
DROP udp -- anywhere anywhere udp dpt:sunrpc
DROP tcp -- anywhere anywhere tcp dpt:login
DROP udp -- anywhere anywhere udp dpt:who
DROP tcp -- anywhere anywhere tcp dpt:microsoft-ds
DROP udp -- anywhere anywhere udp dpt:microsoft-ds
DROP tcp -- anywhere anywhere tcp dpt:ms-sql-s
DROP udp -- anywhere anywhere udp dpt:ms-sql-s
DROP tcp -- anywhere anywhere tcp dpt:ms-sql-m
DROP udp -- anywhere anywhere udp dpt:ms-sql-m
DROP tcp -- anywhere anywhere tcp dpt:search-agent
DROP udp -- anywhere anywhere udp dpt:search-agent
DROP tcp -- anywhere anywhere tcp dpt:ingreslock
DROP udp -- anywhere anywhere udp dpt:ingreslock
DROP tcp -- anywhere anywhere tcp dpt:ctx-bridge
DROP udp -- anywhere anywhere udp dpt:ctx-bridge
ACCEPT tcp -- anywhere anywhere tcp dpts:1024:65535 state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp dpts:1024:65535 state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp spts:1023:65535 dpt:domain
ACCEPT tcp -- anywhere anywhere tcp spts:1023:65535 dpt:domain
ACCEPT all -- anywhere anywhere
Chain PROHIBIT (0 references)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain REFRESH_TEMP (2 references)
target prot opt source destination
Chain RESET (0 references)
target prot opt source destination
REJECT tcp -- anywhere anywhere reject-with tcp-reset
Chain TALLOW (2 references)
target prot opt source destination
Chain TDENY (2 references)
target prot opt source destination
Chain TGALLOW (2 references)
target prot opt source destination
Chain TGDENY (2 references)
target prot opt source destination
Сервер также является органом DNS для доменов, которые он размещает, реплицируясь на подчиненные серверы, поэтому входящие запросы DNS могут быть отключены. Но даже когда я сделал это в CP, эксплойт все равно оказался успешным. Я предполагаю, что APF генерирует некоторые правила вне моего косвенного контроля.
Как мне закрыть эту дыру в брандмауэре?
Каково влияние этой уязвимости 2003 года, о которой сканер PCI только что сообщает (уже годы сканирования)?
Они тестируют порт 53, потому что он, вероятно, открыт (то есть порт, используемый DNS).
Я получил ту же ошибку, и решением было написать два правила.
Во-первых, теперь у вас может быть УСТАНОВЛЕННОЕ и СВЯЗАННОЕ правило для UDP. Раньше это было невозможно, так как UDP считается без сохранения состояния, но они добавили эту функциональность, отслеживая, что было отправлено, и принимают Связанный ответы.
-A INPUT -i eth0 -p udp -m state --state ESTABLISH,RELATED -m udp -d 1.2.3.4 -j ACCEPT
Примечание: изменить eth0
и 1.2.3.4
с собственным именем / IP
Затем вы можете открыть порт 53 для входящих пакетов DNS-сервера.
-A INPUT -i eth0 -p udp -m udp --dport 53 -d 1.2.3.4 -j ACCEPT
Примечание: изменить eth0
и 1.2.3.4
с собственным именем / IP
Ваше существующее правило выглядит так:
ACCEPT udp -- anywhere anywhere udp dpt:domain
Он не ограничен интерфейсом или адресом назначения. Следует убедиться, что вы не получаете данные из ложного источника. (например, в DigitalOcean и, вероятно, во многих других есть скрытый IP-адрес ... вы не хотите принимать данные с этого адреса; кроме того, однажды у меня была неправильная форма, и имя интерфейса изменилось !!! Если у вас есть одно сетевое соединение, оно должно быть прямым, но если вы не контролируете оборудование, вы не можете знать, когда это может произойти ...)
При этом ваша БОЛЬШАЯ проблема в вашем наборе правил - это самая первая строка в вашей цепочке INPUT. Выглядит это так:
ACCEPT all -- anywhere anywhere
А это значит принимать абсолютно все, что угодно. Все правила после этого игнорируются. Другими словами, у вас вообще нет брандмауэра ...
У вас есть то же первое правило в вашей цепочке OUTPUT, я полагаю, это для того, чтобы убедиться, что ваш брандмауэр ничего не блокирует.
Совет, напишите небольшой сценарий посмотреть на ваш брандмауэр с помощью -nvx
параметры. В -n
делает это быстро, не пытаясь преобразовать IP-адреса. В -v
показывает количество пакетов и байтов, перемещающихся по каждому правилу (т.е. если правило принимает пакет, его счетчик пакетов увеличивается на 1.) -x
показывает вам точные числа для каждого счетчика (вместо того, чтобы делать его «человеческим»), так что я знаю, когда счетчик был увеличен на 1 или более. Важно, пока вы тестируете.
Если бы вы использовали -nvx
возможно, вы заметили, что только счетчики самого первого правила увеличивались для INPUT и OUTPUT. Тогда, может быть, вы задумаетесь, почему вы никогда не получаете попаданий против других правил ...