%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^%
% Debian server security									  %
% Esta presentación ilustra un poco las técnicas usadas en el manual "debian hardening" 	  %
% disponible en la página oficial del proyecto Debian(http://debian.org)	                  %
% La idea es no incurrir en un set grande de herramientas, sino tomar un par de aplicaciones      %
% sencilla que pueden mejorar en gran medida la seguridad básica en servidores                    %
%												  %
% Copyright (C) 2008 René Mayorga <rmayorga@debian.org.sv>				          %
% Se permite la distribución, copia, y modificación, también trabajos derivados y redistribución  %
% de los mismos, todo esto bajo los términos de la licencia GNU GPL versión 2 o superior a su     %
% elección, el texto completo de la licencia esta disponible en los sistemas operativos Debian en %
% '/usr/share/common-licenses/GPL'.								  %
%_________________________________________________________________________________________________%

\documentclass[hyperref={colorlinks=true}]{beamer}
\usepackage[spanish]{babel}
\usepackage{graphics}
\parskip 10.9pt

\usetheme{CambridgeUS}
\title{Seguridad en Servidores Debian}
\author[rmayorga]{Ren\'e Mayorga \\ \texttt{rmayorga@debian.org.sv}}
\institute{Comunidad de usuarios Debian de El Salvador}


\begin{document}

\begin{frame}
	\titlepage
\end{frame}

\begin{frame}{Esquema}
	\tableofcontents
\end{frame}


\section{Introducci\'on}
\begin {frame}[fragile]
\frametitle{Seguridad}
	\centering
	?`Cu\'al es la mejor t\'ecnica de seguridad disponible?
	\pause

	?`Ideas?
	\pause
	\begin{block}{La mejor t\'ecnica de seguridad:}
		Consiste simplemente en desconectar el cable de energ\'ia, y ni a\'un as\'i 
		podemos estar 100 por ciento seguros, pues todav\'ia existen datos en nuestro
		disco que podr\'ian ser comprometidos por cualquier t\'ecnica.
	\end{block}
	\pause
	\centering
	Pero a pesar de todo, todav\'ia resulta una de las mejores t\'ecnicas para mantener seguro
	mi equipo.

	Trataremos de ver un par de ideas que pueden hacer que duerma m\'as tranquilo.
\end{frame}

\section{Planeaci\'on}
\begin{frame}[fragile]
\frametitle{Pensando antes que todo}
	\centering
	?`Cu\'al ser\'a la funci\'on principal del servidor?
	\pause

	\begin{block}{Es necesario saber que \alert{*que*} quiero hacer}
		Esto influye directamente en las aplicaciones y la manera como voy a instalar
		el servidor. Ejemplo: Para que necesito gnome o KDE en un servidor de correo ?
	\end{block}

	\pause
	\centering
	Recordemos, en el caso especifico de Debian, existe un sistema base, que contiene
	lo necesario, luego de eso, es tarea del administrador instalar lo que requiere para
	su trabajo.
	\pause
	\centering

	En otras palabras, \alert{*NO*} usemos \texttt{tasksel}
\end{frame}

\begin{frame}[fragile]
\frametitle{planeando mis Particiones}
	\centering
	?`Para qu\'e hago diferentes particiones en mi OS ?
	\pause

	\centering
	?`Ideas?
	\pause

	Con las particiones puedo manejar permisos, y hacer mi sistema mucho mas seguro
	es decir, asegurarme que despu\'es de mi instalaci\'on no se pueda instalar nuevo
	software. A menos que el administrador lo requiera.
\end{frame}

\begin{frame}[fragile]
\frametitle{?`C\'omo esta eso de la seguridad en las particiones?}
	\centering
	 a, ver, si ejecutamos \texttt{man mount}
	 Podemos ver algunas cosas interesantes, como :
	 \begin{verbatim}
              rw     Mount the file system read-write.
	      [.....]
              ro     Mount the file system read-only.
	      [....]
              exec   Permit execution of binaries.
	      [.....]
	      noexec  Do not  allow  direct  execution 
	      	      of any binaries.
	 \end{verbatim}
	 \pause

	 \centering
	 Pero, pero!, yo ya conoc\'ia desde antes esa opciones!.
\end{frame}

\begin{frame}[fragile]
\frametitle{Veamos lo de las particiones}
	\centering
	Pensemos en un esquema de particiones b\'asicas:
	\begin{figure}
		\includegraphics[width=3.1in]{serv-parti-1.eps}
		\caption{siempre / }
	\end{figure}
\end{frame}

\begin{frame}[fragile]
\frametitle{Veamos lo de las particiones}
	\centering
	\begin{figure}
		\includegraphics[width=3.1in]{serv-parti-2.eps}
		\caption{que particiones}
	\end{figure}
\end{frame}

\begin{frame}[fragile]
\frametitle{Veamos lo de las particiones}
	\centering
	\begin{figure}
		\includegraphics[width=3.1in]{serv-parti-3.eps}
		\caption{que particiones}
	\end{figure}
\end{frame}


\begin{frame}[fragile]
\frametitle{Veamos lo de las particiones}
	\centering
	\begin{figure}
		\includegraphics[width=3.1in]{serv-parti-4.eps}
		\caption{que particiones}
	\end{figure}
\end{frame}


\begin{frame}[fragile]
\frametitle{y la seguridad}
	\centering
	Pero que tiene que ver todo esto con la seguridad ?
	\pause
	\begin{figure}
		\includegraphics[width=3.1in]{parti-exp-1.eps}
		\caption{que hago con esa partici\'on}
	\end{figure}
\end{frame}


\begin{frame}[fragile]
\frametitle{y la seguridad}
	\begin{figure}
		\includegraphics[width=3.1in]{parti-exp-2.eps}
	\end{figure}
\end{frame}


\begin{frame}[fragile]
\frametitle{y la seguridad}
	\begin{figure}
		\includegraphics[width=3.1in]{parti-exp-3.eps}
	\end{figure}
\end{frame}


\begin{frame}[fragile]
\frametitle{y la seguridad}
	\begin{figure}
		\includegraphics[width=3.1in]{parti-exp-4.eps}
	\end{figure}
\end{frame}


\begin{frame}[fragile]
\frametitle{y la seguridad}
	\begin{figure}
		\includegraphics[width=3.1in]{parti-exp-5.eps}
	\end{figure}
\end{frame}

\begin{frame}[fragile]
\frametitle{Particionando para hacer mi servidor seguro}
	\centering
	Entonces, puedo tener una configuraci\'on que evite:
	\begin{itemize}
		\pause
		\item A un usuario com\'un y silvestre descargar un c\'odigo
		      (exploit) y luego de compilarlo, ejecutarlo en su home o /tmp
		   \pause
		\item un programa instalado no podr\'ia descargar ni modificar
		      bibliotecas del sistema, pues puedo mantener /usr/lib y /lib montados
		      con \alert{ro}
		    \pause
		\item no se podr\'ian agregar programas nuevos o modificar programas
		      en /bin, /sbin, /usr/bin, /usr/sbin, solo el administrador
	\end{itemize}
	\pause
	\centering
	La idea es simple, solo \alert{root} usando mount -o remount puede alterar los flags
	para ejecutar o tomar alguna acci\'on, luego volver al estado anterior para que el usuario
	no pueda tomar ventaja de alg\'un exploit para escalabilidad de permisos.
\end{frame}

\section{Selecci\'on de software}
\begin{frame}[fragile]
\frametitle{Seleccionando mi software}
	\centering
	Primero recordando \alert{*NO*} usar taskel en la instalaci\'on

	\centering
	luego, una vez instalado el OS podemos decirle a APT que no instale
	\alert{Recommends} por defecto, de esta manera nos aseguramos que el software
	instalado en el Servidor sea solo lo necesario y las dependencias correctas.
	Para esto ejecuto:
	\begin{verbatim}
		apt-config dump | grep Recom | sed 's/1/0/' > \
			/etc/apt/apt.conf.d/05userconf
	\end{verbatim}
\end{frame}

\begin{frame}[fragile]
\frametitle{Software a instalar}
	\centering
	La idea es mantener \alert{*solo*} el software necesario.
	Por defecto en Debian muchos servicios se encuentran desactivados
	y las configuraciones por defecto son \alert{b\'asicas}, por lo que es bueno
	solo instalar software necesario.
\end{frame}

\section{Asegurando los usuarios}
\begin{frame}[fragile]
\frametitle{los usuarios......}
	\centering
	El mayor problema de seguridad, la mayor amenaza potencial, y el mayor riesgo
	de botar todo mi esquema de seguridad, son sin duda alguno los propios usuarios.
	\pause

	\centering
	por tanto existen varias opciones a tomar en cuenta, primero, preguntarme:
	\pause
	\begin{itemize}
		\item Necesita un shell en el sistema?
		\pause
		\item que servicios podr\'an estar disposibles a todos los usuarios
		\pause
		\item voy a necesitar comportam\'e como un BOFH ?
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{ahora despu\'es de decidir}
	\centering
	pues el usuario podr\'a entrar, ahora a pensar como hago para que no me arruine la vida
\end{frame}

\subsection{Software para controlar amenazas locales}
\begin{frame}[fragile]
\frametitle{Pensemos que software vamos a usar}
	\centering
	\begin{block}{cracklib}
		Cracklib2 es una librer\'ia en C, su funci\'on principal
		es prevenir al usuario usar passwords sencillos.

		Existe un m\'odulo para PAM, llamado \alert{libpam-cracklib}
	\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{cracklib}
	\centering
	Una vez instalado \alert{libpam-cracklib} simplemente es necesario editar
	mi configuraci\'on de PAM.
	\begin{verbatim}
		$EDITOR /etc/pam.d/common-password
		password   required   pam_cracklib.so minlen=6 lcredit=0 \
		ucredit=-1 dcredit=-1 ocredit=0  retry=3
	\end{verbatim}
\end{frame}

\begin{frame}[fragile]
\frametitle{cracklib}
	La documentaci\'on la pueden encontrar con man 8 pam cracklib
	pero, resumiendo PAM-cracklib acepta algunas de estas opciones
	\pause

	\centering
	\begin{itemize}
		\pause
		\item retry, errores del usuario
		\pause
		\item minlen=N, n\'umero de caracteres \alert{minimos} para los passwords
		\pause
		\item dcredit=N, n\'umero de caracteres n\'umericos  requeridos
		\pause
		\item ucredit=N, letras May\'usculas
		\pause
		\item lcredit=N, letras min\'usculas 
		\pause
		\item ocredit=N, Otros caracteres
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{/etc/shadow}
	\centering
	En /etc/shadow se guarda \alert{mucha} informaci\'on referente a los usuarios
	y sus passwords, por ejemplo, la \'ultima fecha de cambio de password
	el tiempo necesario para que el password expire, etc.
	\pause
	\centering
	
	Esto es un taller ?`verdad?
	\pause
	\centering
	
	Entonces, todo a leer \texttt{man 5 shadow}
\end{frame}

\begin{frame}[fragile]
\frametitle{Grupo Wheel}
	\centering
	Wheel es un grupo com\'un en algunos UNIXs como BSD
	pero en GNU/Linux no se encuentra por defecto este famoso grupo.

	\centering
	\pause

	?`Alguien sabe que hace Wheel?
	\pause

	\centering
	B\'asicamente en un UNIX, se permite a \alert{cualquier} usuario que se encuentre
	dentro del grupo Wheel ejecutar \alert{su}.
	Si el usuario no esta en Wheel aunque tenga conocimiento del password de otro 
	usuario(incluido root) no podra hacer \alert{su}
\end{frame}

\begin{frame}[fragile]
\frametitle{Por que Wheel no existe en GNU/Linux y si en BSD}
	\centering
	\pause
	\begin{block}
		" A veces, algunos listillos intentan hacerse con el poder total sobre el
		  resto de usuarios. Por ejemplo, en 1984, un grupo de usuarios del
		  laboratorio de Inteligencia Artificial del MIT decidieron  tomar  el  poder
		  cambiando  el  password  de operador del sistema Twenex y manteniendolo
		  secreto para el resto de usuarios.  (De  todas  maneras,  hubiera  sido
		  posible  desbaratar  la  situación y devolver el control a los usuario
		  legítimos parcheando el kernel,  pero  no  sabría  como  realizar  esta
		  operación en un sistema Unix.)  "
	\end{block}
					-- Richard M. Stallman, Manual de GNU su
						(man 1 su)
\end{frame}

\begin{frame}[fragile]
\frametitle{No me interesan las experiencias juveniles de RMS, yo quiero Wheel!}
	\centering
	F\'acil, simplemente editamos \alert{/etc/pam.d/su} y quitamos el comentario
	\pause
	\begin{verbatim}
	 	auth       required   pam_wheel.so
	\end{verbatim}
	\pause
	\centering

	Despu\'es de esto, nada mas es necesario asegurarnos de agregar a los usuarios
	al grupo \alert{wheel} (si el grupo no existe, no llore, cr\'eelo!)
\end{frame}

\begin{frame}[fragile]
\frametitle{ROOT no se debe de usar}
	\centering
	Puedo restringir los dispositivos tty en los cuales root puede hacer login
	es decir, puedo dejar que root \alert{*solo*} se pueda logear en /dev/tty5.
	Esto se puede hacer usando el archivo \alert{/etc/securetty}

	\pause
	\centering
	Tambi\'en debo evitar vivir validado en el sistema como root, en Debian, existe
	el grupo \alert{adm} si yo soy el administrador del sistema puedo agregar mi usuario
	al grupo \alert{adm} de esta forma podre revisar los logs del sistema, sin necesidad
	de estar como root.
\end{frame}

\begin{frame}[fragile]
\frametitle{shell solo a quien lo necesita}
	\centering
	ejecutemos \alert{cat /etc/passwd | grep '/bin/sh'}
	\pause
	\centering
	
	?`Todos esos usuarios necesitan shell?
	\centering
	\pause

	\alert{*NO*}, por tanto puedo cambiarlos a /bin/false
	y evitarme un punto extra de falla.
\end{frame}


\section{SSH}
\begin{frame}[fragile]
\frametitle{necesito ssh, pero quiero dormir tranquilo}
	\centering
	ssh puede ser nuestro mejor amigo, o nuestro peor enemigo.
	\pause

	Por ejemplo, tener ssh abierto a \alert{todo} mundo es un problema, pues
	soy un destino para script kiddies y ataques de fuerza bruta.
\end{frame}

\begin{frame}[fragile]
\frametitle{TIPS para SSH}
	\centering
	Un par de cosas \'utiles:
	\begin{itemize}
		\item Deshabilitar el login con root
		\pause
		\item No esconder el puerto, eso no funciona ni ayuda
		\pause
		\item usar timeout
		\pause
		\item \alert{*SOLO*} permitir ssh v2
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
\frametitle{Defendiendome de script kiddies que usan fuerza bruta}
	\centering
	Alg\'un que otro software \'util:
	\pause
	\begin{itemize}
		\item fail2ban
		\pause
		\item sshguard
		\pause
		\item auth2db
		\pause
		\item scponly
	\end{itemize}
\end{frame}

\section{Alimentando la parano\'ia}
\begin{frame}[fragile]
\frametitle{Auditando}
	\centering
	Existe una gran cantidad de aplicaciones disponibles, que me pueden ayudar
	a monitorear mis logs, esto da sin duda una mejor perspectiva de que pasa en
	el sistema.

	\begin{itemize}
		\item multitail
		\item acct
		\item fail2ban
		\item syslog
		\item samhain
	\end{itemize}
\end{frame}

\section{Comentarios, sugerencias, experiencias}
\begin{frame}[fragile]
\frametitle{\'ultimos detalles}
	\centering
	Recordemos, siempre vamos a estar en la lucha entre seguridad versus usabilidad
	por lo que no vamos a lograr nunca una ni otra, lo importante es estar en un balance 
	optimo.

	\centering

	Ahora, haciendo una peque\~na rese\~na de que quedo y falto:
	\begin{itemize}
		\item El Sistema de archivos
		\pause
		\item Firewalls
		\pause
		\item tcpwrappers
		\pause
		\item archivos con permisos raros (SETUID, SETGID, etc)
		\pause
		\item etc, etc
	\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Gracias :)}
	\centering
	Bueno, gracias a todos, esta presentaci\'on se encuentra bajo una licencia
	libre y pueden obtener una copia completa del c\'odigo fuente en:
	http://rmayorga.org/talks.

	De nuevo, mi correo rmayorga@debian.org, cualquier
	cosa en la que pueda ayudar, es un gusto

\end{frame}
\end{document}

