\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