[lacnog] ICMPv6-based DoS (filtrado de ICMPv6 PTB o IPv6 frags en peers BGP)
Fernando Gont
fgont en si6networks.com
Jue Ene 12 10:11:29 BRST 2017
Estimados,
La historia es simple: enviando un paquete ICMPv6 "Packet Too Big" (PTB)
que anuncie un MTU<1280 bytes, se puede "disparar" el uso de
fragmentacion por parte del sistema que lo recibe.
En este sentido, hay dos situaciones:
* BGP: En ocasiones, el administrador de un router BGP filtra los
fragmentos IPv6 destinados al router, para mitigar ataques de
fragmentacion. Sin embargo, si el otro BGP peer no filtra los mensajes
de error ICMPv6 PTB destinados a si mismo, entonces hay un vector de
DoS. (el atacante envia un mensaje ICMPv6 PTB a un router para que el
mismo empiece a enviar el trafico fragmentado, y el otro router termina
descartando dicho trafico, produciendose un DoS).
* Servidores en general: Dado que en muchos puntos de Internet se
filtran los paquetes que utilizan Encabezados de Extension (EHs), se
puede realizar un DoS a una conexion arbitraria enviando un mensaje
ICMPv6 PTB al servidor, para que produzca trafico fragmentado, que
subsecuentemente será descartado por la red.
Cuestiones a considerar:
* BGP:
Filtran Uds. el trafico fragmentado enviado al router BGP?
Filtran Uds. los mensajes ICMPv6 PTB entrantes al router BGP? (al
menos los que anuncian un MTU<1280).
Si filtraran algunos de los dos paquetes anteriores: se intento, en
algun momento, coordinar una politica de filtrado con el otro u otros
peers? (por ejemplo, para que ambos filtren tanto los fragmentos
como los errores ICMPv6 PTB).
* Servidores:
Filtran Uds. los mensajes ICMPv6 PTB entrantes que anuncian un
MTU<1280 bytes?
De no hacerlo, podría ser trivial hacer DoS entre dos servidores
"conocidos".
Esto esta descripto en la Seccion 2 del (recientemente publicado) RFC8021:
---- cut here ----
The security implications of IP fragmentation have been discussed at
length in [RFC6274] and [RFC7739]. An attacker can leverage the
generation of IPv6 atomic fragments to trigger the use of
fragmentation in an arbitrary IPv6 flow (in scenarios in which actual
fragmentation of packets is not needed) and can subsequently perform
any type of fragmentation-based attack against legacy IPv6 nodes that
do not implement [RFC6946]. That is, employing fragmentation where
not actually needed allows for fragmentation-based attack vectors to
be employed, unnecessarily.
We note that, unfortunately, even nodes that already implement
[RFC6946] can be subject to DoS attacks as a result of the generation
of IPv6 atomic fragments. Let us assume that Host A is communicating
with Host B and that, as a result of the widespread dropping of IPv6
packets that contain extension headers (including fragmentation)
[RFC7872], some intermediate node filters fragments between Host B
and Host A. If an attacker sends a forged ICMPv6 PTB error message
to Host B, reporting an MTU smaller than 1280, this will trigger the
generation of IPv6 atomic fragments from that moment on (as required
by [RFC2460]). When Host B starts sending IPv6 atomic fragments (in
response to the received ICMPv6 PTB error message), these packets
will be dropped, since we previously noted that IPv6 packets with
extension headers were being dropped between Host B and Host A.
Thus, this situation will result in a DoS scenario.
Another possible scenario is that in which two BGP peers are
employing IPv6 transport and they implement Access Control Lists
(ACLs) to drop IPv6 fragments (to avoid control-plane attacks). If
the aforementioned BGP peers drop IPv6 fragments but still honor
received ICMPv6 PTB error messages, an attacker could easily attack
the corresponding peering session by simply sending an ICMPv6 PTB
message with a reported MTU smaller than 1280 bytes. Once the attack
packet has been sent, the aforementioned routers will themselves be
the ones dropping their own traffic.
---- cut here ----
Para el que desee hacer pruebas, utilizar la herramienta icmp6 de
<https://www.si6networks.com/tools/ipv6toolkit>, así:
Por ej., en el caso de querer reproducir un DoS entre un cliente web y
un servidor web, uno lo haria asi:
1) Probar conectividad con el servider, tipo:
telnet SERVER_IPV6 80
(aca podrian establecer la conexion sin problemas)
2) hacer el ataque
# icmp6 --icmp6-packet-too-big -d SERVER_IPV6 --peer-addr CLIENT_IPV6
--mtu 1000 -o 80 -v
Donde:
SERVER_IPV6: Direccion IPv6 del servidor
CLIENT_IPV6: Direccion IPv6 del cliente
3) Volver a probar conectividad con el servidor:
telnet SERVER_IPV6 80
(aca obtendrian un timeout)
(Reportes del mas alla han sugerido que un usuario pudo reproducir esto
por ejemplo probandolo entre su propia conexion y www.kernel.org)
Para probarlo contra una sesion BGP, obviamente tendrian que reemplazar
las direcciones IPv6 por la de los peers, y el puerto "80" por el
well-known por de BGP. Obviamente el impacto aca es otro (), y *no* es
recomendable que lo hagan salvo que los sistemas sena propios, tengan
contramedidas en su lugar, y sepan lo que están haciendo.
Comentarios, feedback y demas (ya sea on- o off-list) son bienvenidos.
Saludos cordiales,
--
Fernando Gont
SI6 Networks
e-mail: fgont en si6networks.com
PGP Fingerprint: 6666 31C6 D484 63B2 8FB1 E3C4 AE25 0D55 1D4E 7492
Más información sobre la lista de distribución LACNOG