BIND 9.4.1 implemented automatic empty reverse zones for private address space in order to prevent reverse DNS leakage. This saves an administrator the trouble of having to define these empty zones, and reduces the number of "out of the box" configurations that will leak reverse DNS lookups to IANA's blackholing servers.
What is the default format of the synthesized replies from an automatic empty reverse zone? The format isn't completely described within the documentation. (just the defaults of a few options)
If the default options for empty zones have not been adjusted, an
ANY
query should return the following:aa
) flag is set. No recursion.NS
record points to the apex of the zone, which has noA
record.NS
record.MNAME
SOA field (master server) is identical to the name of the empty zone. This behavior is changed by theempty-server
option.RNAME
SOA field (contact) contains a single dot (.
). This behavior is changed by theempty-contact
option.NXDOMAIN
.Based on the above, the most reliable way to fingerprint a synthesized empty zone is to look for the
aa
flag, and check to see whether theNS
record points to a zone apex with a missingA
record. Keep in mind that you can't check for aNXDOMAIN
response because other record types are present with the same name; you'll get aNOERROR
response with no ANSWER section when requesting theA
record.It's usually safe to assume that responses with "official" looking SOA fields (
MNAME
ofprisoner.iana.org.
,RNAME
ofhostmaster.root-servers.org.
) have leaked up to the root nameservers, but depending on the scans you're running inside your network this may not always be sufficient.