2022-09-20 18:17:35 +02:00
|
|
|
\documentclass[aspectratio=169,16pt]{beamer}
|
|
|
|
|
|
|
|
\usetheme[department=FakIM,pageNumbers]{OTHR}
|
|
|
|
|
|
|
|
% document language and hyphenation
|
|
|
|
\usepackage[ngerman]{babel}
|
|
|
|
% \usepackage[utf8]{luainputenc}
|
|
|
|
% \usepackage{filecontents}
|
|
|
|
\usepackage{subfigure}
|
|
|
|
|
|
|
|
% code listings
|
|
|
|
\usepackage{listings}
|
|
|
|
\usepackage{minted}
|
|
|
|
|
|
|
|
\usepackage{enumerate}
|
|
|
|
\usepackage{calc}
|
|
|
|
|
|
|
|
\usepackage[plain]{fancyref}
|
|
|
|
|
|
|
|
% math stuff
|
|
|
|
\usepackage{amsmath}
|
|
|
|
\usepackage{amsfonts}
|
|
|
|
\usepackage{mathtools}
|
|
|
|
|
|
|
|
\usepackage{chronology}
|
|
|
|
|
|
|
|
\usepackage[backend=biber,style=alphabetic]{biblatex}
|
|
|
|
\addbibresource{bibliography.bib}
|
|
|
|
% \bibliographystyle{amsalpha}
|
|
|
|
|
|
|
|
% acronyms
|
|
|
|
\usepackage{acro}
|
2022-09-20 18:47:25 +02:00
|
|
|
% \acsetup{single,make-links=true}
|
|
|
|
\acsetup{make-links=true}
|
2022-09-20 18:17:35 +02:00
|
|
|
\input{acronyms}
|
|
|
|
|
|
|
|
% custom commands
|
|
|
|
\input{commands}
|
|
|
|
|
|
|
|
\graphicspath{{assets/}}
|
|
|
|
|
|
|
|
\useDepartmentLogo
|
|
|
|
|
|
|
|
\AtBeginSubsection[]
|
|
|
|
{%
|
|
|
|
\begin{frame}
|
|
|
|
\frametitle{Inhalt}
|
|
|
|
\tableofcontents[
|
|
|
|
currentsection,
|
|
|
|
hideothersubsections,
|
|
|
|
sectionstyle=show/hide,
|
|
|
|
subsectionstyle=show/shaded/hide,
|
|
|
|
]
|
|
|
|
\end{frame}
|
|
|
|
\addtocounter{framenumber}{-1}% If you don't want them to affect the slide number
|
|
|
|
}
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\newcommand{\genemail}[1]{\href{mailto:#1}{\textless\nolinkurl{#1}\textgreater}}
|
|
|
|
\title{Buffer Overflows}
|
|
|
|
\author[Valentin~Brandl]{Valentin Brandl~\genemail{mail@vbrandl.net}}
|
|
|
|
\institute{Fakultät Informatik und Mathematik}
|
|
|
|
\date{\today}
|
|
|
|
|
|
|
|
% Angepasstes Titelformat definieren (verwendet bewusst nicht die
|
|
|
|
% Beamer-Infrastruktur, um einfache Anpassungen zu zeigen)
|
|
|
|
\newcommand{\fillme}{\vskip0pt plus 1filll}
|
|
|
|
\newenvironment{references}{\begin{tiny}\begin{flushleft}}%
|
|
|
|
{\end{flushleft}\end{tiny}\vspace*{\fill}}
|
|
|
|
\defbeamertemplate*{title page}{customized}[1][]
|
|
|
|
{
|
|
|
|
\vspace*{1em}\usebeamerfont{title}\textbf{\inserttitle}\bigskip\par
|
|
|
|
|
|
|
|
\begin{scriptsize}
|
|
|
|
\insertauthor\bigskip\par
|
|
|
|
\textit{\insertinstitute}\\\insertdate
|
|
|
|
\end{scriptsize}
|
|
|
|
|
|
|
|
% \fillme\begin{references}
|
|
|
|
% \(^{1}\){\color{gray}{GPG/PGP-ID \href{http://pgp.mit.edu/pks/lookup?op=vindex&search=0xD22BCBB9E835336F}{E835336F},
|
|
|
|
% Fingerprint: A62E FFFC 4029 7339 357B D04D D22B CBB9 E835 336F.}}\\
|
|
|
|
% \(^{2}\){\color{gray}{GPG/PGP-ID \href{http://keys.gnupg.net/pks/lookup?op=get&search=0xF16F252398356E1E}{98356E1E},
|
|
|
|
% Fingerprint: 5920 9407 AB5C 8B28 3C7B 4F02 F16F 2523 9835 6E1E.}}
|
|
|
|
% \end{references}
|
|
|
|
}
|
|
|
|
|
|
|
|
\maketitle
|
|
|
|
|
|
|
|
\frame{%
|
|
|
|
\frametitle{Inhalt}
|
|
|
|
\tableofcontents[
|
|
|
|
sectionstyle=show/show,
|
|
|
|
subsectionstyle=hide/hide,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
\section{Problem}
|
|
|
|
\begin{frame}
|
|
|
|
\frametitle{Problem}
|
|
|
|
\begin{itemize}
|
2022-09-28 19:22:56 +02:00
|
|
|
\item Maschinennahe Programmiersprachen ohne Memorysafety (z.B. C, C++, Assembly, FORTRAN) erlauben es, Speicher beliebig zu beschreiben (\mintinline{c}{arr[i] == arr + sizeof(int) * i})
|
2022-09-20 18:17:35 +02:00
|
|
|
|
|
|
|
\item Bei fehlender Validierung kann ein Programm mehr Speicher schreiben, als eigentlich reserviert wurde und dabei andere Daten im RAM überschreiben
|
|
|
|
|
|
|
|
\item Entsprechend präparierter Input kann dazu führen, dass ein Angreifer den Ablauf der Programmausführung übernehmen kann
|
|
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\section{Beispiel}
|
|
|
|
\begin{frame}
|
2022-09-28 19:22:56 +02:00
|
|
|
\inputminted[firstline=4,lastline=13]{c}{assets/logic/logic.c}
|
2022-09-21 17:54:15 +02:00
|
|
|
\end{frame}
|
|
|
|
|
2022-09-28 19:22:56 +02:00
|
|
|
% \begin{frame}
|
|
|
|
% \inputminted[firstline=3,lastline=7]{c}{assets/vuln.c}
|
|
|
|
% \end{frame}
|
2022-09-20 18:17:35 +02:00
|
|
|
|
|
|
|
\section{Stack Layout, Execution Flow}
|
|
|
|
\begin{frame}
|
2022-09-20 18:47:25 +02:00
|
|
|
\frametitle{Stack Layout}
|
2022-09-21 17:54:15 +02:00
|
|
|
\includegraphics[width=.30\textwidth]{stack.png}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
\frametitle{Stack Layout}
|
|
|
|
\includegraphics[width=.60\textwidth]{stack_overflow.png}
|
2022-09-20 18:47:25 +02:00
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
\frametitle{Execution Flow}
|
2022-09-21 17:54:15 +02:00
|
|
|
\begin{itemize}
|
|
|
|
\item Beim Aufruf einer Funktion, aktuelle Adresse auf Stack
|
|
|
|
\item \emph{\Ac{ip}} auf Adresse der aufgerufenen Funktion
|
|
|
|
\item Bei \mintinline{c}{return}, Stack Frame wiederherstellen, Adresse von Stack in \emph{\Ac{ip}}
|
|
|
|
\item Was wenn die Adresse auf dem Stack überschrieben wurde?
|
|
|
|
\end{itemize}
|
2022-09-20 18:17:35 +02:00
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\section{Exkurs: Shellcode}
|
|
|
|
\begin{frame}
|
2022-09-20 18:47:25 +02:00
|
|
|
\begin{itemize}
|
|
|
|
\item Shellcode ist der Maschinencode, der nach Übernahme des Ausführungsablauf ausgeführt werden soll
|
|
|
|
\item Buffer kann klein sein \(\Rightarrow\) Shellcode häufig auf Größe optimiert
|
|
|
|
\item Häufig Strings als Eingabe
|
|
|
|
\item In C terminiert mit \mintinline{c}{\0} \(\Rightarrow\) Payload darf kein \mintinline{c}{0x00} enthalten, da alles danach abgeschnitten wird
|
|
|
|
\item \(\Rightarrow\) Selbst schreiben ist möglich, aber aufwändig und setzt Kenntnisse in Assembly und der anzugreifenden Architektur/OS/... voraus
|
|
|
|
\item Verfügbare, öffentliche Sammlungen verwenden:
|
|
|
|
\begin{itemize}
|
|
|
|
\item \url{https://shell-storm.org/shellcode/}
|
|
|
|
\item \url{https://www.exploit-db.com/shellcodes}
|
|
|
|
\end{itemize}
|
|
|
|
\end{itemize}
|
2022-09-20 18:17:35 +02:00
|
|
|
% \frametitle{Exkurs: Shellcode}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\section{Exploitation}
|
|
|
|
\begin{frame}
|
2022-09-28 19:22:56 +02:00
|
|
|
\frametitle{Code Execution}
|
2022-09-20 18:47:25 +02:00
|
|
|
\begin{itemize}
|
|
|
|
\item Shellcode im Speicher plazieren
|
|
|
|
\item Buffer überschreiben
|
2022-09-21 17:54:15 +02:00
|
|
|
\item \emph{\Ac{ip}} überschreiben
|
|
|
|
\item \emph{\Ac{ip}} auf Shellcode zeigen lassen
|
2022-09-20 18:47:25 +02:00
|
|
|
\end{itemize}
|
2022-09-20 18:17:35 +02:00
|
|
|
\end{frame}
|
|
|
|
|
2022-09-21 20:43:13 +02:00
|
|
|
\section{Aktuelles Beispiel}
|
|
|
|
\begin{frame}
|
|
|
|
\frametitle{Beispiel in freier Wildbahn}
|
|
|
|
\begin{itemize}
|
2022-09-28 19:22:56 +02:00
|
|
|
\item TODO:
|
2022-09-21 20:43:13 +02:00
|
|
|
\end{itemize}
|
|
|
|
\end{frame}
|
|
|
|
|
2022-09-20 18:17:35 +02:00
|
|
|
\section{Aktuelle Situation}
|
|
|
|
\begin{frame}
|
2022-09-20 18:47:25 +02:00
|
|
|
\frametitle{Migrationen}
|
|
|
|
\begin{itemize}
|
|
|
|
\item \Ac{aslr}
|
|
|
|
\item \emph{w\^{}x} Memory
|
|
|
|
\item Runtime Bounds Checks
|
|
|
|
\item Typesystem basierte Lösungen~\cite{Dep2007}
|
|
|
|
\end{itemize}
|
2022-09-20 18:17:35 +02:00
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
|
|
|
|
\appendix
|
|
|
|
% \nocite{*}
|
|
|
|
\section*{Quellen}
|
|
|
|
% \begin{frame}[allowframebreaks,nosection]
|
|
|
|
\begin{frame}[noframenumbering,plain,allowframebreaks]
|
|
|
|
\frametitle{Quellen}
|
|
|
|
|
|
|
|
\printbibliography[heading=none]{}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\end{document}
|
2022-09-20 18:47:25 +02:00
|
|
|
% vim: set filetype=tex ts=2 sw=2 tw=0 et spell :
|