You are on page 1of 33

Curso de Seguridad

Introducción a la seguridad

¿Qué es seguridad?
Podemos entender como seguridad un estado de cualquier sistema (informático o
no) que nos indica que ese sistema está libre de peligro, daño o riesgo.
• Se entiende como peligro o daño todo aquello que pueda afectar su
funcionamiento directo o los resultados que se obtienen del mismo.

Para la mayoría de los expertos el concepto de seguridad en la informática es


utópico porque no existe un sistema 100% seguro. Para que un sistema se pueda
definir como seguro debe tener estas cuatro características:
• Integridad: La información sólo puede ser modificada por quien está
autorizado.
• Confidencialidad: La información sólo debe ser legible para los autorizados.
• Disponibilidad: Debe estar disponible cuando se necesita.

Al poner en marcha un proyecto para asegurar una determinada organización, el


administrador debe tener en cuenta:
• La seguridad informática debe ser estudiada para que no impida el trabajo
de los operadores en lo que les es necesario y que puedan utilizar el sistema
informático con toda confianza.
• Políticas de la organización:
Por ejemplo, tiempos de respuesta requeridos.
• Capacitación
Se debe sensibilizar a los operadores con respecto a los problemas
relacionados a la seguridad de los sistemas informáticos.
• Recursos disponibles: tiempo y dinero.

¿Qué se busca defender?

• Negocio:
Buscamos defender el negocio, no es necesario hacer inversiones en
defender algo que no está relacionada con el negocio.
• Datos:
Nosotros defendemos los datos (la información son los datos procesados) y
también protegemos los equipos.

Introducción a Redes

Modelo en capas de redes TCP/IP

Aplicación Usan servicios de las HTTP


Transporte capas inferiores TCP
Red Brindan servicios a las IP
Física capas superiores ETHERNET
Conexión TCP: Three way handshake
IDS: Intrusion detection system

Sistema que monitorea el tráfico de una red en busca de actividad sospechosa y


alerta al administrador acerca de la misma. En algunos casos, los IDS pueden
responder ante tráfico anormal o malicioso tomando acciones como bloquear el
acceso un usuario o una determinada dirección IP.

¿Para qué no sirve?


1. No detecta intrusos, ósea personas
2. Tiene muchos falsos positivos
3. Tiene problemas de performance en general
4. Hay que configurarlo muy bien para que sea útil
verdaderamente

Donde colocar el IDS?

Dónde colocar el IDS es la primera decisión a tomar al momento de comenzar a


monitorear el tráfico de una red. Existen varias opciones:
• Fuera del firewall.
Esta opción tiene la desventaja de que se detectarán ataques que serán
luego bloqueados por el firewall. Considerando que la finalidad del IDS es
detectar ataques, sólo se deberían considerar los paquetes que pasen el
firewall.
• Entre firewall y switch: da información de todo el tráfico entrante y saliente
desde y hacia la conexión a Internet.

SNORT: Sistema IDS

Preparar SNORT de BackTrack2 para poder utilizarlo:

1. Instalación
a. El snort está ya instalado en nuestro LiveCD, sino vamos a
ww.snort.org
b. Modelo de licenciamiento libre con subscripción a las
últimas firmas y soporte
c. Las reglas ya vienen en un juego oficial, podemos agregar
más.
2. Monitoreo y configuración
a. Ayuda
i. snort –h
ii. man snort
b. Ejecución primera
c. Modo sniffer1
i. snort –v
d. Modo IDS
i. Antes copiar las configuraciones
Copiar archivos necesarios:
cd /etc/snort
cp rules/*.map .
cp rules/*.conf .
ii. Dar de baja la base mysql en la conf

1
Modo Sniffer: Lee todos los paquetes que pasan por la red y los muestra en
consola, en modo packet logger envía los datos a un archivo dentro de un
directorio.
iii. Desde Kate, editar el archivo /etc/snort/snort.conf:
1. Cambiar:
var RULE_PATH ../rules
por:
var RULE_PATH rules
2. Comentar la línea:
output database: log, mysql, …
#output database: log, mysql, …
3. Habilitar bien los host y redes
4. Habilitar bien los preprocesadores
5. Habilitar las salidas (borrar las bases)
iv. Prueba de detección
1. Entrar al directorio /var/log/snort
2. Hay un archivo alert para las alertas y otros
con logs binarios
3. Ejecutar: 'tail -f alert'
4. Realizar un escaneo de puertos a un amiguito.

NMap: Network Mapper

Es una utilidad para exploración de red e inspección de seguridad. Nmap sirve para
determinar que hosts están disponibles en una red, qué servicios (aplicación y
versión) están ofreciendo esos hosts, qué sistemas operativos y versión se utilizan,
entre otras características.

nmap –sS –f –A –n –v [dirección IP]

SNMP: Protocolo de comunicación entre dispositivos de red para tareas de


monitoreo y administración.

Modo Detección

Basándose en reglas especificadas en el archivo /usr/local/share/snort estas reglas


pueden ser descargadas de la página principal y son actualizadas del servidor cada
hora aproximadamente.

Las alertas están en /var/log/snort/alert

Para abrirlo desde consola:

cat alert

tail –F alert: muestra el archivo a medida que se actualiza.

snort.conf almacena la configuración, la interpretación de la misma se hace por


data matching, por ejemplo
alert Tcp $EXTERNAL_NET any -> $TELNET_SERVERS 23 “|….|”

Qué Protocolo Origen del Puerto Destinado Destino Puerto Content:


hace ataque de a destino paquete.
$EXTERNAL_NET origen (23 pto
$TELNET_SERVERS
se define en del TELNET)
se define en La
SNORT.CONF ataque
SNORT.CONF información
encerrada
entre || es
hexa.

• Viene desde la $EXTERNAL_NET (por ejemplo, Internet)


• Hacia el $TELNET_SERVER
• Con flujo hacia el servidor y “established” (no es una conexión nueva, sino
ya establecida)
• Con el paquete definido en CONTENT (Se definen reglas para exploits
particulares identificados y conocidos)

Ejercicio: Crear una nueva regla:

1. Abrir: En /etc/snort/rules/experimental.rules
2. Copiar una de Chat cualquiera y modificarla
3. Regla:
alert tcp any any -> any any (msg:”…”; flow: to_server;
established; content: “bin laden”; classtype: policy-violation;
sid:541; )

Con esta regla, cada vez que haya un paquete conteniendo “ bin laden” será
detectado y alertado.

Firewalls

• Trabaja como una barrera entre redes (por ejemplo, entre una LAN e
Internet).
• Aplica filtros para asegurar que sólo usuarios autorizados puedan acceder a
una red desde la otra
• Trabaja sobre la capa de red y la de transporte
• El firewall de Linux es IPTABLES. Está integrado al kernel de Linux.

Ver reglas del firewall:

iptables –vnl

V: Verbose (verborragia, da mucha información)


N: no resolver DNS
L: listado de reglas
IPTABLES se desarrolló a partir de IPCHAINS, trabaja con cadenas
Insertar Cadena
input, en el
primer lugar

Iptables -D INPUT 1
Delete El primer Elimina la
lugar regla.

Al ejecutar iptables –vnl muestra todo lo que filtra, con las siguientes columnas:
Pkts Bytes Target Prot op In Out Source Des
t t
186 … DROP Icmp - * * 0.0.0. 192 Tcp Dpt:22
- 0 …
Cantid Cantid Accion Protoco Identificaci Todos Yo protoco Puerto
ad de ad de realiza lo ón de placa lo i
paquet bytes da de red (hw): destin
es -i etch0: o
input
ethernet 0

-o etcj1:
input
ethernet 1

Política

Se configura, además, una política por defecto. Lo ideal es que sea denegar todo, y
luego se configuran lo que sí se permite.
Policy: acción por default.
Cambio de política:
Iptables -P INPUT DROP
Policy Cadena Drop de todo lo
que no esté
definido en
otra regla

SSH: servicio para acceso remoto a la consola de otro equipo

Se habilita desde:
K > Services > SSH > Setup and Start SSHD
Luego, desde consola, para conectar a un equipo remoto

ssh 192.168.1.[otro]

Ejercicio: Cambiar la política a DROP y configurar todas las reglas para que
funcione ssh.

Nota: Normalmente no se configuran reglas para OUTPUT, sino que se permite la


salida de todo y se limita la entrada.

Habilitar acceso ssh a mi equipo


iptables –A INPUT –p tcp --dport 22 –j ACCEPT –d 192.168.0.[yo]
iptables –A INPUT –p tcp --sport 22 –j ACCEPT –d 192.168.0.[yo]

Para salir de ssh, se debe ejecutar

exit

Static packet filter es obsoleto.


Stateful inspection: Iptables inspecciona los paquetes individuales de información
que están siendo enviados a través del equipo y determina que conexión (en
sentido amplio) pertenecen. Por ejemplo, si uno está utilizando el servicio SSH para
conectarse remotamente a otro equipo, los paquetes se intercambian a través del
puerto 22. Iptables “ve” esos paquetes como pertenecientes a una única conexión y
permite crear reglas dependiendo del estado de esa conexión, es decir, que de
cierto modo, el firewall recuerda el estado de la conexión. Para configurarlo se
definen reglas del siguiente modo:

Ejemplos:

1. Sólo permitir conexiones nuevas al puerto 22.


iptables –A INPUT –p tcp --dport 22 –j accept –m STATE --state
NEW
2. luego:
iptables –A INPUT –m STATE --state ESTABLISHED –j ACCEPT

En una red con NAT4, se deben crear reglas para las cadenas de PREROUTING,
POSTROUTING Y FORWARD para que los paquetes puedan llegar a destino.
Siempre, lo primero que se hace es permitir todas las conexiones ESTABLISHED y
RELATED, y luego se definen reglas para las conexiones NEW (nuevas):

iptables –A INPUT –m state --state –j ACCEPT


ESTABLISHED,RELATED

Commando Add Cadena Cargar Estado de la conexión. aceptar


modulo
“state”

Cuando se trabaja como router, se deben configurar reglas para las cadenas
FORWARD, PREROUTING y POSTROUTING.
Se configura una regla para permitir, trabajando como router, todas las conexiones
ya establecidas o relacionadas con las actuales.

iptables –A FORWARD –m state --state –j ACCEPT


ESTABLISHED,RELATED

Commando Add Cadena Cargar Estado de la conexión. aceptar


para datos modulo
que pasan “state”
por el
equipo
como
router
Y luego, se habilitan las conexiones nuevas: habilitar una conexión hacia un puerto
de destino 80 (http) en 192.168.1.32

iptables –A FORWARD -p --dport -d –m state --state –j


tcp 80 192.168.132 NEW ACCEPT

Puerto Host Cargar Estado de aceptar


destino destino modulo la
“state” conexión.

4
NAT: Network address translation, también llamado “network masquerading”, “native
address translation” o “IP masquerading”. Trabaja reescribiendo las direcciones y los puertos
de los paquetes IP cuando pasan por el router.
Iptables trabaja con distintas tablas. La tabla nat tiene reglas para las cadenas
PREROUTING, POSTROUTING Y OUTPUT para que el equipo funcione como router.
Pasos:
1. Se configura la siguiente regla para COMPLETAR

Iptables -t nat -A POSTROUTING -j MASQUERADE


Regla por defecto para
todos los paquetes
salientes
2. En la cadena de PREROUTING se debe crear una regla para que la dirección
de destino de todos los paquetes sea modificada

iptables –A FORWARD -p --dport -d –m state --state –j


tcp 80 192.168.132 NEW ACCEPT

Puerto Host Cargar Estado de aceptar


destino destino modulo la
“state” conexión.
COMPLETAR

Asegurar Sistema Operativo

Pasos:
1. Desinstalar paquetes innecesarios. Cuanto más aplicaciones y servicios, mas
complejo, mas posibilidad que las cosas fallen. Existen 2 formas
a. Desinstalación del paquete (Recomendado)

apt –get REMOVE --PURGE MC


rpm –r MC

b. Manualmente (eliminando archivos)

2. Actualizar a nivel seguridad: parches de seguridad para, por ejemplo,


Apache (que no cambian la versión del servidor)
3. Configuración (segura).
4. Back-up día 0.
5. Pasar a producción.

3. Configurar
a. Filesystem:
Journaling: implementado por el sistema de archivos EXT3, mantiene la
estabilidad del disco para evitar problemas por rebooteo en frio.

Permisos:
i. Sobre archivos
ii. Sobre directories.

Permisos sobre archivos:

a. Ver permisos:

cd /etc
ls –al
Se muestran las siguientes columnas:

i. Permisos
ii. Links a ese archivo o directorio (soft link). Los directorios
linkean a los archivos que contiene.
iii. Usuario dueño del archivo
iv. Grupo dueño del archivo
v. Tamaño del archivo (en bytes)
vi. Fecha de última modificación
vii. Nombre
Permisos:

Tipo(*) Permisos de usuario Permisos para el grupo Permisos para el resto


dueño dueño de los grupos/usuarios
(others)

(*) Tipo:

d: directorio
-: archivo común
b: archivo de acceso por bloques (ejemplo: diskette, cd)
c: archivo de acceso por caracteres (ejemplo: Mouse)
@: link

En archivos, los tres caracteres significan:


r w x

Ejecución Escritura / lectura


modificación

Usuarios del sistema operativo

• Creación de usuarios:

adduser pepe

se solicitará la contraseña y una serie de datos que pueden dejarse por con
los valores por default
a. Shell: intérprete de comandos, bash es el intérprete por default.
completar otros datos que solicita
• Cambiar de usuario:
Cambiar del usuario actual a “pepe”

su – pepe

el “-” hace que, al cambiar de usuario, se borren las variables de entorno (


nombre, permisos, path de ejecución, etc.)

Nota: en el intérprete de comandos, se muestra “#” cuando se trabaja con el


usuario root, y “?” cuando es otro usuario.
El usuario root no tiene permisos para todo, sino que no se le verifican
permisos. Por ejemplo, al cambiar de usuario de root a otro, no se solicita
password.

• Ver datos del usuario actual:

id

• Eliminar un usuario

userdel [login]

Ejercicio:
1. Abrir dos consolas: una logueada como root y otra como pepe.
2. Ir al directorio tmp

cd /tmp

3. Crear un archivo mediante el comando touch. Este comando modifica la


fecha de última modificación de un archivo. Si el archivo no existe, lo crea.

touch jorge

4. El archivo toma los permisos de la plantilla por default:


• Para el dueño: lectura y escritura
• Para el grupo: lectura
• Para others: lectura

5. Para llenar el archivo:

echo “hola” > jorge


echo “ y chau ” >> jorge

echo muestra textos por pantalla. > y >> son redirecciones a un archivo:

• > redirecciona a un archivo pisando todo el archivo


• >> redirecciona a un archivo haciendo append.

6. Probar permisos desde la consola del usuario pepe: puede leer pero no
escribir.

Cambiar los permisos desde la consola de root para que pepe pueda
modificarlo.

El comando para cambiar permisos es chmod.

Modo octal para cambiar permisos:

[tipo] r w x r w x r w x
4 2 1

chmod 4 setea r--


chmod 2 setea –w-
chmod 1 setea --x

y las combinaciones de varios permisos:

chmod 6 setea rw-


chmod 7 setea rwx

Entones, para setear todos los permisos sobre el archivo jorge:

chmod 777 jorge

Setea permisos de todo (lectura, escritura y ejecución) para todos los usuarios.

Notas:
• El usuario que puede setear permisos para un archivo es el dueño del
archivo.
• Para modificar la fecha de modificación de un archivo se debe ser dueño de
directorio.

chmod 762

Setea:
• Permisos de todo para el usuario dueño
• Permisos de lectura y escritura para el grupo dueño
• Permisos de escritura para los otros.

Otra forma de setear permisos:


[tipo] r w x r w x r w x
U G O

chmod U+r setea permisos de lectura al usuario dueño


chmod G+w setea permisos de escritura para el grupo dueño
chmod O-x quita permisos de ejecución para others.

Permisos sobre directorios:

En directorios, los permisos se interpretan del siguiente modo:

r W x

Capacidad Capacidad de Capacidad de


de listar o modificar la acceder (cd),
ver la estructura, el i- hacer que el
estructura node: agregar o directorio
(ls) quitar archivos o actual del
drectorios, de usuario sea
linkear un ese.
archivo, etc.
Ejercicio:

1. Con el usuario root, crear un directorio:

mkdir test
cd test

2. Agregar un archivo con contenido

touch prueba
echo “texto” > prueba

3. Modificar los permisos del directorio:

chmod 751 .

setea:

• Para el usuario dueño: lectura de la estructura, modificación de la


estructura, acceso.
• Para el grupo: lectura de la estructura, acceso.
• Para others: sólo acceso.

Nota: “.” es el directorio actual

Entonces, con estos permisos, pepe puede acceder pero no ejecutar un ls.

4. Modificar nuevamente los permisos:

chmod 753 .

de este modo, others puede modificar la estructura, con lo cual pepe podría
agregar un archivo.

Otras configuraciones

Otras configuraciones para asegurar el filesystem


• Permisos especiales.
• Atributos
• Macl: mandatory access control list: permisos como en Windows, para
usuarios en particular. Para tenerlo se debe instalar el paquete nselinux.

Permisos especiales:
Consisten en 3 permisos más sobre archivos:
Nombre del Valor en Notas
permiso sistema
octal
SET USER ID 4 Se muestra modificando la letra del permiso
de ejecución de usuario dueño de x a s:
rws rwx rwx

• Si los permisos estándar del usuario


son rw-, se muestra:
rws rwx rwx

• Si los permisos estándar del usuario


son rwx se muestra en mayúscula:

rwS rwx rwx

Cuando se ejecute este archivo, en lugar de


ejecutarse con los permisos del usuario
actual, se ejecutará con los permisos del
usuario dueño.
SET GROUP ID 2 Se muestra modificando la letra del permiso
de ejecución del grupo dueño de x a s:
rwx rws rwx

• Si los permisos estándar del grupo son


rw-, se muestra:

rwx rws rwx

• Si los permisos estándar del grupo son


rwx se muestra en mayúscula:

rwx rwS rwx

Cuando se ejecute este archivo, en lugar de


ejecutarse con los permisos del grupo actual,
se ejecutará con los permisos del grupo
dueño.
STICKY BIT 1 Se muestra modificando la letra del permiso
de ejecución de others de x a t:
rwx rwx rwt

• Si los permisos estándar del others son


rw-, se muestra:

rwx rwx rwt

• Si los permisos estándar de others son


rwx se muestra en mayúscula:

rwx rwx rwT

Es obsoleto, sirve para mantener las páginas


del proceso en memoria, para que se ejecute
más rápido.

Para setear los permisos especiales:

chmod 7 777

donde el primer 7 corresponde a permisos especiales, y los 7 siguientes a los


permisos estándar.

Atributos
Son características de los archivos. Pueden accederse con el comando lsattr

Ejemplos:

• Agregar compresión

chattr +c

La compresión funciona entre el dispositivo real y la interfase para la


aplicación.

• Inmutabilidad

chattr +i

Trabaja por debajo de los permisos del filesystem, sin importar que sea root.
Este bit sólo lo puede modificar el usuario root.
Una medida de seguridad es agregar el bit, desinstalar el módulo de gestión
de atributos y se deshabilita la posibilidad de cargar módulos, hay que
reiniciar el equipo para poder modificarlo.

• Append:

chattr +a

Este atributo hace que el archivo no se pueda borrar ni modificar, sólo


puede agregarse información al final.

Manejo de claves (passwords)

Modificación de la clave de un usuario:

passwd [usuario]

Si no se especifica un usuario, se cambia la clave del usuario actual.

El comando está en /usr/bin/passwd (esto se puede ver utilizando el comando type


passwd)

Los permisos del archivo /usr/bin/passwd son los siguientes:


rws --x --x
Es decir:
• Este archivo tiene permiso rw sólo para el dueño (root)
• Tiene el permiso especial SET USER ID (al ejecutar se toman los permisos
de root) para que cualquier usuario pueda cambiar su password.

Los usuarios del sistema se guardan en /etc/passwd, y sus claves en /etc/shadow.

El archivo passwd tiene la siguiente estructura:


NombreDeUsuario:x:userID:idGrupoPrimario:Descripción:directorioHomeDelUsuario
:intérpreteDeComandos
Al asegurar un sistema operativo se deben quitar los usuarios innecesarios para el
sistema que se va a a utilizar. Por ejemplo, para un webserver se pueden sacar lp,
sync, shutdown, halt, news, wxp, rcp,gdm (si no se va a utilizar la interfase
gráfica):
• El usuario shutdown se utiliza ara dar acceso sólo a apagar la máquina
• E usuario halt, idem
• El usuario sync se utiliza para sincronización de discos.

Nota: Un usuario sólo puede loguearse si tiene consola asignada.

Permisos del archivo /etc/passwd:


• rw para el usuario dueño (root)
• r: para el grupo dueño (root)
• r: para others
En el archivo /etc/shadow se guarda un hash de la clave de cada usuario. El hash
se calcula mediante el algoritmo MD5 y es de 168 bits. MD5 no es reversible.

Estructura del archivo /etc/shadow:

Usuario:hashDelPassword:Dias1:Dias2:Dias3:Dias4
Dias1:días desde 1/1/1970 que se cambió el password
Dias2: en cuantos días se debe cambiar la clave
Dias3: cuantos días después de cambiarse la clave debe volver a cambiarse
Dias4: días de aviso antes de la expiración de la clave
COMPLETAR con datos de man shadow.

Campo Hash:

• Si al valor de este campo se lo reemplaza por un “*” el usuario no se podrá


loguear, significa “Cuenta deshabilitada”.
• Si se antepone “!” al hash la cuenta se deshabilita. Sirve para deshabilitar
una cuenta sin perder el hash del password, de modo que pueda volver a
habilitarse con el mismo password que tenía.
• El hash tiene el siguiente formato:
$1$ SALT $ HASH
SALT: son caracteres que se utilizan para calcular el hash de las claves, de
modo que claves iguales no tengan el mismo hash y no se detecte mirando el
archivo que son iguales.

Administración de grupos:

Los grupos se guardan en el archivo /etc/group. Este archivo tiene la siguiente


estructura.
nombreDelGrupo:password:identificador:usuariosMiembros
• El password es obsoleto.
• Los usuarios miembros que se listan son los usuarios que tienen este grupo
como grupo adicional, por ejemplo, si se agrega el usuario pepe al grupo
floppy, el usuario pepe podrá leer el floppy.
Como medida de seguridad se deberán eliminar los grupos innecesarios.

Seguridad en booteo:

Al bootear, el bootloader (LILO, GRUB), antes de que inicie el sistema operativo,


permite modificar los parámetros de booteo. Por ejemplo, al hacer:

init = /bin/bash

entraría a la consola sin cargar el sistema operativo


Para evitarlo se puede poner password al bootloader. En /etc/inittab se guardan
parámetros de inicialización, etc. En ese archivo, otra modificación que puede
hacerse es eliminar la línea

ca:ctrlaltdel:/sbin/shutdown –ts –rnow

Para que no se reinicie la máquina al presionar ctrl+alt+del

Integridad:

Existen sistemas que verifican la integridad de los archivos, por ejemplo Tripwire,
Integrit y Samhain. Funcionan haciendo hash de los archivos para poder controlar
los cambios que se le hacen al servidor.
El comando MD5SUM sirve para calcular el hash MD5 de cualquier archivo.

md5sum jorge

Si se le cambia 1 bit al archivo, el hash cambia por completo.

Logs del sistema

Si hacemos

ls /var/log

Se ven varios archivos de log del sistema:


• xorg: sistema gráfico
• acpid: sistema acpi de ahorro de energía
• cron: tareas programadas del sistema operativo
• iptraf: control de tráfico
• messages y syslog: logs generales del sistema.
El log puede verse paginado mediante el comando:

less /var/log/syslog

Las aplicaciones, en vez de generar sus propios archivos de log usan el SYSLOG
centralizado de Linux. Este servicio se configura desde el archivo /etc/syslog.conf
Este archivo tiene la siguiente estructura:
Quien.criticidad ruta para logs
Ejemplo: *.* todos.todas las criticidades

*.info /var/log/messages

Enviar todos los mensajes de información al archivo messages.


Syslog trabaja naturalmente de forma local, pero los logs pueden centralizarse en
un logserver.
Pasos:

1. Editar /etc/rc.d/rc.syslog. Se trata del script que se ejecuta cuando se inicia


el servicio syslog. En general, todo lo almacenado en rc.d son servicios que
se inicializan al bootear. Modificar la línea:

/usr/sbin/syslog

/usr/sbin/syslog –r

para configurarlo para habilitar el servicio para recibir logs remotos.

2. Guardar y reiniciar el servicio de syslog:

/etc/rc.d/rc.syslog stop
/etc/rc.d/rc.syslog Stara

Para pueden ver los puertos abiertos y demonios:


netstat –anp
(en la parte que se listan las Active Internet Connections)
upd 0 0.0.0.0:514 0.0.0.0.*

El puerto 514 es el del syslog.

Al hacer esto, la máquina ya puede recibir logs remotos.

3. En los otros equipos se debe configurar en /etc/syslog.conf para que envíen


sus logs al logserver.

*.* @192.168.1.12

Nota: para probarlo, los errores de logueo quedan en el log authrit

Asegurar Servicios: Apache

Para ver la versión instalada de Apache:

apachectl -v

Para iniciar Apache en BackTrack:

start-apache
En otras distribuciones:

• Al iniciar el sistema operativo, configurarlo en el archivo


/etc/init.d/apache start
• Desde entorno gráfico K > Services > HTTPD > Start
• Desde Consola

apachectl start
apachectl stop

Pasos para asegurar Apache:


1. Actualizar paquetes de seguridad.
2. Permisos del filesystem:
Se establece una política de “seguridad por privilegios mínimos”, de modo
que se configurarán los permisos mínimos necesarios para que funcione
correctamente todo lo necesario.

COMPLETAR

Principios de programación segura

Se debe tener en cuenta la seguridad desde el comienzo del análisis. Par ello, se
debe establecer:
1. Permisos necesarios para la aplicación en desarrollo
2. Utilización de librerías que son más seguras que lo que la empresa podría
desarrollar.

Estas medidas tienden a la reducción del área posible de ataque.

Consideraciones:
1. Validación de todos los datos de entrada, en especial los de usuario.
a. SQL Injection: Consiste en forzar la ejecución de código sql en la
base de datos mediante la concatenación de sentencias sql a valores
de parámetros en queries armadas en la página web. Se combate
mediante las siguientes práticas:
i. Chequear formato de los datos de entrada:
1. caracteres válidos: no permitir ‘, --, #, <,>
2. longitudes
ii. No hacer queries en el código, utilizar stored proedures.
b. XSS Cross site scripting: consiste en la inserción de código Javascript
en browsers para obtención de datos. Se usa para pishing, donde un
escenario típico es: el atacante envía un mail a un usuario que tiene
un link a una página legítima pero con código malicioso en el
querystring. El código malicioso se ejecuta en el browser del cliente,
por ejemplo, enviando información del usuario al atacante o incluso
capturando el teclado.
Extras

Temarios del curso + anotaciones mias

Departamento de Informática

Módulo del Curso Seguridad Informática 2008

García Sebastián

eldraco@gmail.com

Objetivos

Los objetivos del curso son que los alumnos:

1.

Se introduzcan en los conceptos de defensa en la Seguridad


Informática.
2.

Tomen conciencia de los trabajos dentro de las empresas.


3.

Manejen las herramientas básicas de defensa en seguridad.


4.

Puedan comenzar a asegurar los equipos de una organización

Datos sobre el curso

El curso utilizará el sistema operativo Linux, distribución


Backtrack3Beta, desde un Live-CD, o CD booteable para la totalidad de
las prácticas. El CD se puede obtener gratuitamente desde
http://www.remote-exploit.org/backtrack_download.html

Temario General

1.

Introducción a la seguridad
1.

Defensa en profundidad y en capas


2.

¿Qué busco defender?


3.
¿Cómo lo puedo defender?
4.

¿Hasta donde puedo defender?


2.

IDS e IPS (Intrusion Detection System y Intrusion Prevention


System)
1.

Instalación y objetivos
2.

Monitoreo y configuración
3.

Detección de ataques reales


3.

Firewalls
1.

Introducción a los FW
2.

Configuración de FW
3.

Gestión y problemas comunes


4.

Migraciones
4.

Asegurar Servicios
1.

Apache y sus módulos


2.

Mysql
3.

Chroots
4.

Ssh
5.

Equipos Wireless
5.

Asegurar un linux
1.

Particiones
2.

Actualizaciones
3.
Filesystems y sus características de seguridad
4.

Permisos y usuarios
5.

Claves por omisión y cambio de claves


6.

Módulos de seguridad: medusa, tecleo, selinux, etc


7.

Integridad
6.

Ingeniería social
1.

Concientización
2.

Pruebas de troyanos
7.

Centralización de logs
1.

Necesidades y beneficios
2.

Configuración y gestión
3.

Análisis y visualización
8.

Administración de la seguridad: claves, usuarios, single sign-


on, remote access.
9.

Políticas de una organización


1.

Necesidad de una política


2.

Armado y gestión
10.

Trabajos asegurando dentro de una organización


1.

Enfrentar un Penetration Test


11.

Programación segura
1.

En páginas Web
2.
En el proceso de desarrollo

Temario Clase por Clase

Clase 1

1.

Introducción a la seguridad
1. Bienvenida al curso, quienes somos, hacia donde vamos.
2. ¿Qué es la seguridad?, ¿Qué no es?
1. Seguridad como teoría: Integridad, Confidencialiad,
Disponibilidad
2. Seguridad para nosotros los administradores:
Políticas, aprobación, capacitacion, recursos de tiempo y plata.
3. Redes
1. ¿Hablamos algo básico?
4.

Introducción al curso
1. Qué diferencias hay con la materia de seguridad
1. Orientado a la defensa, a la configuración, a
la protección
2. Orientado más a los administradores
2. Cuál es el objetivo del curso
1. Prevención
1. Firewalls, IPS, evitar los Information
Disclosure, etc.
2. Detección de los problemas, el primer problema
1. Detección mientras sucede, IDS e IPS
2. Detección una vez que sucedió: Análisis
de logs
3. Detección por anomalía. Ya llegué tarde
3. Poder analizar un ataque
1. ¿Es necesario? ¿No es mejor reinstalar?
¿Capacitarse? ¿Aprender?
2. ¿Qué pasó, qué cambiaron?
4. Poder mejorar la seguridad de mi instalación
1. En general los admin reciben el reporte
de pen test y no saben cómo aplicar los cambios.
2. Configurar mi Linux
3. Configurar mi FW
4. Configurar mi WebServer
5. Configurar mis Frameworks
6. Programar bien!
5. Políticas
1. Todo plan de seguridad en una organizacion debe
estar enmarcado dentro de unas políticas, incluso puede que nuestro
trabajo sea más complicado sin ellas.
6.

¿Cómo puedo defender?


1.

¿Qué tecnologías necesito?


2.
¿Qué recursos?
3.

Tiempos
4.

Apoyos de las políticas


5.

¿Hacer y despues mostrar o primero preguntar?


7.

¿Hasta donde puedo defender?


1.

¿Qué nivel de seguridad necesito?


2.

¿Qué nivel puedo pagar?


3.

¿Qué nivel me sirve?


4. ¿Es necesaria tanta seguridad?

2. Cd live
1. Usaremos el
1. Backtrack2 Final
2. Bootemos y veamos
3.

IDS (Intrusion Detection System y Intrusion Prevention System)


1.

¿Qué es?
1. Sistema de detección de intrusiones, de acciones.
2.

¿Para qué sirve?


1. Detecta firmas de diversos ataques y nos permite
verlas y clasificarlas.
3.

¿Para qué no sirve?


1. No detecta intrusos, osea personas
2. Tiene muchos falsos positivos
3. Tiene problemas de performance en gral
4. Hay que configurarlo muy bien para que sea útil
verdaderamente
4. Snort
1. Instalación
1. El snort está ya instalado en nuestro LiveCD,
sino vamos a ww.snort.org
2. Modelo de licenciamiento libre con
subscripción a las últimas firmas y soporte
3. Las reglas ya vienen en un juego oficial,
podemos agregar más.
2. Monitoreo y configuración
1. Ayuda
1. snort -h
2. man snort
2. Ejecución primera
1. Modo sniffer
1. snort -v
2. Modo IDS
1. Antes copiar las configuraciones
de /etc/snort/rules a /etc/snort
2. Dar de baja la base mysql en la
conf
3. snort -c /etc/snort/snort.conf
3. Revisión de la configuración
1. /etc/snort/snort.conf
2. Habilitar bien los host y redes
3. Habilitar bien los preprocesadores
4. Habilitar las salidas (borrar las bases)
4. Prueba de detección
1. Entrar al directorio /var/log/snort
2. Hay un archivo alert para las alertas y
otros con logs binarios
3. Ejecutar: 'tail -f alert'
4. Realizar un escaneo de puertos a un
amiguito.

Clase 2

1. ¿Qué busco defender?


1. ¿Los equipos?
2. ¿Las personas?
3. ¿Las redes?
4. ¿Los datos?
5. ¿Mi trabajo?
2. Defensa en profundidad y en capas
1.

Una forma de ver la seguridad


2. En cada nivel aplico seguridad bajo la premisa que el
resto de las medidas fallaron y que este nivel es lo único que queda.
3.

Una conciencia de trabajo que se forma con el tiempo.


4. Dificil balancear costo-beneficio!
3. ¿Cómo puedo defender?
1.

¿Qué tecnologías necesito?


2.

¿Qué recursos?
3.

Tiempos
4.

Apoyos de las políticas


5.

¿Hacer y despues mostrar o primero preguntar?


4. ¿Hasta donde puedo defender?
1.

¿Qué nivel de seguridad necesito?


2.
¿Qué nivel puedo pagar?
3.

¿Qué nivel me sirve?


4. ¿Es necesaria tanta seguridad?
5. Snort (continuación)
1. Revisión de las reglas
1. /etc/snort/rules/
2.

Sourcefire VRT Certified Rules


3. http://www.bleedingthreats.net/
2. Edición de reglas experimentales de prueba
1. Ver como son por ejemplo las reglas que detectan
texto
2. Agregar una regla experimental que detecte todo lo
que diga "binladen"
3. Prueba de detección
1. Ver si podemos hacer ejecutar nuestra regla nueva
6. Firewalls
1. Introducción a los FW
1. ¿Qué hace un FW, que no hace?
2. Dos estilos de FW
2. Fw en Linux: Iptables, modelo de 'cadenas'
3. Ver las cadenas básicas: iptables -vnL
4. Políticas de Filtrado
5. Jumps o 'veredicto' de las reglas
6. Agregado de reglas
1. Permitir que nos envíen ICMP echo request nada más
2. Habilitar el puerto 22 de ssh

iptables -A INPUT -m state --state NEW -p TCP --dport 22 -j ACCEPT


iptables -P INPUT DROP
iptables -vnl

ssh 192.168.1.11
si pudiera es como un telnet pero avanzado
para que otros puedan entrar a mi maquina es sshd-generate y despues
ejecuto desde donde estoy esta linea /usr/sbin/sshd

7. Estados
1. Habilitar los estados con -m state
2. Reglas de los estados
3. Orden y prioridades

Clase 3

1. Recordar dónde estamos, cúal es nuestro objetivo.


2. Firewalls
1. Terminar bien con los estados
ESTABLISHED : paquete con conexion establecida y seguramente
transmitiendo
RELATED: relacionado con toda
NEW
2. FW que no es personal sino router
1. Cadena de FORWARD
es para un filtrado de los paquetes que me atraviesan
con esto descarto todo menos las reglas que pongo
iptables -P FORWARD DROP
Esta sirve para una vez que se establece la conexion acepte los
paquetes
iptables -A FORWARD -p TCP -m state --state
ESTABLISHED,RELATED -j ACCEPT
Esta sirve para los paquetes NEW
iptables -A FORWARD -p TCP --dport 80 -d 192.168.1.32
-j ACCEPT -m state --state NEW
habilitamos que de las maquinas de mi red salga a
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT -p tcp --dport -80 -m
state --state NEW
3. NAting
1. Tabla NAT (-t nat)
iptables -vnL -t nat

2. DNAT (Destination)
1. Cadena PREROUTING
2. -t nat -j DNAT --to-destination <ip>:<puerto>
esta linea cambia la direccion ip destino a donde quiera yo
iptables -t nat -A PREROUTING -j DNAT --to-destination 10.1.1.1:3306 -
p tcp --dport 3386 -d 200.10.10.10 -m state --state NEW

tengo que habilitar la cadena FORDWARD para que me acepte esta cadena
iptables -A FORWARD -p tcp --dport 3386 -d 10.1.1.1 -m state --state
new -j ACCEPT
3. MASQUERADE (Todos con una misma Ip)
Hacemos una mascara y todos salimos con la misma ip
1. Cadena POSTROUTING
habilitamos el maskarade con
(todo lo que habilitamos aca tiene que estar en
fordward)
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT -p
tcp --dport -80 -m state --state NEW

4.

DMZ
1. ¿Qué son y para qué sirven?
es tener una red separada donde tengo servicios
sensibles
2. ¿Cómo las uso?
5.

Migraciones
1. Entrevistar para ver qué deberia usarse
2. Ver qué tráfico hay en la red
3. Usar reglas LOG para ver si todo va bien
iptables -A FORDWARD -j LOG (se pone al final de las reglas para
saber lo que estoy dropeando)
4. Empezar por los NATs y Redirecciones
5. Finalmente aplicar los filtros
3.

Asegurar un servidor (Pueden ver tldp.org/LDP/solrhe/Securing-


Optimizing-Linux-The-Ultimate-Solution-v2.0.pdf)
1. Instalación segura
1. Detrás de un FW
2. Con el origen de datos confirmado
2. Instalación desde CD o de la red?
3.

Particiones
1. Tamaños definidos para evitar DoS
2. Permisos de montaje
3. Cifrado
1. Armado de una partición

cifs es un formato de file system encriptado

1. Ejemplo rápido de cifrar una partición a


mano
el comand es openssl bf -e -in /etc/shadow -out /tmp/test este es un
protocolo de encripcion simetrica porque para encriptar y desencriptar
usan la misma clave.

2. dd if=/dev/zero of=/root/particion-test
bs=1024 count=10000
dd es un programa copia lo que le de en entrada bit a bit
3. mkfs.ext3 /root/particion-test
este comando es para generar una particion nueva en formato ex3

4. mount /root/particion-test /media/floppy


1. Cifrado cuando no está montada
1. openssl bf -e -in /root/particion-test -
out /root/particion-test.bf
2. Borrado de datos en texto plano
1. shred -vun2 /root/particion-test
este es un comando para borrado a bajo nivel
-vun2 es verborragico
4.

Actualizaciones
1. Si se instaló de CD, post-instalación actualizar el
sistema
5. Limpieza
1. Desinstalar los paquetes que no se usan
2. Desinstalar las aplicaciones que no son
estrictamente necesarias
1. Vale la pena tener el ssh?, el mc?, el ping?,
la documentación?
6.

Filesystems y sus características de seguridad


1. Permisos en archivos y directorios
2. Permisos especiales
3. ¿Qué permisos necesita cada programa?
1. Ejemplo Apache
1. cd /usr/local/apache
2. chown 0 . bin conf logs
3. chgrp 0 . bin conf logs
4. chmod 755 . bin conf logs
5. chown 0 /usr/local/apache/bin/httpd
6. chgrp 0 /usr/local/apache/bin/httpd
7. chmod 511 /usr/local/apache/bin/httpd
7.

Claves por omisión y usuarios


1. Revisar las passwords por omisión de todos los
sistemas instalados y cambiarlas.
2. Poner claves seguras!
3. Borrar todos los usuarios innecesarios
8. Seguridad en el boot
1. Que no se puedan cambiar los permisos de grub o lilo
sin password
2. Que no se pueda ingresar en single-user mode
9.

Módulos de seguridad: medusa, tecleo, selinux, etc.


10.

Integridad
1. Asegurar que conocemos los cambios que se realizan
2. Tiger, integrit, etc
11. Logs de problemas
1. Syslog
4.

Asegurar Servicios
1.

Apache y sus módulos


1. Es importante primero instalar bien el sistema
operativo y los parches
2.
http://httpd.apache.org/docs/2.2/misc/security_tips.html
3. http://xianshield.org/guides/apache2.0guide.html
4. Configuración de apache
/usr/local/apache/conf/httpd.conf
5. Probar de como se ve nuestro apache
2. Módulos de apache
1. mod_security: Es un FW a nivel aplicación, de los
más novedoso y útil

Clase 4

18.

Ingeniería social
1.

Concientización
2.

Pruebas de troyanos
19.

Centralización de logs
1.

Necesidades y beneficios
2.

Configuración y gestión
3.

Análisis y visualización
Clase 5

19.

Administración de la seguridad: claves, usuarios, single sign-


on, remote access.
20.

Políticas de una organización


1.

Necesidad de una política


2.

Armado y gestión
21.

Programación segura
1.

En páginas Web
2.

En el proceso de desarrollo
Curso: Seguridad Informática
Fecha: 13/06/2008

Logs de Problemas

bt ~ # nano /etc/rc.d/rc.syslog
Agregamos -r en la linea donde ejecuta el script. Si no me equivoco, seria la linea
10.

bt ~ # /etc/rc.d/rc.syslog stop
bt ~ # /etc/rc.d/rc.syslog start

Verificamos el estado de la red con el netstat. Ahi podemos ver si el syslog esta
corriendo.
bt ~ # netstat -anp

bt ~ # nano /etc/syslog.conf
Agregamos la siguiente linea para mandar todos los logs hacia una maquina
destino.
*.* @192.168.1.12

Asegurar Servicios

Levantamos el apache.
bt ~ # start-apache

Configuraciones del apache


bt ~ # nano /usr/local/apache/conf/httpd.conf
ServerRoot: Directorio donde esta instalado el apache
ServerAdmin: Que no de informacion que puedan llegar a identificar
DocumentRoot: Donde se encuentran las paginas web

<Directory "ruta absoluta del filesystem">


Options FollowSymLinks # Recorre los links simbolicos
AllowOverride None # Cualquier configuracion que siga de aca en mas no puede
pisar esta
</Directory>

Options Indexes FollowSymLinks MultiViews


-Indexes: muestra los directorios cuando no hay un archivo index

Order allow,deny # Primero revisar quien puede entrar


Allow from all # Permite entrar a todos (all)

UserDir: por seguridad no estaria mal sacarlo

Aliases: sirve para dar un alias a un directorio en particular. Borrar los alias que
trae por defecto como por ejemplo el /manual/

mod_security: Es un FW a nivel aplicación, de los más novedoso y útil. Seria un


IDS a nivel webserver.

Programacion Segura
Validar todos los datos que mi aplicacion rebibe desde afuera (variables, cookies,
$_GET, $_POST, Base de Datos).
Chequear el formato de los datos, los requerimientos minimos de los mismos.

SQL-I

• Si no valido las variables que utilizo para la consulta SQL, puedo recuperar
datos que no son los que en realidad buscaba.

• Validar Datos

• Chequear formato

• No ' ; -- #, es decir, ningun metacaracter

• www.elbocon.com.pe (sitio donde probar SQL-I)

XSS (Cross Site Scripting)

• Permiten ejecutar codigo javascript en otras maquinas clientes


• 'hola<script>alert(1)</script>

You might also like