Bienvenidos a este capítulo de este Curso de Linux para Hackers – Sistema de Archivos. Comparte este articulo y síguenos para recibir más capítulos, guías y cursos gratis.

Esta guía es parte de un curso mucho más grande en donde te enseñamos a convertirte en hacker de 0 a 100. Desde los conocimientos más básicos hasta conseguir empleo.

En esta guía veremos desde cero un tema tan amplio como es Linux y lo haremos desde el punto de vista del hacking y la ciberseguridad.

Para saber más comente a continuación, respondemos todos y cada uno de los comentarios.

Índice

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sistema de archivos Linux

El sistema de archivos es el corazón de cualquier sistema operativo, y en Linux, su comprensión es fundamental tanto para los administradores de sistemas como para los hackers. Un sistema de archivos es el método y la estructura que utiliza un sistema operativo para organizar y almacenar archivos.

Para los hackers, conocer en profundidad cómo funciona el sistema de archivos en Linux puede ser una ventaja crítica, ya que les permite navegar, manipular y ocultar información dentro del sistema. Este artículo se adentra en los aspectos más importantes del sistema de archivos en Linux y explora por qué su comprensión es vital para cualquier persona interesada en la seguridad informática.

Estructura del sistema de archivos de Linux

El sistema de archivos de Linux tiene una estructura de archivos jerárquica, ya que contiene un directorio raíz y sus subdirectorios. Se puede acceder a todos los demás directorios desde el directorio raíz. Una partición normalmente tiene solo un sistema de archivos, pero puede tener más de un sistema de archivos.

Un sistema de archivos está diseñado de manera que pueda administrar y proporcionar espacio para datos de almacenamiento no volátiles. Todos los sistemas de archivos requieren un espacio de nombres que es una metodología de organización y denominación. El espacio de nombres define el proceso de denominación, la longitud del nombre del archivo o un subconjunto de caracteres que se pueden utilizar para el nombre del archivo.

También define la estructura lógica de los archivos en un segmento de memoria, como el uso de directorios para organizar los archivos específicos. Una vez que se describe un espacio de nombres, se debe definir una descripción de metadatos para ese archivo en particular.

La estructura de datos debe admitir una estructura de directorio jerárquica; esta estructura se utiliza para describir el espacio en disco disponible y utilizado para un bloque en particular. También contiene otros detalles sobre los archivos, como el tamaño del archivo, la fecha y hora de creación, actualización y última modificación.

Además, almacena información avanzada sobre la sección del disco, como particiones y volúmenes. Los datos avanzados y las estructuras que representan contienen la información sobre el sistema de archivos almacenado en la unidad; son distintos e independientes de los metadatos del sistema de archivos. El sistema de archivos de Linux contiene una arquitectura de implementación de software de sistema de archivos de dos partes. Observe la siguiente imagen:

El sistema de archivos requiere una API (interfaz de programación de aplicaciones) para acceder a las llamadas de función para interactuar con los componentes del sistema de archivos, como archivos y directorios. La API facilita tareas como la creación, eliminación y copia de archivos. Facilita un algoritmo que define la disposición de los archivos en un sistema de archivos.

Las dos primeras partes del sistema de archivos dado se denominan conjuntamente sistema de archivos virtual de Linux . Proporciona un único conjunto de comandos para que el núcleo y los desarrolladores accedan al sistema de archivos. Este sistema de archivos virtual requiere que el controlador del sistema específico proporcione una interfaz al sistema de archivos.

Características del sistema de archivos de Linux

En Linux, el sistema de archivos crea una estructura de árbol. Todos los archivos están organizados en forma de árbol y sus ramas. El directorio superior se denomina directorio raíz (/) . Se puede acceder a todos los demás directorios de Linux desde el directorio raíz.

Algunas características clave del sistema de archivos Linux son las siguientes:

  • Especificación de rutas: Linux no utiliza la barra invertida (\) para separar los componentes, sino que utiliza la barra diagonal (/) como alternativa. Por ejemplo, al igual que en Windows, los datos pueden almacenarse en C:\ Mis documentos\ Trabajo, mientras que, en Linux, se almacenarían en /home/ Mis documentos/ Trabajo.
  • Particiones, directorios y unidades: Linux no utiliza letras de unidad para organizar las unidades como lo hace Windows. En Linux, no podemos saber si nos estamos dirigiendo a una partición, a un dispositivo de red o a un directorio “normal” y una unidad.
  • Distinción entre mayúsculas y minúsculas: el sistema de archivos de Linux distingue entre mayúsculas y minúsculas. Por ejemplo, existe una diferencia entre test.txt y Test.txt en Linux. Esta regla también se aplica a los directorios y comandos de Linux.
  • Extensiones de archivos: En Linux, un archivo puede tener la extensión ‘.txt’, pero no es necesario que un archivo tenga una extensión de archivo. Al trabajar con Shell, a los principiantes les genera algunos problemas diferenciar entre archivos y directorios. Si utilizamos el administrador de archivos gráfico, simboliza los archivos y las carpetas.
  • Archivos ocultos: Linux distingue entre archivos estándar y archivos ocultos. La mayoría de los archivos de configuración están ocultos en el sistema operativo Linux. Por lo general, no necesitamos acceder ni leer los archivos ocultos. Los archivos ocultos en Linux se representan con un punto (.) antes del nombre del archivo (por ejemplo, .ignore). Para acceder a los archivos, necesitamos cambiar la vista en el administrador de archivos o usar un comando específico en el shell.

¿Qué es el sistema de archivos de Linux?

El sistema de archivos de Linux es una estructura multifacética compuesta por tres capas esenciales. En su base, el sistema de archivos lógico sirve como interfaz entre las aplicaciones de usuario y el sistema de archivos, gestionando operaciones como abrir, leer y cerrar archivos. Por encima de esto, el sistema de archivos virtual facilita el funcionamiento simultáneo de varios sistemas de archivos físicos, proporcionando una interfaz estandarizada para la compatibilidad.

 Por último, el sistema de archivos físico es responsable de la gestión tangible y el almacenamiento de bloques de memoria física en el disco, garantizando una asignación y recuperación de datos eficientes. Juntas, estas capas forman una arquitectura cohesiva, orquestando el manejo organizado y eficiente de los datos en el sistema operativo Linux.

Estructura del sistema de archivos de Linux

Un sistema de archivos consta principalmente de 3 capas. De arriba a abajo:

Sistema de archivos lógico:

El sistema de archivos lógico actúa como interfaz entre las aplicaciones del usuario y el propio sistema de archivos. Facilita operaciones esenciales como abrir, leer y cerrar archivos. Básicamente, funciona como interfaz fácil de usar, lo que garantiza que las aplicaciones puedan interactuar con el sistema de archivos de una manera que se ajuste a las expectativas del usuario.

Sistema de archivos virtuales:

El sistema de archivos virtual (VFS) es una capa crucial que permite el funcionamiento simultáneo de varias instancias de sistemas de archivos físicos. Proporciona una interfaz estandarizada que permite que diferentes sistemas de archivos coexistan y funcionen simultáneamente. Esta capa abstrae las complejidades subyacentes, lo que garantiza la compatibilidad y la cohesión entre las distintas implementaciones de sistemas de archivos.

Sistema de archivos físicos:

El sistema de archivos físicos es responsable de la gestión y el almacenamiento tangibles de los bloques de memoria física en el disco. Se encarga de los detalles de bajo nivel de almacenamiento y recuperación de datos, interactuando directamente con los componentes de hardware. Esta capa garantiza la asignación y utilización eficientes de los recursos de almacenamiento físico, lo que contribuye al rendimiento y la fiabilidad generales del sistema de archivos.

Arquitectura de un sistema de archivos 

Características de un sistema de archivos

  • Gestión del espacio : cómo se almacenan los datos en un dispositivo de almacenamiento. Relativo a los bloques de memoria y las prácticas de fragmentación que se aplican en él.
  • Nombre de archivo : un sistema de archivos puede tener ciertas restricciones para los nombres de archivo, como la longitud del nombre, el uso de caracteres especiales y la distinción entre mayúsculas y minúsculas.
  • Directorio : los directorios/carpetas pueden almacenar archivos de manera lineal o jerárquica manteniendo una tabla de índice de todos los archivos contenidos en ese directorio o subdirectorio.
  • Metadatos : para cada archivo almacenado, el sistema de archivos almacena información diversa sobre la existencia de ese archivo, como la longitud de los datos, los permisos de acceso, el tipo de dispositivo, la fecha y hora de modificación y otros atributos. Esto se denomina metadatos.
  • Utilidades : los sistemas de archivos proporcionan funciones para inicializar, eliminar, renombrar, mover, copiar, realizar copias de seguridad, recuperar y controlar el acceso a archivos y carpetas.
  • Diseño : debido a sus implementaciones, los sistemas de archivos tienen limitaciones en la cantidad de datos que pueden almacenar.

Algunos términos importantes:

Diario:

Los sistemas de archivos con registro mantienen un registro llamado diario, que mantiene un registro de los cambios realizados en un archivo pero que aún no se han confirmado de forma permanente en el disco, de modo que en caso de una falla del sistema se puedan recuperar los cambios perdidos.

Control de versiones:

Los sistemas de archivos con versiones almacenan versiones previamente guardadas de un archivo, es decir, las copias de un archivo se almacenan en función de las confirmaciones anteriores en el disco cada minuto o cada hora para crear una copia de seguridad.

Inodo:

El nodo de índice es la representación de cualquier archivo o directorio en función de los parámetros: tamaño, permiso, propiedad y ubicación del archivo y directorio.

Ahora, llegamos a la parte donde discutimos las diversas implementaciones del sistema de archivos en Linux para dispositivos de almacenamiento en disco.

Nota: Los sistemas de archivos distribuidos y en clúster no se incluirán para simplificar esta introducción a Linux.

Tipos de sistemas de archivos en Linux

1) ext (Sistema de archivos extendido) : 

Implementado en 1992 es el primer miembro de la familia de sistemas de archivos ext. El sistema de archivos Ext significa Extended File System (Sistema de archivos extendido) . Fue desarrollado principalmente para el sistema operativo MINIX . El sistema de archivos Ext es una versión anterior y ya no se utiliza debido a algunas limitaciones.

2) ext2 : 

La segunda extensión se desarrolló en 1993. Es un sistema de archivos sin registro que se prefiere para usar con unidades flash y SSD. Resolvió los problemas de marca de tiempo separada para el acceso, la modificación de inodo y la modificación de datos. Debido a que no se registra en el registro, es lento para cargar en el momento del arranque. Ext2 es el primer sistema de archivos de Linux que permite gestionar dos terabytes de datos

3) Xiafs : 

También desarrollado en 1993, este sistema de archivos era menos potente y funcional que ext2 y ya no se utiliza en ningún lugar.

4) ext3 : 

El tercer ext desarrollado en 1999 es un sistema de archivos con registro en diario. Es confiable y, a diferencia de ext2, evita demoras prolongadas en el arranque del sistema si el sistema de archivos se encuentra en un estado inconsistente después de un apagado incorrecto. Otros factores que lo hacen mejor y diferente de ext2 son el crecimiento del sistema de archivos en línea y la indexación HTree para directorios grandes.

Como  Ext3 se desarrolló a partir de Ext2; es una versión mejorada de Ext2 y contiene compatibilidad con versiones anteriores. El principal inconveniente de Ext3 es que no es compatible con servidores porque este sistema de archivos no admite la recuperación de archivos ni la captura de instantáneas de disco.

5) JFS (Sistema de archivos con registro) :

Creado por primera vez por IBM en 1990, el JFS original fue llevado a código abierto para ser implementado para Linux en 1999. JFS funciona bien bajo diferentes tipos de carga, pero ya no se usa comúnmente debido al lanzamiento de ext4 en 2006, que brinda un mejor rendimiento.

JFS son las siglas de Journaled File System (Sistema de archivos con diario ). Es una alternativa al sistema de archivos Ext. También se puede utilizar en lugar de Ext4, donde se necesita estabilidad con pocos recursos. Es un sistema de archivos útil cuando la potencia de la CPU es limitada.

6) ReiserFS : 

Es un sistema de archivos de diario desarrollado en 2001. A pesar de sus problemas anteriores, tiene empaquetamiento de cola como esquema para reducir la fragmentación interna. Utiliza un árbol B+ que da un tiempo menos que lineal en las búsquedas y actualizaciones de directorios. Fue el sistema de archivos predeterminado en SUSE Linux hasta la versión 6.4, hasta que cambió a ext3 en 2006 para la versión 10.2.

ReiserFS es una alternativa al sistema de archivos Ext3. Tiene un rendimiento mejorado y características avanzadas. En el pasado, ReiserFS se usaba como sistema de archivos predeterminado en SUSE Linux, pero luego se cambiaron algunas políticas, por lo que SUSE volvió a Ext3. Este sistema de archivos admite dinámicamente la extensión de archivo, pero tiene algunas desventajas en el rendimiento.

7) XFS : 

XFS es un sistema de archivos con registro de 64 bits que se adaptó a Linux en 2001. Actualmente, actúa como el sistema de archivos predeterminado para muchas distribuciones de Linux. Ofrece funciones como instantáneas, desfragmentación en línea, archivos dispersos, tamaños de bloque variables y una capacidad excelente. También se destaca en operaciones de E/S paralelas.

El sistema de archivos XFS se consideró un JFS de alta velocidad, desarrollado para el procesamiento de E/S en paralelo. La NASA todavía utiliza este sistema de archivos con su servidor de gran capacidad de almacenamiento (servidor de más de 300 Terabytes).

8) SquashFS : 

Desarrollado en 2002, este sistema de archivos es de sólo lectura y se utiliza únicamente con sistemas integrados donde se necesita poca sobrecarga.

9) Reiser4 : 

Es un modelo incremental de ReiserFS. Fue desarrollado en 2004. Sin embargo, no está ampliamente adaptado ni es compatible con muchas distribuciones de Linux.

10) ext4 : 

El cuarto ext desarrollado en 2006 es un sistema de archivos con registro. Es compatible con versiones anteriores de ext3 y ext2 y ofrece varias otras funciones, algunas de las cuales son la preasignación persistente, un número ilimitado de subdirectorios, la suma de comprobación de metadatos y un gran tamaño de archivo. ext4 es el sistema de archivos predeterminado para muchas distribuciones de Linux y también es compatible con Windows y Mac.

El sistema de archivos Ext4 es el más rápido de todos los sistemas de archivos Ext. Es una opción muy compatible con los discos SSD (unidades de estado sólido) y es el sistema de archivos predeterminado en las distribuciones Linux.

11) btrfs (sistema de archivos Better/Butter/B-tree) : 

Se desarrolló en 2007. Ofrece muchas funciones, como la creación de instantáneas, la agrupación de unidades, la limpieza de datos, la autorreparación y la desfragmentación en línea. Es el sistema de archivos predeterminado para Fedora Workstation.

Btrfs significa sistema de archivos de árbol B. Se utiliza para tolerancia a fallos, reparación de sistemas, administración de funciones, configuración de almacenamiento extensa y más. No es adecuado para sistemas de producción.

12) bcachefs: 

Se trata de un sistema de archivos de copia en escritura que se anunció por primera vez en 2015 con el objetivo de tener un mejor rendimiento que btrfs y ext4. Entre sus características se incluyen cifrado completo del sistema de archivos, compresión nativa, instantáneas y suma de comprobación de 64 bits.

13) Otros :

 Linux también admite sistemas de archivos de sistemas operativos como NTFS y exFAT, pero estos no admiten la configuración de permisos estándar de Unix. Se utilizan principalmente para la interoperabilidad con otros sistemas operativos.

A continuación se muestra una tabla que enumera los criterios según los cuales se pueden comparar los sistemas de archivos:

Tenga en cuenta que hay más criterios que los que se enumeran en la tabla. Esta tabla pretende ofrecerle una idea de cómo han evolucionado los sistemas de archivos.

Tabla comparativa

 extext2Xiafsext3JFSReiserFSXFSReiser4ext4btrf
Longitud máxima del nombre de archivo (bytes)2552552482552554032  2552553976255255
Caracteres permitidos  en entradas de directorio (Cualquier byte) excepto NULexcepto NUL, /excepto NULexcepto NUL o /Cualquier Unicode  excepto NULexcepto NUL o /excepto NULexcepto NUL, /excepto NUL, /excepto NUL, /
Longitud máxima de la rutaIndefinidoIndefinidoIndefinidoIndefinidoIndefinidoIndefinidoIndefinidoIndefinidoIndefinidoIndefinido
Tamaño máximo de archivo2 GB16 GB – 2 TB64 MB16 GB – 2 TB4PB8TB8EB8 TB (en x86)16 GB – 16 TB16EB
Tamaño máximo del volumen2 GB2 TB – 32 TB2 GB2 TB – 32 TB32 PB16 TB8EB       –1EB16EB
Número máximo de archivos      –       –      –           –       –        –      –       –2^322^64
Solo metadatos  diarioNoNoNoNoNo
CompresiónNoNoNoNoNoNoNoNo
Subasignación de bloquesNoNoNoNoNoNo
EncriptaciónNoNoNoNoNoNoNoSí (experimental)No
Suma de comprobaciónNoNoNoNoNoNoParcialNoParcial

 Observaciones:

Vemos que XFS, ext4 y btrfs son los que mejor funcionan entre todos los demás sistemas de archivos. De hecho, btrfs parece ser casi el mejor. A pesar de ello, la familia de sistemas de archivos ext ha sido la predeterminada para la mayoría de las distribuciones de Linux durante mucho tiempo. Entonces, ¿qué es lo que hizo que los desarrolladores eligieran ext4 como predeterminado en lugar de btrfs o XFS? Dado que ext4 es tan importante para este debate, vamos a describirlo un poco más.

ext4 en el sistema de archivos Linux

Ext4 fue diseñado para ser compatible con versiones anteriores de ext3 y ext2, sus generaciones anteriores. Es mejor que las generaciones anteriores en los siguientes aspectos:

  • Proporciona un sistema de archivos grande como se describe en la tabla anterior.
  • Utiliza extensiones que mejoran el rendimiento de archivos grandes y reducen la fragmentación.
  • Proporciona una preasignación persistente que garantiza la asignación de espacio y memoria contigua.
  • La asignación retrasada mejora el rendimiento y reduce la fragmentación al asignar de manera efectiva grandes cantidades de datos a la vez.
  • Utiliza índices HTree para permitir un número ilimitado de subdirectorios.
  • Realiza la suma de comprobación del diario , lo que permite que el sistema de archivos se dé cuenta de que algunas de sus entradas no son válidas o están fuera de servicio después de una falla.
  • Soporte para marcas de tiempo de creación y marcas de tiempo mejoradas para inducir granularidad.
  • Cifrado transparente.
  • Permite limpiar las tablas de inodos en segundo plano, lo que a su vez acelera la inicialización. El proceso se denomina inicialización diferida .
  • Habilita las barreras de escritura de forma predeterminada, lo que garantiza que los metadatos del sistema de archivos se escriban y ordenen correctamente en el disco, incluso cuando las cachés de escritura pierden energía.

Todavía quedan algunas características en proceso de desarrollo, como la suma de comprobación de metadatos, compatibilidad con cuotas de primera clase y grandes bloques de asignación.

Sin embargo, ext4 tiene algunas limitaciones. Ext4 no garantiza la integridad de sus datos; si los datos se corrompen mientras ya están en el disco, no tiene forma de detectar o reparar dicha corrupción. El sistema de archivos ext4 no puede asegurar la eliminación de archivos, lo que se supone que provoca la sobrescritura de archivos al eliminarlos. Esto hace que los datos confidenciales terminen en el diario del sistema de archivos.

XFS funciona muy bien con sistemas de archivos grandes y altos grados de concurrencia. Por lo tanto, XFS es estable, pero no hay un límite claro que lo haga elegirlo en lugar de ext4, ya que ambos funcionan de manera similar. A menos que desee un sistema de archivos que resuelva directamente un problema de ext4, como tener una capacidad > 50 TiB.

Por otro lado, Btrfs , a pesar de ofrecer funciones como administración de múltiples dispositivos, suma de comprobación por bloque, replicación asincrónica y compresión en línea, no tiene el mejor rendimiento en muchos casos de uso comunes en comparación con ext4 y XFS. Varias de sus funciones pueden tener errores y provocar una reducción del rendimiento y pérdida de datos. 

Sistema de archivos de intercambio

El sistema de archivos de intercambio se utiliza para la paginación de memoria en el sistema operativo Linux durante la hibernación del sistema. Un sistema que nunca entra en estado de hibernación debe tener un espacio de intercambio igual al tamaño de su RAM.

¿Qué es el montaje en el sistema de archivos de Linux?

En Linux, el término “montar” hace referencia a los primeros días de la informática, cuando era necesario montar físicamente un disco extraíble o un paquete de cintas en un dispositivo de unidad correcto. En el paquete de discos, el sistema operativo montaría lógicamente el sistema de archivos para que los programas de aplicación, el sistema operativo y los usuarios pudieran acceder a los contenidos una vez que se los encontrara físicamente en la unidad.

En términos simples, un punto de montaje es un directorio que se crea como un componente del sistema de archivos. Por ejemplo, el sistema de archivos de inicio se ubica en el directorio /home. Los sistemas de archivos se pueden ubicar en puntos de montaje en muchos sistemas de archivos que no sean raíz, pero es menos común.

  • El sistema de archivos raíz de Linux se monta en el directorio / (directorio raíz) muy temprano dentro de la secuencia de arranque.
  • Posteriormente, los programas de inicio de Linux montan varios sistemas de archivos, ya sea mediante rc en SystemV o mediante systemd en las nuevas versiones de Linux.
  • El montaje del sistema de archivos durante el inicio lo gestiona el archivo de configuración, es decir, /etc/fstab .
  • Una forma sencilla de entenderlo es que fstab es la abreviatura de “tabla del sistema de archivos” , y es una lista de sistemas de archivos que se montarán, sus opciones y los puntos de montaje designados que pueden ser necesarios para sistemas de archivos particulares.

Los sistemas de archivos se pueden montar en un punto de montaje o directorio disponible con la ayuda del comando mount. En otras palabras, cualquier directorio que se aplique como punto de montaje no debe tener otros archivos y debe estar vacío. Linux no evitará que los usuarios monten un sistema de archivos en uno que ya esté disponible o en un directorio que incluya archivos. Se cubrirá el contenido real y solo será visible el contenido del sistema de archivos recién montado si montamos cualquier sistema de archivos en cualquier sistema de archivos o directorio existente.

Métodos de montaje de sistemas de archivos

En Linux, los sistemas de archivos deben “montarse” antes de que puedan ser utilizados. El montaje de un sistema de archivos implica asignarlo a un punto de la estructura jerárquica, permitiendo que se acceda a él a través de la ruta correspondiente.

El comando mount se utiliza para montar sistemas de archivos, y el comando umount se usa para desmontarlos. Aquí hay un ejemplo simple:

sudo mount /dev/sdb1 /mnt

Este comando monta la partición /dev/sdb1 en el directorio /mnt. A partir de este punto, el contenido de la partición será accesible en /mnt.

Importancia del sistema de archivos para los hackers

La comprensión del sistema de archivos en Linux es crucial para los hackers por varias razones. Los hackers deben ser capaces de navegar por el sistema, localizar archivos críticos, modificar configuraciones y, en muchos casos, ocultar su actividad. A continuación, veremos algunas razones por las cuales el conocimiento del sistema de archivos es vital en el ámbito del hacking.

Acceso y manipulación de archivos sensibles

El sistema de archivos en Linux alberga una gran cantidad de archivos sensibles y críticos para el funcionamiento del sistema. Archivos como /etc/passwd, /etc/shadow y los archivos de registro en /var/log son objetivos habituales para los hackers. Estos archivos contienen información sobre usuarios, contraseñas, actividad del sistema y más.

Ejemplo: Modificación de /etc/shadow

El archivo /etc/shadow almacena las contraseñas encriptadas de los usuarios. Si un hacker obtiene acceso de superusuario, puede modificar este archivo para cambiar las contraseñas o eliminar las contraseñas de los usuarios, lo que le permitiría el acceso completo al sistema sin restricciones.

sudo nano /etc/shadow

Un atacante podría modificar el hash de la contraseña para cambiar el acceso de un usuario o eliminarlo temporalmente para permitir acceso sin autenticación.

Escalada de privilegios mediante archivos setuid

Un archivo con el bit setuid activo permite que un usuario ejecute ese archivo con los permisos del propietario del archivo, generalmente root. Los hackers suelen buscar binarios con setuid mal configurados para escalar privilegios y obtener acceso administrativo. Puedes buscar archivos con setuid activo usando el siguiente comando:

find / -perm -4000 2>/dev/null

Si un hacker encuentra un binario con setuid mal configurado, podría explotarlo para ejecutar comandos con privilegios de superusuario.

Omisión de mecanismos de seguridad

Los hackers pueden manipular el sistema de archivos para eludir mecanismos de seguridad o borrar rastros de su actividad. Un ejemplo común es la modificación o eliminación de archivos de registro en /var/log que documentan la actividad del sistema.

Ejemplo: Borrado de archivos de log

Si un hacker no quiere dejar rastro de sus acciones en el sistema, puede borrar o modificar los archivos de registro para eliminar cualquier evidencia de su presencia.

sudo rm/var/log/auth.log

Este comando elimina el archivo de log que contiene los registros de autenticación, lo que hace que sea más difícil para los administradores de sistemas rastrear quién accedió al sistema y qué acciones tomó.

Ocultación de archivos y persistencia

El conocimiento profundo del sistema de archivos permite a los hackers ocultar archivos maliciosos dentro de directorios menos obvios o en partes del sistema que no se revisan regularmente. También pueden crear archivos o directorios con nombres que parecen inofensivos para ocultar código malicioso.

Ejemplo: Creación de un rootkit

Un hacker puede crear un archivo en un directorio del sistema que parece benigno pero que en realidad es parte de un rootkit. Los rootkits son herramientas diseñadas para ocultar la presencia de malware en el sistema y, a menudo, operan a nivel del kernel.

touch /usr/local/.config/init.sh

Aquí, el archivo init.sh podría contener un script malicioso que se ejecuta en el arranque del sistema, pero está oculto en un directorio poco visible como .config.

Uso de sistemas de archivos especiales

Linux incluye varios sistemas de archivos virtuales que no contienen datos almacenados en un disco físico, sino que proporcionan interfaces al kernel y a los dispositivos. Dos ejemplos clave son /proc y /sys, que permiten acceder a información del sistema y modificar configuraciones en tiempo real.

Ejemplo: Manipulación de /proc

El sistema de archivos /proc proporciona información sobre los procesos que se están ejecutando en el sistema y otros detalles del kernel. Un hacker puede utilizar esta información para identificar procesos vulnerables o cambiar parámetros del sistema.

cat /proc/cpuinfo

Este comando muestra información sobre la CPU del sistema, lo que puede ser útil para identificar vulnerabilidades específicas del hardware.

Montaje de dispositivos y unidades extraíbles

Los hackers que obtienen acceso a un sistema pueden querer montar unidades extraíbles para copiar datos sensibles o ejecutar malware. Con acceso adecuado, pueden montar dispositivos de almacenamiento externos e interactuar con ellos.

Ejemplo: Montar un dispositivo USB

Un atacante que ha conectado una unidad USB al sistema podría montarla utilizando el siguiente comando:

sudo mount /dev/sdb1 /media/usb

A partir de este momento, puede copiar archivos sensibles del sistema a su dispositivo USB.

Resumen de puntos clave

  1. Estructura jerárquica del sistema de archivos: Linux organiza los archivos en forma de árbol, con un directorio raíz (“/”) desde el cual se accede a todos los demás directorios.
  2. Capas del sistema de archivos: Se divide en sistema de archivos lógico, virtual y físico, cada uno con funciones específicas para la gestión de datos.
  3. Características distintivas: Diferencia entre mayúsculas y minúsculas, archivos ocultos, manejo de rutas con “/”, y permite trabajar con o sin extensiones de archivo.
  4. Tipos de sistemas de archivos en Linux: Desde ext2 hasta btrfs, cada uno con diferentes ventajas y aplicaciones, siendo ext4 el más utilizado por su equilibrio entre rendimiento y compatibilidad.
  5. Montaje de sistemas de archivos: El proceso de asignar un sistema de archivos a un directorio, para que los datos sean accesibles desde ese punto en la jerarquía.
  6. Importancia para hackers: Conocer el sistema de archivos permite manipular archivos sensibles, ocultar actividad maliciosa y sortear mecanismos de seguridad.

El sistema de archivos en Linux es una pieza crítica del sistema operativo y una de las áreas más importantes que un hacker debe entender. Desde la manipulación de archivos sensibles hasta la ocultación de actividad maliciosa.

En este artículo analizamos el sistema de archivos Linux en los sistemas operativos, profundizando en sus capas, características y la arquitectura de los sistemas de archivos Linux. Proporciona una exploración exhaustiva de varias opciones, desde ext hasta opciones contemporáneas como ext4, XFS y btrfs. La tabla de comparación destaca el rendimiento superior de XFS, ext4 y btrfs, donde ext4 se destaca por su compatibilidad con versiones anteriores y mejoras de diseño.

Pon en práctica lo aprendido

Ahora pon a prueba lo aprendido con estas preguntas y ejercicios.

Preguntas:

  1. ¿Qué es un sistema de archivos y por qué es crucial comprenderlo en Linux?
  2. Describe la estructura jerárquica del sistema de archivos de Linux.
  3. ¿Qué son los metadatos en un sistema de archivos y qué tipo de información contienen?
  4. Explica las diferencias entre el sistema de archivos virtual (VFS) y el sistema de archivos físico.
  5. ¿Cuáles son las principales características de un sistema de archivos de Linux?
  6. ¿Qué es el bit setuid y cómo puede ser explotado por un hacker?
  7. Describe las diferencias clave entre ext2, ext3 y ext4.
  8. ¿Qué es un rootkit y cómo se puede utilizar para ocultar archivos maliciosos?
  9. ¿Cuáles son las ventajas de usar el sistema de archivos ext4 sobre ext3 o ext2?
  10. ¿Qué es el montaje de sistemas de archivos en Linux y por qué es importante?

Ejercicios:

  1. Explica cómo funciona la estructura de directorios en un sistema de archivos Linux, utilizando ejemplos prácticos de rutas de directorio.
  2. Busca archivos con el bit setuid activo en tu sistema Linux utilizando el comando adecuado y describe los riesgos potenciales.
  3. Monta una partición en Linux en un punto de montaje de tu elección e indica los pasos que seguiste.
  4. Modifica los permisos de un archivo utilizando comandos en Linux y explica cómo impacta el cambio en la seguridad del archivo.
  5. Crea un script de bash que oculte un archivo en Linux agregando un punto al principio de su nombre, luego muestra cómo hacer visible este archivo oculto.
  6. Investiga en qué consiste el archivo /etc/shadow en Linux y cuáles son los riesgos asociados a la modificación de su contenido.
  7. Compara los sistemas de archivos ext4 y XFS, resaltando sus ventajas y desventajas en términos de rendimiento.
  8. Utiliza el comando cat para obtener información del sistema a través de /proc, y explica cómo un atacante podría utilizar esta información.
  9. Simula un proceso de ocultación de un archivo malicioso en un directorio del sistema, explicando por qué es una táctica común de hacking.
  10. Explica cómo utilizarías el comando mount para montar un dispositivo USB en Linux, describiendo los posibles usos maliciosos de esta operación.

Respuestas a las preguntas:

  1. ¿Qué es un sistema de archivos y por qué es crucial comprenderlo en Linux? Un sistema de archivos es el método que usa el sistema operativo para organizar, almacenar y gestionar archivos en una unidad de almacenamiento. En Linux, su comprensión es vital para la administración del sistema, ya que permite navegar, controlar permisos y manejar datos eficientemente. Además, para hackers es fundamental para ocultar información, manipular archivos críticos o escalar privilegios.
  2. Describe la estructura jerárquica del sistema de archivos de Linux. La estructura del sistema de archivos de Linux es jerárquica, organizada en forma de árbol invertido. Todo comienza con el directorio raíz (/), desde el cual se puede acceder a todos los demás directorios y archivos, como /home, /etc, /var, entre otros. Cada archivo y directorio tiene una ruta específica dentro de esta jerarquía.
  3. ¿Qué son los metadatos en un sistema de archivos y qué tipo de información contienen? Los metadatos son datos que describen la información esencial de un archivo o directorio, tales como el tamaño del archivo, la fecha de creación, los permisos de acceso, el propietario y el tipo de archivo. Estos permiten al sistema operativo gestionar y organizar archivos de forma eficiente.
  4. Explica las diferencias entre el sistema de archivos virtual (VFS) y el sistema de archivos físico. El VFS (Sistema de Archivos Virtual) es una capa de abstracción que permite a diferentes sistemas de archivos coexistir y ser accedidos de manera uniforme. El sistema de archivos físico, en cambio, gestiona el almacenamiento real de los datos en el disco, controlando la asignación y recuperación de bloques de memoria.
  5. ¿Cuáles son las principales características de un sistema de archivos de Linux? Las características incluyen la jerarquía de directorios, distinción entre mayúsculas y minúsculas, manejo de archivos y directorios ocultos, la capacidad de trabajar con diferentes particiones sin asignar letras de unidad, soporte para extensiones opcionales de archivos y el uso de rutas específicas con barras diagonales (/).
  6. ¿Qué es el bit setuid y cómo puede ser explotado por un hacker? El bit setuid permite que un archivo se ejecute con los permisos del propietario del archivo, en lugar del usuario que lo ejecuta. Los hackers pueden buscar archivos con este bit configurado incorrectamente para ejecutar comandos con privilegios de superusuario y escalar privilegios en el sistema.
  7. Describe las diferencias clave entre ext2, ext3 y ext4.
    • ext2 no tiene sistema de journaling, lo que lo hace más lento y propenso a corrupción tras fallos del sistema.
    • ext3 incorpora journaling, lo que mejora la confiabilidad y velocidad en la recuperación tras apagados inesperados.
    • ext4 añade mejoras como la asignación retrasada, la preasignación de espacio y el soporte para archivos de mayor tamaño.
  8. ¿Qué es un rootkit y cómo se puede utilizar para ocultar archivos maliciosos? Un rootkit es un conjunto de herramientas diseñadas para ocultar la presencia de malware o actividades maliciosas en un sistema, a menudo operando a nivel del kernel. Los hackers pueden usarlo para esconder archivos, procesos y conexiones maliciosas, impidiendo que los administradores los detecten fácilmente.
  9. ¿Cuáles son las ventajas de usar el sistema de archivos ext4 sobre ext3 o ext2? Ext4 es más eficiente en el manejo de archivos grandes y directorios, tiene una mejor gestión de la fragmentación y permite un número ilimitado de subdirectorios. También es compatible con ext2 y ext3, lo que facilita la migración, y es más rápido debido a la preasignación de espacio y la asignación retrasada.
  10. ¿Qué es el montaje de sistemas de archivos en Linux y por qué es importante? Montar un sistema de archivos significa hacerlo accesible en un punto de la estructura de directorios. Es fundamental para que el sistema operativo y los usuarios puedan interactuar con dispositivos de almacenamiento. Permite gestionar particiones y dispositivos externos, como discos duros y unidades USB, de manera ordenada.

Respuestas a los ejercicios:

  1. Explica cómo funciona la estructura de directorios en un sistema de archivos Linux, utilizando ejemplos prácticos de rutas de directorio. En Linux, todo comienza en el directorio raíz (/). Un ejemplo de ruta completa es /home/usuario/documentos, donde /home es el directorio que contiene los usuarios, usuario es el directorio del usuario actual, y documentos es una subcarpeta de dicho usuario. Todos los archivos y directorios cuelgan de esta jerarquía.
  2. Busca archivos con el bit setuid activo en tu sistema Linux utilizando el comando adecuado y describe los riesgos potenciales. Ejecuta: find / -perm -4000 2>/dev/null. Este comando busca archivos con el bit setuid activo. El riesgo es que si un archivo con setuid pertenece a root y tiene vulnerabilidades, un atacante podría explotarlo para obtener permisos de superusuario.
  3. Monta una partición en Linux en un punto de montaje de tu elección e indica los pasos que seguiste.
    1. Crea un punto de montaje: sudo mkdir /mnt/mi_punto_de_montaje.
    2. Monta la partición: sudo mount /dev/sda1 /mnt/mi_punto_de_montaje.
    3. Verifica: df -h mostrará la partición montada en /mnt/mi_punto_de_montaje.
  4. Modifica los permisos de un archivo utilizando comandos en Linux y explica cómo impacta el cambio en la seguridad del archivo. Usando chmod, puedes cambiar los permisos de un archivo. Por ejemplo, chmod 700 archivo.txt otorga todos los permisos solo al propietario. Esto mejora la seguridad al limitar el acceso a otros usuarios.
  5. Crea un script de bash que oculte un archivo en Linux agregando un punto al principio de su nombre, luego muestra cómo hacer visible este archivo oculto.
    • mv archivo.txt .archivo.txt
      Para hacer visible el archivo oculto, usa el comando ls -a para listar archivos ocultos.
  6. Investiga en qué consiste el archivo /etc/shadow en Linux y cuáles son los riesgos asociados a la modificación de su contenido. El archivo /etc/shadow contiene contraseñas encriptadas y detalles de los usuarios. Si un atacante lo modifica, podría cambiar contraseñas sin necesidad de conocerlas, obteniendo acceso total al sistema.
  7. Compara los sistemas de archivos ext4 y XFS, resaltando sus ventajas y desventajas en términos de rendimiento.
    • ext4: Excelente para la mayoría de las distribuciones de Linux, ofrece compatibilidad y rendimiento balanceado.
    • XFS: Ideal para sistemas con alto nivel de concurrencia y grandes volúmenes de datos, pero más complicado en operaciones de recuperación.
  8. Utiliza el comando cat para obtener información del sistema a través de /proc, y explica cómo un atacante podría utilizar esta información. Ejecuta cat /proc/cpuinfo para obtener detalles del procesador. Un atacante puede usar esta información para explotar vulnerabilidades específicas de hardware, como Meltdown o Spectre.
  9. Simula un proceso de ocultación de un archivo malicioso en un directorio del sistema, explicando por qué es una táctica común de hacking. Un hacker podría hacer:
    • touch /usr/local/.archivo_oculto
      Esto oculta el archivo en un directorio menos visible. La táctica es común para evitar que administradores lo detecten fácilmente.
  10. Explica cómo utilizarías el comando mount para montar un dispositivo USB en Linux, describiendo los posibles usos maliciosos de esta operación. Comando: sudo mount /dev/sdb1 /media/usb. Un atacante podría usar esto para copiar datos sensibles o introducir malware desde un dispositivo USB malicioso.

No te detengas, sigue avanzando

Aquí tienes un propósito que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera! El mundo necesita más hackers…

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes seguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

Hacker de 0 a 100 desde las bases hasta conseguir empleo

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/hacker-de-0-a-100-desde-las-bases-hasta-conseguir-empleo/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

Hemos creado una ruta de 0 a 100. Un plan de desarrollo que va desde las bases: cómo aprender hacking, qué aprender, en qué orden; pasando por las areas técnicas necesarias como Linux, Redes, Programación y los conocimientos necesarios en ciber seguridad, hacking, pentesting hasta la práctica y el inicio laboral: Crear tu propio laboratorio, certificaciones, adquirir experiencia e iniciarse laboralmente.

Este es un mega post. Una guía con más de 250 artículos que te llevaran por el camino del hacker. Esta guía es gratuita y esta creada gracias al esfuerzo y al trabajo combinado de Alvaro Chirou y mío (Laprovittera Carlos).

Creamos esta guía (futuro curso) para que puedas iniciarte en este mundo. Puedes arrancar ahora, GRATIS, solo necesitas un PC, conexión a internet y paciencia (Ser hacker NO ES un camino de la noche a la mañana).

El Hacking y la ciberseguridad es una carrera divertida, emocionante y gratificante que te recompensará y desafiará por igual. Sin embargo, para quienes buscan adentrarse en este campo en auge y en constante evolución, puede resultar difícil saber por dónde empezar. ¡Ahí es donde entra en juego nuestra guía en ciberseguridad!

Esta es la hoja de ruta hacia el trabajo de ciberseguridad de tus sueños. Te ayudará a entender qué conocimientos, habilidades y certificados son necesarios para alcanzar tus metas profesionales y tener una carrera próspera. Si quieres ser consultor de ciberseguridad, analista de malware, evaluador de penetración, analista de SOC o cualquier otro puesto de ciberseguridad, esta guía es lo que necesitas.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

Compartimos estos recursos para ayudar a la comunidad de hacking y ciberseguridad. COMPARTE y Siéntete libre de agregar más sugerencias en los comentarios a continuación, respondemos todos y cada uno de los comentarios.

Saludos amigos y happy hacking!!!