diff options
Diffstat (limited to 'c_seguridad/present/seguridad.tex')
-rw-r--r-- | c_seguridad/present/seguridad.tex | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/c_seguridad/present/seguridad.tex b/c_seguridad/present/seguridad.tex new file mode 100644 index 0000000..1a422fa --- /dev/null +++ b/c_seguridad/present/seguridad.tex @@ -0,0 +1,280 @@ +% vim : tabstop 4 +%%%%%%%%%%%%%%%%%%%% +% seguridad.tex - Transparencias de la sección de Seguridad del Curso de C +% Guillermo Ramos Gutiérrez <wille@acm.asoc.fi.upm.es> +%%%%%%%%%%%%%%%%%%%%% + +\documentclass{beamer} + +\mode<presentation> +{ + \usetheme{ACM} + \setbeamercovered{transparent} +} + +\usepackage[spanish]{babel} +\usepackage[utf8]{inputenc} +\usepackage{times} +\usepackage{color} + +\title[Curso de C: Seguridad] +{Curso de C: Seguridad} + +\author[Guillermo Ramos] +{ +Guillermo Ramos \\ +\texttt{wille@acm.asoc.fi.upm.es} +} + +\institute[ACM FI - UPM] +{ +ACM Facultad de Informática \\ +Universidad Politécnica de Madrid +} + +\date{24 de marzo de 2011} + +\pgfdeclareimage[height=0.7cm]{acm-logo}{acm} +\logo{\pgfuseimage{acm-logo}} + +\AtBeginSection[] +{ + \begin{frame}<beamer> + \frametitle{Contenido} + \tableofcontents[currentsection] + \end{frame} +} + +\begin{document} + + \begin{frame} + \titlepage + \end{frame} + + \begin{frame}{Contenido} + \tableofcontents + \end{frame} + + \section{¿De qué va todo esto?} + \begin{frame}{} + \begin{center} + \textbf{\huge 01010000} + \end{center} + \end{frame} + + \begin{frame}{} + \begin{center} + \textbf{\huge 01010001} \\ + \vspace{1cm} + \uncover<1>{¿0x50?} \\ + \uncover<2>{¿push eax?} \\ + \uncover<3>{¿true?} + \end{center} + \end{frame} + + \begin{frame}{} + \begin{center} + \textbf{\huge 01010000} \\ + \vspace{1cm} + $\surd$ 0x50 \\ + $\surd$ push eax \\ + $\surd$ true + \end{center} + \end{frame} + + \begin{frame}{} + \begin{center} + \includegraphics[width=3cm]{img/dudewtf.png} + \end{center} + \end{frame} + + \begin{frame}{En resumen} + \begin{itemize} + \item Problema: \textbf{distinguir datos de código} + \item La información no tiene más significado que el que le da un proceso. + \item Esto se suele aprovechar para controlar los fallos de software y modificar el flujo de ejecución. + \end{itemize} + \end{frame} + + + \section{Memoria} + \subsection{Memoria Virtual} + \begin{frame}{Memoria Virtual} + \begin{center} + \includegraphics[width=6cm]{img/memoria_virtual.png} + \end{center} + \end{frame} + + \subsection{Organización de memoria} + \begin{frame}{Organización de memoria} + \begin{center} + \includegraphics[width=6cm]{img/memory_org.png} + \end{center} + \end{frame} + + \begin{frame}{Ejemplo} + \begin{center} + \begin{block}{ejemplounopuntocé.c} + char global; \\ + float pi = 3.14; \\[3mm] + int main() \{ \\ + \hspace{1cm}int local; \\ + \hspace{1cm}char* buffer = (char*)malloc(20); \\ + \hspace{1cm}return 0; \\ + \} + \end{block} + \end{center} + \end{frame} + + \begin{frame}{Ejemplo} + \begin{center} + \begin{block}{ejemplounopuntocé.c} + char global; \textcolor{red}{// bss} \\ + float pi = 3.14; \textcolor{red}{// data} \\[3mm] + int main() \{ \textcolor{red}{// code} \\ + \hspace{1cm}int local; \textcolor{red}{// stack} \\ + \hspace{1cm}char* buffer = (char*)malloc(20); \textcolor{red}{// heap (*buffer)} \\ + \hspace{1cm}return 0; \\ + \} + \end{block} + \end{center} + \end{frame} + + \subsection{La pila} + \begin{frame}{La pila} + Guarda el estado de las funciones en \textbf{marcos de pila} \\ + Cada marco de pila almacena: + \begin{itemize} + \item Parámetros + \item Variables locales + \item Dirección de retorno de la función + \end{itemize} + \end{frame} + + \begin{frame}{El marco de pila} + \begin{center} + \includegraphics[width=6cm]{img/stack_frame_struct.png} + \end{center} + \end{frame} + + \begin{frame}{La pila} + \begin{center} + \includegraphics[width=6cm]{img/stack_call_struct.png} + \end{center} + \end{frame} + + \begin{frame}{Ejemplos} + \begin{center} + \includegraphics[width=6cm]{img/showmethecode.png} + \end{center} + \end{frame} + + + \section{Buffer Overflows} + \begin{frame}{Introducción} + \begin{center} + \textit{At first I was like...} \\[3mm] + \includegraphics[width=8cm]{img/bof1.png} + \end{center} + \end{frame} + + \begin{frame}{Introducción} + \begin{center} + \textit{... but then I was like...} \\[3mm] + \includegraphics[width=7cm]{img/nuclear_explosion.png} + \end{center} + \end{frame} + + \begin{frame}{Introducción} + \begin{center} + Un buffer overflow ocurre cuando no se controla la cantidad de datos que se pueden + copiar en un buffer y se sigue escribiendo tras haberlo rellenado, provocando + la sobreescritura de la memoria adyacente a él. \\[3mm] + \includegraphics[width=6cm]{img/bof2.png} + \end{center} + \end{frame} + + \begin{frame}{Introducción} + \begin{center} + \includegraphics[width=8cm]{img/stack_overflow_1.png} + \end{center} + \end{frame} + + \begin{frame}{Introducción} + \begin{center} + \includegraphics[width=8cm]{img/stack_overflow_2.png} + \end{center} + \end{frame} + + \begin{frame}{Introducción} + \begin{center} + \includegraphics[width=8cm]{img/stack_overflow.png} + \end{center} + \end{frame} + + \begin{frame}{Ejemplos} + \begin{center} + \includegraphics[width=6cm]{img/showmethecode.png} + \end{center} + \end{frame} + + + \section{Format Strings} + \begin{frame}{Introducción} + \begin{center} + \begin{block}{ejemplodospuntocé.c} + int main(int argc, char** argv) \{ \\ + \hspace{1cm}if (argc $>$ 1) \\ + \hspace{2cm}printf(argv[1]); \\ + \hspace{1cm}return 0; \\ + \} + \end{block} + \begin{block}{ejemplotrespuntocé.c} + int main(int argc, char** argv) \{ \\ + \hspace{1cm}if (argc $>$ 1) \\ + \hspace{2cm}printf("\%s", argv[1]); \\ + \hspace{1cm}return 0; \\ + \} + \end{block} + \end{center} + \end{frame} + + \begin{frame}{\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x\%x} + \begin{center} + Un ataque de format strings es una inyección de caracteres que hace que printf() o cualquier + derivado interprete que debe insertar parámetros en la salida. Al no haberlos, usa memoria + de la pila. + \end{center} + \end{frame} + + \begin{frame}{Ejemplos} + \begin{center} + \includegraphics[width=6cm]{img/showmethecode.png} + \end{center} + \end{frame} + + + \section{} + \begin{frame}{} + \begin{center} + ¿Dudas, preguntas? \\ + \includegraphics[width=5cm]{img/dudas.jpg} + \end{center} + \end{frame} + + \begin{frame}{} + \textbf{Bibliografía recomendada:} + \begin{thebibliography}{99} + \bibitem{} \htmladdnormallink{Erickson, J. (2008). \textit{The Art of Exploitation, 2nd Edition}}{http://www.amazon.com/Hacking-Art-Exploitation-Jon-Erickson/dp/1593271441/} + \bibitem{} \htmladdnormallink{Anley, C., Heasman, J., Lindner, F., Richarte, G. (2007). \textit{The Shellcoder's + Handbook: Discovering and Exploiting Security Holes}}{http://www.amazon.com/Shellcoders-Handbook-Discovering-Exploiting-Security/dp/047008023X/} + \end{thebibliography} + \end{frame} + + \begin{frame}{} + \begin{center} + \textbf{¡Gracias por venir!} + \end{center} + \end{frame} + +\end{document} |