Masscanned (tentu saja namanya terinspirasi oleh masscan) adalah responden jaringan. Tujuannya adalah untuk memberikan jawaban umum terhadap sebanyak mungkin protokol, dan dengan asumsi sesedikit mungkin mengenai maksud klien.
Biarkan mereka bicara dulu.
Sama seperti Masscan, Masscanned mengimplementasikan tumpukan jaringan userlandnya sendiri, mirip dengan Honeyd. Ini dirancang untuk berinteraksi dengan pemindai dan bot oportunistik sejauh mungkin, dan untuk mendukung sebanyak mungkin protokol.
Misalnya, ketika menerima paket jaringan:
ARP who is-at
dengan ARP is-at
(untuk alamat IP-nya),ICMP Echo Request
dengan ICMP Echo Reply
,TCP SYN
(port apa pun) dengan TCP SYN/ACK
di port mana pun,HTTP
(kata kerja apa pun) melalui TCP/UDP
(port apa pun) dengan halaman web HTTP 401
. Masscanned saat ini mendukung sebagian besar protokol umum pada lapisan 2-3-4, dan beberapa protokol aplikasi.
$ 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
...
Penggunaan yang baik dari pemindaian massal adalah dengan menyebarkannya pada VPS dengan satu atau lebih alamat IP publik.
Untuk menggunakan hasilnya, cara terbaik adalah menangkap semua lalu lintas jaringan pada antarmuka yang sedang didengarkan/ditanggapi secara massal . Pcaps kemudian dapat dianalisis menggunakan zeek dan file keluaran biasanya dapat dimasukkan ke dalam instance IVRE .
Dokumentasi tentang cara menyebarkan instance yang dipindai secara massal pada VPS akan segera hadir (lihat Masalah #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
jawaban masscanned
terhadap permintaan ARP
, untuk permintaan yang menargetkan alamat IPv4
yang ditangani oleh masscanned
( yaitu , alamat yang ada dalam file alamat IP yang diberikan dengan opsi -f
).
Jawabannya berisi kemungkinan alamat MAC
pertama berikut ini:
MAC
yang ditentukan dengan -a
di baris perintah jika ada,MAC
antarmuka yang ditentukan dengan -i
di baris perintah jika ada,MAC
default masscanned
, yaitu c0:ff:ee:c0:ff:ee
. jawaban masscanned
ke frame Ethernet
, jika dan hanya jika persyaratan berikut terpenuhi:
alamat tujuan frame harus ditangani masscanned
, yang artinya:
MAC
sendiri masscanned
,MAC
siaran ff:ff:ff:ff:ff:ff
MAC
multicast yang sesuai dengan salah satu alamat IPv4
yang ditangani masscanned
(RFC 1112),MAC
multicast yang sesuai dengan salah satu alamat IPv6
yang ditangani oleh masscanned
; Bidang EtherType
adalah salah satu dari ARP
, IPv4
atau IPv6
.
Catatan: bahkan untuk alamat IP non-multicast, masscanned
akan merespons frame L2 yang dialamatkan ke alamat MAC
multicast yang sesuai. Misalnya, jika masscanned
menangani 10.11.12.13
, ia akan menjawab frame yang dialamatkan ke 01:00:5e:0b:0c:0d
.
jawaban masscanned
untuk paket IPv4
dan IPv6
, hanya jika:
IP
yang ditentukan dalam file ( yaitu , tidak ada opsi -f
yang ditentukan atau file kosong),atau
masscanned
.Persyaratan tambahannya adalah protokol lapisan berikutnya didukung - lihat di bawah.
Protokol L3+/4 berikut didukung untuk paket IPv4
:
ICMPv4
UDP
TCP
Jika protokol lapisan berikutnya bukan salah satunya, paket akan dibuang.
Protokol L3+/4 berikut didukung untuk paket IPv6
:
ICMPv6
UDP
TCP
Jika protokol lapisan berikutnya bukan salah satunya, paket akan dibuang.
jawaban masscanned
terhadap paket ICMPv4
jika dan hanya jika:
ICMP
dari paket masuk adalah EchoRequest
( 8
),ICMP
dari paket masuk adalah 0
. Jika kondisi ini terpenuhi, jawaban masscanned
dengan paket ICMP
bertipe EchoReply
( 0
), kode 0
dan muatan yang sama dengan paket masuk, seperti yang ditentukan oleh RFC 792.
jawaban masscanned
terhadap paket ICMPv6
jika dan hanya jika:
ICMP
adalah NeighborSol
( 135
) dan :masscanned
masscanned
Dalam hal ini, jawabannya adalah paket Neighbor Advertisement
( 136
) dengan alamat MAC
masscanned
atau
ICMP
adalah EchoRequest
( 128
) Dalam hal ini, jawabannya adalah paket EchoReply
( 129
).
jawaban masscanned
untuk paket TCP
berikut:
PSH
dan ACK
, masscanned
akan memeriksa SYNACK-cookie , dan jika valid menjawab setidaknya ACK
, atau PSH-ACK
jika protokol yang didukung (Layer 5/6/7) telah terdeteksi,ACK
, maka akan diabaikan,RST
atau FIN-ACK
, maka akan diabaikan,SYN
, maka masscanned
mencoba meniru perilaku tumpukan Linux standar - yaitu:PSH
, URG
, CWR
, ECE
, maka SYN
diabaikan,CWR
dan ECE
diset secara bersamaan, maka SYN
diabaikan,masscanned
dengan paket SYN-ACK
, mengatur cookie SYNACK di nomor urut. jawaban masscanned
ke paket UDP
jika dan hanya jika protokol lapisan atas ditangani dan memberikan jawaban.
jawaban masscanned
untuk permintaan HTTP
apa pun (kata kerja apa pun yang valid ) dengan 401 Authorization Required
. Perhatikan bahwa permintaan HTTP
dengan kata kerja yang tidak valid tidak akan dijawab.
Contoh:
$ 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]
Contoh:
$ stun 10.11.10.129
STUN client version 0.97
Primary: Open
Return value is 0x000001
jawaban masscanned
ke Client: Protocol
SSH
: Pesan protokol dengan Server: Protocol
:
SSH-2.0-1rn
jawaban masscanned
untuk paket Negotiate Protocol Request
agar klien mengirim NTLMSSP_NEGOTIATE
, yang jawaban masscanned
dengan sebuah tantangan.
Contoh:
##$ smbclient -U user \\10.11.10.129\shared
Enter WORKGROUPuser's password:
jawaban masscanned
untuk permintaan DNS
kelas IN
dan tipe A
(untuk saat ini). Jawaban yang diberikannya selalu berisi alamat IP tujuan pengiriman kueri.
Contoh:
$ 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
Anda juga dapat memilih pengujian apa yang akan dijalankan menggunakan variabel lingkungan 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
kata kerja :
init
recv
send
drop
$ts arp $verb $operation $client_mac $client_ip $masscanned_mac $masscanned_ip
$ts eth $verb $ethertype $client_mac $masscanned_mac