From 45ec0c7e1bfd251e13f4d3ade89785e98df31ba9 Mon Sep 17 00:00:00 2001
From: Guillermo Ramos
Date: Mon, 27 May 2013 00:07:01 +0200
Subject: start

---
 c_seguridad/present/seguridad.tex | 280 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 280 insertions(+)
 create mode 100644 c_seguridad/present/seguridad.tex

(limited to 'c_seguridad/present/seguridad.tex')

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}
-- 
cgit v1.2.3

