<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yobi.be/index.php?action=history&amp;feed=atom&amp;title=Kernel_AODV_Spoof_Hello</id>
	<title>Kernel AODV Spoof Hello - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yobi.be/index.php?action=history&amp;feed=atom&amp;title=Kernel_AODV_Spoof_Hello"/>
	<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Kernel_AODV_Spoof_Hello&amp;action=history"/>
	<updated>2026-05-23T18:43:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Kernel_AODV_Spoof_Hello&amp;diff=2839&amp;oldid=prev</id>
		<title>PhilippeTeuwen at 00:06, 26 February 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Kernel_AODV_Spoof_Hello&amp;diff=2839&amp;oldid=prev"/>
		<updated>2008-02-26T00:06:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;Converted with [[MediaWiki#HTML-WikiConverter|HTML::WikiConverter::MediaWiki]] from my old phpwiki site&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
== Alleï hackons un peu le bastringue... ==&lt;br /&gt;
&lt;br /&gt;
Spoofing d&amp;#039;un paquet HELLO de AODV: &amp;lt;br /&amp;gt;cf 5.2 &amp;amp;amp; 6.9 of [http://www.faqs.org/rfcs/rfc3561.html RFC:3561]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 hping2 --id 0 \&lt;br /&gt;
        --dontfrag \&lt;br /&gt;
        --udp --baseport 654 --keep --destport 654 \&lt;br /&gt;
        --spoof &amp;amp;lt;IP SRC&amp;amp;gt; \&lt;br /&gt;
        --ttl 1 \&lt;br /&gt;
        --data 20 \&lt;br /&gt;
        --file packet.raw \&lt;br /&gt;
        255.255.255.255&lt;br /&gt;
&lt;br /&gt;
avec un fichier &amp;quot;packet.raw&amp;quot; qui contient les bytes suivants:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
     0                   1                   2                   3&lt;br /&gt;
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1&lt;br /&gt;
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
    |     Type      |R|A|    Reserved     |Prefix Sz|   Hop Count   |&lt;br /&gt;
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
    |                     Destination IP address                    |&lt;br /&gt;
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
    |                  Destination Sequence Number                  |&lt;br /&gt;
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
    |                    Originator IP address                      |&lt;br /&gt;
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
    |                           Lifetime                            |&lt;br /&gt;
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
       Type          2&lt;br /&gt;
       R             Repair flag; used for multicast.&lt;br /&gt;
       A             Acknowledgment required; see sections 5.4 and 6.7.&lt;br /&gt;
       Reserved      Sent as 0; ignored on reception.&lt;br /&gt;
       Prefix Size   If nonzero, the 5-bit Prefix Size specifies that the&lt;br /&gt;
                     indicated next hop may be used for any nodes with&lt;br /&gt;
                     the same routing prefix (as defined by the Prefix&lt;br /&gt;
                     Size) as the requested destination.&lt;br /&gt;
       Hop Count     The number of hops from the Originator IP Address&lt;br /&gt;
                     to the Destination IP Address.  For multicast route&lt;br /&gt;
                     requests this indicates the number of hops to the&lt;br /&gt;
                     multicast tree member sending the RREP.&lt;br /&gt;
                     **In case of HELLO message: 0**&lt;br /&gt;
       Destination IP Address&lt;br /&gt;
                     The IP address of the destination for which a route is supplied.&lt;br /&gt;
                     **In case of HELLO message: The node&amp;#039;s IP address.**&lt;br /&gt;
       Destination Sequence Number&lt;br /&gt;
                     The destination sequence number associated to the&lt;br /&gt;
                     route.&lt;br /&gt;
                     **In case of HELLO message: The node&amp;#039;s latest sequence number.**&lt;br /&gt;
       Originator IP Address&lt;br /&gt;
                     The IP address of the node which originated the RREQ&lt;br /&gt;
                     for which the route is supplied.&lt;br /&gt;
       Lifetime      The time in milliseconds for which nodes receiving&lt;br /&gt;
                     the RREP consider the route to be valid.&lt;br /&gt;
                     **In case of HELLO message: ALLOWED_HELLO_LOSS * HELLO_INTERVAL**&lt;br /&gt;
&lt;br /&gt;
Par exemple pour annoncer la machine 10.11.12.13:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 hping2 --id 0 \&lt;br /&gt;
        --dontfrag \&lt;br /&gt;
        --udp --baseport 654 --keep --destport 654 \&lt;br /&gt;
        --spoof 10.11.12.13 \&lt;br /&gt;
        --ttl 1 \&lt;br /&gt;
        --data 20 \&lt;br /&gt;
        --file packet.raw \&lt;br /&gt;
        255.255.255.255&lt;br /&gt;
&lt;br /&gt;
avec un fichier &amp;quot;packet.raw&amp;quot; qui contient les bytes suivants: (forgé a l&amp;#039;aide de hexedit)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
   02 00 00 00&lt;br /&gt;
   0A 0B 0C 0D&lt;br /&gt;
   00 00 00 01&lt;br /&gt;
   0A 0B 0C 0D&lt;br /&gt;
   00 00 0B B8&lt;br /&gt;
&lt;br /&gt;
Si on se sert de cette méthode, Ethereal confirme que les paquets spoofés sont bit à bit égaux avec ceux envoyés par kernel_aodv&lt;br /&gt;
&lt;br /&gt;
==== Remarques ====&lt;br /&gt;
&lt;br /&gt;
* hping accepte aussi un --sign &amp;quot;data&amp;quot; plutot que de passer par un fichier mais specifier&amp;lt;br /&amp;gt;--sign $&amp;#039;\x02\x00...&amp;#039;&amp;lt;br /&amp;gt;ne marche pas car le char null emm... le bazar&lt;br /&gt;
* pour surveiller la table AODV je regarde /proc/aodv/route_table&lt;br /&gt;
* j&amp;#039;essaye aussi de lancer kernel_aodv par modprobe car le script /etc/init.d/kaodv gèle un peu trop de params à mon goût dans ce cadre-ci.&lt;br /&gt;
* Il me semble que d&amp;#039;après le draft le daemon n&amp;#039;est pas obligé d&amp;#039;intégrer l&amp;#039;info HELLO venant des voisins.&lt;br /&gt;
&lt;br /&gt;
=== Essai réalisé au laboratoire de Bombolong ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
* le client A est configuré comme s&amp;#039;il l&amp;#039;avait été par DHCP servi par B&lt;br /&gt;
** IP 10.3.56.77 NETMASK 255.255.255.255&lt;br /&gt;
** route add 10.3.56.74 eth1&lt;br /&gt;
** route add default gw 10.3.56.74&lt;br /&gt;
** PAS de AODV&lt;br /&gt;
* la machine B&lt;br /&gt;
** IP 10.3.56.74&lt;br /&gt;
** KAODV&lt;br /&gt;
* la machine C&lt;br /&gt;
** broadcast des HELLO forgés &amp;quot;venant de A&amp;quot; &amp;lt;br /&amp;gt;D ne voit pas ces paquets&amp;lt;br /&amp;gt;B voit ces paquets&amp;lt;br /&amp;gt;c&amp;#039;est le but recherché!!&lt;br /&gt;
* la machine D&lt;br /&gt;
** IP 10.2.206.108&lt;br /&gt;
** KAODV&lt;br /&gt;
&lt;br /&gt;
==== Résultats ====&lt;br /&gt;
&lt;br /&gt;
Si D veut pinger A, ça marche! &amp;lt;br /&amp;gt;D&amp;#039;après ethereal sur B voici ce qui se passe:&lt;br /&gt;
&lt;br /&gt;
* D envoie un RREQ pour trouver A&lt;br /&gt;
* B envoie un RREP a D pour dire qu&amp;#039;il peut joindre A via B&lt;br /&gt;
* D ajoute à sa table que A est à 2 hops via B&lt;br /&gt;
* D icmp echo request à A via B&lt;br /&gt;
* B relaye echo request&lt;br /&gt;
* A icmp echo reply à D via B&lt;br /&gt;
* B relaye echo reply&lt;br /&gt;
* D est content et moi aussi :-)&lt;br /&gt;
&lt;br /&gt;
==== Remarques ====&lt;br /&gt;
&lt;br /&gt;
* DHCPd est-il capable de configurer A avec le bon tunnel IPA-IPB?&lt;br /&gt;
* kaodv semble travailler au dessus de la pile UDP/IP car il broadcast sur 255.255.255.255 qui n&amp;#039;est pas accessible d&amp;#039;apres le contenu de la table de routage et lorsque je forge les paquets HELLO je dois ajouter cette route sinon Network unreachable!&lt;br /&gt;
* la machine qui génère les paquets HELLO par hping ne voie pas ses propres paquets, ce qui est assez gênant si on veut qu&amp;#039;une machine complète ses routes elle-même.&amp;lt;br /&amp;gt;C&amp;#039;est logique il faut s&amp;#039;assurer que l&amp;#039;interface &amp;quot;lo&amp;quot; soit gérée par AODV (&amp;#039;&amp;#039;pas&amp;#039;&amp;#039; de aodv_dev=...) et l&amp;#039;utilise effectivement (use_lo=1) pour que ça marche.&amp;lt;br /&amp;gt;cf KernelAodvHack pour plus de détails.&lt;br /&gt;
* physiquement lors du test les machines C et D étaient une même machine ce qui garanti, vu la remarque précédente, qu&amp;#039;effectivement D ne reçoive pas le message HELLO émis par C.&lt;br /&gt;
&lt;br /&gt;
==== Variations sur un même thème ====&lt;br /&gt;
&lt;br /&gt;
Altérations des paquets HELLO envoyés à B: (on casse le draft AODV et on regarde comment se comporte KAODV)&lt;br /&gt;
&lt;br /&gt;
* Le spoof de l&amp;#039;IP source dans l&amp;#039;en-tête IP &amp;#039;&amp;#039;est&amp;#039;&amp;#039; nécessaire pour que l&amp;#039;information &amp;quot;next hop&amp;quot; soit correcte dans la table de routage d&amp;#039;AODV.&lt;br /&gt;
* La destination ne doit pas être nécessairement un broadcast, on peut envoyer le message à un noeud bien précis uniquement.&lt;br /&gt;
* Bref seul compte le payload AODV (les 20 bytes de data) et l&amp;#039;adresse source du paquet.&lt;br /&gt;
* On peut mettre le champ IP SRC à 0, vu qu&amp;#039;il n&amp;#039;y a pas eu de message RREQ à l&amp;#039;origine de ce RREP, c&amp;#039;est l&amp;#039;IP DST qui est enregistrée dans la table AODV, destination pour laquelle une route est proposée.&amp;lt;br /&amp;gt;Le champ IP SRC n&amp;#039;est nécessaire que pour forwarder un message plus loin, ce qui nécessite un TTL&amp;amp;gt;1 que nous n&amp;#039;avons pas dans ce cas-ci.&lt;br /&gt;
* je n&amp;#039;ai pas très bien compris l&amp;#039;usage du &amp;quot;sequence number&amp;quot; et plus spécifiquement dans un paquet HELLO, bien que cela ne semble pas très critique...&amp;lt;br /&amp;gt;Cela semble indiquer à AODV quelle information choisir s&amp;#039;il en reçoit 2 contradictoires de 2 sources différentes, il prendra celle de séquence la plus élevée.&lt;br /&gt;
* on peut jouer sur le Lifetime pour persister dans la table plus longtemps que les 3000ms par défaut des messages envoyés par KAODV mais à vérifier tout de même lorsque d&amp;#039;autres paquets non AODV sont émis et interceptés par AODV pour mise à jour de la table de routage...&lt;/div&gt;</summary>
		<author><name>PhilippeTeuwen</name></author>
	</entry>
</feed>