Está en la página 1de 52

Seguridad en Sistemas

Operativos y Aplicaciones

Seguridad en UNIX/Linux

Mg. Ing. Juan Devincenzi


Índice

- Problemática de la seguridad en UNIX.


- Cuentas de usuarios.
- El archivo /etc/passwd.
- Permisos especiales.
- Seguridad de Red.
- Seguridad en el Inetd.
- TCP Wrappers.
- Seguridad del sistema de archivo.
- Monitoreo del sistema UNIX.
- Caso: Baseline de Seguridad Linux.

UBA - Maestría en Seguridad Informática 2


Seguridad en sistemas UNIX/Linux

La shell
La shell es el entorno de ejecución de comandos del UNIX. Mediante
la shell nos comunicamos con el sistema como usuarios. Nos provee
de un entorno de trabajo. La shell interpreta nuestros comandos y los
ejecuta mediante el kernel. La shell nos presenta un “prompt” para
introducirle comandos.

Existen diferentes shells y cada una

tiene sus archivos de configuración

diferentes.

UBA - Maestría en Seguridad Informática 3


Seguridad en sistemas UNIX/Linux
Estructura del sistema de archivos
/
/home
/etc
/bin
/sbin
/usr
/usr/local
/usr/bin
/usr/sbin
/root
/tmp
/var
/var/log

La estructura de directorios es estandar en todos los UNIX.

UBA - Maestría en Seguridad Informática 4


Seguridad en sistemas UNIX/Linux
Estructura del sistema de archivos

/ : El directorio / es el directorio raíz principal, de el


“cuelgan” el resto de los directorios.
/home : Este directorio no es estándar, pero representa a los
directorios home de cada usuario. En
algunos sistemas es /usr/home
/bin : Este directorio agrupa a los archivos binarios
(ejecutables) estándares del sistema, que pueden ser
accedidos por todos los usuarios y que además pueden
ser accedidos a través de la variable PATH.

UBA - Maestría en Seguridad Informática 5


Seguridad en sistemas UNIX/Linux
Estructura del sistema de archivos
/etc : Contiene todos los archivos de configuración del
sistema y aplicaciones. (por ej. /etc/passwd, /etc/rc.boot)
/sbin : Contiene los archivos ejecutables estándares del sistema
pero que solo son accedidos por los usuarios del grupo
root.
/usr : Contiene todos los archivos de las aplicaciones que se
instalaron en el sistema y que no se pueden ubicar en los
directorios estándar. Tiene la documentación del sistema,
las fuentes del kernel, etc.

UBA - Maestría en Seguridad Informática 6


Seguridad en sistemas UNIX/Linux
Estructura del sistema de archivos

/root : Este es el directorio home del usuario root. No es


estándar.
/tmp : Contiene los archivos temporales de los usuarios y las
aplicaciones, puede ser leído por todos.

/var : Contiene los archivos que varían su tamaño de manera


periódica. Como los spools, los logs, etc.

UBA - Maestría en Seguridad Informática 7


Seguridad en sistemas UNIX/Linux
Comandos básicos de UNIX
cd : cambia de directorios.
ls : lista los archivos contenidos en un directorio dado.
cp : copia un archivo de un lugar a otro.
rm : borra un archivo o directorio.
mkdir : crea un directorio.
vi : es el editor estándar UNIX.
find : busca archivos en los directorios.
more : Paginador. El primero del mundo UNIX.

UBA - Maestría en Seguridad Informática 8


Seguridad en sistemas UNIX/Linux
Comandos básicos de UNIX

less : Paginador más moderno. Para que el texto no se nos


vaya de la pantalla.

cat : Lee el contenido de un archivo y lo conduce hacia la


salida estándar del proceso.

dd : copia sin formato bit a bit, desde cualquier archivo del


sistema hacia cualquier otro archivo.

ps : Nos muestra los procesos que se están corriendo en


el sistema.

UBA - Maestría en Seguridad Informática 9


Seguridad en sistemas UNIX/Linux
Usuarios y grupos
El sistema posee cuentas de usuarios para poder administrar el
acceso al ordenador. Estas cuentas identifican a cada
usuario con un número único llamado UID (User ID).
También se le asigna un nombre de login, una password, un
directorio home y restricciones de caducado de la clave.

En los sistemas UNIX todo proceso que esté ejecutándose en


la máquina tiene que tener un usuario dueño de ese proceso.

Pueden existir cuentas que no se permita logearse, pero que


existen para que se pueda ejecutar algún proceso con
determinados privilegios, por ej: el usuario bin o daemon.

UBA - Maestría en Seguridad Informática 10


Seguridad en sistemas UNIX/Linux
La cuenta root

La cuenta root es la cuenta principal del sistema. Esta cuenta


no tiene restricciones de permisos de acceso.

Es la cuenta del administrador y solo


debe ser usada cuando se administra
el sistema.

UBA - Maestría en Seguridad Informática 11


Seguridad en sistemas UNIX/Linux
Usuarios y grupos

Los UID del 1 al 100 están reservados para cuentas del


sistema.

El UID 0 está reservado para el usuario root y todo aquello


que se ejecute con UID 0 será tratado con los permisos
del administrador.

Los usuarios se pueden “agrupar”. Los grupos tienen


permisos propios, de manera que se pueden asignar
restricciones a todo un grupo. Cada grupo tiene un GID o
Identificador de Grupo.

UBA - Maestría en Seguridad Informática 12


Seguridad en sistemas UNIX/Linux
Usuarios y grupos
Todos los datos referentes a los usuarios y grupos se
guardan en todos los UNIX en dos archivos tradicionales:
/etc/passwd
/etc/group

Al intentar ingresar al sistema por medio de una shell, al


usuario se le pregunta su nombre de usuario y su
password, que son verificados contra estos archivos a fin
de que accedan o no.

UBA - Maestría en Seguridad Informática 13


Seguridad en sistemas UNIX/Linux
El archivo /etc/passwd

Cada línea identifica a un usuario y cada línea está dividida


por el separador “:”. Por ejemplo:
root:3DgYwlNRgn20Y:0:0:El Administrador:/root:/bin/bash

root Login Name


3DgYwlNRgn20Y Password encriptada (actualmente en /etc/shadow)

0 UID
0 GID
El Administrador Descripción
/root Directorio Home
/bin/bash Shell a ejecutar

UBA - Maestría en Seguridad Informática 14


Seguridad en sistemas UNIX/Linux
El archivo /etc/passwd
La problemática del este archivo estaba en
su diseño de funcionamiento y la tecnología utilizada para
encriptar la clave.

Tradicionalmente se utilizaba el cifrado DES para encriptar la


clave, que hoy en día es considerado inseguro.

Todos los usuarios necesitan poder leer el /etc/passwd para


iniciar sesión y por lo tanto todos los usuarios podían
visualizar la password encriptada del resto.

UBA - Maestría en Seguridad Informática 15


Seguridad en sistemas UNIX/Linux
Archivo de passwords: etc/passwd
Unix Passwords (originales)
root:3DgYwlNRgn20Y:0:1:Operator:/:/bin/csh
nobody:*:65534:65534::/:
daemon:*:1:1::/:
sysadm:dDJ4sBQj3y09M:0:5:system administrator:/home/aurora/sysadm:/bin/csh
sys:*:2:2::/:/bin/csh
bin:*:3:3::/bin:
uucp:*:4:8::/var/spool/uucppublic:
news:DkDuHX8Lw3Iks:6:6::/var/spool/news:/bin/csh
audit:*:9:9::/etc/security/audit:/bin/csh
sync::1:1::/:/bin/sync
ada:.gAdsk7s9DcXA:102:25:ada owner:/local/ada:/bin/csh
pop:*:50:20:pop mailer:/var/spool/pop:/bin/csh
sll1j:pEzasyn11MN6.:750:20:stephen l levy:/home/newton1/sll1j:/bin/csh
rjs3h:ibOUjmVgcOxog:695:20:randy j shehady:/home/turing/rjs3h:/bin/csh
cep2y:pExdpZlgQOByk:821:20:carol e papenhausen:/home/newton1/cep2y:/bin/csh

UBA - Maestría en Seguridad Informática 16


Seguridad en sistemas UNIX/Linux
Shadow password file /etc/shadow

Si se utiliza el sistema de shadow password file


(actualmente todos los sistemas lo utilizan), los hash de las
passwords no se almacenan en el archivo /etc/passwd,
sino que se almacenan en el archivo /etc/shadow junto con
otra información extra de caducidad de contraseñas, etc.

Ejemplo: wsr:rJ6LC282EwCDs:13161::::::

UBA - Maestría en Seguridad Informática 17


Seguridad en sistemas UNIX/Linux
Shadow password file etc/shadow

1. Username.
2. Password encriptada (SHA, MD5, etc.).
3. Último cambio de password (días desde 1/1/1970)
4. Número de días mínimo para cambio de password.
5. Número de días máximo para cambio de password.
6. Número de días previo de aviso de cambio de password.
7. Número de días luego de expiración que la cuenta queda inactiva.
8. Fecha absoluta de expiración en días (desde 1/1/1970).
Fuente: https://www.cyberciti.biz/faq/understanding-etcshadow -file/

UBA - Maestría en Seguridad Informática 18


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional

En UNIX se realiza el control de acceso a los archivos por


medio de la asignación de permisos. Se puede controlar al
dueño del archivo, al grupo de usuarios al que pertenece el
archivo, y al resto de los usuarios.

Si ejecutamos ls -al en algún archivo, veremos algo así:

-rwxrwxrwx 1 root root 10000 Abr 13 1977 /etc/passwd

Y el significado de esto es el siguiente:

UBA - Maestría en Seguridad Informática 19


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Nombre del archivo

UBA - Maestría en Seguridad Informática 20


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Fecha de última modificación

UBA - Maestría en Seguridad Informática 21


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Tamaño del archivo en bytes

UBA - Maestría en Seguridad Informática 22


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Nombre del grupo al que


pertenece el archivo

UBA - Maestría en Seguridad Informática 23


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Nombre del dueño del archivo

UBA - Maestría en Seguridad Informática 24


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Número de links que existen hacia


este archivo.

UBA - Maestría en Seguridad Informática 25


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Permisos del resto del mundo

r significa que puede leer el archivo


w significa que puede escribir el archivo
x significa que puede ejecutar el archivo

UBA - Maestría en Seguridad Informática 26


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Permisos de los usuarios pertenecientes al


grupo al cual pertenece el archivo

r significa que puede leer el archivo


w significa que puede escribir el archivo
x significa que puede ejecutar el archivo

UBA - Maestría en Seguridad Informática 27


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Permisos del dueño del archivo

r significa que puede leer el archivo


w significa que puede escribir el archivo
x significa que puede ejecutar el archivo

UBA - Maestría en Seguridad Informática 28


Seguridad en sistemas UNIX/Linux
Control de Acceso Discrecional
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

Identificador del tipo de archivo


“-” : Archivo común
“d” : Directorio
“c” : Archivo de acceso por caracteres
“b” : Archivo de acceso por bloques
“l” : Archivo soft link

UBA - Maestría en Seguridad Informática 29


Seguridad en sistemas UNIX/Linux
Modificación de los permisos
El comando para cambiar los permisos es chmod.

El permiso r vale 4
El permiso w vale 2
El permiso x vale 1
-rwxrwxrwx 1 root bin 10000 Abr 13 1977 /etc/passwd

La suma de lo que vale cada permiso


que queramos asignar nos da el valor
para el chmod

chmod 777 /etc/passwd

UBA - Maestría en Seguridad Informática 30


Seguridad en sistemas UNIX/Linux
Significado de los permisos
En archivos:
Lectura: significa que se puede visualizar el contenido del archivo.
Escritura: significa que se puede modificar o borrar un archivo.
Ejecución: significa que se puede ejecutar un archivo.

En directorios :
Lectura: listar solo los nombres de los archivos del
directorio.
Escritura: crear archivos nuevos y modificarlos en ese directorio.
Ejecución: hacer ‘cd’ dentro del directorio.

UBA - Maestría en Seguridad Informática 31


Seguridad en sistemas UNIX/Linux
Permisos especiales en archivos
Los permisos especiales son SETUID, SETGID y STICKIBIT

SETUID: Significa que, al ejecutarse este archivo, el proceso


resultante tendrá los permisos del dueño del archivo, y no los del
usuario que lo ejecutó.
SETGID: Significa que, al ejecutarse este archivo, el proceso
resultante tendrá los permisos del grupo al que pertenece y no los
del usuario que lo ejecutó.
STICKYBIT: Significa que, al ejecutarse, las páginas de memoria
RAM utilizadas no se “swapearán” a disco, sino que se mantendrán
para que la próxima ejecución sea más rápida (aplicaciones muy
usadas).

UBA - Maestría en Seguridad Informática 32


Seguridad en sistemas UNIX/Linux
Permisos especiales en archivos
Como se setean.

Así como antes utilizábamos 777 para los permisos de cada


archivo, ahora se utiliza la misma metodología para los permisos
especiales. Se agrega un cuarto número al principio, quedando:

chmod 7777 /etc/passwd

4 vale el SETUID

2 vale el SETGID

1 vale el STICKYBIT

UBA - Maestría en Seguridad Informática 33


Seguridad en sistemas UNIX/Linux
Permisos especiales en archivos
Como reconocerlos:
El bit SETUID está seteado si hay una “S” o “s” en el lugar de la x del
dueño. El bit SETGID está seteado si hay una “S” o “s” en el lugar de la x
del grupo. El bit STICKYBIT está seteado si hay una “T” o “t” en el lugar
de la x del resto del mundo.
Si además de los bits especiales, los permisos de ejecución en cada caso
están seteados, nos damos cuenta porque las “s” y las “t” están en
minúsculas; solo en este caso dichos bits “s” y “t” tienen efecto.

-rwsr - - -wT 1 root bin 10000 Abr 13 1977 /etc/passwd


Este archivo tiene seteado el SETUID efectivo porque
tiene x para el dueño; también tiene el STICKYBIT sin
efecto porque falta la x para others.

UBA - Maestría en Seguridad Informática 34


Seguridad en sistemas UNIX/Linux
Permisos especiales en directorios

SETUID: Significa que, al crearse archivos bajo este directorio, el


dueño por defecto será el dueño del directorio y no el usuario que los
está creando.
SETGID: Significa que, al crearse archivos bajo este directorio, ese
archivo pertenecerá al grupo del directorio y no al grupo del usuario
que lo está creando.
STICKYBIT: Significa que los usuarios que trabajen bajo ese
directorio solo pueden borrar y modificar archivos de ellos mismos y
no de los demás.

UBA - Maestría en Seguridad Informática 35


Seguridad en sistemas UNIX/Linux
Problemática de los Permisos especiales

SETUID root: la problemática proviene de que debemos tener


absoluta certeza que lo que ese programa hace es seguro, ya que
el programa se ejecutará como root sin importar quien lo invoque.

Pero al mismo tiempo esta clase de permisos son absolutamente


necesarios como para el caso del binario passwd. Todos los
usuarios deben poder cambiar su clave, pero ninguno en esencia
tiene permiso de escritura en el archivo /etc/shadow. Aquí se
necesita un archivo /usr/bin/passwd con SETUID root.

UBA - Maestría en Seguridad Informática 36


Seguridad en sistemas UNIX/Linux
Seguridad en la Red

Las redes basadas en la familia de protocolos TCP/IP conservan el


concepto de puertos como la metodología de conexión.
Los puertos son los diferentes y únicos lugares lógicos por donde
se pueden establecer conexiones entre las aplicaciones en una
Red TCP/IP.
Los puertos van numerados desde el 1 al 65535. Siendo los que
están dentro del rango del 1 al 1024 los “reservados” , donde solo
root puede abrir esos puertos para conexiones.

UBA - Maestría en Seguridad Informática 37


Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

En UNIX existe este demonio que controla que servicios queremos


prestar en nuestros puertos y administra las conexiones entrantes.
Este demonio escucha en todos los puertos que le indicamos y si
alguien se conecta, lo valida y recién ahí levanta en servicio real
que nos va a atender. Pero también se pueden prestar servicios
sin el INETD. En RedHat se utiliza una versión más avanzada
llamada xinetd.

Puertos inetd

UBA - Maestría en Seguridad Informática 38


Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet Nombre del


{ Servicio
flags = reuse
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
UBA - Maestría en Seguridad Informática 39
Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet
{
flags = reuse Indica que el
socket_type = stream socket asignado a
wait = no una dirección IP
user = root se podrá reusar.
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
UBA - Maestría en Seguridad Informática 40
Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet
{
flags = reuse
socket_type = stream Tipo de socket
wait = no que utiliza
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
UBA - Maestría en Seguridad Informática 41
Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet Si inetd recibe


{ mas de una
flags = reuse petición, esto
socket_type = stream
indica si debe
wait = no
esperar a que
user = root
termine la primera
server = /usr/sbin/in.telnetd
log_on_failure += USERID
o debe levantar un
} segundo servicio.

UBA - Maestría en Seguridad Informática 42


Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet
{
flags = reuse
socket_type = stream Este servicio se
wait = no ejecutará bajo los
user = root permisos de este
server = /usr/sbin/in.telnetd usuario.
log_on_failure += USERID
}
UBA - Maestría en Seguridad Informática 43
Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet
{
flags = reuse
socket_type = stream
wait = no
user = root Ubicación del
server = /usr/sbin/in.telnetd servicio a ejecutar
log_on_failure += USERID
}
UBA - Maestría en Seguridad Informática 44
Seguridad en sistemas UNIX/Linux
Seguridad en la Red: inetd

Se configura mediante el archivo /etc/xinetd.d/<nombre servicio>


que tiene el siguiente formato (estas son líneas de ejemplo):

Service telnet
{
flags = reuse
socket_type = stream
wait = no
user = root Que datos de la
server = /usr/sbin/in.telnetd conexión se
log_on_failure += USERID enviarán al
} archivo de logs.
UBA - Maestría en Seguridad Informática 45
Seguridad en sistemas UNIX/Linux
TCPWrapper

Tcpwrapper es una metodología para administrar los permisos de


acceso a los servicios de inetd. Creado por Wietse Vanema, el
tcpwrapper no solo nos permite decidir quién accede a que
servicio, sino que también loguea las conexiones.

Los permisos los podemos configurar mediante los archivos


/etc/hosts.allow y /hosts.deny.

UBA - Maestría en Seguridad Informática 46


Seguridad en sistemas UNIX/Linux
TCPWrapper: /etc/hosts.allow

En el archivo /etc/hosts.allow podemos especificar cuales van a


ser los permisos para los ordenadores que dejamos entrar. En este
archivo busca primero el Tcpwrapper. Este archivo se configura
con un lenguaje propio llamado hosts_options, pero que
basicamente trabaja así...

Por ej:
ALL : .miredremota.com.ar EXCEPT evil.miredremota.com.ar
ALL EXCEPT in.telnetd : reddeafuera.com.ar

UBA - Maestría en Seguridad Informática 47


Seguridad en sistemas UNIX/Linux
TCPWrapper: /etc/hosts.deny

En el archivo /etc/hosts.deny podemos especificar cuales van a ser


los permisos para los ordenadores que NO dejamos entrar. En este
archivo busca el tcpwrapper luego de haber buscado en el
/etc/hosts.allow. También utiliza el lenguaje hosts_options.

Por ej:
in.telnetd : reddeafuera.com.ar EXCEPT confianza.reddeafuera.com

ALL : ALL

UBA - Maestría en Seguridad Informática 48


Seguridad en sistemas UNIX/Linux
Monitoreo de actividad

Esto se logra a través de los comandos:

who (w) Nos indica quienes están en el sistema.


last Nos informa quienes se conectaron al sistema.
lastlog Nos informa quienes se conectaron al sistema.
netstat -a Nos muestra todas las conexiones de red.
ps -afx Nos muestra todos los procesos del sistema.
ifconfig Nos muestra información sobre las placas de red.

UBA - Maestría en Seguridad Informática 49


Seguridad en sistemas UNIX/Linux
Monitoreo de actividad

El programa last (wtmp): Nos muestra cada conexión al


sistema, el usuario, la terminal, y cada reboot de la máquina,
incluyendo la hora de cada uno de estos eventos.

El programa lastlog (wtmp): Nos muestra los últimos login de


cada uno de los usuarios del sistema.

El programa who (utmp): Nos muestra quien está trabajando


en el sistema en este momento y que tarea está realizando.

UBA - Maestría en Seguridad Informática 50


Caso: Baseline de Seguridad Linux

• A modo de TP, realizar el 'Caso Baseline


Seguridad Linux' en grupos de 3 a 4
integrantes.

• Cada grupo enviará luego el TP al docente.

UBA - Maestría en Seguridad Informática 51


¿Preguntas?

UBA - Maestría en Seguridad Informática 52

También podría gustarte