trifolio - seguridad2.cdr

Transcripción

trifolio - seguridad2.cdr
GLOSARIO DE SEGURIDAD.
INTEGRIDAD DE PAQUETES.
Buffer Overflow: Es una condición que ocurre, cuando un usuario o un proceso, intentan colocar
demasiados datos en memoria (en el buffer de almacenamiento del programa), sobreescrbiendo el
segmento de datos de su programa, con instrucciones que normalmente devuelven un shell cuyo dueño
es root. Más del 50% de los fallos de seguridad reportados, están asociados a estas circunstancias, junto
al uso de setuid root.
El comando md5sum, se usa para verificar una firma de 128bits, totalmente dependiente del contenido de
los archivos sobre los que se aplica. Puede usarse para comparar el sum de un archivo con otro generado
previamente, y saber si archivo fue alterado. Se usa como un método bastante confiable para garantizar
fiabilidad en los paquetes que se bajan para instalar. El empaquetador publica una firma md5 para el
archivo que pone en línea. Sin embargo es factible que la persona que altera el paquete, también altere el
checksum.
Denial Of Service (DOS): Ocurre cuando un intruso, logra que un recurso en especial, deje de estar
disponible para los usuarios legítimos del sistema. Constituyen una amenaza a la disponibilidad de datos
de quienes intenten usar el recurso en cuestión, y pueden variar desde impedir conexiones de red, a
consumir todo el ancho de banda disponible en la red.
IP Spoofing: Consiste en enmascarar un host, como si fuese otro. Puede usarse para encaminar
información originalmente destinada a un host, hacia otro en especial, permitiendo interceptar los datos
que estaban destinados a otros.
La intención principal de esta Referencia Rápida, es constituirse en un punto de partida para: mejorar la
seguridad de su sistema y buscar información más profunda al respecto. No puede reemplazar de modo
alguno, la lectura exhaustiva de la abundante documentación ya existente, sobre la seguridad de los
sistemas Linux.
CONTROL DE PERMISOS DE ARCHIVOS Y ATRIBUTOS.
Monitorear los permisos del sistema de archivos, es crucial para mantener la integridad del sistema.
Revise el sistema periódicamente, en busca de permisos “setuid” o “setgid”, no autorizados o
innecesarios. Considere que los programas con “setUID root”, se corren como superusuario
independientemente de quién los ejecute, y son causa frecuente de “buffer overflows”. SetUID root se usa
normalmente, para permitir que cualquier usuario pueda realizar ciertas acciones, que de otro modo sólo
podrían ser ejecutadas por el administrador. Busque programas sospechosos, y quíteles setuid o setgid,
usando chmod:
root# find / -type f -perm +6000 -ls
59520 30 -rwsr-xr-x 1 root root 30560 Apr 15 1999 /usr/bin/chage
59560 16 -r-sr-sr-x 1 root lp 15816 Jan 6 2000 /usr/bin/lpq
root# chmod -s /usr/bin/chage /usr/bin/lpq
root# ls -l /usr/bin/lpq /usr/bin/chage
-rwxr-xr-x 1 root root 30560 Apr 15 1999 /usr/bin/chage
-r-xr-xr-x 1 root lp 15816 Jan 6 2000 /usr/bin/lpq
Los archivos con atributos de escritura para todos, pueden ser alterados o borrados con facilidad,
búsquelos todos:
root# find / -perm -2 ! -type l -ls
En el transcurso de la operación, verá varios archivos; entre ellos varios dentro de /dev/, e incluso el
directorio /tmp.
Busque e identifique los archivos que no tienen un dueño o pertenecen a un grupo. Podrían haber sido
creados por algún intruso:
root# find / -nouser -o -nogroup
Si utiliza los comandos lsattr y chattr, el superusuario puede modificar las características de archivos y
directorios, incluyendo su alteración o borrado, mejor que al usar chmod. Utilizar los atributos “appendonly” (sólo agregar contenido) e immutable, pueden ser bastante efectivos para proteger los logs
(registros de actividad) de ser borrados, o evitar que pueda incorporarse código malicioso, a los binarios
críticos del sistema. Aunque esto no garantiza que los archivos no puedan ser modificados, exige al
menos que se tenga cuenta de root para hacerlo. El comando chattr se usa para fijar o quitar estos
atributos, mientras que lsattr se usa para listarlos.
Fijando el modo “append-only”a los logs del sistema, los datos que se agregan, no se podrán borrar.
Aunque esta práctica requiere modificar los scripts de rotación de logs, puede ayudar a evitar que un
eventual intruso, borre sus huellas. Una vez que se rotan los logs, deberían ponerse en modo
“immutable”. Es util modificar en este sentido, aquellos archivos que no se cambian a menudo, como
/bin/login, /bin/rpm o /etc/shadow.
# chattr
# chattr
# lsattr
----i-------a--
+i /bin/login
+a /var/log/messages
/bin/login /var/log/messages
/bin/login
/var/log/messages
Ningún usuario, debiera poder correr programas con setuid, desde su directorio home. Utilice la opcion
nosuid en el archivo /etc/fstabs, para las particiones que puedan ser escritas por usuarios distintos de
root. Puede usar tambien nodev y noexec, en particiones que contengan homes de usuarios, o incluso en
/var, lo cual impide la ejecución de programas y la creación de dispositivos de caracteres o de bloques, lo
cual nunca debiera ser necesario. Consulte las páginas del manual de mount, para obtener más
información.
Port Scanning: Es analizar los puertos activos en un host en particular, para averiguar si es vulnerable a
algún tipo de ataque. Suele ser el paso previo al ataque.
Packet Filtering: Es un método para filtrar el tráfico de una red, y se hace entre las interfaces del firewall.
Según las características del paquete, y de acuerdo a reglas de filtrado preestablecidas, se permitirá su
circulación, o no. La definición de esas reglas, implica un buen conocimiento de los protocolos de la red.
Proxy Gateway: También llamadas Gateways de aplicaciones, actúan por cuenta de otro programa. Un
host con un servidor proxy instalado, se transforma en cliente y servidor a la vez, actuando como un
obstáculo entre el destino final y el cliente. Los servidores proxy, normalmente son pequeñas aplicaciones,
diseñadas con cuidado y para fines muy específicos, y sólo permiten el paso de servicios específicos a
través de ellos. Típicamente, su uso se completa con filtrado de paquetes.
SetUID o SetGID: Archivos que cualquiera puede ejecutar con los privilegios propios del dueño o de su
grupo. Encontrará archivos de root, con setuid. Eso significa que cualquier usuario, podrá durante la
ejecución del programa (o hasta que el programa internamente abdique ese derecho), realizar acciones
que sólo le están reservadas a root. Estos son los tipos de archivos más atacados por los intrusos, por
sus potenciales privilegios de root. A menudo asociado con buffer overflows.
Trojan Horse: Un programa que se disimula como si fuera benigno, cuando no lo es. Al ser ejecutado,
suele incluir funciones ocultas, y damnificando la seguridad del usuario que ejecuta.
Vulnerability: Una circunstancia que compromete la seguridad del sistema. Existen vulnerabilidades
locales y remotas de varios tipos y bien conocidas, y pueden encontrarse en un equipo, más allá de su rol
en red, poder de cómputo o nivel de conectividad.
SEGURIDAD DEL KERNEL.
Usando el pseudo-sistema de archivos proc, es posible ajustar ciertas opciones de seguridad del kernel.
Varios ítems en /proc/sys, están asociados a seguridad. Se activan si contienen un 1, y se desactivan si
contienen un 0. Algunas opciones en /proc/sys/ipv4:
icmp_echo_ignore_all: Ignora todos los pedidos de tipo ECHO, por icmp. Dicho de otro modo, el host
no responde pings.
icmp_echo_ignore_broadcasts: Ignora los pedidos de tipo ECHO, pero masivos. Su red podría
usarse para atacar por flooding de paquetes a otro host, causando una DoS.
Ipforward: activa o desactiva el reenvío de paquetes entre las interfaces. El valor por defecto, depende
de si el kernel está optimizado para ser router o host.
ip_masq_debug: activa o desactiva el modo depuramiento para el IP Masquerading. Puede reducir el
trafico, a cambio de los mensajes de depuramiento.
#md5sum paquete
102o8wu4i5kd8s9w020mcu7qah47320z
SERVICIOS INNECESARIOS.
Una de las mejores maneras de evitar compromisos remotos de seguridad, es deshabilitar los servicios
que no es necesario proveer. Muchos de los servicios que se dejan habilitados por defecto en la
configuración del metademonio inetd, no se usarán casi nunca. Desactive los que no necesite,
comentando la línea correspondiente en el archivo /etc/inetd.conf
Encontrará scripts de ejecución de servicios por runlevel, en /etc/rc*.d o en /etc/rc.d/rc* -según
la distro-. Mueva esos enlaces, renombre o borre, o incluso desinstale el paquete correspondiente. En
RedHat puede usar /sbin/chkconfig --list para ver qué servicio corre en cada runlevel. Para
quitarlos, use /sbin/chkconfig --del servicio. Válgase de netstat -a -p --inet, de ps, y
de los port scanners, para determinar qué servicios corre.
RECURSOS EN LA WEB.
Apache: directorios y protección con passwords
http://www.apacheweek.com/features/userauth
BastilleLinux
http://www.bastille-linux.org
Bugtraq:
http://www.securityfocus.com/forums/bugtraq/intro.html
CERT: Módulos para mejoras de seguridad
http://www.cert.org/security-improvement
Detección de Intrusos
http://www.linuxsecurity.com/intrusion-detection
Introducción a la seguridad en Linux
http://www.linux-mag.com/1999-10/security_01.html
John the Ripper, el destripador de passwords
http://www.openwall.com/john
Linux Security
http://www.linuxsecurity.com
Nmap, escaneador de puertos
http://www.insecure.org/nmap
OpenSSH: herramienta segura de acceso remoto
http://www.openssh.com
Proyecto de seguridad OpenWall
http://www.openwall.com
tcp_syncookies: Previene el ataque “SYN”, que consiste en enviar syncookies alteradas, para causar
solapamientos en el trafico, y desbordamientos de socket.
Protocolo NTP (Network Time Protocol)
http://www.ntp.org
rp_filter: Determina si está habilitada la verificación de direcciones de origen. Habilite esta opción en
todos los routers de la red, para evitar IPSpoofings contra la red interna.
Utilidad de Transferencia Incremental de Archivos
http://rsync.samba.org
secure_redirects: Solo acepta mensajes de redirección icmp, que provengan de los gateways que
están en la lista de default gateways.
Herramienta de control de acceso a root sudo
http://www.courtesan.com/sudo
log_martians: Graba en el registro de actividades de kernel, el trafico de paquetes con direcciones
imposibles.
SecurityPortal, portal argentino de seguridad
http://www.securityportal.com.ar
accept_source_route: Determina si un paquete ruteado en orígen, se acepta o se rechaza. Debiera
estar deshabilitado, hasta que se tenga la necesidad específica de usarlo.
Snort, sistema de detección de intrusos
http://www.snort.org
Las ultimas versiones de RedHat, incluyen unas definiciones por defecto que se cargan al arrancar, y
están en /etc/sysctl.conf. El programa para controlar estos cambios, es /sbin/sysctl. De lo
contrario, use /bin/echo.
Tripwire, herramienta de integridad de archivos
http://www.tripwiresecurity.com
Para más información acerca del sistema proc. Lea los documentos correspondientes dentro de
Documentation, en los fuentes del kernel.
paquete
Uso de Snort
http://www.linuxsecurity.com/using-snort.html
USO DE RPM Y DPKG.
CONFIGURACIÓN DE SYSLOG
SEGURIDAD EN DNS
El uso de /bin/rpm en RedHat u otras basadas en aquella, y de /usr/bin/dpkg en Debian y derivadas, es la
clave en la administración de los paquetes de software del sistema. Sea cauto al utilizar las
correspondientes herramientas de actualización automática, como AutoRPM, AptRPM, Up2date o
AptGet.
Las transferencias de zona, sólo debieran permitirse en servidores maestros que actualizan la información
de zona (dominio), es sus servidores esclavos. No hacerlo de ese modo, puede permitir que hosts no
autorizados, obtengan información de nombres de hosts e Ips. Restrinja las peticiones sólo a dominios
públicos. Configuración para un servidor con zonas públicas y privadas:
Para quitar un paquete:
El syslogd, es un demonio encargado de capturar y llevar registro, de los mensajes generados por los
diferentes procesos durante su ejecución, mientras que por su parte, klogd es el responsable de hacer lo
propio, pero con los mensajes generados por el kernel. Los registros de actividades (también puede
encontrarlos como bitácoras, cuadernos, o nombres peores ;) serán en la mayoría de los casos,
indicadores primarios de los problemas que pudieran presentarse en su sistema. Incluso hay quienes
guardan sus logs... en /dev/lp0.
#rpm -e <paquete>
#dpkg -r <paquete>
Ajuste su archivo de configuracion de syslogd, /etc/syslog.conf, para que envíe información de tipo
específico a archivos específicos, para que pueda ser leída y analizada con más sencillez y velocidad
Listar los contenidos del paquete:
#monitorear intentos de autentificación
auth.*; authpriv.* /var/log/authlog
#rpm -qvl <paquete.rpm>
#dpkg -c <paquete.deb>
#auditar todos los mensajes del kernel
kern.*
/var/log/kernlog
<Directory />
Options None
// Permite trasnferencias solo a su servidor de nombres esclavo.
// Solo permite peticiones de la red 192.168.1.0.
zone “midominio.com” {
type master;
file “master/db.midominio.com”;
allow-transfer {192.168.1.6; };
allow-query {192.168.1.0/24; };
};
Listar los paquetes con su información:
#monitorear todas las advertencias y mensajes de error
*.warn; *.err
/var/log/syslog
#rpm -qvia
#dpkg -l
#enviar una copia a un host de logs remoto. Configure el script de inicio de
#syslogd para que corra con las opciones -r -s dominio.com en su servidor de
#logs. Asegúrese de que el nivel de seguridad en su servidor de logs, sea
#bueno, cuando menos.
*.info
@loghost
auth.*; authpriv.* @loghost
Ver la información de un paquete:
#rpm -qpi <paquete.rpm>
#dpkg -I <paquete.deb>
Verificación básica de integridad:
Rechaze y guarde un registro, de las peticiones de versión que se le hagan, excepto desde su propio
host. Obtener el número de versión de BIND que corre, ayudará a los intrusos a determinar qué tipo de
ataque dará buenos resultados con su servidor de nombres:
// Impide saber qué versión de BIND está usando
zone “bind” chaos {
type master;
file “master/bind”;
allow-query {localhost; };
};
Restrinja el acceso a los directorios de logs y de syslog a sus usuarios normales, usando:
El archivo .master/bind, deberá contener entonces:
#rpm -Va
#debsums -a
Averiguar a qué paquete pertenece un archivo:
#chmod 751 /var/log /etc/logrotate.d
#chmod 640 /etc/syslog.conf /etc/logrotate.conf
#chmod 640 /var/log/*.log
#rpm -qf </trayecto/al/archivo>
#dpkg -8 </trayecto/al/archivo>
SEGURIDAD DE APACHE
Instalar un nuevo paquete:
Limitar Apache para que atienda sólo la interface local, agregando en /etc/httpd/httpd/conf la
linea:
#rpm -Uvh <paquete.rpm>
#dpkg -i <paquete.deb>
Estas reglas se usan a menudo para monitorear y controlar, el acceso a los servicios listados en el archivo
/etc/inetd.conf. Si algún servicio se corre como “standalone”, sin depender del superdemonio, tcpwrapers
no podrá controlar su actividad. Si necesita por ejemplo, “recubrir” (horrible traducción de wrapear :) su
in.ftpd:
ftp
tcp
nowait
Controle a qué interfaces escucha su named, para evitar exponerlo ainterfaces en los que no es
necesario:
Listen 127.0.0.1:80
CONFIGURACIÓN DE TCP WRAPPERS
root
/usr/sbin/tcpd
in.ftpd
-l -L -i -o
Antes de que un demonio de servicios sea invocado ante una petición, tcpd se asegurará de verificar que
el origen del paquete, es un host permitido. Los intentos de conexión, se envían al syslogd. Todos los
servicios deben estar deshabilitados en el archivo host.deny:
ALL:ALL
Para enviar un mail al administrador del sistema cada vez que se note un intento fallido de conexión:
ALL: ALL: /bin/mail -s “%s intento de conexión de %c” [email protected]
Habilite servicios en específico en /etc/host.allow usando el nombre del servicio, seguido por la
información del host:
sshd: clienta24.seguros.com, ripper.seguros.com
in.ftpd: 192.168.1.
El punto al final, indica que toda esa red estará autorizada. Use tcpdchk para verificar sus archivos de
acceso. El control de acceso funciona asi:
1- El acceso a un servicio se garantiza, si el host encaja en las definiciones de host.allow.
2- Si el servicio está especificamente denegado para el host en cuestión, se rehusará la conexión
3- De otro modo, se garantizará el acceso al servicio.
Si en su sistema no se han creado archivos de control de acceso, se interpretará su contenido como
vacío, de modo que el control de acceso al host, quedará desactivado!!!
$TTL 1d
@ CHAOS SOA localhost. root.localhost. (
1 ; serial
3H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
NS localhost.
Usar las siguientes líneas para desactivar el acceso al sistema de archivos por defecto, a menos que sea
expresamente permitido. Esto desactiva la impresión del índice de contenidos si no existe el archivo
index.html, Server Side Include y links simbólicos. Desactivar los links simbólicos puede impactar en la
performance de sitios grandes:
<Directory />
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>
listen-on { 192.168.1.1; };
Use Listas de Control de Acceso, para agrupar hosts, según criterios de confiabilidad. La etiqueta de ACL
“internal”, permite un mayor grado de acceso a la información por parte de los hosts que incluye. Para
usarla, debe estar definida:
acl “internal” {
{192.168.1.0/24; 192.168.2.11; };
};
Luego, puede ser usada en declaraciones de zona o en las opciones:
Use las siguientes líneas para restringir el acceso al servidor soloa direcciones determinadas:
<Directory /home/httpd/html>
# Deny all accesses by default
Order deny,allow
# Allow access to local machine
Allow from 127.0.0.1
# Allow access to entire local network
Allow from 192.168.1.
# Allow access to single remote host
Allow from 192.168.5.3
# Deny from everyone else
Deny from all
</Directory>
Asegúrese de reiniciar Apache para probar los cambios.
ARCHIVOS CRÍTICOS DEL SISTEMA ( Parte I )
Archivo/Directorio
/var/log/
/var/log/messages
/etc/crontab
/etc/syslog.conf
/etc/logrotate.conf
/var/log/wtmp
Perm.
751
644
600
640
640
660
Descripción
Directorio conteniendo todos los archivos log
Mensajes del sistema
Archivo crontab de todo el sistema
Configuración del demonio syslog
Controla la rotación de los archivos log
Quien está loggeado ahora, use who
zone “inside.mynet.com” {
type master;
file “master/inside.mynet.com”;
allow-query {“internal”; };
};
ARCHIVOS CRÍTICOS DEL SISTEMA ( Parte II )
Archivo/Directorio
/var/log/lastlog
/etc/ftpusers
/etc/passwd
/etc/shadow
/etc/pam.d/
/etc/hosts.allow
/etc/hosts.deny
/etc/lilo.conf
/etc/securetty
/etc/rc.d/init.d/
/etc/init.d/
/etc/sysconfig/
/etc/inetd.conf
/etc/cron.allow
/etc/cron.deny
/etc/ssh/
/etc/sysctl.conf
Perm.
640
600
644
600
750
600
600
600
600
750
750
751
600
400
400
750
400
Descripción
Quién se ha loggeado anteriormente. Use last
Listado de usuarios excluidos del ftp
Listado de las cuentas del sistema
Contiene los passwords de las cuentas
Archivos de configuración de PAM
Archivo de control de acceso
Archivo de control de acceso
Archivo de configuración del gestor de arranque
Interfaces tty que permiten logins de root
Archivos de inicio en sistemas RedHat
Archivos de inicio en sistemas Debian
Configuración del sistema y la red en RedHat.
Archivo de configuración del superservidor Inetd
Listado de usuarios que pueden usar cron
Listado de usuarios que no pueden usar cron
Archivos de configuración de Secure Shell
Opciones de optimización del kernel en RedHat