보고서를 사용하면 방화벽을 적극적으로 조사하여 나가거나 들어오는 차단 규칙을 열거할 수 있습니다. 올바르게 사용하면 방화벽 구성을 얻을 수 있습니다.
주로 현재 개발 중인 분산 네트워크 스캐너의 문제를 해결하는 데 도움을 주기 위해 개발했습니다.
이 코드 조각은 단지 PCAP 파서일 뿐입니다. 즉, 제대로 작동하려면 적절하게 획득한 네트워크 패킷 덤프를 제공해야 함을 의미합니다. 그런 다음 도구는 PCAP에 따라 방화벽에 의해 차단된 포트를 인쇄합니다.
사용하려면 최소 2대의 머신에 접근해야 합니다. 하나는 테스트하려는 방화벽 뒤에 있고 다른 하나는 반대쪽에 있습니다.
가능한 사용 사례는 두 가지입니다.
네트워크 트래픽(또는 다른 스니퍼)을 캡처하고 저장하려면 tcpdump, tshark 또는 Wireshark와 같은 도구가 필요하고, 프로빙 패킷을 작성하고 전송하려면 nmap 또는 Masscan과 같은 도구가 필요합니다. 다음 예에서는 Masscan과 tcpdump를 사용하겠습니다.
외부 시스템 바로 앞에 방화벽이 하나 더 있는 경우(테스트하려는 방화벽 뒤의 방화벽이 아님) 내부 규칙이 무엇인지 아는 것이 더 좋습니다. 하지만 필수는 아니지만 다양한 위치에서 더 많은 테스트를 수행하여 알아낼 수 있습니다.
아래 단계를 따르면 정확한 결과를 얻는 데 도움이 됩니다.
나중에 해당 머신에서 네트워크 스캐너를 실행할 계획이므로 나가는 규칙을 열거하고 송신 방화벽에 의해 나가는 트래픽이 차단되지 않도록 하려고 한다고 가정해 보겠습니다.
방화벽 뒤에 있는 컴퓨터의 IP는 aaaa
이고 외부 컴퓨터의 IP는 bbbb
입니다. 이 두 번째 머신은 패킷 스니퍼(이 경우 tcpdump
)를 실행할 머신이자 우리가 구성할 첫 번째 머신입니다.
PCAP 획득
어떤 탐색 패킷이 대상에 도착하지 않는지 확인하려면 여기에서 패킷 스니퍼를 시작해야 합니다. 이 시스템에는 네트워크 인터페이스 eth0
에 연결된 공용 IP bbbb
있고 실행 중인 방화벽이 없다는 점을 고려하면 됩니다. 다음과 같이 tcpdump를 실행합니다.
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
re-port.pcap
파일이 생성되며, 테스트를 마친 후 이 파일이 이 도구에 전달됩니다. 하지만 이 부분은 나중에 살펴보겠습니다.
트래픽 조사
방화벽 뒤에 있는 시스템에서 65535개의 SYN
패킷을 생성하여 bbbb
로 보내겠습니다.
이를 위해 나는 masscan
사용합니다. --rate
옵션을 사용하여 속도를 설정하고 --retries
옵션을 사용하여 지정된 각 포트에 대해 생성되는 패킷 수를 설정할 수 있습니다. 목적지에 도달할 수 있는 모든 패킷이 목적지에 도달하는지 확인해야 하기 때문에 이 두 가지 옵션 모두 우리에게 중요합니다. 소스/대상 패킷의 대역폭에 따라 높은 전송 속도로 인해 패킷이 손실될 수 있습니다. 이 테스트를 위해서는 느리고 안전하게 진행되어야 합니다. 이탈리아에는 ' 천천히 가는 사람은 멀리 간다' 라는 속담이 있는데, 여기서는 이 말이 딱 맞는 것 같습니다.
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
몇 가지 테스트를 통해 초당 350개의 패킷이 포트당 두 번 전송되어 총 131072(128k)개의 패킷이 패킷 손실 없이 약 9분 정도 걸리는 것으로 나타났습니다.
방화벽 규칙 열거
이 시점에서 Re-port
사용하여 닫힌 포트 목록을 얻을 수 있습니다. 첫 번째 시스템으로 돌아가서 패킷 스니퍼 CTRL+C
중지하고 re-port 도구가 있는 디렉터리에 re-port.pcap
을 복사합니다. 이제 다음과 같이 실행할 수 있습니다.
./enumerate.py re-port.pcap
이전 예에서는 TCP 차단 규칙을 열거했습니다. 차단된 모든 UDP 포트 목록을 보려면 위의 단계에 따라 다음과 같이 명령을 변경하세요.
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
./enumerate.py --help를 실행하여 모든 옵션을 표시하세요.
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
보고서는 Python 클래스이며 원하는 대로 사용/확장할 수 있습니다.
반복 가능하며 with
문 내에서 사용합니다.
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
또는
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@r4d10n: 이 도구에 대한 간단한 아이디어를 제공합니다.