DoS-gat ontdekt in nieuw Linux-filesystem

Het nieuwe, nog experimentele Linux-filesystem Btrfs heeft een gat waarmee het systeem is plat te leggen. Misbruik is "opmerkelijk makkelijk", aldus de ontdekker die twee methodes uit de doeken doet.


Developer Pascal Junod heeft ontdekt dat Btrfs vatbaar is voor een zogeheten Hash-DoS-aanval (denial of service). Daarbij kan het aanmaken van bestanden met willekeurige namen leiden tot hash-botsingen waardoor de hele Linux-computer bevriest. De collisions zorgen namelijk voor een enorm grote systeembelasting. De dienst die een computer normaliter vervult, is dan effectief uitgeschakeld.

Bestandssabotage

Voor het uitvoeren van de twee door Junod ontdekte DoS-aanvallen is wel lokale toegang nodig, meldt open source-nieuwsblog Phoronix. De eerste methode draait om bestanden waarbij bewust een tweede set wordt aangemaakt waarvan bestanden na hashen uitkomen op dezelfde CRC32C-waardes. Die overlap zorgt voor fouten waardoor het aanmaken van de nieuwe bestanden wordt afgebroken.

"Een tegenstander kan in het scenario van een gedeelde directory ervoor zorgen dat zijn slachtoffer een bestand kan aanmaken met een bepaalde, vantevoren bekende, naam", legt security-onderzoeker Junod uit. Dat hoeft niet per sé een bestand van de eindgebruiker zelf te zijn, maar kan ook een bestand van een draaiende applicatie of daemon zijn.

Struikelen over deleten

De tweede aanvalsmethode tegen Btrfs heeft grotere gevolgen: een overbelasting en bevriezing van het systeem is hierbij mogelijk. Deze aanval wordt uitgevoerd middels aangemaakte malafide bestanden, die willekeurige bestandsnamen en deels overlappende CRC32C-waarden hebben.

"Ik heb diverse bestanden met willekeurig namen (ongeveer 500) aangemaakt in een directory. De tijd om die te verwijderen, is verwaarloosbaar. Vervolgens heb ik hetzelfde aantal bestanden aangemaakt, maar met slechts 55 verschillende CRC32C-waarden. De benodigde tijd om díe te verwijderen is zo groot dat ik het niet kon bepalen, en ik heb het proces na 220 minuten maar beëindigd."

Demonstratiecode beschikbaar

In het geval van de sabotage voor bestandsaanmaak heeft Junod 4000 lege bestanden aangemaakt om vervolgens een doublureset qua CRC-waarden te creëren. De aanmaak van de eerste set nam slechts 0,2 seconden in beslag. Het maken van de tweede set, met hash-botsingen versus de 'originelen', brak na 5 seconden af. Het proces had toen slechts 61 bestanden aangemaakt.

De security-onderzoeker heeft demonstratiecode (in Python) gepubliceerd op zijn blog. Daar geeft hij ook meer technische details over de denial of service tegen Btrfs. Phoronix weet nog te melden dat dat bestandssysteem vorige week productierijp is verklaard door Linux-distributie Suse. Ondertussen stelt Btrfs-ontwikkelaar Chris Mason dat hij deze kwetsbaarheden hopelijk fixt voor de volgende versie 3.8 van de Linux-kernel.

Oerkwetsbaarheid

Die filesystem-ontwikkelaar in reactie op Junods vondst al gesteld dat hash-botsingen een bekende issue zijn. Het is volgens hem "aan te raden om gedeelde directories geheel te vermijden als je bezorgd bent over dit soort aanvallen". Junod adviseert in zijn blogpost om een modern en lichtgewicht hashing-algoritme te gebruiken, "zoals SipHash in plaats van CRC32C"

"Technisch gezien bestaat dit soort aanvallen uit het genereren van een groot aantal met elkaar botsende inputs voor de hash-tabel", legt de developer uit in zijn blogpost. Daarin stelt hij in het begin ook dat deze problematiek eigenlijk helemaal niet nieuw is. Het is voor het eerst aangekaart in 1998, en eind 2011 nog in de praktijk aangetoond voor een groot aantal webtalen waaronder PHP, Python, Java, ASP.NET en Ruby. Daardoor hadden in de praktijk alle websites een DoS-gat, wat te misbruiken viel door een gewone pc via een lichte DSL-verbinding.