\documentclass[pdf,colorBG,slideColor,nototal,noFooter,nodraft,final,luga]{prosper}
\usepackage{amsmath}
\usepackage{url}
\usepackage{ucs}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{pstricks,pst-node}
\title{\darkblue{}Domain Name System}
\author{Vortrag von Ingo Blechschmidt\\\small am 5. Januar 2005}
\Logo{\colC\usefont{T1}{phv}{m}{n}\fontsize{10pt}{10pt}\selectfont\mygray{}DNS und Sicherheit}
\begin{document}
\maketitle
\begin{slide}{Gliederung}
\begin{itemize}
\item Geschichte
\item Design
\item Lookup- und Record-Typen
\item Zonentransfer
\item Cache Poisoning
\item Cache Snooping
\item Speicherung beliebiger Daten im DNS
\end{itemize}
\end{slide}
\overlays{3}{
\begin{slide}{Geschichte}
\begin{itemize}
\onlySlide*{1}{
\item Problem: \\
Zuordnung IPs $\leftrightarrow$ symbolische Namen
\item Lösung: \\
Speicherung aller Zuordnungen in \texttt{hosts}-Dateien: \\
\texttt{%
\$ \textbf{cat /etc/hosts}\\
216.239.59.104\ \ google.de\\
213.239.211.178\ pro-linux.de\\
\ldots
}
}
\onlySlide*{2}{
\item Problem: \\
Bei jeder Aktualisierung Übermittlung an \textbf{jeden} Teilnehmer
erforderlich
\item Lösung: \\
Verwendung eines zentralen Hostname-Servers (RFC 811, 1982): \\
\texttt{\small%
\$ \textbf{telnet zentraler-server 101}\\
\textbf{HNAME google.de}\\
HOST : 216.239.59.104 : google.de\\
\ \ \ \ : CLUSTER : LINUX : TCP :
}
}
\onlySlide*{3}{
\item Problem: \\
Ausfall des zentralen Servers $\Rightarrow$ \\
Zusammenbruch der Namensauflösung
\item Endgültige Lösung: \\
Verwendung des Domain Name Systems
}
\end{itemize}
\end{slide}
}
\overlays{3}{
\begin{slide}{Design}
\onlySlide*{1}{
\hspace*{-8mm}
\includegraphics[scale=0.70]{dns-hier.ps}
}
\FromSlide{2}
\begin{itemize}
\item Ausfall von \texttt{.} $\Rightarrow$ \\
Zusammenbruch der Namensauflösung \\
Daher: Verteilung von \texttt{.} auf 13 Server
\item Schlimmer noch: \\
Eigentümer von \texttt{.}: USA
\FromSlide{3}
$\Rightarrow$ \\
% "`Ups, sorry, eigentlich wollten wir \texttt{af.} gar nicht
% löschen, aber jetzt ist es schon zu spät, na ja, macht nix..."' \\
Zum Glück: Verwendung alternativer Nameserver für \texttt{.}, \\
z.B. Open Root Name Server Network
\end{itemize}
\end{slide}
}
\overlays{4}{
\begin{slide}{Lookup-Typen}
\begin{itemize}
\item Iterativ ("`Durchhangeln"') \untilSlide*{3}{: \\
\begin{itemize}\footnotesize
\item "`Hey \texttt{.}, was ist die IP von
\texttt{www.pro-linux.de.}?"' -- \\
"`Ka, aber die IP des Nameservers von \texttt{de.} ist
\texttt{193.0.7.3}, frag' den."'
\FromSlide{2}
\item "`Hey \texttt{de.}, was ist die IP von
\texttt{www.pro-linux.de.}?"' -- \\
"`Ka, aber die IP des Nameservers von \texttt{pro-linux.de.}
ist \texttt{195.20.224.97}, frag' den."'
\FromSlide{3}
\item "`Hey \texttt{pro-linux.de.}, was ist die IP von
\texttt{www.pro-linux.de.}?"' -- \\
"`Klar, die kenne ich, ich bin autoritativ für
\texttt{pro-linux.de.}, die IP ist
\texttt{213.239.211.178}."'
\end{itemize}}
\FromSlide{4}
\item Rekursiv: \\
Durchführung eines iterativen Lookups durch den angefragten
rekursiven Nameserver und nur Übermittlung des End-Ergebnisses an
den Client zurück --\\
"`Hey, was ist die IP von \texttt{www.pro-linux.de.}, und sag' mir
nicht, ich soll wo anders nachschauen!"'
\end{itemize}
\end{slide}
}
\overlays{3}{
\begin{slide}{Record-Typen}
\begin{itemize}
\item A: IP eines Hosts
\onlySlide*{1}{
\texttt{\footnotesize\\
\$ \textbf{dig www.pro-linux.de. A}\\
www.pro-linux.de. 8538 IN A 213.239.211.178
}
}
\item NS: Nameserver einer Zone
\onlySlide*{2}{
\texttt{\footnotesize\\
\$ \textbf{dig pro-linux.de. NS}\\
pro-linux.de. 8534 IN NS www.freesystems.de.\\
pro-linux.de. 8534 IN NS ns.schlund.de.
}
}
\item CNAME: "`Symlink"' zu einem anderen Host
\item MX: Mailserver einer Zone
\onlySlide*{3}{
\texttt{\footnotesize\\
\$ \textbf{dig pro-linux.de. NS}\\
pro-linux.de. 8431 IN MX 10 www.pro-linux.de.
}
}
\item Zusätzlich: \\
ANY-Lookup $\Rightarrow$ Rückgabe aller Einträge
\end{itemize}
\end{slide}
}
\overlays{5}{
\begin{slide}{PTR-Record}
\begin{itemize}
\item Problem: \\
Zuordnung IP $\rightarrow$ Name
\item Lösung: Pointer-Records \\
\onlySlide*{2}{\texttt{213.239.211.178}}
\onlySlide*{3}{\texttt{178.211.239.213}}
\onlySlide*{4}{\texttt{178.211.239.213.in-addr.arpa.}}
\onlySlide*{5}{\texttt{\footnotesize%
\$ \textbf{dig 178.211.239.213.in-addr.arpa. PTR}\\
178.211.239.213.in-addr.arpa. 86290 IN \textbackslash\\
\ \ \ \ PTR www.pro-linux.de.
}}
\end{itemize}
\end{slide}
}
\overlays{8}{
\begin{slide}{SOA-Record}
\begin{itemize}
\item Start of Authority-Record: \\
Informationen über die gesamte Zone
\item \texttt{\small%
\$ \textbf{dig pro-linux.de. SOA}\\
pro-linux.de. 82717 IN SOA \textbackslash\\
\ \ \ \ \rnode{soa-primary-1}{www.pro-linux.de.} \textbackslash\\
\ \ \ \ \rnode{soa-contact-1}{postmaster.www.pro-linux.de.} \textbackslash\\
\ \ \ \ \rnode{soa-num-1}{2004112201} \rnode{soa-refresh-1}{10800} \rnode{soa-retry-1}{1800} \rnode{soa-expire-1}{3600000} \rnode{soa-negttl-1}{259200}
}
\FromSlide{2}
\item \rnode{soa-primary-2}{Primary der Zone,}
\FromSlide{3}%
\rnode{soa-contact-2}{Kontaktadresse,}
\FromSlide{4}%
\rnode{soa-num-2}{Seriennummer,}
\FromSlide{5}%
\rnode{soa-refresh-2}{Slave-Refresh,}
\FromSlide{6}%
\rnode{soa-retry-2}{Retry-Interval,}
\FromSlide{7}%
\rnode{soa-expire-2}{Expire-Timeout,}
\FromSlide{8}%
\rnode{soa-negttl-2}{TTL für NXDOMAINs }
\onlySlide*{2}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=3]{<-}{soa-primary-1}{soa-primary-2}}
\onlySlide*{3}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=3]{<-}{soa-contact-1}{soa-contact-2}}
\onlySlide*{4}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=3]{<-}{soa-num-1}{soa-num-2}}
\onlySlide*{5}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=3]{<-}{soa-refresh-1}{soa-refresh-2}}
\onlySlide*{6}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=1]{<-}{soa-retry-1}{soa-retry-2}}
\onlySlide*{7}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=2]{<-}{soa-expire-1}{soa-expire-2}}
\onlySlide*{8}{\nccurve[linecolor=darkblue,linewidth=1pt,ncurv=2]{<-}{soa-negttl-1}{soa-negttl-2}}
\end{itemize}
\end{slide}
}
\begin{slide}{Zonentransfer}
\begin{itemize}
\item Mehrere Nameserver für eine Zone $\Rightarrow$ Redundanz
\item Abgleich der Secondaries mit dem Primary durch Zonentransfer
\item \texttt{\$ \textbf{dig @zwinger.wikipedia.org \textbackslash{}\\\ \ \ \ wikipedia.org AXFR}}
\item U.U. Sicherheitsproblem
\item Standardkonfiguration von BIND: Zonentransfers von jedem Host aus
erlaubt (!)
\end{itemize}
\end{slide}
\begin{slide}{Caching Nameserver}
\begin{itemize}
\item Erster Zugriff auf \texttt{pro-linux.de.}
\item Rekursiver Lookup von \texttt{pro-linux.de.} durch den
Caching Nameserver des ISPs
\item Caching der \texttt{pro-linux.de.}-Records auf dem Nameserver
\item Behalt der Records im Cache bis zum Ablauf der TTL
\end{itemize}
\end{slide}
\overlays{3}{
\begin{slide}{Cache Poisoning}
\begin{itemize}
\FromSlide{1}
\item Annahme: \\
\texttt{\small%
\$ \textbf{dig @ns1.google.com. google.com.}\\
google.com.\ \ \ 300 IN A 216.239.57.99\\
google.com.\ \ \ 300 IN A 216.239.39.99\\
google.com.\ \ \ 300 IN A 216.239.37.99\\
pro-linux.de. 300 IN A 13.37.42.23
}
\FromSlide{2}
\item \texttt{\small\$ \textbf{dig @cache google.com. >/dev/null}}
\FromSlide{3}
\item \texttt{\small%
\$ \textbf{dig @cache pro-linux.de.}\\
pro-linux.de. 300 IN A 13.37.42.23
}\\
-- Oops!
\end{itemize}
\end{slide}
}
\begin{slide}{Cache Snooping}
\begin{itemize}
\item Möglichkeit, nicht-rekursiven Lookup zu erzwingen $\Rightarrow$
\item "`Ist ein bestimmter Record bereits im Cache?"'\\
\texttt{\small\$ \textbf{dig @ns www.pro-linux.de. +norecursive}}
\item Viele Fehlkonfigurationen $\Rightarrow$ \\
Freier nicht-rekursiver Zugriff auf viele Caching Nameserver
\end{itemize}
\end{slide}
\overlays{3}{
\begin{slide}{Cache Snooping: Beispiele}
\begin{itemize}
\untilSlide*{2}{
\item "`Wurde in der letzten Zeit von einem bestimmten Provider aus auf
eine Domain zugegriffen?"' \\
\onlySlide*{1}{\texttt{\small
\$ \textbf{dig @ns-des-isps host +norecursive}
}}
\item "`Schreibt eine bestimmte Firma einer anderen Mails?"' \\
\onlySlide*{2}{\texttt{\small
\$ \textbf{dig @ns-des-mailservers \textbackslash{}\\\ \ \ \ mx.andere-firma.de. +norecursive}
}}
}
\item "`Wo wohnt eine bestimmte Person?"' \\
\onlySlide*{3}{
\begin{itemize}
\item "`Hey, geh' doch mal auf \texttt{gibt-es-nicht.de.}!"' --
\item "`Kommt nur Fehler..."' --
\item "`Ach, egal"'
\item Nicht-rekursiver Lookup-Request von
\texttt{gibt-es-nicht.de.} an viele Nameserver
$\Rightarrow$ \\
NXDOMAIN-Antwort im Cache? $\Rightarrow$ \\
ISP der Person gefunden
\end{itemize}
}
\end{itemize}
\end{slide}
}
\overlays{2}{
\begin{slide}{DNS als Speicher}
\hbox{\small$
\left.
\begin{array}{l}
\text{1. Nicht-rekursiver} \\
\text{2. Rekursiver} \\
\text{3. Nicht-rekursiver}
\end{array}
\right\}
\begin{array}{l}
\text{Lookup auf nicht} \\
\text{existente Domain}
\end{array}
\Rightarrow
\left\{
\begin{array}{ll}
\text{NOERROR} & \fromSlide{2}{:= \texttt{0}} \\
\text{NXDOMAIN} & \fromSlide{2}{:= \texttt{1}} \\
\text{NXDOMAIN} & \fromSlide{2}{:= \texttt{1}}
\end{array}
\right.
$}
\FromSlide{2}\vspace*{5mm}
\begin{itemize}
\item Setzen eines Bits: \\
\texttt{\$ \textbf{dig @ns bit-addr +recursive}} \\
\item Abfragen eines Bits: \\
\texttt{\$ \textbf{dig @ns bit-addr +norecursive}} $\Rightarrow$
\begin{tabbing}
NXDOMAIN $\Rightarrow$ \= \kill
NOERROR $\Rightarrow$ \> \texttt{0} \\
NXDOMAIN $\Rightarrow$ \> \texttt{1}
\end{tabbing}
\end{itemize}
\end{slide}
}
\begin{slide}{Sicherung von Servern}
\begin{itemize}
\item Nicht-rekursiver Lookup $\Rightarrow$ \\ Ignorieren des Cache
\item Ablehnen von Zonentransfer-Requests von nicht-autorisierten Hosts
\item Gute Cache-Algorithmen
\item $\Rightarrow$ (In den meisten Fällen) nicht BIND, sondern djbdns oder
dnscache
\end{itemize}
\end{slide}
\overlays{2}{
\begin{slide}{Siehe auch}
\begin{itemize}
\small
\onlySlide*{1}{
\item Hitchhiker's Guide to the Internet \\
\url{http://linide.sf.net/theguide2/}
\item Open Root Server Network \\
\url{http://european.orsn.net/}
\item Snooping the Cache for Fun and Profit \\
\url{http://community.sidestep.pt/~luis/}\\
\texttt{\ \ \ \ }\url{DNS-Cache-Snooping/}\\
\texttt{\ \ \ \ }\url{DNS_Cache_Snooping_1.1.pdf}
}
\FromSlide{2}
\item Proof-of-Concept Data-over-DNS \\
\url{http://m19s28.vlinux.de/iblech/dnsx.tar.bz2}
\item D. J. Bernsteins djbdns \\
\url{http://cr.yp.to/djbdns.html}
\end{itemize}
\begin{center}\Large{}Fragen?\end{center}
\end{slide}
}
\end{document}
Download