0% encontró este documento útil (0 votos)
4 vistas17 páginas

Seguridad en Sistemas: Usuarios y Privilegios

El documento aborda la importancia de proteger sistemas informáticos para reducir vulnerabilidades y riesgos de ataques. Se discuten las fuentes de vulnerabilidad, políticas de mínimo privilegio, y diferentes tipos de usuarios en sistemas Windows y Linux, así como los ataques de contraseña y la gestión de permisos. También se analizan vulnerabilidades de software, incluyendo desbordamientos de buffer y malware, destacando la necesidad de un desarrollo seguro.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas17 páginas

Seguridad en Sistemas: Usuarios y Privilegios

El documento aborda la importancia de proteger sistemas informáticos para reducir vulnerabilidades y riesgos de ataques. Se discuten las fuentes de vulnerabilidad, políticas de mínimo privilegio, y diferentes tipos de usuarios en sistemas Windows y Linux, así como los ataques de contraseña y la gestión de permisos. También se analizan vulnerabilidades de software, incluyendo desbordamientos de buffer y malware, destacando la necesidad de un desarrollo seguro.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Módulo 3

3.1
Sistemas protegidos

Es necesario bastionar o proteger un sistema para:

- Reducir al máximo las vulnerabilidades


- Reducir el riesgo de fallo humano
- Minimizar el daño en caso de ataque o fallo

¿Cuáles son las principales fuentes de vulnerabilidad de un sistema?

- Usuarios
- Software instalado
- Servicios en ejecución
- SO no actualizado

Sistemas multiusuario

Las acciones de un usuario no deben:

- Dañar el sistema
- Modificar o borrar los ficheros de otro usuario

Será necesario establecer políticas de mínimo privilegio

- Los servicios o aplicaciones se deben configurar para que se ejecuten con los
privilegios mínimos; ya que si se explota alguna vulnerabilidad existente, el atacante
podría obtener un nivel de privilegios equivalente al que tiene la aplicación atacada
- A cada usuario se le asignarán los permisos mínimos y se le permitirá el acceso solo a
las partes del sistema necesarias para realizar su trabajo (separación de privilegios)

Cuando un usuario abandona una organización se deben cancelar todos sus permisos de
acceso.
Usuarios-Windows

El atacante debe conocer

- ¿Cómo se llama el fichero que contiene los hash?


- ¿Dónde se encuentra ese fichero?

En Windows las credenciales de autenticación se guardan en el fichero SAM (Security Accounts


Manager), que se encuentra en C:\windows\system32\config

- Formato: nombre_usuario: SID: LM Hash: NTLM Hash : : :


user1:501:aad3b435b51404eeaad3b435b51404ee:0CB8975A378F364893AB5689D13A
EB17:::
- Dos formatos de hash (LM y NTLM) LM hash para contraseña en blanco

El LM, muy vulnerable; deshabilitado por defecto desde Windows Vista (se mantuvo por
compatibilidad pero no se muestra)

Vulnerabilidades

- Convertir todo a mayúsculas permite a los programas de fuerza bruta atacar


directamente utilizando mayúsculas y reduciendo así el tiempo de cálculo
- Partir la contraseña en dos permite a los programas de fuerza bruta dividir el trabajo y
actuar en paralelo sobre ambos trozos
- Más fácil romper dos contraseñas de 7 caracteres en paralelo que una contraseña de
14
- El tiempo de ataque no se incrementa exponencialmente, solo se dobla

En NTLM las contraseñas se suelen proteger añadiendo una salt antes de hacer el hash

Kerberos desde Windows 2000

- Usa cifrado simétrico para cifrar y asimétrico para transmitir las claves
- Se usa en equipos con Windows Server 2000, 2003 y XP miembros de un dominio
Active Directory

Paso1: Cliente envía una solicitud de acceso al AS

Paso2: AS responde enviando una clave secreta (K1) cifrada con la contraseña del cliente y un
TGT (Ticket Granting Ticket) que también contiene K1 y solo podrá ser leído por el TGS

Paso3: El cliente descifra la clave K1, envía el TGT junto con un ID y Dir. IP cifrado con K1 al TGS

Paso4: El TGS descifra el TGT que contiene la clave K1 y usa dicha clave para descifrar la ID e IP
del cliente. Si la ID del TGT coincide con la del cliente, le envía una nueva clave K2 y un nuevo
tique para autenticarse ante el servidor

Paso5: El cliente solicita acceso enviando su identificador cifrado con K2 y el tique de acceso

Paso6: El servidor comprueba identidad cliente y le concede acceso


Usuarios-Linux

Un usuario podrá acceder al sistema a través de su cuenta de usuario

En Linux cada cuenta de usuario tiene asignado:

- Un nombre de usuario y contraseña


- Un identificador de usuario (uid)
- Un identificador de grupo primario (gid).Aunque el usuario puede pertenecer a otros
grupos
- Un directorio de trabajo (/home/nombre_usuario). Tiene todos los permisos de
acceso. El usuario guardará en él todos sus ficheros y directorios
- Un intérprete de comandos (shell)

Tres tipos de usurario:

Superusuario (root)

- uid 0
- Tiene acceso total a todos los ficheros y directorios con independencia de propietarios
y permisos
- Controla la administración de cuentas de usuarios
- Puede detener el sistema o cualquier proceso que se esté ejecutando
- Instala software en el sistema
- Puede modificar o reconfigurar el kernel, controladores, etc

Usuarios especiales: bin, daemon, adm, lp, sync, …

- Son utilizados por programas y servicios del sistema


- Por seguridad no tienen todos los privilegios del root, aunque asumen algunos de sus
privilegios
- No tienen contraseñas
- Se crean automáticamente durante la instalación de Linux o de una aplicación
- Generalmente se les asigna un UID entre 1 y 100 (definido en /etc/[Link])

Usuarios normales

- Se usan para usuarios individuales


- Cada usuario dispone de un directorio de trabajo, ubicado en /home
- Cada usuario puede personalizar su entorno de trabajo
- Tienen privilegios completos solo en su directorio de trabajo
- Se les asigna normalmente un uid superior a 1000 (definido en /etc/[Link])
Ataques de contraseña

No electrónicos

- Ingeniería social: Por ejemplo, preguntar al usuario directamente su contraseña


haciéndonos pasar por un agente de seguridad
- Shoulder surfing: Mirar por encima del hombro o desde una esquina que teclas se
pulsan
- Dumpster diving: Buscar en papeleras contraseñas escritas

Activos en línea

- Keylogging: Proceso que captura las teclas que pulsa el usuario


- Phising: La víctima recibe un mail con un enlace malicioso. Al pulsar ese enlace se le
pedirá su autenticación en un sistema de confianza y las credenciales introducidas se
enviarán al atacante

Pasivos en línea

- Monitorizar el tráfico para obtener una contraseña en texto claro (telnet)

Fuera de línea

- Se roba el fichero que almacena los hash de las contraseñas y se intenta craquear

La contraseña no se introduce en el sistema, si no que se compara su hash con el fichero de


hashes capturados

- Fuerza bruta: Prueban todos los posibles valores de contraseñas. Si la contraseña es


robusta, encontrarla es computacionalmente muy costoso
- Ataques por diccionario: Usan listas de palabras. Algunos pueden añadir números y
caracteres especiales a las palabras. Otros pueden generar un diccionario a partir de
información personal (ingeniería social)
- Rainbow Tables: Usan tablas de hashes computados para las palabras de un
diccionario. Los hashes de las tablas se comparan con el hash capturado, se ahorra el
coste computacional de generar el hash para cada posible contraseña
- Password Spraying Attack. Es un tipo de ataque de fuerza bruta. El atacante usa una
misma contraseña contra muchas cuentas diferentes de una aplicación. Útil cuando la
aplicación o el administrador establece una contraseña por defecto para los nuevos
usuarios
Grupos

Conjunto de usuarios que comparten ficheros y otros recursos del sistema

Cada grupo tiene asignado un identificador

Existen dos tipos de grupos:

- Grupo primario: Es el grupo que se aplica a un usuario cuando accede a su cuenta. Este
grupo se crea por defecto al crear la cuenta de usuario. Nombre grupo=nombre de
usuario. Se usa por defecto al crear nuevos ficheros, modificar ficheros o ejecutar
comandos.
- Grupo secundario: Cualquier otro grupo adicional al que puede pertenecer un usuario

Todos los grupos deben aparecer en el fichero /etc/group

Cambiar de identidad

Puede resultar interesante que un usuario pueda cambiar de identidad

- Un usuario normal, en algún momento, puede necesitar tener los privilegios de


superusuario
- Un superusuario necesita ser un usuario normal si quiere testear la cuenta de este

Dentro de una sesión de shell existen dos formas para asumir la identidad de otro usuario:

El comando su

Permite asumir la identidad de otro usuario e iniciar una nueva sesión de shell con la identidad
de ese usuario

- Se asumirán todos los permisos de la nueva identidad


- Si usamos la opción - : $ su – [usuario], en la nueva shell se cargan las variables de
entorno y el directorio de trabajo del nuevo usuario
- Si se omite el nombre de usuario se asumirá la identidad del superusuario $ su –
- Para que se abra la nueva shell será necesario introducir la contraseña del usuario cuya
identidad se quiere asumir

El comando sudo

- Permite a un usuario asumir la identidad de otro aunque puede tener restringidos


algunos privilegios del nuevo usuario
- El superusuario configura el fichero /etc/sudoers para especificar qué comandos
pueden ejecutar ciertos usuarios cuando asumen una determinada identidad
- No se inicia una nueva Shell
- Será necesario introducir la propia contraseña, no la del nuevo usuario
Privilegios de superusuario

El uso inadecuado del comando su puede resultar peligroso

- Si un usuario normal adopta la identidad de superusuario cuando no sea estrictamente


necesario se está reduciendo la seguridad del sistema
- El sistema operativo Linux Ubuntu para solucionar este problema desactiva la
posibilidad de iniciar una shell como superusuario
- Solo se podrá acceder a los privilegios de superusuario mediante el comando sudo
3.2

Los permisos de acceso a ficheros o directorios se definen en términos de acceso a lectura (r),
acceso a escritura (w) y acceso a ejecución (x)

Para cada fichero o directorio los permisos de acceso se definen para el usuario propietario, el
grupo propietario y los demás usuarios del sistema

Para cambiar los permisos de acceso a un fichero o directorio se usa el comando chmod

- Solo el propietario o el superusuario están autorizados a cambiar los permisos


- chmod soporta dos modos para especificar los cambios:

Representación octal

La representación octal utiliza números expresados en octal para definir el patrón de permisos
deseado

- Con 3 dígitos en octal modificamos los permisos de acceso para el usuario propietario,
el grupo propietario y los demás usuarios
Representación simbólica

La representación simbólica se divide en tres partes

- A quién afecta el cambio de permisos: usuario (u), grupo (g), otros (o), todos (a)
- La operación a ejecutar: añadir (+), eliminar (-), asignar solo ese permiso (=)
- Qué permisos se van a modificar: r, w, x

Importante, permisos por defecto 644 (si hubiera ejectuable 744)

Cambiar propietario y grupo

El comando chown permite cambiar el usuario propietario y el grupo de un fichero o directorio

- Necesita permisos de superusuario


- Sintaxis: chown [user][:[group]] file

• Ejemplos:

- chown pedro [Link] , cambia el usuario propietario a pedro


- chown pedro:rys [Link], cambia el usuario propietario a pedro y el grupo
propietario a rys
- chown :admins [Link], cambia el grupo propietario al grupo admins
- chown bob: [Link], cambia el usuario propietario a bob y el grupo propietario al
grupo primario de bob

Para cambiar el grupo también se puede usar el comando chgrp

- chgrp rys [Link]

Listas de control de acceso

Las ACLs (POSIX Access Control Lists) permiten definir permisos de acceso a ficheros y
directorios para subconjuntos de usuarios o grupos completamente arbitrarios

getfacl: Nos muestra el contenido de la ACL

setfacl: Se usa para definir entradas en la ACL


3.3

Seguridad de los programas

El SW normalmente se desarrolla pensando principalmente en la funcionalidad y no en la


seguridad.

La seguridad suele ser una preocupación posterior y no está presente en el momento del
desarrollo del código.

Esto hace que podamos terminar creando programas con importantes agujeros de seguridad.

Vulnerabilidades software

- Violaciones de seguridad de la memoria: Buffer overflows, Dangling pointers


- Errores de validación de entrada: Format string attacks, SQL injection, Code injection,
E-mail injection, HTTP header injection, …
- Condiciones de carrera: Time-of-check-to-time-of-use bugs, Symlink races
- Errores de confusión de privilegios: Cross-site request, Clickjacking, escalada de
privilegios, …
- Errores de la interfaz de usuario: Obligar al usuario a tomar una decisión de seguridad
que no le compete, …

Memory Overflow

Se produce cuando el programa intenta acceder (lectura o escritura) a una posición de


memoria no reservada para una variable

- Es un error muy común y muy explotado


- Se produce sobre todo cuando se programa en C y C++ (uso de punteros)

Ejemplos:

- Desbordamiento de buffer (Buffer Overflow)


- Desbordamiento de entero (Integer Overflow)

Buffer overflow

Se produce cuando un programa no controla la cantidad de datos que se copian en un buffer,


de forma que si esa cantidad es superior a la capacidad del buffer los bytes sobrantes se
almacenan en zonas de memoria adyacentes, sobrescribiendo su contenido original

- Se puede aprovechar para ejecutar código que nos dé privilegios de superusuario


- Ejemplo: copia de cadenas de caracteres de un buffer a otro char Nombre[6] = "";
- ¿Qué ocurre si en Nombre se copian más de 6 caracteres?
Stack buffer overflow

Se produce cuando el buffer que se desborda se encuentra alojado en la pila (stack)

- Puede ser una variable local o un parámetro a una función


- Se produce por no chequear la cantidad de datos que se van a introducir en el buffer
- Estos datos pueden provenir de un usuario, página web, base de datos u otro
programa
- El atacante puede introducir más datos de los que el buffer admite, insertando un
código malicioso de una longitud específica

Vulnerabilidades de este código:

- No se están validando los datos de entrada


- La llamada a la función getColor guarda el puntero de retorno y userInput en la pila
- El mecanismo de llamada a una subrutina puede hacer posible un desbordamiento de
buffer
- Uso de la función strcpy que copia sin asegurarse del tamaño del buffer destino.
¿Cómo evitarlo?

- Ejecutar o compilar el software con extensiones que proporcionen mecanismos para


eliminar o mitigar los desbordamientos de buffer
- Comprobar los tamaños de los datos introducidos
- Evitar usar funciones problemáticas, como strcpy o get

Heap Buffer overflow

Es un desbordamiento de buffer que ocurre cuando el buffer está almacenado en el espacio de


memoria reservado para el montículo (heap)

- Generalmente el buffer es reservado con una rutina como malloc()


Integer overflow

Se produce cuando se intenta colocar un valor entero dentro de un espacio de


almacenamiento que no es lo suficientemente grande como para contener la representación
binaria de ese entero

- Es crítico para la seguridad cuando este entero se usa como control de un bucle o para
determinar el tamaño de la reserva de memoria, copia o concatenación de datos

Se puede evitar:

- Utilizando librerías que implementen “operaciones enteras seguras”. SafeInt (C++) o


IntegerLib (C or C++)
- Validación de entrada de los números introducidos para asegurar que están dentro del
rango esperado

En el ejemplo el desbordamiento de entero puede conducir al bucle a un comportamiento


indefinido

- Es posible que bytesRec desborde, siendo continuamente un número menor que


MAXGET y sobrescribiendo los primeros MAXGET-1 bytes de buf
Desarrollo de software Seguro

Puntos 4 y 5
3.4

Malware

SOFTWARE DISEÑADO PARA DAÑAR O ACCEDER SECRETAMENTE A UN COMPUTADOR SIN QUE


EL DUEÑO NOS HAYA DADO SU CONSENTIMIENTO.

Engloba distintos tipos de amenazas software (virus, troyanos,…) cuya ejecución implica una
acción maliciosa

Los diferentes tipos de malware se suelen combinar para realizar un ataque

- Se suelen distribuir a través de (vector de ataque): correo electrónico (compartición de


documentos, vídeos, programas,…), descargas de Internet o pueden ser insertados en
el sistema por el atacante

A veces se engloban bajo el nombre de virus, lo cual es erróneo dado que los virus son solo
una parte pequeña del malware que típicamente se puede encontrar

Existen versiones para todos los sistemas operativos, soportes, tipos de archivos e, incluso, los
hay multiplataforma

- Los objetivos de ataque han sido siempre los sistemas más usados pues son los que
tienen más probabilidades de éxito

Características básicas del malware:

• Replicación

- Si un programa cuenta con esta característica se le considera virus, sin importar que
tenga alguna otra característica.

• Métodos de ocultamiento

• Activación

• Manifestación

- La capacidad que nos hará notar que tenemos código malicioso en nuestro ordenador

• Explotación y escalada de privilegios.

Algunos van directos al grano: infectan y actúan

- Ejemplo: Ransomware, gusanos criptológicos (infectan y se dispersan)

Otros son más sofisticados: Rompen el perímetro, infectan un sistema, analizan, escalan
privilegios, inician la fase de persistencia, realizan movimientos laterales, inician su operación,
exfiltran, etc. Ejemplo: APT
Clasificación

Virus: Pueden ser de macro, de compañía, del sector de arranque, de memoria...

Gusanos: Potencialmente pueden llegar a ser los más dañinos, debido a que desarrollan sobre
todo la capacidad de réplica

Bombas lógicas: El código permanece oculto hasta su activación en un momento determinado.

Es una parte de código insertada intencionalmente en un programa informático que


permanece oculto hasta cumplirse una o más condiciones pre-programadas, en ese momento
se ejecuta una acción maliciosa.

Ejemplos de acciones:

- Borrar información del disco duro


- Cifrar información del disco duro
- Mostrar un mensaje
- Enviar un correo electrónico
- Apagar el monitor
- Apagar el sistema

Troyanos: Se denominaba así a todo programa que oculta en él otro tipo de código que ejerce
acciones no deseadas sobre el sistema de forma oculta para el usuario

Los troyanos son programas maliciosos, camuflados normalmente como software legítimo,
que permiten acceso remoto al sistema infectado y realizan acciones no autorizadas por el
usuario, como:

- Utilizar la máquina como parte de una botnet


- Instalación de otros programas
- Robo de información personal
- Borrado, modificación o transferencia de ficheros
- Ejecutar o terminar procesos
- Apagar o reiniciar el equipo
- Monitorizar las pulsaciones del teclado
- Realizar capturas de pantalla

Puerta trasera: Secuencia especial dentro de algún software mediante la cual se pueden evitar
los sistemas de autenticación para acceder al sistema

Exploits: utilizados como medio de infección (los exploits consiguen ejecutar el malware, no
"son" el malware)

Rootkits: Modifican el sistema con drivers que impiden que se visualice el malware como
proceso, o que sea detectado con herramientas del propio sistema.

Conjunto de herramientas diseñadas para ocultar ciertos objetos o actividades del sistema

Se instalan a nivel de kernel, lo que las hace invisibles y les permite un control total
- Todas las llamadas al sistema operativo que realicen los procesos de usuario, podrán
ser interceptadas y alteradas sin capacidad de detección

Objetivos: Adquirir máximos privilegios y/o ocultar ficheros o programas

- Su objetivo principal suele ser evitar la detección de programas maliciosos para amplia

Adware, pornware y riskware

•Adware es el nombre por el que se conocen los programas diseñados para reproducir
publicidad en tu ordenador, redirigir tus búsquedas a sitios web publicitarios y recopilar
información de marketing sobre tus gustos, como los tipos de sitios web que visitas, de forma
que se puedan reproducir anuncios personalizados

• Pornware es el nombre por el que se conocen los programas que reproducen material
pornográfico en un dispositivo. Incluye programas instalados de forma malintencionada, sin
conocimiento por parte del usuario, para patrocinar servicios y sitios web de contenido
pornográfico sujetos a suscripción

• Riskware es el nombre por el que se conocen los programas legítimos que pueden provocar
daños si son utilizados por ciberdelincuentes, como herramientas de conexión remota, de
gestión de contraseña, servidores de descargas …

También podría gustarte