dns-groot / Ferret

Automatic Test generator and Differential Tester for DNS Nameserver implementations

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ferret

License: MIT codecov

Ferret is the first automatic test generator for DNS nameserver implementation RFC compliance.


The test case generation module is implemented in C# and symbolically executes the Zen model of the authoritative DNS, which is based on our updated DNS formal semantics. The formal semantics were part of the earlier SIGCOMM paper we published. The testing module uses Docker to test implementations.

Follow the steps mentioned in test case generation README to generate tests using Zen. Use either the Zen generated tests or custom tests to test implementations by following the steps mentioned in DifferentialTesting README. To simply serve a zone using an implementation docker container follow these steps.

πŸ“ƒ NSDI 2022 -- SCALE: Automatically Finding RFC Compliance Bugs in DNS Nameservers

πŸ–₯️ Slides and Talk

Citing Ferret

@inproceedings {278336,
author = {Siva Kesava Reddy Kakarla and Ryan Beckett and Todd Millstein and George Varghese},
title = {{SCALE}: Automatically Finding {RFC} Compliance Bugs in {DNS} Nameservers},
booktitle = {19th USENIX Symposium on Networked Systems Design and Implementation (NSDI 22)},
year = {2022},
isbn = {978-1-939133-27-4},
address = {Renton, WA},
pages = {307--323},
url = {https://www.usenix.org/conference/nsdi22/presentation/kakarla},
publisher = {USENIX Association},
month = apr,
}

Bugs Found

Legend - Fixed: βœ…    Confirmed: β˜‘οΈ    Bug but not fixing it: ⚠️

Implementation Bug Bug Type Status
Bind Sibling glue records not returned Wrong Additional β˜‘οΈ
Zone origin glue records not returned Wrong Additional β˜‘οΈ
Synthesized CNAME is not taken for a CNAME query Wrong RCODE βœ…
DNAME recursion denial-of-service Server Crash βœ…
Nsd DNAME not applied recursively Wrong Answer βœ…
Wrong RCODE when * is in rdata Wrong RCODE βœ…
Synthesized CNAME is not taken for a CNAME query Wrong RCODE βœ…
Used NS records below delegation Wrong Answer βœ…
PowerDns CNAME followed when not required Wrong Answer β˜‘οΈ
DNAME at apex pdnsutil check-zone Wrong Answer βœ…
Knot Incorrect record synthesis Wrong Answer βœ…
DNAME not applied recursively Wrong Answer βœ…
Used records below delegation Wrong Answer βœ…
Error in DNAME-DNAME loop Knot test Faulty Knot Test βœ…
Synthesized CNAME is not taken for a CNAME query Wrong RCODE βœ…
CoreDns NXDOMAIN for an existing domain Wrong RCODE ⚠️
Wrong RCODE for CNAME target Wrong RCODE βœ…
Wildcard CNAME loops and DNAME loops Server Crash βœ…
Wrong RCODE for synthesized record Wrong RCODE βœ…
CNAME followed when not required Wrong Answer βœ…
Sibling glue records not returned Wrong Additional β˜‘οΈ
Yadifa CNAME chains not followed Wrong Answer βœ…
Wrong RCODE for CNAME target Wrong RCODE βœ…
Used records below delegation Wrong Answer βœ…
Maradns# AA flag set for zone cut NS RRs Wrong Flag ⚠️
Glue records returned with AA flag Wrong Flag ⚠️
TrustDns# Wildcard matches only one label Wrong Answer β˜‘οΈ
Glue records returned with AA flag Wrong Flag β˜‘οΈ
AA flag set for zone cut NS RRs Wrong Flag β˜‘οΈ
CNAME loop crashes the server Server Crash βœ…
Technitium Wrong RCODE for synthesized record Wrong RCODE β˜‘οΈ
Improper handling of non-terminal wildcard Wrong Answer β˜‘οΈ
Used records below delegation Wrong Answer β˜‘οΈ
Wildcard CNAME not applied again Wrong Answer β˜‘οΈ

# Implementations with unreported issues due to missing or unimplemented features

About

Automatic Test generator and Differential Tester for DNS Nameserver implementations

License:MIT License


Languages

Language:Python 57.3%Language:C# 38.4%Language:Dockerfile 4.2%Language:Shell 0.1%