Executive Summary: DNS has some limitations but there’s no reason for it to be the weakest link in your organization’s security. An incorrectly configured and neglected DNS server can be a significant security problem. DNS services, as providers of network information, will always be a target for reconnaissance and information gathering, but careful planning and vigilance will minimize the risk of malicious hackers using your own servers against you. There’s much you can do to build a solid and secure DNS infrastructure on your network, whether you're using Microsoft DNS or BIND. |
The DNS protocol is peculiar. It’s one of the oldest, most universally used, and most crucial of all networking protocols, but it’s still the source of many network security problems. DNS has some fundamental limitations, but there’s no reason for it to be the weakest link in your organization’s security.
Perhaps it’s DNS’s apparent simplicity that breeds complacency toward DNS security. It’s easy to set up a DNS server and forget about it, but an incorrectly configured and neglected DNS server can be a significant security problem. DNS services, as providers of network information, will always be targets for reconnaissance and information gathering, but careful planning and vigilance will minimize the risk of malicious hackers using your own servers against you. You can do much to build a solid and secure DNS infrastructure on your network, whether you're using Microsoft DNS or BIND. (For information about the security differences between BIND and Microsoft DNS, see the sidebar “Microsoft DNS vs. BIND.” )
DNS Server Attacks
To secure a DNS server, you need to understand how
others might exploit it. The most common threats are
Denial of Service (DoS) attacks, tampering with DNS
records, and information gathering. DoS attacks are
probably the most common threat because they’re
remarkably easy to pull off, thanks to the large number of
incorrectly configured DNS servers on the Internet. DNS
servers are often the launching points for DoS attacks,
wherein an attacker uses a DNS server that allows
recursion to pummel another server with packets. This
kind of attack starves the target server of resources and
prevents legitimate users from accessing it.
DNS tampering, which takes several forms, is less common but still a threat. One common method of DNS tampering is cache poisoning, in which an attacker injects fake records into a DNS server’s cache. Other methods of modifying DNS records include forged packets, man-in-the-middle attacks, and rogue DNS servers. In addition to modifying records, attackers use DNS servers for information gathering through DNS server mining, zone transfers, and DNS packet interception. Properly configured DNS servers can greatly limit your exposure to all these tactics.
Isolate DNS Functions
The first step to preventing attacks on DNS
servers is to plan your network infrastructure
so that you isolate DNS server functions.
The term DNS server describes two
very different functions—a fact that can lead
to confusion during configuration. A DNS
server can be an advertiser of information,
or it can be a gatherer (resolver) of information
stored elsewhere. To maximize security,
it should never perform both functions
simultaneously.
Your DNS advertiser stores and publishes authoritative records about a domain that you control. The DNS advertiser could be a public DNS server, which tells outsiders how to reach your website or mail servers, or an internal Active Directory DNS server, which tells clients where to find resources such as domain controllers. In contrast, your DNS resolver accepts DNS requests from within your organization and contacts outside DNS servers as necessary to locate host information. DNS resolvers can cache records to speed up future lookups and can act as forwarders to redirect client lookups to different DNS servers.
Most DNS servers work fine performing both functions at once, and organizations commonly have several DNS servers that perform both. This practice, however, is the primary reason so many DNS servers are vulnerable. You should have at least three distinct server roles on your network: Internet-facing DNS advertisers for publicly available servers, private DNS advertisers for AD and other internal DNS records, and DNS resolvers to perform lookups, caching, and forwarding for internal clients.
You should split these roles to improve performance and limit exposure to cache poisoning and DoS attacks. To further mitigate DoS attacks, you should have at least two servers in each role. Although many companies use a single DNS server for all roles, isolating server roles is always the best practice, because even if a configuration is not vulnerable now, it could become vulnerable in the future.
Carefully securing all DNS server roles is important, but I want to focus on the most crucial role: the Internet-facing advertisers.
Public DNS Advertisers
Your Internet-facing DNS advertisers are the
only DNS servers visible outside your network,
so you need to limit the information
stored on them; otherwise, attackers might
exploit them. Public advertisers should hold
only public host records and should publish
records only for servers accessible from the
Internet—for example, web, mail, and FTP
servers. Public advertisers should contain
only public IP addresses and other public
records such as Sender Policy Framework
records and basic contact information. If
any of your network adaptors point to your
public DNS servers, chances are you have a
problem to fix.
Although controlling information is important, your primary strategy for securing public advertisers should be to make sure they respond only to requests for the records they hold. They should never perform DNS lookups or look up other information on behalf of someone requesting records. Limiting responses will eliminate cache poisoning and prevent others from using your DNS server as a reflector in a DoS attack. Several steps are necessary in both BIND and Microsoft DNS to secure public advertisers.
Disable Recursion
Recursion allows a DNS server to track
down a host record on behalf of another
server. The problem with recursion is that
in the process of performing lookups for
others, a DNS server might be vulnerable
to cache poisoning. Furthermore, attackers
often use recursive DNS servers as part of a
distributed DoS attack.
Attackers perform DoS attacks by creating large DNS records on servers that they control, then sending thousands of requests to recursive DNS servers all over the Internet. The requests are spoofed to look as if they come from a single IP address, so each DNS server will grab the record, cache it, and return it to the spoofed IP address. By repeating this process, the attacker can flood a target server with packets. The only way to prevent the flood would be to configure every public DNS server on the Internet to block recursive queries. Fixing the estimated half-million DNS servers that allow recursion is impossible, but you can do your part by fixing your own servers.
To disable recursion with Microsoft DNS, open the DNS Management Console, rightclick the computer name in the left pane, and select Properties. Click the Advanced tab and select the Disable recursion check box, as Figure 1 shows. Also, confirm that the Secure cache against pollution option is selected.
Continue to page 2
If you use BIND, you can disable recursion by adding the following to the options section in named.conf:
Options \{ recursion no; \};
Note that with BIND, you can use an allowrecursion ACL to permit recursion only from trusted IP addresses. Although this might be the only possible solution in some configurations, the best protection is to prevent all recursion on public DNS servers.
Limit Zone Transfers
A surprisingly common DNS server mistake
is allowing all hosts to perform zone transfers
and allowing all records for a zone to
be returned. Zone transfers let DNS servers
share information, but you should be careful
to limit which hosts can request them. If you
don’t normally allow servers to update each other, you can completely disable
zone transfers.
To limit zone transfers with Microsoft DNS, open the DNS Management Console, rightclick the domain you want to configure, click Properties, then access the Zone Transfers tab. If you want to enable zone transfers, be sure to allow only servers listed on the Name Servers tab or use specific IP addresses. Never allow zone transfers to all servers.
With BIND, you control this setting in named.conf. You can make the setting in either the global options section or individual zone sections. Keep in mind that settings in a zone section override that zone’s global options, so the best way to manage zone transfers is to prevent them globally, then configure individual zones to allow zone-transfer requests only from certain IP addresses. To do so, add to named.conf as follows:
Options \{ recursion no; fetch-glue no; allow-transfer \{ none; \}; \};
zone "example.com" in\{ ... allow-transfer ( 192.168.0.15; ); \};
Reduce Exposure
To prevent abuse, it’s important to limit all
network services to specific ports and IP
addresses. You should always use a packet
filter, such as a firewall or router, to limit
access to your DNS servers, and you should
configure limitations on the servers themselves.
To configure Microsoft DNS to listen
only on specific IP addresses, you can open
the DNS Management Console, right-click
the computer name, select Properties, and
select the Interfaces tab. You can then enter
specific IP addresses you want to listen on, as Figure 2 shows.
With BIND, you can set the listening IP address as a global option or a zone option in named.conf as follows:
Options \{ recursion no; fetch-glue no; allow-transfer \{ none; \}; listen-on \{192.168.0.8; \}; \};
With Microsoft DNS, it’s possible to manage a remote DNS server using the remote procedure call (RPC) protocol. If you don’t use this feature, you should disable RPC to reduce your attack surface. To do so, you must edit the server’s registry. Using Regedit, locate HKEY_LOCAL_MACHINE\SYSTEM CurrentControlSet\Services\DNS\Parameters, and create a DWORD value named RpcProtocol. Set this value to 0, and restart the DNS server for the setting to take effect.
You Can Do More
At this point, your DNS server won’t allow
recursive DNS requests from others, won’t
attempt to answer queries outside its zones,
will permit zone transfers only to trusted
hosts, and will listen only on the IP addresses
you specified. If it contains only public DNS
records, the server is now secure enough to be
a public DNS advertiser. With prudent firewall
configuration, careful patch management,
and other security best practices in place, you
can be confident that your DNS server isn’t a
threat to your network or others.
However, you can do more. Using IPsec between trusted hosts and implementing the DNS Security Extensions (DNSSEC) and Transaction Signature extensions can further increase the integrity and confidentiality of your DNS traffic. Careful server hardening will prevent other types of attacks on your DNS server. Finally, a good networkmonitoring system can warn you of impending attacks.