Masscanned (물론 Masscan에서 영감을 받은 이름)는 네트워크 응답기입니다. 그 목적은 가능한 한 많은 프로토콜에 대한 일반적인 답변을 제공하고 클라이언트의 의도에 대해 가능한 한 적은 가정을 제공하는 것입니다.
그들이 먼저 이야기하게 하세요.
Masscanned와 마찬가지로 Masscanned는 honeyd와 유사하게 자체 사용자 영역 네트워크 스택을 구현합니다. 가능한 한 스캐너 및 기회주의적인 봇과 상호 작용하고 가능한 한 많은 프로토콜을 지원하도록 설계되었습니다.
예를 들어, 네트워크 패킷을 수신하는 경우:
ARP is-at
(해당 IP 주소에 대해)을 사용하여 ARP who is-at
에 대한 대량 스캔 답변,ICMP Echo Reply
사용하여 ICMP Echo Request
에 대한 답변을 대량 스캔했습니다 .TCP SYN/ACK
사용하여 TCP SYN
(모든 포트)에 대한 대량 스캔 응답,HTTP 401
웹페이지를 통해 TCP/UDP
(모든 포트)를 통한 HTTP
요청(모든 동사)에 대한 답변을 대량으로 스캔했습니다 . Masscanned는 현재 레이어 2-3-4에서 가장 일반적인 프로토콜과 몇 가지 애플리케이션 프로토콜을 지원합니다.
$ cargo build
# ip netns add masscanned
# ip link add vethmasscanned type veth peer veth netns masscanned
# ip link set vethmasscanned up
# ip -n masscanned link set veth up
# ip addr add dev vethmasscanned 192.168.0.0/31
# ip netns exec masscanned ./target/debug/masscanned --iface veth -v[vv]
# arping 192.168.0.1
# ping 192.168.0.1
# nc -n -v 192.168.0.1 80
# nc -n -v -u 192.168.0.1 80
...
# apt install docker.io
$ cd masscanned/docker && docker build -t masscanned:test .
$ docker run --cap-add=NET_ADMIN masscanned:test
# arping 172.17.0.2
# ping 172.17.0.2
# nc -n -v 172.17.0.2 80
# nc -n -v -u 172.17.0.2 80
...
대량 스캔 의 좋은 사용은 하나 이상의 공용 IP 주소가 있는 VPS에 배포하는 것입니다.
결과를 사용하는 가장 좋은 방법은 대량 검색된 인터페이스에서 수신/응답하는 모든 네트워크 트래픽을 캡처하는 것입니다. 그런 다음 zeek를 사용하여 pcaps를 분석할 수 있으며 출력 파일은 일반적으로 IVRE 인스턴스에 푸시될 수 있습니다.
VPS에 대량 스캔 인스턴스를 배포하는 방법에 대한 문서가 제공될 예정입니다(문제 #2 참조).
Network answering machine for various network protocols (L2-L3-L4 + applications)
Usage: masscanned [OPTIONS] --iface <iface>
Options:
-i, --iface <iface>
the interface to use for receiving/sending packets
-m, --mac-addr <mac>
MAC address to use in the response packets
--self-ip-file <selfipfile>
File with the list of IP addresses handled by masscanned
--self-ip-list <selfiplist>
Inline list of IP addresses handled by masscanned, comma-separated
--remote-ip-deny-file <remoteipdenyfile>
File with the list of IP addresses from which masscanned will ignore packets
--remote-ip-deny-list <remoteipdenylist>
Inline list of IP addresses from which masscanned will ignore packets
-v...
Increase message verbosity
-q, --quiet
Quiet mode: do not output anything on stdout
--format <format>
Format in which to output logs [default: console] [possible values: console, logfmt]
-h, --help
Print help information
-V, --version
Print version information
masscanned
으로 처리되는 IPv4
주소( 즉 , -f
옵션으로 지정된 IP 주소 파일에 있는 주소)를 대상으로 하는 요청에 대한 ARP
요청에 대한 masscanned
응답입니다.
대답에는 다음과 같은 가능한 MAC
주소 중 첫 번째 주소가 포함됩니다.
-a
로 지정된 MAC
주소(있는 경우)-i
로 지정된 인터페이스의 MAC
주소(있는 경우)masscanned
기본 MAC
주소( 예 : c0:ff:ee:c0:ff:ee
. 다음 요구 사항이 충족되는 경우에만 Ethernet
프레임에 대한 masscanned
응답:
프레임의 대상 주소는 masscanned
에 의해 처리되어야 합니다. 이는 다음을 의미합니다.
MAC
주소를 masscanned
.MAC
주소 ff:ff:ff:ff:ff:ff
masscanned
(RFC 1112)에 의해 처리되는 IPv4
주소 중 하나에 해당하는 멀티캐스트 MAC
주소,masscanned
에 의해 처리되는 IPv6
주소 중 하나에 해당하는 멀티캐스트 MAC
주소; EtherType
필드는 ARP
, IPv4
또는 IPv6
중 하나입니다.
참고: 멀티캐스트가 아닌 IP 주소의 경우에도 masscanned
해당 멀티캐스트 MAC
주소로 주소가 지정된 L2 프레임에 응답합니다. 예를 들어, masscanned
10.11.12.13
처리하는 경우 01:00:5e:0b:0c:0d
주소가 지정된 프레임에 응답합니다.
다음과 같은 경우에만 IPv4
및 IPv6
패킷에 대한 masscanned
응답이 제공됩니다.
IP
주소가 지정되지 않았습니다( 예 : -f
옵션이 지정되지 않았거나 파일이 비어 있음).또는
masscanned
처리하는 IP 주소 중 하나입니다.추가 요구 사항은 다음 계층 프로토콜이 지원된다는 것입니다. 아래를 참조하세요.
IPv4
패킷에는 다음 L3+/4 프로토콜이 지원됩니다.
ICMPv4
UDP
TCP
다음 계층 프로토콜이 그 중 하나가 아닌 경우 패킷이 삭제됩니다.
IPv6
패킷에는 다음 L3+/4 프로토콜이 지원됩니다.
ICMPv6
UDP
TCP
다음 계층 프로토콜이 그 중 하나가 아닌 경우 패킷이 삭제됩니다.
masscanned
다음과 같은 경우에만 ICMPv4
패킷에 응답합니다.
ICMP
유형은 EchoRequest
( 8
)입니다.ICMP
코드는 0
입니다. 이러한 조건이 충족되면 masscanned
RFC 792에 지정된 대로 EchoReply
( 0
) 유형, 코드 0
및 수신 패킷과 동일한 페이로드의 ICMP
패킷으로 응답합니다.
masscanned
다음과 같은 경우에만 ICMPv6
패킷에 응답합니다.
ICMP
유형은 NeighborSol
( 135
)이며 다음과 같습니다 .masscanned
에 지정된 IP(v4 또는 v6)가 없습니다.masscanned
중 하나입니다. 이 경우 답은 masscanned
MAC
주소가 포함된 Neighbor Advertisement
( 136
) 패킷입니다.
또는
ICMP
유형은 EchoRequest
입니다( 128
). 이 경우 대답은 EchoReply
( 129
) 패킷입니다.
다음 TCP
패킷에 대한 masscanned
응답:
PSH
및 ACK
플래그가 있는 경우 masscanned
SYNACK-cookie를 확인하고 유효한 경우 최소한 ACK
로 응답하거나 지원되는 프로토콜(레이어 5/6/7)이 감지된 경우 PSH-ACK
응답합니다.ACK
있으면 무시됩니다.RST
또는 FIN-ACK
가 있으면 무시됩니다.SYN
있으면 masscanned
표준 Linux 스택의 동작을 모방하려고 시도합니다.PSH
, URG
, CWR
, ECE
사이에 없는 추가 플래그가 있는 경우 SYN
무시됩니다.CWR
및 ECE
플래그가 동시에 설정되면 SYN
이 무시됩니다.masscanned
SYN-ACK
패킷으로 응답하고 시퀀스 번호에 SYNACK 쿠키를 설정합니다. masscanned
상위 계층 프로토콜이 처리되고 응답을 제공하는 경우에만 UDP
패킷에 응답합니다.
401 Authorization Required
사용하여 모든 HTTP
요청(모든 유효한 동사)에 대해 masscanned
답변입니다. 유효하지 않은 동사가 포함된 HTTP
요청은 응답되지 않습니다.
예:
$ curl -X GET 10.11.10.129
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.14.2</center>
</body>
</html>
$ curl -X OPTIONS 10.11.10.129
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.14.2</center>
</body>
</html>
$ curl -X HEAD 10.11.10.129
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the
Warning: way you want. Consider using -I/--head instead.
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.14.2</center>
</body>
</html>
$ curl -X XXX 10.11.10.129
[timeout]
예:
$ stun 10.11.10.129
STUN client version 0.97
Primary: Open
Return value is 0x000001
SSH
클라이언트: 프로토콜 메시지에 대한 masscanned
답변 Client: Protocol
다음 Server: Protocol
메시지:
SSH-2.0-1rn
클라이언트가 NTLMSSP_NEGOTIATE
를 보내기 위해 Negotiate Protocol Request
패킷에 대한 masscanned
응답, 챌린지로 masscanned
응답.
예:
##$ smbclient -U user \\10.11.10.129\shared
Enter WORKGROUPuser's password:
클래스 IN
및 유형 A
(현재)의 DNS
쿼리에 대한 masscanned
답변입니다. 제공되는 답변에는 항상 쿼리가 전송된 IP 주소가 포함됩니다.
예:
$ host -t A masscan.ned 10.11.10.129
Using domain server:
Name: 10.11.10.129
Address: 10.11.10.129#53
Aliases:
masscan.ned has address 10.11.10.129
$ host -t A masscan.ned 10.11.10.130
Using domain server:
Name: 10.11.10.130
Address: 10.11.10.130#53
Aliases:
masscan.ned has address 10.11.10.130
$ host -t A masscan.ned 10.11.10.131
Using domain server:
Name: 10.11.10.131
Address: 10.11.10.131#53
Aliases:
masscan.ned has address 10.11.10.131
$ host -t A masscan.ned 10.11.10.132
Using domain server:
Name: 10.11.10.132
Address: 10.11.10.132#53
Aliases:
masscan.ned has address 10.11.10.132
$ cargo test
Compiling masscanned v0.2.0 (/zdata/workdir/masscanned)
Finished test [unoptimized + debuginfo] target(s) in 3.83s
Running unittests (target/debug/deps/masscanned-f9292f8600038978)
running 92 tests
test client::client_info::tests::test_client_info_eq ... ok
test layer_2::arp::tests::test_arp_reply ... ok
test layer_2::tests::test_eth_empty ... ok
test layer_2::tests::test_eth_reply ... ok
test layer_3::ipv4::tests::test_ipv4_reply ... ok
test layer_3::ipv4::tests::test_ipv4_empty ... ok
test layer_3::ipv6::tests::test_ipv6_empty ... ok
test layer_3::ipv6::tests::test_ipv6_reply ... ok
test layer_4::icmpv4::tests::test_icmpv4_reply ... ok
test layer_4::icmpv6::tests::test_icmpv6_reply ... ok
test layer_4::icmpv6::tests::test_nd_na_reply ... ok
test layer_4::tcp::tests::test_synack_cookie_ipv6 ... ok
test layer_4::tcp::tests::test_tcp_fin_ack_wrap ... ok
test proto::dns::cst::tests::class_parse ... ok
test layer_4::tcp::tests::test_tcp_fin_ack ... ok
test layer_4::tcp::tests::test_synack_cookie_ipv4 ... ok
test proto::dns::cst::tests::type_parse ... ok
test proto::dns::header::tests::parse_byte_by_byte ... ok
test proto::dns::header::tests::repl_id ... ok
test proto::dns::header::tests::repl_opcode ... ok
test proto::dns::header::tests::repl_ancount ... ok
test proto::dns::header::tests::repl_rd ... ok
test proto::dns::query::tests::parse_in_a_all ... ok
test proto::dns::header::tests::parse_all ... ok
test proto::dns::query::tests::repl ... ok
test proto::dns::query::tests::reply_in_a ... ok
test proto::dns::rr::tests::parse_all ... ok
test proto::dns::rr::tests::parse_byte_by_byte ... ok
test proto::dns::query::tests::parse_in_a_byte_by_byte ... ok
test proto::dns::tests::parse_qd_all ... ok
test proto::dns::tests::parse_qd_byte_by_byte ... ok
test proto::dns::rr::tests::build ... ok
test proto::dns::tests::parse_qd_rr_all ... ok
test proto::dns::tests::parse_qr_rr_byte_by_byte ... ok
test proto::dns::tests::parse_rr_byte_by_byte ... ok
test proto::dns::tests::parse_rr_all ... ok
test proto::dns::tests::reply_in_a ... ok
test proto::http::tests::test_http_request_line ... ok
test proto::http::tests::test_http_request_no_field ... ok
test proto::http::tests::test_http_request_field ... ok
test proto::http::tests::test_http_verb ... ok
test proto::rpc::tests::test_probe_nmap ... ok
test proto::rpc::tests::test_probe_nmap_split1 ... ok
test proto::rpc::tests::test_probe_portmap_v4_dump ... ok
test proto::rpc::tests::test_probe_nmap_split2 ... ok
test proto::rpc::tests::test_probe_nmap_udp ... ok
test proto::smb::tests::test_smb1_session_setup_request_parse ... ok
test proto::smb::tests::test_smb1_protocol_nego_parsing ... ok
test proto::smb::tests::test_smb1_protocol_nego_reply ... ok
test proto::smb::tests::test_smb1_session_setup_request_reply ... ok
test proto::smb::tests::test_smb2_protocol_nego_parsing ... ok
test proto::smb::tests::test_smb2_protocol_nego_reply ... ok
test proto::smb::tests::test_smb2_session_setup_request_reply ... ok
test proto::smb::tests::test_smb2_session_setup_request_parse ... ok
test proto::ssh::tests::ssh_1_banner_cr ... ok
test proto::ssh::tests::ssh_1_banner_crlf ... ok
test proto::ssh::tests::ssh_1_banner_lf ... ok
test proto::ssh::tests::ssh_1_banner_space ... ok
test proto::ssh::tests::ssh_2_banner_cr ... ok
test proto::ssh::tests::ssh_1_banner_parse ... ok
test proto::ssh::tests::ssh_2_banner_parse ... ok
test proto::ssh::tests::ssh_2_banner_lf ... ok
test proto::ssh::tests::ssh_2_banner_crlf ... ok
test proto::stun::tests::test_change_request_port_overflow ... ok
test proto::stun::tests::test_proto_stun_ipv4 ... ok
test proto::stun::tests::test_change_request_port ... ok
test proto::ssh::tests::ssh_2_banner_space ... ok
test proto::stun::tests::test_proto_stun_ipv6 ... ok
test proto::tcb::tests::test_proto_tcb_proto_state_http ... ok
test proto::tests::dispatch_dns ... ok
test proto::tcb::tests::test_proto_tcb_proto_state_rpc ... ok
test proto::tcb::tests::test_proto_tcb_proto_id ... ok
test proto::tests::test_proto_dispatch_http ... ok
test proto::tests::test_proto_dispatch_ssh ... ok
test proto::tests::test_proto_dispatch_ghost ... ok
test proto::tests::test_proto_dispatch_stun ... ok
test smack::smack::tests::test_anchor_end ... ok
test smack::smack::tests::test_multiple_matches_wildcard ... ok
test smack::smack::tests::test_multiple_matches ... ok
test smack::smack::tests::test_anchor_begin ... ok
test smack::smack::tests::test_http_banner ... ok
test synackcookie::tests::test_clientinfo ... ok
test synackcookie::tests::test_ip4 ... ok
test synackcookie::tests::test_ip4_dst ... ok
test synackcookie::tests::test_ip4_src ... ok
test synackcookie::tests::test_ip6 ... ok
test synackcookie::tests::test_key ... ok
test synackcookie::tests::test_tcp_dst ... ok
test synackcookie::tests::test_tcp_src ... ok
test smack::smack::tests::test_wildcard ... ok
test smack::smack::tests::test_proto ... ok
test smack::smack::tests::test_pattern ... ok
test result: ok. 92 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.41s
# ./test/test_masscanned.py
INFO test_arp_req......................................OK
INFO test_arp_req_other_ip.............................OK
INFO test_ipv4_udp_dns_in_a............................OK
INFO test_ipv4_udp_dns_in_a_multiple_queries...........OK
INFO test_ipv4_tcp_ghost...............................OK
INFO test_ipv4_tcp_http................................OK
INFO test_ipv4_tcp_http_segmented......................OK
INFO test_ipv4_tcp_http_incomplete.....................OK
INFO test_ipv6_tcp_http................................OK
INFO test_ipv4_udp_http................................OK
INFO test_ipv6_udp_http................................OK
INFO test_ipv4_tcp_http_ko.............................OK
INFO test_ipv4_udp_http_ko.............................OK
INFO test_ipv6_tcp_http_ko.............................OK
INFO test_ipv6_udp_http_ko.............................OK
INFO test_icmpv4_echo_req..............................OK
INFO test_icmpv6_neighbor_solicitation.................OK
INFO test_icmpv6_neighbor_solicitation_other_ip........OK
INFO test_icmpv6_echo_req..............................OK
INFO test_ipv4_req.....................................OK
INFO test_eth_req_other_mac............................OK
INFO test_ipv4_req_other_ip............................OK
INFO test_rpc_nmap.....................................OK
INFO test_rpcinfo......................................OK
INFO test_smb1_network_req.............................OK
INFO test_smb2_network_req.............................OK
INFO test_ipv4_tcp_ssh.................................OK
INFO test_ipv4_udp_ssh.................................OK
INFO test_ipv6_tcp_ssh.................................OK
INFO test_ipv6_udp_ssh.................................OK
INFO test_ipv4_udp_stun................................OK
INFO test_ipv6_udp_stun................................OK
INFO test_ipv4_udp_stun_change_port....................OK
INFO test_ipv6_udp_stun_change_port....................OK
INFO test_ipv4_tcp_empty...............................OK
INFO test_ipv6_tcp_empty...............................OK
INFO test_tcp_syn......................................OK
INFO test_ipv4_tcp_psh_ack.............................OK
INFO test_ipv6_tcp_psh_ack.............................OK
INFO test_ipv4_udp_empty...............................OK
INFO test_ipv6_udp_empty...............................OK
INFO Ran 41 tests with 0 errors
TESTS
환경 변수를 사용하여 실행할 테스트를 선택할 수도 있습니다.
TESTS=smb ./test/test_masscanned.py
INFO test_smb1_network_req.............................OK
INFO test_smb2_network_req.............................OK
INFO Ran 2 tests with 0 errors
동사 :
init
recv
send
drop
$ts arp $verb $operation $client_mac $client_ip $masscanned_mac $masscanned_ip
$ts eth $verb $ethertype $client_mac $masscanned_mac