Sei sulla pagina 1di 23

Capítulo 3: Sistema operativo Linux

Linus Torvalds publicó el primer kernel de Linux en 1991 bajo el modelo de código abierto. Originalmente desarrollado para
la arquitectura de chips Intel x86, Linux ha evolucionado hasta incorporar muchas configuraciones diferentes de hardware.
Haga clic aquí para ver un gráfico que detalla cómo Linux es parte de muchas de las plataformas informáticas en uso hoy
en día.

En este capítulo, aprenderá cómo realizar operaciones básicas de Linux, así como tareas administrativas y relacionadas
con la seguridad.

¿Qué es Linux?

Linux es un sistema operativo creado en 1991. Linux es de código abierto, rápido, confiable y pequeño.
Requiere muy pocos recursos de hardware para ejecutarse y es altamente personalizable. A diferencia de
otros sistemas operativos, como Windows y Mac OS X, Linux fue creado por una comunidad de
programadores que actualmente lo mantiene vigente. Linux es parte de varias plataformas y puede
encontrarse en cualquier tipo de dispositivo, desde relojes a supercomputadoras.

Otro aspecto importante de Linux es que está diseñado para conectarse a la red, lo que facilita mucho la escritura y el uso
de aplicaciones con base en la red. Dado que Linux es de código abierto, cualquier persona o empresa puede obtener el
código fuente del kernel, examinarlo, modificarlo y volver a compilarlo cuando lo desean. También pueden redistribuir el
programa con o sin costo.

Una distribución de Linux es el término que se utiliza para describir paquetes creados por distintas organizaciones. Las
distribuciones de Linux (o distros) incluyen el kernel de Linux con herramientas y paquetes de software personalizados. Si
bien algunas de estas organizaciones pueden cobrar el soporte de su distribución de Linux (orientado a empresas con base
en Linux), la mayoría también ofrece la distribución gratis sin soporte. Debian, Red Hat, Ubuntu, CentOS y SUSE son solo
algunos ejemplos de distribuciones de Linux.

El valor de Linux

Linux es, a menudo, el sistema operativo elegido en el centro de operaciones de seguridad


(SOC). Estos son algunos de los motivos para elegir Linux:

 Linux es de código abierto: cualquier persona puede adquirir Linux sin cargo y modificarlo según necesidades
específicas. Esta flexibilidad les permite a analistas y administradores diseñar un sistema operativo específicamente
para análisis de seguridad.
 La CLI de Linux es muy potente: mientras que una GUI facilita muchas tareas, agrega complejidad y requiere más
recursos de la computadora para funcionar. La interfaz de línea de comandos (CLI) de Linux es muy potente y les
permite a los analistas realizar tareas no solo directamente en un terminal, sino también de manera remota, dado que
exige muy pocos recursos.
 El usuario tiene más control sobre el sistema operativo: el usuario de administrador en Linux, conocido como el
usuario root o superusuario, tiene poder absoluto sobre la computadora. A diferencia de otros sistemas operativos, el
usuario root puede modificar cualquier aspecto de la computadora con unas pocas pulsaciones de teclas. Esta
capacidad resulta especialmente útil cuando se trabaja con funciones de niveles inferiores, como la pila de red. Le
permite al usuario root tener un control preciso sobre la manera en que el sistema operativo maneja los paquetes de
red.
 Permite mejorar el control de comunicación de la red: el control es inherente a Linux. Debido a que es posible
cambiar y ajustar casi todos los aspectos del sistema operativo, es una gran plataforma para crear aplicaciones de
red. Por este mismo motivo, muchas excelentes herramientas de software con base en la red están disponibles
solamente para Linux.
Linux en el SOC

La flexibilidad que proporciona Linux es una característica grandiosa para el SOC.


Todo el sistema operativo se puede adaptar para convertirlo en la plataforma
perfecta de análisis de seguridad. Por ejemplo, los administradores pueden agregar
al sistema operativo solamente los paquetes necesarios para hacerlo rápido y
eficiente. Es posible instalar y configurar herramientas de software específicas para
trabajar en conjunto, lo que les permite a los administradores crear una
computadora personalizada que se adapta perfectamente al flujo de trabajo de un
SOC.

Estas son algunas herramientas que suelen encontrarse en un SOC:

 Software de captura de paquetes de red: este software se utiliza para la captura de paquetes de red. Se trata de
una herramienta fundamental para un analista del SOC, ya que permite observar y entender cada detalle de una
transacción de la red. En la figura, se ve una captura de pantalla de Wireshark, una herramienta de captura de
paquetes muy conocida.
 Herramientas de análisis de malware: en el caso de detección de nuevo malware, estas herramientas les permiten
a los analistas ejecutar y observar con seguridad el funcionamiento de malware sin poner en riesgo el sistema
subyacente.
 Sistemas de detección de intrusiones (Intrusion Detection System, IDS): estas herramientas se utilizan para el
monitoreo y la inspección de tráfico en tiempo real. Si cualquier aspecto del tráfico que fluye actualmente coincide con
cualquiera de las reglas establecidas, se ejecuta una acción previamente definida.
 Firewalls: este software se utiliza para especificar (según reglas predefinidas) si se permite el ingreso o la salida de
tráfico de la red.
 Gestores de registros: los archivos de registro se utilizan para registrar eventos. Dado que una red de gran tamaño
puede generar muchas entradas en el registro de eventos, los gestores de registros se emplean para facilitar el
monitoreo de los registros.
 Administración de información y eventos de seguridad (SIEM): esta herramienta proporciona análisis en tiempo
real de alertas y entradas del registro que hayan generado dispositivos de red, como IDS y firewalls.
 Sistemas de tickets: la asignación, edición y registro de tickets se realiza a través de un sistema de gestión de
tickets.

Herramientas de Linux

Además de herramientas específicas para el SOC, las computadoras de


Linux utilizadas en el SOC suelen tener herramientas de pruebas de
penetración. También conocida como PenTesting, una prueba de
penetración es el proceso de atacar una red o computadora en busca de
vulnerabilidades. Algunos ejemplos de herramientas de PenTesting son los
generadores de paquetes, los escáneres de puertos y los ataques de
prueba de concepto.

Kali Linux es una distribución Linux creada para agrupar muchas


herramientas de penetración. Kali contiene una amplia selección de
herramientas de pruebas de penetración. En la figura, se ve una captura de
pantalla de Kali Linux. Observe todas las categorías principales de
herramientas de pruebas de penetración.
El shell de Linux

En Linux, el usuario se comunica con el sistema operativo mediante la CLI o GUI. A menudo, Linux arranca en la GUI por
defecto y oculta la CLI del usuario. Una manera de tener acceso a la CLI desde la GUI es mediante una aplicación de
emulación de terminales. Estas aplicaciones permiten que el usuario tenga acceso a la CLI y, generalmente, se denominan
con alguna variación de la palabra “terminal”. En Linux, los emuladores de terminal comunes son Terminator, eterm, xterm,
konsole y gnome-terminal.

Haga clic aquí para experimentar la CLI de Linux en su navegador web. Escriba el comando ls para obtener una lista del
contenido del directorio actual. Mantenga la ficha abierta si desea probar algunos de los demás comandos que veremos en
este capítulo.

En la figura, se ve gnome-terminal, un emulador de terminal popular de Linux.

Nota: Los términos shell, consola, ventana de la consola, terminal de la CLI y ventana del terminal suelen usarse
indistintamente.

Comandos básicos

Los comandos de Linux son programas creados para realizar una tarea específica. Use el comando man (abreviatura de
manual) para obtener documentación sobre comandos. Por ejemplo, el comando man ls proporciona documentación sobre
el comando ls del manual del usuario.

Dado que los comandos son programas almacenados en el disco, cuando un usuario escribe un comando, el shell debe
encontrarlo en el disco antes de poder ejecutarlo. El shell busca comandos escritos por el usuario en directorios específicos
e intenta ejecutarlos. La lista de directorios en la que busca el shell se denomina ruta. La ruta contiene muchos directorios
utilizados comúnmente para almacenar los comandos. Si un comando no está en la ruta, el usuario debe especificar su
ubicación, o el shell no podrá encontrarlo. Los usuarios pueden agregar fácilmente directorios a la ruta si es necesario.

Para invocar un comando en el shell, simplemente escriba su nombre. El shell intentará encontrarlo en la ruta del sistema y
lo ejecutará.

En la Figura 1 y la Figura 2, se ve una lista de algunos comandos básicos de Linux y sus funciones.
Nota : En este texto, se da por sentado que el usuario tiene los permisos adecuados para ejecutar el comando. El tema
sobre los permisos de archivos en Linux se analiza más adelante en este capítulo.

Comandos de archivo y de directorio

Muchas herramientas de línea de comando están incluidas en Linux de manera predeterminada. Para ajustar el
funcionamiento del comando, los usuarios pueden añadir los parámetros y los modificadores al comando. En la figura, se
ven algunos de los comandos más comunes relacionados con archivos y directorios.
Trabajar con archivos de texto

Linux tiene muchos editores de texto diferentes, con diversas características y funciones. Algunos editores de texto incluyen
interfaces gráficas, mientras que otros son solamente herramientas de líneas de comando. Cada editor de texto incluye un
conjunto de características diseñado para admitir una tarea específica. Algunos editores de texto se centran en la
programación e incluyen funciones, como resaltado de sintaxis, corchetes, paréntesis, verificación y otras características
orientadas a la programación.

Si bien los editores de texto gráficos son prácticos y fáciles de usar, los basados en la línea de comando son muy
importantes para los usuarios de Linux. El principal beneficio de los editores de texto basados en la línea de comando es
que permiten editar un archivo de texto desde una computadora remota.

Consideren el siguiente escenario: un usuario tiene que realizar tareas administrativas en una computadora con Linux pero
no está frente al equipo. Entonces, utiliza SSH para iniciar una shell remota a la computadora remota. En la shell remota
basada en texto, es posible que la interfaz gráfica no esté disponible y eso hace que resulte imposible trabajar con una
herramienta como el editor de texto gráfico. En este tipo de situación, los programas con base en texto son cruciales.

En la figura, se ve nano, un editor de texto de línea de comando popular. El administrador está editando las reglas del
firewall. Los editores de texto suelen utilizarse para la configuración del sistema y el mantenimiento en Linux.

Debido a la falta de soporte gráfico, nano (o GNU nano) se puede controlar solamente con el teclado. Por
ejemplo, CTRL+O permite guardar el archivo actual y CTRL+W permite abrir el menú de búsqueda. GNU nano utiliza una
barra de accesos directos de dos líneas en la parte inferior de la pantalla; allí se incluyen los comandos del contexto actual.
Presione CTRL+G para ingresar en la pantalla de ayuda y ver una lista completa de comandos.

La importancia de los archivos de texto en Linux

En Linux, todo se trata como un archivo; esto incluye la memoria, los discos, el monitor, los archivos y los directorios. Por
ejemplo, desde el punto de vista del sistema operativo, mostrar información en pantalla significa escribir en el archivo que
representa el dispositivo de pantalla. No debería sorprendernos que la propia computadora esté configurada mediante
archivos. Estos archivos, conocidos como archivos de configuración, suelen ser archivos de texto utilizados para almacenar
ajustes y configuraciones de aplicaciones o servicios específicos. En Linux, prácticamente todo depende de archivos de
configuración para funcionar. Algunos servicios no tienen solo uno, sino varios archivos de configuración.

Los usuarios con los niveles de permisos correctos pueden usar editores de texto para cambiar el contenido de los archivos
de configuración. Después de realizados los cambios, se guarda el archivo que ya puede ser utilizado por el servicio o la
aplicación relacionados. Los usuarios pueden especificar exactamente cómo quieren que se comporte cualquier aplicación
o servicio determinado. Cuando se abren, los servicios y las aplicaciones comprueban el contenido de archivos de
configuración específicos para ajustar su comportamiento en consecuencia.
En la figura, el administrador abrió el archivo de configuración host en nano para editarlo. Solamente el superusuario puede
cambiar el archivo host.

Nota: El administrador usó el comando sudo nano/etc/hosts para abrir el archivo. El comando sudo (abreviatura de
“superuser do”, es decir, “acción del superusuario”) invoca el privilegio de superusuario para usar el editor de texto nano a
fin de abrir el archivo host.

Una introducción a las comunicaciones entre clientes y servidores

Los servidores son computadoras con software instalado que les permite ofrecer servicios a clientes. Existen muchos tipos
de servicios. Algunos proporcionan recursos a los clientes cuando lo solicitan, como archivos, mensajes de correo
electrónico o páginas web. Otros servicios ejecutan tareas de mantenimiento, como la administración de registros y de la
memoria, análisis de disco y mucho más. Cada servicio requiere un software de servidor independiente. Por ejemplo, el
servidor en la figura requiere un software de servidor de archivos para proporcionar a los clientes la capacidad de recuperar
y enviar archivos.
El tema sobre comunicaciones entre clientes y servidores se analizará en mayor detalle más adelante en el curso.

Servidores, servicios y sus puertos

Para que una computadora sea el servidor de varios servicios, se utilizan los puertos. Un puerto es un recurso de red
reservado utilizado por un servicio. Se dice que un servidor “escucha” en un puerto cuando se asocia a dicho puerto.

Mientras que el administrador puede decidir qué puerto utilizar con cualquier servicio, muchos clientes están configurados
para utilizar un puerto específico de manera predeterminada. Para hacerlo más fácil para el cliente, es habitual dejar el
servicio ejecutándose en su puerto predeterminado. En la figura, se ven algunos puertos utilizados comúnmente y sus
servicios. A estos también se los denomina “puertos conocidos”.

El tema de los puertos y su uso en las comunicaciones de red se analiza en mayor detalle más adelante en el curso.

Clientes

Los clientes son programas o aplicaciones cuyo objetivo es comunicarse con un servidor específico. También conocidos
como aplicaciones cliente, los clientes usan un protocolo bien definido para comunicarse con el servidor. Los navegadores
web son clientes web utilizados para comunicarse con servidores web mediante el protocolo de transferencia de hipertexto
(HTTP). El cliente del protocolo de transferencia de archivos (FTP) es un software utilizado para comunicarse con un
servidor FTP. En la figura, se ve a un cliente cargando archivos a un servidor.

Archivos de configuración de servicios

En Linux, los servicios se administran por medio de archivos de configuración. Las opciones frecuentes son el número de
puerto, la ubicación de recursos alojados y los detalles de autorización del cliente. Cuando el servicio se inicia, busca sus
archivos de configuración, los carga en la memoria y se ajusta conforme a la configuración presente en los archivos. A
menudo, las modificaciones del archivo de configuración requieren el reinicio del servicio antes de que los cambios surtan
efecto.

Debido a que los servicios suelen requerir privilegios de superusuario para ejecutarse, los archivos de configuración del
servicio suelen exigir privilegios de superusuario para la edición.

En la Figura 1, se ve una parte del archivo de configuración de Nginx, un servidor web ligero para Linux.
En la Figura 2, se ve el archivo de configuración del protocolo de tiempo de red (NTP).

En la Figura 3, se ve el archivo de configuración de Snort, un sistema de detección de intrusiones (IDS) con base en Linux.

No existe ninguna regla de formato para el archivo de configuración; es decisión del desarrollador del servicio. Sin embargo,
el formato option = valuees de uso frecuente. Por ejemplo, en la Figura 3, la variable ipvar está configurada con varias
opciones. La primera opción, HOME_NET, tiene el valor 209.165.200.224/27.

Nota: Es posible que deba desplazarse hacia abajo en la Figura 3 para ver este ejemplo.

Fortalecimiento de dispositivos

El fortalecimiento de dispositivos consiste en implementar métodos probados para proteger el dispositivo y su acceso
administrativo. Algunos de estos métodos implican el mantenimiento de contraseñas, la configuración de características de
inicio de sesión remoto mejorado y la implementación de SSH. Definir funciones administrativas en términos de acceso es
otro aspecto importante para proteger los dispositivos de la infraestructura, ya que no todo el personal de tecnología de la
información debe tener el mismo nivel de acceso a los dispositivos de la infraestructura.

De acuerdo con la distribución de Linux, muchos servicios están habilitados de manera predeterminada. Algunas de estas
características se habilitaron por motivos particulares y ya no son necesarias. Detener estos servicios y garantizar que no
se inicien automáticamente al momento del arranque constituye otra técnica de fortalecimiento de dispositivos.

Las actualizaciones del sistema operativo también son fundamentales para mantener un dispositivo fortalecido. Todos los
días se detectan nuevas vulnerabilidades. Los desarrolladores de sistemas operativos crean y publican correcciones y
parches con frecuencia. Una computadora actualizada corre un riesgo menor de verse afectada.

En la figura, se ven algunos pasos básicos recomendados para el fortalecimiento de dispositivos. Existen muchas otras
medidas que suelen depender del servicio o las aplicaciones.

Monitoreo de los registros de servicio

Los archivos de registro son los datos que almacena una computadora para llevar un registro de eventos importantes.
Todos los eventos del kernel, los servicios y las aplicaciones se registran en archivos de registro. Es muy importante que un
administrador revise periódicamente los registros de una computadora para mantenerla libre de problemas. Mediante el
monitoreo de archivos de registro de Linux, un administrador obtiene un panorama claro del desempeño de la computadora,
el estado de la seguridad y cualquier problema subyacente. El análisis de archivos de registro le permite a un administrador
protegerse contra futuros problemas antes de que ocurran.

En Linux, los archivos de registro pueden clasificarse del siguiente modo:

 Registros de aplicaciones
 Registros de eventos
 Registros de servicios
 Registros del sistema

Algunos registros contienen información acerca de daemons que se están ejecutando en el sistema Linux. Un daemon es
un proceso en segundo plano que se ejecuta sin necesidad de interactuar con el usuario. Por ejemplo, el daemon de
servicios de seguridad del sistema (SSSD) gestiona autenticación para capacidades de inicio de sesión únicas y acceso
remoto. A continuación, se muestran algunos archivos de registro de Linux populares y sus funciones:

 /var/log/messages: este directorio contiene registros de actividad genéricos de la computadora. Principalmente, se


emplea para guardar mensajes informativos y no críticos del sistema. En computadoras con base en Debian, el
directorio /var/log/syslog tiene el mismo propósito.
 /var/log/auth.log: este archivo almacena todos los eventos relacionados con la autenticación en computadoras
Debian y Ubuntu. En este archivo, es posible encontrar cualquier información relacionada con el mecanismo de
autorización de usuario.
 /var/log/secure: las computadoras con RedHat y CentOS usan este directorio en lugar de /var/log/auth.log. También
realiza un seguimiento de inicios de sesión de sudo y de SSH, y otros errores registrados por SSSD.
 /var/log/boot.log: este archivo almacena información relacionada con el arranque y los mensajes registrados durante
el proceso de inicio de la computadora.
 /var/log/dmesg: este directorio contiene mensajes del búfer de anillo del kernel. Aquí se registra la información
relacionada con dispositivos de hardware y sus controladores. Es muy importante porque, debido a su nivel bajo, los
sistemas de registro (como syslog) no se ejecutan cuando estos eventos suceden y, por lo tanto, no suelen estar
disponibles para el administrador en tiempo real.
 /var/log/kern.log: este archivo contiene información registrada por el kernel.
 /var/log/cron: cron es un servicio utilizado para programar tareas automatizadas en Linux y sus eventos se
almacenan en este directorio. Cada vez que se ejecuta una tarea programada (también llamada tarea de cron), toda
la información pertinente se almacena aquí, incluidos el estado de ejecución y los mensajes de error.
 /var/log/mysqld.log o /var/log/mysql.log: este es el archivo de registro de MySQL. Aquí se registran todos los
mensajes de depuración, error y éxito relacionados con el proceso mysqld y el demonio mysqld_safe. RedHat,
CentOS y Fedora almacenan registros de MySQL en /var/log/mysqld.log, mientras que Debian y Ubuntu mantienen
los registros en el archivo /var/log/mysql.log.

En la figura, se ve una parte del archivo de registro /var/log/syslog. Cada línea representa un evento registrado. Las
marcas de hora en el comienzo de las líneas marcan el momento en que ocurrió el evento.

Los tipos de sistema de archivos en Linux

Hay muchos tipos diferentes de sistemas de archivos, que varían en términos de velocidad, flexibilidad, seguridad, tamaño,
estructura, lógica y mucho más. Es el administrador quien decide qué tipo de sistema de archivos se adapta mejor al
sistema operativo y los archivos que almacenará. A continuación, se enumeran algunos tipos de sistemas de archivos
habituales que admite Linux:
 ext2 (segundo sistema de archivos extendido): ext2 fue el sistema de archivos predeterminado en varias
distribuciones de Linux principales, hasta que lo sustituyó ext3. Casi totalmente compatible con ext2, ext3 admite el
registro por diario (ver más abajo). ext2 es todavía el sistema de archivos preferido para medios de almacenamiento
con base en flash, ya que la ausencia del registro por diario aumenta el rendimiento y minimiza la cantidad de
escrituras. Dado que los dispositivos de memoria flash tienen una cantidad limitada de operaciones de escritura,
reducir estas operaciones al mínimo aumenta la vida útil del dispositivo. Sin embargo, los kernels de Linux
contemporáneos también admiten ext4, un sistema de archivos todavía más moderno, con mejor rendimiento y que
también puede funcionar sin usar el registro por diario.
 ext3 (tercer sistema de archivos extendido): ext3 es un sistema de archivos con registro por diario diseñado para
mejorar el sistema de archivos ext2 existente. Un diario, la principal característica que se agregó a ext3, es una
técnica que se utiliza para minimizar el riesgo de corrupción del sistema de archivos en caso de una interrupción
repentina en el suministro de corriente. Los sistemas de archivos mantienen un registro (o diario) de todos los
cambios que están por realizarse en el sistema de archivos. Si la computadora deja de funcionar antes de que el
cambio se complete, el diario puede utilizarse para restaurar o corregir cualquier posible problema provocado por la
interrupción. El tamaño máximo de archivo en sistemas de archivos ext3 es de 32 TB.
 ext4 (cuarto sistema de archivos extendido): diseñado como el sucesor de ext3, ext4 fue creado en función de una
serie de extensiones para ext3. Aunque las extensiones mejoraban el rendimiento de ext3 y aumentaban el tamaño
de los archivos admitidos, a los desarrolladores del kernel de Linux les preocupaba la estabilidad y se opusieron a
añadir las extensiones al sistema ext3 estable. El proyecto de ext3 se dividió en dos: un sistema se mantiene como
ext3 y continúa su desarrollo normal, y el otro, llamado ext4, incorpora las extensiones mencionadas.
 NFS (sistema de archivos de red): NFS es un sistema de archivos con base en la red que permite el acceso a
archivos en la red. Desde el punto de vista del usuario, no hay diferencia entre el acceso a un archivo almacenado
localmente o en otra computadora en la red. NFS es un estándar abierto que permite que nadie lo implemente.
 CDFS (sistema de archivos de disco compacto ): CDFS se creó específicamente para medios de disco óptico.
 Sistema de archivos swap: Linux utiliza el sistema de archivos swap cuando se queda sin RAM. Técnicamente,
swap es una partición de intercambio que no tiene un sistema de archivos específico, pero debe incluirse en el
análisis de sistemas de archivos. Cuando Linux se queda sin RAM, el kernel mueve el contenido inactivo de la RAM a
la partición swap en el disco. Mientras que las particiones swap (también conocidas como espacio de intercambio)
pueden ser útiles para computadoras Linux con una cantidad limitada de memoria, no deben considerarse una
solución principal. La partición swap se almacena en un disco que tiene velocidades de acceso mucho menores que
la RAM.
 HFS Plus o HFS+ (sistema de archivos jerárquico plus): sistema de archivos utilizado por Apple en sus
computadoras Macintosh. El kernel de Linux incluye un módulo para montar HFS+ para las operaciones de lectura y
escritura.
 APFS (sistema de archivos de Apple): un sistema de archivos actualizado utilizado por los dispositivos Apple que
proporciona un cifrado fuerte y está optimizado para memorias flash y discos de estado sólido.
 Registro principal de arranque (MBR): situado en el primer sector de una computadora con particiones, el MBR
almacena toda la información sobre la manera en que está organizado el sistema de archivos. El MBR le cede
rápidamente el control a una función de carga para que realice la carga el sistema operativo.

El término que se utiliza para el proceso de asignación de un directorio a una partición es montaje. Después de una
operación de montaje exitosa, al sistema de archivos contenido en la partición se puede acceder a través del directorio
especificado. En este contexto, el directorio se llama el punto de montaje para ese sistema de archivos. Es posible que los
usuarios de Windows estén familiarizados con un concepto similar: la letra de unidad.

En la figura, se ve el resultado del comando mount emitido en la VM de CyberOPS de Cisco. Cuando se emite sin
opciones, el comando mountarroja la lista de sistemas de archivos actualmente montados en una computadora con Linux.
Mientras que muchos de los sistemas de archivos que se muestran no forman parte del alcance de este curso, preste
atención al sistema de archivos raíz (resaltado). El sistema de archivos raíz está representado por el símbolo “/” y contiene
todos los archivos predeterminados de la computadora. En la figura, también se ve que el sistema de archivos raíz se
formateó como ext4 y ocupa la primera partición de la primera unidad (/dev/sda1).
Roles de Linux y permisos de archivo

En Linux, se trata a la mayoría de las entidades de sistema como archivos. Con el objetivo de organizar el sistema y
reforzar los límites dentro de la computadora, Linux usa permisos de archivos. Los permisos de archivos están integrados
en la estructura del sistema de archivos y proporcionan un mecanismo para definir los permisos de cada archivo. Cada
archivo en los sistemas Linux trae sus permisos de archivo que definen las acciones que el propietario, el grupo y otros
pueden hacer con el archivo. Los posibles permisos son leer, escribir y ejecutar. El comando ls con el parámetro -l detalla
información adicional sobre el archivo. Observe el resultado del comando ls -l en la Figura 1:

El resultado proporciona mucha información sobre el archivo space.txt:

El primer campo del resultado permite ver los permisos asociados con space.txt (-rwxrw-r--). Los permisos de archivo
siempre aparecen en el siguiente orden: Usuario, Grupo y Otros. El archivo space.txt en la Figura 1 tiene los siguientes
permisos:

 El guion (-) indica que se trata de un archivo. En el caso de los directorios, el primer guion se reemplazaría por una
“d”.
 El primer conjunto de caracteres es para el permiso de usuario (rwx). El usuario (analyst) que posee el archivo puede
leer (Read), escribir (Write) y ejecutar (eXecute) el archivo.
 El segundo conjunto de caracteres es para los permisos de grupo (rw-). El grupo (staff) que posee el archivo puede
leer (Read) y escribir (Write) el archivo.
 El tercer conjunto de caracteres es para cualquier otro permiso de usuario o de grupo (r--). Cualquier otro usuario o
grupo de la computadora solo puede leer (Read) el archivo.

El segundo campo define la cantidad de enlaces físicos hacia el archivo (el número 1 después de los permisos). Un enlace
físico crea otro archivo con un nombre diferente vinculado al mismo lugar en el sistema de archivos (se lo denomina inodo).
Esto es diferente del enlace simbólico, que se analiza en la siguiente página.

El tercer y cuarto campo muestran el usuario (analyst) y el grupo (staff) que poseen el archivo, respectivamente.
El quinto campo muestra el tamaño del archivo en bytes. El archivo space.txt tiene 253 bytes.
El sexto campo muestra la fecha y hora de la última modificación.
El séptimo campo muestra el nombre del archivo.

En la Figura 2, se ve un desglose de los permisos de archivos en Linux. Los permisos de archivos son una parte
fundamental de Linux y no se pueden eliminar. Un usuario tiene tantos derechos sobre un archivo como se lo permiten los
permisos de archivo. El único usuario que puede anular el permiso de archivo en una computadora con Linux es el
usuario root. Como el usuario raíz tiene la capacidad para anular permisos de archivos, puede escribir en cualquier archivo.
Dado que todo se trata como un archivo, el usuario root tiene control total sobre la computadora Linux. El acceso raíz se
requiere a menudo antes de realizar el mantenimiento y las tareas administrativas.
Enlaces físicos y enlaces simbólicos

Un enlace rígido es otro archivo que apunta a la misma ubicación que el archivo original. Utilice el comando ln para crear
un enlace físico. El primer argumento es el archivo existente y, el segundo, el archivo nuevo. El archivo space.txt está
vinculado a space.hard.txt en la Figura 1 y el campo de enlace ahora muestra 2. Ambos archivos apuntan a la misma
ubicación en el sistema de archivos. Si cambia un archivo, el otro también cambia. El comando echo se utiliza para añadir
texto a space.txt. Observe que el tamaño de archivo para ambos space.txt y space.hard.txt aumentó a 273 bytes. Si se
elimina space.hard.txt con el comando rm (eliminar), el archivo space.txt continúa existiendo, como se comprueba con el
comando more space.txt.

Un enlace simbólico, también llamado enlace suave o symlink, es similar a un enlace físico en el sentido en que aplicar
cambios a un enlace simbólico también cambia el archivo original. Como se ve en la Figura 2, use la opción -s del
comando ln para crear un enlace simbólico. Observe que añadir una línea de texto a test.txt también agrega la línea
a mytest.txt. Sin embargo, a diferencia de un enlace físico, eliminar el archivo original text.txt implica que mytext.txt ahora
está vinculado a un archivo que ya no existe, como se muestra con los comandos more mytest.txt y ls -l mytest.txt.

Aunque los enlaces simbólicos tienen un punto único de falla (el archivo subyacente), los enlaces simbólicos tienen varios
beneficios respecto de los enlaces físicos:

 Es más difícil localizar enlaces físicos. Los enlaces simbólicos muestran la ubicación del archivo original en el
comando ls -l, tal como se ve en la última línea del resultado de la Figura 2 (mytest.txt -> test.txt).
 Los enlaces físicos se limitan al sistema de archivos en el que se crean. Los enlaces simbólicos pueden estar
vinculados a un archivo en otro sistema de archivos.
 Los enlaces físicos no pueden estar vinculados a un directorio porque el propio sistema utiliza enlaces físicos para
definir la jerarquía de la estructura de directorios. Sin embargo, los enlaces simbólicos pueden estar vinculados a
directorios.
Sistema de ventanas X

La interfaz gráfica presente en la mayoría de las computadoras Linux tiene como base el sistema X Window. También
conocido como X o X11, X Window es un sistema de ventanas diseñado para proporcionar el marco de trabajo básico para
una GUI. X incluye funciones para dibujar y mover ventanas en el dispositivo de visualización, e interactuar con un mouse y
un teclado.

X funciona como un servidor y, como tal, le permite a un usuario remoto utilizar la red para conectarse, iniciar una
aplicación gráfica y mantener la ventana de gráficos abierta en el terminal remoto. Mientras la aplicación propiamente dicha
se ejecuta en el servidor, la apariencia gráfica se envía por X a través de la red y se ve en la computadora remota.

Tenga en cuenta que X no especifica la interfaz de usuario y deja que otros programas, como los gestores de ventanas,
definan todos los componentes gráficos. Esta abstracción otorga gran flexibilidad y personalización, ya que es la aplicación
del usuario la que define los componentes gráficos, como botones, fuentes, iconos, bordes de ventanas y esquemas de
color. Debido a esta separación, la GUI de Linux varía enormemente de una distribución a otra. Ejemplos de gestores de
ventanas son Gnome y KDE, como se ve en las Figuras 1 y 2, respectivamente.

Mientras que el aspecto de los gestores de ventanas varía, los componentes principales permanecen presentes.

Haga clic aquí para obtener más información sobre Gnome.


Haga clic aquí para obtener más información sobre KDE.
La GUI de Linux

Aunque un sistema operativo no necesita una GUI para funcionar, las GUI se consideran más fáciles de usar que la CLI. El
usuario puede reemplazar fácilmente la GUI de Linux en su totalidad. Como resultado de la gran cantidad de distribuciones
de Linux, en este capítulo, nos centraremos en Ubuntu al hablar de Linux, ya que es una distribución muy popular y fácil de
usar.

Ubuntu Linux utiliza Unity como la GUI predeterminada. El objetivo de Unity es hacer que Ubuntu sea todavía más fácil de
usar. Los componentes principales de la UI de Unity incluyen los siguientes:

 Barra de menú superior: esta barra de menú multipropósito contiene la aplicación actualmente en ejecución. Incluye
los botones para maximizar, minimizar y cerrar la aplicación que se utiliza, así como las demás opciones del sistema,
entre ellas, configuración, cerrar sesión, apagar, reloj y otras notificaciones.

 Selector: es un panel que se ubica en el lado izquierdo de la pantalla y que sirve para iniciar y cambiar de
aplicaciones. Haga clic para iniciar una aplicación y, cuando la aplicación se esté ejecutando, haga clic otra vez para
cambiar entre las aplicaciones en ejecución. Si se está ejecutando más de una instancia de una aplicación, el
Selector mostrará todas las instancias.

 Quicklist: haga clic con el botón secundario del mouse en cualquier aplicación que se encuentre en el Selector para
acceder a una breve lista de las tareas que puede realizar la aplicación.

 Cuadro de búsqueda del tablero: contiene la herramienta de búsqueda y una lista de aplicaciones utilizadas
recientemente. El tablero (o Dash) incluye lentes en la parte inferior del área del tablero que les permiten a los
usuarios ajustar los resultados de búsqueda. Para acceder al tablero, haga clic en el botón de Ubuntu en la parte
superior del Selector.
 Menú de sistema y notificaciones: muchas funciones importantes se encuentran en el menú del indicador, situado
en la esquina superior derecha de la pantalla. Use el menú de indicador para cambiar a los usuarios, apagar la
computadora, controlar el nivel de volumen o cambiar la configuración de red.

En la figura, se ve el desglose del escritorio de Unity en Ubuntu.


Haga clic aquí para experimentar con el escritorio de Unity en su navegador web.

Instalar y ejecutar aplicaciones en un host de Linux

Muchas aplicaciones de usuario final son programas complejos escritos en lenguajes compilados. Para ayudar en el
proceso de instalación, Linux suele incluir programas llamados administradores de paquetes. Un paquete es el término
utilizado para referirse a un programa y a todos sus archivos compatibles. El uso de un administrador de paquetes para
instalar un paquete permite colocar todos los archivos necesarios en la ubicación correcta en el sistema de archivos.

Existen varios administradores de paquetes. Para este curso, utilizaremos el administrador de paquetes Advanced
Packaging Tool (apt). En la figura, se ve el resultado de algunos comandosapt. El comando apt-get update se utiliza para
recuperar la lista de paquetes desde el repositorio y actualizar la base de datos de paquetes local. El comando apt-get
upgrade se utiliza para actualizar todos los paquetes actualmente instalados a sus versiones más recientes.
Mantener el sistema actualizado

También conocidas como parches, las actualizaciones del sistema operativo son publicadas periódicamente por empresas
de sistemas operativos para abordar cualquier vulnerabilidad conocida en sus sistemas operativos. Aunque las empresas
tienen programadas las actualizaciones, la publicación de actualizaciones no programadas del sistema operativo puede
suceder si se detecta una vulnerabilidad importante en el código del sistema operativo. Los sistemas operativos modernos
alertarán al usuario cuando las actualizaciones estén disponibles para la descarga e instalación, pero el usuario puede
comprobar si hay actualizaciones en cualquier momento.

Para actualizar la base de datos local de metadatos de paquetes usando la CLI, emita el comando apt-get update.
Para actualizar todos los paquetes instalados actualmente mediante la CLI, utilice el comandoapt-get upgrade.
Para comprobar manualmente si hay actualizaciones e instalarlas en Linux mediante la GUI, siga esta ruta:
Haga clic en el Cuadro de búsqueda del tablero >escriba software updater > haga clic en el icono Software Updater ,
como se ve en la figura.

Procesos y bifurcaciones

Un proceso es una instancia en ejecución de un programa informático. Los sistemas operativos multitarea pueden ejecutar
varios procesos al mismo tiempo.

El plegamiento es un método que utiliza el kernel para permitir que un proceso cree una copia de sí mismo. Los procesos
necesitan una manera de crear nuevos procesos en los sistemas operativos multitarea. La bifurcación es la única manera
de lograr esto en Linux.

La bifurcación es importante por muchas razones. Una de ellas se relaciona con la escalabilidad de los procesos. Apache,
un servidor web muy conocido, es un buen ejemplo de ello. Gracias a que puede bifurcarse a sí mismo, Apache es capaz
de responder a una gran cantidad de solicitudes con menos recursos de sistema que un servidor con base en procesos
individuales.

Cuando un proceso solicita la bifurcación, el proceso que realiza la solicitud se convierte en el proceso principal, y el
proceso recién creado se denomina subproceso. Después de la bifurcación, los procesos son, en cierta medida,
independientes; tienen diferentes identificaciones, pero ejecutan el mismo código de programa.

A continuación, se enumeran algunos comandos utilizados para gestionar procesos:


 ps: este comando se utiliza para enumerar los procesos que se ejecutan en la computadora al momento de emitir el
comando. Se le puede indicar al comando ps que muestre los procesos en ejecución del usuario actual o de otros
usuarios. Si bien enumerar procesos no requiere privilegios de usuario root, sí lo exige interrumpir o modificar los
procesos de otros usuarios.
 top: este comando también se utiliza para enumerar procesos en ejecución pero, a diferencia de ps, top muestra los
procesos en ejecución de manera dinámica. Presione q para salir de top.
 kill:: este comando se utiliza para modificar el comportamiento de un proceso específico. Según los parámetros, kill
eliminará, reiniciará o detendrá un proceso. En muchos casos, el usuario ejecutará ps o top antes de emitir kill. Esto
se hace para que el usuario adquiera la PID de un proceso antes de ejecutar kill.

En la figura, se ve el resultado del comando top en una computadora con Linux.

Malware en un host de Linux

El malware de Linux incluye virus, troyanos, gusanos y otros tipos de malware que pueden afectar el sistema operativo.
Debido a una serie de componentes del diseño, como la estructura del sistema de archivos, los permisos de archivos y las
restricciones de las cuentas de usuario, es habitual considerar que los sistemas operativos Linux tienen mejor protección
contra malware.

Aunque se podría decir que está mejor protegido, Linux no es inmune al malware. Se han encontrado y aprovechado
muchas vulnerabilidades en Linux, desde vulnerabilidades en el software de servidor hasta vulnerabilidades en el kernel.
Los atacantes son capaces de aprovechar estas vulnerabilidades y poner en riesgo el sistema de destino. Debido a la
naturaleza de código abierto de Linux, los parches y las correcciones suelen estar disponibles apenas horas después de
detectar este tipo de problemas.

Si se ejecuta un programa malicioso, causará daños, independientemente de la plataforma. Un vector de ataque común en
Linux son sus servicios y procesos. Con frecuencia, las vulnerabilidades se detectan en el código de servidores y procesos
ejecutándose en computadoras conectadas a la red. Por ejemplo, una versión desactualizada del servidor web Apache
puede contener una vulnerabilidad sin parches que un atacante puede aprovechar. A menudo, los atacantes sondean
puertos abiertos para determinar la versión y naturaleza del servidor en ese puerto. Con ese conocimiento, los atacantes
pueden investigar si hay algún problema conocido con esa versión particular de ese servidor específico para mejorar el
ataque. Al igual que con la mayoría de las vulnerabilidades, mantener la computadora actualizada y cerrar todos los
servicios y puertos no utilizados es una buena manera de reducir las posibilidades de ataque en una computadora con
Linux.
En la figura vemos a un atacante que está utilizando el comando Telnet para sondear la naturaleza y versión de un
servidor web. El atacante descubrió que el servidor en cuestión está ejecutando nginx versión 1.12.0. El siguiente paso
sería investigar vulnerabilidades conocidas en el código de nginx 1.12.0.

Nota: Más adelante en el curso, se brindará información más detallada sobre este ataque.

Comprobación de rootkit

Un rootkit es un conjunto de herramientas de software diseñado para aumentar los privilegios de un usuario u otorgar
acceso a partes del software que no suelen estar disponibles sin autorización. Los rootkit también suelen usarse para
asegurar el ingreso a una puerta trasera de una computadora atacada.

Es posible automatizar la instalación de un rootkit (como parte de una infección) o un atacante puede instalarlo
manualmente después de atacar una computadora. Un rootkit es destructivo porque cambia el código del kernel y sus
módulos, lo que afecta las operaciones más fundamentales del sistema operativo propiamente dicho. Con un nivel tan
profundo de ataque, los rootkits pueden ocultar la intrusión, eliminar cualquier rastro de su instalación e incluso manipular
las herramientas de solución de problemas y diagnóstico para que oculten la presencia del rootkit en sus resultados.
Mientras que hay antecedentes de instalación de rootkits mediante cuentas de usuario comunes en Linux, la gran mayoría
de los ataques con rootkit requieren acceso de root o administrador.

Dado que se ve afectada la naturaleza misma de la computadora, la detección de rootkits puede ser muy difícil. Los
métodos de detección típicos suelen incluir arrancar la computadora desde medios confiables, como un CD con el sistema
operativo de diagnóstico ejecutado en directo. Se monta la unidad afectada y, desde el conjunto seguro de herramientas del
sistema, es posible iniciar herramientas de diagnóstico confiables para inspeccionar el sistema de archivos atacado. Los
métodos de inspección incluyen métodos basados en el comportamiento, y análisis de firmas, diferencias y volcado de
memoria.

La eliminación de rootkits puede ser complicada y, a menudo, es imposible, especialmente en casos en los que el rootkit
reside en el kernel. La reinstalación del sistema operativo suele ser la única solución real. Normalmente, los rootkits de
firmware requieren la sustitución de hardware.

El programa chkrootkit es un software popular con base en Linux diseñado para comprobar si la computadora tiene rootkits
conocidos. Es un script de shell que utiliza herramientas de Linux comunes, como cadenas y grep, para comparar las firmas
de los programas principales. También busca discrepancias mientras atraviesa el sistema de archivos /proc comparando las
firmas detectadas con el resultado del comando ps. Haga clic aquí para obtener más información sobre chkrootkit.

Aunque son útiles, recuerde que los programas para detectar rootkits no son infalibles.

En la figura, se ve el resultado de chkrootkit en un sistema Linux con Ubuntu.


Comandos de tuberías

Aunque las herramientas de línea de comando suelen diseñarse para realizar una tarea específica bien definida, muchos
comandos se pueden combinar para realizar tareas más complejas mediante una técnica conocida como tuberías. El
carácter que define el proceso de tubería es la barra vertical (|), y es un procedimiento que consiste en vincular comandos
entre sí, de manera que el resultado de un comando alimente la entrada de otro.

Por ejemplo, el comando ls se utiliza para mostrar todos los archivos y directorios de un directorio específico. El comando
grep realiza búsquedas en un archivo o texto para encontrar una cadena especificada. Si la encuentra, grep muestra todo el
contenido de la carpeta donde se encontró la cadena. Se puede aplicar el proceso de tubería a los dos comandos (ls y
grep) para filtrar el resultado de ls, como se ve en la figura con el comando ls -l | grep nimda.
Vídeo de demostración: Aplicaciones, rootkits y comandos de tuberías

Haga clic en el botón de reproducir para ver una demostración de la instalación y actualización de aplicaciones, la detección
de rootkits y el uso de comandos de tuberías.

Haga clic aquí para leer la transcripción de este vídeo.

Capítulo 3: Sistema operativo Linux

En este capítulo, aprendió cómo se utiliza el sistema operativo Linux en un entorno SOC. Esto incluye lo siguiente:

 Las herramientas de Linux se utilizan para el monitoreo y la investigación relacionados con la seguridad
 Cómo usar el shell de Linux para trabajar con directorios y archivos, y cómo crear, modificar, copiar y mover archivos
de texto
 La diferencia entre aplicaciones de servidor y de cliente

En este capítulo, también aprendió a realizar tareas básicas de administración de Linux, entre ellas:
 Cómo ver archivos de configuración de servicios
 ¿Qué características se deben fortalecer el dispositivo Linux?
 Los tipos y la ubicación de los archivos de registro de servicios utilizados con fines de monitoreo

También conoció los distintos tipos de sistemas de archivos de Linux, entre ellos:

 ext2, ext3 y ext4


 NFS
 CDFS
 Partición swap
 HFSf+
 Registro de arranque maestro

Aprendió cómo los roles y permisos de archivo determinan qué usuarios o grupos pueden tener acceso a determinados
archivos y si dichos usuarios o grupos tienen permisos para leer, escribir o ejecutar. También aprendió cómo el usuario root
o el propietario de un archivo pueden cambiar los permisos. Estos archivos pueden tener enlaces físicos o simbólicos. Un
enlace rígido es otro archivo que apunta a la misma ubicación que el archivo original. Un enlace simbólico, a veces llamado
enlace suave, es similar a un enlace físico en el sentido en que aplicar cambios a un enlace simbólico también cambia el
archivo original.

Finalmente, en este capítulo, aprendió cómo realizar tareas básicas relacionadas con la seguridad en un host de Linux,
como las siguientes:

 Instalar y ejecutar aplicaciones desde la línea de comando


 Mantener el sistema actualizado con apt-get update y apt-get upgrade
 Visualizar los procesos y derivaciones actuales que se están ejecutando en la memoria
 Usar chkrootkit para buscar rootkits conocidos en la computadora
 Utilizar canales para encadenar comandos, para convertir la salida de un comando en la entrada de otro

Como analista de ciberseguridad, necesita comprender nociones básicas sobre las características y funciones del sistema
operativo Linux y la manera en que se usa Linux en un entorno de SOC.

Potrebbero piacerti anche