Provided by: ipv6toolkit_2.0+ds.1-2build2_amd64 

NAME
tcp6 - A security assessment tool for TCP/IPv6 implementations
SYNOPSIS
tcp6 -i INTERFACE [-S LINK_SRC_ADDR] [-D LINK-DST-ADDR] [-s SRC_ADDR[/LEN]] [-d DST_ADDR] [-A HOP_LIMIT]
[-y FRAG_SIZE] [-u DST_OPT_HDR_SIZE] [-U DST_OPT_U_HDR_SIZE] [-H HBH_OPT_HDR_SIZE] [-c OPEN_TYPE] [-C
CLOSE_TYPE] [-P PAYLOAD_SIZE] [-o SRC_PORT] [-a DST_PORT] [-X TCP_FLAGS] [-q TCP_SEQ] [-Q TCP_ACK] [-V
TCP_URP] [-w TCP_WIN] [-W WINDOW_MODE] [-M WIN_MOD_MODE] [-Z DATA] [-N] [-n] [-j PREFIX[/LEN]] [-k
PREFIX[/LEN]] [-J LINK_ADDR] [-K LINK_ADDR] [-b PREFIX[/LEN]] [-g PREFIX[/LEN]] [-B LINK_ADDR] [-G
LINK_ADDR] [-F N_SOURCES] [-T N_PORTS] [-f] [-R] [-L] [-l] [-p PROBE_MODE] [-z SECONDS] [-r RATE] [-v]
[-h]
DESCRIPTION
tcp6 tool allows the assessment of IPv6 implementations with respect to a variety of attack vectors based
on TCP/IPv6 segments. This tool is part of the SI6 Networks' IPv6 Toolkit: a security assessment suite
for the IPv6 protocols.
tcp6 can be employed to perform specific TCP connection-establishment and connection-termination
sequences. For example, it can be employed to simulate a TCP "simultaneous open" scenario (see the
"--open-mode" option) or to simulate a TCP "simultaneous close" scenario (see the "--close-mode" option).
It can be employed to perform a number of resource-exhaustion attacks against TCP, such as SYN-flooding
attacks, connection-flooding attacks (see the "--flood-sources" and "--flood-ports" options), etc.
Additionally, it can be employed to exploit attack vectors based on the TCP window (see the "--window"
option).
tcp6 tool has two modes of operation: active and listening. In active mode, the tool attacks a specific
target, while in listening mode the tool listens to TCP traffic on the local network, and launches an
attack in response to such traffic. Active mode is employed if an IPv6 Destination Address is specified.
Listening mode is employed if the "-L" option (or its long counterpart "--listen") is set. If both an
attack target and the "-L" option are specified, the attack is launched against the specified target, and
then the tool enters listening mode to respond incoming packets with TCP segments.
tcp6 supports filtering of incoming packets based on the Ethernet Source Address, the Ethernet
Destination Address, the IPv6 Source Address, and the IPv6 Destination Address. There are two types of
filters: "block filters" and "accept filters". If any "block filter" is specified, and the incoming
packet matches any of those filters, the message is discarded (and thus no TCP segments are sent in
response). If any "accept filter" is specified, incoming packets must match the specified filters in
order for the tool to respond with TCP segments.
OPTIONS
tcp6 takes itS parameters as command-line options. Each of the options can be specified with a short name
(one character preceded with the hyphen character, as e.g. "-i") or with a long name (a string preceded
with two hyphen characters, as e.g. "--interface").
If the tool is instructed to e.g. flood the victim with TCP segments from different sources
("--flood-sources" option), multiple packets may need to be generated.
tcp6 supports IPv6 Extension Headers, including the IPv6 Fragmentation Header, which might be of use to
circumvent layer-2 filtering and/or Network Intrusion Detection Systems (NIDS). However, IPv6 extension
headers are not employed by default, and must be explicitly enabled with the corresponding options.
-i INTERFACE, --interface INTERFACE
This option specifies the network interface that the tool will use. The network interface must be
specified (i.e., the tool does not select any network interface "by default").
-S SRC_LINK_ADDR, --src-link-address SRC_LINK_ADDR
This option specifies the link-layer Source Address of the probe packets. If left unspecified, the
link-layer Source Address of the packets is set to the real link-layer address of the network
interface. Note: this option is meaningful only when the underlying link-layer technology is
Ethernet.
-D DST_LINK_ADDR, --dst-link-address DST_LINK_ADDR
This option specifies the link-layer Destination Address of the probe packets. By default, the
link-layer Destination Address is automatically set to the link-layer address of the destination
host (for on-link destinations) or to the link-layer address of the first-hop router. Note: this
option is meaningful only when the underlying link-layer technology is Ethernet.
-s SRC_ADDR, --src-address SRC_ADDR
This option specifies the IPv6 source address (or IPv6 prefix) to be used for the Source Address
of the attack packets. If the "-F" ("--flood-sources") option is specified, this option includes
an IPv6 prefix, from which random addresses are selected. See the description of the "-F" option
for further information on how the "-s" option is processed in that specific case.
Note: When operating in "listening" mode, the Source Address is automatically set to the
Destination Address of the incoming packet.
-d DST_ADDR, --dst-address DST_ADDR
This option specifies the IPv6 Destination Address of the victim. It can be left unspecified only
if the "-L" option is selected (i.e., if the tool is to operate in "listening" mode).
Note: When operating in "listening" mode, the Destination Address is automatically set to the
Source Address of the incoming packet.
-A HOP_LIMIT, --hop-limit HOP_LIMIT
This option specifies the Hop Limit to be used for the IPv6 packets. It defaults to 255.
-u HDR_SIZE, --dst-opt-hdr HDR_SIZE
This option specifies that a Destination Options header is to be included in the outgoing
packet(s). The extension header size must be specified as an argument to this option (the header
is filled with padding options). Multiple Destination Options headers may be specified by means of
multiple "-u" options.
-U HDR_SIZE, --dst-opt-u-hdr HDR_SIZE
This option specifies a Destination Options header to be included in the "unfragmentable part" of
the outgoing packet(s). The header size must be specified as an argument to this option (the
header is filled with padding options). Multiple Destination Options headers may be specified by
means of multiple "-U" options.
-H HDR_SIZE, --hbh-opt-hdr HDR_SIZE
This option specifies that a Hop-by-Hop Options header is to be included in the outgoing
packet(s). The header size must be specified as an argument to this option (the header is filled
with padding options). Multiple Hop-by-Hop Options headers may be specified by means of multiple
"-H" options.
-y FRAG_SIZE, --frag-hdr FRAG_SIZE
This option specifies that the resulting packet must be fragmented. The fragment size must be
specified as an argument to this option.
-P PAYLOAD_SIZE, --payload-size PAYLOAD_SIZE
This options specifies the size of the TCP payload. It defaults to 0 (i.e., empty TCP segments).
-o SRC_PORT, --src-port SRC_PORT
This option specifies the TCP Source Port.
-a DST_PORT, --dst-port DST_PORT
This option specifies the TCP/UDP Destination Port.
-X TCP_FLAGS, --tcp-flags TCP_FLAGS
his option is used to set specific the TCP flags. The flags are specified as "F" (FIN), "S" (SYN),
"R" (RST), "P" (PSH), "A" (ACK), "U" (URG), "X" (no flags).
If this option is not set, and the tool operates in listening mode, the flags of the generated TCP
segments are automatically set as follows: TCP segments elicited by SYNs have both the SYN and ACK
flags set. All other TCP segments have the ACK bit set.
-q SEQ_NUMBER, --tcp-seq SEQ_NUMBER
This option specifies the Sequence Number of the TCP header. If left unspecified, the Sequence
Number is randomized.
If this option is left unspecified and the tool is operating in listening mode, the TCP Sequence
Number is set to the Acknowledgement Number of the packet that elicited the TCP segment.
-Q ACK_NUMBER, --tcp-ack ACK_NUMBER
This option specifies the Acknowledgment Number of the TCP segment. If left unspecified, the
Acknowledgment Number is randomized.
If this option is left unspecified and the tool is operating in listening mode, the TCP Sequence
Number is set to the Acknowledgement Number of the packet that elicited the TCP segment.
-V URG_POINTER, --tcp-urg URG_POINTER
This option specifies the Urgent Pointer of the TCP segment. If left unspecified, the Urgent
Pointer is set to 0.
-w TCP_WINDOW, --tcp-win TCP_WINDOW
This option specifies the value of the TCP Window. If left unspecified, the Window is randomized.
-W WIN_MODE, --window-mode WIN_MODE
This option specifies how to operate the TCP window by means of the WIN_MODE parameter. Two modes
are supported:
+ closed
+ modulated
When the "closed" mode is selected, the TCP window will be set to 0 (i.e., "closed window"). If
the tool estabishes new TCP connections, the initial window advertised during the TCP three-way
handshake will be that specified with the '-w' option. However, once the connection has been
established, the TCP window will be set to 0. This allows for the implementation of the so-called
Netkill attack, discussed in Section 7.1.1 of the document "Security Assessment of the
Transmission Control Protocol (TCP)" (available at:
<http://www.gont.com.ar/papers/tn-03-09-security-assessment-TCP.pdf>).
When the "modulated" mode is selected, the TCP window will oscillate between alternate between two
different values. These values, along the amount of time that each of them is "active", can be
specified by means of the '-M' ("--win-modulate") option. The first of the aforementioned values
is meant to close the window (hence it will typically be zero), while the second is meant to open
the window. The goal of alternating between these two values is to circumvent a trivial mitigation
against Zero-Window attacks implemented by some stacks where they enforce a limit on the maximum
amount of time that the TCP advertised by a remote peer remains fully-closed (i.e., set to 0). By
changing the advertised window to some other (small) value every now and then, such a trivial
"counter-measure" can be easily circumvented.
-M WIN_MOD_MODE, --win-modulation WIN_MOD_MODE
This option specifies the two values (and their respective duration) over which the TCP window
will alternate. The value WIN_MOD_MODE hast the syntax "WIN1:TIME1:WIN2:TIME2", where the WIN1 and
WIN2 parameters specify the window size for each of these periods, while the TIME1 and TIME2
parameters specify their respective time lengths. For example, setting "--win-modulation
0:60:10:30" will cause tcp6 to alternate between advertising a TCP window of 0 bytes for 60
seconds, and advertising a TCP window of 10 bytes for 30 seconds.
This option will be typically employed along with one of the flooding options ("--flood-sources"
an/or "--flood-ports") and the "--data" option, such that multiple TCP connections are
established, and the target TCPs keep their retransmission buffer full. In this scenario, the TCP
window "modulation" option can be leveraged to evade trivial counter-measures implemented by some
TCP stacks that try to mitigate Zero-Window attacks by enforcing a limit on the maximum amount of
time the TCP window can be in the "closed state".
-c OPEN_MODE, --open-mode OPEN_MODE
This option specifies the connection-establishment mode. The following modes are available:
+ simultaneous
+ passive
+ abort
When the "simultaneous" mode is selected, tcp6 will respond to incoming SYN segments with other
SYN segments, thus simulating a "simultaneous open" scenario. When the "passive" mode is selected,
tcp6 will respond to incoming SYN segments with the typical SYN/ACK segments, thus leading to the
traditional "three-way handshake". Finally, when the "abort" mode si selected, tcp6 wil respond to
incoming SYN segments with RST segments, thus aborting the incoming connections.
For the most part, this option is useful for assessing the correct behavior of TCP implementations
(e.g., support for "simultaneous opens").
-C CLOSE_MODE, --close-mode CLOSE_MODE
This option specifies the the connection-termination mode. The following modes are available:
+ simultaneous
+ passive
+ abort
+ active
+ FIN-WAIT-1
+ FIN-WAIT-2
+ LAST-ACK
When the "simultaneous" mode is selected, tcp6 will respond to incoming FIN segments with FIN
segments, thus simulating a "simultaneous close" scenario. When the "passive" mode is selected,
tcp6 will respond to incoming FIN segments with the typical FIN/ACK segments, thus leading to the
traditional TCP connection-termination sequence. When the "abort" mode is selected, tcp6 wil
respond to incoming FIN segments with RST segments, thus aborting the corresponding connections.
When the "active" mode is selected, tcp6 will start the connection-termination sequence by sending
a FIN segment.
The FIN-WAIT-1, FIN-WAIT-2, and LAST-ACK modes will result in connections in the FIN-WAIT-1,
FIN-WAIT-2, and LAST-ACK, respectively. It should be noted that in order for the remote TCPs to
transition to the FIN-WAIT-1 or FIN-WAIT-2 states, the remote TCPs must perform the "active
close". This can be trivially triggered for application protocols such as HTTP, but might not be
feasible for other protocols.
-Z DATA, --data DATA
This option is used to specify a payload that should be sent as the first data segment once a TCP
connection has been established. It will typically include an application-layer request. Note: the
string used for the DATA parameter can contain the "\r" and "\n" C-style escape senquenced for
representing "carriage return" and "line feed" (respectively).
As an example, this option could be employed to send an HTTP request if set as '--data "GET /
HTTP/1.0\r\n\r\n"'.
-N, --not-ack-data
This option instructs tcp6 not to acknowledge the TCP payload of incoming segments (when operating
in listening mode).
Note: By default, tcp6 will acknowledge both the payload and the flags of the incoming TCP
segments.
-n, --not-ack-flags
This option instructs tcp6 not to acknowledge the TCP flags (SYN and/or FIN) of incoming segments
(when operating in listening mode).
Note: By default, tcp6 will acknowledge both the payload and the flags of the incoming TCP
segments.
-j SRC_ADDR, --block-src SRC_ADDR
This option sets a block filter for the incoming packets, based on their IPv6 Source Address. It
allows the specification of an IPv6 prefix in the form "-j prefix/prefixlen". If the prefix length
is not specified, a prefix length of "/128" is selected (i.e., the option assumes that a single
IPv6 address, rather than an IPv6 prefix, has been specified).
-k DST_ADDR, --block-dst DST_ADDR
This option sets a block filter for the incoming packets, based on their IPv6 Destination Address.
It allows the specification of an IPv6 prefix in the form "-k prefix/prefixlen". If the prefix
length is not specified, a prefix length of "/128" is selected (i.e., the option assumes that a
single IPv6 address, rather than an IPv6 prefix, has been specified).
-J LINK_ADDR, --block-link-src LINK_ADDR
This option sets a block filter for the incoming packets, based on their link-layer Source
Address. The option must be followed by a link-layer address (currently, only Ethernet is
supported).
-K LINK_ADDR, --block-link-dst LINK_ADDR
This option sets a block filter for the incoming packets, based on their link-layer Destination
Address. The option must be followed by a link-layer address (currently, only Ethernet is
supported).
-b SRC_ADDR, --accept-src SRC_ADDR
This option sets an accept filter for the incoming packets, based on their IPv6 Source Address. It
allows the specification of an IPv6 prefix in the form "-b prefix/prefixlen". If the prefix length
is not specified, a prefix length of "/128" is selected (i.e., the option assumes that a single
IPv6 address, rather than an IPv6 prefix, has been specified).
-g DST_ADDR, --accept-dst DST_ADDR
This option sets a accept filter for the incoming packets, based on their IPv6 Destination
Address. It allows the specification of an IPv6 prefix in the form "-g prefix/prefixlen". If the
prefix length is not specified, a prefix length of "/128" is selected (i.e., the option assumes
that a single IPv6 address, rather than an IPv6 prefix, has been specified).
-B LINK_ADDR, --accept-link-src LINK_ADDR
This option sets an accept filter for the incoming packets, based on their link-layer Source
Address. The option must be followed by a link-layer address (currently, only Ethernet is
supported).
-G LINK_ADDR, --accept-link-dst LINK_ADDR
This option sets an accept filter for the incoming packets, based on their link-layer Destination
Address. The option must be followed by a link-layer address (currently, only Ethernet is
supported).
-F N_SOURCES, --flood-sources N_SOURCES
This option instructs the tool to send multiple TCP segments with different Source Addresses. The
number of different source addresses is specified as "-F number". The Source Address of each TCP
segment is randomly selected from the prefix specified by the "-s" option. If the "-F" option is
specified but the "-s" option is left unspecified, the Source Address of the packets is randomly
selected from the prefix ::/0.
-T N_PORTS, --flood-ports N_PORTS
This option instructs the tool to send multiple TCP segments with different Source Ports. The
Source Port of each TCP segment is randomly selected from the whole port number space (0-65535).
-l, --loop
This option instructs the tcp6 tool to send periodic TCP segments to the victim node. The amount
of time to pause between sending TCP segments can be specified by means of the "-z" option, and
defaults to 1 second. Note that this option cannot be set in conjunction with the "-L"
("--listen") option.
-z, --sleep
This option specifies the amount of time to pause between sending TCP segments (when the "--loop"
option is set). If left unspecified, it defaults to 1 second.
-r RATE, --rate-limit RATE
This option specifies the rate limit to use when performing a remote address scan. "RATE" should
be specified as "xbps" or "xpps" (with "x" being an unsigned integer), for rate-limits in bits per
second or packets per second, respectively.
-L, --listen
This instructs the tcp6 tool to operate in listening mode (possibly after attacking a given node).
Note that this option cannot be used in conjunction with the "-l" ("--loop") option.
-p PROBE_MODE, --probe-mode PROBE_MODE
This option instructs tcp6 to operate in probe mode. The specific probe mode is specified as an
argument to this option (currently, only "script" mode is supported). In probe mode, tcp6 sends
probe segments, and waits for response packets. The response packets are decoded based on the
selected probe mode.
In the "script" probe mode, the tool decodes TCP segments as follows:
RESPONSE:RESPONSE_TYPE:RESPONSE_DECODE...
Where the string RESPONSE is fixed, and RESPONSE_TYPE indicates the response received. As of this
version of the tool, the following RESPONSE_TYPE values are supported:
+ TCP6: Indicates that the tool received a TCP/IPv6 packet
+ TIMEOUT: Indicates that the tool received no response
If RESPONSE_TYPE is TCP6, RESPONSE code contains the TCP flags set in the receive TCP segment. The
TCP flags are encoded as "F" (FIN), "S" (SYN), "R" (RST), "P" (PSH), "A" (ACK), and "U" (URG).
Possibe output lines of the tool are:
RESPONSE:TIMEOUT:
RESPONSE:TCP6:RA:
Note: Future versions of the tool will also decode ICMPv6 error messages, and will include
additional data regarding the incoming TCP segments (e.g., ACK value, payload size, etc.).
-v, --verbose
This option instructs the tcp6 tool to be verbose. When the option is set twice, the tool is
"very verbose", and the tool also informs which packets have been accepted or discarded as a
result of applying the specified filters.
-h, --help
Print help information for the tcp6 tool.
EXAMPLES
The following sections illustrate typical use cases of the tcp6 tool.
Example #1
# tcp6 -s fc00:1::/64 -d fc00:1::1 -a 22 -X S -F 100 -l -z 1 -v
In this example the tcp6 tool is essentially employed to perform a SYN-flood attack against port number
22 of the host fc00:1::1. The tool uses the network interface "eth0" (as specified by the "-i" option),
and sends SYN segments (as specified by the "-X" option) from the prefix fc00:1::/64 (as specified by the
"-s" option) to port 22 (specified by the "-a" option) at the destination address fc00:1::1 (specified by
the "-d" option). The tool sends TCP segments from 100 different addresses (as specified by the "-F"
option) every one second (as specified by the "-l" and "-z" options). The tool will be verbose (as
specified by the "-v" option).
Example #2
# tcp6 -i eth0 -L -X RA -v
In this example, the tcp6 tool is employed to perform a TCP connection-reset attack against all active
TCP connections in the local network. The tool listens ("-L") on the interface eth0 ("-i eth0"), and
responds to any TCP segments with a RST packet (with both the RST and ACK bits set). The tool will be
verbose.
Example #3
# tcp6 -i eth0 -d fc00:1::1 -a 80 -L -s fc00:1::/112 -l -r 1pps -v --data "GET / HTTP/1.0\r\n\r\n"
--close-mode last-ack --flood-ports 10
Flood the target system (fc00:1::1) with connections that stay in the LAST-ACK state (on port 80),
sending packets at a rate of one packet per second. For each forged address, 10 different (forged) ports
are used. For each connection, tcp6 will send an HTTP application request.
Example #4
# tcp6 -i eth0 -d fc00:1::1 -a 80 -L -s fc00:1::/112 -l -r 1000pps --tcp-flags auto -v --data "GET /
HTTP/1.0\r\n\r\n" --flood-ports 10 --window-mode close
Flood the target node (fc00:1::1) with TCP connections (on port 80). On each connection that is
established, an HTTP request is sent, and the TCP window is immediately closed. For each forged IPv6
source address ten different TCP source ports are randomized. The bandwidth of the attack is limited to
1000 pps.
Example #5
# tcp6 -d fc00:1::1 -a 80 --tcp-flags A --dst-opt-hdr 8 --payload-size 50 --probe-mode script
Send a probe TCP segment to TCP port 80 at fc00:1::1. The probe packet consists of an IPv6 packet with a
Destination Options header of 8 bytes, and an IPv6 payload consisting of a TCP segment with the ACK bit
set, and 50 data bytes. The probe mode is "script".
SEE ALSO
"Security Assessment of the Transmission Control Protocol (TCP)" (available at:
<http://www.gont.com.ar/papers/tn-03-09-security-assessment-TCP.pdf>) for a discussion of TCP
vulnerabilities.
AUTHOR
The tcp6 tool and the corresponding manual pages were produced by Fernando Gont <fgont@si6networks.com>
for SI6 Networks <http://www.si6networks.com>.
COPYRIGHT
Copyright (c) 2011-2013 Fernando Gont.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with
no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available
at <http://www.gnu.org/licenses/fdl.html>.
TCP6(1)