Guía Hardening – Hardware, habilitar y deshabilitar.

Hoy volvemos con una entrada centrada en intentar controlar el hardware de nuestras maquinas, esta entrada esta orientada al uso personal, primero recomiendo pasarse por el capitulo 2º de la guía de Hardening, en el que hablamos de la BIOS y algunos aspectos de su configuración para continuar después con esta entrada, pues puede ser que algunas de las opciones que indicamos en este capitulo se puedan ejecutar de una manera mas sencilla y rápida en la BIOS, aunque como siempre decimos, no esta mal saber antes como hacer cualquier tarea en modo manual, que con una bonita GUI y el proceso automatizado.

MODULOS DEL KERNEL LINUX

Los módulos en el Kernel Linux son los encargados de cargar los controladores de dispositivos de hardware, y podemos habilitar o deshabilitar estos módulos para mejorar la seguridad de nuestras maquinas, y si en nuestra BIOS no disponemos de estas opciones, gracias a comandos como modprobe podemos quitar o añadir dichos módulos, pero antes debemos conocer como obtener información de los módulos que tenemos cargados y saber cuales son innecesarios para nuestra maquina.

LSMOD, LSPCI, MODINFO, MODPROBE

Para esta tarea disponemos de varios comandos ¿pero que buscamos?
En nuestro caso y teniendo en cuenta que hemos instalado nuestra Debian en una portátil o computadora de sobremesa, tendremos en cuenta que dichas maquinas disponen de hardware integrado, ya sean puertos USB, unidades de CD o una webcam en el caso de los portátiles, y en muchas ocasiones y según la utilidad que le busquemos a nuestras maquinas pueden ser innecesarios.

LSMOD nos mostrara en varias columnas la información de los módulos cargados ,dicha información proviene del archivo /proc/modules, la primera columna muestra el nombre del modulo, la segunda columna el tamaño del modulo en bytes, y la tercera columna muestra si el modulo depende de otro modulo para funcionar.

[simterm]root@debian:~#lsmod
Module                  Size  Used by
nls_utf8               12456  0 
btrfs                 863535  0 
xor                    21040  1 btrfs
raid6_pq               95238  1 btrfs
ufs                    73443  0 
qnx4                   13036  0 
hfsplus               101391  0 
hfs                    53845  0 
minix                  31387  0 
ntfs                  194605  0 
vfat                   17135  0 
msdos                  17046  0 
fat                    61986  2 vfat,msdos
.....[/simterm]

LSPCI muestra la información detallada de los buses PCI y dispositivos en el sistema,

[simterm]root@debian:~#lspci

00:00.0 Host bridge: Intel Corporation 440FX – 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics
Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller
(rev 02)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC’97 Audio
Controller (rev 01)
00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)[/simterm]

Para obtener más información sobre algún dispositivo PCI puedes utilizar -vs, si te fijas al final de la información nos indica el modulo que utiliza (e1000).

[simterm]root@debian:~#lspci -vs 00:03.0
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller
	Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
	Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 19
	Memory at f0000000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at d010 [size=8]
	Capabilities: [dc] Power Management version 2
	Capabilities: [e4] PCI-X non-bridge device
	Kernel driver in use: e1000[/simterm]

MODINFO muestra información sobre un modulo que le indicamos, esta información se muestra en formato “campo: valor” para una mejor lectura.
[simterm]root@debian:~#modinfo e1000

filename:       /lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
version:        7.3.21-k8-NAPI
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
srcversion:     C2E6003E8479D0EA4A71DDB
alias:          pci:v00008086d00002E6Esv*sd*bc*sc*i*
alias:          pci:v00008086d000010B5sv*sd*bc*sc*i*
alias:          pci:v00008086d00001099sv*sd*bc*sc*i*[/simterm]

MODPROBE añade o quita un modulo del kernel seleccionado por nosotros, con los pasos seguidos anteriormente para obtener información del modulo a quitar, debes tener en cuenta que una vez quitado el modulo para su posterior uso debes volver a cargarlo en el Kernel.

Con modprobe -r [ nombre modulo] lo quitamos.

[simterm]root@debian:~#modprobe -r e1000[/simterm]

Si ahora haces un “lsmod | grep e1000″ veras que el modulo ya no aparece en la lista, y para volver a cargarlo debemos hacerlo con modprobe [ nombre modulo ].

[simterm]root@debian:~#modprobe e1000[/simterm]

Esta tarea la podemos realizar con cualquier modulo, nosotros hemos elegido una tarjeta de red como ejemplo, pero también puedes hacerlo con el CDROM puertos USB o cualquier otro dispositivo que no se utilice y pueda ser un vector de ataque fisico a nuestro sistema.

Reseteando la contraseña de root en debian

Hola amigos, tras unas semanas de “relaxing”, volvemos a la carga con la serie de hardening linux, como somos algo meticulosos y no nos gusta hacer las cosas a medias, la idea de esta serie es demostrar que pasa o que podría pasar si no implementamos las recomendaciones que os damos el equipo de aprendizdesysadmin así que sin más vacilación empezemos.

El post de hoy es como atacar o “recuperar” la contraseña de root de un sistema DEBIAN, siguiendo el post de nuestro amigo @israelmgo  “Guía Hardening – Seguridad en la bios y bootloader” .

Hoy le daremos un poco de cera al grub, para eso necesitaremos también el concepto de single user mode, que como esta explicado en infinidad de sitios, no lo vamos a explicar nosotros. Además tenéis que tener en cuenta que para esta técnica necesitais tener acceso físico a la máquina.

Al tajo:

Cuando iniciamos una máquina debian nos encontraremos con nuestro grub tal que asi:

grub1

Si os fijáis en el cuadro rojo, veréis que tenemos la opción de editar las entradas que queremos, para nuestro caso pulsaremos “e”  sin comillas para realizar las modificaciones que nos interesa.

Nos aparecerá una pantalla donde buscaremos la siguiente línea:

linux    /boot/vmlinuz-3.16.0-4-amd64 root=UUID=d6b3160f'-7e1f-486e-bdb0-4ff960afc0a7 ro quiet

y lo modificamos con lo siguiente:

grub2

Ojo, cambiamos el ro (read only) por rw (read write) y al final de la línea añadimos init=”/bin/bash” y posteriormente pulsamos F10.

Si por cualquier cosa, no hemos cambiado el ro por rw, tras iniciarse en single mode nos daremos cuenta que el sistema está en modo ro (read only), y necesitaremos ejecutar el comando “mount -rw -o remount /” sin comillas para dejar el sistema en read write ANTES de ejecutar el passwd, ya que si lo ejecutamos en modo ro, nos dará error.

El sistema rearranca en single mode, y nos permitirá ejecutar el comando passwd con el que reiniciaremos la contraseña de root.

singlemode

Posteriormente, pulsamos ctrl+alt+sup para reinicar el equipo, y comprobamos que al realizar un su e introducir la nueva contraseña funciona correctamente.

crackeado

Habiendo seguido las indicaciones del post de nuestro amigo @israelmgo, esto se habría evitado… y esto es todo, espero que os guste el post.

 

Guía Hardening – Software, instalación y eliminación

Esta sera otra de esas entradas cortas y sencillas, pero que sentara unas bases a la hora de actuar siempre, ya sea instalando o eliminando software.
Un punto importante del hardening es la reducción de la superficie de ataque, y ya lo vimos a la hora de instalar el sistema, no es lo mismo hacer una instalación mínima, que una típica con entorno gráfico, a más paquetes y dependencias, más posibilidades y exposición a vulnerabilidades y ataques, y más trabajo, por lo que tenemos que saber de antemano que aplicaciones nos hacen falta y cuales no.

¿Necesitamos ruby, perl, python. etc.. ?
¿Acceso por ssh?
¿Entorno gráfico?

En base a preguntas como estas y sus respuestas, procederemos a generar una lista con las aplicaciones y herramientas que nos hacen falta, esta lista con el tiempo se ampliara por lo que es importante documentar como siempre todos nuestros pasos y decisiones.
Los ordenes para esta tarea son muy sencillas y dispones de varias opciones, normalmente se utiliza apt o aptitude, este último incluye un modo semigráfico, además dispone de un algoritmo más elaborado a la hora de resolver comparaciones y problemas entre paquetes.

Instalación y eliminación.

Tanto si utilizamos apt-get o aptitude al instalar o eliminar paquetes se utiliza el sufijo “install” para instalar y “remove” para eliminar, por ejemplo:

root@debian:/# apt-get install vim

installvim

Y con esta orden eliminamos VIM y los paquetes sugeridos:

root@debian:/# apt-get remove vim

removevimSencillo, rápido y sin complicaciones… bueno, no siempre, en algunas ocasiones podemos encontrarnos con problemas después de eliminar o modificar los archivos de algunos paquetes, en esta situación y para revertir el problema podemos utilizar <- -reinstall>.

root@debian:/# apt-get – -reinstall install vim

reinstallvim

El resultado final es la instalación completa de los paquetes indicados.

Seguridad de los paquetes instalados.

Como administradores de sistemas siempre debemos comprobar la autenticidad de los paquetes instalados, y en Debian disponemos de un sello de garantía contra modificaciones, este sello funciona con una firma y una cadena de «hashes» criptográficos, por lo que podemos asegurarnos que los paquetes no fueron modificados en el origen ni por terceros.
Para administrar esta llaves se utiliza el programa apt-key el cual verifica las firmas disponibles en los archivos Release.gpg de las réplicas, utilizando el conjunto de llaves públicas GnuPG, estas llaves se actualizan automáticamente por parte de Debian con el paquete debian-archive-keyring, que es el encargado de generar el conjunto de llaves.

root@debian:/# apt-key fingerprint

fingerprint

Hay que acostumbrarse y añadir estas llaves si utilizamos por algún motivo repositorios de terceros que no están firmados por Debian, ademas es muy sencillo, y lo único que necesitamos es la llave que generalmente nos proporcionan en el repositorio “archivo.asc”.

root@debian:/# apt-key add < archivo.asc

Yo, como recomendación, no añado repositorios externos a no ser que sea estrictamente necesario, y como dice Diego “utiliza el sentido común”.

Especial Sysadmins, Tips con EXT

Extra para los Sysadmins y sufridos seres humanos de sistemas

¡Muy buenas a todos/as! Hoy hace un día estupendo y caluroso y os voy a dejar descansar de tanto forense y tanta técnica. La terminal esta genial, pero también debemos disfrutar de este maravilloso clima y salir a tomar el sol y unas cañas con los amigos/familia.  Os voy a comentar unos breves y fáciles tips, para que trabajéis mejor con el sistema de archivos Ext y para que el mundo sea un lugar feliz y sonriente. Espero que os sirva.

Asimismo os comento que este el el primero de una serie de tips o trucos que iremos soltando de vez en cuando, para intentar ayudaros en vuestros deberes diarios.

Como convertir un sistema de archivos ext3 existente a ext4

Para habilitar las características de ext4 en un sistema de archivos existente ext3, debes usar el siguiente comando:

# tune2fs -O extents,uninit_bg,dir_index /dev/dispositivo

CUIDADO: Aviso para navegantes, una vez ejecutado este comando, el sistema de archivos sobre el que se ejecute, ya no podrá volver a ser montado como ext3.

Después de ejecutar este comando, debes ejecutar fsck, ¿ y por qué motivo?  Para arreglar alguna de las estructuras que tune2fs ha modificado:

# e2fsck -fD /dev/dispositivo

Debes tener en cuenta que, para verificar el sistema de archivos de una partición correctamente, esta partición debe ser desmontada. Esto podría ser un problema si hablamos de la partición raíz (“/”), en este caso, es recomendable que configures el archivo /etc/fstab como te indico y luego reinicies el sistema para que la verificación se lleve a cabo automáticamente:

#               /dev/dispositivo         /           ext4   relatime         0 1

Para crear un nuevo sistema de archivos con ext4

Un sistema de archivos ext4 puede ser creado mediante el siguiente comando:

mkfs.ext4 /dev/dispositivo

Donde “dispositivo” hace las veces  del nombre del dispositivo por bloques donde se creará el sistema de archivos ext4 (sda,sdb,sdc…)

A tener en cuenta

Cuando habilites la nueva característica extent, los archivos nuevos serán creados con el formato extent, pero no se convertirán los archivos que ya existan para utilizar extent. Sin embargo los archivos que no sean extent podrán ser leídos y escritos sin ningún problema por ext4.

¿Qué soporte tiene ext4 en GRUB?

¡Buena pregunta! Si la raíz del sistema (“/”) es convertida a ext4, y se utiliza GRUB como cargador de arranque, debe actualizarse GRUB si o si a una versión que soporte ext4. Si no lo actualizas, el sistema puede llegar a iniciar correctamente la primera vez, pero cuando el kernel sea actualizado, este no volverá a iniciarse, de modo que tu mismo…

 

Por hoy ya vale, espero que lo escrito encima de esto os  pueda servir en algún momento. Pasad buenos días. ¡Nos vemos!

Análisis forense en Linux. Sistema de archivos EXT (I)

¡Muy buenas a todos!

Como no siempre toca sufrir en la vida, hoy vamos a disfrutar un poco. Hoy vamos a empezar a hablar de un sistema de archivos de verdad, de los que usan las personas mayores. Vamos a hablar del sistema de archivos Ext, pasando desde Ext2 hasta Ext4.

Como siempre antes de ir mas adelante, quiero avisar que esto es una intro, para que aprendáis los básicos de cada sistema de archivos y luego podáis seguir otras explicaciones posteriores. Ext es un sistema de archivos relativamente fácil de entender si se aprende despacio, pero es enorme no os engañéis. Por tanto, lo que me interesa con este post, es  que adquiráis unos conocimientos básicos sobre el, que luego os vendrán genial para seguirme más fácilmente en otros conceptos mas complicados. Iremos profundizando poco a poco en este sistema, no os preocupéis. ¿Me acompañáis en este viaje en el tiempo?

Pero… ¿Qué es Ext?

Historia

El sistema de archivos extendido (extended file system o ext), fue el primer sistema de archivos creado en concreto para Linux. Fue diseñado por Rémy Card para vencer las limitaciones de MINIX (que recuerdos…). Al principio hubo competencia tanto por Ext2, como por parte de Xiafs (se podría llamar un pequeño pique), sin embargo finalmente ganó ext2, ya que era mas viable a largo plazo.

Esta basado en UFS (Unix File System).

Sistema de Archivos EXT (Estructura y conceptos generales)

El fichero está representado con estructura de i-nodo (índice-nodo, para mayor claridad)

Básicamente consiste en una serie de ficheros con una serie de entradas donde se almacenan los números de i-nodos. Así pues, cada i-nodo “apunta” la dirección, path, tamaño…etc de cada archivo.

Es brillantemente funcional. Concretemos.

Sistema de archivos Ext2

En el principio de los tiempos…

Ext empezó como quien dice  con Ext2, su estructura de funcionamiento es relativamente fácil de entender y extremadamente lógica.

Consta de:

  1. Un Superbloque de 1024 bytes al principio del sistema de archivos, que contiene información, metadatos del propio sistema de ficheros (el tamaño del bloque, el número total de bloques…etc).
  2. Grupos de bloques :Tienen un Backup de Superbloque, un Block Group Descriptor Table (o tabla de estructura para cada grupo de bloques, dirección de los bitmaps de bloques de i-nodos), un bitmap de bloques del grupo y un bitmap de i-nodos (del grupo).
  3. El sistema de ficheros tiene una tabla donde se almacenan los i-nodos. Un i-nodo guarda información de un archivo (ruta o path, tamaño, ubicación física…etc). En cuanto a la ubicación, es una referencia a un sector del disco donde están todas y cada una de las referencias a los bloques del archivo fragmentado. Asimismo, estos bloques son de tamaño especificable cuando se crea el sistema de archivos, desde los 512 bytes  hasta los 4 KiB, asegurando esto un buen aprovechamiento del espacio libre con archivos pequeños.

¿Complicado? Bueno, poco a poco. Con esta imagen lo vais a ver mas cómodamente…

Captura

 

¿Veis? Tenemos un Superbloque, tenemos la Tabla de Descriptor de Bloque  y se aprecia claramente que apunta a cada uno de los grupos de bloque y las tablas de i-nodos. Es la típica estructura de árbol.

Ahora podría hablar de la estructura de los i-nodos, pero de momento creo que ya es mas que de sobra. No quiero complicarlo mas, de momento. Si lográis asimilar todo lo expuesto hasta aquí estaré mas que contento. Irá avanzando mas, pero todo a su debido momento. De momento os dejo un anticipo por si queréis investigar vosotros…

Captura de pantalla 2016-06-16 a las 19.23.26

Una vez puestos en la estructura y como es la estructura de de ext2 hay que saber que este sistema tenía-tiene un problema, bueno, tenía varios a decir verdad, pero uno importante, era que no disponía de soporte para transacciones, lo que significa, así en plan sencillo de asimilar, que las comprobaciones rutinarias (entre otras muchas cosas) al arrancar, podían llegar a tardar bastante tiempo, pero bastante de verdad. A día de hoy, hay muchas opciones alternativas, sistemas de ficheros de nueva generación con soporte para transacciones cuya integridad puede ser verificada con mayor rapidez, pero por aquel entonces no. Los sistemas transaccionales previenen retrasos durante el reinicio del equipo, incluso cuando el sistema de ficheros está en un estado inconsistente. Por este y otros motivos apareció EXT3 como una evolución lógica y necesaria  de Ext2.

Sistema de archivos Ext3

Características:

Es igual que ext2 pero con journaling, ahora te preguntarás: ¿Qué es el journal? Muy fácil, el journal guarda registros de las actualizaciones de los ficheros, una especie de bitácora, ANTES de que sucedan esos cambios en los ficheros. ¿Veis las implicaciones que esto puede legar a tener verdad? ¿No? Esto aporta mucha consistencia al sistema de ficheros. Un ejemplo rápido y fácil, supongamos que antes de que se escriba algo en un archivo, hay un problema, se va la corriente eléctrica de repente y los cambios no quedan guardados en los archivos correspondientes.

En este caso, como los cambios se guardan en esa especie de bitácora que es el journal, se pueden recuperar de un modo relativamente fácil. Además de que, cuando el disco se vuelve a montar correctamente, el journal advierte que hay unos cambios guardados y no efectuados y antes de nada, lleva a cabo esos cambios, con lo que se minimiza bastante la pérdida de archivos. Una maravilla como se puede apreciar, una maravilla que aporta mucha consistencia al sistema.

Además en el caso de que se borren archivos, se pone a cero el valor del tamaño del fichero y direcciones de bloque en el i-nodo, esto nos aporta mucha mas seguridad en la eliminación de archivos ya que nos aporta una certeza casi absoluta de que nadie va a poder extraer nada que nosotros eliminemos. A nivel forense, debemos tener en cuenta que se resetea el journal cada vez que se monta, es por ello que,  en temas de investigación forense, es muy recomendable “tirar del cable” para apagar el equipo a analizar,  ya que, de no hacerlo, si se apaga normalmente se perdería el journal, con toda la pérdida de información que ello implicaría. Esto ya comienza a ser mas interesante, ¿verdad?

Pregunta rápida: Una vez visto esto, la sensación que queda es que entonces el espacio ocupado por el journal debe ser enorme ¿no?

¡Pues no! Porque una vez que los datos se escriben correctamente, el journal desaparece.

Ventajas Ext3

1.     Disponibilidad

2.     Integridad

3.     Velocidad

4.     Fácil migración

5.     Versión transaccional de ext2

6.     Indexación basada en árboles que proporciona un alto rendimiento en casi todas las situaciones.

Desventajas

1.     Menor funcionalidad

2.     Fragmentación

3.     Da problemas de compresión

4.     No hay comprobación del journal

 Limitaciones Ext3

Limites ext3

Sistema de archivos Ext4

ext4-file-system

Ext4 (fourth extended filesystem), es un sistema de archivos con bitácora (Journaling) que fue diseñada como una mejora compatible de ext3. Ext4 se hizo público como estable el 25 de diciembre de 2008 con la versión 2.6.28 del núcleo Linux y desde entonces se encuentra disponible para usarlo en sistemas en producción.

Mejoras con respecto a ext3 y ext2

Mucha gente opina que la auténtica mejora, el auténtico salto se produjo de ext2 a ext3, personalmente, aún reconociendo la notable diferencia entre ext2 y ext3 y por supuesto, con el mayor de los respetos hacia las opiniones ajenas, opino que el sistema de archivos ext4 tiene bastante mejora sobre ext3, en comparación bastante mas que ext3 sobre ext2. La mayor mejora del sistema de archivos ext3 sobre ext2 fue añadir el soporte de jornaling (NOTA ACLARATORIA: el journaling consiste en que guarda los cambios en el sistema de archivos ANTES de que se produzcan (journal, ordered y writeback)), que no es poco y mas para nosotros, sufridos forenses. Sin embargo ext4 modifica importantes estructuras de datos del sistema de archivos, tales como aquellas destinadas a almacenar los archivos de datos. Como resultado, tenemos un sistema de archivos, con un diseño mejorado, mejores características y con mucho mas rendimiento y confiabilidad que los anteriores.

Características principales

1.     Soporte de volúmenes de hasta 1 exabyte (260 bytes) y archivos con tamaño hasta 16 terabytes.

2.     Capacidad de reservar un área contigua para un archivo denominada “extent”, que puede reducir y hasta eliminar completamente la fragmentación de archivos.

3.     Menor uso del CPU.

4.     Mejoras sustanciales en la velocidad de lectura y escritura.

  1. Direccionamiento 48bits :

▫ Tamaño sistema de archivos 1EiB

▫ Tamaño de archivos 16 TiB

▫ 64000 subdirectorios

  1. Asignador multibloque que asigna varios bloques en una sola llamada
  2. Obviamente es totalmente compatible con Ext3
  3. I-nodos mucho mas grandes
  4. Preasignación de espacio
  5. Comprobación del journaling con todo lo que redunda en fiabilidad
  6. Tiene una serie de barreras activadas por defecto, con ello mejora mucho la integridad aunque reduce un poco la eficiencia, en mi opinión esto nos compensa.
  7. Tiene un fsck muy rápido, es decir actualiza muy rápido la lista de i-nodos después de cada grupo.

 

Bueno, por hoy ya vale, lo dejamos aquí. Espero no haber aburrido demasiado a los que hayan tenido la paciencia de seguir hasta aquí abajo. Pero debéis entender que esto es necesario para poder entender otros conceptos que vendrán después. Gatear=> Andar=> Correr. Esa es la idea.

¡Hasta la próxima!