\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