bof_presentation/presentation.tex
Valentin Brandl 8bb20127a9
content
2022-09-20 18:47:25 +02:00

175 lines
4.7 KiB
TeX

\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}
% \acsetup{single,make-links=true}
\acsetup{make-links=true}
\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}
\item Maschinennahe Programmiersprachen ohne Memorysafety (z.B. C, C++, Assembly, FORTRAN) erlauben es, Speicher beliebig zu beschreiben
\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}
\inputminted{c}{assets/vuln.c}
\end{frame}
\section{Stack Layout, Execution Flow}
\begin{frame}
\frametitle{Stack Layout}
\end{frame}
\begin{frame}
\frametitle{Execution Flow}
\end{frame}
\section{Exkurs: Shellcode}
\begin{frame}
\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}
% \frametitle{Exkurs: Shellcode}
\end{frame}
\section{Exploitation}
\begin{frame}
\frametitle{Ablauf}
\begin{itemize}
\item Shellcode im Speicher plazieren
\item Buffer überschreiben
\item \emph{IP} überschreiben
\item \emph{IP} auf Shellcode zeigen lassen
\end{itemize}
\end{frame}
\section{Aktuelle Situation}
\begin{frame}
\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}
\end{frame}
\appendix
% \nocite{*}
\section*{Quellen}
% \begin{frame}[allowframebreaks,nosection]
\begin{frame}[noframenumbering,plain,allowframebreaks]
\frametitle{Quellen}
\printbibliography[heading=none]{}
\end{frame}
\end{document}
% vim: set filetype=tex ts=2 sw=2 tw=0 et spell :