Zuletzt geändert: Sa, 29.01.2005

«11C» DNS.latexs «PDF», «POD»



Download
\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}