Verbeteringen na security audit doorgevoerd in Unbound versie 1.9.6

"Je weet dat je met nieuwe features ook nieuwe bugs aan je code toevoegt"

De validerende resolver Unbound heeft een security audit ondergaan. Dat heeft één critical, vijf high, vijf medium en een paar dozijn andere bugs en verbeteringen opgeleverd. De security patch voor de critical bug is opgenomen in versie 1.9.5 van Unbound, de rest van de reparaties in versie 1.9.6. Alles bij elkaar zijn er 48 correcties doorgevoerd.

DNSSEC-validatie met Unbound en DNSSEC-Trigger

Doelstelling van deze audit was om bugs en zwakheden in de (open source) broncode te vinden die de veiligheid van een Unbound server in gevaar konden brengen. Daarbij werd gebruik gemaakt van code review (het doorlezen van de broncode), fuzzing (het automatisch genereren van random input) en statische analyse (broncode-analyse met behulp van tools).

Nieuwe features, nieuwe bugs

"We hebben natuurlijk hele goede programmeurs in huis," zegt Benno Overeinder, de directeur van NLnet Labs, "en Unbound wordt ontwikkeld met security in het achterhoofd. Dat begint bij de architectuur en eindigt bij de code. Maar programmeurs zijn ook mensen en soms zien we dingen over het hoofd. Je weet dat je met nieuwe features ook nieuwe bugs aan je code toevoegt." "Bij de reparatie van kleine fouten doen we geen code review. Maar er komen nu een paar grote nieuwe features aan (RPZ en serve-stale), waar alles bij elkaar een paar maanden werk in zit. Die worden eerst door de ontwikkelaars op hoog niveau besproken. Maar uiteindelijk resulteert dat in een git pull, waarna de code door anderen kan worden gereviewd."

Financiering

De audit van Unbound werd gefinancierd door het Open Source Technology Improvement Fund (OSTIF). Het daarvoor benodigde geld ($139.000) werd eerder dit jaar ingezameld via een crowdfunding-actie [1, 2]. De belangrijkste supporters waren VPN-aanbieder Private Internet Access (PIA) en certificatenleverancier Let's Encrypt. De audit zelf is uitgevoerd door X41 D-Sec GmbH in Duitsland. In totaal zijn 44 mandagen door vijf verschillende mensen aan deze audit besteed. Het volledige audit-rapport vind je hier. Daarin ook een eerder door X41 gevonden ernstige bug die al in versie 1.9.4 van Unbound werd gerepareerd.

Betere code

NLnet Labs heeft vanaf het begin alle Unbound-ontwikkelaars bij de audit betrokken. "De bugs die we van X41 kregen werden gelijk gefixt en gecommuniceerd," vertelt senior developer Wouter Wijngaards, "en van hen begrepen we dat dat best uitzonderlijk is. Vandaar dat we ook andere fixes van hen doorgestuurd kregen." Waar sommige software-ontwikkelaars en -leveranciers bug reports als een aanval op hun kwaliteit en merk ervaren, zegt Overeinder daar juist blij mee te zijn. "Wij zijn gebaat bij een zo groot mogelijke transparantie en nemen bug reports heel serieus. Daar wordt onze code beter van." "Waar mogelijk hebben we ook lessen getrokken uit deze audit," vult Wijngaards aan. "Zo let ik nu beter op integer overflows." Tegelijkertijd is er in de loop der tijd al enorm veel verbeterd in de statische analyse van de broncode. "Toen we tien jaar geleden begonnen met Unbound gebruikten we daarvoor nog lint. Nu doen we dat met de tools van clang."

Fuzzers

Een aantal van de door hen ontwikkelde fuzzers wil X41 ook (als open source) aan het Unbound-project geven. "Het gaat om specifieke uitbreidingen op OSS-Fuzz," aldus Wijngaards, "die wij dan kunnen opnemen in de contrib/ sectie van onze software. Daarmee wordt het voor de community uiteindelijk makkelijker om Unbound te testen." Zelf fuzzen zal NLnet Labs niet doen. "Dat is heel gedetailleerd werk. Maar er zijn onderzoekers aan universiteiten en specialisten in de community die zich daarmee bezig houden. Zo kregen we vorige zomer uit die hoek ook een fuzz-reparatie voor NSD toegestopt."

Unbound in OpenBSD

Unbound was al de default resolver in OpenBSD (en vele andere Unix-achtigen). Vanaf OpenBSD versie 6.7 wordt Unbound niet alleen met de distributie meegeleverd, maar staat DNSSEC-validatie ook standaard aangeschakeld. OpenBSD wordt beschouwd als het veiligste operating system dat bestaat en is de bron van legio beveiligingstechnologieën die in de loop der tijd hun weg vinden naar andere operating systems.