\documentclass[12pt]{beamer} \usepackage{amsmath} \usepackage{url} \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage[ngerman]{babel} % Manual syntax highlighting \newcommand{\synfunc} [1]{\color{blue!50!black}#1\color{black}} \newcommand{\synstr} [1]{\color{red!50!black}#1\color{black}} \newcommand{\synvar} [1]{\color{purple!50!black}#1\color{black}} \newcommand{\synclass} [1]{\color{green!50!black}#1\color{black}} \newcommand{\syncomment}[1]{\color{blue!20!black}#1\color{black}} \newcommand{\syncool} [1]{\color{beamer@blendedblue}#1\color{black}} \newcommand{\synoder} {\ \ \color{black}$\vee$\ \ } \newcommand{\hr} {\rule[4pt]{\textwidth}{0.1pt}\\} \title{File Transfer Protocol} \author{Ingo Blechschmidt \\\texttt{<iblech@web.de>}} \institute{LUGA} \date{25. Januar 2006} \usetheme{Warsaw} \usecolortheme{seahorse} %\usepackage{bookman} \setbeamercovered{transparent} \begin{document} \frame{\titlepage} \frame[t]{ \frametitle{Inhalt} \tableofcontents } % * Design % * Anwendungen % * Typischer Ablauf % * Server-zu-Server-Kommunikation % * Spoofing mit FTP % * Alternativen \section{Design} \subsection{Geschichte} \frame[t]{\frametitle{Geschichte} \begin{itemize} \item Erste Definition in RFC 114 (April 1971) \item Hervorhebung des Unterschieds zwischen "`direkter"' und "`indirekter Nutzung"' durch den RFC: \vspace*{-1em} \begin{tabbing} Indirekte Nutzung: \= \kill Direkte Nutzung: \> Einloggen via Telnet o.\,Ä. \\ Indirekte Nutzung: \> Abstraktion durch ein Protokoll \end{tabbing} \pause \item Probleme bei direkter Nutzung \\ ("`wie listet man unter \texttt{\$OS} nochmal Dateien auf?"') \item FTP als Möglichkeit indirekter Nutzung; \\ große Vereinfachung \item Kontinuierliche Weiterentwicklung \\ (u.\,a. RFC 959 (Oktober 1985)) \end{itemize} } \subsection{Aufbau} \frame[t]{\frametitle{Aufbau} \begin{itemize} \item ASCII-Basierung (→ einfaches manuelles Testen; ähnlich wie bei POP3 oder NNTP) \item Multi-User-Fähigkeit \item Strukturierung der Dateien in Verzeichnisse \pause \item Trennung in Kontroll- und Datenkanäle: \vspace*{-1em} \begin{tabbing} Kontrollkanal: \= \kill Kontrollkanal: \> Default-TCP-Port 21; Kommandoaustausch \\ Datenkanäle: \> dynamische Portaushandlung; \\ \> nur Datenaustausch \end{tabbing} \end{itemize} } \section{Anwendungen} \subsection{Typischer Ablauf} \frame[t]{\frametitle{Typischer Ablauf} \begin{enumerate} \item Einloggen \item Holen des Dateilistings, Holen einer bestimmten Datei \item Ausloggen \end{enumerate} } \frame[t]{\frametitle{Einloggen} \texttt{% \$ \textsl{telnet FTP-Server 21}\\ Trying \textsl{a.b.c.d}...\\ Connected to \textsl{FTP-Server}.\\ Escape character is '\^{}]'.\\ 220 \textsl{Banner}\\ \pause \textsl{USER Benutzername}\\ 331 Password required for \textsl{Benutzername}.\\ \pause \textsl{PASS Passwort}\\ 230-\textsl{Willkommensnachricht}\\ 230-\textsl{Willkommensnachricht}\\ 230-\textsl{Willkommensnachricht}\\ 230-\textsl{Willkommensnachricht}\\ 230 User logged in.% } \pause\hfill \textsl{Live-Demo} } \frame[t]{\frametitle{Dateilisting -- passiv} \small \texttt{% \textsl{PASV}\\ 227 Entering Passive Mode (\textsl{a},\textsl{b},\textsl{c},\textsl{d},\textsl{x},\textsl{y})\\ \textsl{LIST}\\ 125 Data connection open; Transfer starting.\\ 226 Transfer complete.\\ } \pause \begin{block}{Übermittlung der Daten im \textsl{Datenkanal}} \texttt{\footnotesize% \$ \textsl{telnet \textsl{a}.\textsl{b}.\textsl{c}.\textsl{d} \$((\textsl{x}*256 + \textsl{y}))}\\ Trying \textsl{a.b.c.d}...\\ Connected to \textsl{FTP-Server}.\\ Escape character is '\^{}]'.\\ \pause drwxr-xr-x 1 \textsl{Nutzer} \textsl{Gruppe} 0 Nov 25 2002 bussys\\ drwxr-xr-x 1 \textsl{Nutzer} \textsl{Gruppe} 0 May 21 2001 deskapps\\ \textsl{[...]}\\ Connection closed by foreign host. } \pause\hfill \textsl{Live-Demo} \end{block} } \frame<1>[t,label=transfertable]{\frametitle{Übertragungsarten} \small\hspace*{-1em}\begin{tabular}{l|l} Passive Übertragung & \onslide<2->{Aktive Übertragung} \\\hline \hspace*{-1.1em}\begin{minipage}{0.55\textwidth} \begin{itemize} \item \texttt{PASV}: \\ Öffnung eines Ports auf dem FTP-Server durch den FTP-Daemon \item \texttt{LIST}, \texttt{RETR}, \texttt{STOR}: \\ Übertragung der Daten in einer TCP-Verbindung \textsl{vom} Client \textsl{zum} mitgeteilten Port des Servers \item Durchlassen der Verbindung durch die Firewall des Servers~(!) \end{itemize} \end{minipage} & \onslide<2->{\hspace*{-1.1em}\begin{minipage}{0.55\textwidth} \begin{itemize} \item \texttt{PORT \textsl{i,j,k,l,x,y}}: \\ Öffnung eines Ports auf dem Client durch den \\ FTP-Client \item \texttt{LIST}, \texttt{RETR}, \texttt{STOR}: \\ Übertragung der Daten in einer TCP-Verbindung \textsl{vom} Server \textsl{zum} mitgeteilten Port des Clients \item Durchlassen der Verbindung durch die Firewall des Clients~(!) \end{itemize} \end{minipage}} \end{tabular} } \frame[t]{\frametitle{Dateilisting -- aktiv} \small \texttt{% \textsl{PORT i,j,k,l,x,y}\\ 200 PORT command successful.\\ \textsl{LIST}\\ 150 Opening ASCII mode data connection for /bin/ls.\\ 226 Transfer complete.\\ } \pause \begin{block}{Übermittlung der Daten im \textsl{Datenkanal}} \texttt{% \$ \textsl{netcat -vlp \$((\textsl{x}*256 + \textsl{y}))}\\ Listening on [\textsl{i.j.k.l}] \textsl{[Port]} ...\\ \pause connect to [\textsl{i.j.k.l}] from (UNKNOWN) [\textsl{a.b.c.d}] 20 drwxr-xr-x 1 \textsl{Nutzer} \textsl{Gruppe} 0 Nov 25 2002 bussys\\ drwxr-xr-x 1 \textsl{Nutzer} \textsl{Gruppe} 0 May 21 2001 deskapps\\ \textsl{[...]}\\ \ sent 0, rcvd 809 } \pause\hfill \textsl{Live-Demo} \end{block} } \againframe<2>{transfertable} \frame[t]{\frametitle{Oft genutzte FTP-Befehle} \begin{description} \item[\texttt{USER}, \texttt{PASS}] Authentifizierung \item[\texttt{QUIT}] Ausloggen \vspace*{0.1em}\hrule \item[\texttt{DELE}] Löschen einer Datei \item[\texttt{RNFR}, \texttt{RNTO}] Umbennung (rename \textsl{from}, rename \textsl{to}) \item[\texttt{MKD}, \texttt{RMD}] Erzeugen, Löschen eines Verzeichnis \item[\texttt{CWD}] Verzeichniswechsel \vspace*{0.2em}\hrule \item[\texttt{PORT}] Auswählen von aktivem FTP \item[\texttt{PASV}] Auswählen von passivem FTP \vspace*{0.1em}\hrule \item[\texttt{LIST}] Verzeichnislisting \item[\texttt{RETR}] Herunterladen einer Datei \item[\texttt{STOR}] Hochladen einer Datei \end{description} } \subsection{Direkte Server-zu-Server-Übertragung} \frame[t]{\frametitle{Direkte Server-zu-Server-Übertragung} \begin{itemize} \item Wunsch: \\ Kopie einer Datei von FTP-Server \textsl{A} zum FTP-Server \textsl{B} \item Problem: \vspace*{-1.5em} \begin{tabbing} Herunterladen \= \kill Herunterladen \> von \textsl{A} auf den lokalen Rechner langsam \\ Hochladen \> auf \textsl{B} vom lokalen Rechner aus langsam \end{tabbing} \item Abhilfe: Kombination von aktivem und passivem FTP \item<3> Problem: Weigerung vieler Daemonen, beliebige Rechner zu kontakten \end{itemize} \pause \begin{block}{Vermittlung zwischen \textsl{A} und \textsl{B}} \begin{tabular}{l|l} Zu \textsl{A} & Zu \textsl{B} \\\hline \texttt{\textsl{PASV}} & \texttt{\textsl{PORT A,x,y}} \\ \texttt{227 Entering Passive} & \texttt{200 PORT command} \\ \texttt{\ \ \ \ Mode (\textsl{A},\textsl{x},\textsl{y})} & \texttt{\ \ \ \ successful.} \end{tabular} \end{block} } \subsection{FTP als Einweg-Proxy} \frame[t]{\frametitle{FTP als Einweg-Proxy -- Spoofing mit FTP} \begin{itemize} \item Wunsch: Anonymes Senden von beliebigen \\ Daten \textsl{M} an \texttt{\textsl{B}:\textsl{p}} \\ (wobei $p = 256\,x + y$ mit $x,y \in \left\{ 0,1,2,\ldots,255 \right\}$) \pause \item Realisierung durch \begin{enumerate} \item Deponieren von \textsl{M} als Datei \texttt{datei} auf liberalem FTP-Server \textsl{A} \item \texttt{PORT \textsl{B},\textsl{x},\textsl{y}} \item \texttt{RETR \textsl{datei}} \end{enumerate} \item Problem nur wieder: Weigerung vieler Daemonen, beliebige Rechner zu kontakten \end{itemize} } \section{Sicherheit} \subsection{Benutzernamen/Passwörter} \frame[t]{\frametitle{Benutzernamen/Passwörter} \begin{itemize} \item Übertragung von Benutzernamen und Passwörtern im Klartext \item Übertragung der Nutzdaten im Klartext \item Daher erfolgreiches Sniffen problemlos möglich \end{itemize} } \subsection{Separater Datenkanal} \frame[t]{\frametitle{Separater Datenkanal} \begin{itemize} \item Dynamische Portaushandlung; \\ je nach FTP-Typ Lücken in entweder der Server- (passives FTP) oder der Client-Firewall (aktives FTP) nötig \item FTP durch NAT-Router "`schwierig"' \end{itemize} } \frame[t]{\frametitle{Austricksen von Firewalls} \begin{enumerate} \item Firewall belauscht FTP-Kontrollkanal nach \texttt{PASV}-Rückmeldungen \item \texttt{aaaaaaaaa\textsl{[...]}aaa227 Entering Passive Mode (\textsl{a},\textsl{b},\textsl{c},\textsl{d},\textsl{x},\textsl{y})} \item \texttt{500 Unknown command: aaaaaaaaa\textsl{[...]}aaa227 Entering Passive Mode (\textsl{a},\textsl{b},\textsl{c},\textsl{d},\textsl{x},\textsl{y})} \item Wählen der Länge der \texttt{a}s so, dass \texttt{227 Entering\textsl{[...]}} in ein eigenes TCP-Paket fällt (Fragmentierung!) \item "`Oh, der FTP-Daemon will gleich Daten ausliefern, schnell den Weg freimachen"' \end{enumerate} } \subsection{Lücken im FTP-Daemon} \frame[t]{\frametitle{L"ucken im FTP-Daemon} \begin{itemize} \item FTP-Daemonen müssen/können/sollten können\ldots \begin{itemize} \item \ldots auf Port 21 lauschen \item \ldots den aktuellen Nutzer wechseln ("`\texttt{su}"') \item \ldots Logs führen \item \ldots FTP-spezifische Quotas beachten \end{itemize} \item Daher: Notwendigkeit des Laufens einiger Komponenten mit root-Rechten \item Bei Sicherheitslücke nicht nur Erhalt von Nutzer-Rechten, sondern root-Rechten! \end{itemize} } \frame[t]{\frametitle{Sicherer: Privilege Separation} \begin{itemize} \item Start des Daemons als root \item Öffnen des Port-21-Sockets als root \item Abarbeiten von allgemeinen Kommandos (\texttt{USER}, \texttt{PASS}) als nobody \item Nach korrekter \texttt{USER}/\texttt{PASS}-Kombination weiteres Arbeiten als \textsl{nutzer} \end{itemize} } %\subsection{Alternativen} \frame[t]{\frametitle{Alternativen} \begin{itemize} \item FTPS (FTP-SSL und FTP-TLS): \\ Absicherung von FTP mit SSL (vgl. HTTPS) \item SFTP (Subsystem von SSH) \item SCP \item HTTPS, WebDAV \item Subversion \end{itemize} } \end{document}
Download