Sei sulla pagina 1di 349

Machine Translated by Google

La aplicación de la ley y forense


Introducción del examinador a Linux

Una guía completa para profesionales de Linux como


plataforma de análisis forense digital

Versión 4.95.1
Septiembre 2021

Barry J Grundy
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Contenido

legalidades 8

Agradecimientos 8

Prefacio 10

Una palabra sobre GNU en "GNU/Linux" 11

¿Por qué aprender Linux? 12

¿Dónde están todas las herramientas GUI? 13

Los ejercicios prácticos 13

Convenciones utilizadas en este documento 14

1 Instalación 15

1.1 Distribuciones. . . ... . .... .... . ... . .... . ... . ... . . . dieciséis

1.2 SLACKWARE y uso de esta guía. . . ... . .... . ... . ... . . . 17

1.3 Métodos de instalación. . . .... . ... . ... . .... . ... . ... . . . 18

1.4 Notas de instalación de Slackware. . . . . . . . ... . .... . ... . ... . . . 18

1.5 Usuarios del Sistema. . . . . . . .... .... . ... . .... . ... . ... . . . 20

1.5.1 Adición de un usuario normal. . . . . . . ... . .... . ... . ... . . . 20

1.5.2 El superusuario [raíz] . . . ... . ... . .... . ... . ... . . . 21

1.6 Entorno de escritorio. . . .... .... . ... . .... . ... . ... . . . 22

1.7 El núcleo de Linux. ... . .... .... . ... . .... . ... . ... . . . 23

1.8 Interacción entre el núcleo y el hardware. ... . ... . .... . ... . ... . . . 24

1.8.1 Configuración del hardware. . ... . ... . .... . ... . ... . . . 24

1
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

1.8.2 Módulos del núcleo. . . . . . . ... . ... . .... . ... . ... . . . 25

1.8.3 Dispositivos Hotplug y UDEV. . . . ... . .... . ... . ... . . . 27

2 Discos, particiones y el sistema de archivos de Linux 28

2.1 Discos. . . .... . ... . .... .... . ... . .... . ... . ... . . . 28

2.2 Asignación de nodos de dispositivos: una mirada más cercana. . . . . . . . . ... . ... . . . 31

2.3 El Sistema de Archivos. . . . . . .... .... . ... . .... . ... . ... . . . 34

2.4 Montaje de sistemas de archivos externos. . . . . . ... . .... . ... . ... . . . 37

2.4.1 El comando de montaje . . . . ... . ... . .... . ... . ... . . . 37

2.4.2 La tabla del sistema de archivos (/etc/fstab) . . . . . . . . . ... . ... . . . 40

2.4.3 Montaje del espacio de usuario. . . . . . . . ... . .... . ... . ... . . . 41

3 comandos básicos de Linux 46

3.1 Navegación muy básica. . .... . ... . ... . .... . ... . ... . . . 46

3.1.1 Comandos útiles adicionales. . . ... . .... . ... . ... . . . 48

3.2 Permisos de archivo. . . . . . .... . ... . ... . .... . ... . ... . . . 50

3.3 Tuberías y redirección. . .... . ... . ... . .... . ... . ... . . . 52

3.4 Atributos de archivo. . . . . . .... .... . ... . .... . ... . ... . . . 54

3.5 Matemáticas de línea de comandos. . . . . . . . ... . ... . .... . ... . ... . . . 56

3.5.1 bc - la calculadora básica. . ... . ... . .... . ... . ... . . . 56

3.5.2 Bash Shell - Expansión aritmética. . . . .... . ... . ... . . . 58

3.6 Golpe 'globoso'. . ... . .... . ... . ... . .... . ... . ... . . . 59

3.7 Revisión de comandos y sugerencias. . . . ... . ... . .... . ... . ... . . . 59

4 Edición con Vi 60

4.1 La Alegría que es vi . . . . .... . ... . ... . .... . ... . ... . . . 60

2
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

4.2 El tutorial de vimtutor . . .... . ... . ... . .... . ... . ... . . . 60

4.3 vi Resumen de comandos. . . . . . . ... . ... . .... . ... . ... . . . 61

5 La secuencia de arranque de Linux (simplificada) 63

5.1 Init frente a Systemd. . . . . .... .... . ... . .... . ... . ... . . . 63

5.2 Arrancando el Kernel. . . . .... . ... . ... . .... . ... . ... . . . 63

5.3 Inicialización del sistema. . . . . . . . ... . ... . .... . ... . ... . . . sesenta y cinco

5.4 Nivel de ejecución. .... . ... . .... .... . ... . .... . ... . ... . . . sesenta y cinco

5.5 Guiones de inicio globales. . . . . . . ... . ... . .... . ... . ... . . . 66

5.6 Guiones de inicio del servicio. . . . . . .... . ... . .... . ... . ... . . . 67

5.7 Golpe . . . .... . ... . .... . ... . ... . .... . ... . ... . . . 68

6 conceptos básicos de red de Linux 69

6.1 Interfaces de red. . . . .... . ... . ... . .... . ... . ... . . . 69

6.1.1 Adaptador Ethernet [ethX] . . ... . ... . .... . ... . ... . . . 70

6.1.2 Adaptador inalámbrico [wlanX] . . . . . . ... . .... . ... . ... . . . 70

6.1.3 Interfaz de bucle invertido [lo] . . . . . . . ... . .... . ... . ... . . . 70

6.1.4 Nomenclatura de interfaz persistente. . . . . . . . .... . ... . ... . . . 70

6.2 Configuración de la red. . .... . ... . ... . .... . ... . ... . . . 71

6.2.1 Configuración inicial de la red. . . ... . .... . ... . ... . . . 71

6.3 Encontrarse a sí mismo en la red. ... . ... . .... . ... . ... . . . 74

6.3.1 ¿Cuál es mi IP? . . .... . ... . ... . .... . ... . ... . . . 74

6.4 Revisión de conexiones y puertos de red. . . . .... . ... . .... . . 77

7 Con guración de una estación de trabajo forense 80

7.1 Protección de la estación de trabajo. . . . . . ... . ... . .... . ... . ... . . . 80

3
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

7.1.1 Con guración de servicios de inicio. . . . . . . . .... . ... . ... . . . 81

7.1.2 Control de acceso basado en host. . . . . ... . .... . ... . .... . . 83

7.1.3 Servidor de seguridad basado en host con iptables . . . . . . . . . ... . ... . . . 86

7.2 Actualización del Sistema Operativo. . . . . . ... . .... . ... . ... . . . 90

7.2.1 Pkgtools de Slackware . . . . ... . ... . .... . ... . ... . . . 90

7.2.2 slackpkg para actualizaciones automáticas. . . . . . .... . ... . ... . . . 91

7.3 Instalación y actualización de software "externo". . . .... . ... . .... . . 93

7.3.1 Compilación desde el origen. . . . . . . ... . .... . ... . ... . . . 93

7.3.2 Uso de paquetes de distribución. . . . ... . .... . ... . ... . . . 95

7.3.3 Creación de paquetes con SlackBuilds. . . . .... . ... . .... . . 96

7.3.4 Uso de la herramienta de paquetes automatizados sbotools . . . . . . . . ... . . . 100

8 Linux y análisis forense 106

8.1 Adquisición de pruebas. . . .... .... . ... . .... . ... . ... . . . 106

8.2 Organización del análisis. . .... . ... . ... . .... . ... . ... . . . 107

8.3 Bloqueo de escritura. . . . . . .... . ... . ... . .... . ... . ... . . . 109

8.4 Examen de la información de los medios físicos. . . . . . .... . ... . ... . . . 110

8.5 Medios de hashing. . . . . . .... . ... . ... . .... . ... . ... . . . 115

8.6 Recopilación de una imagen forense con dd . . . . . . . . .... . ... . ... . . . 116

8.6.1 dd y división de imágenes . . ... . ... . .... . ... . ... . . . 119

8.7 Herramientas de imágenes alternativas. . . . . . . . . ... . .... . ... . ... . . . 122

8.7.1 dc3dd . . . . ... . .... . ... . ... . .... . ... . ... . . . 123

8.7.2 libewf y ewfacquire . . . ... . ... . .... . ... . ... . . . 130

8.7.3 Errores de medios: ddrescue . . . . . . ... . .... . ... . ... . . . 140

8.8 Imágenes por cable. . .... . ... . ... . .... . ... . ... . . . 149

4
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.8.1 Sobre el cable - dd . .... . ... . ... . .... . ... . ... . . . 151

8.8.2 Por cable - dc3dd . . . ... . ... . .... . ... . ... . . . 153

8.8.3 Por cable: ewfacquirestream . ... . .... . ... . ... . . . 154

8.9 Compresión: local y por cable. ... . .... . ... . ... . . . 157

8.9.1 Compresión sobre la marcha con dd . . . . . . .... . ... . ... . . . 158

8.10 Preparación de un disco para la imagen sospechosa: limpieza. . . . . . ... . .... . . 163

8.11 Palabras finales sobre imágenes . . . . . . ... . ... . .... . ... . .... . . 166

8.12 Montaje de pruebas . . . . .... . ... . ... . .... . ... . ... . . . 166

8.12.1 Estructura de la Imagen. . . ... . ... . .... . ... . ... . . . 166

8.12.2 Identificación de sistemas de archivos. . ... . ... . .... . ... . ... . . . 168

8.12.3 El dispositivo de bucle. . . . . . ... . ... . .... . ... . ... . . . 170

8.12.4 Opción de bucle al comando de montaje. . . .... . ... . .... . . 170

8.12.5 perder la configuración . . ... . .... . ... . ... . .... . ... . ... . . . 171

8.12.6 Montaje de imágenes de disco completas con losetup . . . . . . ... . ... . . . 173

8.12.7 Montaje de imágenes de múltiples particiones con losetup -P . . . . . ... . . . 176

8.12.8 Montaje de archivos de imagen dividida con affuse . . . . . . . ... . ... . . . 178

8.12.9 Montaje de archivos EWF con ewfmount . . . . . . . . . ... . ... . . . 183

8.13 Análisis básico. . . ... . .... . ... . ... . .... . ... . ... . . . 186

8.13.1 Antivirus: exploración de la evidencia con clamav . . ... . ... . . . 186

8.13.2 Revisión de datos básicos en la línea de comandos. . . . . . . . . .... . . 190

8.13.3 Elaboración de una lista de tipos de archivos. . . . ... . .... . ... . ... . . . 197

8.13.4 Visualización de archivos. . . .... . ... . ... . .... . ... . ... . . . 198

8.13.5 Búsqueda de texto en todas las áreas de la imagen forense. . . . . . . . . . 201

5
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

9 Análisis forense avanzado (principiante) 206

9.1 Manipulación y análisis de archivos. . ... . ... . .... . ... . ... . . . 206

9.2 Diversión con dd . . . . . . . . .... . ... . ... . .... . ... . ... . . . 213

9.2.1 Talla de datos con dd . . . . ... . ... . .... . ... . ... . . . 214

9.2.2 Particiones talladas con dd . ... . ... . .... . ... . ... . . . 217

9.2.3 Reconstrucción de un sistema de archivos de materias (Linux) . . . . . . . ... . . . 221

10 herramientas de análisis avanzadas 225

10.1 El enfoque de capas para el análisis. . . . . . ... . .... . ... . ... . . . 226

10.2 El kit de detective. . ... . .... .... . ... . .... . ... . ... . . . 228

10.2.1 Instalación del kit de detección. . . . . . . ... . .... . ... . ... . . . 230

10.3 Ejercicios del equipo de detectives . . . . . . . .... . ... . .... . ... . ... . . . 231

10.3.1 Sleuth Kit Ejercicio 1A: Identificación y recuperación de archivos eliminados (ext2) 232

10.3.2 Sleuth Kit Ejercicio 1B: Identificación y recuperación de archivos eliminados (ext4) 242

10.3.3 Sleuth Kit Ejercicio 2A: Búsqueda de cadenas físicas y estado de asignación
(ext2) . . . ... . .... .... . ... . .... . ... . ... . . . 247

10.3.4 Sleuth Kit Ejercicio 2B: Búsqueda de cadenas físicas y estado de asignación
(ext4) . . . ... . .... .... . ... . .... . ... . ... . . . 254

10.3.5 Ejercicio 3 del kit de detectives: Extracción y examen no asignados . . . . 257

10.3.6 SleuthKit Ejercicio 4: Examen NTFS - Análisis de archivos . ... . . . 262

10.3.7 Sleuth Kit Ejercicio 5: Examen NTFS de ADS . . . . ... . . . 268

10.3.8 Sleuth Kit Ejercicio 6: Búsqueda de cadenas físicas y estado de asignación


(NTFS) . . ... . .... .... . ... . .... . ... . ... . . . 272

10.4 bulk_extractor : búsqueda completa. . . . .... . ... . ... . . . 277

10.5 Talla física. ... . .... . ... . ... . .... . ... . ... . . . 285

10.5.1 bisturí . . ... . .... . ... . ... . .... . ... . ... . . . 285

10.5.2 fotograbación . . . . . . .... . ... . ... . .... . ... . ... . . . 294

6
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

10.5.3 Comparación y deduplicación de la salida Carve. . . ... . .... . . 301

10.6 Análisis de aplicaciones. . . . . . . . ... . ... . .... . ... . ... . . . 303

10.6.1 Ejercicio de análisis de registro 1: UserAssist . . . . . . . ... . .... . . 304

10.6.2 Ejercicio de análisis de registro 2: SAM y cuentas . . ... . .... . . 310

10.6.3 Análisis de aplicaciones: captación previa . . . . . . . .... . ... . ... . . . 314

11 herramientas básicas de investigación de redes 317

11.0.1 Búsqueda de direcciones IP . . . . . . . . . ... . .... . ... . ... . . . 317

11.0.2 Búsqueda de intercambio de correo. . . ... . ... . .... . ... . ... . . . 319

11.1 Datos Whois. . . . ... . .... . ... . ... . .... . ... . ... . . . 320

11.2 Búsqueda de direcciones MAC. . . . . . . ... . ... . .... . ... . ... . . . 321

12 Integración de Linux con su trabajo 323

13 Conclusión 328

14 Soporte Linux 329

14.1 Lugares a los que acudir para recibir asistencia. .... . ... . ... . .... . ... . .... . . 329

Lista de Figuras 329

Lista de ejemplos de comandos 332

7
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

legalidades

Todas las marcas registradas son propiedad de sus respectivos dueños.

© 1998-2020 Barry J. Grundy (bgrundy@linuxleo.com): Este documento se puede redistribuir, en su totalidad,


incluida la totalidad de este aviso de derechos de autor, sin consentimiento adicional si el redistribuidor no recibe
remuneración y si el redistribuidor utiliza estos materiales para ayudar y/o capacitar a miembros de las fuerzas
del orden público o profesionales de seguridad/respuesta a incidentes. De lo contrario, estos materiales no
pueden redistribuirse sin el consentimiento expreso por escrito del autor, Barry J. Grundy.

Agradecimientos

Como siempre, no hay forma posible de agradecer a todos los que se lo merecen. A lo largo de los años he
aprendido mucho de tantos. Una publicación de blog aquí, un correo electrónico devuelto allí. Ayuda en IRC,
foros en línea y colegas en la oficina. Las contribuciones que recibo de otros en el campo que toman tiempo de
sus propios días ocupados para ayudarme a crecer como investigador y examinador forense, son simplemente
demasiado numerosas para catalogarlas. Mi más sincero agradecimiento a todos.

La lista de colegas que han contribuido durante muchos años ha crecido. Sigo agradecido a todos los que han
dedicado su tiempo a revisar y brindar comentarios valiosos y, en algunos casos, un simple estímulo para todas
las versiones de esta guía a lo largo de los años. Mi continuo agradecimiento a Cory Altheide, Brian Carrier,
Christopher Cooper, Nick Furneaux, John Garris, Robert Jan Mora y Jesse Kornblum por ayudarme a sentar las
bases de esta guía. Y por la asistencia más reciente, me gustaría agradecer a Jacques Boucher, Tobin Craig,
Simson Garnkel, Andreas Guldstrand, Bill Norton, Paul Stephens, Danny Werb y Robby Workman.

Un agradecimiento especial al Dr. Nhien An Le Khac por proporcionar la motivación para actualizar continuamente
esta guía durante los últimos dos años.

Mi continuo agradecimiento al Kernel de Linux, varios equipos de desarrollo de software y distribución por su
arduo trabajo para proporcionarnos un sistema operativo y utilidades que son robustos y controlables. ¿Qué
horrores estaría viviendo sin su dedicación?

El logotipo de LinuxLEO fue diseñado por Laura Etter (WillowWispDesign@yahoo.com).

Finalmente, no puedo dejar de agradecer a mi esposa Jo y a mis hijos Patrick y Tommy por la aparentemente
interminable paciencia mientras se realizaba el trabajo.

8
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Prefacio

La primera versión de esta guía se publicó en el sitio FTP de la Academia de Capacitación del Oficial de la
Paz de Ohio en 1999. Desde entonces, hemos visto cambios significativos en nuestra profesión y un
crecimiento masivo en el desarrollo de software y técnicas utilizadas para descubrir evidencia. de un
universo de dispositivos en constante expansión. El propósito de este documento, sin embargo, permanece sin cambios.
Aquí buscamos proporcionar una guía accesible y fácil de seguir para los examinadores forenses en todo
el espectro de esta disciplina forense; agentes del orden público, personal de respuesta a incidentes y
todos los especialistas informáticos responsables de la investigación de pruebas digitales. Esta guía
continúa brindando una descripción general introductoria del sistema operativo GNU/Linux (Linux) como
plataforma forense.

Sobre todo, esta sigue siendo una guía para principiantes. Una introducción. No pretende ser un curso
completo sobre la realización de exámenes forenses. Este documento trata sobre las herramientas y los
conceptos utilizados para emplearlas. Los presento, brindo una guía simple sobre su uso y algunas ideas
sobre cómo pueden integrarse en un laboratorio forense digital moderno o en un proceso de investigación.
Esta es también una guía práctica. Es la mejor manera de aprender y cubriremos tanto las utilidades
básicas de GNU/Linux como el software especializado a través de ejercicios breves.

El contenido está destinado a ser de nivel "principiante", pero a medida que la comunidad informática
forense evoluciona y el tema se amplía y se vuelve más convencional, la definición de material de nivel
"principiante" comienza a desdibujarse. Esta guía hace un esfuerzo por mantener el material lo más básico
posible sin omitir aquellos temas que se consideran fundamentales para la comprensión adecuada de Linux
y su potencial como plataforma forense digital. Si ha estado haciendo exámenes forenses durante cinco o
diez años, pero nunca profundizó en Linux, entonces esto es para usted. Si es estudiante universitario y
está interesado en cómo se emplean las herramientas forenses, pero no puede pagar miles de dólares en
licencias... entonces esto es para usted.

Sin embargo, esto de ninguna manera pretende ser el "cómo hacer" definitivo sobre los métodos forenses
que utilizan Linux. Más bien, es un punto de partida (algo ampliado) para aquellos que están interesados
en seguir la autoeducación necesaria para dominar el uso de Linux como herramienta de investigación. No
todos los comandos que se ofrecen aquí funcionarán en todas las situaciones, pero al describir los
comandos básicos disponibles para un investigador espero "hacer que la pelota empiece a rodar".
Presentaré los comandos, el lector necesita hacer un seguimiento de las opciones y usos más avanzados.
Saber cómo funcionan estos comandos es tan importante como saber qué escribir en el indicador. Incluso
si usted es un usuario intermedio de Linux, se revisará gran parte del contenido de estas páginas. Aún así,
espero que encuentre algo útil.

GNU/Linux es un sistema operativo en constante evolución. Las distribuciones van y vienen, y ahora hay
una serie de versiones de Linux "destacadas" que se usan comúnmente. Además de equilibrar la naturaleza
de principiante del contenido de esta guía con los estándares avanzados en educación forense, también
me encuentro tratando de equilibrar el nivel de detalle requerido para enseñar tareas útiles con la naturaleza
específica de distribución de muchos de los comandos y con guraciones utilizadas.

9
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Como discutiremos con más detalle más adelante en esta guía, muchos de los detalles son especí cos a un
tipo de Linux. En la mayoría de los casos, los comandos son bastante portátiles y funcionarán en la mayoría
de los sistemas. En otros casos (administración de paquetes y edición de la configuración, etc.) es posible
que deba investigar un poco para determinar qué debe hacerse en la plataforma de su elección. La
determinación de proporcionar detalles especí cos sobre la configuración real de un sistema especí co surgió
a través de una abrumadora solicitud de orientación. La decisión de usar mi distribución de Linux preferida
para análisis forense como ejemplo es personal.

A lo largo de los años, he escuchado de colegas que probaron Linux instalándolo y luego procedieron a
sentarse y preguntarse "¿qué sigue?". También he considerado una serie de solicitudes y sugerencias para
una exploración más amplia de las herramientas y utilidades disponibles para Linux para el análisis forense
a nivel de aplicación. Más recientemente, ha habido numerosas solicitudes de pautas de configuración para
una estación de trabajo Linux básica. Usted tiene una copia de esta introducción. Ahora descargue los
ejercicios y siga conduciendo. Este es solo el comienzo de su lectura. Si se utiliza correctamente, esta guía
debería generar muchas más preguntas y poner en marcha su aprendizaje. En los años transcurridos desde
que se publicó por primera vez este documento, han surgido varios libros excelentes con muchos más
detalles que cubren herramientas de código abierto y análisis forense de Linux.
Todavía me gusta pensar que esta guía será útil para algunos.

Como siempre, estoy abierto a sugerencias y críticas. Mi información de contacto está en la primera página.
Si tiene ideas, preguntas o comentarios, no dude en enviarme un correo electrónico. Cualquier comentario
es bienvenido.

Este documento se actualiza ocasionalmente. Busque versiones más nuevas (numeradas en la primera
página) en el sitio oficial:

https://www.LinuxLEO.com

10
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una palabra sobre GNU en "GNU/Linux"

Cuando hablamos del sistema operativo "Linux", en realidad estamos hablando del sistema operativo (OS) GNU/
Linux. Linux en sí mismo no es un sistema operativo. Es solo un núcleo. El sistema operativo es en realidad una
combinación del kernel de Linux y las utilidades de GNU que nos permiten a nosotros y a nuestro hardware
interactuar con el kernel. Es por eso que el nombre correcto para el sistema operativo es "GNU/Linux". Lo llamamos
(incorrectamente) "Linux" por conveniencia.

¿Por qué aprender Linux?

Una de las preguntas más frecuentes es: "¿Por qué debo usar Linux cuando ya tengo [insertar aquí la herramienta
forense de la GUI de Windows]?" Hay muchas razones por las que Linux está ganando terreno rápidamente como
plataforma forense. Espero que este documento ilustre algunos de esos atributos.

En resumen, incluso si es un usuario experimentado del sistema operativo convencional, ya sea Mac o Windows,
Linux ofrece una forma alternativa y completamente única de abordar su flujo de trabajo forense.
No solo el entorno es diferente de lo que usted puede estar acostumbrado, sino que la forma en que trabaja también
puede ser una desviación completa de lo que está acostumbrado, si tiene la paciencia y el coraje para permitir que
sea diferente. En muchos casos, con un poco de esfuerzo inicial, su flujo de trabajo puede ser exponencialmente
más eficiente.

Control: no solo sobre su software forense, sino sobre todo el sistema operativo y el hardware adjunto.

Flexibilidad: arranque desde un CD (a un sistema operativo completo), compatibilidad con el sistema de archivos, compatibilidad con la plataforma,
etc.

Poder: una distribución de Linux es (o puede ser) una herramienta forense.

Otro punto a destacar es que el simple hecho de saber cómo funciona Linux se está volviendo cada vez más
importante. Si bien muchos de los paquetes forenses basados en Windows que se usan hoy en día son totalmente
capaces de examinar los sistemas Linux, no se puede decir lo mismo de los examinadores.

A medida que Linux se vuelve más y más popular, tanto en el mundo comercial como entre los usuarios de escritorio,
la posibilidad de que un examinador encuentre un sistema Linux en un caso se vuelve más probable (especialmente
en investigaciones de redes). Incluso si elige utilizar una herramienta forense de Windows para realizar su análisis,
al menos debe estar familiarizado con el sistema operativo que está examinando.
Si no sabes lo que es normal, ¿cómo sabes lo que no pertenece? Esto es cierto en muchos niveles, desde el
contenido real de varios directorios hasta entradas extrañas en archivos de configuración, hasta cómo se almacenan
los archivos. Si bien este documento se trata más de Linux como una herramienta forense en lugar de un análisis de
Linux, aún puede aprender mucho sobre cómo funciona el sistema operativo si lo usa.

11
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

También está la cuestión de la verificación cruzada. Un conocimiento práctico de Linux y su utilidad forense
puede proporcionar al examinador herramientas alternativas en una plataforma alternativa. Estos pueden
usarse como un método para verificar los hallazgos de otras herramientas en otros sistemas operativos.
Muchos examinadores han pasado incontables horas aprendiendo y usando las herramientas forenses
comunes de Microsoft Windows estándar de la industria. Sería poco realista pensar que la lectura de esta guía
le dará a un examinador el mismo nivel de confianza, a veces construido a través de años de experiencia, que
tienen con sus herramientas tradicionales de elección. Lo que puedo esperar es que esta guía brinde suficiente
información para brindar al examinador "otra herramienta para la caja de herramientas", ya sea imágenes,
recuperación o examen de evidencia. Linux como plataforma forense alternativa proporciona una forma
perfecta de cotejar su trabajo y verificar sus resultados, incluso si no es su elección principal.

También debemos considerar la utilidad de Linux en aplicaciones académicas y de investigación. La naturaleza


abierta de Linux y la plétora de utilidades útiles incluidas en un sistema base lo convierten en una plataforma
casi hecha a medida para análisis forense digital básico. Esto es especialmente cierto en un entorno académico
donde encontramos que Linux proporciona una solución de bajo costo para permitir el acceso a herramientas
de imágenes y utilidades de examen de archivos que se pueden usar para cubrir los fundamentos de las
investigaciones digitales utilizando herramientas en un entorno que admite múltiples formatos y tipos de
datos. . Por ejemplo, podemos usar el programa dd para imágenes y tallado simples; grep para ubicar y
examinar estructuras del sistema de archivos y artefactos de cadenas de texto, y el comando le nuevamente
con xxd para identificación y análisis de firmas. Esto nos proporciona prácticamente el mismo conjunto de
herramientas simples necesarias para presentar los conceptos básicos del análisis forense digital y al mismo
tiempo enseñar la familiaridad con la línea de comandos de Linux. Linux como plataforma forense puede
proporcionar fácilmente un medio principal para la educación en investigaciones digitales. Y, de hecho, se ha
hecho referencia a versiones anteriores de esta guía en muchos programas de grado avanzado y de aplicación
de la ley que enseñan análisis forense digital básico.

¿Dónde están todas las herramientas GUI?

En la medida de lo posible, las herramientas representadas en esta guía se pueden llamar y requieren la
interacción del usuario a través del entorno de la línea de comandos. Esto no es simple sadismo. Se trata de
aprender Linux (y de alguna manera UNIX como subproducto). Este punto se tratará a lo largo de este
documento, pero el objetivo aquí es presentar herramientas y cómo interactuar a través de la línea de
comandos. La confianza en las herramientas GUI es comprensible y no se menosprecia por completo aquí. Si
está haciendo el esfuerzo de leer y seguir esta guía, entonces se asume que desea aprender Linux y el poder
que brinda la línea de comandos. Hay dos puntos principales en los que podemos centrarnos aquí:

La primera es que Linux (y UNIX) encuentran su base en la línea de comandos. Las implementaciones
modernas de Linux y UNIX todavía están, en esencia, impulsadas por un sistema al que se puede acceder
más fácilmente desde una interfaz de línea de comandos. Por esta razón, saber cómo interactuar con la línea
de comandos brinda a los examinadores la gama más amplia de capacidades, independientemente de la
distribución o configuración de Linux que se encuentre. Sí, se trata de herramientas y utilidades forenses, pero es

12
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

también sobre sentirse cómodo con Linux. Es por esta razón que seguimos aprendiendo un editor de línea de
comandos como vi y herramientas simples de copia de nivel de bits como dd. Existe una probabilidad muy alta de
que cualquier sistema Linux/UNIX que encuentre tenga estas herramientas.

El segundo punto es que conocer y comprender la línea de comandos es, en sí mismo, una herramienta muy
poderosa. Una vez que se dé cuenta del poder de las canalizaciones de comando y el control de flujo (usando
bucles directamente en la línea de comando), se encontrará capaz de resolver los problemas mucho más rápido
de lo que pensaba anteriormente. Aprender el uso adecuado y el poder de las utilidades como awk, sed y grep
abrirá algunas técnicas poderosas para analizar registros estructurados y otras fuentes de datos. Esta guía debe
proporcionar una comprensión básica de cómo se pueden usar. Una vez que comprenda y comience a aprovechar
este poder, se encontrará anhelando una línea de comando y sus utilidades cuando no haya una disponible.

Tenga en cuenta estos puntos a medida que realiza los ejercicios aquí. Entender por qué y cómo funcionan las
herramientas. No se limite a memorizar los comandos en sí. Eso perdería el punto.

Los ejercicios prácticos

Al igual que con las versiones anteriores de esta guía, verá que quedan algunos ejercicios antiguos (pero aún
útiles). La salida y el uso de la herramienta siempre se actualizan para reflejar las versiones actuales de las
herramientas utilizadas. Aunque un poco antiguos, estos ejercicios y los archivos utilizados para presentarlos
siguen siendo útiles y no se han eliminado.

También se han agregado ejercicios en versiones más recientes para cubrir las herramientas de análisis de capa
de aplicación y otras adiciones recientes al arsenal de análisis forense de Linux. Tenga en cuenta que si bien este
documento cubre algunas estrategias forenses y fundamentos básicos, en realidad se trata de las herramientas
que usamos y los conceptos detrás de su empleo. Como tal, algunos de los archivos de ejercicios más antiguos
pueden parecer un poco anticuados, pero aún cumplen el propósito de proporcionar un conjunto de problemas
en los que podemos aprender comandos independientemente del objetivo.

Convenciones utilizadas en este documento

Al ilustrar un comando y su salida, verá algo como lo siguiente:

root@forensicbox:~# salida
del comando

Esta es esencialmente una sesión de línea de comando (terminal) donde...

13
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

raíz@cajaforense:~#

... es el símbolo del sistema, seguido del comando escrito por el usuario y luego la salida del comando.

En Linux, el símbolo del sistema puede tomar diferentes formas según la configuración del entorno. Los valores
predeterminados pueden diferir entre varias distribuciones de Linux y el usuario puede modificarlos aún más.
Pero, en general, normalmente verá algo como el formato en nuestro ejemplo anterior. Este formato es

usuario@hostname [directorio de trabajo actual]$

Esto significa que somos el usuario raíz que trabaja en la computadora (host) llamada forensicbox y nuestro
directorio de trabajo actual es /root (este es el directorio de inicio del usuario raíz , indicado por la representación
abreviada de la tilde) tenga en cuenta que para un inicio de sesión raíz , el carácter final del símbolo del sistema
es #. Hemos personalizado el indicador de inicio de sesión del usuario raíz para mostrar un nombre de usuario
rojo para resaltar aún más cuando la raíz está conectada1 . Si iniciamos sesión como un usuario normal, el
carácter de solicitud predeterminado cambia a $ como en el siguiente ejemplo.

user@forensicbox:~$ resultado
del comando

Esta es una diferencia importante. El usuario raíz es el "superusuario" o administrador del sistema.
Cubriremos las diferencias entre los inicios de sesión de los usuarios más adelante en este documento.

Donde vea puntos suspensivos azules ('...'), indica salida eliminada en aras de la brevedad o la claridad:

root@forensicbox:~# comando
... <--salida eliminada por brevedad
producción
... <--salida eliminada por brevedad

1La aplicación de colores y otras personalizaciones a su símbolo del sistema se puede hacer de varias maneras. Nosotros
utilice una indicación de raíz roja como indicación visual en esta guía.

14
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

1 Instalación

Una de las viejas quejas sobre Linux ha sido su aparente incapacidad para 'autodetectar' el hardware moderno. A lo largo
de los años, el desarrollo del kernel de Linux, el 'cerebro' del sistema operativo, ha sido bastante sólido. La detección y
configuración de hardware solía presentar algunos desafíos únicos para los principiantes de Linux. Si bien pueden surgir
problemas ocasionalmente, el hecho es que configurar una máquina Linux como una estación de trabajo simple ya no es
el ejercicio potencialmente frustrante que alguna vez fue. La detección automática del kernel del hardware se ha convertido
en la norma, y la mayoría de las distribuciones de Linux se pueden instalar con un mínimo de complicaciones en todos los
hardware excepto en los más avanzados, y por lo general incluso entonces.

Para la gran mayoría de las computadoras, los controladores y la configuración predeterminados del kernel funcionarán
"desde el primer momento" para los sistemas antiguos y nuevos. La gama de ayuda en línea disponible para cualquier
distribución dada es mucho más amplia ahora que hace diez años, y la mayoría de los problemas se pueden resolver con
una búsqueda específica en Internet. En su mayor parte, las soluciones que son efectivas en una distribución serán
efectivas en todos los ámbitos. Es posible que este no sea siempre el caso, pero si está familiarizado con su sistema, a
menudo puede interpretar las soluciones y aplicarlas a su plataforma en particular.

Si su máquina Linux va a ser un sistema de arranque dual con Windows, puede usar el Administrador de dispositivos de
Windows para registrar todo el hardware instalado y la configuración utilizada por Windows.
La mayoría de las versiones recientes de las distribuciones de Linux tienen una detección de hardware extraordinaria, por
lo que normalmente esto simplemente no será necesario. Pero aún así es útil tener una buena idea del hardware que está
utilizando, de modo que si surgen problemas, sus consultas de soporte pueden ser dirigidas.

Como mínimo, querrá saber y planificar:

Particionamiento del disco duro

tamaños y distribución de particiones

Con guración de red

compatibilidad del adaptador

Gestión de red (DHCP, estática, etc.)

La mayoría de las distribuciones tienen toneladas de documentación, incluida ayuda en línea y manuales imprimibles.
Realice una búsqueda en la Web y es probable que encuentre una serie de respuestas a cualquier pregunta que pueda
tener sobre problemas de compatibilidad de hardware. Al final de esta guía se proporciona una lista de recursos educativos
útiles de Linux. Usalos, usalos a ellos. Y recuerda siempre investigar primero antes de saltar a un foro y hacer preguntas.

15
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

1.1 Distribuciones

Linux viene en varios "sabores" diferentes. Estos se conocen con mayor frecuencia como "Linux
distribución" o "distro". La con guración del núcleo, las herramientas disponibles y el formato del paquete (la ruta de
instalación y actualización del software) suelen diferenciar las distintas distribuciones de Linux.

Es común escuchar a los usuarios quejarse de que el dispositivo X funciona con una distribución, pero no con otra,
etc. La referencia está en la versión del kernel de Linux que se utiliza y, por lo tanto, en los controladores actualizados
"
o los parches aplicados por el proveedor de la distribución, no en la versión de la distribución (o la distribución en sí).

Una cosa que hemos visto más y más últimamente son distribuciones algo especializadas o, en algunos casos,
distribuciones que se perciben como especializadas. Todavía existen versiones de Linux de "estación de trabajo
general": Arch, CentOS, Debian, Ubuntu, Slackware, Gentoo, etc., pero ahora también tenemos especialización:
distribuciones completas diseñadas y distribuidas específicamente para un público objetivo como pen-testers,
administradores de empresas, etc.

Algunos ejemplos de distribuciones especializadas que pueden ser de interés para los lectores de este documento:

sistema operativo loro - Una distribución de seguridad y forense.

Estación de trabajo SANS SIFT - Una distribución avanzada de respuesta a incidentes y análisis forense digital
ampliamente respaldada, actualizada con frecuencia y bien equipada con todas las herramientas que necesitará
para realizar evaluaciones digitales, respuesta a incidentes y exámenes forenses digitales.

BlackArch Linux - Otra distribución de seguridad basada en Arch Linux con un repositorio masivo de
herramientas relacionadas con la seguridad

kali linux - Una excelente distribución de pruebas de penetración y seguridad.

Hay muchos otros, incluidas otras selecciones para distribuciones de arranque centradas en la seguridad y
distribuciones "ligeras". Sin embargo, no dejes que las opciones te confundan. Encuentre una distribución principal,
instálela y apréndala.

Casi todas las distribuciones de Linux son perfectamente adecuadas para su uso como plataforma forense. La mayoría
de las personas nuevas en Linux están gravitando hacia Ubuntu como su plataforma preferida. La comunidad de
soporte es enorme y la mayoría del software ampliamente disponible para análisis forense de Linux está diseñado
específicamente para Ubuntu y es compatible con Ubuntu (aunque no exclusivamente en la mayoría de los casos). En
una nota personal, encuentro Ubuntu menos que ideal para aprender Linux. Esto NO quiere decir que Ubuntu o sus
variaciones no sean excelentes plataformas forenses. Pero esta guía está enfocada en el aprendizaje, y parte de ese
viaje incluye comenzar desde cero y comprender cómo funciona el sistema operativo y cómo está diseñado para
adaptarse a su entorno. Para eso nos enfocamos en una distribución más 'manual' y tipo Unix.

dieciséis
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Si no está seguro de por dónde empezar, utilizará esta guía como referencia principal y está interesado principalmente
en las aplicaciones forenses de Linux, le sugiero Slackware. La distribución comercial original, Slackware, existe desde
hace décadas y proporciona un buen estándar de Linux que se mantiene fiel a la filosofía de Unix. Slackware, que no se
ve abrumado por las herramientas de configuración de GUI, tiene como objetivo producir la distribución de Linux más
"similar a UNIX" disponible. Uno de mis favoritos personales y, en mi humilde opinión, actualmente una de las mejores
opciones para una plataforma forense. (http://www.slackware.com/). Esta guía está diseñada para usarse con una
instalación de Slackware Linux.

Una cosa a tener en cuenta: como se mencionó anteriormente, si va a utilizar Linux como una estación de trabajo
forense, trate de no confiar demasiado en las herramientas GUI. Casi todos los ajustes y configuraciones en muchas
distribuciones de Linux se mantienen en archivos de texto (generalmente en su directorio de inicio o en /etc). Al aprender
a editar los archivos usted mismo, evitará problemas cuando el sistema de ventanas X no esté disponible o cuando la
herramienta GUI específica en la que confíe no esté en un sistema al que necesite acceder. Además, el conocimiento
de los archivos de configuración de texto (donde existan) le dará una idea de lo que es "normal" y lo que podría haber
cambiado cuando examina un sistema Linux en cuestión (aunque ese no es el enfoque de este documento). . Aprender
a interpretar los archivos de configuración de Linux es parte de la experiencia.

1.2 SLACKWARE y uso de esta guía

Debido a las diferencias en la arquitectura, la distribución de Linux que elija puede generar resultados diferentes en la
salida de los comandos y, en algunos casos, un comportamiento general diferente. Además, algunas secciones de este
documento que describen los archivos de configuración, los scripts de inicio o la instalación del software pueden parecer
algo diferentes según la distribución que seleccione.

Si está seleccionando una distribución de Linux con el único propósito de aprender y seguir este documento, nuevamente,
le sugiero Slackware. Slackware es estable y no intenta enriquecer la experiencia del usuario con hacks de sistemas de
archivos de última generación o configuraciones automáticas que puedan dificultar el trabajo forense. Los programas y
archivos binarios incluidos con Slackware generalmente no se modifican desde "upstream", lo que significa que no se
aplican parches especí cos de Slackware. Esto puede facilitar un poco la obtención de soporte de los desarrolladores
upstream. Las secciones detalladas de esta guía sobre el funcionamiento interno de Linux se escribirán para una
instalación básica de Slackware de 64 bits.

De forma predeterminada, la rutina de instalación actual de Slackware deja la partición inicial del disco en manos del
usuario. No existen esquemas predeterminados que resulten en sorprendentes "grupos de volúmenes" u otras técnicas
complejas de administración de discos. La tabla de particiones resultante y la tabla del sistema de archivos (también
conocida como fstab) están completamente dirigidas por el usuario.

Slackware Linux es estable, consistente y simple. Como siempre, Linux es Linux. Cualquier distribución se puede
cambiar para que funcione como cualquier otra (en teoría). Sin embargo, mi filosofía siempre ha sido comenzar con un
sistema óptimo, en lugar de intentar "hacer retroceder" un sistema muy modificado y optimizado para el escritorio en
lugar de una estación de trabajo forense.

17
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

1.3 Métodos de instalación

Descargue los archivos de medios de arranque necesarios (generalmente en forma de ISO), grábelos en un DVD o
escriba la imagen en una unidad extraíble y arranque los medios. Este es el método más común para instalar Linux. La
mayoría de las distribuciones se pueden descargar de forma gratuita a través de http, ftp o torrent. Slackware está
disponible en http://www.slackware.com. Echa un vistazo a http://distrowatch.com para obtener información sobre
cómo descargar e instalar otras distribuciones de Linux.

Con la mayoría de las rutinas de instalación modernas, gran parte del trabajo se realiza por usted o se le solicita lo que
se necesita y se proporcionan valores predeterminados relativamente seguros. Como se mencionó anteriormente, la
detección de hardware ha experimentado grandes mejoras en los últimos años. Muchos (si no la mayoría)
Las distribuciones de Linux son mucho más fáciles y rápidas de instalar que otros sistemas operativos "convencionales".
La instalación típica de Linux está bien documentada en línea (consulte el sitio web de su distribución específica para
obtener más información). Hay numerosos libros disponibles sobre el tema, y la mayoría de ellos se suministran con una
distribución de Linux lista para instalar.

Familiarícese con las convenciones de nomenclatura de discos y particiones de Linux (tratadas en el Capítulo II de este
documento) y debería estar listo para comenzar.

1.4 Notas de instalación de Slackware

Si decide darle una oportunidad a Slackware, aquí hay algunas pautas simples. La documentación proporcionada en el
sitio web de Slackware es completa y fácil de seguir. Lea allí primero... por favor.

Elija Linux independiente o arranque dual. Instale Windows primero en un sistema de arranque dual.
Determine cómo desea particionar el sistema Linux. Una sola partición raíz y una sola partición de intercambio están
bien. Puede que le resulte más fácil cuando empiece a instalar Linux en una máquina virtual (VM), ya sea a través de
VirtualBox o VMware, por ejemplo. Esto le permitirá tomar instantáneas en el camino y recuperarse de cualquier error.
También le brinda acceso al soporte de la comunidad a través del host mientras instala su sistema Linux en una máquina
virtual. Usar Linux en una máquina virtual es una forma perfectamente aceptable de seguir esta guía, y probablemente
la más fácil si es un principiante absoluto. En los cursos que enseño, se alienta a los estudiantes a usar máquinas
virtuales mientras aprenden.

LEA la documentación de instalación antes de iniciar el proceso. No tengas prisa. Si quieres


aprender Linux, tienes que estar dispuesto a leer. Para Slackware, eche un vistazo a los
capítulos de instalación del "Libro de Slack" actualizado que se encuentra en http: //
www.slackbook.org/beta. Hay instrucciones detalladas allí si necesita ayuda paso a paso,
incluida la partición, etc. Para una comprensión básica de cómo funciona Slackware y cómo
usarlo, el Libro de Slack debería ser su primera parada.

Los siguientes son algunos consejos de instalación. Lea esto y luego lea la sección Instalación del Slackbook vinculado
anteriormente.

18
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

1. Inicie el medio de instalación

Lee atentamente cada pantalla

Aceptar los valores predeterminados funciona en la mayoría de los casos

Su hardware será detectado y con gurado en la mayoría de las circunstancias

El soporte en línea es extenso si tiene problemas Si un hardware

específico causa problemas durante el proceso de instalación (no detectado, no funciona, etc.) NO significa
que no es compatible. Complete la instalación si puede y solucione el problema.

El medio de instalación de Slackware arranca una versión del núcleo con soporte para una gran selección
de hardware (el núcleo se llama enorme.s). Presione la tecla F2 en el arranque: solicite más información.

Una vez que se inicia el sistema, se le presenta el indicador del mapa del teclado seguido del indicador de
inicio de sesión de slackware :. LEA TODA LA PANTALLA como se indica. Inicie sesión como root y
continúe con su rutina de instalación.

2. Partición y formato

Particionará su sistema Slackware Linux usando fdisk o gdisk (si prefiere un diseño GPT). Es posible que
desee investigar sobre su uso antes de comenzar.

Este paso normalmente forma parte del proceso de instalación o está cubierto en la documentación de la
distribución. Puedes particionar como quieras. Comience con solo dos particiones para simplificar:

root como tipo "Linux"


swap como tipo "Swap". Para la partición de intercambio, puede usar 2 veces la memoria de su
sistema como regla general para el tamaño (hasta 16 GB donde se dice que el rendimiento es
limitado).

3. Instalación del paquete

La rutina de instalación principal de Slackware se inicia con el comando setup. Deberá asegurarse de tener
su disco correctamente particionado antes de ingresar a la rutina de configuración.

Tómese el tiempo para leer cada pantalla completamente a medida que aparece.

Cuando se le solicite formatear las particiones, sugeriría seleccionar el sistema de archivos ext4 .

Cuando se le pregunte qué paquetes seleccionar para la instalación, es mejor seleccionar una instalación
completa. Esto le permite acceder a todo el software que viene con el sistema, junto con múltiples entornos
de escritorio X Window. Para un cuadro de aprendizaje, le brindará la mayor exposición al software
disponible para la experimentación y, además, garantiza que no omita las bibliotecas que pueden ser
necesarias para instalar el software más adelante.

4. Configuración de la instalación

19
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Entiende tu método de arranque

El cargador de arranque selecciona el sistema operativo que se va a arrancar.


* Tenga en cuenta las opciones UEFI frente a las BIOS heredadas. La ruta más fácil en una
computadora física (a diferencia de una máquina virtual) es configurar su sistema en modo
heredado * LILO (LInuxLOader) está instalado de forma predeterminada en Slackware, pero es
posible instalar GRUB si lo desea.

* Normalmente, seleccione la opción para instalar LILO en el registro de inicio maestro (MBR), a
menos que esté utilizando un administrador de inicio diferente en una situación de inicio dual.

* Si debe usar EFI, omita la instalación de LILO y finalice su instalación.


GRUB o eLILO se pueden instalar para EFI una vez completada la instalación, pero antes de
reiniciar. Debe leer el archivo Léame de UEFI que se incluye en el directorio raíz de los medios
de instalación de Slackware antes de comenzar.

Crea un nombre de usuario para ti. No utilice el inicio de sesión raíz para las operaciones normales.

Para obtener más información, consulte el archivo CHANGES_AND_HINTS.TXT en el medio de instalación.


Este archivo está repleto de sugerencias útiles y cambios de interés de una versión a otra.

1.5 Usuarios del sistema

Linux es un sistema multiusuario. Está diseñado para su uso en redes (se basa en Unix y su pila TCP/IP original). El
usuario raíz es el administrador del sistema y se crea de forma predeterminada durante la instalación. El uso exclusivo del
inicio de sesión raíz es PELIGROSO. Linux asume que root sabe lo que está haciendo y le permite hacer lo que quiera,
incluso destruir el sistema. No inicie sesión como root a menos que deba hacerlo. Habiendo dicho esto, parte del trabajo
realizado para el análisis forense se realizará como root para permitir el acceso a dispositivos sin procesar y comandos
del sistema.

1.5.1 Adición de un usuario normal

El análisis forense (sobre todo las adquisiciones) y la administración básica del sistema a veces requerirán permisos de
root . Pero simplemente iniciar sesión como root y realizar su análisis, particularmente desde una sesión de X Window,
no es recomendable. Necesitamos agregar una cuenta de usuario normal. Desde allí, puede usar su para iniciar sesión
como root temporalmente (se explica en la siguiente sección).

Slackware viene con un script conveniente, adduser, para manejar los detalles de la configuración de nuestra cuenta
adicional. Algunos de los elementos establecidos por este script incluyen:

Nombre de inicio de sesión

20
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

UID (identificación de usuario)

Grupo inicial y pertenencia al grupo

directorio de inicio

shell de usuario

Longevidad de la cuenta

Información general de la cuenta (nombre, dirección, etc.)

Contraseña inicial

En su mayor parte, los valores predeterminados son aceptables (incluso los grupos predeterminados; tenga cuidado de no
omitir esta parte). Invocas el script con el comando adduser (ejecutarlo como root, obviamente) y el programa te pedirá la
información requerida. Cuando solicite grupos adicionales, asegúrese de usar la flecha hacia arriba en su teclado para
mostrar los grupos disponibles. Aceptar los grupos predeterminados está bien para nuestros propósitos.

Una vez completado, puede cerrar la sesión completamente usando el comando de salida y volver a iniciar sesión como un
usuario normal.

1.5.2 El superusuario [raíz]

Entonces, hemos establecido que necesitamos ejecutar nuestro sistema como un usuario normal. Si Linux le da un mensaje
de error que indica un problema de permisos, entonces con toda probabilidad necesita ser root para ejecutar el comando o
editar el archivo, etc. No tiene que cerrar sesión y luego volver a iniciar sesión como root para hacer esto. . Simplemente use
el comando su para otorgarse permisos de root (suponiendo que conozca la contraseña de root ). Introduzca la contraseña
cuando se le solicite. Ahora tiene privilegios de root (el aviso del sistema lo reflejará). Cuando haya terminado de usar sus
privilegios, regrese a su inicio de sesión original escribiendo exit. Podemos usar el comando whoami para imprimir nuestro
usuario actual. Aquí hay una muestra de su sesión:

barry@forensicbox:~$ whoami barry

barry@forensicbox:~$ / sbin/fdisk -l /dev/sda fdisk: no


se puede abrir /dev/sda: Permiso denegado

barry@forensicbox:~$ su -
Clave:

root@forensicbox:~# raíz whoami

21
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# / sbin/fdisk -l /dev/sda


Disco /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectores
Modelo de disco: Samsung SSD 850
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco: dos
Identificador de disco: 0x7a54a740

Bota comienzo Final Sectores Tamaño Id Tipo


Dispositivo / 2048 526335 524288 256M 83 Linux
dev/sda1 / 526336 17303551 16777216 Intercambio de Linux 8G 82
dev/sda2 /dev/sda3 17303552 151521279 134217728 64G 83Linux
/dev/sda4 151521280 1953525167 1802003888 859.3G 83 Linux

root@forensicbox:~# salir
cerrar sesión

barry@cajaforense:~$

Tenga en cuenta que el "-" después de su permite que Linux aplique el entorno de la raíz (incluida la ruta de la raíz)
a su inicio de sesión su . Por lo tanto, no tiene que ingresar la ruta completa de un comando. En realidad, su es un
comando "cambiar de usuario", y puede permitirle convertirse en cualquier usuario (si conoce la contraseña),
no solo root. Tenga en cuenta que después de que escribimos exit como root, nuestro indicador indica que estamos de vuelta
a nuestro usuario normal.

Una palabra de precaución: Sea MUY juicioso en el uso del inicio de sesión raíz . Puede ser destructivo.
Para tareas simples que requieren permiso de root , use su y utilícelo con moderación.

1.6 Entorno de escritorio


Cuando se habla de idoneidad forense, su elección de sistema de escritorio puede marcar la diferencia.
En primer lugar, los términos "entorno de escritorio" y "administrador de ventanas" NO son intercambiables. Aclaremos
brevemente los componentes de una GUI común de Linux.

X Window: este es el entorno GUI básico. Comúnmente conocido como "X", es


la aplicación que proporciona el marco GUI y NO es parte del sistema operativo. X es un
programa cliente/servidor con total transparencia de red.

Administrador de ventanas: este es un programa que controla la apariencia de las ventanas en el


Sistema X Window, junto con ciertos comportamientos de GUI (enfoque de ventana, etc.). Ejemplos
son Kwin (para KDE), Metacity, XFWM, Enlightenment, i3, etc.

22
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Entorno de escritorio: una combinación de Window Manager y una interfaz uniforme que proporciona la experiencia
de escritorio general. Algunos ejemplos son XFCE, GNOME, KDE,
etc.

El administrador de ventanas predeterminado para KDE es KWin

El administrador de ventanas predeterminado para XFCE es XFWM

Estos valores predeterminados se pueden cambiar para permitir preferencias en cuanto a velocidad, administración de
recursos e incluso preferencias de flujo de trabajo sobre el deseo de "agradable a la vista", etc. También puede optar por
ejecutar un Administrador de ventanas sin un entorno de escritorio. Por ejemplo, Enlightenment Window Manager es conocido
por su vistosidad y se puede ejecutar de forma independiente, con o sin KDE o GNOME, etc.

Slackware ya no viene con GNOME como opción, aunque se puede instalar como cualquier otra aplicación. Durante la
instalación básica de Slackware, podrá elegir entre KDE, XFCE y algunos otros. Me gustaría sugerir XFCE. Proporciona una
interfaz más limpia para que un principiante aprenda. Es más ágil y, por lo tanto, requiere menos recursos. Todavía tiene
acceso a muchas utilidades de KDE, si eligió instalar KDE durante la selección del paquete. Puede instalar más de un
escritorio y alternar entre ellos, si lo desea. La forma más fácil de cambiar es con el comando xwmconfig .

1.7 El núcleo de Linux

El kernel de Linux es el "cerebro" del sistema. Es el componente base del sistema operativo que permite que el hardware
interactúe y administre los controladores de hardware y el sistema.
recursos.

Al igual que con todas las herramientas forenses, debemos tener una visión clara de cómo interactuará cualquier versión del
kernel con nuestras plataformas forenses y el hardware en cuestión.

Puede determinar su versión actual del kernel con el comando uname :

root@forensicbox:~# uname -a Linux


forensicbox 5.4.30 #1 SMP Jue 2 de abril 16:03:32 CDT 2020 x86_64 Intel(R)
CPU Core(TM) i5-3550 a 3,30 GHz Intel GNU/Linux original

La clave para el uso forense seguro (desde el punto de vista de la evidencia) de CUALQUIER sistema operativo es el
conocimiento de su entorno y las pruebas adecuadas. Por favor tenlo en mente. DEBE comprender cómo su hardware y
software interactúan con cualquier sistema operativo antes de usarlo en un análisis forense de "producción". Si por alguna
razón siente la necesidad de actualizar su kernel a una versión más nueva (ya sea a través de actualizaciones automáticas
o manualmente), asegúrese de leer la documentación y el registro de cambios para comprender cualquier cambio significativo
en la arquitectura o el controlador que pueda ocurrir. impacto en el entorno forense.

23
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una de las mayores fortalezas que ofrece Linux es el concepto de "control total". Esto requiere pruebas
exhaustivas y comprensión. No pierda de vista esto en busca de una experiencia de escritorio "fácil".

1.8 Interacción entre el núcleo y el hardware

En esta sección, nos centraremos en el conocimiento de configuración de hardware para la comprensión


básica de un entorno forense sólido en las distribuciones de Linux actuales. Discutiremos brevemente la
configuración y el inventario de hardware, la administración de nodos de dispositivos (eudev o udev) y el
entorno de escritorio.

1.8.1 Configuración de hardware

Siempre es útil saber exactamente qué hardware hay en su sistema. Habrá ocasiones en las que necesite
cambiar o seleccionar diferentes controladores o módulos del kernel para que una pieza de hardware
funcione correctamente. Debido a que existen tantas configuraciones de hardware diferentes, la
configuración específica de los controladores para su sistema quedará fuera del alcance de esta guía. La
detección del kernel y la configuración de los dispositivos (interfaces de red, controladores de gráficos,
sonido, etc.) es automática en la mayoría de los casos. Si tiene algún problema, tome nota de su hardware
(ver a continuación) y realice una búsqueda. Google es su amigo, y hay una lista de puntos de partida
útiles para obtener ayuda al final de esta guía.

Hay varias formas de determinar qué hardware específico está ejecutando en su sistema. Puede usar lspci
para obtener información más detallada sobre dispositivos especí cos conectados a su sistema. lspci (lista
de dispositivos PCI), es para aquellos dispositivos específicamente conectados al bus PCI. Si tiene
problemas de hardware y busca algo como "tarjeta de red no detectada en Linux", y sigue un enlace a un
foro de soporte, casi siempre encontrará la solicitud de "publicar la salida de lspci". Es uno de los primeros
pasos de diagnóstico para determinar muchos problemas de hardware en Linux. La salida de este comando
puede volverse cada vez más detallada (o "detallada") agregando las opciones -v, -vv o -vvv. Tenga en
cuenta que puede ejecutar lspci desde el disco de instalación antes de ejecutar el programa de instalación

Ejemplo de salida de resumen para lspci:

root@forensicbox:~# lspci
00:00.0 Puente de host: Intel Corporation Haswell-ULT DRAM Controller (rev 09)
00:02.0 Controlador compatible con VGA: controlador de gráficos integrado Intel Corporation
Haswell-ULT (rev. 09)
00:03.0 Dispositivo de audio: Intel Corporation Haswell-ULT HD Audio Controller (rev 09)
00:14.0 Controlador USB: Intel Corporation 8 Series USB xHCI HC (rev. 04)
00:16.0 Controlador de comunicación: Intel Corporation 8 Series HECI #0 (rev 04) 00:1b.0
Dispositivo de audio: Intel Corporation 8 Series HD Audio Controller (rev 04) 00:1c.0 Puente
PCI: Intel Corporation 8 Series PCI Express Puerto raíz 3 (rev e4)

24
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

00:1d.0 Controlador USB: Intel Corporation 8 Series USB EHCI #1 (rev 04) 00:1f.0 Puente ISA:
Intel Corporation 8 Series Controlador LPC (rev 04) 00:1f.2 Controlador SATA: Intel Corporation
8 Series Controlador SATA 1 [modo AHCI] (
,ÿ rev 04)
00:1f.3 SMBus: Controlador SMBus serie 8 de Intel Corporation (rev. 04)
04:00.0 Controlador de red: Intel Corporation Wireless 7260 (rev 6b)

Al leer este resultado, puede ver el hecho de que la interfaz de red en este sistema es un chipset Intel
Corporation Wireless 7260 . Esta es información útil si tiene problemas para que la interfaz funcione y desea
buscar soporte. Es mucho más probable que obtenga ayuda útil si busca "Linux Intel wireless 7260 no funciona"
en lugar de "La tarjeta de red de Linux no funciona".

Esto nos lleva al tema de los módulos del kernel.

1.8.2 Módulos del núcleo

Como se mencionó anteriormente, el kernel proporciona la interfaz más básica entre el hardware y el software
del sistema y la gestión de recursos. Esto incluye controladores y otros componentes que en realidad son
pequeñas piezas de código separadas que pueden compilarse como módulos (cargarse o descargarse
dinámicamente) o compilarse directamente en la imagen del núcleo.

Puede llegar un momento en el que descubra que el kernel está cargando un módulo menos que ideal para
una pieza específica de hardware, lo que quizás provoque que no funcione o, en algunos casos, funcione con
un rendimiento inferior al óptimo. Las tarjetas de red inalámbrica pueden ser un ejemplo común.

Mirando hacia atrás en nuestra salida anterior de lspci , por ejemplo, recuerde que nuestra salida mostraba un
conjunto de chips Intel Corporation Wireless 7260 .

Si quisiera ver exactamente qué módulo del kernel se está utilizando para controlar este dispositivo, puedo
usar la opción -k para lspci (salida abreviada):

raíz@cajaforense:~# lspci -k | menos


...
04:00.0 Controlador de red: Intel Corporation Wireless 7260 (rev 6b)
Subsistema: Intel Corporation Dual Band Wireless-AC 7260
Controlador del kernel en uso: iwlwifi
Módulos del núcleo: iwlwifi

Esta vez, la salida proporciona información adicional, incluidos los módulos que se cargan cuando se detecta
el dispositivo. Esta puede ser una información importante si estoy tratando de solucionar un dispositivo que no
funciona bien. La ayuda en línea puede sugerir el uso de un controlador completamente diferente. Si ese es el
caso, es posible que deba incluir en la "lista negra" el módulo cargado actualmente para evitar que se cargue
y obstaculice el controlador correcto (que puede

25
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

necesario especificar). La lista negra normalmente se realiza en /etc/modules.d/ ya sea creando un archivo
blacklist-[modulename].conf o haciendo una entrada en blacklist.conf, dependiendo de su distribución. En
Slackware, puede leer el archivo README en /etc/modules.d y la página de manual de modules.d para obtener
más información. Dado que los pasos para esto varían enormemente según el controlador, sus dependencias y
la existencia de módulos de la competencia, no cubriremos esto con más profundidad. Puede encontrar ayuda
especí ca para problemas de controladores individuales en línea.

Tenga en cuenta que si está utilizando una computadora portátil o de escritorio con un adaptador inalámbrico
USB, es probable que no aparezca en lspci. Para eso tendrás que usar lsusb (lista USB - hay un patrón aquí, ¿ves?).
En el siguiente resultado, lsusb revela información sobre un adaptador de red inalámbrica. Use la opción -v para
una salida más detallada (negrita para énfasis):

raíz@cajaforense:~# lsusb
...
Bus 001 Dispositivo 054: ID 2109:2812 VIA Labs, Inc. Concentrador
VL812 Bus 001 Dispositivo 004: ID 174c:2074 ASMedia Technology Inc. ASM1074 Concentrador
de alta velocidad Bus 001 Dispositivo 079: ID 1b1c:1a06 Corsair
Bus 001 Dispositivo 003: ID 046d:c077 Ratón óptico Logitech, Inc. M105 Bus 001 Dispositivo 007:
ID 11b0:6598 TECNOLOGÍA ATECH FLASH
Bus 001 Dispositivo 120: ID 148f:5372 Ralink Technology, Corp. RT5372 Adaptador inalámbrico Bus
001 Dispositivo 005: ID 174c:2074 ASMedia Technology Inc. ASM1074 Concentrador de alta
velocidad Bus 001 Dispositivo 050: ID 046d:c31c Logitech, Inc. Teclado K120 Bus 001 Dispositivo
001: ID 1d6b:0002 Concentrador raíz de Linux Foundation 2.0
...

O use el script usb-devices, que organiza la información de /sys/bus/usb/devices/


usb en un formato legible por humanos (mortales). Tenga en cuenta que también devuelve el módulo del kernel
en uso, como lo hace lspci -k para los dispositivos de bus PCI (negrita para énfasis).
Usamos la tubería ( |) al comando less para paginar la salida para lectura (más sobre esto más adelante):

root@forensicbox:~# dispositivos-usb | menos


...
T: Bus=01 Lev=01 Prnt=01 Port=05 Cnt=05 Dev#=120 Spd=480 MxCh= 0 D: Ver=
2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs = 1 P: Proveedor=148f
ProdID=5372 Rev=01.01
S: Fabricante = Ralink
S: Producto = 802.11 n WLAN
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=450mA I: If#=
0 Alt= 0 #EPs= 7 Cls=ff(vend.) Sub=ff Prot=ff Driver=rt2800usb
...

Tenga en cuenta que los comandos cubiertos aquí son en gran medida portátiles entre distribuciones, pero las
ubicaciones de los archivos y los métodos para administrar los módulos pueden diferir. El proceso de identificación
de módulos y hardware debería ser mayormente el mismo. Páginas del manual (leer usando el hombre

26
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

command) y la documentación de distribución siempre se debe confiar en la resolución de problemas primarios.

Tenga en cuenta que estos mismos comandos se pueden ejecutar en una computadora en cuestión mediante el uso
de medios de arranque forense basados en Linux. Si tiene tiempo, es una excelente manera de hacer un inventario de
una computadora en cuestión, ya sea antes de la confiscación o si no puede confiscar la computadora (solo obtenga
una imagen por cualquier motivo), pero aún desea tener un inventario de hardware completo.2

1.8.3 Dispositivos Hotplug y UDEV

En las distribuciones modernas, la administración de dispositivos Linux se ha entregado a eudev o (o udev bajo
Systemd)3 . En el pasado, los nodos de dispositivos (archivos que representan los dispositivos, ubicados en el
directorio /dev ) eran estáticos, es decir, existían en todo momento, estuvieran en uso o no.

Entonces, ¿por qué cubrimos la conexión en caliente del dispositivo en una guía forense? Un conocimiento básico del
acceso a dispositivos es fundamental para comprender cómo se detectan y presentan al examinador los dispositivos
(discos externos, discos duros sujetos, etc.).

udev crea nodos de dispositivos "en la y". Los nodos se crean a medida que el kernel detecta el dispositivo y el
directorio /dev se llena en tiempo real. Además de ser más eficiente, udev también se ejecuta en el espacio del usuario.
Uno de los bene cios de udev es que proporciona "denominación persistente". En otras palabras, puede escribir un
conjunto de reglas que permitirán que udev reconozca un dispositivo según las características individuales (número de
serie, fabricante, modelo, etc.). La regla se puede escribir para crear un enlace de nido por el usuario en el directorio /
dev , de modo que, por ejemplo, siempre se pueda acceder a mi memoria USB a través de un nombre de nodo de
dispositivo arbitrario de mi elección, como /dev/my-thumb, si así lo elijo. Esto significa que no tengo que buscar a
través de los nodos del dispositivo USB para encontrar el nombre correcto del dispositivo si tengo más de un dispositivo
de almacenamiento externo conectado. Puedo conectar 4 dispositivos USB y, en lugar de buscar en /dev/sdc, sdd,
sde y sdf , solo puedo ir a /dev/my-thumb. Para una explicación agradable, aunque algo desactualizada, de las reglas
de udev, vea: .

En Slackware, [e]udev se ejecuta como un demonio desde el script de inicio /etc/rc.d/rc.udev. Discutiremos estos
scripts de inicio con más detalle más adelante en este documento. No haremos ninguna configuración especí ca para
udev en nuestras computadoras forenses en este momento. Lo discutimos aquí simplemente porque juega un papel
importante en el manejo de dispositivos y, como tal, es de interés para los examinadores forenses que desean saber
qué está haciendo su sistema. udev NO se involucra en el montaje automático ni en la interacción con las aplicaciones.
Simplemente proporciona una interfaz de hardware a kernel. Los discos y otros medios de almacenamiento son
manejados por udisks o udisks2. Cubriremos esto con más detalle más adelante.

2Cubriremos más comandos "detallados" para el inventario de hardware más adelante


3
eudev es en realidad un puerto de udev que no es de Systemd; utilizo udev en este documento para evitar diferenciar cada vez.
eudev fue desarrollado por Gentoo y se usa en Slackware, así como un reemplazo para Systemd udev enlazado

27
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

2 Discos, particiones y el sistema de archivos de Linux

A medida que avanza en las siguientes páginas, preste atención a su ID de usuario... deberá estar
rootear o usar sudo para algo de esto.

2.1 Discos

En Linux, los dispositivos se enumeran como archivos. Este es un concepto importante para los examinadores forenses.
Significa, como veremos más adelante, que muchos de los comandos que podemos usar en archivos regulares,
También se puede usar en "les". Podemos enumerarlos, codificarlos y buscarlos de la misma manera

disco de la forma en que hacemos archivos en cualquier directorio de usuario estándar. El directorio especial donde estos dispositivos
Los "les" se mantienen es /dev.

Como vimos anteriormente, con la adopción de eudev y udisks, a los discos ahora se les asigna un nodo de dispositivo.
nombres dinámicamente, lo que significa que los nombres no existen hasta que el dispositivo (una memoria USB,
por ejemplo) está conectado al sistema. Por supuesto, cuando arranca una configuración normal
computadora, generalmente tiene al menos una unidad de "arranque" ya conectada. En la mayoría de las circunstancias, esto
se denominará sda. Estos nodos de dispositivos se rellenan en el directorio /dev .
Las particiones están simplemente numeradas.

Cuando nos referimos a todo el disco, usamos /dev/sda. Al referirse a una partición en ese
disco, usamos el nombre del disco y el número de la partición, /dev/sda1 por ejemplo.

Dispositivo Nombre del archivo

Primera /dev/sda
partición de /dev/sda1
disco 1 partición 2 /dev/sda2
Segundo disco /dev/sdb
partición 1 /dev/sdb1
partición 2 /dev/sdb2
Medios ópticos /dev/sr0

El patrón descrito anteriormente es bastante fácil de seguir. Si está utilizando un disco SATA estándar,
se denominará sdx , donde la x se reemplaza por una a para la primera unidad detectada y
b para el segundo, etc. De la misma manera, las unidades de CD ROM o DVD conectadas a través del SATA
bus se detectará como /dev/sr0 y luego /dev/sr1, etc.

Tenga en cuenta que los nodos de dispositivos /dev/sdx incluirán dispositivos USB. Por ejemplo, un SATA primario
al disco se le asignará sda. Si conecta un disco USB o una memoria USB, normalmente será
detectado como sdb, y así sucesivamente.

28
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Hay algunos dispositivos de almacenamiento más modernos con esquemas de nombres más complejos. PCIe
Los dispositivos de almacenamiento basados en NVMe incluyen conceptos más nuevos como "espacios de nombres" donde
las convenciones tradicionales ilustradas en la tabla anterior se extienden más allá de la simple partición.
números. Si tiene un dispositivo de almacenamiento NVMe con dos particiones en un solo espacio de nombres,
las particiones se nombrarían de la siguiente manera:

Dispositivo Nombre del archivo

Primer disco NVMe/espacio de nombres /dev/nvme0n1


partición 1 partición 2 /dev/nvme0n1p1
/dev/nvme0n1p2

Discutiremos los medios de almacenamiento NVMe un poco más adelante.

Una forma sencilla de ver los discos y las particiones que están conectados a su sistema es utilizar el
Comando lsblk :

raíz@cajaforense:~# lsblk
NOMBRE MAJ:MIN RM TAMAÑO RO TIPO PUNTO DE MONTAJE
sda 8:0 0 111.8G 0 disco
sda1 8:1 0 64M 0 parte
sda2 8:2 0 128M 0 parte /arranque
sda3 8:3 0 4G 0 parte [CAMBIAR]
sda4 8:4 0 107.6G 0 parte /
sdb 8:16 0 1.8T 0 disco
sdb1 8:17 0 1.8T 0 parte /casa
sdc 8:32 1 15G 0 disco
sdc1 8:33 1 15G 0 parte /ejecutar/medios/barry/evidencia
sr0 11:0 1 1024M 0 habitación

Puede ver en la salida que se enumeran los discos y las particiones, y si alguna de las particiones
están montados, lsblk también nos dará el punto de montaje actual. En este caso vemos /dev/sda2
está montado en /boot, /dev/sda3 es nuestra partición de intercambio, /dev/sda4 es nuestra partición raíz y
tenemos /dev/sdc1 montado como /run/media/barry/Evidence. El último volumen es de una
dispositivo externo, enchufado y montado a través del escritorio.

Otra opción para la información del disco es lsscsi. Aunque lsscsi no muestra particiones, sí
da más información sobre los medios reales:

root@forensicbox:~# lsscsi
[0:0:0:0] disco ATA INTEL SSDSC2CT12 300i /dev/sda
[2:0:0:0] [3:0:0:0]disco ATA Hitachi HDS72302 A5C0 /dev/sdb
[8:0:0:0] cd/dvd HL-DT-ST DVDRAM GH24NS90 IN01 /dev/sr0
disco v125w
caballos de fuerza
1.00 /dev/sdc

29
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Puede ver en el resultado anterior que este sistema en particular tiene un dispositivo USB y dos unidades
internas. Una unidad es una SSD INTEL y la otra un disco duro Hitachi. También hay una unidad de DVD (/
dev/sr0) y una unidad de memoria USB HP v125w (/dev/sdc). lsscsi no viene en la mayoría de las
plataformas por defecto (aunque sí en Slackware). Si tu sistema no lo tiene por defecto, revisa el administrador
de paquetes de tu distribución e instálalo.

Hay otros nombres, mediante enlaces, que pueden acceder a estos nodos de dispositivos. Si explora el
directorio /dev/disk , verá enlaces que brindan acceso a los dispositivos de disco a través de etiquetas de
volumen, UUID de disco, ruta de kernel, etc. Estos nombres son útiles para nosotros porque pueden usarse
para acceder a un disco en particular en un manera repetible sin tener que saber a qué nodo de dispositivo
se le asignará un disco (/dev/sdc o /dev/sdd por ejemplo). Por ahora, solo tenga en cuenta que puede
acceder a un disco con un nombre que no sea el nodo simple asignado por sdx . Tenga en cuenta también
que es posible que algunos de los nodos asignados aún no tengan medios adjuntos. En muchos casos, los
lectores de medios se pueden detectar y asignar nodos antes de que se inserten los medios.

Ahora que tenemos una idea de cómo se llaman nuestros discos, podemos ver las particiones y los
volúmenes. El programa fdisk se puede usar para crear o enumerar particiones en un dispositivo compatible.
Este es un ejemplo de la salida de fdisk en una estación de trabajo Linux usando la opción "lista" (-l [guión
"el"]):

root@forensicbox:~# fdisk -l /dev/sda Disco /dev/sda:


111,8 GiB, 120034123776 bytes, 234441648 sectores Modelo de disco: INTEL SSDSC2CT12

Unidades: sectores de 1 * 512 = 512 bytes


Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco: gpt
Identificador de disco: 08FD4B34-555D-4CFF-A32A-0218C1287428

Dispositivo comienzo Sectores finales Tamaño Tipo 133119


/dev/sda1 / 2048 131072 Arranque BIOS 64M
395263
dev/sda2 133120 262144 Sistema de archivos Linux de 128 M /dev/sda3 395264 8783871 8388608
Intercambio de Linux 4G /dev/sda4 8783872 234441614 225657743 de
Sistema
107,6 de
G archivos Linux

fdisk -l /dev/sdx le brinda una lista de todas las particiones disponibles en una unidad en particular. Cada
partición se identifica por su nombre de Linux. Se dan los sectores inicial y final de cada partición. Se muestra
el número de sectores por partición. Finalmente, se muestra el tipo de partición.

Tenga en cuenta que la salida de fdisk cambiará según el tipo de etiqueta de disco del medio consultado. El
resultado anterior muestra un disco con una etiqueta GPT. Si tiene un MBR estilo DOS estándar, la salida
mostrará campos ligeramente diferentes. Para el manejo nativo de etiquetas de partición GPT, puede usar
gdisk. Aquí está la salida de gdisk en la misma unidad:

30
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

raíz@forensicbox:~# gdisk -l /dev/sda


GPT fdisk (gdisk) versión 1.0.4

Exploración de la tabla de particiones:

MBR: protector
BSD: no presente
APM: no presente
GPT: presente

Encontrado GPT válido con MBR de protección; utilizando GPT.


Disco /dev/sda: 234441648 sectores, 111,8 GiB
Modelo: INTEL SSDSC2CT12
Tamaño del sector (lógico/físico): 512/512 bytes
Identificador de disco (GUID): 08FD4B34-555D-4CFF-A32A-0218C1287428
La tabla de particiones tiene capacidad para 128 entradas
La tabla de partición principal comienza en el sector 2 y termina en el sector 33
El primer sector utilizable es 34, el último sector utilizable es 234441614
Las particiones se alinearán en los límites del sector 2048
El espacio libre total es de 2014 sectores (1007,0 KiB)

Número Inicio (sector) 2048 Tamaño final (sector) Nombre clave


1 133119 64,0 MiB Partición de arranque BIOS EF02
2 133120 395263 128,0 MiB 8300 sistema de archivos Linux
3 395264 8783871 4.0 GiB 8200 Intercambio de Linux
4 8783872 234441614 107,6 GiB 8300 sistema de archivos Linux

¡ANTES DE PODER UTILIZAR LOS SISTEMAS DE ARCHIVOS EN LOS DISPOSITIVOS, DEBEN MONTARSE!
Cualquier sistema de archivos en las particiones que defina durante la instalación se montará automáticamente
cada vez que arrancas.

Incluso cuando los dispositivos no están montados, todavía se pueden escribir. Simplemente no montar un sistema de archivos
no lo protege de ser cambiado inadvertidamente a través de sus acciones o a través de mecanismos
fuera de tu control. Si bien los procesos forenses generales están fuera del alcance de esta guía,
debería ser una práctica común probar sus procedimientos y documentar cada acción.

2.2 Asignación de nodos de dispositivos - Mirando más de cerca

Otra pregunta común surge cuando un usuario conecta un dispositivo en una caja de Linux y no recibe
comentarios sobre cómo (o incluso si) se reconoció el dispositivo. Un método fácil para determinar
cómo y si se registra un dispositivo insertado es usar el comando dmesg .

Por ejemplo, si conecto una memoria USB en una computadora con Linux, es posible que vea un icono
aparecerá en el escritorio para el disco. Incluso podría ver una carpeta abierta en el escritorio que permite
para acceder a los archivos automáticamente (comportamiento indeseable para una estación de trabajo forense). Si

31
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Estoy en una terminal y no hay un escritorio X, es posible que no reciba ningún comentario. Conecto el disco
y no veo nada. Por supuesto, puedo ejecutar el comando lsscsi para ver si mi lista de medios se actualizó.
Pero puedo querer más información que eso.

Entonces, ¿dónde podemos buscar qué nodo de dispositivo se asignó a nuestro disco (/dev/sdc, /dev/sdd,
etc.)? ¿Cómo sabemos si incluso fue detectado? Una vez más, esta pregunta es particularmente pertinente
para el examinador forense, ya que es probable que configuremos nuestro sistema para que sea un poco
menos "útil" en la apertura automática de carpetas, etc.

Conectar la memoria USB e inmediatamente ejecutar el comando dmesg proporciona el siguiente resultado
(abreviado para facilitar la lectura):

raíz@cajaforense:~# dmesg
...

[2382040.400775] usb 1-4.1: nuevo dispositivo USB de alta velocidad número 4 con xhci_hcd [2382040.491674] usb
1-4.1: nuevo dispositivo USB encontrado, idVendor=03f0, idProduct=3307,
,ÿ bcdDispositivo=10.00

[2382040.491677] usb 1-4.1: Nuevas cadenas de dispositivos USB: Mfr=1, Product=2, SerialNumber
,ÿ =3
[2382040.491679] usb 1-4.1: Producto: v125w [2382040.491681]
usb 1-4.1: Fabricante: hp [2382040.491683] usb 1-4.1: Número de
serie: 002354C611A8AC3162CF005C [2382040.49: dispositivo de almacenamiento masivo 1 usb-40:27
detectado] [2382040.492501] scsi host8: almacenamiento usb 1-4.1:1.0 [2382044.130418] scsi 8:0:0:0: acceso
directo hp
v125w 1.00 PQ:
,ÿ 0 ANSI: 4

[2382044.132140] sd 8:0:0:0: [sdc] 31334400 bloques lógicos de 512 bytes: (16,0 GB/14,9
,ÿ GiB)
[2382044.133608] sd 8:0:0:0: [sdc] Write Protect está desactivado [2382044.133610]
sd 8:0:0:0: [sdc] Mode Sense: 2f 00 00 00 [2382044.135212] sd 8:0:0 :0: [sdc] Caché de
escritura: deshabilitado, caché de lectura: habilitado,
,ÿ no es compatible con DPO o FUA
[2382044.141413] sdc: sdc1 [2382044.146351]
sd 8:0:0:0: [sdc] Disco extraíble SCSI adjunto

La información importante está en negrita. Tenga en cuenta que esta memoria USB en particular (una HP
v125w) proporciona un solo volumen con una sola partición (/dev/sdc1). La salida de dmesg puede ser larga,
por lo que puede canalizar menos (dmesg | menos) o desplazarse por la salida si es necesario.

También puede seguir la salida de dmesg en tiempo real observando la salida de /var/log/ ,ÿ mensajes con
cola -f, que esencialmente significa "ver la cola del archivo y seguirla a medida que crece". Inicie el siguiente
comando y luego conecte un dispositivo USB. Verá los mensajes a medida que el núcleo los detecte.

root@forensicbox:~# tail -f /var/log/messages ...<conecta un


dispositivo y observa los mensajes del núcleo>

32
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Anteriormente mencionamos los medios de almacenamiento NVMe y cómo tienen un esquema de nombres
diferente como resultado de los "espacios de nombres" y otros cambios en la arquitectura. En un sistema con
medios NVMe instalados, es posible que vea lo siguiente usando dmesg:

raíz@cajaforense:~# dmesg
...
0.677521] nvme nvme0: función pci 0000:3d:00.0 0.904343]
[[ nvme0n1: p1 p2
...

La salida de dmesg anterior muestra un solo dispositivo de almacenamiento NVMe con un solo espacio de nombres
que contiene dos particiones.

Esta sección cubrió la identificación de dispositivos detectados por el kernel de Linux. Discutiremos la recopilación
de información sobre estos dispositivos en secciones posteriores.

33
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

2.3 El sistema de archivos

Al igual que el sistema de archivos de Windows, el sistema de archivos de Linux es jerárquico. El directorio
"superior" se denomina directorio "raíz" y está representado por "/". Tenga en cuenta que la siguiente no es una
lista completa, pero proporciona una introducción a algunos directorios importantes.

En la mayoría de las distribuciones de Linux, la estructura de directorios está organizada de la misma manera.
Ciertos archivos de configuración y programas dependen de la distribución, pero el diseño básico es similar a este.
Tenga en cuenta que la barra inclinada del directorio (/) es lo opuesto a lo que la mayoría de la gente está
acostumbrada en Windows.

/ (raíz del árbol - no debe confundirse con /root (hogar de la raíz)

compartimiento

bota

desarrollador

(dispositivos)

etc.

X11

rc.d

(otros directorios de configuración)

hogar

usuario1 (archivos de directorio de inicio)

usuario2

lib (bibliotecas del sistema de 32 bits)

lib64 (bibliotecas del sistema de 64 bits)

medios (montajes de udidiscos)

puntos de montaje

mnt

puntos de montaje

34
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

/ (raíz - continuación)

opt (software instalado aquí en algunos sistemas)

raíz (casa de la raíz)

correr

medios (puntos de montaje de udisks2 dinámicos)

sbin (binarios del sistema)

usuario

local

liberación

var (registro)

El contenido del directorio puede incluir:

/compartimiento

Comandos comunes - ls, cd, etc.

/bota

Archivos necesarios en el arranque, incluidas las imágenes del kernel a las que apunta LILO (LInux LOader) o
GRUB.

/desarrollo

Archivos que representan dispositivos en el sistema. Estos son los nodos de dispositivos.

/etc

Archivos y scripts de configuración administrativa.

/hogar

Directorios de inicio del usuario. Cada directorio de usuario puede ser ampliado por el usuario respectivo y
contendrá sus archivos personales, así como archivos de configuración especí cos del usuario (para preferencias
X, etc.).

/lib

bibliotecas de software de 32 bits

/lib64

bibliotecas de software de 64 bits

35
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

/medios de comunicación

Proporciona un lugar estándar para los medios extraíbles de todo el sistema.

/mnt

Proporciona puntos de montaje temporales para sistemas de archivos externos, remotos y extraíbles.
Este es el directorio heredado para montar volúmenes manualmente

/optar

Directorio para software externo u "opcional". Algunos programas (Google Chrome, por ejemplo) se
instalarán en este directorio.

/raíz

El directorio de inicio del usuario raíz.

/correr

Archivos de tiempo de ejecución dinámicos para demonios del sistema como [e]udev y udisks. Este
directorio es donde puede encontrar volúmenes externos montados desde el escritorio o mediante
cualquier interfaz udisks2.

/sbin

Comandos administrativos y de sistema. (fdisk, ifconfig, etc.)

/usr

Contiene software local, bibliotecas, juegos, etc.

/var

Los registros y otros archivos variables se encontrarán aquí.

Otro concepto importante al navegar por el sistema de archivos es el de las rutas relativas frente a las explícitas. Si
bien es confuso al principio, la práctica hará que la idea sea una segunda naturaleza. Solo recuerde que cuando
proporciona un nombre de ruta a un comando o archivo, incluir un "/" al frente significa una ruta explícita y definirá
la ubicación a partir del directorio de nivel superior (raíz).
Comenzar un nombre de ruta sin "/" indica que su ruta comienza en el directorio actual y se denomina ruta relativa.
Más sobre esto más adelante.

Un recurso muy útil para este tema es el Estándar de jerarquía del sistema de archivos (FHS), cuyo propósito es
proporcionar una referencia para desarrolladores y administradores de sistemas sobre la ubicación de archivos y
directorios. Lea más sobre esto en http://www.pathname.com/fhs/.

36
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

2.4 Montaje de sistemas de archivos externos

Hay una larga lista de tipos de sistemas de archivos a los que se puede acceder a través de Linux. Esto se logra
usando el comando de montaje . Linux tiene un par de directorios especiales que se utilizan para montar
sistemas de archivos en el árbol de directorios de Linux existente. Un directorio se llama /mnt. Es aquí donde
puede adjuntar manualmente nuevos sistemas de archivos desde dispositivos de almacenamiento externos (o
internos) que no se montaron en el momento del arranque. Normalmente, el directorio /mnt se utiliza para el
montaje temporal. Otros directorios disponibles son /media y /run/media, que proporcionan una ubicación
estándar para que los usuarios y las aplicaciones monten medios extraíbles. En realidad, puede montar sistemas
de archivos en cualquier lugar (no solo en /mnt, pero es mejor para la organización. Dado que nos ocuparemos
principalmente del montaje temporal de volúmenes de evidencia potenciales, usaremos el directorio /mnt para la
mayor parte de nuestro trabajo, pero no son otras opciones igualmente válidas, esto proporciona una breve
descripción.

Para el montaje manual con el comando de montaje , cada vez que especifique un punto de montaje, primero
debe asegurarse de que ese directorio existe. Por ejemplo, para montar un disco USB en /mnt/evidence , debe
asegurarse de que exista /mnt/evidence . Después de todo, supongamos que queremos tener un CD ROM y
una unidad USB montados al mismo tiempo. No se pueden montar ambos en /mnt (¡estaría intentando acceder
a dos sistemas de archivos a través de un directorio!). Por lo tanto, creamos directorios para el sistema de
archivos de cada dispositivo en el directorio principal /mnt. Tú decides cómo quieres llamar a los directorios, pero
haz que sean fáciles de recordar. Tenga en cuenta que hasta que aprenda a manipular el archivo /etc/fstab
(que se tratará más adelante), solo el root puede montar y desmontar sistemas de archivos (manual y
explícitamente).

Las distribuciones más nuevas suelen crear puntos de montaje para usted, pero es posible que desee agregar
otros (puntos de montaje para discos o imágenes de sujetos, etc., como /mnt/data o /mnt/analysis).
Tenga en cuenta que debe ser root para crear puntos de montaje en /mnt:

root@forensicbox:~# mkdir /mnt/análisis

2.4.1 El comando de montaje

El comando de montaje utiliza la siguiente sintaxis:

mount -t <sistema de archivos> -o <opciones> <dispositivo> <punto de montaje>

4. Pero
Una de las opciones que pasamos al comando de montaje , usando -t, es el tipo de sistema de
archivos. ¿Qué sucede si no sabe qué sistema de archivos está en un dispositivo que le han entregado? Primero,
necesitamos saber el diseño de partición del dispositivo. ¿Hay una partición? ¿Dos? Una vez que hemos

4En realidad, los sistemas Linux modernos hacen un trabajo bastante decente al detectar automáticamente los tipos de sistemas de archivos,
pero ser explícito nunca es algo malo.

37
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

seleccionado la partición con la que queremos trabajar, necesitamos saber en qué sistema de archivos podría estar
allá. Podemos lograr esto usando una serie de comandos que ya hemos cubierto en el
capítulo anterior sobre discos y convenciones de nomenclatura de discos. Usamos el comando lsblk para ver
nuestros dispositivos que han sido detectados, y mostrar las particiones que podríamos intentar montar.
Luego usamos el comando de archivo con la opción -s para determinar el tipo de sistema de archivos que usaremos.
estar montando Por ejemplo, si inserto una memoria USB en mi sistema y quiero manualmente
montarlo, puedo usar los siguientes comandos para recopilar la información que necesito:

raíz@cajaforense:~# lsblk
NOMBRE MAJ:MIN TAMAÑO RM TIPO RO PUNTO DE MONTAJE
sdb 8:16 1 119M 0 disco
sdb1 8:17 1 118M 0 parte
sda 8:0 0 1.8T 0 disco
sda2 8:2 0 1.8T 0 parte /casa
sda1 8:1 0 128M 0 parte /arranque
nvme0n1 259:0 0 953.9G 0 disco
nvme0n1p1 259:1 0 64G 0 parte
nvme0n1p2 259:2 0 889.9G 0 parte /

root@forensicbox:~# archivo -s /dev/sdb1


/dev/sdb1: datos del sistema de archivos Linux rev 1.0 ext4 , UUID=22e4d5cc
7713-4b17-b2df-11b17a73b954, nombre de volumen "Win10Image" (extensiones) (archivos grandes) (enorme
,ÿ archivos)

La salida pertinente se resalta en rojo. lsblk nos muestra que la unidad fue detectada como
/dev/sdb con una única partición en /dev/sdb1. El comando de archivo lee la firma de
la partición y determina que es un sistema de archivos EXT4. Discutiremos el comando de archivo
extensamente más adelante en esta guía. Por ahora, solo comprenda que determina el tipo de archivo
por su firma (independientemente de la extensión o el nombre), en este caso una firma del sistema de archivos. Nota
el último dispositivo de bloque enumerado en la salida de lsblk es un dispositivo NVMe con un solo espacio de nombres
y dos tabiques.

Luego podemos usar esa información para montar la unidad (este comando asume el directorio
/mnt/analysis existe si no, créelo con mkdir):

root@forensicbox:~# montaje -t ext4 /dev/sdb1 /mnt/análisis

Ahora cambie el directorio a la ubicación del sistema de archivos recién montado:

root@forensicbox:~# cd /mnt/análisis

Ahora debería poder navegar por la memoria USB como de costumbre. Esencialmente, lo que tenemos
hecho aquí es tomar el contenido lógico del sistema de archivos en /dev/sdb1 y ponerlo a disposición
al usuario a través de /mnt/analysis. Ahora puede explorar el contenido del disco.

38
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Cuando haya terminado, deje el directorio /mnt/analysis (si ejecuta el comando cd solo, volverá a su
directorio de inicio) y desmonte el sistema de archivos con:

root@forensicbox:~# desmontar /mnt/análisis

Algunos puntos a tener en cuenta:

Tenga en cuenta que el comando correcto es desmontar , no desmontar. Esto desmonta limpiamente el sistema de archivos.
Esto hace que sea más fácil eliminar los medios del sistema.

Si recibe un mensaje de error que dice que el sistema de archivos no se puede desmontar porque
está ocupado, lo más probable es que tenga un archivo abierto desde ese directorio o que esté
usando ese directorio desde otra terminal. Verifique todas sus terminales y terminales virtuales y
asegúrese de que ya no está en el directorio montado.

Otro ejemplo: Leer un disco óptico

Inserte el medio óptico

Muchos discos ópticos utilizarán el sistema de archivos ISO9660. Puede verificar esto con lsblk -f o
el comando de archivo en la unidad óptica (en este caso /dev/sr0) con el medio insertado:

root@forensicbox:~# archivo -s /dev/sr0 /


dev/sr0: datos del sistema de archivos del CD-ROM ISO 9660 'CDDATA'

Ahora podemos montar los medios y cambiar al sistema de archivos recién montado:

root@forensicbox:~# mount -t iso9660 /dev/sr0 /mnt/cdrom mount: /


dev/sr0 está protegido contra escritura, montaje de solo lectura

root@forensicbox:~# cd /mnt/cdrom

root@forensicbox:~# ls
autorun.inf* document/ installmanager/ menu/ tools/

Ahora puede navegar por el volumen de medios ópticos según sea necesario. Cuando termine, deje
el directorio /mnt/cdrom (cambie a su directorio de inicio nuevamente con cd o cd ~) y desmonte el
sistema de archivos con:

39
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# desmontar /mnt/cdrom

Si desea ver una lista de los sistemas de archivos que están montados actualmente, simplemente use el
comando de montaje sin argumentos ni parámetros. Enumerará el punto de montaje y el tipo de sistema de
archivos de cada dispositivo en el sistema, junto con las opciones de montaje utilizadas (si las hay). Tenga en
cuenta que en el resultado a continuación puede ver el disco óptico que acabo de montar (y no desmontar):

root@forensicbox:~# montar /
dev/sda3 en /escribir ext4 (rw) proc
en /proc tipo proc (rw) sysfs en /sys
tipo sysfs (rw) tmpfs en /dev/shm
tipo tmpfs (rw) /dev/ sda1 en /boot
escriba ext4 (rw) /dev/sr0 en /mnt/cdrom
escriba iso9660 (ro)

Alternativamente, puede consultar /proc/mounts. Donde el comando de montaje en realidad muestra el


contenido de /etc/mtab, /proc/mounts en realidad está más actualizado. El sistema de archivos /proc en Linux
es una visualización jerárquica virtual de procesos e información del sistema. Use cat / ,ÿ proc/mounts para ver
la salida.

La capacidad de montar y desmontar sistemas de archivos es una habilidad importante en Linux. Lo usamos
para ver el contenido de un sistema de archivos, y lo usamos para montar almacenamiento externo para
recopilar archivos de evidencia, etc. Hay muchas opciones que se pueden usar con mount (algunas las
veremos más adelante), y varias formas el montaje se puede hacer fácil y automáticamente. Consulte la
información o las páginas man del comando de montaje para obtener información adicional.

En la mayoría de las distribuciones modernas, los discos ópticos se detectarán automáticamente y se colocará
un icono en el escritorio para ello. Por supuesto, esto dependerá de su configuración particular, pero este suele
ser el caso si está utilizando XFCE, KDE, Unity o alguna otra combinación de GUI y administrador de ventanas.
Cubriremos más sobre el manejo de discos GUI en una próxima sección.

2.4.2 La tabla del sistema de archivos (/etc/fstab)

Puede parecer que mount -t iso94660 /dev/sr0 /mnt/cdrom es mucho para escribir cada vez que desea
montar un disco óptico. Una forma de evitar esto es editar el archivo /etc/fstab (tabla del sistema de archivos).
Este archivo le permite proporcionar valores predeterminados para sus sistemas de archivos montables, lo
que acorta los comandos necesarios para montarlos. El sistema también usa /etc/ ,ÿ fstab para montar
sistemas de archivos predeterminados cuando se inicia la computadora.

Mi /etc/fstab se ve así:

40
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# gato /etc/fstab


/dev/sda2 intercambiar / predeterminados 00
dev/sda3 / intercambiar ext4 predeterminados 1 1
/dev/sda1 /arranque ext4 por defecto 1 2
/dev/cdrom /mnt/cdrom auto devpts / noauto,propietario,ro 0 0
dev/pts /proc /dev/shm devpts gid=5,modo=620 0 0
predeterminados 0 0
proceso tmpfs proceso tmpfs predeterminados 00

Las columnas son:

<dispositivo> <punto de montaje> <tipo de sistema de archivos> <opciones predeterminadas>

Con esto en /etc/fstab, puedo montar medios ópticos simplemente emitiendo el comando:

root@forensicbox:~# montar /mnt/cdrom

Los comandos de montaje anteriores parecen incompletos. Cuando no se proporciona suficiente información, el
El comando de montaje buscará en /etc/fstab para llenar los espacios en blanco. Si encuentra la información requerida,
seguirá adelante con la montura. Para obtener más información sobre las opciones disponibles para /etc/fstab,
ingrese info fstab en el símbolo del sistema. Después de instalar un nuevo sistema Linux, echa un vistazo
en /etc/fstab para ver qué hay disponible para usted. Si lo que necesita no está allí, agréguelo. En
este caso particular, la entrada para /dev/cdrom (un enlace simbólico o 'atajo' a /dev/sr0) fue
descomentar eliminando el símbolo # del frente de la línea.

2.4.3 Montaje en espacio de usuario

El montaje también puede realizarse a través de procesos automatizados o parcialmente automatizados a través de su
entorno de escritorio. Linux tiene una enorme lista de opciones disponibles en sistemas de escritorio y
gestión (XFCE, KDE, Gnome, Mate, etc.). Todos ellos tienen la capacidad de manejar y
montar dispositivos extraíbles para el usuario. Esto normalmente se hace a través de la adición dinámica.
de iconos de escritorio con capacidad de contexto que pueden aparecer cuando se conectan medios extraíbles.
Luego, los volúmenes se pueden montar a través de un menú contextual.

Hay una serie de cambios útiles para el usuario general de Linux que hacen que este tipo de
el montaje con capacidad de escritorio tiene sentido. En primer lugar, para el uso diario general como estación de trabajo de escritorio,
¿Quién quiere tener que iniciar sesión como root para montar dispositivos externos? ¿Qué pasa si estás trabajando en
un sistema en el que no tiene privilegios elevados? Además de la logística personal,
también está el hecho de que los sistemas de montaje más modernos colocarán un dispositivo extraíble
puntos de montaje al espacio personal de un usuario en lugar de un punto de montaje de todo el sistema. Esto ofrece
mayor seguridad y accesibilidad para el usuario.

41
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El siguiente ejemplo mostrará lo que puede suceder en un escritorio XFCE cuando se inserta una unidad USB. Esto es solo
una ilustración. Asegúrese de comprobar en su propio sistema las configuraciones predeterminadas que podrían diferir de
esta. Ciertamente, no desea acumular evidencia accidentalmente solo porque no sabía que el sistema lo está haciendo por
usted.

En este caso, el disco USB tiene una partición con una etiqueta de volumen Win10Image (la etiqueta de volumen se puede
configurar con cualquier cantidad de herramientas cuando se formatea el sistema de archivos).

Con la unidad USB insertada, aparece un icono en el escritorio.

Figura 1: XFCE con volumen USB Win10Image insertado

En la sección anterior sobre discos y nodos de dispositivos, hablamos sobre la detección y el nombramiento de dispositivos.
Además del nombre /dev/sdx , hay otros nombres asignados al disco por UUID, etiqueta y ruta del kernel. Cuando veo que
aparece la etiqueta Win10Image en la parte superior del escritorio, se puede abrir rápidamente una terminal para ver
exactamente a qué partición en qué disco pertenece esa etiqueta accediendo a las subcarpetas /dev/disk/ , específicamente /
dev/disk/by -etiqueta:

Usando ls -l vemos que el archivo /dev/disk/by-label/Win10Image es un enlace simbólico o acceso directo a /dev/sdb1.

root@forensicbox:~# ls -l /dev/disk total 0

drwxr-xr-x 2 raíz raíz 140 16 de abril 18:28 by-id/ drwxr-xr-


x 2 raíz raíz 60 16 de abril 18:28 by-label/ drwxr-xr-x 2 raíz
raíz 80 16 de abril 18:28 by-partlabel/ drwxr-xr-x 2 raíz raíz 80 16
de abril 18:28 by-partuuid/ drwxr-xr-x 2 raíz raíz 80 16 de abril
18:28 by-path/ drwxr-xr-x 2 raíz raíz 80 de abril 16 18:28 por-uuid/

42
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# ls -l /dev/disk/by-label/ total 0


lrwxrwxrwx 1 root root 10 16 de abril 18:28 Win10Image
-> ../../sdb1

Si hacemos clic con el botón derecho en el icono y seleccionamos Montar volumen en el menú, el volumen se monta en /
run/media/$USER]/$LABEL. En este caso, el usuario es barry y la etiqueta es Win10Image.

Figura 2: menú contextual del botón derecho del ratón para montaje en disco [XFCE]

Una vez montado, podemos ver los resultados desde la terminal usando el comando de montaje :

root@forensicbox:~# montar /
dev/sda1 en /escribir ext4 (rw)
proc en /proc tipo proc (rw) sysfs
en /sys tipo sysfs (rw) tmpfs en /
dev/shm tipo tmpfs (rw) /dev/ sdb1 en /
run/media/barry/Win10Image escriba
ext4(rw,nodev,nosuid, uhelper=udisks2)

Asegúrese de saber cómo controlar el montaje de discos y volúmenes dentro de su entorno de escritorio. El XFCE enviado
con Slackware no monta automáticamente ningún volumen de forma predeterminada. Los íconos aparecen en el escritorio,
pero puede montarlos como los vea. Hay opciones de configuración disponibles para cambiar este comportamiento, así que
tenga cuidado. Asegúrese de probar lo que sucede cuando "conecta en caliente" un dispositivo USB u otro almacenamiento
extraíble.
Por ejemplo, algunas distribuciones pueden optar por montar automáticamente los dispositivos en el escritorio de la GUI
inmediatamente después de la inserción. Esto no es deseable para el análisis forense digital.

XFCE es una computadora de escritorio más liviana (es decir, más liviana en recursos). Y aunque XFCE también es capaz
de manejar automáticamente dispositivos conectados en caliente, permite un fácil control de los medios extraíbles en el
escritorio (al igual que otros sistemas de escritorio para estar seguros. Estoy menos familiarizado con ellos). Considere la
siguiente instantánea de un cuadro de diálogo de configuración de XFCE para medios extraíbles. De forma predeterminada,
en Slackware, los dispositivos NO se montan automáticamente en el entorno XFCE. No todo

43
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Sin embargo, las distribuciones pueden configurarse de esta manera. Asegúrese de comprobar y probar por sí mismo.
Como examinador forense, NO desea que su sistema monte dispositivos automáticamente simplemente porque los
conectó al sistema. Cubriremos esto con un poco más de detalle en el segundo capítulo.

Figura 3: Diálogo de medios extraíbles XFCE

Puede notar que debemos iniciar sesión como root para usar el comando de montaje para montar manualmente un
volumen en /mnt (o cualquier otro directorio que creemos). Lo mismo se aplica cuando intentamos montar un volumen
manualmente que no está de nido en /etc/fstab. Por otro lado, cuando insertamos medios y usamos el ícono del
escritorio para montar el dispositivo, podemos iniciar sesión como un usuario normal y simplemente hacer clic derecho
en el ícono del dispositivo para que se monte en /run/media/XXX. Entonces, ¿cómo está sucediendo eso?

El montaje del espacio de usuario en la mayoría de los sistemas Linux está a cargo del paquete udisks. Hay dos
versiones de esto: udisks y udisks2 (la versión más nueva). En aras de la simplificación, diremos que si su sistema
usa udisks (versión 1), normalmente se montará en /media.
Si su sistema usa udisks2, normalmente se montará en /run/media/$USER. Como hemos visto, este montaje del
espacio de usuario se puede realizar a través del escritorio con el mouse.

¿Qué sucede si está en una terminal sin GUI o si está utilizando un administrador de escritorio/ventana que no permite
íconos de volumen dinámicos? Todavía puede usar las capacidades de espacio de usuario de udisks en la línea de
comandos. La siguiente sesión de comandos muestra el uso de la utilidad de línea de comandos udisks2 udisksctl
por parte de un usuario normal para montar un volumen. Tenga en cuenta que udisksctl se monta en /run/media/
$USER (es una utilidad udisks2).

barry@cajaforense:~$ lsblk
NOMBRE MAJ:MIN TAMAÑO RM TIPO RO PUNTO DE MONTAJE
sdb 8:16 1 14.3G 0 disco

44
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

sdb1 8:17 1 14.3G 0 parte


...

barry@forensicbox:~$ udisksctl mount -b /dev/sdb1


Montado /dev/sdb1 en /run/media/barry/SANDISK.

barry@cajaforense:~$ lsblk
NOMBRE MAJ:MIN TAMAÑO RM TIPO RO PUNTO DE MONTAJE
sdb 8:16 1 14.3G 0 disco
sdb1 8:17 1 14.3G 0 parte /ejecutar/medios/barry/SANDISK
...

La sesión anterior muestra la salida de lsblk para identificar el volumen que queremos montar. los
Luego se ejecuta el comando udisksctl con las opciones mount y -b /dev/sdb1 y el resultado
se muestra montaje exitoso. (-b especifica el dispositivo 'bloque' a montar). Luego usamos lsblk
de nuevo, esta vez mostrando el volumen /dev/sdb1 y su punto de montaje en /run/media. Aviso
que solo proporcionamos un volumen para montar, no proporcionamos un punto de montaje. los udisks lo harán
utilice la etiqueta de volumen para crear un punto de montaje dinámico en /run/media/USER. Si no hay
nombre del volumen, luego usa el UUID del volumen.

También desmontamos el volumen usando udisksctl (y luego volvemos a verificar con lsblk para siempre ).
medida):

usuario@forensicbox:~$ udisksctl unmount -b /dev/sdb1


Desmontado /dev/sdb1.

barry@cajaforense:~$ lsblk
NOMBRE MAJ:MIN TAMAÑO RM TIPO RO PUNTO DE MONTAJE
sdb 8:16 1 14.3G 0 disco
sdb1 8:17 1 14.3G 0 parte
...

En esta sección hemos cubierto lo suficiente sobre el manejo de discos para que pueda comenzar a acceder
medios y volúmenes de almacenamiento. A continuación, profundizaremos en la posibilidad de manipular y
ver algunos datos con una introducción a los comandos básicos.

45
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

3 comandos básicos de Linux

3.1 Navegación muy básica

Aquí vamos a repasar los comandos básicos para permitirle navegar por el comando
línea. Hay muchos recursos para aprender la línea de comandos. Esto debería simplemente
proporcionar un punto de partida para ayudarle a través de la guía.

Comenzaremos con un poco de navegación básica.

Listados de directorios:

ls enumerar el contenido de un directorio


ls-a enumerar el contenido de un directorio, incluidos los ocultos
(punto) les
ls-l listado detallado
ls-lh listado detallado con tamaños legibles por humanos
ls -R enumerar el contenido de un directorio recursivamente

Las opciones de comando se pueden combinar, de modo que si usamos ls -lhaR obtendremos una lista detallada de
archivos, con tamaños en formato 'legible por humanos', incluidos archivos ocultos (o 'punto'), recursivamente.

Un simple ls -lah nos dará lo siguiente:

barry@cajaforense:~$ ls -lah
total 52K
drwxr-xr-x 2 usuarios de barry 4.0K 3 de junio 14:20 Código/
drwxr-xr-x 2 usuarios de barry 4.0K 3 de junio 14:20 Documentos/
drwxr-xr-x 2 usuarios de barry 4.0K 3 de junio 14:20 Muestras/
drwxr-xr-x 2 usuarios de barry 4.0K 3 de junio 14:20 Utilidades/
drwxr-xr-x 2 usuarios de barry 4.0K 3 de junio 14:20 Videos/
-rw-r--r-- 1 usuarios de barry 6.4K 3 de junio 14:21 config.txt
-rw-r--r-- 1 usuarios de barry 21K 3 de junio 14:21 muestra.doc

Discutiremos las columnas en la salida de ls con más detalle más adelante, aunque a algunos les gusta - le
el tamaño y el nombre del archivo son obvios.

Cambio de directorios:

cd <directorio> Cambiar al directorio <dir>


discos compactos

(sin argumentos) Acceso directo a su directorio de inicio

discos compactos ..
Cambiar al directorio principal del directorio actual (al subir de
nivel)

46
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

cd - Cambia al último directorio en el que estabas


cd /nombredir cambie al directorio especi cado. Tenga en cuenta que el
la adición de "/" delante del directorio implica una ruta explícita
(absoluta), no relativa.
Con la práctica, esto tendrá más sentido.
cd dirname cambie al directorio especi cado. la falta de un
"/" delante del nombre del directorio implica un relativo
ruta que significa dirname es una subcarpeta de nuestra actual
directorio.

Copiar archivos:

cp <origen> <destino> cp Copiar archivo <fuente> a <destino>


-r <origen> <destino> Copiar un directorio recursivamente

Mover un archivo o directorio:

mv <origen> <destino> Mueva o cambie el nombre de un archivo o directorio <fuente> a


<destino>

Eliminar un archivo o directorio:

Eliminar un archivo
rm <objetivo>
rm -r <directorio objetivo> Eliminar un directorio de forma recursiva (incluidos los
subdirectorios)
rmdir <objetivo> rm Eliminar un directorio (si está vacío)
-f <objetivo> Forzar la eliminación sin aviso

Crear un directorio:

mkdir <directorio> Cree un directorio llamado <directorio>

Mostrar ayuda de comandos:

hombre <comando> Muestre una página de "manual" para el <comando> especi


cado. Use 'q' para salir. Recuerda este. Muy
Útil.

Si desea encontrar información sobre un comando y sus diversas opciones, utilice el


página manual (ual). Por ejemplo, el comando de búsqueda puede ser desalentador. Pero puedo reunir un montón de
información útil con man find:

47
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ hombre encontrar


ENCONTRAR(1) Manual de Comandos Generales ENCONTRAR(1)

NOMBRE

find - busca archivos en una jerarquía de directorios

SINOPSIS
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [punto de partida...] [ ,ÿ expresión]

DESCRIPCIÓN

Esta página del manual documenta la versión GNU de find. GNU find busca en el árbol de directorios enraizado
en cada punto de inicio dado evaluando el
...

Mostrar el contenido de un archivo (texto sin formato):

gato <nombre de archivo> La forma más sencilla de mostrar el contenido de un archivo,


este comando transmite el contenido de un archivo a la salida
estándar (normalmente la terminal). Significa concatenar y
también se puede usar para combinar
les.
menos <nombre de archivo> Hojee un archivo línea por línea o página por página.

3.1.1 Comandos útiles adicionales

grep : busca patrones.

nombre de archivo de patrón grep

El comando grep buscará ocurrencias de <patrón> dentro del archivo <nombre de archivo>. grep es una herramienta
extremadamente poderosa. Tiene cientos de usos dada la cantidad de opciones que admite.
Consulte la página del manual para obtener más detalles. Usaremos grep en nuestros ejercicios forenses más adelante.

find : busca archivos en función de cualquier número de criterios. Estos pueden incluir fechas, tamaños, patrones de
nombres, tipo de objeto, etc.

encontrar <directorio de inicio> <criterios>

Una simple búsqueda de un archivo llamado fstab podría verse así:

root@forensicbox:~# buscar /etc -iname fstab /etc/fstab

48
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Esto significa nd," comenzando en el directorio /etc " por su nombre, fstab. find le permitirá
busque por tipo de archivo (archivos regulares versus directorios, etc.), o incluso varios tiempos de archivos. usaremos
esta herramienta extensamente más adelante. Compruebe man find y vea si puede encontrar la diferencia entre
las opciones -name y -iname .

pwd : Imprime el directorio de trabajo actual en la pantalla. El siguiente ejemplo muestra que
actualmente estamos en el directorio /home/barry:

barry@cajaforense:~$ pwd
/inicio/barry

file : clasifica los archivos en función de lo que contienen mediante la comparación de firmas. La categorización
ocurre independientemente del nombre o la extensión. El encabezado del archivo se compara con una magia
le para determinar el tipo de archivo. Aquí hay un ejemplo usando una imagen JPEG estándar:

barry@forensicbox:~$ archivo mifoto.jpg


mypic.jpg: datos de imagen JPEG, estándar JFIF 1.02, relación de aspecto, densidad 1x1,
longitud de segmento 16, progresiva, precisión 8, 720x960, componentes 3

ps : enumera los procesos actuales. Esto es un poco como el administrador de tareas en Windows. da el
número de identificación del proceso (PID) y el terminal en el que se ejecuta el proceso. ps hacha se mostrará
todos los procesos (a), incluidos los procesos sin una terminal asociada (x). Nótese la falta de un
guión delante de las opciones. Lea la página del manual para obtener más detalles. La siguiente salida muestra
el padre de todos los procesos init y 3 terminales virtuales que ejecutan el shell bash (algunos de salida
remoto).

barry@forensicbox:~$ pd
PID TTY COMANDO DE TIEMPO ESTADÍSTICO

1? ss 0:00 inicio [4]


2? S 0:00 [khilo]
...
2446 puntos/ ss 0:00 -bash
1 2495 puntos/ SS+ 0:00 -bash
2 2563 ? yo 0:00 [kworker/0:1-kdmflush]
2572? yo
0:00 [kworker/3:2-rcu_gp]
2598 puntos/3 ss 0:00 -bash

cadenas : Imprime los caracteres legibles de un archivo. Este comando imprimirá cadenas
que tienen al menos cuatro caracteres (por defecto) de un archivo. Útil para mirar archivos de datos
sin el programa de origen, y buscando ejecutables para cadenas útiles, etc. Más sobre
este comando útil desde el punto de vista forense más adelante.

chmod : cambia los permisos en un archivo ("modo de cambio"). Cubriremos este comando y
su uso más adelante.

49
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

chown : cambia el propietario (y el grupo) de un archivo de la misma manera que chomd cambia los
permisos.

clear : Borra el terminal.

exit : Sale de la terminal y la cierra.

shutdown : este comando se usará para salir limpiamente del sistema y apagar (o reiniciar) la
computadora. Puede ejecutar varias opciones diferentes aquí (y asegúrese de consultar la página del
manual para obtener detalles adicionales).

shutddown -r now - reiniciará el sistema 'ahora'.

shutddown -h now - apagará el sistema 'ahora'.

3.2 Permisos de archivo

Los archivos en Linux tienen ciertos permisos especi cados. Estos permisos se pueden ver ejecutando el
comando ls -l en un directorio o en un archivo en particular. Por ejemplo:

barry@forensicbox:~$ ls -l myfile.sh -rwxr-xr-


x 1 usuarios de barry 3685 15 de abril 11:14 myfile.sh

Si mira de cerca los primeros 10 caracteres, tiene un guión (-) seguido de 9 caracteres más.
El primer carácter describe el tipo de archivo. Un guión (-) indica un archivo normal. Una "d" indicaría un
directorio y una "b" un dispositivo de bloque especial, etc.

Primer carácter de salida ls -l :

- = archivo normal d
= directorio b =
dispositivo de bloque (disco, volumen, etc.) c
= dispositivo de caracteres (serie) l = enlace
(apunta a otro archivo o directorio)

Los siguientes 9 caracteres indican los permisos del archivo. Se dan en grupos de tres:

Propietario Grupo Otros


rwx rwx rwx

Los caracteres (denominados 'bits') indican:

r = leer

50
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

w = escribir
x = ejecutar

Entonces, para el myfile.sh anterior tenemos: rwx receta receta

Esto otorga al propietario del archivo permisos de lectura, escritura y ejecución (rwx), pero restringe a otros
miembros del grupo del propietario y usuarios fuera de ese grupo a leer y ejecutar únicamente el archivo (rx). El
acceso de escritura está denegado como lo simboliza el - .

Ahora volvamos al comando chmod . Hay varias formas de usar este comando, incluida la asignación explícita de
r, w o x al archivo. Cubriremos el método octal aquí porque la sintaxis es más fácil de recordar (y la encuentro
más flexible). En este método, la sintaxis es la siguiente:

nombre de archivo octal chmod

Para nuestro propósito, el octal es un valor numérico en el que el primer dígito representa al propietario, el
segundo dígito representa al grupo y el tercero representa a otros fuera del grupo del propietario. Cada dígito se
calcula asignando un valor a cada permiso:

leer (r) =4
escribir (w) =2
ejecutar (x) = 1

Por ejemplo, el archivo de nuestro ejemplo original tiene un valor de permiso octal de 755 (rwx = 7, rx = 5, rx =
5). Esto significa que el propietario del archivo tiene configurados los tres bits (lectura, escritura y ejecución),
mientras que todos los demás solo tienen lectura y ejecución. Si desea cambiar el archivo para que solo el
propietario tenga permisos de lectura, escritura y ejecución, y los miembros del grupo del propietario y todos los
demás solo puedan leer el archivo, debe ejecutar el comando:

chmod 744 nombre de archivo

(r=4) + (w=2) + (x=1) = 7 [propietario] (r=4) +


(w=0) + (x=0) = 4 [grupo] (r=4) + (w=0) + (x=0)
= 4 [otros]

Cambiar los permisos y luego mostrar una nueva lista larga del archivo mostraría:

barry@forensicbox:~$ ls -lh myfile.sh -rwxr-xr-x 1


usuarios de barry 3685 15 de abril 11:14 myfile.sh (el valor del permiso es 755)

barry@forensicbox:~$ chmod 744 miarchivo.sh

barry@forensicbox:~$ ls -lh miarchivo.sh

51
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

-rwxr--r-- 1 usuarios de barry 3685 15 de abril 11:14 myfile.sh (el valor del permiso ahora es 744)

3.3 Tuberías y redirección

Linux (o más específicamente, bash) le permite redirigir la salida de un comando desde la salida estándar
(generalmente la pantalla o "consola") a otro dispositivo o archivo. Esto se hace con flujos. Hablaremos de tres flujos:
stdin es la entrada estándar (generalmente el teclado); stdout es la salida estándar (generalmente la pantalla); y
stderr es el error estándar (generalmente la pantalla).

Usamos símbolos especí cos para redirigir estos flujos:

Entrada estándar : <

cmd < archivo de entrada

cmd está tomando su entrada desde el archivo en lugar del teclado.

salida estándar : >

cmd > archivo de salida

cmd está enviando su salida a un archivo de salida en lugar de a la pantalla.

estándar : 2>

cmd 2> registro de errores

cmd está enviando mensajes de error al archivo errlog.

La manipulación de flujos puede ser útil para tareas como crear un archivo de salida que contenga una lista de
archivos en un volumen montado o en un directorio. Por ejemplo:

barry@forensicbox:~$ ls -al > listaarchivos.txt

El comando anterior generaría una larga lista de todos los archivos en el directorio actual. Sin embargo, no verá la
salida. En lugar de enviar la lista a la consola, se creará un nuevo archivo llamado filelist.txt que contendrá la lista.
Si el archivo filelist.txt ya existe, se sobrescribirá. Use el siguiente comando para agregar la salida del comando al
archivo existente, en lugar de sobrescribirlo:

barry@forensicbox:~$ ls -al >> listaarchivos.txt

52
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Otra herramienta útil es el conducto de comandos, que utiliza el | símbolo. El tubo de comando toma
la salida de un comando y la "canaliza" directamente a la entrada de otro comando.

En este caso, estamos redirigiendo la salida a otro comando en lugar de a un archivo. Puedes
vea la diferencia a continuación. Puedo hacer eco de una cadena de caracteres en un archivo con >, o puedo hacer eco en un
comando con |. El comando wc que se muestra a continuación proporciona un recuento de líneas, palabras y bytes.
En la primera redirección a continuación, estoy creando un archivo llamado h.txt con la salida de echo. En el
segundo, estoy usando una tubería, por lo que la salida de echo va al comando wc. En el tercero, estoy
canalizando la salida de echo a wc y redirigiendo la salida de wc a un archivo:

Siga a continuación y experimente. NO hagas esto conectado como root. Experimentación


puede salirse de control rápidamente.

barry@forensicbox:~$ echo hola


Hola

barry@forensicbox:~$ echo hola > h.txt

barry@forensicbox:~$ gato h.txt


Hola

barry@forensicbox:~$ eco hola | WC


1 1 6

barry@forensicbox:~$ eco hola | wc > archivo de salida.txt

barry@forensicbox:~$ gato outfile.txt


1 1 6

Esta es una herramienta extremadamente poderosa para la línea de comando. Mira la siguiente lista de procesos
(salida parcial mostrada):

barry@forensicbox:~$ p.d. hacha


PID TTY COMANDO DE TIEMPO ESTADÍSTICO

1? ss 0:06 inicio [4]


2? S 0:00 [khilo]
4? yo< 0:00 [ktrabajador/0:0H]
6? yo< 0:00 [mm_percpu_wq]
<continúa>

¿Qué pasaría si todo lo que quisiera ver fueran los ID de esos procesos que indicaran un shell bash? Tú
podría "canalizar" la salida de ps a la entrada de grep, especificando bash como patrón para grep
buscar. El resultado le daría solo aquellas líneas de salida de ps que contenían
la fiesta del patrón .

53
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ pd hacha | grep bash 0:00 -bash


9434 puntos/ ss
4 14746 puntos/ ss 0:00 -bash
3 25354 puntos/5 S+ 0:00 golpe de grep

La salida anterior usa grep para mostrar solo aquellas líneas de salida ps que contienen la cadena
bash. Entonces podemos ver que hay dos sesiones de bash y una línea que muestra el proceso de
nuestro comando grep real .

Es posible que haya notado que cuando redirigimos la salida de un comando a un archivo, en realidad
no vemos la salida en la pantalla a menos que veamos el archivo que creamos. Puede haber momentos
en los que desee ver el resultado de un comando en la pantalla y que también lo redirija a un archivo.
Puedes hacerlo usando el comando tee .

barry@cajaforense:~$ ls | tee filelist.txt Escritorio/


Documentos/ Evidencia/ winlog.txt

barry@forensicbox:~$ cat filelist.txt Escritorio/


Documentos/ Evidencia/ winlog.txt

En la sesión anterior, hemos usado el comando tee para mostrar el resultado del comando ls en la
pantalla y enviarlo a un archivo llamado filelist.txt. En el contexto de un examen forense, esto es útil
para capturar el resultado de las herramientas en un archivo de registro (recuerde usar >> para
agregar).

La combinación de múltiples comandos poderosos es una de las técnicas más útiles y poderosas
proporcionadas por Linux (de nuevo, bash) para el análisis forense. Este es uno de los conceptos más
importantes que querrá aprender si decide adoptar Linux como plataforma forense. Con una sola línea
de comando creada a partir de múltiples comandos y canalizaciones, puede usar varias utilidades y
programas para resumir un análisis muy rápidamente.

3.4 Atributos de archivo

Los sistemas de archivos de Linux (como ext2, ext3, ext4) admiten lo que se denominan atributos de
archivos. Hay bastantes de ellos, y no los cubriremos todos aquí. Hay dos que pueden ser muy útiles
para proteger los datos forenses de la eliminación o manipulación accidental. Estos son solo anexados
(a) e inmutables (i).

54
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Los atributos son indicadores que pueden controlar qué operaciones de archivo pueden ocurrir en un
archivo o directorio. Algunos de ellos pueden ser cambiados por un usuario normal y otros no. Podemos
listar los atributos de archivos y directorios en nuestro directorio actual con lsattr. En este caso, vamos a
ejecutar el comando en un archivo en particular. Tenga en cuenta que estamos usando root para esto
(puede usar el comando su para convertirse en root, como discutimos anteriormente en la sección 1.5.2):

root@forensicbox:~# lsattr
--------------e------ ./myfile.txt

Aquí estoy actualmente en el directorio /root (señalado por ~ en el indicador porque /root es el hogar del
usuario root). Este resultado muestra que, de todos los atributos disponibles, este archivo solo tiene el
conjunto de atributos de extensión.
5

Agregamos y cambiamos (o eliminamos) atributos con el comando chattr , simplemente usando un '+'
para agregar el atributo que queremos con el nombre del archivo, o un '-' para eliminarlo. Por ejemplo, si
quiero que el archivo myfile.txt sea inmutable, puedo agregar el atributo i de esta manera:

root@forensicbox:~# chattr +i miarchivo.txt

root@forensicbox:~# lsattr ----


i---------e----- ./myfile

Ahora, si trato de eliminar el archivo, incluso como root, no puedo porque el archivo es inmutable. Incluso
con la opción -f (forzar), el archivo no se puede eliminar:

root@forensicbox:~# rm -f myfile.txt rm: no


se puede eliminar 'myfile.txt': operación no permitida

Si quiero eliminar el archivo, puedo usar chattr -i myfile.txt para eliminar el atributo inmutable.

Esto puede ser útil si tiene imágenes forenses u otra evidencia que desea proteger de cambios o
eliminaciones accidentales. Los atributos también se pueden establecer en los directorios. Con el atributo
inmutable establecido en un directorio, no se puede eliminar y los archivos que contiene no se pueden
cambiar ni eliminar.

Ahora echemos un vistazo al atributo de solo añadir. Considere un archivo al que llamaremos notes.txt al
que estamos redirigiendo la salida. No queremos sobrescribir accidentalmente el archivo al agregar la
salida del comando, por lo que establecemos el atributo de solo agregar. Echa un vistazo a la siguiente sesión:

5 Las extensiones son un método para mapear bloques físicos de datos de manera contigua. no vamos a cubrir
alcances en esta guía. Se puede encontrar información adicional en línea.

55
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# lsattr
-------------- e----- ./notas.txt

root@forensicbox:~# chattr +a notas.txt

root@forensicbox:~# lsattr -----


a--------e----- ./notas.txt

root@forensicbox:~# echo 'hola' > notas.txt -su:


notas.txt: Operación no permitida una sola redirección
(>) intenta sobrescribir

root@forensicbox:~# echo 'hola' >> notas.txt se agrega


una redirección doble (») y es exitosa

3.5 Matemáticas de línea de comandos

Al realizar un examen, a menudo encontrará que necesita una forma rápida de hacer un cálculo simple
(compensación de sector, etc.). Vamos a cubrir algunas formas básicas de lograr esto a través de la línea
de comandos. Hacemos esto por dos razones: la primera es que a menudo es más fácil incluir cálculos
de línea de comando sin tener que agarrar un mouse, abrir una calculadora GUI y escribir los números,
¿por qué no simplemente escribir en la terminal y obtener su respuesta? En segundo lugar, es posible
que necesite usar una sesión de terminal o un sistema que no tenga GUI. También puede aprender a
usar la línea de comando tanto como pueda y no depender de recursos externos. Hay muchas maneras
de hacer esto:

3.5.1 bc - la calculadora básica

Si necesitamos hacer algunos cálculos en la línea de comando, podemos usar bc y abrir una sesión
interactiva, o canalizar la expresión para evaluarla mediante el comando echo a través de bc. Necesitará
estas técnicas para calcular los conjuntos de bytes en ejercicios posteriores. No querrás tener que abrir
una aplicación de calculadora, ¿verdad?

Para una sesión interactiva, simplemente escriba bc en el indicador y se le llevará a la sesión. Escriba la
expresión y presione <enter>. La entrada a continuación está en negrita para mayor claridad.

barry@forensicbox:~$ bc bc
1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software
Foundation, Inc.
Este es un software gratuito SIN NINGUNA GARANTÍA EN ABSOLUTO.

Para más detalles escriba 'garantía'.

56
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

2+2
4
512*1000
512000
5/3
1
abandonar

Escriba quit para terminar y saldrá de la sesión. Presta mucha atención a la última expresión, 5/3. Tenga en cuenta que la
respuesta es 1, un número entero, en lugar de la fracción que supondríamos.
Esto se debe a que bc es una calculadora de precisión fija y la escala predeterminada es 1. Puede configurar la escala con
la función scale=x , donde x es la precisión que desea. Si desea que su respuesta se redondee a dos decimales, puede usar
scale=2.

barry@forensicbox:~$ bc bc
1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software
Foundation, Inc.
Este es un software gratuito SIN NINGUNA GARANTÍA EN ABSOLUTO.

Para más detalles escriba


'garantía'. escala=2
5/3
1.66
abandonar

Aquí vemos nuestro resultado esperado. También puede invocar bc -l, que establece funciones adicionales, pero la escala
está establecida en 20 de forma predeterminada y, de todos modos, normalmente desea establecer una escala más pequeña.

Si prefiere no usar una sesión interactiva, puede canalizar su expresión a bc usando echo:

barry@forensicbox:~$ eco 5/3 | antes de


Cristo 1

barry@forensicbox:~$ echo "escala=2; 5/3" | ac 1,66

barry@forensicbox:~$
echo 2048*512 | ac
1048576

El ejemplo anterior muestra tanto la salida predeterminada como la configuración de escala mediante eco. El último comando
muestra un cálculo común para la compensación de bytes cuando se proporciona un número de sector (o compensación de
sector) en el trabajo forense. Usaremos esto con frecuencia en capítulos posteriores.

57
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Finalmente, podemos usar bc para convertir valores hexadecimales a valores decimales usando la opción ibase=16, ya
sea de forma interactiva o mediante eco. Tenga en cuenta que los caracteres alfabéticos en la expresión hexadecimal
DEBEN estar en mayúsculas para que bc funcione. Aquí hay un par de ejemplos (nuevamente, nuestra entrada interactiva
está en negrita):

barry@forensicbox:~$ bc bc 1.07.1

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation,
Inc.
Este es un software gratuito SIN NINGUNA GARANTÍA EN ABSOLUTO.

Para más detalles escriba 'garantía'.


ibase=16
4c
(standard_in) 2: error de sintaxis <- tenga en cuenta que los caracteres deben estar en mayúsculas
4C
76
abandonar

barry@forensicbox:~$ echo "ibase=16;4C | bc" 76

3.5.2 Bash Shell - Expansión aritmética

Si está tratando con números enteros simples (o conversión hexadecimal) y no se requieren respuestas decimales o de
punto flotante, puede usar una expansión aritmética bash (shell) más simple. Esta es probablemente la forma más rápida y
fácil de hacer cálculos para sumas o restas simples donde se necesitan compensaciones de volumen entero y no es
probable que encuentre evaluaciones fraccionarias. Tenga en cuenta que necesita usar el comando echo para evaluar la
expresión, o la evaluación misma será interpretada por el shell como un comando. Los valores hexadecimales deben estar
precedidos por 0x (cero x) Aquí hay un ejemplo de conjunto de evaluaciones:

barry@forensicbox:~$ echo $((2048*512)) 1048576

barry@forensicbox:~$ echo $((5/3)) 1 <- observe


la respuesta entera

barry@cajaforense:~$ echo $((0x4c)) 76

barry@cajaforense:~$ echo $((0x4c-70)) 6

Para obtener información adicional, consulte man bash.

58
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

3.6 Bash 'globing'

El shell bash también soporta lo que muchos llamarían 'comodines'. Nos referimos a esto como globbing o expansión de
nombre de archivo. Tenga en cuenta que esto NO es lo mismo que 'expresiones regulares', aunque se ven muy similares. Aquí
hay un par para recordar:

* para múltiples caracteres

? para personajes individuales

[ ] para conjuntos o un rango de caracteres

Este puede ser un tema complicado pero muy poderoso, y requerirá lectura adicional... Consulte "expresiones regulares" en
"
su texto favorito de Linux, junto con "globing" o expansión de archivos". Hay diferencias importantes que pueden confundir
un a
principiante, así que no se desanime por la confusión sobre lo que significa '*' en diferentes situaciones.

3.7 Revisión de comandos y sugerencias

1. El shell tiene una lista de historial de comandos utilizados anteriormente (almacenados en el archivo llamado .bash_history
en su directorio de inicio). Utilice las flechas del teclado para desplazarse por los comandos que ya ha escrito.

2. También se admite la edición de la línea de comandos. Como se indicó anteriormente, use las teclas de flecha para ver
y editar los comandos anteriores para que no tenga que volver a escribir comandos largos con errores... simplemente
edítelos.

3. Los comandos y los nombres de archivo distinguen entre mayúsculas y minúsculas

4. Aprenda la redirección de salida para stdout y stderr (> y 2>)

5. Linux usa / para directorios, Windows usa \.

6. Use q para salir de las sesiones de menos o de hombre .

7. Para ejecutar comandos en el directorio actual (si el directorio actual no está en su PATH), use la sintaxis ./command.
Esto le dice al shell que busque el comando en el directorio actual. A menos que se especifique explícitamente, el
directorio actual NO forma parte de la ruta normal del usuario.

59
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

4 Edición con Vi
Hay varios editores de texto en modo terminal (no GUI) disponibles en Linux, incluidos emacs y vi.
Siempre puede usar uno de los editores de texto GUI disponibles en una sesión X, pero ¿qué sucede
si no puede iniciar X o no hay un sistema de ventanas disponible? El beneficio de aprender un editor
de texto como vi es su capacidad para usarlo desde una terminal o una conexión telnet o ssh, etc.
Estamos discutiendo vi aquí. (No hago emacs :-)). vi en particular es útil, porque lo encontrará en
todas las versiones de Unix. Aprenda los conceptos básicos de vi y podrá editar un archivo en
cualquier sistema Unix.

4.1 La alegría que es vi

Puede iniciar vi simplemente escribiendo vi en el símbolo del sistema, o puede especificar el archivo
que desea editar con el nombre de archivo vi. Si el archivo aún no existe, se creará para usted.

vi consta de dos modos de funcionamiento, el modo normal y el modo de inserción. Cuando ingrese
vi por primera vez, estará en modo normal. El modo normal le permite buscar texto, moverse por el
archivo y emitir comandos para guardar, guardar como y salir del editor (así como una gran cantidad
de otras funciones). El modo de inserción es donde realmente ingresa y cambia el texto.

Para cambiar al modo de inserción, escriba a (para agregar), i (para insertar) o una de las otras
opciones de inserción que se enumeran en la página siguiente. Cuando haga esto, verá --INSERT--
aparecer en la parte inferior de su pantalla (en la mayoría de las versiones). Ahora puede ingresar
texto. Cuando desee salir del modo de inserción y volver al modo normal, presione la tecla Escape.

Puede usar las teclas de flecha para moverse por el archivo en el modo de comando. Sin embargo, el
editor vi fue diseñado para ser extremadamente eficiente, si no intuitivo. La forma tradicional de
moverse por el archivo es usar las teclas qwerty debajo de las yemas de los dedos. Más sobre esto a
continuación. Además, hay otras teclas de navegación que facilitan el desplazamiento en vi , como
usar $ para ir al final de la línea actual o w para pasar a la siguiente palabra, etc.

Si pierde la noción de en qué modo se encuentra, presione la tecla Escape dos veces. Sabrás que
estás en modo normal. Normalmente hay un indicador de su modo actual en la parte inferior de la
ventana.

4.2 El tutorial de vimtutor

En la mayoría de las distribuciones de Linux, vi suele ser un enlace a alguna implementación más
reciente de vi, como vim (vi mejorado), elvis o neovim. Si su distribución incluye vim, debería venir
con un buen tutorial. Vale tu tiempo. Intente escribir vimtutor en un símbolo del sistema. Trabajar

60
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

a través de todo el archivo. Esta es la mejor forma de empezar a aprender vi. Las teclas de navegación
mencionado anteriormente quedará claro si usa vimtutor.

4.3 vi Resumen de comandos

Entrar en el modo de edición desde el modo normal:

i : insertar texto debajo del cursor


a : agregar texto después del cursor
o (la letra 'oh'): abre una nueva línea debajo de la línea actual (en el modo de inserción)
O ('oh' mayúscula): abre una nueva línea encima de la línea actual (en el modo de inserción)

Modo normal:

0 (cero) : mueve el cursor al principio de la línea


$ : mueve el cursor al final de la línea
X : eliminar (cortar) el carácter debajo del cursor
X : eliminar (cortar) el carácter antes del cursor
dd : eliminar (cortar) toda la línea en la que se encuentra el cursor
dw : eliminar (cortar) hasta el final de la palabra actual
v : entrar en modo visual (seleccionar con el cursor)
y : tirar (copiar)
yw : tirar (copiar) hasta el final de la palabra actual
y$ : tirar (copiar) hasta el final de la línea actual
pags
: pegar después del cursor
PAGS : pegar antes del cursor
:v : guardar y continuar editando
:wq : guardar y Salir
: guardar y salir sin aviso
: salir y descartar cambios
:wq! :q! :w fname : guardar como fname
g : ir a la parte superior de la izquierda (primera línea)
GRAMO : ir al final del archivo (última línea)
G<NUM> : ir al número de línea <NUM>

La mejor manera de salvarse de una edición desordenada es presionar la tecla Escape seguida de :q!.
Ese comando se cerrará sin guardar los cambios.

Otra función útil en el modo normal es la búsqueda de cadenas. Para buscar una cadena en particular
en un archivo, asegúrese de estar en modo normal y escriba

/cuerda

61
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Donde la cadena es su objetivo de búsqueda. Después de emitir el comando, puede pasar al


siguiente golpe escribiendo n.

vi es un editor extremadamente poderoso. Hay una gran cantidad de comandos y capacidades que
están fuera del alcance de esta guía. Ver hombre vi para más detalles. Tenga en cuenta que hay
capítulos en libros dedicados a este editor. También hay libros completos dedicados solo a vi .
La importancia forense de vi es que nunca se sabe cuándo se encontrará respondiendo a una
máquina Unix, en una terminal y necesitando cambiar un archivo. vi seguramente estará allí para
usted.

62
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

5 La secuencia de arranque de Linux (simplificada)

Esta guía pretende ser una introducción a Linux como plataforma para análisis forense digital, no solo un tutorial
sobre las herramientas disponibles. Uno de los aspectos importantes del uso y mantenimiento de plataformas
forenses (y las herramientas que se ejecutan en ellas) es un conocimiento básico del funcionamiento de esa
plataforma. Perseguimos este conocimiento para tener una mejor comprensión de la línea de base de nuestro
sistema. Esto nos permite solucionar errores o realizar un seguimiento de los cambios que se realizan en el
sistema a lo largo del tiempo. Saber cómo funciona su plataforma y cómo agregar, quitar o cambiar procesos en
ejecución es una habilidad fundamental para administrar su propia plataforma forense.

Siempre que estemos aprendiendo Linux, también podríamos educarnos sobre las funciones centrales del sistema
que pueden ayudarnos en caso de que nos encontremos con una máquina Linux que deba investigarse. Saber
cómo atravesar la estructura de directorios o emitir comandos no es suficiente. Nuestra capacidad para utilizar
Linux como plataforma forense o como objeto de análisis depende en gran medida de nuestro conocimiento
general del sistema operativo. Sabiendo que hay muchos recursos en línea para sumergirse en sistemas y
distribuciones especí cos, solo proporcionaremos una introducción simple aquí.

5.1 Init frente a Systemd

Al igual que con muchos de los componentes principales de Linux, la inicialización del sistema (o 'init') y la
gestión de servicios han visto algunos cambios drásticos a lo largo de los años. Algunas distribuciones, como
Slackware, se han quedado con los sistemas de administración de servicio e inicio BSD o SystemV probados y verdaderos.
Otras distribuciones, como Fedora y Ubuntu, han pasado a sistemas de administración de servicios y sistemas
más nuevos. Uno de estos sistemas más nuevos se llama Systemd. Hay otros programas de inicialización del
sistema, como openrc y runit, pero dado que esta guía está escrita en Slack ware, nos limitaremos a describir el
estilo de inicialización de SysV/BSD en detalle y describiremos brevemente Systemd como una alternativa popular.

5.2 Arrancando el Kernel

Primero, sin embargo, necesitamos discutir algunas otras complejidades que se han introducido a lo largo de los
años. Con la introducción de la interfaz de firmware extensible unificada (UEFI), nos estamos alejando del
arranque de BIOS tradicional, aunque la mayoría de los sistemas lo ofrecen como una opción 'heredada'. Esto
ha resultado en un requisito para que prestemos atención a cómo arranca nuestra computadora. Es posible que
los cargadores de arranque tradicionales no funcionen con UEFI y muchas distribuciones se han movido hacia
opciones más flexibles.

Una vez más, una forma de experimentar con Linux sin sufrir problemas de compatibilidad de hardware es utilizar
la virtualización. Existen opciones gratuitas y no tendrá que preocuparse por la compatibilidad del hardware o
UEFI frente al BIOS heredado.

63
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El primer paso en la secuencia de arranque (simplificada) para Linux es cargar el kernel. La imagen del kernel
generalmente se encuentra en el directorio /boot . Puede tener varios nombres diferentes, incluidos bzImage
o vmlinuz. A veces, la imagen del kernel especificará la versión del kernel contenida en la imagen, es decir,
vmlinuz-huge-4.4.19 Muy a menudo hay un enlace suave (como un acceso directo) a la imagen del kernel
más actual en el directorio /boot . Normalmente, el cargador de arranque, LILO (o GRUB, eLILO, etc.), hace
referencia a este vínculo flexible. En un sistema estándar de Slackware, la imagen del kernel es /boot/vmlinuz.

Tenga en cuenta que Slackware usa LILO o eLILO (para sistemas UEFI) de forma predeterminada. LILO y
eLILO son sistemas de arranque más antiguos y mucho más sencillos, pero algo menos flexibles. El cargador
de arranque especi ca el 'dispositivo raíz', junto con la versión del núcleo que se va a arrancar. Por ejemplo,
con LILO, todo esto está controlado por el archivo /etc/lilo.conf. Cada sección image= representa una opción
en la pantalla de inicio.

Este es un ejemplo de lilo.conf:

root@forensicbox:~# cat /etc/lilo.conf append="


vt.default_utf8=0" boot = /dev/sda bitmap = /boot/
slack.bmp bmp-colors = 255,0,255,0,255,0 bmp-table
<- nuestro dispositivo de arranque

= 60,6,1,16 bmp-timer = 65,27,0,255 tiempo de espera


de solicitud = 1200

reglas de cambio
Reiniciar

vga = imagen
normal = /boot/vmlinuz root <- la imagen del kernel que estamos
= /dev/sda1 label = Linux arrancando <- la partición desde la que arrancamos
de solo lectura

El archivo de configuración de arranque real en su sistema (/etc/lilo.conf, /boot/


grub/grub.cfg, etc.) será mucho más complejo en la mayoría de los casos. En este ejemplo, los comentarios
en el archivo (líneas que comienzan con #) se han eliminado para mejorar la legibilidad. Y a menos que esté
ejecutando algo como un entorno virtual muy simple, es posible que también tenga otras entradas de arranque
u opciones de recuperación de rescate.

Una vez que el sistema haya terminado de iniciarse, puede reproducir los mensajes del núcleo que se
desplazan rápidamente más allá de la pantalla durante el proceso de inicio con el comando dmesg. Discutimos
un poco este comando cuando hablamos sobre el reconocimiento de dispositivos anteriormente. La salida se
puede canalizar a través de un visor de paginación para que sea más fácil de ver (en este caso, dmesg se
canaliza menos en mi sistema Slackware):

64
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# dmesg | menos


[ 0.000000] Línea de comando: BOOT_IMAGE=/vmlinuz-huge-4.14.20 root=/dev/nvme0n1p2
,ÿ ro

[ 0.000000] x86/fpu: Compatibilidad con la función XSAVE 0x001: 'x87 coma flotante
registros'
[ 0.000000] x86/fpu: Compatibilidad con la función XSAVE 0x002: 'Registros SSE'
[ 0.000000] x86/fpu: Compatibilidad con la función XSAVE 0x004: 'Registros AVX'
[ 0.000000] x86/fpu: Compatibilidad con la función XSAVE 0x008: 'Registros de límites MPX'
[ 0.000000] x86/fpu: Compatibilidad con la función XSAVE 0x010: 'MPX CSR'
[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
[ 0.000000] x86/fpu: xstate_offset[3]: 832, xstate_sizes[3]: 64
[ 0.000000] x86/fpu: xstate_offset[4]: 896, xstate_sizes[4]: 64
[ 0.000000] x86/fpu: funciones xstate habilitadas 0x1f, tamaño de contexto
es de 960 bytes, usando formato 'compactado'.
[ 0.000000] e820: mapa de RAM físico proporcionado por BIOS:

5.3 Inicialización del sistema

Después de que el cargador de arranque inicia el kernel, el siguiente paso en la secuencia de arranque comienza con el
programa /sbin/init. Este programa realmente tiene dos funciones:

inicializar el nivel de ejecución y los scripts de inicio

control de proceso de terminal (terminales de reaparición)

En resumen, el programa init está controlado por el archivo /etc/inittab. Es este archivo el que controla
su nivel de ejecución y los scripts de inicio globales para el sistema. Esto es, de nuevo, para un Slackware
sistema. Algunos sistemas, como Ubuntu, por ejemplo, utilizan systemd para el control y la configuración del sistema. Si está interesado en

la rutina de inicio del sistema para su distribución en particular (y


debería estar interesado), luego investíguelo en línea.

5.4 Nivel de ejecución

El nivel de ejecución es simplemente una descripción del estado del sistema. Para nuestros propósitos, es más fácil

diga eso (para Slackware, al menos. Otros sistemas, como los que usan systemd, serán diferentes):

nivel de ejecución 0 = apagado

nivel de ejecución 1 = modo de usuario único

nivel de ejecución 3 = modo multiusuario completo: inicio de sesión de texto (DEFAULT)

sesenta y cinco
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

nivel de ejecución 4 = modo multiusuario completo: inicio de sesión gráfico X11

nivel de ejecución 6 = reiniciar

En el archivo /etc/inittab verá una línea similar a:

id:3:initpredeterminado:

root@forensicbox:~# cat /etc/inittab


...
# Estos son los niveles de ejecución predeterminados en Slackware:
# 0 = detener
# 1 = modo de usuario único
# 2 = sin usar (pero configurado igual que el nivel de ejecución 3)
# 3 = modo multiusuario (nivel de ejecución predeterminado de Slackware)
# 4 = X11 con KDM/GDM/XDM (gestores de sesión) # 5 =
sin usar (pero configurado igual que el nivel de ejecución 3) # 6 =
reiniciar

# Nivel de ejecución predeterminado. (No establecer en


0 o 6) id:3:initdefault:

# Inicialización del sistema (se ejecuta cuando se inicia el


sistema). si:S:sysinit:/etc/rc.d/rc.S
...

Es aquí en /etc/inittab donde se establece el nivel de ejecución predeterminado para el sistema. Si desea un inicio
de sesión de texto, establezca el valor anterior en initdefault en 3. Este es el valor predeterminado para Slackware.
Con este nivel de ejecución predeterminado, utiliza startx para acceder al sistema GUI de X Window. Si desea un
inicio de sesión gráfico, edite la línea anterior para que contenga un 4.

Tenga en cuenta que para Ubuntu, puede crear un archivo /etc/inittab y colocar el valor allí. Si existe, el archivo se
leerá y el nivel de ejecución cambiará en consecuencia. El estilo de administración systemd utilizado por Ubuntu
realmente no utiliza "niveles de ejecución". Utiliza objetivos. Los cambios en estos objetivos se realizan mediante el
comando systemctl . La configuración y el uso de Ubuntu están fuera del alcance de esta guía, pero este problema
en particular destaca el hecho de que los sistemas Linux pueden variar en su funcionamiento.

5.5 Guiones de inicio globales

Después de establecer el nivel de ejecución predeterminado, init (a través de /etc/inittab) ejecuta los siguientes
scripts:

66
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

/etc/rc.d/rc.S : maneja la inicialización del sistema, el montaje y la comprobación del sistema de archivos, los volúmenes
cifrados, la inicialización del intercambio, los dispositivos, etc.

/etc/rc.d/rc.X - donde X es el nivel de ejecución pasado como argumento por init. En el caso de inicios de sesión
multiusuario (sin GUI) (nivel de ejecución 2 o 3), este es rc.M. Esta secuencia de comandos luego llama a otras
secuencias de comandos de inicio (varios servicios, etc.) comprobando si son "ejecutables".

/etc/rc.d/rc.local : llamado desde los scripts de nivel de ejecución especí cos, rc.local es un script de propósito
general que se puede editar para incluir los comandos que desea iniciar en el arranque.

/etc/rc.d/rc.local_shutdown : este archivo debe usarse para detener los servicios que se iniciaron en rc.local. Cree
el archivo y hágalo ejecutable para que se ejecute.

5.6 Scripts de inicio del servicio

Una vez que se ejecutan las secuencias de comandos globales, hay "secuencias de comandos de servicio" en el directorio /
etc/rc.d/ que son llamadas por las diversas secuencias de comandos de nivel de ejecución, como se describe anteriormente,
dependiendo de si las secuencias de comandos en sí tienen permisos "ejecutables". Esto significa que podemos controlar la
inicialización del tiempo de arranque de un servicio cambiando su estado ejecutable. Más sobre cómo hacer esto más adelante.
Algunos ejemplos de scripts de servicio son:

/etc/rc.d/rc.inet1 - maneja la inicialización de la interfaz de red

/etc/rc.d/rc.inet2 : maneja el inicio de los servicios de red. Este script organiza los diversos scripts de servicios de
red y garantiza que se inicien en el orden correcto.

/etc/rc.d/rc.wireless : maneja la configuración de la tarjeta de red inalámbrica.

/etc/rc.d/rc.sendmail : inicia el servidor de correo.

/etc/rc.d/rc.sshd : inicia el servidor OpenSSH.

/etc/rc.d/rc.messagebus : inicia los servicios de mensajería d-bus.

/etc/rc.d/rc.udev : llena el directorio /dev con nodos de dispositivos, busca dispositivos, carga los módulos de kernel
apropiados y con gura los dispositivos.

Eche un vistazo al directorio /etc/rc.d para ver más ejemplos. Tenga en cuenta que en una instalación estándar de Slackware,
la lista de su directorio mostrará los scripts ejecutables en color verde (en una terminal compatible con el color) y seguidos de
un asterisco (*).

De nuevo, esto es especí co de Slackware. Otras distribuciones difieren (¡algunas difieren mucho!), pero el concepto sigue
siendo consistente. Una vez que se familiarice con el proceso, tendrá sentido.
La capacidad de manipular scripts de inicio es un paso importante en su proceso de aprendizaje de Linux.
Como mínimo, es importante comprender cómo funciona su sistema y dónde se inician y detienen los servicios.

67
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

5.7 Golpe

bash (Bourne Again Shell) es el shell de comandos predeterminado para la mayoría de las distribuciones de Linux. Es
el programa que establece el entorno para su experiencia de línea de comandos en Linux. Hay varios shells disponibles,
pero aquí cubriremos bash, el más utilizado en Linux.
Shells como zsh y sh también están ganando algo de popularidad. Una vez que comience a darse cuenta del poder del
caparazón, puede comenzar a explorar algunas de las otras opciones y sus beneficios.

En realidad, hay bastantes archivos que se pueden usar para personalizar la experiencia de Linux de un usuario.
Aquí hay algunos que lo ayudarán a comenzar.

/etc/profile : este es el archivo de inicialización de bash global para shells de inicio de sesión interactivos.
Las ediciones realizadas en este archivo se aplicarán a todos los usuarios de bash shell. Este archivo establece
la ruta estándar del sistema, el formato del símbolo del sistema y otras variables de entorno.

/home/$USER/.bash_profile6 ($USER) y puede ser editado por el usuario, lo que le permite


personalizar su propio entorno. Es en este archivo donde puede agregar alias para cambiar la forma
en que responden los comandos. Tenga en cuenta que el punto delante del nombre del archivo lo
convierte en un archivo "oculto".

/home/$USER/.bash_history Este es un archivo extremadamente útil por varias razones.


Almacena un número determinado de comandos que ya se han escrito en la línea de comandos (el valor
predeterminado es 500). Se puede acceder a estos simplemente usando la flecha "arriba" en el teclado para
desplazarse por el historial de comandos ya utilizados. En lugar de volver a escribir un comando una y otra vez,
puede acceder a él desde el historial. Desde la perspectiva de un examinador forense, si está examinando un
sistema Linux, puede acceder al archivo .bash_history de cada usuario (no olvide root) para ver qué comandos
se ejecutaron desde la línea de comandos. Recuerde que el "." en el nombre del archivo significa que está oculto

le.

Tenga en cuenta que los valores predeterminados para ./.bash_history (cantidad de entradas, nombre del archivo de
historial, etc.) pueden ser controlados por los usuarios. Lea man bash para obtener información más detallada.

La secuencia de inicio de bash es en realidad más complicada que esto, pero esto debería darle un punto de partida.
Además de los archivos anteriores, consulte /home/$USER/.bashrc. La página de manual de bash es una lectura
interesante (y larga), y describirá algunas de las opciones de personalización. Además, la lectura de la página del
manual le brindará una buena introducción al poder de programación proporcionado por bash scripting. Cuando lea la
página de manual , querrá concentrarse en la sección de INVOCACIÓN para saber cómo se usa el shell y la sintaxis
de programación básica.

6
En bash de nimos el contenido de una variable con un signo de dólar. $USER es una variable que representa el
nombre del usuario actual. Para ver el contenido de las variables individuales del shell, use echo $VARNAME. Este script
se encuentra en el directorio de inicio de cada usuario.

68
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

6 conceptos básicos de red de Linux

En esta sección, exploraremos algunas herramientas de red muy básicas y proporcionaremos una descripción
general de cómo ubicarse en una red y explorar las diversas conexiones e interfaces de red de su estación de
trabajo.

Hay una gran cantidad de recursos disponibles para investigar y aprender redes de Linux, desde básicas hasta
avanzadas, las incluimos en esta guía para asegurarnos de cubrir los conceptos básicos mínimos. Más adelante
en esta guía, cubriremos algunas herramientas de "investigación" de la red. Como tal, es útil una introducción
limitada a cómo funcionan las redes en general en Linux.

Veremos las redes Linux desde la perspectiva de una estación de trabajo. Hay muchas herramientas y utilidades
disponibles en cualquier distribución que son útiles para la administración completa de la red con muchas más
disponibles en varios repositorios de software. A lo largo de los años, muchas de las utilidades de red integradas
se han mejorado y se han bifurcado para una amplia gama de casos de uso y arquitectura de red. Esta será
una descripción general de 'rascar la superficie'.

Linux se basa en una pila TCP/IP muy robusta (solo piense en 'redes'). Esto se remonta a los primeros días de
Linux, cuando Unix era el rey de las redes y la implementación de Linux TCP/IP estaba destinada a ser
totalmente compatible con los actuales (en ese momento) sockets y protocolos de red de Unix (BSD). Esto ha
convertido a Linux en un excelente sistema operativo de red desde sus primeras encarnaciones y lo convierte
en el sistema operativo útil que es hoy en día para tantas aplicaciones, desde dispositivos móviles hasta
sistemas integrados en automóviles y electrodomésticos.

Aquí proporcionaremos una breve descripción de lo siguiente:

interfaces de red

configuración de red sencilla

configuración inicial

IP estática

IP dinámica (DHCP) con


guración automática de red (NetworkManager)

identificarse en la red

lo que estás presentando a la red

6.1 Interfaces de red

Para comenzar nuestra exploración de los conceptos básicos de red de Linux, necesitamos cubrir las interfaces
de red. En términos simples, una interfaz de red es el hardware que conecta el kernel de Linux

69
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

a las aplicaciones de red y al resto del mundo. Hay todo tipo de interfaces, algunas virtuales y otras físicas. Solo
mencionaremos tres de ellos aquí, ya que son los más probables que verás cuando comiences a aprender.

6.1.1 Adaptador Ethernet [ethX]

Si está utilizando una computadora de escritorio o portátil con un cable de red físico conectado a un puerto de su
computadora, lo más probable es que esté utilizando un adaptador Ethernet. Si está utilizando una máquina virtual, lo más
probable es que también vea un adaptador Ethernet para su conexión de red principal en la máquina virtual, incluso si su
máquina host utiliza redes inalámbricas.
Estos normalmente se denominan eth0 para la primera conexión física, eth1 para la segunda, etc.

6.1.2 Adaptador inalámbrico [wlanX]

Los adaptadores inalámbricos pueden incluir interfaces de red inalámbrica integradas o 'dongles' USB externos.
Si está utilizando una red inalámbrica, lo más probable es que utilice una interfaz llamada wlan0. Nuevamente, si está
utilizando una VM, lo más probable es que no vea un adaptador inalámbrico en la VM, incluso si su computadora host usa
conexión inalámbrica: las máquinas virtuales normalmente conectan (o usan la traducción de direcciones de red) desde la
red de la computadora host a un adaptador Ethernet estándar. en el sistema operativo invitado virtual.

6.1.3 Interfaz de bucle invertido [lo]

La interfaz loopback (lo) es una interfaz especial que apunta a la propia máquina host, con una dirección IP de 127.0.0.1.
Comúnmente conocido como "hogar" o "host local", el dispositivo de bucle invertido se usa con mayor frecuencia para
solucionar problemas de red y para conectarse a servicios localmente (el sistema de impresión CUPS, por ejemplo).

6.1.4 Nomenclatura de interfaz persistente

Algunas distribuciones que usan el daemon systemd más reciente pueden tener diferentes convenciones de nomenclatura.
Si sus interfaces de red tienen nombres como enp1s0 (para Ethernet) o wlp2s0 (para conexión inalámbrica), entonces
tiene una distribución de Linux que utiliza las convenciones de nomenclatura "persistentes" más recientes para dispositivos
de red. Esto se introdujo por varias razones, incluido el mantenimiento de nombres de interfaz persistentes entre reinicios.
Puede encontrar más información sobre este sistema de nombres aquí: https://www.freedesktop.org/software/systemd/
man/systemd. net-naming-scheme.html

70
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

6.2 Configuración de red

Cuando instala Linux, ya sea Slackware o prácticamente cualquier otra distribución, la configuración de sus
conexiones de red generalmente se realiza automáticamente. Sin embargo, es una buena idea comprender cómo
se hace esto y qué sucede "bajo el capó". Lo que veremos aquí es una descripción general muy simple de cómo
puede verificar sus interfaces de red y lo que puede esperar ver.

Para Slackware, la descripción general mejor detallada de los conceptos básicos de configuración de red
(excluyendo Net workManager, que trataremos aquí) es el capítulo sobre redes en Slack Book (https://
www.slackbook.org/beta/#ch_network).

6.2.1 Configuración inicial de la red

Si está utilizando Slackware, la rutina de instalación habría ejecutado el programa netconfig por usted. Se habría
visto algo como esto:

Figura 4: Instalación - netconfig

Aquí es donde seleccionamos cómo se conectará nuestra computadora a las redes disponibles.

Si selecciona una IP estática, su computadora tendrá la misma dirección IP "fija" en una red. Deberá conocer una
dirección IP compatible con la red para completar, una puerta de enlace predeterminada (para que el tráfico pase
fuera de la red local), una máscara de red (para identificar la subred en la que se encuentra) y un servidor de
nombres (para interactuar con DNS). servicios).

Las otras dos opciones que cubriremos aquí son mucho más probables de usar y mucho más fáciles de configurar.
Siempre puede volver a ejecutar netconfig como root después de la instalación para cambiar su método de
conexión.

71
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

DHCP utiliza un servidor de 'Protocolo de control de host dinámico' para asignar configuraciones de red
automáticamente. Si está ejecutando una red Ethernet (cableada) con un servidor o enrutador DHCP (la
mayoría de los enrutadores ISP comerciales vienen equipados con ellos), encontrará que DHCP es el
camino más fácil a seguir si no está preocupado por cambiar las conexiones.

Echemos un vistazo a dónde se almacenan estas dos configuraciones (estática o DHCP) y en qué se
diferencian. Si selecciona una dirección IP estática o una configuración DHCP, su configuración se guardará
en el archivo /etc/rc.d/rc.inet1.conf. Tenga en cuenta que este archivo de configuración en particular está
bien comentado. Lea la parte superior del archivo para obtener más detalles sobre cómo se interpretan
estas configuraciones. Los siguientes ejemplos muestran el contenido (truncado) de ese archivo si está
configurando una interfaz Ethernet.

Para una dirección IP estática, donde usted mismo completa los valores de la dirección IP, la puerta de
enlace y la dirección de transmisión, la configuración de eth0 en /etc/rc.d/rc.inet1.conf se vería así:

root@forensicbox:~# menos /etc/rc.d/rc.inet1.conf


...
# Información de configuración para
eth0: IPADDR[0]="10.0.2.15"
MÁSCARA DE RED[0]="255.255.255.0"
IPALIAS[0]=""
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""
...

Para una dirección IP dinámica (usando DHCP), la misma entrada se vería así. Todas las entradas están
en blanco excepto USE_DHCP:

root@forensicbox:~# menos /etc/rc.d/rc.inet1.conf


...
# Información de configuración para eth0:
IPADDR[0]=""
MÁSCARA DE RED[0]=""

IPALIAS[0]=""
USE_DHCP[0]="sí"
DHCP_HOSTNAME[0]=""
...

La última opción en la lista de opciones de configuración de red es usar NetworkManager. Net workManager
es un programa que lo encontrará y lo conectará a redes conocidas. Funciona tanto para conexiones
cableadas (Ethernet) como para redes inalámbricas. Si bien el uso de DHCP para una conexión Ethernet
es trivial y fácil de configurar, las redes inalámbricas pueden ser algo más complejas. Herramientas como
wpa_supplicant le permiten ubicar y con gurar redes inalámbricas cercanas. Sin embargo, usar
NetworkManager es mucho más fácil y permite cambiar rápidamente de red cuando se mueve de un lugar
a otro y se conecta a diferentes puntos de acceso.

72
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Pero espere... Estamos hablando de estaciones de trabajo forenses aquí. ¿Por qué nos preocuparíamos
por "conectarnos a diferentes puntos de acceso"? La respuesta corta es que la naturaleza de la informática
forense y la respuesta a incidentes ha cambiado en los últimos años. Ahora no es raro llevar estaciones
de trabajo móviles (portátiles potentes, por ejemplo) a las escenas de búsqueda oa las ubicaciones de
respuesta a incidentes. Es posible que sea necesario conectarse a una red para descargar herramientas
o realizar un reconocimiento inalámbrico en apoyo de una investigación.

Una vez seleccionado, NetworkManager hará el trabajo de conectar y administrar sus interfaces por
usted. Cuando lo use en una GUI, generalmente encontrará un ícono en la bandeja del sistema o en la
barra de menú que le permite acceder a las redes disponibles (si conoce la frase de contraseña).

Aquí hay un par de ejemplos de lo que podría ver: uno en una computadora que ejecuta un escritorio
XFCE con una conexión Ethernet y el segundo en una GUI de escritorio diferente conectada a una red
WiFi:

Figura 5: NetworkManager - Conexión Ethernet

Figura 6: NetworkManger - Conexión inalámbrica

Cuando se selecciona para con gurar su red, NetworkManager se inicia a través de un script rc como se
explica en la sección del capítulo 5 sobre scripts de inicio del sistema. Dado que el script NetworkManager
rc tiene establecidos permisos ejecutables (octal 755), se inicia cuando se inicia el sistema.

root@forensicbox:~# ls -l /etc/rc.d/rc.networkmanager -rwxr-xr-x


1 root root 2674 14 de julio 13:46 /etc/rc.d/rc.networkmanager*

73
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

NetworkManager anula /etc/rc.d/rc.inet1.conf, y si observa ese archivo, verá que los valores para
las interfaces ahora están vacíos:

root@forensicbox:~# menos /etc/rc.d/rc.inet1.conf


...
# Información de configuración para eth0:
IPADDR[0]=""
MÁSCARA DE RED[0]=""

IPALIAS[0]=""
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""
...

6.3 Encontrarse en la red


Con la configuración de la red completada y una comprensión básica de cómo funciona el proceso,
es hora de ver las herramientas que le permiten identificar su dirección IP y otras configuraciones de
red que le muestran cómo se le identifica en la red y cómo su se enruta el tráfico.

Es importante conocer información sobre su interfaz de red, puerta de enlace, dirección MAC, etc.,
especialmente en un entorno móvil 'en escena' donde es posible que necesite solucionar problemas
de conexión o conectarse a otro dispositivo dentro o fuera de su red local de forma segura. Aquí
nuevamente solo estamos cubriendo lo básico. Esto debería darle un comienzo y permitirle investigar
más para obtener información adicional en caso de que la necesite.

6.3.1 ¿Cuál es mi IP?

Una de las piezas de información más básicas disponibles para usted es su propia dirección IP. Hay
varias formas de averiguar qué dirección IP está asignada a su computadora. Tanto el comando
ifconfig como el ip le darán esa información. Pero ¿cuál es la diferencia? Primero, echemos un
vistazo a cómo usar cada uno para encontrar su dirección IP, luego discutiremos por qué tenemos
dos comandos que parecen hacer lo mismo.

ifconfig existe desde hace mucho tiempo. Se puede usar para ver las configuraciones de la interfaz
de red y también se puede usar para configurar las conexiones: activar o desactivar una interfaz; y
asigne direcciones IP, puertas de enlace predeterminadas y direcciones de transmisión. En su forma
más simple, llamamos al comando para ver nuestra configuración de red, usándolo con la opción -a
para mostrar todas las interfaces:

barry@forensicbox:~$ / sbin/ifconfig -a eth0:


flags=4163<ARRIBA, DIFUSIÓN, EN EJECUCIÓN, MULTIDIFUSIÓN> mtu 1500

74
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

inet 10.0.2.15 netmask 255.255.255.0 difusión 10.0.2.255 inet6


fec0::ce66:702d:a37:87a0 prefixlen 64 scopeid 0x40<sitio> inet6
fe80::4931:157b:7751:f5dc prefixlen 64 scopeid 0x20<enlace> éter :54:00:12:34:56
txqueuelen 1000 (Ethernet)
Paquetes RX 647 bytes 55423 (54,1 KiB)
Errores de RX 0 descartados 0 desbordamientos 0
marco 0 Paquetes de TX 531 bytes 62222 (60,7 KiB)
Errores de TX 0 caídas 0 excesos 0 operador 0 colisiones 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536


inet 127.0.0.1 máscara de red 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host> bucle
txqueuelen 1000 (bucle invertido local)
Paquetes RX 4 bytes 240 (240.0 B)
Errores de RX 0 descartados 0 desbordamientos 0
trama 0 Paquetes de TX 4 bytes 240 (240,0 B)
Errores de TX 0 caídas 0 excesos 0 operador 0 colisiones 0

Tenga en cuenta que ifconfig se puede ejecutar como un usuario normal (para ver la información de la
interfaz). Solo necesita proporcionar la ruta completa al comando, ya que el ejecutable reside en el directorio /
sbin (para archivos binarios del "sistema"), pero /sbin normalmente no está en la RUTA de un usuario.

La línea del resultado anterior que contiene la información de la red está resaltada en rojo, incluida la dirección
IP de la interfaz ("inet"). Además, resaltado en azul, está el MAC de la interfaz. En esta salida en particular
(lo) con la 7dirección
tenemos IP
una
esperada
única interfaz
de 127.0.0.1.
Ethernet (eth0) con una dirección IP (10.0.2.15). Y la interfaz loopback

Podemos obtener información muy similar con el comando ip . Usando ip con la opción addr (o incluso solo
a), podemos obtener los detalles sobre nuestras interfaces de red en ejecución:

barry@forensicbox:~$ / sbin/ip addr 1: lo:


<LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state DESCONOCIDO grupo predeterminado
,ÿ qlen 1000
enlace/bucle invertido 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo valid_lft foreverferred_lft forever
inet6 ::1/128 scope anfitrión valid_lft para siempre preferido_lft
para siempre

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state Grupo UP


,ÿ predeterminado qlen
1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet
10.0.2.15/24 brd 10.0.2.255 alcance dinámica global sin prefixroute eth0
valid_lft 42209sec prefered_lft 42209sec

7Un curso de red completo está fuera del alcance de esta guía. Si necesita más información sobre qué
es una dirección MAC y cómo es útil, busque en la web; es bueno saberlo.

75
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

inet6 fec0::ce66:702d:a37:87a0/64 alcance sitio dinámico noprefixroute valid_lft


85907secferred_lft 13907sec inet6 fe80::4931:157b:7751:f5dc/64 enlace de alcance
noprefixroute
válido_lft para siempre preferido_lft para siempre

Observe nuevamente la línea con la dirección IP resaltada en rojo y la dirección MAC resaltada en azul.
Resultado similar, herramienta diferente. Entonces, ¿cuál es la diferencia?

En pocas palabras, el comando ip es una herramienta más nueva y versátil. Pertenece al paquete
iproute2 y reemplaza en gran medida al comando ifconfig (del paquete net-tools ). El comando ip
amplía la funcionalidad de ifconfig, utiliza diferentes llamadas al sistema y, de hecho, simplifica la
administración de la red. Entonces, ¿cuál deberías usar? ifconfig o ip?

Normalmente uso por defecto el comando más parecido a "UNIX" que podemos encontrar. ifconfig ha
sido un comando estándar en tantas plataformas UNIX a lo largo de los años. Siempre sugiero aprender
herramientas estándar sobre otras utilidades de red porque generalmente puede encontrarlas en cualquier
sistema UNIX que pueda encontrar. Al igual que vi, lo aprendes porque siempre lo encontrarás disponible.
Este ya no es el caso con los programas de red. Incluso Solaris se está alejando de ifconfig a
implementaciones de utilidades de red más nuevas. Entonces, mi sugerencia es que aprenda tanto
ifconfig como ip y comprenda cómo usar cada uno... es probable que encuentre uno o ambos en
cualquier sistema give *nix.

Habiendo dicho todo eso, otra utilidad "agradable de saber" es nmcli. Si está utilizando Network
Manager para administrar sus conexiones y configuraciones de red, nmcli proporciona una buena vista
de su configuración por sí solo. Aquí hay un ejemplo de salida nmcli para una estación de trabajo
conectada a una red inalámbrica llamada Hivehom:

barry@forensicbox:~$ nmcli wlan0:


conectado a Hivehom
"Ralink RT5372"
wifi (rt2800usb), 9C:EF:D5:FD:AA:CE, hw, mtu 1500 ip4 por
defecto inet4 192.168.86.22/24 ruta4 0.0.0.0/0

ruta4 192.168.86.0/24
ruta4 192.168.86.0/24
inet6 fe80::721a:4d96:5207:6894/64
ruta6 fe80::/64 ruta6
ff00::/8

eth0: no disponible
"Intel 82579V"
Ethernet (e1000e), 10:BF:48:7F:79:A1, hardware, mtu 1500

lo: "lo" no
administrado

76
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

loopback (desconocido), 00:00:00:00:00:00, sw, mtu 65536

Configuración DNS:
servidores: 192.168.86.1
dominios: lan
interfaz: wlan0

Así que esto nos da una idea bastante buena de cómo podemos averiguar dónde nos sentamos en una red usando tres
herramientas diferentes: ifconfig, ip y nmcli. Pasaremos ahora a pintar un cuadro de lo que presentamos a la red.

6.4 Revisión de conexiones de red y puertos

Siempre es una buena idea saber exactamente qué puertos de red tiene abiertos y qué servicios de red se están ejecutando.
El diagnóstico de problemas de red generalmente comienza con comandos simples como ping. Si no está familiarizado
con los puertos y paquetes TCP, tómese un tiempo para buscarlos. No se tratan aquí ya que esta guía asume conocimientos
básicos de informática/redes.

ping es un comando generalmente disponible en la mayoría, si no en todos, los sistemas operativos. Su uso es sencillo. Si
desea verificar su capacidad para conectarse, ya sea con el mundo exterior o con una computadora o dispositivo en su red
local, simplemente haga "ping" en la dirección IP (o nombre de dominio) y busque una respuesta. Por ejemplo, tengo una
computadora en la red local a la que quiero probar mi capacidad de acceso a través de herramientas como ssh o netcat.
Rápidamente hago ping a la dirección IP (10.0.2.2) para asegurarme de que la dirección sea enrutable:

barry@forensicbox:~$ ping -c5 10.0.2.2 PING


10.0.2.2 (10.0.2.2) 56(84) bytes de datos. 64 bytes de
10.0.2.2: icmp_seq=1 ttl=255 tiempo=0,133 ms 64 bytes de 10.0.2.2:
icmp_seq=2 ttl=255 tiempo=0,243 ms 64 bytes de 10.0.2.2: icmp_seq=3
ttl=255 tiempo=0,195 ms 64 bytes de 10.0.2.2: icmp_seq=4 ttl=255
tiempo=0,253 ms 64 bytes de 10.0.2.2: icmp_seq=5 ttl=255
tiempo=0,226 ms

--- 10.0.2.2 estadísticas de ping --- 5


paquetes transmitidos, 5 recibidos, 0 % de pérdida de paquetes, tiempo 4102
ms rtt min/avg/max/mdev = 0,133/0,210/0,253/0,043 ms

En el ejemplo anterior, usamos ping con la opción -c para especificar el número ("recuento") de paquetes que se envían.
Sin -c , el comando continuaría hasta que el usuario lo interrumpa (usando <cntrl>c).

En la mayoría de los casos, usamos ping si no podemos conectarnos a algún servicio de red en un dispositivo determinado.
Antes de solucionar los problemas de la aplicación del servidor (o del cliente que se está utilizando), ping nos informará

77
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

si el servidor está incluso disponible para nosotros. Si no se recibe respuesta, generalmente sabemos que hay una
problema de conexión física, o quizás un problema de enrutamiento.

Eventualmente, querrá saber qué puertos están abiertos (o si el puerto que intenta conectar
está abierto, ya sea en una computadora remota o localmente). Para ello contamos con netstat y ss. Similar
a ifconfig e ip, estas herramientas vienen en los paquetes net-tools e iproute (respectivamente)
y ss es el programa más nuevo y funcional de los dos. Al buscar ayuda en línea,
verá que netstat se menciona con mucha más frecuencia que ss. netstat ha existido por más tiempo
y la mayoría de la gente está acostumbrada. Aprenda ambos y revise lo que está disponible en su
plataforma particular de elección.

Los comandos son simples y similares para ambas herramientas. Si desea ver los servicios de escucha
y conexiones establecidas con netstat, utilice la opción -a (todas). Para hacer la salida
más fácil de leer aquí, usaremos la opción -t para limitar la lista solo a puertos TCP (excluyendo
8
UDP) y la opción -4 para listar solo direcciones IPv4. Las opciones se agrupan a continuación:

barry@cajaforense:~$ netstat -at4


Conexiones a Internet activas (servidores y establecidas)
Proto Recv-Q Enviar-Q Dirección local tcp Dirección Extranjera Estado
tcp tcp 0 0 0.0.0.0:5656 0.0.0.0:* ESCUCHAR

0 0 0.0.0.0:ssh 0.0.0.0:* ESCUCHAR

0 36 10.0.2.15:ssh 10.0.2.2:43844 ESTABLECIDO

El resultado anterior muestra dos puertos TCP de escucha (en espera de una conexión). uno es seguro
Servidor de shell (ssh) . Este puerto también tiene una conexión ssh ESTABLECIDA desde IP 10.0.2.2.
Si desea ver los números de puerto en lugar del nombre del servicio, use la opción -n con
netstat. ssh tiene un puerto estándar conocido (TCP/22), por lo que aparece el nombre del servicio.

El otro puerto abierto es TCP/5656. Aquí no se da ningún nombre de servicio porque no es un


saber o puerto estándar, por lo que no se puede determinar el nombre del servicio. echaremos un vistazo a
cómo abordar eso en un momento.

Por ahora, veamos el comando ss y veamos cómo se compara con netstat. en realidad seremos
usando exactamente las mismas opciones para ss que hicimos en el comando anterior. -a para mostrar todo
(escuchando y establecido), -t para mostrar solo conexiones TCP y -4 para mostrar solo IPv4.
Y nuevamente, combinaremos las opciones. Si emitimos el comando como un comando normal
usuario, necesitaremos proporcionar la ruta completa ya que ss reside en /sbin en lugar de /bin (donde
nestat se encuentra en Slackware).

8Una vez más, si necesita más información sobre TCP frente a UDP, o IPv4 frente a IPv6, asegúrese de hacer un seguimiento con
investigación adicional. Estos son conceptos de red básicos pero importantes.

78
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@cajaforense:~$ / sbin/ss -at4


Estado Recv-Q Send-Q Dirección local:Puerto Dirección del par:Puerto Proceso
ESCUCHAR 0 1 0.0.0.0:5656 0.0.0.0:*
ESCUCHAR 0 128 0.0.0.0:ssh 0.0.0.0:*
ESTABLECER 0 36 10.0.2.15:ssh 10.0.2.2:43844

Y vemos esencialmente el mismo resultado con ss que con netstat. Un puerto de escucha y
conexión establecida en TCP/22 (ssh) y un proceso de escucha en el puerto 5656. Otro
nota aquí: puede ver solo los números de puerto en lugar del nombre del servicio pasando el
-n opción tanto para netstat como para ss : eso evitará que el nombre del servicio se resuelva en el puerto y
se le dará sólo el número de puerto.

Se muestra la salida de netstat y ss para que conozca ambos comandos. Me gusta


nuestros comandos ifconfig vs. ip anteriores, netstat y ss provienen de diferentes paquetes, y
ss es el programa más nuevo. Es suficiente decir que ss es más rápido y más capaz. Pero de nuevo, verás
consejos de netstat dondequiera que busque información sobre cómo investigar sockets de red abiertos en
linux

Volvamos al proceso de escucha en el puerto TCP 5656. Lo vimos tanto en nestat como en
ss , y aunque el puerto TCP 22 se resolvió en el servicio Secure Shell (ssh) , no hay
información adicional disponible en el puerto 5656.9

Si tenemos un proceso de escucha en un puerto no estándar, debemos poder resolverlo


puerto de escucha a un servicio o proceso. Para esto podemos usar el comando lsof . lsof permite
nosotros para vincular un programa o servicio con un socket de red abierto (o incluso un archivo abierto).

Para puertos de red abiertos, usar lsof es bastante simple. La opción -i nos permite hacer coincidir la IP
direcciones y puertos a nuestra lista de sockets abiertos. Si especificamos :<puerto> , entonces lsof
coincidir con el puerto abierto sin especificar una dirección IP. Aquí ejecutaremos el comando con un
único puerto TCP como argumento (nuestro puerto desconocido 5656). Necesitamos ser root para ejecutar esto
comando particular.

raíz@cajaforense:~# lsof -i tcp:5656


COMANDO PID USUARIO TIPO FD TAMAÑO DEL DISPOSITIVO/NO NOMBRE DEL NODO
Carolina del Norte 5313 raíz 3u IPv4 45995920 0t0 TCP *:5656 (ESCUCHAR)

Esto nos dice que estamos 'escuchando' en el puerto TCP 5656 con el comando nc . nc es el netcat
dominio. Por ahora solo entienda que este es un puerto abierto en nuestra computadora, escuchando
una conexión entrante. Aprenderemos más sobre el comando netcat (nc) en el capítulo 8.8,
donde aprenderemos sobre imágenes forenses a través de netcat.

9Eche un vistazo al archivo /etc/services para obtener más información.

79
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

7 Con guración de una estación de trabajo forense

Hay muchas guías, libros y sitios web excelentes en Internet que brindan información maravillosamente
detallada sobre cómo configurar una instalación de Linux para el uso diario. Nos concentraremos aquí en
temas de particular interés para configurar una estación de trabajo forense segura y utilizable.

Al igual que con el resto de esta guía, los comandos especí cos presentados aquí son para una instalación de
Slackware. Mientras que los comandos y las capacidades proporcionados por otras distribuciones diferirán un
poco (o mucho), los conceptos básicos deberían ser los mismos. Como siempre, consulte la documentación
de su distribución antes de ejecutar estos comandos en un sistema que no sea Slackware.
Y permítanme reiterar. Estos son solo los conceptos básicos. Las pautas establecidas aquí ofrecen solo un
punto de partida para la configuración y seguridad de la estación de trabajo. Si no está utilizando Slackware,
no se salte esta sección... la información es útil independientemente. Este no es un manual exhaustivo sobre
seguridad y con guración. Es simplemente lo básico para empezar.

7.1 Protección de la estación de trabajo

Estas próximas secciones sobre secuencias de comandos de inicio, tcpwrapper e iptables se cubren en
detalle en la documentación de Slackware (el Libro de Slack, por ejemplo) y en otros lugares para otras
distribuciones. Voy a mencionarlos aquí para que el lector obtenga una comprensión básica de estos temas.
Los detalles se pueden encontrar a través de lecturas adicionales. Una vez más, tome nota de que incluso si
no está utilizando Slackware y la distribución de su elección no está configurada como voy a describir, vale la
pena seguirla, como tema para determinar los puertos de red abiertos y rastrear a qué servicio pertenecen. a
es importante.

Cualquiera que haya trabajado en el campo de la ciencia forense digital e informática durante algún tiempo
puede decirle que la seguridad de la estación de trabajo forense es siempre una prioridad máxima. Algunos
profesionales trabajan en redes forenses completamente aisladas sin conexión con recursos externos. Otros
consideran que este enfoque es demasiado limitante y optan por proteger y monitorear en gran medida las
estaciones de trabajo forenses al tiempo que permiten cierto nivel de acceso a las redes externas. En cualquier
caso, comprender la postura de seguridad de su estación de trabajo es extremadamente importante. Este
documento no respalda ni sugiere ningún enfoque en particular y, como ocurre con todas las cosas en este
negocio, los requisitos para su configuración particular pueden cambiar día a día según la naturaleza de los
casos en los que está trabajando, la evidencia que está manejando, el entorno físico o de red en el que está
trabajando y las políticas establecidas por su agencia o empresa.

El objetivo aquí es garantizar que, como mínimo, un examinador forense comprenda la postura de seguridad
actual de la estación de trabajo o, como mínimo, esté versado en abordarla.
Esta sección no pretende implicar, de ninguna manera, que la simple seguridad basada en host sea suficiente
para proteger su entorno forense. El laboratorio ideal tendrá enrutadores de borde y dispositivos basados en
hardware para proteger adecuadamente los datos y el acceso a la red. En algunos casos, el análisis de
contrabando y la investigación de malware, por ejemplo, la separación de aire puede ser la única solución realista. En

80
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

En cualquier caso, comprender la mecánica de la seguridad basada en host es una parte importante
del entorno forense que a menudo se pasa por alto.

7.1.1 Con guración de servicios de inicio

Comenzaremos nuestra configuración de seguridad con los pasos más básicos... deshabilitando los
servicios (y/o demonios) que se inician cuando la computadora arranca. Es de conocimiento bastante
común que la ejecución de programas y servicios de red que no está utilizando y que no necesita solo
sirve para introducir vulnerabilidades potenciales. Hay todo tipo de servicios que se ejecutan en cualquier
estación de trabajo, independientemente de la distribución o el sistema operativo. Algunos de estos
servicios son obligatorios, algunos son opcionales y otros son totalmente indeseables para un entorno forense.
Como se discutió anteriormente, aquí es donde encontrará una gran diferencia entre las diversas
distribuciones. Consulte la documentación de su distribución para obtener más información, ¡y no
descuide esta parte de su educación en Linux!

Anteriormente, discutimos el proceso de inicialización del sistema. Parte de ese proceso es la ejecución
de scripts rc que manejan los servicios del sistema. Recuerde que el archivo /etc/inittab invoca los
scripts de nivel de ejecución apropiados en el directorio /etc/rc.d/ . A su vez, estos scripts prueban
varios scripts de servicio, también en el directorio /etc/rc.d/ , para permisos ejecutables. Si el script es
ejecutable, se invoca y se inicia el servicio. Esto se puede encadenar, donde rc.M verifica si un script rc
es ejecutable y, de ser así, la ejecución de ese script busca más scripts que sean ejecutables. Por
ejemplo, la prueba dentro de rc.M (secuencia de comandos de inicio multiusuario) que ejecutará la
secuencia de comandos de inicialización de demonios de red (rc.inet2) tiene este aspecto (abreviado):

root@forensicbox:~# gato /etc/rc.d/rc.M


...
# Iniciar demonios de red: if [ -x /
etc/rc.d/rc.inet2 ]; después
/etc/rc.d/rc.inet2 fi

...

El código que se muestra arriba es una declaración si / entonces donde los corchetes significan la
prueba y -x verifica los permisos ejecutables. Entonces se leería:

si el archivo /etc/rc.d/rc.inet2 es ejecutable, ejecute el script /etc/rc.d/rc.inet2

Una vez que rc.inet2 se está ejecutando, verifica los permisos ejecutables en los scripts del servicio de
red (entre otras cosas). Esto nos permite controlar la ejecución de scripts simplemente cambiando los
permisos. Si un script rc es ejecutable, se ejecutará. Si no es ejecutable, se pasa por alto. Como
ejemplo, echemos un vistazo a la parte de OpenSSH (shell seguro) de
rc.inet2:

root@forensicbox:~# gato /etc/rc.d/rc.inet2

81
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

...
# Inicie el demonio OpenSSH SSH: if
[ -x /etc/rc.d/rc.sshd ]; después
echo "Iniciando el demonio OpenSSH SSH. /usr/sbin/sshd" /
etc/rc.d/rc.sshd start fi

...

Nuevamente, esta parte de rc.inet2 verifica si rc.sshd es ejecutable. Si es así, ejecuta el comando /etc/
rc.d/rc.sshd start. En la mayoría de los casos, los scripts del servicio rc pueden pasar como argumentos
start, stop o restart . Entonces, en resumen para este ejemplo en particular:

/etc/inittab llama a /etc/rc.d/rc.M

/etc/rc.d/rc.M llama a /etc/rc.d/rc.inet2 (si rc.inet2 es ejecutable)

/etc/rc.d/rc.inet2 pasa el comando /etc/rc.d/rc.sshd start (si rc.sshd es ejecutable).

Anteriormente discutimos los permisos de archivo. Ahora veamos un ejemplo práctico de cambio de
permisos con el fin de evitar que determinados servicios se inicien en el momento del arranque. Una
mirada a los permisos de /etc/rc.d/rc.sshd muestra que es ejecutable, por lo que comenzará cuando
rc.inet2 ejecuta:

root@forensicbox:~# ls -l /etc/rc.d/rc.sshd
-rwxr-xr-x 1 raíz raíz 1814 1 de octubre de 2018 /etc/rc.d/rc.sshd*

Para cambiar los permisos ejecutables para evitar que el servicio SSH se inicie en el momento del
arranque, ejecuto lo siguiente:

root@forensicbox:~# chmod 644 /etc/rc.d/rc.sshd

root@forensicbox:~# ls -l /etc/rc.d/rc.sshd -rw-r--r--


1 root root 1814 1 de octubre de 2018 /etc/rc.d/rc.sshd

La lista de directorios muestra que cambié el estado ejecutable del script y, por lo tanto, evité que el
servicio se inicie cuando se inicia el sistema. Dependiendo de la configuración de su terminal de color,
también puede ver el cambio de color del nombre del archivo en una lista.

Puede usar esta técnica para revisar su directorio /etc/rc.d para desactivar aquellos servicios que no
necesita. Como no estoy usando una computadora portátil vieja y no necesito servicios PCMCIA ni
tengo soporte de red inalámbrica en mi estación de trabajo, me aseguraré de que no tengan permisos
ejecutables:

82
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# chmod 644 /etc/rc.d/rc.pcmcia

root@forensicbox:~# chmod 644 /etc/rc.d/rc.wireless

Si desea saber qué hace cada script, o si no está seguro del propósito de un servicio iniciado por un script rc en
particular, simplemente abra el script con su programa de paginación (menos, por ejemplo) y lea los comentarios
(líneas que comienzan con un #). Desactivar un servicio que necesita es tan malo como dejar en funcionamiento
un servicio innecesario. Aprenda qué servicio inicia cada secuencia de comandos y por qué, y actívelo o inhabilítelo
según corresponda.

Por ejemplo, aquí están los comentarios al principio de /etc/rc.d/rc.yp:

root@forensicbox:~# menos /etc/rc.d/rc.yp #!/bin/


sh # /etc/rc.d/rc.yp

#
# Inicie NIS (Servicio de información de red). NIS proporciona distribución en toda
la red # de nombre de host, nombre de usuario y otras bases de datos de información.
# Después de configurar NIS, deberá descomentar las partes # de este script que
desea ejecutar o modificar /etc/default/yp
#
# NOTA: para obtener información detallada sobre la configuración de NIS, consulte la #
documentación en /usr/doc/yp-tools, /usr/doc/ypbind, # /usr/doc/ypserv y /usr/doc/Linux-
HOWTOs/ NIS-CÓMO.
...

Sugeriría dejar sshd ejecutándose (a través del script /etc/rc.d/rc.sshd ). Incluso si no cree que usará SSH, a
medida que adquiera más experiencia con Linux, encontrará que SSH, el shell seguro
, se convierte en una parte importante de su caja de herramientas.

7.1.2 Control de acceso basado en host

Continuamos nuestra discusión sobre la configuración de seguridad básica con una palabra sobre el control de
acceso simple basado en host. Tenga en cuenta que esto NO es un cortafuegos. Este es el control de acceso a
nivel de host. En términos muy simples, podemos controlar el acceso a nuestro sistema con dos archivos, /etc/
hosts.deny y /etc/hosts.allow.

Con fines ilustrativos, asegurémonos de que podamos conectarnos desde un host externo a nuestra estación de
trabajo forense a través de SSH. Recuerde, dejamos el script rc.sshd ejecutable, por lo que el servicio se inició
cuando nuestra computadora arrancó, y en este punto no hemos establecido ningún control de acceso.

El siguiente comando da como resultado una conexión exitosa como usuario barry desde el host externo
hyperion a nuestra estación de trabajo forense forensicbox. Tenga en cuenta el cambio en el símbolo del sistema

83
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

en la última línea:

barry@hyperion:~$ ssh -l barry 192.168.86.83 Contraseña de


barry@192.168.86.83: Último inicio de sesión: lunes 7 de septiembre
a las 13:21:20 de 2020 desde 192.168.86.4 Linux 5.4.58.

barry@cajaforense:~$

Ahora estamos conectados a nuestra estación de trabajo forense (forensicbox) desde una computadora diferente
(hyperion).

Como se mencionó anteriormente, hay dos archivos de control de acceso que usaremos. Estos son /
etc/hosts.deny, que establece la política predeterminada de todo el sistema para la denegación de
acceso, y /etc/hosts.allow, que luego se puede usar para perforar las conexiones denegadas. Ambos archivos
adoptan la misma sintaxis básica:

servicios:sistemas

Comenzamos con /etc/hosts.deny y lo usamos para denegar todas las conexiones entrantes a todos los servicios.
Hacemos esto editando el archivo y agregando la cadena ALL:ALL en una sola línea. Cuando abra el archivo por
primera vez para editarlo, notará que no hay líneas que no comiencen con un signo # . Eso significa que todo el
archivo son solo comentarios sin contenido real. Una vez que agreguemos nuestra línea única, se verá así:

root@forensicbox:~# gato /etc/hosts.deny

#
# hosts.deny *no* Este archivo describe los nombres de los hosts que son
# permitido usar los servicios INET locales, según lo decida el servidor '/usr/sbin/
# tcpd'.
#
# Versión: @(#)/ etc/hosts.deny 1.00 28/05/93
#
# Autor: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org #

TODO TODO <- La línea que agregamos

# Fin de hosts.deny.

Ahora se denegarán todas las conexiones entrantes. Tenga en cuenta que esto NO es un cortafuegos. Es
simplemente un control de acceso a los servicios que se ejecutan en el sistema actual. Dado que esto es
hosts.deny, simplemente decimos DENY all connections from all hosts.

84
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Cuando intentamos ingresar a nuestra estación de trabajo desde un host externo, no obtenemos conexión:

barry@hyperion:~$ ssh -l barry 192.168.86.83


kex_exchange_identification: Conexión cerrada por host remoto Conexión cerrada por
192.168.86.83 puerto 22

Una vez más, en el ejemplo anterior, intento iniciar sesión en mi estación de trabajo forense, forensicbox desde
la computadora hyperion). La conexión es denegada.

Ahora que hemos establecido una política de denegación predeterminada, hagamos un agujero en el esquema
agregando un servicio permitido. Continuaremos usando sshd como ejemplo, ya que me gusta tener acceso a
través de SSH y lo dejaré abierto de todos modos.

Para permitir el acceso a un servicio, editamos el archivo /etc/hosts.allow y agregamos una línea para cada
servicio en el mismo formato services:systems .

Cuando agregamos una excepción SSH para nuestra red local a hosts.allow, nuestra excepción sshd se verá así:

root@forensicbox:~# gato /etc/hosts.allow


#
# hosts.allow Este archivo describe los nombres de los hosts que son
# permitido usar los servicios INET locales, según lo decida el servidor '/usr/sbin/
# tcpd'.
#
# Versión: @(#)/ etc/hosts.allow 1.00 28/05/93
#

# Autor: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org #

sshd:192.168.86. <- La línea que agregamos

# Fin de hosts.permitir.

Esto básicamente se lee como PERMITIR conexiones a sshd desde sistemas solo en la red 192.168.86.0. Esto
limita las conexiones a las que se originan únicamente en las máquinas de mi red forense local. Lea la página del
manual y ajústela a sus necesidades.

Entender hosts.deny y hosts.allow nos da un buen comienzo en nuestra configuración de seguridad. Para una
estación de trabajo forense típica, esto es tan simple como debe ser a nivel de host. Para muchos profesionales
forenses, simplemente agregar ALL:ALL a hosts.deny y dejar hosts.allow totalmente vacío podría ser suficiente
si no necesita acceso.

Para realmente filtrar el tráfico en la interfaz de red, necesitaremos configurar un host basado
rewall

85
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

7.1.3 Cortafuegos basado en host con iptables

Es una práctica común para muchos profesionales forenses que usan otros sistemas operativos utilizar algún tipo de
programa de firewall basado en host para monitorear las conexiones de red de su estación de trabajo y proporcionar
algún tipo de protección básica contra el acceso no solicitado. Es posible que desee hacer lo mismo en su estación de
trabajo Linux o, en algunos casos, es posible que deba ejecutar un firewall basado en host por agencia o política
corporativa. En cualquier caso, el equivalente de Linux más utilizado para este tipo de cosas es el filtro de paquetes de
red de iptables .

Hay filtros de paquetes de red más nuevos (relativamente). En los últimos años , nftables, administrado mediante nft,
se ha vuelto más popular y se incluye en el núcleo principal de Linux. Se incluye de forma predeterminada en Slackware
y en la mayoría de las demás distribuciones, y se puede encontrar más información en Internet. A los efectos de esta
guía, nos limitaremos a iptables por ahora.

De todos los temas tratados en este documento, este es uno de los más complejos, con poca relación directa con la
práctica forense real. Sin embargo, es demasiado importante como para no cubrirlo si vamos a hablar de Linux como
una plataforma forense y la seguridad requerida de la estación de trabajo.
Un cortafuegos basado en host puede no ser un requisito para una buena estación de trabajo forense, especialmente
dado que muchas agencias y empresas ya están trabajando en un entorno de red bien protegido (o con brechas de aire).
Sin embargo, en mi humilde opinión, sigue siendo una muy buena idea.
Es muy común ver a los usuarios novatos de Linux confiar completamente en la idea de que Linux es simplemente más
seguro que otros sistemas operativos. Y sé por experiencia personal que hay profesionales forenses digitales que tienen
estaciones de trabajo conectadas directamente a Internet y no toman estas precauciones.

A diferencia de la mayoría de los otros temas cubiertos en esta sección de configuración, iptables requiere un poco más
de explicación para configurarlo de manera efectiva desde cero de lo que estoy dispuesto a incluir en una guía práctica
simple. Como resultado, en lugar de dar una descripción detallada e instrucciones paso a paso, discutiremos brevemente
cómo ver la configuración de iptables y proporcionaremos una secuencia de comandos de referencia para que el lector
comience. Nuestro script de línea de base ha sido proporcionado por Robby Workman (http://www.rlworkman.net).

Primero, debemos asegurarnos de que comprendemos las diferencias entre las protecciones proporcionadas por
hosts.allow y hosts.deny frente a iptables. Como mencionamos anteriormente, los archivos hosts* bloquean el
acceso a nivel de aplicación, mientras que iptables bloquea el tráfico de red en la interfaz de red física especificada.
Esta es una distinción importante. iptables esencialmente se encuentra entre la red y las aplicaciones y acepta o rechaza
paquetes de red a nivel de kernel.

En términos simples, iptables trata con cadenas. La cadena INPUT para el tráfico entrante, la cadena OUTPUT para el
tráfico saliente y la cadena FORWARD que maneja el tráfico sin origen ni destino en la interfaz filtrada. Estas cadenas
tienen políticas predeterminadas, a las que se pueden agregar reglas adicionales.

Echemos un vistazo a nuestra configuración predeterminada de iptables (en este caso, la configuración predeterminada
significa una configuración vacía). Para hacer esto podemos usar iptables con la opción -S para mostrar las reglas dentro

86
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

cada cadena Si no proporciona el nombre de la cadena (ENTRADA, por ejemplo), el comando enumerará
todas las cadenas y sus reglas, comenzando con las políticas predeterminadas:

root@forensicbox:~# iptables -S
-P ENTRADA ACEPTAR
-P ADELANTE ACEPTAR
-P SALIDA ACEPTAR

El comando anterior enumera las políticas para cada cadena junto con las reglas que se hayan agregado.
Como puede ver en el resultado aquí, las políticas predeterminadas son ACEPTAR y no hay otras
reglas. Ninguno de los trá cos de nuestra red está siendo ltrado.

A menudo es deseable ocultar nuestros sistemas de todo el trá co de la red, incluido el trá co de ping .
Con nuestra configuración de iptables vacía , desde un host externo, podemos hacer ping a nuestra
estación de trabajo forense (192.168.86.83) y los paquetes ICMP llegan:

root@hyperion:~# ping 192.168.86.83 PING


192.168.86.83.lan (192.168.86.83) 56(84) bytes de datos. 64 bytes de
192.168.86.83.lan (192.168.86.83): icmp_seq=1 ttl=64 tiempo=213 ms 64 bytes de 192.168.86.83.lan
(192.168.86.83): icmp_seq=2 ttl=64 tiempo=34,5 ms 64 bytes desde 192.168.86.83.lan (192.168.86.83):
icmp_seq=3 ttl=64 tiempo=54,2 ms ^C

--- Estadísticas de ping de 192.168.86.83.lan --- 3


paquetes transmitidos, 3 recibidos, 0% de pérdida de paquetes, tiempo 3003ms
rtt min/avg/max/mdev = 34.471/95.667/213.198/69.815 ms

Ahora vamos a crear un script de iptables basado en gran medida en el que se encuentra en http: //
www.rlworkman.net/conf/firewall/rc.firewall.desktop.generic

Eche un vistazo a la siguiente versión del script, editado con vi (me dijeron que este es un buen ejercicio
de edición vi ...), que guardaremos como /etc/rc.d/rc.firewall. Es importante que obtenga el nombre
correcto ya que este es otro script que se llama desde /etc/rc.d/rc.inet2, como discutimos anteriormente.
Una vez que se crea y guarda el script, echemos un vistazo.

root@forensicbox:~# menos /etc/rc.d/rc.firewall # Definir


variables

IPT=$(que iptables) # cambiar si es necesario


EXT_IF=eth0 # interfaz externa (conectada a internet)

# Habilite la protección de cookies TCP SYN


si [ -e /proc/sys/net/ipv4/tcp_syncookies ]; luego echo 1 > /proc/
sys/net/ipv4/tcp_syncookies fi

87
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

# Deshabilitar la aceptación de redirección ICMP echo


0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# No enviar mensajes de redirección echo 0 > /


proc/sys/net/ipv4/conf/all/send_redirects

# Establecer la política predeterminada en DROP


$IPT -P CAÍDA DE ENTRADA
$IPT -P CAÍDA DE SALIDA
$IPT -P CAÍDA ADELANTE

# Elimina las reglas antiguas


$IPT-F

# Permitir el tráfico de bucle invertido


$IPT -A ENTRADA -i lo -j ACEPTAR
$IPT -A SALIDA -o lo -j ACEPTAR

# Permitir paquetes de conexiones establecidas y las relacionadas con ellas


$IPT -A INPUT -i $EXT_IF -m conntrack --ctstate ESTABLECIDO, RELACIONADO -j ACEPTAR

# Permitir todos los paquetes salientes excepto los inválidos


$IPT -A SALIDA -o $EXT_IF -m conntrack --ctstate NO VÁLIDO -j DROP
$IPT -A SALIDA -o $EXT_IF -j ACEPTAR

# Permitir ssh entrante (elimine el comentario de la línea a continuación si es necesario)


$IPT -A INPUT -i $EXT_IF -p tcp --dport 22 --syn -m conntrack --ctstate NUEVO -j
,ÿ ACEPTAR

El archivo, que se muestra arriba, comienza con definiciones de variables, seguidas de una serie de líneas que
configuran varios parámetros del núcleo para mayor seguridad. Luego continuamos con la configuración de
todas las políticas predeterminadas para ENTRADA, SALIDA y ADELANTE en DROP, mucho más seguro , en
lugar de simplemente ACEPTAR. Luego definimos reglas que se agregan (-A) a las diversas cadenas. También
tenga en cuenta que eliminé los comentarios de la última línea del script, en referencia al tráfico TCP (-p tcp) en
el puerto de destino 22 (--dport 22). Esto permitirá el tráfico SSH.

Nota importante: asegúrese de que la línea 4 de ne la interfaz de red correcta. En el script anterior tenemos
EXT_IF=eth0. Por ejemplo, si está utilizando una interfaz inalámbrica, es posible que deba cambiar su interfaz a
wlan0. Puede usar el comando ifconfig para ver qué interfaz tiene una dirección.

Con el archivo guardado en /etc/rc.d/rc.firewall , lo iniciamos haciendo que el archivo sea ejecutable. El script
de recuperación, si existe y tiene permisos ejecutables, se llamará desde /etc/rc.d/rc.inet2. Verifique los
permisos en el archivo, cámbielos a ejecutables (usando chmod) y vuelva a verificar. Podemos cargar las reglas
simplemente llamando explícitamente al script:

88
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# ls -l /etc/rc.d/rc.firewall -rw-r--r-- 1 raíz raíz 1080


18 de junio 22:22 /etc/rc.d/rc.firewall

root@forensicbox:~# chmod 755 /etc/rc.d/rc.firewall

root@forensicbox:~# ls -l /etc/rc.d/rc.firewall -rwxr-xr-x 1 root root


1080 18 de junio 22:22 /etc/rc.d/rc.firewall*

root@forensicbox:~# sh /etc/rc.d/rc.firewall

El último comando de la sesión ilustrada arriba muestra que hemos ejecutado el script de recuperación. Ahora,
cuando observamos nuestra configuración de iptables , vemos las reglas vigentes:

root@forensicbox:~# iptables -S
-P CAÍDA DE ENTRADA

-P CAÍDA HACIA ADELANTE

-P CAÍDA DE SALIDA

-A ENTRADA -i lo -j ACEPTAR
-A INPUT -i eth0 -m conntrack --ctstate RELACIONADO, ESTABLECIDO -j ACEPTAR
-A INPUT -i eth0 -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m
,ÿ conntrack --ctstate NUEVO -j ACEPTAR
-A SALIDA -o lo -j ACEPTAR
-A SALIDA -o eth0 -m conntrack --ctstate NO VÁLIDO -j DROP
-A SALIDA -o eth0 -j ACEPTAR

Aquí vemos que las políticas predeterminadas (-P) ahora están configuradas en DROP y tenemos varias reglas en
cada cadena. Las líneas que comienzan con -A significan que estamos agregando una regla a nuestra cadena.
Tenga en cuenta que dado que nuestra política predeterminada es descartar todo el tráfico entrante y no existe
una regla explícita para permitir el tráfico ICMP entrante, ya no podemos hacer ping a nuestra estación de trabajo
forense desde un host externo. Sin embargo, podemos conectarnos con SSH ya que tenemos una regla que
acepta el tráfico TCP en el puerto de destino 22 (suponiendo que descomentó la última línea del script y suponiendo
que el servidor SSH se está ejecutando en el puerto predeterminado).

root@hyperion:~# ping 192.168.86.83 PING


192.168.86.83 (192.168.86.83) 56(84) bytes de datos.
^C
--- Estadísticas de ping 192.168.86.83 --- 6 paquetes
transmitidos, 0 recibidos, 100 % de pérdida de paquetes, tiempo 5153 ms

Intentando hacer ping a la estación de trabajo forense (en IP 192.168.86.83) desde un host llamado Hyperion.
Si necesita permitir otro tráfico, hay muchos tutoriales y ejemplos en Internet para trabajar. Este es un filtro de
paquetes de red basado en host muy simple y genérico. Y al igual que con los otros temas de esta guía, pretende
proporcionar una base para el aprendizaje adicional.

89
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

7.2 Actualización del sistema operativo

Mantener el sistema operativo actualizado es una parte importante de la seguridad de la estación de trabajo. La mayoría
de las distribuciones de Linux vienen con algún tipo de mecanismo para mantener el sistema operativo actualizado con
los últimos parches de seguridad y estabilidad. Si elige utilizar una distribución que no sea Slackware, asegúrese de
consultar la documentación correspondiente.

Aptitud sináptica de Debian y Ubuntu

Fedora mmm

ArchLinux pacman

Portage Gentoo

Paquete de herramientas de Slackware

Desde la perspectiva de una estación de trabajo forense, Slackware adopta un enfoque particularmente conservador (y,
por lo tanto, seguro) para actualizar el sistema operativo. Una vez que una versión de Slackware se considera estable,
la adición de bibliotecas ,actualizadas y paquetes binarios
operativo correctamente generalmente
parcheado. se limita
Se pone poco a los necesarios
o ningún para un lo
énfasis en ejecutar sistema
último y lo
mejor por el simple hecho de hacerlo. Recomiendo encarecidamente no actualizar continuamente el software sin tener
una buena razón (parches de seguridad, por ejemplo).

Las nuevas versiones de bibliotecas críticas y software del sistema siempre deben probarse antes de su uso en un
entorno forense de producción, esto no implica una revalidación con cada actualización.
Eso depende de sus propias políticas y procedimientos.

Tenga en cuenta que con algunas distribuciones, la actualización regular del sistema operativo, sin una configuración
adecuada y, a menudo, compleja, puede generar una docena de paquetes nuevos y actualizados cada dos semanas.
En el contexto de una plataforma forense estable y bien probada, esto es menos que ideal. Además, los desarrolladores
de Slackware tienden a no parchear el código original, como es común entre otras distribuciones. Slackware adopta el
enfoque de si no está roto, no lo arregles.

Esta información no pretende menospreciar otras distribuciones. Lejos de ahi. Cualquier distribución de Linux
correctamente administrada constituye una plataforma forense de primera. Sin embargo, estas son consideraciones
importantes si está ejecutando una estación de trabajo forense en cualquier tipo de entorno litigioso.
Con demasiada frecuencia, los principiantes de análisis forense de Linux confían su plataforma a numerosas
actualizaciones no probadas orientadas al escritorio, sin pensar en posibles cambios en el comportamiento que pueden,
en circunstancias ciertamente limitadas, generar preguntas.

7.2.1 Pkgtools de Slackware

Slackware proporciona un conjunto de utilidades para manipular paquetes en pkgtools. Estos son pkgtool (controlado
por menú), installpkg, removepkg y upgradepkg. Estos se analizan en detalle aquí: https://www.slackbook.org/html/
package-management-package-utilities.html.

90
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

7.2.2 slackpkg para actualizaciones automáticas

Nos vamos a centrar en una herramienta automatizada para la gestión de paquetes en Slackware -
slackpkg ,ÿ . Es extremadamente fácil de configurar y usar. La página de manual proporciona instrucciones
muy claras sobre el uso de slackpkg junto con una buena descripción de algunas de sus capacidades.

Comenzamos eligiendo un solo espejo (repositorio de Slackware) que se encuentra en el archivo de


configuración de slackpkg . Inicie sesión como raíz y abra /etc/slackpkg/mirrors con vi (o el editor de su elección).
Descomente una sola línea y estará listo para comenzar (elimine el signo # del frente de una dirección). La
línea que elimine el comentario debe ser para la arquitectura específica (32 bits frente a 64 bits, etc.) y la
versión de Slackware que está ejecutando10, y debe estar cerca de su región geográfica (EE. UU., Reino
Unido, Polonia, etc.).

Tenga en cuenta que Slackware-current es una rama de desarrollo de Slackware y NO es adecuado para
nuestros propósitos. No seleccione un espejo de la lista actual de Slackware.

El siguiente ejemplo muestra un archivo /etc/slackpkg/mirrors editado en el que se ha quitado el comentario


de un solo espejo para un servidor en los EE. El espejo que estamos seleccionando es para Slackware64-14.2.
Seleccione un espejo apropiado para su ubicación.

root@forensicbox:~# vi /etc/slackpkg/mirrors
...
#------------------------------------------------- ---------------
#Slackware64-14.2
#------------------------------------------------- ---------------
# UTILICE MIRRORS.SLACKWARE.COM (NO UTILICE FTP - SOLO HTTP ENCUENTRA UN
ESPEJO CERCANO) http://mirrors.slackware.com/slackware/slackware64-14.2/
#
# AUSTRALIA (AU)
# ftp://ftp.cc.swin.edu.au/slackware/slackware64-14.2/ # http://
ftp.cc.swin.edu.au/slackware/slackware64-14.2/ # ftp: //ftp.iinet.net.au/
pub/slackware/slackware64-14.2/ # http://ftp.iinet.net.au/pub/
slackware/slackware64-14.2/ # ftp://mirror.aarnet.edu. es/pub/
slackware/slackware64-14.2/
...

Una precaución que puede tomar con slackpkg es agregar varios paquetes a la lista negra. La lista negra
especifica aquellos programas y paquetes que no queremos que se actualicen regularmente. Hacemos esto
para evitar tener que complicar las actualizaciones de seguridad periódicas con cambios en nuestro cargador
de arranque y otros componentes que agregan una complejidad excesiva a nuestro

10Presta atención a la arquitectura y la versión. Hice un completo muppet de mí mismo en el canal IRC de
##slackware un día, pedí ayuda cuando intentaba actualizar Slackware64 (SO de 64 bits), sin saber que había
seleccionado un espejo de 32 bits y, por lo tanto, destruí mi sistema cuando actualicé .

91
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

proceso de actualización. En particular, queremos evitar (por ahora) tener que realizar todos los pasos necesarios
para actualizar nuestros paquetes de kernel.

El archivo de la lista negra se encuentra en /etc/slackpkg/blacklist y hay varias líneas relacionadas con las
actualizaciones del kernel que están incluidas pero comentadas. Descomente esas líneas eliminando el símbolo
\# inicial y agregue las líneas adicionales como se muestra para que el archivo se vea así (en parte):

root@forensicbox:~# vi /etc/slackpkg/blacklist
...
# La actualización automática de los paquetes del kernel no es una buena idea (y necesita #
ejecutar "lilo" después de la actualización). Si piensa lo mismo, elimine el comentario de las
líneas # a continuación
#
kernel-firmware
kernel-genérico
kernel-genérico-smp
kernel-headers
kernel-
enorme kernel-
enorme-smp kernel-modules
kernel-modules-smp
kernel-fuente

...

Cuando se requiere una actualización crítica de uno de los paquetes del kernel, las líneas en la lista negra
siempre se pueden comentar temporalmente y los paquetes se pueden actualizar como de costumbre. Si deja las
líneas comentadas, obtendrá actualizaciones periódicas del kernel. Solo recuerde que un kernel actualizado
requerirá que también actualice su cargador de arranque. Se le pedirá esto de todos modos.

Hemos seleccionado nuestro espejo y ajustado nuestros paquetes en la lista negra, ahora es simplemente una
cuestión de actualizar nuestra lista de paquetes... hacemos esto con el simple comando slackpkg update, que
descargará la lista de archivos actual (incluidos los parches). Una vez que esté completo, ejecute slackpkg , ÿ
upgrade-all y se le presentará una selección de paquetes para actualizar (menos los paquetes en la lista negra).

La página de manual de slackpkg proporciona instrucciones fáciles de seguir. En pocas palabras, para nuestros
propósitos aquí, el uso es simplemente:

1. elimine el comentario de un espejo en /etc/slackpkg/mirrors

2. Opcionalmente, agregue archivos (o entradas sin comentarios) en /etc/slackpkg/blacklist

3. ejecuta la actualización de slackpkg

92
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

4. ejecutar slackpkg upgrade-all

Le sugiero encarecidamente que se tome un minuto para leer el registro de cambios de la versión de
Slackware (o cualquier distribución) que esté utilizando. Comprender lo que está actualizando y por qué es
una parte importante de la comprensión de su plataforma forense. Puede parecer tedioso al principio, pero
debería ser parte de sus tareas comunes de mantenimiento del sistema. Puede leer el archivo
ChangeLog.txt en el espejo que seleccionó para actualizar su sistema, o simplemente vaya a: https://
mirror.SlackBuilds.org/slackware/slackware64-14.2/ChangeLog.txt cuando haya actualizaciones
disponibles.

Usar el método slackpkg anterior es la forma más fácil de mantener su sistema operativo actualizado con
los parches y correcciones de seguridad estables más recientes. Periódicamente, puede ejecutar slackpkg
update y slackpkg upgrade, todo para mantener su sistema actualizado. Los primeros dos pasos solo
deben realizarse una vez en su sistema.

Una vez más, si no está utilizando Slackware, asegúrese de consultar la documentación de su distribución
para determinar cuál es la mejor manera de mantener su estación de trabajo debidamente parcheada. Pero,
por favor, siga teniendo en cuenta que lo último y lo mejor no significa parcheado correctamente. Una
distinción importante.

7.3 Instalación y actualización de software "externo"

Así que hemos discutido el uso de slackpkg para actualizar los paquetes del sistema operativo y mantener
el sistema correctamente parcheado y actualizado. ¿Qué pasa con el software externo, es decir, el software
que no está incluido en una instalación predeterminada, como nuestras utilidades forenses? Hay varias
formas de instalar este software externo en nuestro sistema.

1. Compilar desde la fuente

2. Use un paquete preconstruido (generalmente dependiente de la distribución)

3. Cree su propio paquete

7.3.1 Compilación desde la fuente

Compilar desde la fuente es el método más básico para instalar software en Linux. Por lo general, es
independiente de la distribución y funcionará para cualquier paquete dado en la mayoría de las distribuciones,
suponiendo que se cumplan las dependencias. Si se utiliza correctamente, la compilación desde el origen
tiene la ventaja de adaptarse más a su entorno, con una mejor optimización. El mayor inconveniente es que
la compilación desde el código fuente, sin una manipulación cuidadosa de los archivos de configuración,
puede ensuciar su sistema con ejecutables y bibliotecas ubicadas en ubicaciones menos que óptimas. Puede

93
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

también resultará en la dificultad de administrar las rutas de actualización para el software instalado, o incluso simplemente
tratar de recordar lo que instaló previamente.

Los archivos fuente (que contienen el código fuente) normalmente vienen en un paquete al que comúnmente se hace
, referencia
como fuente tarball y luego se oejecuta
en un archivo
un scripttar.gz
de instalación
(un archivo
para
tarcolocar
comprimido
los archivos
con gzip).
de Se
programa
extrae el
resultantes
archivo, se
y la
compila
documentación en los directorios apropiados. A continuación se muestra una vista muy abreviada de una compilación fuente
rápida. El curso normal de los comandos utilizados es (generalmente):

tar xzvf nombre del paquete.tar.gz


cd nombre del paquete ./configure
make

hacer instalar

Primero extraemos el paquete y cambiamos al directorio resultante. El ./configure establece las variables de entorno y habilita
11 o make
disponibles. El comando deshabilita
compilalas el
características
programa, utilizando
del programa
los parámetros
según el comando
proporcionados
,ÿ en las
porbibliotecas
los resultados
y argumentos
del comando ./
configure anterior. Finalmente, el comando make ,ÿ install mueve los ejecutables compilados, las bibliotecas y la
documentación a sus respectivos directorios en la computadora. Tenga en cuenta que make install generalmente no tiene en
cuenta la distribución, por lo que la ubicación resultante de los archivos de programa podría no ajustarse a las convenciones
para una distribución de Linux determinada, a menos que se pasen las variables adecuadas durante la configuración.

Aquí hay una ilustración rápida:

Una vez que tenemos un paquete descargado, extraemos el tarball. Después de extraer el paquete, cambiamos al directorio
resultante y luego ejecutamos un script de configuración para permitir que el programa determine la configuración de nuestro
sistema y prepare las opciones del compilador para nuestro entorno. Hacemos esto con ./configure

root@forensicbox:~# tar xzvf paquete.tar.gz


...
root@forensicbox:~# paquete de CD

root@forensicbox:~# ./ configure
...
comprobando el tipo de sistema de compilación... i686-pc-
linux-gnu comprobando el tipo de sistema host... i686-pc-
linux-gnu configurar: proyecto de compilación automática... paquete
...

Suponiendo que no haya errores, escribimos make y vemos cómo el compilador se pone a trabajar. Finalmente, ejecutamos el

11El ./ indica que el comando de configuración se ejecuta desde el directorio actual

94
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

comando que instala correctamente tanto las herramientas en la ruta adecuada como las bibliotecas
necesarias en los directorios adecuados. Esto generalmente se logra con make install

root@forensicbox:~# hacer
Haciendo todo en lib
make[1]: Ingresando al directorio '/root/package/lib'
...

root@forensicbox:~# hacer la instalación


Haciendo la instalación
en lib make[1]: Ingresando al directorio '/root/
package' make install-am
make[2]: Entrar en el directorio
...

Nuestro programa ya está instalado y listo para usar. Saber cómo usar los paquetes fuente para la instalación
del software es una parte importante para comprender cómo funciona Linux... solo tenga en cuenta que
generalmente es una mejor idea usar paquetes de distribución (o crear los suyos propios). Tenga en cuenta
que el ejemplo que se muestra arriba es para paquetes fuente creados con autoconf/automake. También
puede encontrarse con software basado en Python o Perl, etc. Estos serán diferentes en la forma en que se
construyen e instalan. La mayoría de los paquetes fuente incluirán un archivo README o INSTALL.txt
cuando se extraigan. Léelos.

7.3.2 Uso de paquetes de distribución

Como ya mencionamos, casi todas las distribuciones de Linux tienen algún tipo de administrador de paquetes
para instalar y actualizar paquetes. Para actualizar y agregar software oficial de Slackware (incluido en la
distribución), presentamos el uso de slackpkg. slackpgk es en realidad una interfaz para el grupo de
utilidades pkgtool que manejan el trabajo de agregar y eliminar paquetes de software de su sistema. Para
obtener una excelente descripción general de pkgtool y sus diversos comandos, consulte http://
www.slackware.com/config/packages.php.

Los paquetes de Slackware son en realidad archivos comprimidos que, cuando se instalan, colocan los
archivos del paquete en el lugar adecuado. Para instalar un paquete de Slackware, cuando no estamos
usando el front-end de slackpkg , usamos el comando pkgtool installpkg.

Nuestro ejemplo aquí será un paquete simulado de Slackware llamado software. Los paquetes de Slackware
generalmente se nombran con la extensión tgz o txz (ya que en realidad son solo archivos comprimidos).
Una vez que haya descargado o preparado su paquete (nuestro ejemplo se llama software ,ÿ .tgz), lo instala
con el siguiente comando:

root@forensicbox:~# installpkg software.tgz


Verificando paquete software.tgz.
Instalación del paquete software.tgz:

95
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

DESCRIPCIÓN DEL PAQUETE:


# software
#
# Aquí es donde encontrará una descripción # del
paquete de software que está instalando
#
#
#
# Página de inicio: http://www.software.homepage.com
#
Ejecutando script de instalación para software.tgz.
Paquete software.tgz instalado.

Los paquetes se pueden eliminar o actualizar de manera similar con removepkg o upgradepkg, respectivamente.

Puede encontrar paquetes prefabricados para todo tipo de software para muchas distribuciones en Internet. El
problema con muchos de ellos es que no provienen de fuentes confiables y, a menudo, no tiene idea de qué
opciones de configuración se usaron para construirlos.

Como regla general, siempre me gusta crear mis propios paquetes para el software que no forma parte de la
instalación completa de Slackware. Esto me permite crear el software con las opciones que necesito (o sin las
que no necesito), optimizado para mi sistema en particular, y además me permite controlar cómo se instalará
finalmente el software. Afortunadamente, Slackware proporciona una forma relativamente fácil de crear paquetes
a partir del código fuente. SlackBuilds.

7.3.3 Creación de paquetes con SlackBuilds

En resumen, un SlackBuild es un script que (normalmente) toma el código fuente, lo compila y lo empaqueta en
un archivo Slackware .tgz (o .tzx) que podemos instalar usando installpkg.

La secuencia de comandos de SlackBuild maneja las opciones de configuración y las optimizaciones que decide
el autor de la secuencia de comandos (pero que usted puede ver y editar), y luego instala el software y los
archivos relacionados en un paquete que sigue las convenciones de software de Slackware para ejecutables y
bibliotecas, cuando corresponda. y asumiendo que el autor de la compilación sigue la plantilla. Los scripts se
pueden editar fácilmente si desea cambiar algunas de las opciones o la versión de destino, y proporcionan una
manera fácil y legible para controlar el proceso de compilación. SlackBuilds para una gran selección de software
está disponible en http://www.SlackBuilds.org.

SlackBuild en sí viene como un archivo .tar.gz que extrae con el comando tar . El directorio resultante contiene
el propio script de compilación. El script se llama software.SlackBuild , siendo software el nombre del programa
,ÿ , para el que estamos creando un paquete. Normalmente hay cuatro archivos incluidos en el paquete de
SlackBuild:

software.info proporciona información sobre dónde obtener el código fuente, la versión de

96
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

el software para el que está escrito el script, el hash del código fuente, las dependencias requeridas y más.

README contiene información útil sobre el paquete, posibles problemas y dependencias opcionales.

software.SlackBuild es el script de compilación real.

slack-desc es una breve descripción del archivo que se muestra durante la instalación.

Para crear un paquete compatible con Slackware, simplemente suelte el código fuente del software en el mismo
directorio en el que se encuentra SlackBuild (no es necesario extraer el tarball de origen) y ejecute el script de
SlackBuild. El paquete se crea y (normalmente) se coloca en el directorio /tmp listo para la instalación a través de
installpkg.

Por supuesto, existen herramientas automatizadas para gestionar la creación de paquetes de Slackware
por usted. Puede consultar sbopkg, sbotools, slpkg y algunos otros.

UNA PALABRA DE PRECAUCIÓN: tenga cuidado de confiar únicamente en herramientas automatizadas para la
gestión de paquetes. Independientemente de la plataforma que elija para ejecutar, le insto a aprender cómo crear
paquetes usted mismo o, al menos, aprender a determinar cómo cambiar las opciones del paquete o determinar qué
opciones de compilación se usaron antes de ejecutar el software. Esto no quiere decir que las herramientas
automatizadas sean malas... pero una de las fortalezas de Linux de la que hablamos a menudo es el control que nos
da sobre nuestro sistema. Controlar el software de su sistema es un aspecto de eso. Puede usar herramientas
automatizadas y aun así mantener el control... solo debe tener cuidado. Usaremos ese enfoque aquí.

Hablaremos específicamente sobre una de las herramientas de paquete que puede usar con Slackware para
automatizar algunos de los pasos más mundanos que tomamos cuando instalamos software. Para ilustrar el proceso
de compilación, instalaremos sbotools a través de un proceso manual de SlackBuild y luego usaremos sbotools para
ayudarnos a compilar e instalar el resto del software que usaremos en esta guía.

Primero, tomaremos SlackBuild de https://www.SlackBuilds.org. Puede ir a la búsqueda del sitio web y buscar los
paquetes allí, pero como sabemos el paquete que queremos, use la herramienta wget para descargarlo directamente.
En el siguiente conjunto de comandos lograremos lo siguiente:

descargue el tarball de SlackBuild para sbotools con wget

extraer el contenido del tarball con el comando tar

cambie (cd) al directorio sbotools resultante y enumere los archivos (ls)

97
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# wget https://www.SlackBuilds.org/SlackBuilds/14.2/system/


sbotools.tar.gz

--2019-06-20 16:58:35-- https://www.slackbuilds.org/slackbuilds/ 14.2/system/sbotools.tar.gz


Resolviendo www.slackbuilds.org (www.slackbuilds.org).. 208.94.237.149 Conexión a
www.slackbuilds.org (www.slackbuilds.org)|208.94.237.149| :443... conectado.

Solicitud HTTP enviada, esperando respuesta... 200 OK Longitud:


2038 (2.0K) [aplicación/x-gzip]
Guardando en: 'sbotools.tar.gz'

sbotools.tar.gz 100%[======================>] 1.99K --.-KB/s en 0s

2019-06-20 16:58:36 (90,5 MB/s) - 'sbotools.tar.gz' guardado [2038/2038]

root@forensicbox:~# ls
sbotools.tar.gz

root@forensicbox:~# tar xzvf sbotools.tar.gz sbotools/ sbotools/


sbotools.info sbotools/slack-desc sbotools/README

sbotools/sbotools.SlackBuild

root@forensicbox:~# cd sbotools
...

root@forensicbox:~# ls README
sbotools.SlackBuild* sbotools.info slack-desc

Entonces, lo que hemos hecho hasta este punto es simplemente descargar y extraer el paquete SlackBuild.
Ahora necesitamos obtener el paquete fuente de sbotools en el mismo directorio.

El archivo sbotools.info ayudará con esto. Veremos ese archivo y luego usaremos la información que
contiene para descargar el código fuente y verificar el hash MD5. El hash MD5 es un valor que nos permite
saber que el archivo que descargamos es lo que esperamos. Usando wget y la URL proporcionada en el
campo DESCARGAR , el código fuente de sbotools terminará en el mismo directorio.

root@forensicbox:~# gato sbotools.info


PRGNAM="sbotools"
VERSIÓN="2.7"

PÁGINA DE INICIO="https://pink-mist.github.io/sbotools/"
DESCARGAR="https://pink-mist.github.io/sbotools/downloads/

98
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

sbotools-2.7.tar.gz"
MD5SUM="ddf4b174fa29839564d7e784ff142581"
DESCARGAR_x86_64=""
MD5SUM_x86_64=""
REQUIERE=""
MANTENEDOR="Andreas Guldstrand"
CORREO ELECTRÓNICO="andreas.guldstrand@gmail.com"

root@forensicbox:~# wget https://pink-mist.github.io/sbotools/downloads/ sbotools-2.7.tar.gz

--2019-06-21 08:10:10-- https://pink-mist.github.io/sbotools/downloads/sbotools-2.7.tar.gz

Resolviendo pink-mist.github.io... 185.199.108.153, 185.199.111.153, 185.199.110.153, ...

Conectando a pink-mist.github.io|185.199.108.153|:443... conectado.


Solicitud HTTP enviada, esperando respuesta... 200 OK Longitud:
45833 (45K) [aplicación/gzip]
Guardando en: 'sbotools-2.7.tar.gz'

sbotools-2.7.tar 100%[=========>] 44.76K --.-KB/s en 0.1s

2019-06-21 08:10:10 (384 KB/s) - 'sbotools-2.7.tar.gz' guardado [45833/45833]

root@forensicbox:~# ls README
sbotools-2.7.tar.gz sbotools.SlackBuild* sbotools.info slack-desc

root@forensicbox:~# md5sum sbotools-2.7.tar.gz


ddf4b174fa29839564d7e784ff142581 sbotools-2.7.tar.gz

La salida de nuestro comando md5sum en la fuente descargada coincide con el campo MD5SUM en el
archivo sbotools.info , por lo que sabemos que nuestra descarga es buena.

Aquí es donde, si aún no lo hemos hecho, necesitamos leer el archivo README (usando cat ,ÿ o menos)...
comprender las advertencias y las posibles dependencias opcionales... y luego compilar nuestro código
fuente y crear nuestro Slackware. Paquete .tgz . Los últimos dos pasos se logran simplemente llamando al
propio archivo SlackBuild con ./sbotools.Slackbuild:

root@forensicbox:~# ./ sbotools.SlackBuild sbotools-2.7/


sbotools-2.7/sboclean sbotools-2.7/man5/ sbotools-2.7/
man5/sbotools.conf.5

...
Comprobando si tu kit está completo...
Se ve bien

99
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Generando un Makefile estilo Unix


...
Creación del paquete Slackware: /tmp/sbotools-2.7-noarch-1_SBo.tgz

./
usr/
usr/compartir/
...
Paquete Slackware /tmp/sbotools-2.7-noarch-1_SBo.tgz creado.

Y mirando la última línea de la salida, vemos que tenemos un paquete .tgz Slackware utilizable creado
para nosotros en /tmp. Todo lo que tenemos que hacer ahora es instalar el paquete con installpkg de
pkgtools:

root@forensicbox:~# installpkg sbotools-2.7-noarch-1_SBo.tgz Verificando el paquete


sbotools-2.7-noarch-1_SBo.tgz.
Instalación del paquete sbotools-2.7-noarch-1_SBo.tgz: DESCRIPCIÓN
DEL PAQUETE:
# sbotools (interfaz similar a puertos para slackbuilds.org) #

# sbotools es un conjunto de secuencias de comandos perl que proporciona una #


interfaz de automatización similar a puertos para slackbuilds.org. Sus características
incluyen el manejo de requisitos # y la capacidad de manejar compilaciones de 32
bits y compat32 en sistemas # multilib x86_64.
#
# https://pink-mist.github.io/sbotools/
#
Paquete sbotools-2.7-noarch-1_SBo.tgz instalado.

7.3.4 Uso de la herramienta de paquetes automatizados sbotools

Entonces, ahora hemos instalado sbotools, y lo usaremos en lugar de todas las descargas,
comprobaciones MD5, extracción y compilación. Es extremadamente importante que seamos conscientes
de los archivos README y nos aseguremos de no permitir que la automatización nos vuelva
complacientes. Lea la documentación de cada paquete que esté instalando y familiarícese con lo que le
está haciendo a su sistema junto con las opciones que desee habilitar o deshabilitar.

sbotools es en realidad una colección de utilidades. La primera vez que llamamos a sbotools,
necesitamos inicializar el repositorio de SlackBuild. De forma predeterminada, sbotools (a través de
sbosnap) extraerá todo el árbol de SlackBuilds (de SlackBuilds.org y colóquelo en /usr/sbo/repo.

root@forensicbox:~# sbosnap fetch Extrayendo


el árbol de SlackBuilds... 102,492,492 100%
1,30 MB/s 0:01:15 (xfr#53203, a-chk=0/61135)

100
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

...

root@forensicbox:~# ls -l /usr/sbo/repo
totales 10792
-rw-r--r-- 1 raíz raíz 3591376 14 de junio 22:00 CHECKSUMS.md5
-rw-r--r-- 1 raíz raíz 195 14 de junio 22:03 CHECKSUMS.md5.asc
-rw-r--r-- 1 raíz raíz 1176734 14 de junio 21:27 ChangeLog.txt
-rw-r--r-- 1 raíz raíz 329 14 de junio de 2018 LÉAME

-rw-r--r-- 1 raíz raíz 4021715 14 de junio 21:59 SLACKBUILDS.TXT


-rw-r--r-- 1 raíz raíz 810115 14 de junio 21:59 SLACKBUILDS.TXT.gz
-rw-r--r-- 1 raíz raíz 358076 14 de junio 21:47 TAGS.txt
-rw-r--r-- 1 raíz raíz 131691 14 de junio 21:47 TAGS.txt.gz
drwxr-xr-x 296 raíz raíz 36864 8 de junio 18:40 académico/
drwxr-xr-x 20 raíz raíz 4096 22 de febrero 20:34 accesibilidad/

Una vez hecho esto, puede buscar, instalar y actualizar paquetes y sus dependencias iniciales.
todo desde comandos individuales usando lo siguiente:

encontrar : busque paquetes basados en nombres y palabras clave


sbocheck : actualice el repositorio e identifique los paquetes que necesitan actualización
sboinstall : instala un paquete (y sus dependencias)
sboupgrade : actualiza un paquete ya instalado

Usaremos sbotools para instalar software en el resto de este documento (si


está utilizando Slackware). Pero comencemos con un ejemplo rápido de una instalación simple para
algún software de detección de antivirus/malware que veremos más adelante.

Tengo una instalación limpia de Slackware con un único paquete de software externo, sbotools, instalado.
Ahora quiero instalar más software.

Para ilustrar una instalación más automatizada, pero que aún requiere la intervención del usuario, vamos a
instale ClamAV (clamav), un escáner de virus/malware. Primero usamos sbofind para buscar clamav
,ÿ . Luego restringimos nuestra búsqueda y echamos un vistazo rápido al archivo README . Entonces nosotros simplemente
ejecute sboinstall para descargar, verificar, compilar e instalar el paquete por nosotros. El atajo a
todo esto es simplemente digitar sboinstall clamav y listo. Pero prefiero una más cautelosa
Acercarse.

Primero, busquemos los paquetes disponibles que coincidan con clamav:

root@forensicbox:~# sbofind clamav


SBo: thunar-sendto-clamtk 0.06

Ruta: /usr/sbo/repo/desktop/thunar-sendto-clamtk

SBo: clamav-no-oficial-sigs 5.6.2


Ruta: /usr/sbo/repo/network/clamav-unofficial-sigs

101
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

SBo: clamav 0.101.2


Ruta: /usr/sbo/repo/system/clamav

SBo: clamsmtp 1.10


Ruta: /usr/sbo/repo/system/clamsmtp

SBo: Clamtk 5.26


Ruta: /usr/sbo/repo/system/clamtk

SBo: squidclamav 6.16


Ruta: /usr/sbo/repo/system/squidclamav

El paquete clamav es el tercero hacia abajo. Ahora voy a ejecutar sbofind nuevamente, pero esta
vez limitaré la salida a una coincidencia exacta para clamav (-e) sin etiquetas (-t) y veré el archivo
README para el paquete (-r).

root@forensicbox:~# sbofind -t -e -r clamav SBo: clamav


0.101.2
Ruta: /usr/sbo/repo/system/clamav
LÉAME:

Clam AntiVirus es un kit de herramientas antivirus GPL para UNIX. El objetivo principal de este
software es la integración con servidores de correo (escaneo de archivos adjuntos). El paquete
proporciona un demonio de subprocesos múltiples flexible y escalable, un escáner de línea de
comandos y una herramienta para la actualización automática a través de Internet.

Este script de compilación debería generar un paquete que "simplemente funcione" después de la instalación.
Deberá especificar un código de país de dos letras (como "nosotros") como argumento para la
variable COUNTRY cuando ejecute el script de compilación (esto será "nosotros" de manera
predeterminada si no se especifica nada). Por ejemplo:
PAÍS=nl ./clamav.SlackBuild

Nombre de grupo y nombre de usuario

Debe tener el grupo y el usuario 'clamav' para ejecutar este script, por ejemplo:

groupadd -g 210 clamav


useradd -u 210 -d /dev/null -s /bin/false -g clamav clamav

Configuración

Consulte README.SLACKWARE para obtener ayuda sobre la configuración.

102
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Y lo que tenemos aquí es un ejemplo perfecto de por qué leemos los archivos README antes de instalar el software.
Para que funcione correctamente, debemos asegurarnos de tener un grupo y un usuario llamado clamav. Los comandos
que necesitamos para lograr esto se proporcionan directamente en el LÉAME.
Entonces los ejecutamos y luego estamos listos para instalar el software. Incluso puede permitir que sbotools ejecute
los comandos por usted, pero le sugiero que los ejecute usted mismo y rechace el aviso en el comando sboinstall .
clamav también tiene un archivo README.Slackware secundario con instrucciones adicionales para ejecutar el
programa como un escáner de correo. También puede elegir leer eso, si lo desea, aunque no lo configuraremos en este
ejemplo.

root@forensicbox:~# groupadd -g 210 clamav

root@forensicbox:~# useradd -u 210 -d /dev/null -s /bin/false -g clamav clamav

root@forensicbox:~# sboinstall clamav

Ahora sbotools descargará, comprobará, desempaquetará, con gurará, construirá y finalmente instalará el paquete por
nosotros. Continuaremos usando este método para instalar el software durante el resto de esta guía.
Cubriremos el uso de ClamAV más adelante en este documento.

Recuerda que periódicamente podemos usar sbocheck para ver si tenemos algún software externo que necesite
actualizarse (recuerda que slackpkg update se usa para paquetes o ciales de Slackware).

También instalaremos otro paquete del que hablamos anteriormente. Cuando hicimos nuestro inventario inicial del
sistema, describimos el comando lshw . Podemos instalarlo fácilmente desde SlackBuilds.org utilizando sboinstall.

Primero, asegurémonos de que podemos encontrar lshw y luego leer el archivo README :

root@forensicbox:~# sbofind lshw salida

SBo: lshw B.02.18


Ruta: /usr/sbo/repo/system/lshw

root@forensicbox:~# sbofind lshw -r


SBo: lshw B.02.18
Ruta: /usr/sbo/repo/system/lshw
LÉAME:

lshw (Hardware Lister) es una pequeña herramienta para proporcionar información detallada
sobre la configuración de hardware de la máquina. Puede informar la configuración exacta
de la memoria, la versión del firmware, la configuración de la placa base, la versión y la
velocidad de la CPU, la configuración de la memoria caché, la velocidad del bus, etc. en
sistemas x86 o EFI (IA-64) compatibles con DMI y en algunas máquinas PowerPC (se sabe que PowerMac G4 traba

La información se puede generar en texto sin formato, XML o HTML.

Actualmente es compatible con DMI (solo x86 y EFI), árbol de dispositivos OpenFirmware

103
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

(solo PowerPC), PCI/AGP, ISA PnP (x86), CPUID (x86), IDE/ATA/ATAPI, PCMCIA (solo probado en x86),
USB y SCSI.

En x86, lshw debe ejecutarse como root para poder acceder a la información DMI desde el BIOS.
Ejecutar lshw como un usuario no root generalmente brinda información mucho menos detallada.

Cuando realmente ejecutamos el comando sboinstall , el LÉAME se muestra de forma predeterminada de


todos modos, pero lo mostramos arriba para mayor claridad. Prefiero leer el LÉAME antes del comando de
instalación para saber qué esperar y para qué advertencias debo prepararme. Y ahora simplemente instalamos
la compilación:

root@forensicbox:~# sboinstall lshw

¿Continuar con lshw? [y]

Cola de instalación: lshw

¿Seguro que desea continuar? [y]

Ejecutando el script de instalación para lshw-B.02.18-x86_64-1_SBo.tgz.


Paquete lshw-B.02.18-x86_64-1_SBo.tgz instalado.

Limpieza para lshw-B.02.18...

Una nota final sobre la gestión de paquetes. Se mantiene una lista completa de los paquetes instalados en su
sistema en /var/log/packages. Puede explorar ese directorio para ver lo que ha instalado, así como ver los
archivos para ver lo que se instaló con el paquete.
Una cosa buena de usar SlackBuilds es que se agrega una etiqueta SBo al nombre del paquete. Podemos
buscar esta etiqueta en /var/log/packages y ver exactamente qué paquetes externos hemos instalado a través
de SlackBuilds . Esta es una de las grandes ventajas de usar un administrador de paquetes frente a simplemente
compilar e instalar software directamente desde la fuente... la capacidad de rastrear qué versiones de qué
paquetes están instalados.

Acabamos de instalar tres paquetes utilizando scripts de compilación de SlackBuilds.org. Uno mediante
descarga manual (sbotools) y dos mediante sbotools (clamav y lshw). Podemos usar grep para ver esto
dentro del directorio /var/log/packages (asumiendo que este es un sistema Slackware limpio y que no ha
instalado otros paquetes .tgz o .txz Slackware):

root@forensicbox:~# ls /var/log/packages/ | grep SBo clamav-0.101.2-


x86_64-1_SBo
lshw-B.02.18-x86_64-1_SBo
sbotools-2.7-noarch-1_SBo

104
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Cuando llegue el momento de actualizar (o buscar actualizaciones) del software que hemos instalado a través
de Slack Builds y sbotools, puede usar sbocheck. Ejecutar este comando obtendrá un nuevo árbol de Slack
Builds de SlackBuilds.org y compare sus paquetes instalados con los actuales
disponible.

raíz@forensicbox:~# sbocheck
Actualizando el árbol de SlackBuilds...
10,564,128 10% 906.15kB/s 0:00:11 (xfr#280, a-chk=0/61163)
Buscando actualizaciones de SlackBuilds...

No hay actualizaciones disponibles.

En este caso, ejecutamos sbocheck y no hay actualizaciones. Si se incluyera una actualización en la salida,
simplemente ejecutaríamos sboupgrade <nombre del paquete> y la actualización se descargaría,
compilado y actualizado correctamente. Esto nos proporciona una manera fácil de instalar y actualizar
paquetes externos, en un formato compatible con Slackware, con un mínimo de complicaciones.

La advertencia anterior sigue en pie. Asegúrese de entender lo que está instalando y


siempre lea siempre el archivo README .

105
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8 Linux y análisis forense

Aquí comenzamos nuestro estudio de las herramientas reales y algunos de los procesos asociados que usaremos para análisis
forense. El proceso se simplifica aquí, centrándose en lo básico:

Salida de organización

Adquisición de evidencia basada en disco

Obtención de un hash

Volúmenes crecientes de pruebas adquiridas

Escaneo en busca de malware (limitado a ciertos tipos de evidencia)

Revisión de datos básicos usando la línea de comando

Esto tiene como objetivo presentar herramientas, conceptos y enfoques analíticos para el análisis forense mientras se usa
Linux. Lo mencionamos anteriormente, pero ha habido cambios significativos en el hardware en los últimos dos años que
requerirán una investigación adicional por parte del lector.

Al igual que con la mayor parte de esta guía, nos concentraremos en el uso de herramientas de línea de comandos para los
pasos anteriores. Estos son los conceptos básicos y no deben considerarse como una plantilla para los exámenes de la vida
real. Este es un enfoque de 'caminar antes de correr'.

8.1 Adquisición de pruebas

En esta sección, analizaremos algunas de las herramientas de adquisición que están disponibles para nosotros. Cubriremos
algunos de los problemas de recopilación, información del dispositivo, verificación de imágenes y opciones de montaje más
avanzadas. Obviamente, lo primero que debemos hacer es asegurarnos de tener un lugar adecuado para generar los resultados
de nuestras imágenes y análisis.

A medida que avanzamos en las siguientes secciones, intente utilizar un disco duro antiguo (más pequeño) para seguir las
instrucciones. Encuentre una unidad SATA antigua (la que estoy usando es de 40 GB) y conéctela a su computadora, ya sea
directamente al bus SATA o a través de un puente USB (preferiblemente 3.x). De esa manera, puede seguir los comandos y
comparar la salida con lo que tenemos aquí (que variará dependiendo de su hardware). Incluso puede utilizar una unidad de
memoria USB, pero la salida de algunas de las secciones de recopilación de información multimedia no proporcionará una
salida comparable. La mejor manera de aprender este material es realmente hacerlo y experimentar con las opciones.

106
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.2 Organización del análisis

Antes de comenzar a recopilar imágenes de evidencia e información que podría ser útil en un tribunal o una audiencia administrativa,
es posible que deseemos asegurarnos de almacenar todos estos datos de manera organizada. Obviamente, esto no es algo
específico de Linux, pero debemos asegurarnos de tener varias ubicaciones del sistema de archivos listas para almacenar y
recuperar datos:

1. Directorios o volúmenes especí cos de casos utilizados para almacenar imágenes forenses para un caso determinado.

2. Directorios especí cos de casos para almacenar la salida del software forense y la información de los medios del tema
mación

3. Directorios especí cos que se usarán como puntos de montaje para imágenes de evidencia.

4. Un registro de nuestras acciones. La documentación y la toma de notas son una parte imprescindible de
forense adecuado.

Donde sea que almacene los datos de su caso, querrá mantenerlos organizados. En la mayoría de los casos, al realizar un análisis,
querrá asegurarse de que está utilizando copias de trabajo en lugar de los archivos de imagen reales. Esto debería ser una práctica
común. Los profesionales a menudo recolectarán imágenes u otros datos directamente como evidencia. Luego se harán copias de
esa evidencia, y los originales se colocarán en algún tipo de almacenamiento controlado. Luego se hacen copias adicionales
(quizás varias copias adicionales) como copias de trabajo. Discutiremos la creación simple de directorios para almacenar estos
archivos a medida que avanzamos en las próximas páginas. El siguiente es solo un ejemplo de cómo puede organizar los distintos
directorios en los que está almacenando datos. Obviamente, no se escribirá nada en el disco sujeto (el disco que estamos
analizando). Luego, en la siguiente sección, describiremos cómo identificar los discos correctos para que no confunda el disco en
cuestión con el disco o volumen que usará para escribir sus imágenes.

NOTA: Todos estos pasos de preparación deben realizarse antes de conectar un disco en cuestión a su estación de trabajo para
minimizar las posibilidades de escribir en la unidad incorrecta. La configuración adecuada del laboratorio (estaciones de trabajo de
imágenes dedicadas o almacenamiento de imágenes, etc.) está fuera del alcance de este documento. Para simplificar e ilustrar,
supondremos que tiene una sola estación de trabajo y recopilará una imagen de una unidad (sujeto) y guardará los archivos de
imagen en un volumen montado o en un directorio local.

También es posible que desee preparar su unidad de pruebas borrando y verificando. También lo cubriremos más adelante una
vez que hayamos tenido una mejor introducción a las herramientas de imágenes.

En la unidad de pruebas (donde se almacenarán las imágenes de las pruebas), es posible que desee crear un directorio de nivel
superior con un número de caso u otro identificador único para las imágenes. Dependiendo de la herramienta que utilice para
adquirir, se puede colocar un registro de adquisición en este directorio (o ubicación especificada). Los únicos otros archivos que
normalmente se pueden guardar con las imágenes de evidencia originales serían el registro de adquisición (más sobre eso más
adelante) y quizás los archivos de información de medios.

107
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

(más sobre eso más adelante también). Preste atención a las indicaciones de los siguientes ejemplos para
asegúrese de tener permisos de root cuando sea necesario (como al escribir en el directorio /mnt ).
Algunas distribuciones le pedirán que use sudo en lugar de iniciar sesión como root. En esos casos, simplemente
preceda cada comando con sudo.

Primero, para asegurarse de que tiene suficiente espacio en su almacenamiento de destino, puede ejecutar el
Comando df-h . Este comando de disco libre le mostrará el espacio libre en cada uno de sus
puntos de montaje Por ejemplo, si tiene una partición de pruebas de 1 TB en un disco externo,
con rmar que sea detectado e identi cado correctamente. Luego móntelo en su directorio de evidencia
y luego verifique el espacio libre:

root@forensicbox:~# lsscsi
...
[0:0:0:0] disco ATA INTEL SSDSC2CT12 300i /dev/sda
[2:0:0:0] disco ATA Hitachi HDS72302 A5C0 /dev/sdb
[3:0:0:0] cd/dvd HL-DT-ST DVDRAM GH24NS90 IN01 /dev/sr0
[8:0:0:0] disco Seagate BUP Slim BK 0304 /dev/sdc
...

root@forensicbox:~# mkdir /mnt/evidencia

root@cajaforense:~# lsblk | grep sdc


sdc 8:32 0 1.8T 0 disco
sdc1 8:33 0 1T 0 parte
sdc2 8:34 0 839G 0 parte

root@forensicbox:~# montar /dev/sdc1 /mnt/evidencia

root@forensicbox:~# df -h /mnt/evidencia
Sistema de Tamaño utilizado % de uso disponible Montado en
archivos /dev/sdc1 1008G 375G 582G 40% /mnt/evidencia

A partir de este resultado, puedo ver que el sistema de archivos montado en /mnt/evidence tiene 582 GB de espacio libre
espacio. El comando df se usa con -h para dar una salida legible por humanos, y el montaje
El punto se pasa como argumento para limitar la salida. Si se da sin argumentos, df -h será
muestra el espacio libre en todos los sistemas de archivos montados.

Para ilustrar, en los siguientes ejemplos, escribiremos nuestra salida en un directorio de casos en

/mnt/evidencia. En el siguiente comando, estamos creando el directorio case1 en /mnt/evidence

root@forensicbox:~# mkdir /mnt/evidencia/caso1

root@forensicbox:~# ls /mnt/evidencia
caso 1/

108
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una vez que haya preparado la unidad de pruebas y el directorio de destino, puede conectar el disco en cuestión.
Tenga en cuenta nuestra discusión anterior sobre el bloqueo de escritura. Siempre es una buena idea usar un
bloqueador de escritura o asegurarse de estar absolutamente seguro de que no está escribiendo en su evidencia.
Existe una idea errónea en la comunidad ahora sobre lo que constituye un "bloqueador de escritura" efectivo. En el
caso de los medios de almacenamiento modernos, el bloqueo de escritura físico podría no ser posible en el sentido del
contexto normalmente aceptable. Los medios de estado sólido modernos no funcionan físicamente igual que los discos
giratorios a los que están acostumbrados muchos examinadores. Más sobre esto en la siguiente sección.

Una instalación predeterminada de Slackware (utilizando el escritorio XFCE, al menos) no intentará montar
automáticamente los dispositivos conectados. Pero debe probar a fondo su sistema antes de confiar en este (o cualquier
otro sistema operativo).

8.3 Bloqueo de escritura

Vamos a discutir esto con más detalle. Cuando hablamos de "bloqueo de escritura", en la mayoría de los casos nos
referimos a "prevenir escrituras no deseadas en los medios". Lo que no podemos controlar (directamente) son las
escrituras en los medios por parte de los controladores integrados. En esta guía, nos referimos al bloqueo de escritura
como "evitar que los usuarios realicen cambios en los medios adjuntos a través de las acciones del usuario". Las
discusiones sobre "nivelación de desgaste" y "operaciones de recorte" están fuera del alcance de nuestra discusión.

En el pasado, se habló mucho sobre la capacidad de montar volúmenes como de solo lectura en Linux. Nunca se debe
confiar en esto más que para proporcionar el mínimo de cambios accidentales a una copia de trabajo, o cuando no
existen otras opciones (y siempre documentar esas instancias). Esta guía trata sobre el uso de herramientas, por lo
que, si bien cubrir las políticas de adquisición no es nuestro propósito, vale la pena mencionar que la protección contra
escritura es algo que siempre debe tenerse en cuenta. Los entornos informáticos modernos son extremadamente
complejos y, a menos que haya probado todas las funciones en todas las configuraciones posibles, no hay forma de
estar completamente seguro de que algún mecanismo subyacente del núcleo no está realizando escrituras desconocidas
o inesperadas en unidades de pruebas mal protegidas a través de alguna interfaz no probada previamente o otro
mecanismo.

El bloqueo de escritura puede ser tan simple como el interruptor físico en un medio extraíble, o tan exótico (y costoso)
como los bloqueadores de escritura forenses especialmente diseñados. También hay métodos disponibles para el
bloqueo de escritura de software (varios parches del kernel y otras secuencias de comandos) que le permitirán
configurar los dispositivos como de solo lectura, como con blockdev, pero nuevamente, su kilometraje puede variar en esas técnicas.
Muchas configuraciones de hardware a nivel de kernel tienen lugar después de que el kernel ya haya tenido acceso a
los medios de destino. Los cambios especí cos a las funciones del sistema operativo y las llamadas al sistema para
intentar evitar dicho acceso están fuera del alcance de este documento.

109
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.4 Examen de la información de los medios físicos

Volviendo a nuestra adquisición: con el disco en cuestión conectado, es hora de utilizarlo para recopilar información
sobre la unidad, sus capacidades y su identificación específica: información que necesitaremos para adquirir evidencia
de manera efectiva de los medios de origen. Una de las primeras cosas que debemos hacer es volver a inventariar los
dispositivos conectados de nuestro sistema para asegurarnos de identificar el disco en cuestión correcto. Normalmente
habría tomado notas sobre las marcas físicas del disco duro (u otros medios) a medida que lo extrajo de la computadora
en cuestión, etc. Algunos sugieren una fotocopia ampliada de la etiqueta del disco como parte de las notas de adquisición,
proporcionando un registro confiable. de identificación del disco.

Figura 7: Detalles de hardware en una etiqueta de unidad

Para este ejercicio usaré un puente USB a SATA. Debido a que aquí se está realizando una traducción, quiero
asegurarme de que puedo identificar el puente y el disco adjunto. Entonces, una vez que el puente está conectado y
encendido, puedo ejecutar lsusb para ver su información (negrita para enfatizar). Si está utilizando una unidad SATA
conectada directamente, no necesitará ejecutar este comando (esto es solo para ver el puente USB):

raíz@cajaforense:~# lsusb
...
Bus 006 Dispositivo 001: ID 1d6b:0002 Concentrador raíz de Linux Foundation 2.0

Bus 004 Dispositivo 005: ID 0bc2:ab24 Unidad portátil Seagate RSS LLC Backup Plus Bus 003
Dispositivo 003: ID 174c:5106 ASMedia Technology Inc.ASM1051 SATA 3Gb/s puente Bus 001
Dispositivo 001: ID 1d6b:0002 Concentrador raíz Linux Foundation 2.0

110
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

...

Si ejecuta el comando lsusb antes y después de conectar el puente USB, podrá


para identificar fácilmente el dispositivo para sus notas. Entonces, sabiendo que estamos tratando con un Western Digital
Disco duro de 80 GB (WD800HLFS de la etiqueta) en un puente USB/SATA (tecnología ASMedia),
podemos identificar mejor su nodo de dispositivo con lsscsi:

root@forensicbox:~# lsscsi
[0:0:0:0] disco [2:0:0:0] ATA INTEL SSDSC2CT12 300i /dev/sda
[3:0:0:0] [8:0:0:0] disco ATA Hitachi HDS72302 A5C0 /dev/sdb
[9:0:0:0] cd/dvd HL-DT-ST DVDRAM GH24NS90 IN01 /dev/sr0
disco Seagate BUP Slim BK 0304 /dev/sdc
disco ASMT 2105 0 /dev/sdd

Ahora podemos consultar el disco adjunto al host usando hdparm. En este caso, el puente USB
admite la traducción SATA, por lo que los comandos pasan a través del puente a la unidad. Este
La herramienta puede proporcionar tanto información detallada como potentes comandos para establecer opciones en
un disco Algunas de estas opciones son útiles para los examinadores forenses.

Primero, sin embargo, estamos buscando información. Para eso podemos usar el simple hdparm
comando con la opción -I en nuestro disco sujeto, /dev/sdb. Esto da información detallada
sobre el disco que podemos redirigir a un archivo para nuestros registros.

root@forensicbox:~# hdparm -I /dev/sdd

/dev/sdd:

Dispositivo ATA, con medios no extraíbles


Número de modelo: WDC WD800HLFS-75G6U1
Número de serie: WD-WXD0CB928540
Revisión de firmware: 04.04V03
Transporte: Serie, SATA 1.0a, Extensiones SATA II, SATA Rev 2.5
Normas:
Compatible: 8 7 6 5
Probablemente usado: 8
Configuración:
Cilindros corriente maxima
lógicos 16383 16383
cabezas 16 16
sectores/pista 63 63
--
Sectores direccionables actuales de CHS: 16514064
LBA sectores direccionables de usuario: 156250000
Sectores direccionables de usuario LBA48: 156250000
Tamaño del sector lógico/físico: 512 bytes

111
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

tamaño del dispositivo con M = 1024*1024: 76293 MB


tamaño del dispositivo con M = 1000*1000: 80000 MB (80 GB)
tamaño de caché/búfer = 16384 KBytes
Tasa de rotación de medios nominal: 10000
Capacidades:
LBA, IORDY (se puede desactivar)
Profundidad de cola: 32
Valores del temporizador de espera: especificados por estándar, con un mínimo específico del dispositivo
R/W transferencia de múltiples sectores: Máx. = 16 Actual = 0
Valor de gestión acústica recomendado: 128, valor actual: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Tiempo de ciclo: min=120ns recomendado=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Tiempo de ciclo: sin control de flujo = 120 ns Control de flujo IORDY = 120 ns
Comandos/características:
Habilitado Compatible:
* Conjunto de características INTELIGENTES

Conjunto de características del modo de seguridad


* Conjunto de funciones de administración de energía
* Caché de escritura
* Mirar hacia el futuro

* Conjunto de características del área protegida del host


* Comando ESCRIBIR_BUFFER
* Comando LEER_BUFFER
* Comando NOP

* DESCARGAR_MICROCÓDIGO

Extensión de seguridad SET_MAX


* Conjunto de funciones de gestión acústica automática
* Conjunto de funciones de dirección de 48 bits
* Conjunto de funciones de superposición de configuración de dispositivos
* Obligatorio FLUSH_CACHE
* FLUSH_CACHE_EXT
* Registro de errores SMART
* Autodiagnóstico INTELIGENTE

* Conjunto de funciones de registro de propósito general


* ESCRIBIR_{DMA|MÚLTIPLES}_FUA_EXT
* Nombre mundial de 64 bits
* Comando ESCRIBIR_UNCORRECTABLE_EXT
* Comandos {LEER, ESCRIBIR}_DMA_EXT_GPL
* DOWNLOAD_MICROCODE segmentado
* Velocidad de señalización Gen1 (1,5 Gb/s)
* Velocidad de señalización Gen2 (3,0 Gb/s)
* Cola de comandos nativos (NCQ)
* Contadores de eventos físicos
Optimización de activación automática de configuración de DMA
* Preservación de la configuración del software
* Conjunto de funciones SMART Command Transport (SCT)

112
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

* SCT de lectura/escritura larga (AC1), obsoleto


* SCT escribe lo mismo (AC2)
* Control de recuperación de errores SCT (AC3)
* Control de funciones SCT (AC4)
* Tablas de datos SCT (AC5)
desconocido 206[12] (específico del proveedor)
desconocido 206[13] (específico del proveedor)
Seguridad:
Código de revisión de contraseña maestra = 65534
compatible no habilitado

No está bloqueado

no congelado

no caducado: cuenta de seguridad


compatible: borrado mejorado
14min para UNIDAD DE BORRADO DE SEGURIDAD. 14 min para UNIDAD DE BORRADO DE SEGURIDAD MEJORADA.

Identificador de dispositivo WWN de unidad lógica: 50014ee001ffdba8: 5


NAA
IEEE OUI : 0014ee
Identificación única : 001ffdba8
Suma de comprobación: correcta

Hay mucha información presentada por hdparm para nosotros. Al comparar las primeras líneas (en negrita
para enfatizar) con la fotografía de la etiqueta del disco que se muestra anteriormente, nuevamente
confirmamos que estamos recopilando información del disco correcto. Este comando se puede redirigir a un
archivo y guardarlo en nuestra carpeta de casos:

root@forensicbox:~# cd /mnt/evidencia/caso1

root@forensicbox:caso1:~# pwd /mnt/


evidencia/caso1

root@forensicbox:caso1:~# hdparm -I /dev/sdd > caso1.disk1.hdparm.txt

root@forensicbox:caso1:~# ls
caso1.disk1.hdparm.txt

En el segundo comando anterior, hemos redirigido (>) la salida de hdparm -I /dev/sdd a un archivo en el
directorio case112 . El archivo se llama case1.disk1.hdparm.txt. El último comando enumera el contenido
del directorio case1 . Si tuviéramos varios discos, entonces podríamos tener una salida para disk2, disk3,
etc. El nombre del archivo aquí es arbitrario. Este es solo un ejemplo.

Puede mantener un registro continuo de las cosas que hace utilizando un símbolo de doble redirección (>>)
12 Notará que el símbolo del sistema en mi ejemplo solo muestra el caso 1 (el directorio base) en lugar de la ruta
completa. He ajustado el mensaje para mantener los ejemplos de la línea de comandos más pequeños. Su mensaje
puede mostrar la ruta completa

113
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

para agregar toda la información del caso a un solo registro. Sin embargo, sugeriría no adoptar este enfoque a
medida que aprende. Si usa por error una sola redirección (>) , corre el riesgo de destruir un archivo de registro
completo (recuerde que podemos usar nuestro comando chattr +a discutido anteriormente para evitar esto,
configurando el archivo para agregar solo).

También podemos usar la herramienta hdparm para ayudar a identificar superposiciones de configuración de
disco o áreas protegidas de host (DCO o HPA, respectivamente). Los fabricantes los usan para cambiar la cantidad
de sectores disponibles para el usuario, a veces para hacer que las diferentes unidades coincidan en tamaño para
marketing (DCO) y, a veces, para ocultar cosas como restaurar o particiones de recuperación (HPA). La historia y
las especificidades de estas áreas están bien documentadas en Internet. Si no has oído hablar de ellos, investiga
un poco. Como examinadores forenses, siempre estamos interesados en adquirir el disco completo (o al menos
aquellas áreas a las que nominalmente podemos acceder a través de las herramientas del kernel). Hay áreas aún
más profundas en los discos que no abordaremos aquí si las imágenes solo de las áreas accesibles del kernel son
insuficientes.

hdparm puede decirnos si hay un DCO (y los cambios realmente implementados por el DCO).
Estos también se pueden manipular usando hdparm , pero dejaré esos temas avanzados para su propia
investigación (pista: lea man hdparm).

En este caso vemos que no tenemos HPA:

root@forensicbox:~# hdparm -N /dev/sdd /dev/


sdd:
max sectores = 156250000/156250000, HPA está deshabilitado

La salida de hdparm sería diferente si estuviera presente un HPA (que se muestra aquí en un disco de Seagate):

root@forensicbox:~# hdparm -N /dev/sdf /dev/


sdd:
max sectores = 41943040/78125000, HPA está habilitado

Y la salida de hdparm -I run contra /dev/sdi mostraría solo 41943040 (salida parcial por brevedad):

root@forensicbox:~# hdparm -I /dev/sdf

/dev/sdf:

Dispositivo ATA, con medios no extraíbles


Número de modelo: ST340014AS
Número de serie: Revisión
de firmware 5MQ0QS22: 8.12
...
LBA sectores direccionables de usuario: 41943040

114
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Sectores direccionables de usuario LBA48: 41943040


Tamaño del sector lógico/físico: 512 bytes
...

Lea atentamente la página del manual de hdparm y tenga en cuenta las opciones y condiciones bajo las
cuales se puede detectar y eliminar un DCO o HPA. Por ejemplo, restaurar el número completo de
sectores en /dev/sdf se vería así.

root@forensicbox:~# hdparm N78125000 /dev/sdf /dev/


sdf:
configurando los sectores máximos visibles en 78125000
(temporal) sectores máximos = 78125000/78125000, HPA está deshabilitado

Si se encuentra con un disco con un HPA o DCO, le sugiero, como el curso de acción más seguro, adquirir
una imagen mientras se encuentra el disco. Una vez que se obtiene una imagen del disco, puede pasar
comandos para eliminar áreas protegidas y volver a crear la imagen.

8.5 Hash de medios


Un paso importante en cualquier recopilación de evidencia es verificar la integridad de sus datos antes y
después de que se complete la adquisición. Puede obtener un hash (MD5 o SHA) del dispositivo físico de
varias maneras diferentes.

Hay una serie de algoritmos hash y herramientas que los implementan, que incluyen:

md5sum - suma de comprobación de 128 bits

sha1sum - suma de comprobación de 160 bits

sha224sum - suma de comprobación de 224 bits

sha256sum - suma de comprobación de 256 bits

sha384sum - suma de comprobación de 384 bits

sha512sum - suma de comprobación de 512 bits

En este ejemplo, usaremos el hash SHA1. SHA1 es un generador de firmas hash que proporciona una
huella digital de 160 bits de un archivo o disco (que se representa mediante un nodo de dispositivo similar
a un archivo). No es factible que alguien vuelva a crear computacionalmente un archivo basado en el hash
SHA1. Esto significa que las firmas SHA1 coincidentes significan archivos idénticos. Se ha hablado mucho
en la comunidad forense digital a lo largo de los años sobre pruebas (incluso recientes) de colisiones que
vuelven obsoletos ciertos algoritmos hash. Esta guía trata sobre el aprendizaje de las herramientas. haz tu

115
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

investigue y consulte las pautas de su agencia o comunidad para obtener información adicional sobre qué
algoritmo seleccionar.

Podemos recopilar un hash SHA1 de un disco ejecutando el siguiente comando (los siguientes comandos se
pueden reemplazar con md5sum si prefiere usar el algoritmo hash MD5 o cualquiera de las otras herramientas
de suma de comprobación mencionadas anteriormente):

root@forensicbox:caso1:~# sha1sum /dev/sdd


ddddda4252d1adeffa267636b1ae0fbf40c9d3b3 /dev/sdd

root@forensicbox:caso1:~# sha1sum /dev/sdd > caso1.disco1.sha1.txt

root@forensicbox:case1:~# cat case1.disk1.sha1.txt


ddddda4252d1adeffa267636b1ae0fbf40c9d3b3 /dev/sdd

La redirección en el segundo comando nos permite almacenar la firma en un archivo y usarla para la verificación
más adelante. Para obtener un hash de un disco sin procesar (/dev/sdc, /dev/sdd, etc.), NO es necesario
montar el disco. Estamos procesando el dispositivo (el disco), no el contenido. Como comentamos anteriormente,
Linux trata todos los objetos, incluidos los discos físicos, como archivos. Entonces, ya sea que esté aplicando
hash a un archivo o un disco duro, el comando es el mismo.

8.6 Recopilación de una imagen forense con dd

Ahora que hemos recopilado información sobre nuestro medio en cuestión y obtenido un hash del disco físico
con fines de verificación, podemos comenzar nuestra adquisición.

dd es la utilidad de copia de datos muy básica que viene con una distribución estándar de GNU/Linux.
Hay, sin duda, algunas mejores herramientas de creación de imágenes para usar con Linux, pero dd es el viejo
modo de espera. Cubriremos algunas de las herramientas de imágenes más orientadas a la ciencia forense en
las siguientes secciones, pero aprender dd es importante por la misma razón que aprender vi. Al igual que vi,
seguramente encontrará dd en casi cualquier máquina Unix que pueda encontrar. En algunos casos, la mejor
herramienta de imágenes que tenga disponible podría ser la que casi siempre tendrá
el acceso a los.

Esta es su imagen forense estándar de un disco sospechoso. El comando dd copiará cada bit de las áreas
accesibles del núcleo de los medios al destino de su elección (un dispositivo físico o un archivo). Hay un par de
conceptos a tener en cuenta al usar dd. Algunos de estos conceptos también se aplican a las otras herramientas
de imágenes forenses que cubriremos. En una forma muy básica, el comando dd se ve así:

dd if=/dev/sdd of=/path/to/evidence.raw bs=512

116
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Archivo de entrada (si =): este es el medio de origen. Lo que estamos imaginando.

si=/dev/sdd
* Imagen de disco (/dev/sdx): Podemos usar el nombre para todo el nodo del dispositivo.
* Imagen de partición (/dev/sdx#): podemos usar el nombre del dispositivo y el número de partición para
crear una imagen de un solo sistema de partición/archivo. # es el número de partición (tal como lo
devuelve fdisk -l, por ejemplo).

Output le (of=): este es el destino. Donde estamos colocando la imagen/copia.

of=/ruta/a/evidencia.sin procesar
La salida puede ser un archivo (como arriba). Esto es lo más común.

La salida puede ser un dispositivo físico. Esto a menudo se conoce como un clon.

Tamaño de bloque (bs=): el tamaño de bloque del dispositivo del que se está creando una imagen. El núcleo
generalmente maneja esto. Esto puede convertirse en un problema futuro a medida que los tamaños de los
bloques cambien con la evolución de los medios de almacenamiento. Para nuestro disco sujeto actual (/dev/sdd),
la salida hdparm -I muestra 512 bytes por sector (Tamaño del sector lógico/físico). Tenga en cuenta algunos
dispositivos más nuevos que utilizan 2048 bytes por sector.

Indicación de progreso.

status=progress Esta opción proporciona una bonita línea de estado de actualización que muestra el
progreso de la creación de imágenes. Una adición relativamente reciente a las opciones dd .

También hay opciones que se usan a menudo para evitar problemas en caso de que haya sectores defectuosos
en el disco.

conv=noerror,sync Esta opción indica a dd que pase por alto los sectores de copia con errores Y rellene
con ceros los sectores coincidentes en el destino. El relleno mantiene las compensaciones correctas en
cualquier archivo de datos del sistema y quizás aún resulte en una imagen utilizable (más sobre esto más
adelante). No soy partidario de usar esta opción.

Como parte de la organización de nuestro caso, crearemos un nuevo directorio llamado imágenes en nuestro directorio
case1 . Aquí es donde mantendremos copias de trabajo de nuestras imágenes. Normalmente, crearía imágenes
directamente en una unidad más grande que se haya desinfectado o en un volumen de almacenamiento de red que se
utilice para mantener las copias originales. Eso dependerá de sus políticas específicas.

En este caso, por ejemplo, enviaremos una imagen directamente a nuestro directorio case1/images . Prefiero mantener
las imágenes separadas, ya que permite proteger el directorio con atribuciones que evitan cambios o eliminaciones en
nuestros archivos de imagen de copia de trabajo, una vez que hayamos completado el proceso de creación de imágenes.
Sin embargo, esta es una preferencia personal.

Para mantener nuestra línea de comando dd más corta, cambiaremos a nuestro directorio case1/images y escribiremos
nuestro archivo de salida aquí. Sin necesidad de especificar el directorio (estamos escribiendo en el directorio actual),
mantenemos la línea de comando más corta y más fácil de leer.

117
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:case1# mkdir imágenes

root@forensicbox:case1# imágenes de CD

root@forensicbox:imágenes#
pwd /mnt/evidence/case1/images

root@forensicbox:images# dd if=/dev/sdd of=case1.disk1.raw bs=512


79975662080 bytes (80 GB, 74 GiB) copiados, 2168 s, 36,9 MB/sk^[^[ 156250000+0
registros en
156250000+0 registros
80000000000 bytes (80 GB, 75 GiB) copiados, 2169,67 s, 36,9 MB/s

Esto toma su dispositivo de disco /dev/sdd como el archivo de entrada y escribe el archivo de salida llamado
case1.disk1.raw en el directorio actual /mnt/evidence/case1/images. La opción bs especifica el tamaño del
bloque. Esto realmente no es necesario para la mayoría de los dispositivos de bloque (discos duros, etc.) ya
que el kernel de Linux maneja el tamaño real del bloque. Se agrega aquí como ilustración, ya que puede ser
una opción útil en muchas situaciones (se analiza más adelante). Vuelva a intentar el comando anterior con
status=progress para ver actualizaciones sobre qué tan cerca está de completarse la creación de imágenes.

El uso de dd crea un duplicado exacto del archivo del dispositivo físico. Esto incluye toda la holgura de archivos
y el espacio no asignado. No estamos simplemente copiando la estructura lógica del archivo. A diferencia de
muchas herramientas de imágenes forenses, dd no llena la imagen con ningún dato o información patentada.
Es una simple copia de flujo de bits de principio a fin. Esto tiene una serie de ventajas, como veremos más
adelante.

Puede ver en nuestra salida anterior que dd lee el mismo número de registros (bloques de 512 bytes, en este
caso) que el número de sectores para este disco informado previamente por hdparm -I, 156250000. Para
verificar su imagen, podemos hacer lo siguiente: Queremos recordar el hash que obtuvimos del dispositivo
original (/dev/sdd), que almacenamos en el archivo case1.disk1.sha1. ,ÿ txt y compárelo con el hash del
archivo de imagen que acabamos de obtener.

root@forensicbox:imágenes# cat ../case1.disk1.sha1.txt


ddddda4252d1adeffa267636b1ae0fbf40c9d3b3 /dev/sdd

root@forensicbox:imágenes# sha1sum case1.disk1.raw


ddddda4252d1adeffa267636b1ae0fbf40c9d3b3 case1.disk1.raw

Puede ver que los dos hashes coinciden, verificando nuestra imagen como una copia fiel de la unidad original.
Tome nota del primer comando. Recuerda que actualmente estamos en el directorio /mnt/evidence/case1 ,ÿ /
images . El archivo hash case1.disk1.sha1.txt se almacena en el directorio principal, /mnt/evidence/case1.
Cuando emitimos nuestro comando cat (transmitir el contenido de un archivo), usamos la notación ../ para
indicar que el archivo que estamos llamando está en el directorio principal (..).

Este es el caso de uso más simple para dd.

118
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.6.1 dd y división de imágenes

Se ha convertido en una práctica común en el análisis forense digital dividir la salida de nuestras imágenes. Esto
se hace por varias razones, ya sea para archivar o para usar en otro programa. Primero discutiremos el uso de
split solo, luego junto con dd para la división y.

Por ejemplo, tenemos nuestra imagen de 80 GB y ahora queremos dividirla en partes de 4 GB para que puedan
escribirse en otros medios. O, si desea almacenar los archivos en un sistema de archivos con límites de tamaño
de archivo y necesita un tamaño particular, es posible que desee dividir la imagen en secciones más pequeñas.

Para esto usamos el comando dividir .

El comando dividir normalmente funciona en líneas de entrada (es decir, desde un archivo de texto). Pero
si usamos la opción -b, forzamos la división para tratar el archivo como entrada binaria y las líneas se
ignoran. Podemos especificar el tamaño de los archivos que queremos junto con el prefijo que queremos
para los archivos de salida. split también puede usar la opción -d para darnos una numeración numérica
(*.01, *.02, *.03, etc.) para los archivos de salida en lugar de alfabéticos (*.aa, *.ab, *.ac, etc.). La opción -a
especifica la longitud del sufijo. El comando se parece a:

split -d -aN -bXG <archivo a dividir> <prefijo de los archivos de salida>

donde N es la longitud de la extensión (o su x) que usaremos y X es el tamaño de los archivos resultantes con
un modificador de unidades (K, M, G, etc.). Con nuestra imagen de /dev/sdc, podemos dividirla en archivos de
4GB usando el siguiente comando (el último archivo tendrá el tamaño del resto del volumen si no es un múltiplo
exacto del tamaño elegido):

root@forensicbox:images# split -d -a3 -b4G case1.disk1.raw case1.disk1.split.

Esto daría como resultado un grupo de archivos (4GB de tamaño) cada uno nombrado con el prefijo
case1.split1 ,ÿ como se especifica en el comando, seguido de .000, .001, .002, y así sucesivamente. La
opción -a con 3 especifica que queremos que la extensión tenga al menos 3 dígitos. Sin -a 3, nuestros
archivos se llamarían *.01, *.02, *.03, etc. El uso de 3 dígitos mantiene la coherencia con otras
herramientas13. Tenga en cuenta el punto final en nuestro nombre de archivo de salida. Hacemos esto para
que el su x se agregue como una extensión de archivo en lugar de una cadena su x añadida al final de la cadena del nombr

root@forensicbox:images# ls -lh case1.disk1.split.* -rw-r--r--


1 root root 4.0G 8 de julio 07:00 case1.disk1.split.000 -rw-r--r- - 1 root root
4.0G 8 de julio 07:01 case1.disk1.split.001 -rw-r--r-- 1 root root 4.0G 8 de
julio 07:02 case1.disk1.split.002 -rw-r-- r-- 1 root root 4.0G 8 de julio 07:04
case1.disk1.split.003 -rw-r--r-- 1 root root 4.0G 8 de julio 07:05
case1.disk1.split.004

13Algunas suites de software forense no reconocerán las imágenes divididas cuyo nombre no sea un tres
extensión de caracteres.

119
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

-rw-r--r-- 1 root root 4.0G 8 de julio 07:06 case1.disk1.split.005 -rw-r--r-- 1


root root 4.0G 8 de julio 07:07 case1.disk1.split .006 -rw-r--r-- 1 root root
4.0G 8 de julio 07:08 case1.disk1.split.007 -rw-r--r-- 1 root root 4.0G 8 de
julio 07:10 case1.disk1 .split.008 -rw-r--r-- 1 root root 4.0G 8 de julio 07:11
case1.disk1.split.009 -rw-r--r-- 1 root root 4.0G 8 de julio 07:12
case1 .disk1.split.010 -rw-r--r-- 1 raíz raíz 4.0G 8 de julio 07:13
case1.disk1.split.011 -rw-r--r-- 1 raíz raíz 4.0G 8 de julio 07: 14
case1.disk1.split.012 -rw-r--r-- 1 root root 4.0G 8 de julio 07:15
case1.disk1.split.013 -rw-r--r-- 1 root root 4.0G 8 de julio 07:17
case1.disk1.split.014 -rw-r--r-- 1 root root 4.0G 8 de julio 07:18
case1.disk1.split.015 -rw-r--r-- 1 root root 4.0G 8 de julio 07:19
case1.disk1.split.016 -rw-r--r-- 1 raíz raíz 4.0G 8 de julio 07:20
case1.disk1.split.017 -rw-r--r-- 1 raíz raíz 2.6G 8 de julio 07:21
case1.disk1.split.018

El proceso se puede revertir. Si queremos volver a ensamblar la imagen a partir de las partes divididas,
podemos usar el comando cat y redirigir la salida a un nuevo archivo. Recuerde que cat simplemente transmite
los archivos especi cados a la salida estándar. Si redirige esta salida, los archivos se ensamblan en
una.

root@forensicbox:imágenes# cat case1.disk1.split*> case1.disk1.new.raw

En el comando anterior, hemos vuelto a ensamblar las partes divididas en un nuevo archivo de imagen de 80
GB. Los archivos divididos originales no se eliminan, por lo que el comando anterior esencialmente duplicará
sus requisitos de espacio si está escribiendo en el mismo dispositivo/directorio montado.

El mismo comando cat se puede usar para verificar el hash de las secciones de imagen resultantes
transmitiendo todas las partes de la imagen a través de una tubería a nuestro comando hash:

root@forensicbox:imágenes# cat case1.disk1.split*| sha1sum


ddddda4252d1adeffa267636b1ae0fbf40c9d3b3 -

Una vez más, vemos que el hash permanece sin cambios. El al final de la salida indica que tomamos nuestra
entrada de stdin, no de un archivo o dispositivo. En el comando anterior, sha1sum recibe su entrada
directamente del comando cat a través de la tubería.

Otra forma de lograr imágenes de varios segmentos sería dividir la imagen a medida que la creamos
(directamente desde un comando dd ). Esta es esencialmente la división en Y que mencionamos anteriormente.
Hacemos esto canalizando la salida del comando dd directamente a split, omitiendo la porción of = del
comando dd . Suponiendo que nuestra unidad en cuestión sea /dev/sdd, usaríamos el comando:

root@forensicbox:imágenes# dd if=/dev/sdd | split -d -a3 -b4G - case1.disk1.split. 156250000+0


registros en

120
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

156250000+0 registros
80000000000 bytes (80 GB, 75 GiB) copiados, 1146,87 s, 69,8 MB/s

Aquí, en lugar de dar el nombre del archivo a dividir en el comando dividir , damos un simple - (después de
4G, donde teníamos el nombre de entrada en nuestro ejemplo anterior). El guión único es un descriptor que
significa entrada estándar. En otras palabras, el comando toma su entrada de la tubería de datos
proporcionada por la salida estándar de dd en lugar de un archivo. Cualquier opción que desee pasar a dd
(tamaño de bloque, conteo, etc., vaya antes de la canalización). El resultado anterior muestra que el número
familiar de sectores es correcto para el disco que estamos creando (156250000).

Una vez que tengamos la imagen, la misma técnica que utiliza cat nos permitirá volver a ensamblarla para el
hash o el análisis como hicimos con las imágenes divididas de arriba.

Para practicar, puede usar una pequeña memoria USB si tiene una disponible y probar este método en ese
dispositivo, dividiéndola en un número razonable de partes. Puede usar cualquier unidad de muestra,
asegurándose de reemplazar nuestro nodo de dispositivo en el siguiente comando con /dev/sdx (donde x es
su memoria USB u otro medio). Obtenga un hash primero, para que pueda comparar los archivos divididos y
el original y asegurarse de que la división no cambie nada.

El siguiente ejemplo utiliza una unidad USB de 2GB que se divide arbitrariamente en una sección de 512M.
Siga los comandos y experimente con las opciones mientras observa los cambios en la salida resultante. Es
la mejor manera de aprender. Comenzaremos identificando el disco de memoria con lsscsi tan pronto como
se conecte (la salida se abrevia para legibilidad):

root@forensicbox:~# lsscsi
...
[3:0:0:0] disco Memoria USB genérica 1.00 /dev/sdb
...

root@forensicbox:~# sha1sum /dev/sdb


b4531adb315a48329c9b05361bf66794dd50ca27 /dev/sdb

root@forensicbox:~# dd if=/dev/sdb | split -d -a3 -b512M - pulgar.split. 4156416+0 registros en

4156416+0 registros fuera

2128084992 bytes (2,1 GB, 2,0 GiB) copiados, 153,338 s, 13,9 MB/s

root@forensicbox:~# ls -lh thumb.split.*| sha1sum total 2.0G

-rw-r--r-- 1 raíz raíz 512M 8 de julio 06:03 thumb.split.000 -rw-r--r-- 1 raíz raíz
512M 8 de julio 06:03 thumb.split.001 -rw-r --r-- 1 raíz raíz 512M 8 de julio 06:04
thumb.split.002 -rw-r--r-- 1 raíz raíz 494M 8 de julio 06:05 thumb.split.003

root@forensicbox:~# cat thumb.split.*| sha1sum


b4531adb315a48329c9b05361bf66794dd50ca27 -

121
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Si observamos el resultado de los comandos anteriores, primero vemos que la memoria USB que se conectó se
identi ca como una unidad flash USB genérica. Luego hacemos hash del dispositivo, la imagen y la división en la
y con dd, y verificamos el hash. Encontramos el mismo hash para el disco, para las imágenes divididas unidas
entre sí y para la imagen recién reensamblada.

Nos divertiremos un poco más con este comando más adelante. Es más que una herramienta de imagen.

8.7 Herramientas de imagen alternativas

Standard Linux dd es una herramienta de creación de imágenes. Es robusto, bien probado y tiene un historial
comprobado.

Tan bueno como dd es una herramienta de imágenes, tiene una simple y percibida sorpresa: en realidad nunca
fue diseñado para ser utilizado para adquisiciones forenses. Si bien la palabra "aw"
saber
es un
que,
poco
por dura,
mucho debemos
que la
comunidad forense digital se refiera a dd como una herramienta de "imagen", no es para eso que fue diseñada.
Es muy capaz, pero algunos profesionales prefieren herramientas de generación de imágenes dedicadas y con
funciones completas que no requieran programas externos para realizar el registro, el hash y la documentación de
errores de generación de imágenes. Además, dd no es la mejor solución para obtener evidencia de medios
dañados o defectuosos.

Hay una serie de herramientas forenses específicas para los usuarios de Linux que desean adquirir pruebas.
Algunas de estas herramientas incluyen:

Programa dd mejorado dc3dd para uso forense (basado en el código dd ).

Programa dd mejorado dcfldd para uso forense (fork of dd code).

ewfacquire Provista como parte del proyecto libewf , esta herramienta se utiliza para adquirir imágenes en
formato de testigo experto (EWF). Lo cubriremos con algún detalle más adelante.

ddrescue Una herramienta de imágenes diseñada especí camente para recuperar datos de medios que
presentan errores (no debe confundirse con dd_rescue).

una herramienta de imagen forense proporcionada principalmente para crear imágenes en formato forense
avanzado (AFF).

Esta no es una lista exhaustiva. Estos, sin embargo, son algunos de los más utilizados (hasta donde yo sé).
Cubriremos dc3dd , ewfacquire y ddrescue en este documento. Hay otras herramientas de imágenes comunes
que también se ejecutan en una GUI (Guymager, por ejemplo, 14), pero dejaré los programas de la GUI a la
investigación del lector (en su mayor parte).

14https://guymager.sourceforge.io/

122
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.7.1 dc3dd

La primera herramienta de imagen alternativa que cubriremos es dc3dd. Esta imagen es una herramienta basada en
el código original (parcheado) de dd. Es muy similar al popular dcfldd pero proporciona un conjunto de funciones
ligeramente diferente. Mi elección de cubrir dcfldd o dc3dd es en gran medida arbitraria. dc3dd es mantenido por el
Centro de Delitos Cibernéticos del DoD (Departamento de Defensa) (también conocido como Dc3)15
Independientemente de cuál (dc3dd o dcfldd) prefiera, la familiaridad con una de estas herramientas se traducirá
muy bien en la otra con algo de lectura y experimentación, ya que son muy similares. Si bien existen algunas
diferencias significativas, muchas de las características que analizamos en esta sección son comunes a dc3dd y
dcfldd.

El paquete fuente y más información para dc3dd se pueden encontrar en https://sourceforge. net/proyectos/
dc3dd/.

dc3dd está instalado de forma predeterminada en las versiones recientes de Slackware. Si está usando una
distribución diferente, verifique el repositorio de su administrador de paquetes.

La página del manual de dc3dd es concisa y fácil de leer. Toda la información que necesita para usar las funciones
avanzadas de esta herramienta de imágenes está ordenada para usted.

Echemos un vistazo al uso básico de dc3dd. A medida que lea la sección de uso de la página del manual , notará
una serie de adiciones al dd regular para el examinador forense. Concentrémonos en estas adiciones notables:

hof=ARCHIVO o DISPOSITIVO

similar al parámetro of= de dd codifica los


bytes de entrada codifica los bytes de salida
escribe la salida en el destino especificado

ofs=BASE.FMT

similar al parámetro of= de dd divide el


archivo de salida usa el nombre BASE para
los archivos de salida usa la extensión FMT para
los archivos de salida
FMT es numérico o alfabético más sobre
esto a continuación

hofs=BASE.FMT

hash y dividir el archivo de salida. Esto es esencialmente una


combinación de los dos parámetros anteriores.

15dcfldd también lleva el nombre del Laboratorio de informática forense de defensa

123
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ofsz=BYTES
tamaño del archivo
de salida cuando se usa ofs o hofs, este parámetro establece el tamaño
de cada archivo dividido. consulte la página de manual para el uso
adecuado

hash=ALGORITMO

especifique el algoritmo que usaremos para codificar los bytes de entrada/


salida (md5, sha1, sha256, etc.) cuando usemos hof o
hofs.

registro=ARCHIVO

escribir un registro de adquisición en ARCHIVO

hlog=ARCHIVO
escriba un registro hash de la imagen y cualquier archivo dividido para
EXPEDIENTE

Si rehacemos nuestra imagen de /dev/sdd (nuestro disco original de 80 GB) usando dc3dd con parámetros simples if= y of= ,
como usamos con dd, la sesión se vería así. Todavía estamos en nuestro directorio ~/case1/images .

root@forensicbox:images# dc3dd if=/dev/sdc of=case1.disk1.dc3dd.raw dc3dd 7.2.646 comenzó


el 2019-07-08 08:31:35 -0400
opciones compiladas:
línea de comandos: dc3dd if=/dev/sdd of=case1.disk1.dc3dd.raw tamaño del
dispositivo: 156250000 sectores (probados), 80 000 000 000 bytes tamaño del sector: 512
bytes (probados) 80000000000 bytes (75 G) copiados (100 % ), 855 s, 89 M/s

resultados de entrada para el dispositivo '/dev/sdd':


156250000 sectores en
0 sectores defectuosos reemplazados por ceros

resultados de salida para el archivo 'case1.disk1.dc3dd.raw':


156250000 sectores fuera

dc3dd completado el 2019-07-08 08:45:50 -0400

Nuestro archivo de entrada sigue siendo el disco sdd (if=/dev/sdd), nuestro archivo de salida ahora es case1.disk1.dc3dd ,ÿ .raw
(of=case.disk1.dc3dd.raw). Una de las primeras cosas que notará de inmediato es que dc3dd devuelve más información
utilizable mientras se ejecuta el programa. Te da un muy buen

124
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

indicador de progreso. También vemos inmediatamente que se capturó el número correcto de sectores para /dev/
sdd (156250000), y que no se detectaron sectores "malos". Las marcas de tiempo de inicio y finalización también se
agregan de forma predeterminada. Si especifica un archivo de registro, toda esta información se captura muy bien.
Veremos las opciones de hashing y el inicio de sesión con más detalle en un momento.

Esta salida detallada y la disponibilidad de un registro simple es una de las cosas que hace que dc3dd sea un mejor
candidato para imágenes forenses generales en comparación con dd.

Como se mencionó, dc3dd puede incorporar el hashing, la división y el registro de una adquisición en un solo
comando. Todo esto se puede hacer con dd regulares y herramientas externas (con tuberías, redirección o
secuencias de comandos), pero muchos profesionales prefieren un enfoque integrado. Además, las opciones
estándar disponibles para el comando dd regular todavía están disponibles en dc3dd (bs, skip, etc.).

Más que simplemente incorporar los otros pasos en un solo comando, dc3dd amplía la funcionalidad. Por ejemplo,
usando un comando de división regular con dd como hicimos en un ejercicio anterior, podemos permitir la convención
de nomenclatura alfabética predeterminada de división o pasar la opción -d para proporcionarnos extensiones
decimales en nuestros archivos. Por el contrario, dc3dd nos permite no solo de nir el tamaño de cada división como
una opción para el comando de imagen (usando ofsz) sin necesidad de un comando canalizado, sino que también
permite un control más granular sobre el formato de las extensiones que tendrá cada división. tener como parte de
su nombre de archivo. Entonces, para nuestro disco de 80 GB en secciones de 4 GB, simplemente usaría:

ofs=NOMBREBASE.FMT ofsz=4G

El parámetro ofs es esencialmente "división de archivo de salida". La extensión que sigue a los nombres de los
archivos de salida se formatea directamente en el propio comando. De acuerdo con la página de manual de dc3dd :

...
4. FMT es un patrón para una secuencia de extensiones de archivo que puede ser numérica

empezando por cero, numérico empezando por uno o alfabético.


Especifique FMT utilizando una serie de ceros, unos o a,
respectivamente. El número de caracteres utilizados indica la longitud
deseada de las extensiones. Por ejemplo, un especificador FMT de
0000 indica extensiones numéricas de cuatro caracteres que comienzan
con 0000.
...

Entonces, si emito el comando base como algo como esto:

dc3dd if=/dev/sdd ofs=nombre de archivo.FMT ofsz=32M

125
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Puedo ajustar los valores para FMT y mis extensiones de archivos divididos cambiarían en consecuencia:

nombre de archivo.aa
FMT=aa
nombre de archivo.ab

nombre de archivo.ac

nombre de archivo.aaa
FMT=aaa
nombre de archivo.aab

nombre de archivo.aac

nombre de archivo.00
FMT=00
nombre de archivo.01

nombre de archivo.02

nombre de archivo.000
FMT=000
nombre de archivo.001

nombre de archivo.002

Además, cuando usamos GNU dd normal, nuestras funciones de hashing se realizan de forma externa a la
creación de imágenes, ya sea mediante los comandos md5sum o sha1sum , según la preferencia del analista
por el algoritmo. dc3dd permite al usuario ejecutar AMBOS hashes simultáneamente en una adquisición y
registrar los hashes. Antes de ejecutar nuestras imágenes divididas con dc3dd, veamos las opciones de hashing
un poco más de cerca.

Seleccionamos nuestro algoritmo hash con la opción hash=, especificando cualquiera de md5, sha1, sha256, sha512 o una lista de algoritmos separados por comas.

De esta forma, puede seleccionar varios métodos hash para un solo archivo de imagen. Estos se escribirán en un archivo de registro que indiquemos, un registro hash

especial o en la salida estándar si no se especifica ningún registro.

dc3dd también proporciona parámetros hof y hofs . La opción hof actúa de forma muy similar a of, pero reduce
la salida, la compara con la entrada y la registra. Debe seleccionar un algoritmo hash.
Del mismo modo, hofs actúa como ofs, dividiendo la salida en tamaños de fragmento especificados por ofsz.
La opción hofs difiere en que también procesa cada uno de los flujos de entrada/salida y los compara y registra
para cada fragmento.

Puede pasar el parámetro log=filename para registrar todos los resultados en un solo lugar, o puede registrar
hashes por separado usando la opción hlog=filename .

Rehagamos nuestro ejemplo de dd con la memoria USB 2G. Esta vez usaremos dc3dd. Discutiremos las
opciones y el resultado a continuación. Estamos ejecutando estos comandos en la casa de root

126
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

directorio (o cualquier directorio de su elección, para que no confundamos los archivos de imagen resultantes con
los datos de nuestro caso 1 ).

root@forensicbox:~# lsscsi
...
[5:0:0:0] disco Memoria USB genérica 1.00 /dev/sdb
...

root@forensicbox:~# sha1sum /dev/sdb


b4531adb315a48329c9b05361bf66794dd50ca27 /dev/sdb

root@forensicbox:~# dc3dd if=/dev/sdb hofs=thumb.dc3dd.000 ofsz=512M hash=sha1


hash=md5 log=thumb.dc3dd.log dc3dd
7.2.646 comenzó el 2019-07-08 10:03:24 -0400
opciones compiladas:
línea de comando: dc3dd if=/dev/sdb hofs=thumb.dc3dd.000 ofsz=512M hash=sha1 hash=md5 ,ÿ
log=thumb.dc3dd.log tamaño del dispositivo: 4156416 sectores (probado), tamaño del sector: 512 bytes
(probados) 2128084992 bytes (2 G) copiados (100 %), 183 s,2.128.084.992
11 M/s 2128084992
bytes bytes (2 G) hash (100 %),

7 s, 282 M/s

resultados de entrada para el dispositivo '/dev/sdb':


4156416 sectores en
0 sectores defectuosos reemplazados
por ceros 6662cd15f59767e5eb1378b71dc20f68 (md5)
4ae688f36ccef38b3cee374d8d9f79f5, sectors 0 - 1048575
5077e2575359eecda7782b0c2215b4ab, sectors 1048576 - 2097151
ae6dc7d9832550de29965e4c90286fac, sectors 2097152 - 3145727
248e734b964c3cfcac8ce88017ffb1c2, sectors 3145728 - 4156415
b4531adb315a48329c9b05361bf66794dd50ca27 (sha1)
8a60b96ef1e46272f3c9de0becd93768074918e4, sectors 0 - 1048575
c7bc3a35ff023c47c69ac037cff60bb0e055fd0f, sectors 1048576 - 2097151
c2ea65f9b27e11a4657950239f7fba918e350aa7, sectors 2097152 - 3145727
6d83e285369cab5d8bda105fd8fdca29e8210f69, sectors 3145728 - 4156415

resultados de salida para los archivos 'thumb.dc3dd.000':


4156416 sectores fuera
[ok] 6662cd15f59767e5eb1378b71dc20f68 (md5) [ok]
4ae688f36ccef38b3cee374d8d9f79f5, sectors 0 - 1048575, 'thumb.dc3dd.000' [ok]
5077e2575359eecda7782b0c2215b4ab, sectors 1048576 - 2097151, 'thumb.dc3dd.001' [ok]
ae6dc7d9832550de29965e4c90286fac, sectors 2097152 - 3145727 , 'thumb.dc3dd.002' [ok]
248e734b964c3cfcac8ce88017ffb1c2, sectors 3145728 - 4156415, 'thumb.dc3dd.003' ]
b4531adb315a48329c9b05361bf66794dd50ca27 (sha1) [ok] 8a60b96ef1e46272f3c9de0becd93768074918e4, sectors 0
- 1048575, 'thumb.dc3dd
,ÿ .000'
[ok] c7bc3a35ff023c47c69ac037cff60bb0e055fd0f, sectores 1048576 - 2097151, 'thumb.
,ÿ dc3dd.001'

127
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

[ok] c2ea65f9b27e11a4657950239f7fba918e350aa7, sectores 2097152 - 3145727, 'thumb.


,ÿ dc3dd.002'
[ok] 6d83e285369cab5d8bda105fd8fdca29e8210f69, sectores 3145728 - 4156415, 'thumb.
,ÿ dc3dd.003'

dc3dd completado el 2019-07-08 10:06:27 -0400

Las opciones utilizadas anteriormente son:

si=/dev/sdb : Nuestro dispositivo fuente, como lo indica la salida de lsscsi (o


lsblk)
hofs=pulgar.dc3dd.000 : Nuestra salida le BASE y FMT. El uso de la opción hofs indica
que queremos hashes y divisiones del archivo de salida. La BASE
es thumb.dc3dd. y el formato de nuestra extensión (FMT) será
numérico, de tres dígitos.

ofsz=512M : Dado que indicamos archivos divididos (usando hofs u ofs),


necesitamos especificar un tamaño de archivo de salida.
hash=sha1, hash=md5 : Dado que indicamos hash de los archivos de entrada y salida
(hofs o hof), debemos proporcionar el algoritmo que queremos.
En este caso, estamos ilustrando que podemos usar DOS
algoritmos, y ambos serán calculados y registrados.

log=thumb.dc3dd.log : Indica que queremos que la salida de dc3dd se registre en un


archivo que especifiquemos. Tenga en cuenta que puede registrar
hashes por separado usando hlog.

La salida resultante (que se muestra con nuestro comando ls a continuación) nos da 4 archivos de imágenes divididas, con
extensiones numéricas que comienzan con 000. También tenemos un archivo de registro de nuestros hashes y cualquier
mensaje de error, que podemos ver con less o cat:

root@forensicbox:~# ls -lh thumb.dc3dd.* total 2.0G

-rw-r--r-- 1 raíz raíz 512M 8 de julio 10:04 thumb.dc3dd.000


-rw-r--r-- 1 raíz raíz 512M 8 de julio 10:04 thumb.dc3dd.001
-rw-r--r-- 1 raíz raíz 512M 8 de julio 10:05 thumb.dc3dd.002
-rw-r--r-- 1 raíz raíz 494M 8 de julio 10:06 thumb.dc3dd.003

-rw-r--r-- 1 raíz raíz 2.1K 8 de julio 10:06 thumb.dc3dd.log

Como se discutió anteriormente, el archivo de registro contiene nuestros hashes y nuestros mensajes de error. Para los
hash, el hash de entrada del dispositivo de la imagen se muestra primero (para cada algoritmo hash que solicitamos).
Luego, se muestran los valores hash de salida para cada uno de los archivos de salida. Si el hash de entrada coincide con
el hash de salida para un rango determinado (o todo el dispositivo), el hash de salida está precedido por [ok] para que no
tenga que comparar manualmente la salida.

128
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El archivo de registro finaliza con una marca de tiempo para su documentación.

Otra característica útil de dc3dd en comparación con dd normal es la capacidad (sin el uso de canalizaciones externas
o programas de canalización) para recopilar varias imágenes al mismo tiempo. Si la logística lo permite y es necesario
recopilar varias copias en el lugar para distribuirlas a varias partes, podemos crear archivos de salida adicionales:

root@forensicbox:~# dc3dd if=/dev/sdb hof=thumbcopy.dc3ddhof=duplicate.dc3dd


hash=md5

dc3dd 7.2.646 comenzó el 2019-07-08 12:15:15 -0400


opciones compiladas:
línea de comandos: dc3dd if=/dev/sdb hof=thumbcopy.dc3dd hof=duplicate.dc3dd hash=md5 tamaño del
dispositivo: 4156416 sectores (probados), tamaño del sector:
2.128.084.992
512 bytes
bytes
(probados) 2128084992 bytes (2
G) copiados ( 100 % ), 179 s, 11 M/s 2128084992 bytes ( 2 G ) hash ( 100 % ),

3 s, 614 M/s

resultados de entrada para el dispositivo '/dev/sdb':


4156416 sectores en
0 sectores defectuosos reemplazados
por ceros 6662cd15f59767e5eb1378b71dc20f68 (md5)

resultados de salida para el archivo 'thumbcopy.dc3dd':


4156416 sectores fuera
[bien] 6662cd15f59767e5eb1378b71dc20f68 (md5)

resultados de salida para el archivo 'duplicate.dc3dd':


4156416 sectores fuera
[bien] 6662cd15f59767e5eb1378b71dc20f68 (md5)

dc3dd completado el 2019-07-08 12:18:14 -0400

root@forensicbox:~# ls -lh *.dc3dd -rw-r--r--


1 root root 2.0G 8 de julio 12:18 duplicate.dc3dd -rw-r--r-- 1 root root 2.0G
8 de julio 12:18 thumbcopy.dc3dd

La demostración anterior ilustra la recopilación de dos imágenes simultáneamente. Puede ver que seleccionamos
aplicar hash a los archivos de salida (hof) usando el algoritmo md5 (hash=md5). La salida muestra que el único flujo
de entrada se sometió a hash, pero hay dos flujos de salida, y cada uno se sometió a hash y se verificó por separado.
Esta puede ser una característica muy útil de dc3dd.

Recuerde que dc3dd genera imágenes en bruto. Se pueden codificar exactamente igual que la salida de dd :
directamente con el algoritmo de cifrado de su elección (sha1sum, md5sum, etc.), o en el caso de archivos divididos,
usando el comando cat para transmitir la salida de múltiples archivos al hash programa.

129
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Ahora continuaremos con nuestro análisis de herramientas de imágenes alternativas con una utilidad que se utiliza para
recopilar y manipular archivos de Testigo experto (E01 o EWF) , uno de los formatos más ubicuos que se utilizan en la
informática forense en la actualidad.

8.7.2 libewf y ewfacquire

Puede haber ocasiones en las que se le pida que realice exámenes recopilados por otra persona, o tal vez su
organización haya optado por estandarizar un formato determinado para las imágenes forenses.
En cualquier caso, es probable que eventualmente se encuentre con archivos de formato Expert Witness (EWF,
comúnmente conocido como formato EnCase). Hay muchas herramientas que pueden leer, convertir o trabajar con
estas imágenes. En esta sección aprenderemos a adquirir y manipular evidencia en el formato EWF.

Exploraremos aquí un conjunto de herramientas pertenecientes al proyecto libewf . Estas herramientas brindan la
capacidad de crear, ver, convertir y trabajar con contenedores de evidencia de testigos expertos.

Uno de los beneficios de cubrir libewf antes que otras utilidades forenses avanzadas es que primero debe instalarse
para proporcionar las bibliotecas necesarias para que otros paquetes admitan formatos de imagen EWF. Las
herramientas libewf y la información detallada del proyecto se pueden encontrar en https://github.com/libyal/libewf/

Comenzaremos instalando libewf usando sbotools. Consulte la documentación de su distribución o las instrucciones
de instalación en el sitio web que se muestra arriba si está utilizando una distribución que no sea Slackware. La
instalación es sencilla. libewf no tiene requisitos adicionales (puede ver el archivo de información con sbofind -tei
libewf). Cuando comience el proceso de instalación, asegúrese de tomarse el tiempo para leer el archivo LÉAME que
se muestra.

root@forensicbox:~# sboinstall libewf

libewf (biblioteca de compresión de testigo experto libYAL)

libewf le permite leer información multimedia de archivos EWF


en formato SMART (EWF-S01) y formato EnCase (EWF-E01). libewf permite leer
archivos creados por EnCase 1 a 6, lino y FTK Imager.

¿Continuar con libewf? [y]

¿Seguro que desea continuar? [y]


...
Ejecutando el script de instalación para libewf-20140806-x86_64-1_SBo.tgz.
Paquete libewf-20140806-x86_64-1_SBo.tgz instalado.

Limpieza para libewf-20140806...

130
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una vez que se completa la descarga, compilación, compilación e instalación del paquete resultante, las
herramientas reales se colocan en /usr/bin. Echaremos un vistazo más de cerca a lo siguiente:

ewfacquire

ewfverificar

ewfinfo

ewfexport

ewfacquirestream (en una sección posterior)

Comenzaremos con el comando ewfacquire que se usa para crear archivos EWF que se pueden usar en otros
programas. La forma más fácil de describir cómo funciona ewfacquire es verlo funcionar. Hay varias opciones
disponibles. Para obtener una lista de opciones (hay muchas, simplemente ejecute ewfacquire -h.
Para obtener una imagen, simplemente emita el comando con el nombre del archivo o dispositivo físico del
que desea crear una imagen. A menos que memorice o escriba las opciones, esta es la forma más fácil de
ejecutar el programa. Se le solicitará la información requerida, que se almacenará con los datos en formato
EWF (el siguiente resultado es interactivo):

root@forensicbox:~# lsscsi [5:0:0:0]


disco Memoria USB genérica 1.00 /dev/sdb

root@forensicbox:~# ewfacquire /dev/sdb ewfacquire


20140806

Información del dispositivo:

Tipo de autobús: USB


Vendedor:
Modelo:
De serie:

Información de medios de almacenamiento:


Escribe: Dispositivo

Tipo de medio: Fijado


Tamaño de medios: 2,1 GB (2128084992 bytes) 512
Bytes por sector:

Parámetros de adquisición requeridos, proporcione la entrada necesaria Ruta de la imagen y


nombre de archivo sin extensión: case1.disk2 Número de caso: 2019-0001

Descripción: Memoria USB confiscada a un tipo malo


Número de prueba: 2019-001-002
Nombre del examinador: Barry J. Grundy
Notas:

131
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Tipo de medio (fijo, extraíble, óptico, memoria) [fijo]:


Características de los medios (lógicos, físicos) [físicos]:
Utilice el formato de archivo EWF (ewf, smart, ftk, encase1, encase2, encase3, encase4, encase5,
,ÿ encase6, linen5, linen6, ewfx) [encase6]:
Método de compresión (desinflar) [desinflar]:
Nivel de compresión (ninguno, bloque vacío, rápido, mejor) [ninguno]:
Comience a adquirir en el desplazamiento (0 <= valor <= 2128084992) [0]:
El número de bytes a adquirir (0 <= valor <= 2128084992) [2128084992]:
Tamaño del archivo del segmento de pruebas en bytes (1,0 MiB <= valor <= 7,9 EiB) [1,4 GiB]: 512 M
El número de bytes por sector (1 <= valor <= 4294967295) [512]:
El número de sectores para leer a la vez (16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
,ÿ 8192, 16384, 32768) [64]:
El número de sectores a utilizar como granularidad de error (1 <= valor <= 64) [64]:
El número de reintentos cuando ocurre un error de lectura (0 <= valor <= 255) [2]:
Borrar sectores en caso de error de lectura (imitar el comportamiento de EnCase) (sí, no) [no]:

Se proporcionaron los siguientes parámetros de adquisición:


Ruta de la imagen y nombre de archivo: case1.disk2.E01
Número de caso: 2019-0001
Descripción: Memoria USB incautada a chico malo
Número de evidencia: 2019-001-002
Nombre del examinador: Barry J Grundy
Notas:
Tipo de medio: disco fijo

es físico: sí
Formato de archivo EWF: Caja 6 (.E01)
Método de compresión: desinflar
Nivel de compresión: ninguna

Compensación de inicio de adquisición: 0


Número de bytes a adquirir: 1,9 GiB (2128084992 bytes)
Tamaño del archivo del segmento de evidencia: 512 MiB (536870912 bytes)
Bytes por sector: 512
Tamaño de bloque: 64 sectores
Granularidad de errores: 64 sectores
Reintentos en error de lectura: 2
Cero sectores en error de lectura: no

Continúe adquiriendo con estos valores (sí, no) [sí]:

...
Estado: al 44%.
adquirió 907 MiB (952074240 bytes) de un total de 1,9 GiB (2128084992 bytes).
finalización en 1 minuto(s) y 26 segundo(s) con 13 MiB/s
(13818733 bytes/segundo).

...

132
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Estado: al 99%.

adquirió 1,9 GiB (2121498624 bytes) de un total de 1,9 GiB (2128084992 bytes). finalización en 1 segundo(s)
con 13 MiB/s (13909052 bytes/segundo).

Adquisición completada el: 08 de julio de 2019 14:46:35

Escrito: 1,9 GiB (2128085180 bytes) en 2 minuto(s) y 32 segundo(s) con 13 MiB/s


,ÿ (14000560 bytes/segundo).
Hash MD5 calculado sobre datos: 6662cd15f59767e5eb1378b71dc20f68

ewfacquire: ÉXITO

root@forensicbox:~# ls -lh total 2.0G

-rw-r--r-- 1 raíz raíz 512M 8 de julio 14:44 case1.disk2.E01


-rw-r--r-- 1 raíz raíz 512M 8 de julio 14:45 case1.disk2.E02
-rw-r--r-- 1 raíz raíz 512M 8 de julio 14:45 case1.disk2.E03
-rw-r--r-- 1 raíz raíz 495M 8 de julio 14:46 case1.disk2.E04

En la sesión de comando anterior, la entrada del usuario se muestra en negrita. En lugares donde no hay entrada
proporcionada por el usuario, se utilizan los valores predeterminados (que se muestran entre paréntesis). Tenga en
cuenta que ewfacquire le brinda varias opciones para los formatos de imagen que se pueden especificar. El(los)
archivo(s) especi cado(s) por el usuario recibe una extensión E** y se coloca en la ruta dirigida por el usuario.
Finalmente, se proporciona un hash MD5 al final de la salida para verificación. Al igual que con dc3dd, también
obtiene una marca de tiempo para la documentación.

También puede emitir un solo comando y especificar las opciones que usamos anteriormente en la línea de comando.
Por ejemplo, para obtener resultados similares, podemos emitir el siguiente comando:

root@forensicbox:~# ewfacquire -C "2019-001" -d sha1 -D "Memoria USB incautada de


chico malo" -e "Barry J. Grundy" -E "2019-001-002" -m extraíble -M físico -S 512M -t case1.disk2 -u /dev/sdb

ewfacquire 20140806
...
Estado: al 98%.

adquirió 1,9 GiB (2091614208 bytes) de un total de 1,9 GiB (2128084992 bytes). finalización en 3 segundo(s)
con 12 MiB/s (13217919 bytes/segundo).

Adquisición completada el: 08 de julio de 2019 15:13:07

Escrito: 1,9 GiB (2128085336 bytes) en 2 minuto(s) y 40 segundo(s) con 12 MiB/s


,ÿ (13300533 bytes/segundo).
Hash MD5 calculado sobre datos: 6662cd15f59767e5eb1378b71dc20f68
Hash SHA1 calculado sobre datos: b4531adb315a48329c9b05361bf66794dd50ca27

ewfacquire: ÉXITO

Puede ver las opciones individuales proporcionadas en el comando anterior

133
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

viendo hombre ewfacquire. Esencialmente, este comando nos permite ejecutar ewfacquire sin
tener que responder a cualquier indicación. Las opciones importantes a tener en cuenta aquí son -d que nos permite
especificar un algoritmo de suma de comprobación adicional y -u (modo desatendido) que obliga a ewfacquire
para usar los valores predeterminados para las opciones no especificadas. Asegúrate de saber lo que estás haciendo antes
ejecutar el comando sin supervisión.

Una vez adquiridos, los archivos resultantes de ewfacquire son compatibles con cualquier software que
leer imágenes en formato EWF. Usaremos algunas utilidades forenses más adelante para hacer precisamente eso.

Veamos ahora ewfinfo y ewfverify. Estas dos herramientas, también incluidas con libewf, proporcionan
información sobre cualquier archivo EWF correctamente formateado que pueda encontrar.

ewfinfo simplemente lee los metadatos de la imagen que se ingresaron durante el proceso de generación de imágenes. Eso
funcionará con archivos de imagen adquiridos utilizando otro software EWF, siempre y cuando esté en un
formato EWF adecuado. Para los archivos que acabamos de recolectar, usando ewfacquire, la salida se vería
así (tenga en cuenta el sistema operativo utilizado y la versión de software utilizada):

root@forensicbox:~# ewfinfo case1.disk2.E01


ewfinfo 20140806

Adquirir información
Número de caso: 2019-001
Descripción: Memoria USB incautada a chico malo
Nombre del examinador: Barry J Grundy
Número de evidencia: 2019-001-002
Fecha de adquisición: Lun 8 Jul 15:10:27 2019
Fecha del sistema: lun 8 jul 15:10:27 2019
Sistema operativo utilizado: Linux
Versión de software utilizada: 20140806
Clave: N/A

Información de EWF
Formato de archivo: Estuche 6
Sectores por trozo: 64
Granularidad de error: 64
Método de compresión: desinflar
Nivel de compresión: sin compresión

Información de los medios


Tipo de medio: disco extraíble
Es físico: si
Bytes por sector: 512
Número de sectores: 4156416
Tamaño de medios: 1,9 GiB (2128084992 bytes)

Digerir información hash


MD5: 6662cd15f59767e5eb1378b71dc20f68

134
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

SHA1: b4531adb315a48329c9b05361bf66794dd50ca27

Si ejecuta ewfinfo en archivos recopilados con herramientas distintas de ewfacquire (EnCase en Windows, por
ejemplo), el resultado podría tener este aspecto. Tenga en cuenta el sistema operativo utilizado y
Campos de versión de software utilizada. Estos dan alguna pista sobre cómo se crearon los archivos (EnCase
versión 7 en Windows 7).

root@forensicbox:~# ewfinfo EnCaseImageSample.E01


ewfinfo 20140806

Adquirir información
Descripción: Imagen de prueba
Nombre del examinador: Susan B. Analista
Fecha de adquisición: Vie 17 Feb 13:59:50 2017
Fecha del sistema: Vie Ene 13 16:10:42 2017
Sistema operativo utilizado: Windows 7
Versión de software utilizada: 7.10.05
Clave: N/A
Modelo: ST2500
Número de serie: 03-016831-C
Etiqueta del dispositivo: WT055 12
extensiones: 0

Información de EWF
Formato de archivo: desconocido

Sectores por trozo: 64


Granularidad de error: 64
Método de compresión: desinflar
Nivel de compresión: mejor compresión
Establecer identificador: ff582a89-3aba-cf46-a634-75edf9c15a97

Información de los medios


Tipo de medio: físico
es físico: sí
Bytes por sector: 512
Número de sectores: 250044416
Tamaño de medios: 119 GiB (128022740992 bytes)

Digerir información hash


MD5: 46c4d29a3ba96ffffb8d7690949ddea1b

También tenga en cuenta que el valor MD5 que se muestra es el valor de los datos, NO los archivos de imagen en sí.
Hash los archivos de imagen no le permitirá verificar contra el hash de los medios originales
los archivos E0* contienen metadatos y, por lo tanto, no representan una copia exacta de los medios de origen.
Si desea verificar el hash de los datos después de que se hayan movido, debe usar una herramienta como
ewfverificar.

135
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El hash de datos en archivos EWF requiere una herramienta que reconozca los metadatos asociados con
un archivo EWF y pueda analizar y aplicar hash a los datos originales. Para esto usamos ewfverify.

root@forensicbox:~# ewfverify case1.disk2.E01 ewfverify 20140806

La verificación comenzó el: 08 de julio de 2019 15:24:11


Esto podría demorar un tiempo.

Estado: al 83%.
verificó 1,6 GiB (1785036800 bytes) de un total de 1,9 GiB (2128084992 bytes). finalización en 0 segundo(s)
con 507 MiB/s (532021248 bytes/segundo).

Verificación completada en: 08 de julio de 2019 15:24:15

Lectura: 1,9 GiB (2128084992 bytes) en 4 segundo(s) con 507 MiB/s (532021248 bytes/
,ÿ segundo).

Hash MD5 almacenado en el archivo: 6662cd15f59767e5eb1378b71dc20f68


Hash MD5 calculado sobre datos: 6662cd15f59767e5eb1378b71dc20f68

Valores hash adicionales:


SHA1: b4531adb315a48329c9b05361bf66794dd50ca27

ewfverify: ÉXITO

Este comando simplemente rehace los datos y los compara con el hash ya almacenado en los metadatos
del archivo. Cada vez que mueve datos entre volúmenes, siempre es una buena práctica comprobar que los
datos siguen intactos. ewfverify le permite realizar esta verificación de integridad de manera rápida y
eficiente con archivos EWF.

Ahora, un último comando en el conjunto de herramientas libewf . Hablemos de aquellas situaciones en las
que se le proporcionó un conjunto de archivos de imagen (o archivo) que se obtuvieron utilizando una
herramienta forense popular de Windows. Habrá ocasiones en las que desee leer los metadatos incluidos
con las imágenes, verificar el contenido de las imágenes o exportar o convertir las imágenes a un formato
de flujo de bits (o sin procesar). Una vez más, las herramientas libewf son útiles para esto. Operan en la
línea de comandos de Linux, no requieren ningún otro software especial, licencia o dongle y son muy
rápidos. Usaremos una copia de una imagen de ejercicio práctico de NTFS que veremos más adelante en
nuestros próximos ejercicios avanzados. Los archivos EWF en los que trabajaremos se pueden descargar
usando wget, como lo hemos hecho anteriormente. Una vez descargado, verifique el hash y compare:

root@forensicbox:~# wget http://www.linuxleo.com/Files/NTFS_Pract_2017_E01.tar.gz


...
root@forensicbox:~# sha1sum NTFS_Pract_2017_E01.tar.gz
246c144896c5288369992acc721c95968d2fe9ef NTFS\_Pract\_2017\_E01.tar.gz

136
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Como hemos visto anteriormente con nuestras descargas de software, este archivo tiene una extensión
tar.gz. Eso significa que es un archivo TAR comprimido. Para repasar, la parte tar de la extensión
indica que el archivo se creó con el comando tar (consulte man tar para obtener más información). La
extensión gz indica que el archivo fue comprimido (comúnmente con gzip). Cuando descarga por
primera vez un archivo tar, especialmente de fuentes que no son de confianza, siempre debe echar un
vistazo al contenido del archivo antes de descomprimirlo, extraerlo y escribirlo al azar en su disco. Vea
el contenido del archivo con el siguiente comando:

root@forensicbox:~# tar tzvf NTFS_Pract_2017_E01.tar.gz


NTFS_Pract_2017/
NTFS_Práctica_2017/NTFS_Práctica_2017.E04
NTFS_Práctica_2017/NTFS_Práctica_2017.E02
NTFS_Práctica_2017/NTFS_Práctica_2017.E01
NTFS_Práctica_2017/NTFS_Práctica_2017.E03

El comando tar anterior enumerará (t) y descomprimirá (z) el archivo (f)


NTFS_Práctica_2017_E01.tar.gz. Esto le permite ver dónde se extraerá el archivo y, como muestra el
resultado, hay archivos que se extraerán a un nuevo directorio, NTFS_Pract_2017/, en el directorio
actual. Usaremos el comando tar ampliamente a lo largo de este documento para los archivos
descargados.

Ahora descomponemos las imágenes con la opción tar x y cambiamos al directorio resultante:

root@forensicbox:~# tar xzvf NTFS_Pract_2017_E01.tar.gz


NTFS_Pract_2017/
NTFS_Práctica_2017/NTFS_Práctica_2017.E04
NTFS_Práctica_2017/NTFS_Práctica_2017.E02
NTFS_Práctica_2017/NTFS_Práctica_2017.E01
NTFS_Práctica_2017/NTFS_Práctica_2017.E03

root@forensicbox:~# cd NTFS_Pract_2017/

root@forensicbox:NTFS_Pract_2017/ #

Lo primero que podemos hacer es ejecutar el comando ewfinfo en la imagen, el primer archivo del
conjunto de imágenes. Esto devolverá los metadatos que incluyen la adquisición y la información de
los medios, como hemos visto anteriormente. Aprendemos la versión del software con el que se
crearon las imágenes, junto con la plataforma de recolección, fecha de adquisición, nombre del
examinador que creó la imagen con la descripción y notas. Eche un vistazo a la salida de ewfinfo en
nuestro conjunto de archivos (solo necesita proporcionar el primer archivo en el conjunto como argumento para el coma

root@forensicbox:NTFS_Pract_2017/ # ewfinfo NTFS_Pract_2017.E01 ewfinfo


20140806

137
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Adquirir información
Número de caso: 11-1111-2017
Descripción: Ejercicio Práctico Imagen
Nombre del examinador: Barry J Grundy
Número de evidencia: 11-1111-2017-001
Notas: Esta imagen es para la recuperación de artefactos.
Fecha de adquisición: Lun 1 May 18:19:14 2017
Fecha del sistema: lun 1 mayo 18:19:14 2017
Sistema operativo utilizado: Linux
Versión de software utilizada: 20140608
Clave: N/A

Información de EWF
Formato de archivo: Estuche 6
Sectores por trozo: 64
Granularidad de error: 64
Método de compresión: desinflar
Nivel de compresión: sin compresión
Establecer identificador: f9f1b88f-9ac9-e04f-bfe5-195039426d7c

Información de los medios


Tipo de medio: disco fijo

Es físico: si
Bytes por sector: 512
Número de sectores: 1024000
Tamaño de medios: 500 MiB (524288000 bytes)

Digerir información hash


MD5: eb4393cfcc4fca856e0edbf772b2aa7d

Observe que la última línea en la salida nos proporciona un hash MD5 de los datos en el archivo.
establecer. Nuevamente, no confunda esto con el hash del propio archivo. Un archivo en formato EWF almacena
los datos originales de los medios de los que se tomaron imágenes junto con una serie de controles CRC y
metadatos. El hash de los archivos E01 NO coincidirá con el hash de los medios originales
en la imagen El hash de los medios originales y, por lo tanto, los datos recopilados se registran en el
metadatos del archivo EWF para veri cación posterior.

Puede ver en nuestra salida a continuación que el conjunto de archivos NTFS_Pract_2017.E0* se verifica sin
error. El hash obtenido durante la verificación coincide con el almacenado en el archivo:

root@forensicbox:NTFS_Pract_2017/ # ewfverify NTFS_Pract_2017.E01


ewfverificar 20140806

Verificar comenzó en: 08 de julio de 2019 16:51:06


Esto podría tomar un tiempo.

138
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Verificación completada en: 08 de julio de 2019 16:51:07

Lectura: 500 MiB (524288000 bytes) en 1 segundo(s) con 500 MiB/s (524288000 bytes/
,ÿ segundo).

Hash MD5 almacenado en el archivo: eb4393cfcc4fca856e0edbf772b2aa7d


Hash MD5 calculado sobre datos: eb4393cfcc4fca856e0edbf772b2aa7d

ewfverify: ÉXITO

Ahora veremos ewfexport. Esta herramienta le permite tomar un conjunto de archivos EWF y convertirlo en
un archivo de imagen de flujo de bits, esencialmente eliminando los metadatos y dejándonos con los datos
en formato sin formato, como con dd. Es interesante notar que ewfexport en realidad puede escribir en la
salida estándar, lo que lo hace adecuado para canalizar a otros comandos. Aquí, emitimos el comando con
varias opciones que dan como resultado que el archivo EWF se exporte a una imagen sin formato.

root@forensicbox:NTFS_Pract_2017/ # ewfexport -t NTFS_Pract_2l017 -f raw -u NTFS_Pract_2017.E01


ewfexport 20140806

La exportación comenzó el: 8 de julio de 2019 a las 16:52:49


Esto podría demorar un tiempo.

Exportación completada el: 08 de julio de 2019 16:52:51

Escrito: 500 MiB (524288000 bytes) en 2 segundo(s) con 250 MiB/s (262144000 bytes/
,ÿ segundo).
Hash MD5 calculado sobre datos: eb4393cfcc4fca856e0edbf772b2aa7d
ewfexport: ÉXITO

Usamos la opción -t (objetivo) para escribir en un archivo. La opción -f con raw indica que el formato de
archivo en el que estamos escribiendo es raw, como con la salida dd . Usamos -u para aceptar los valores
predeterminados restantes y evitar una sesión interactiva. Esto da como resultado un solo archivo sin procesar
que tiene el mismo hash que el medio original (consulte la salida del comando md5sum ). También vemos
dieciséis

un archivo .info con formato XML que contiene el valor hash.

root@forensicbox:NTFS_Pract_2017/ # ls -lh NTFS_Pract_2017.raw* -rw-r--r-- 1 usuarios de


barry 500M 8 de julio 16:59 NTFS_Pract_2017.raw -rw-r--r-- 1 usuarios de barry 158 8 de julio
16:59 NTFS_Práctica_2017.raw.info

root@forensicbox:NTFS_Pract_2017/ # md5sum NTFS_Pract_2017.raw


eb4393cfcc4fca856e0edbf772b2aa7d NTFS_Pract_2017.raw

16La salida de este comando puede diferir mucho dependiendo de la versión de libewf que instale. Alguno
los repositorios pueden usar versiones que no agregan la extensión .raw ni proporcionan un archivo .info .

139
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

En este punto, hemos cubierto dd, dc3dd, ewfacquire y métodos comunes para verificar la integridad y
exportar las imágenes recopiladas.

Todas las herramientas que hemos cubierto hasta ahora son excelentes para situaciones ideales, donde
nuestros medios se comportan como esperamos. Además, todos tienen opciones o mecanismos integrados
que permitirían que nuestra adquisición lea más allá (o más precisamente alrededor) de cualquier error de disco
no fatal mientras sincroniza la salida para que la imagen resultante aún pueda usarse. Si bien muchos
profesionales sugieren estas opciones como predeterminadas para ejecutar comandos relacionados con dd ,
tiendo a desaconsejarlas. Algunas de las razones de esto se harán más evidentes en la siguiente sección.

8.7.3 Errores de medios - ddrescue

Ahora que tenemos una comprensión básica de la adquisición de medios y la recopilación de imágenes de
evidencia, ¿qué hacemos si nos encontramos con un error? Suponga que está creando una imagen de disco
con dd y el comando sale a la mitad del proceso con un error de lectura.

Podemos indicarle a dd que intente leer más allá de los errores usando la opción conv=noerror. En términos
básicos, esto le dice al comando dd que ignore los errores que encuentre e intente leer más allá de ellos.
Cuando especificamos la opción sin errores , es una buena idea incluir la opción de sincronización junto con
ella. Esto rellenará la salida dd dondequiera que se encuentren errores y garantizará que la salida se
sincronizará con el disco original. Esto puede permitir el acceso al sistema de archivos y la recuperación de
archivos donde los errores no son fatales. Suponiendo que nuestra unidad en cuestión sea /dev/sdc, el
comando se verá así:

root@forensicbox:~# dd if=/dev/sdc of=image.raw conv=noerror,sync

Sin embargo, me gustaría advertir a los examinadores forenses que no utilicen la opción conv=noerror,sync .
Si bien dd es capaz de leer errores pasados en muchos casos, no está diseñado para recuperar datos de esas
áreas. Hay una serie de herramientas que están diseñadas específicamente para este propósito. Si necesita
usar conv=noerror,sync, entonces está usando la herramienta incorrecta. Eso no quiere decir que no
funcionará como se anuncia (con algunas advertencias), solo que hay mejores opciones, o al menos
consideraciones importantes.

Lo que nos lleva a ddrescue.

Las pruebas han demostrado que las herramientas estándar basadas en dd son simplemente inadecuadas para
adquirir discos que tienen errores reales. Esto NO quiere decir que dd, dc3dd o dcfldd sean inútiles... ni mucho
menos. Simplemente no son óptimos para la recuperación de errores. Es posible que se vea obligado a usar dd
o dc3dd debido a los límites de acceso a herramientas externas o consideraciones de tiempo. Enseñamos dd
en esta guía porque hay casos en los que puede ser la única herramienta disponible para usted. En esos casos,
es importante comprender el uso de las opciones de la línea de comandos para optimizar la recuperación del
disco, independientemente de los errores, para la preservación de la evidencia. Sin embargo, si hay opciones,
quizás una herramienta diferente tenga sentido.

140
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Esta sección no pretende brindar información sobre errores de disco, fallas de medios o tipos de fallas. Tampoco
pretende implicar que alguna herramienta sea mejor o peor que cualquier otra. Simplemente describiré la funcionalidad
básica y dejaré que el lector prosiga con los detalles.

Primero, comencemos con algunos de los problemas que surgen con el uso de herramientas comunes basadas en dd .
En su mayor parte, estas herramientas adoptan un enfoque lineal para la generación de imágenes, lo que significa que
comienzan al principio del archivo de entrada y leen bloque por bloque hasta llegar al final del archivo.
Cuando se encuentra un error, la herramienta fallará con un error de entrada/salida, o si se pasa un parámetro como
conv=noerror , ignorará los errores e intentará leerlos (u omitirlos), continuando leyendo bloque por bloquear hasta
que encuentre datos legibles nuevamente.
Aquí hay un comando dd simple en un disco con errores. El disco tiene 41943040 sectores:

root@forensicbox:~# blockdev -getsz /dev/sdd 41943040

root@forensicbox:~# dd if=/dev/sdd of=diskimage.raw dd: error al leer '/dev/


sdd': error de entrada/salida 12840+0 registros en

12840+0 registros fuera

6574080 bytes (6,6 MB, 6,3 MiB) copiados, 8,48712 s, 775 kB/s

El comando dd anterior solo pudo leer 12840 sectores (que son 6574080 bytes, como muestra la salida dd ). El mismo
comando, esta vez usando conv=noerror,sync ignorará el error, rellenará los sectores de error con bytes nulos y
continuará:

root@forensicbox:~# dd if=/dev/sdd of=diskimage.raw conv=noerror,sync dd: error al leer '/dev/sdd': error


de entrada/salida 12840+0 registros en

12840+0 registros fuera

6574080 bytes (6,6 MB, 6,3 MiB) copiados, 7,83969 s, 839 kB/s dd: error al leer '/dev/sdd':
error de entrada/salida 12840+1 registros en

12841+0 registros fuera

6574592 bytes (6,6 MB, 6,3 MiB) copiados, 11,6881 s, 563 kB/s dd: error al leer '/dev/sdd':
error de entrada/salida 12840+2 registros en

12842+0 registros de salida

6575104 bytes (6,6 MB, 6,3 MiB) copiados, 15,5426 s, 423 kB/s dd: error al leer '/dev/sdd':
error de entrada/salida 12840+3 registros en

12843+0 registros fuera

6575616 bytes (6,6 MB, 6,3 MiB) copiados, 19,4103 s, 339 kB/s dd: error al leer '/dev/sdd':
error de entrada/salida 12840+4 registros en

12844+0 registros fuera

6576128 bytes (6,6 MB, 6,3 MiB) copiados, 23,2758 s, 283 kB/s

141
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

dd: error al leer '/dev/sdd': error de entrada/salida 12840+5 registros en

12845+0 registros fuera

6576640 bytes (6,6 MB, 6,3 MiB) copiados, 27,1286 s, 242 kB/s dd: error al leer '/dev/sdd':
error de entrada/salida 12840+6 registros en

12846+0 registros fuera

6577152 bytes (6,6 MB, 6,3 MiB) copiados, 30,9714 s, 212 kB/s dd: error al leer '/dev/sdd':
error de entrada/salida 12840+7 registros en

12847+0 registros fuera

6577664 bytes (6,6 MB, 6,3 MiB) copiados, 34,8038 s, 189 kB/s 41943032+8 registros en

41943040+0 registros fuera

21474836480 bytes (21 GB, 20 GiB) copiados, 1112,08 s, 19,3 MB/s

Lo que obtiene al final de este comando es una imagen de todo el disco, pero con los sectores de error llenos
(sincronizados) con ceros. Esto se hace para mantener las compensaciones correctas dentro de los sistemas
de archivos, etc.

Obviamente, el simple fracaso (abandonar cuando se encuentran errores) no es bueno. Cualquier dato en
áreas legibles más allá de los errores se perderá. El problema de ignorar los errores e intentar leerlos (usando
opciones como conv=noerror) es que estamos estresando aún más un disco que posiblemente ya esté a
punto de fallar por completo. El quid de la cuestión es que puede tener pocas oportunidades de leer un disco
que tiene sectores defectuosos grabados. Si hay un defecto físico real, el simple hecho de leer las áreas
defectuosas puede empeorar las cosas y provocar una falla en el disco antes de que se recolecten otras áreas
viables del mismo. Todo esto se aplica, por supuesto, a los discos con almacenamiento físico. El
almacenamiento de estado sólido es otra cuestión completamente diferente.

Entonces, cuando pasamos conv=noerror a un comando de imagen, en realidad estamos pidiendo a nuestras
herramientas de imagen que eliminen las áreas defectuosas. ¿Por qué no omitir inicialmente las secciones
malas por completo, ya que en muchos casos la recuperación puede ser poco probable? En su lugar,
deberíamos concentrarnos en recuperar datos de áreas del disco que son buenas. Una vez que se adquieren
los datos buenos, podemos regresar e intentar recopilar datos de las áreas de error, preferiblemente con un
algoritmo de recuperación diseñado con un propósito.

En pocas palabras, esa es la filosofía detrás de ddrescue. Si se usa correctamente, ddrescue leerá primero
las partes saludables de un disco y luego volverá al modo de recuperación para intentar leer los datos de los
sectores defectuosos. Lo hace mediante el uso de un registro muy robusto, denominado 'archivo de mapa'.
Esto permite que ddrescue reanude cualquier trabajo de creación de imágenes en cualquier punto, dado un
archivo de mapa desde el que trabajar. Este es un punto importante (quizás el más importante) sobre el uso
de ddrescue , es decir, con un archivo de mapa nunca necesita volver a leer sectores ya recuperados con éxito.
Cuando ddrescue hace referencia al archivo del mapa en ejecuciones sucesivas, llena los huecos, no rehace
el trabajo ya terminado.

142
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ddrescue se instala de forma predeterminada en Slackware Linux (para instalaciones completas), pero consulte
con su distribución preferida para determinar la disponibilidad.

La documentación para ddrescue es excelente. El manual detallado está en una página de información . El
comando info ddrescue le dará un excelente comienzo para comprender cómo funciona este programa, incluidos
ejemplos e ideas detrás del algoritmo utilizado. Repasaré el proceso aquí, pero le recomiendo que lea la página de
información de ddrescue antes de intentar usarla en un caso.

La primera consideración al usar cualquier software de recuperación es que el kernel de Linux debe poder acceder
al disco. Si la unidad no aparece en la estructura /dev , entonces no hay forma de que herramientas como ddrescue
funcionen.

A continuación, debemos tener un plan para recuperar la mayor cantidad de datos que podamos de un disco
defectuoso. La filosofía que prevalece en ddrescue es que primero debemos intentar obtener todos los datos correctos.
Esto difiere de las herramientas normales basadas en dd , que simplemente intentan obtener todos los datos a la
vez de forma lineal. ddrescue usa el concepto de dividir los errores. En otras palabras, cuando se encuentra un
área de sectores defectuosos, los errores se dividen hasta que las áreas buenas se visualizan correctamente y las
áreas ilegibles se marcan como malas. Finalmente, ddrescue intenta volver a intentar las áreas defectuosas al
volver a leerlas hasta que obtengamos datos o fallemos después de una cierta cantidad de intentos específicos.

Hay una serie de opciones ingeniosas para drescue que permiten al usuario intentar obtener la parte más importante
del disco primero, y luego avanzar hasta obtener la mayor cantidad posible del disco. Las áreas de las que se
obtienen imágenes con éxito no necesitan leerse más de una vez. Como se mencionó anteriormente, esto es
posible gracias a un archivo de mapa robusto. El archivo de mapa se escribe periódicamente durante el proceso de
generación de imágenes, de modo que, incluso en caso de interrupción, la sesión se puede reiniciar, manteniendo
al mínimo los esfuerzos de generación de imágenes duplicados y, por lo tanto, el acceso al disco.

Dado que aquí nos ocupamos de la adquisición forense, concentraremos todos nuestros esfuerzos en obtener el
disco completo, incluso si eso significa varias ejecuciones. Los siguientes ejemplos se utilizarán para ilustrar cómo
funcionan las opciones más importantes para el examinador forense. Nos concentraremos en detallar el archivo de
mapa utilizado por ddrescue para que el usuario pueda ver qué está pasando con la herramienta y cómo funciona.

Veamos un ejemplo simple del uso de ddrescue en un disco pequeño sin errores, para comenzar.
La forma más sencilla de ejecutar ddrescue es proporcionar el archivo de entrada, el archivo de salida y un nombre
para nuestro archivo de mapa. Tenga en cuenta que no hay if= o of=. Para ver bien cómo funciona el archivo de
mapa, interrumpiremos nuestro proceso de generación de imágenes a la mitad, revisaremos el archivo de mapa
para ilustrar cómo se maneja una interrupción y luego reanudaremos la generación de imágenes.

root@forensicbox:~# ddrescue /dev/sdb ddres_image.raw ddres_map.txt GNU


ddrescue 1.24
Presione Ctrl-C para interrumpir
ipos: 1091 MB, no recortado: 0 B, velocidad actual: 4718 kB/s
opos: 1091 MB, no raspado: 0 B, velocidad media: 13473 kB/s

143
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

no probado: 1036 MB, sector defectuoso: 0 B, Tasa de error: 0 B/s


rescató: 1091 MB, áreas incorrectas: 0, 0, tiempo de ejecución: 1m 20s
porcentaje rescatado: 51,28 %, errores de lectura: tiempo restante: tiempo 1m 19s
desde la última lectura exitosa: n/A
Copiando bloques no probados... Pase 1 (hacia delante)^C
Interrumpido por el usuario

Aquí usamos /dev/sdb como nuestro archivo de entrada, escribimos la imagen en ddres_image.raw y escribimos el
asigne el archivo a ddres_map.txt. Tenga en cuenta que la salida muestra el progreso de la creación de imágenes de forma predeterminada,
dándonos un conteo continuo de la cantidad de datos copiados o "rescatados", junto con un conteo de
el número de errores encontrados (en este caso cero) y la velocidad de creación de imágenes. El proceso
se interrumpió justo cuando se había completado aproximadamente el 50 %, con la combinación de teclas <ctrl-c>.

Ahora echemos un vistazo a nuestro archivo de mapa:

root@forensicbox:~# cat ddres_map.txt


# archivo de mapas. Creado por GNU ddrescue versión 1.24
# Línea de comando: ddrescue /dev/sdb ddres_image.raw ddres_map.txt
# Hora de inicio: 2019-07-09 08:32:18
# Hora actual: 2019-07-09 08:33:38
# Copiando bloques no probados... Paso 1 (adelante)
# actual_pos estado_actual actual_contraseña
0x410D0000 1 ?
# posición estado de tamaño
0x00000000 0x410D0000 +
0x410D0000 0x3DCB0000 ?

El archivo de mapa nos muestra el estado actual de la adquisición 17. Las líneas que comienzan con un # son
comentarios Hay dos secciones de nota. La primera línea sin comentarios muestra el actual
estado de la imagen mientras que la segunda sección (dos líneas, en este caso) muestra el estado de
varios bloques de datos. Los valores están en hexadecimal y ddrescue los utiliza para mantener
seguimiento de aquellas áreas del dispositivo de destino que tienen errores marcados, aquellas áreas que tienen
ya han sido leídos y escritos con éxito, y los que quedan por leer. El estado
Los símbolos que discutiremos aquí (tomados de la página de información ) son los siguientes:

Estado del personaje


? no probado
* área mala - no recortada

/ zona mala - no raspada


- bloque(s) de hardware defectuoso(s)
+ terminado

En este caso, solo nos preocupa el ? y el +. Esencialmente, cuando la copia

17La página de información de ddrescue tiene una explicación muy detallada de la estructura de archivos del mapa.

144
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

el proceso se interrumpe, el registro se usa para decirle a ddrescue dónde se dejó la copia y qué ,
ya ha sido copiado (o marcado de otra manera). La primera sección (estado) por sí sola puede ser
,
suficiente en este caso, ya que ddrescue solo necesita retomar donde lo dejó, pero en el caso de un
disco con errores, se requiere la sección de bloque para que ddrescue pueda realizar un seguimiento de las áreas que aún
es necesario volver a intentarlo, ya que se buscan buenos datos entre los malos.

Traducido, nuestro registro nos diría lo siguiente (reducido a la posición y el estado):

#posición actual estado actual


0x410D0000 ?

El estado muestra que el proceso de generación de imágenes actual está copiando datos en el conjunto de bytes 1091371008
(0x410D0000). En nuestro primer pase, esto indica los bloques no probados.

# posición estado de tamaño


0x00000000 0x410D0000 +
0x410D0000 0x3DCB0000 ?

Los bloques de datos del byte o set 0 (0x00000000) de tamaño 1091371008 bytes (0x410D0000)
están terminados.

Los bloques de datos de compensación 1091371008 (0x410D0000) de tamaño 1036713984 bytes (0x3DCB0000)
todavía no se prueban.

El tamaño de nuestro archivo de imagen parcial coincide con el tamaño del bloque de datos marcado como finalizado con
el símbolo + en nuestro archivo de registro (tamaño en negrita para énfasis):

root@forensicbox:~# ls -l ddres_image.raw
-rw-r--r-- 1 raíz raíz 1091371008 9 de julio 08:33 ddres_image.raw

Podemos continuar y completar la operación de copia ahora simplemente invocando el mismo comando. Al especificar los
mismos archivos de entrada y salida, y al proporcionar el archivo de mapa, decimos
ddrescue para continuar donde lo dejó:

root@forensicbox:~# ddrescue /dev/sdb ddresi_image.raw ddres_map.txt


GNU drescue 1.24
Presione Ctrl-C para interrumpir
Estado inicial (leer del archivo de mapa)
rescatado: 1091 MB, probado: 0 B, sector defectuoso: 0 B, áreas defectuosas: 0

Estado actual
ipos: 2128 MB, no recortado: 0 B, velocidad actual: 2555 kB/s
opos: 2128 MB, no raspado: 0 B, velocidad media: 13640 kB/s

145
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

no probado: 0 B, sector defectuoso: 0 B, Tasa de error: 0 B/s


rescató: 2128 MB, áreas incorrectas: 0, 0, tiempo de ejecución: 1m 15s
porcentaje rescatado: 100,00 %, errores de lectura: tiempo restante: tiempo n/A
desde la última lectura exitosa: n/A
Acabado

root@forensicbox:~# cat ddres_map.txt


# archivo de mapas. Creado por GNU ddrescue versión 1.24
# Línea de comando: ddrescue /dev/sdb ddres_image.raw ddres_map.txt
# Hora de inicio: 2019-07-09 12:41:25
# Hora actual: 2019-07-09 12:42:40
# Acabado
# actual_pos estado_actual actual_contraseña
0x7ED70000 1 +
# posición estado de tamaño
0x00000000 0x7ED80000 +

root@forensicbox:~# echo "ibase=16;7ED80000" | antes de Cristo


2128084992

root@forensicbox:~# ls -l ddres_image.raw
-rw-r--r-- 1 raíz raíz 2128084992 9 de julio 12:42 ddres_image.raw

La sesión anterior muestra la salida del comando ddrescue completado seguido por el
contenido del archivo de mapa. El comando ddrescue muestra la línea de estado inicial que indica
donde lo dejamos y luego
, el estado actual hasta completar la imagen. El comando de eco
convierte nuestro valor hexadecimal a decimal, solo para que podamos ilustrar que el total rescatado es
igual en tamaño al tamaño de la imagen.

El verdadero poder del archivo de mapa radica en el hecho de que podemos iniciar y detener el proceso de creación de imágenes.
según sea necesario y potencialmente atacar la recuperación desde diferentes direcciones (usando la opción -R
para leer el disco al revés) hasta que haya recopilado tantos datos originales como sea posible.
puedes. Por ejemplo, si tiene dos discos idénticos, con datos duplicados, y ambos tienen mala
o sectores defectuosos, probablemente podría reconstruir una imagen completa mediante la creación de imágenes tanto con
ddrescue y usando el mismo archivo de mapa (y archivo de salida). Una vez recuperado y registrado como
por ejemplo, en el archivo de mapa, no se vuelve a acceder a los sectores. Esto limita la tensión en el disco.

Usando un disco con errores conocidos, invocaremos ddrescue con algunas opciones adicionales. En esto
caso, es posible que haya comenzado a crear imágenes de un disco sujeto usando una herramienta común como dd o dc3dd, y
encontró que la copia falló con errores. Sabiendo esto, cambiaré a usar ddrescue. los
Las opciones en el siguiente comando son -i0 para indicar que comienza en o set 0. O set 0 es el valor predeterminado,
pero estoy siendo explícito aquí. Hay situaciones en las que es posible que desee comenzar en un diferente
o establecer y luego volver... el archivo de mapa permite esto fácilmente. La opción -d significa que
van a acceder directamente al disco, sin pasar por el caché del kernel. A continuación, la opción -N es
proporcionado para evitar que ddrescue recorte las áreas defectuosas que se encuentran. Esta opción
permite a ddrescue iniciar el proceso de recuperación recopilando buenos datos primero, perturbando el

146
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

áreas de error lo menos posible.

root@forensicbox:~# ddrescue -i0 -d -N /dev/sdd bad_disk.raw bad_log.txt


GNU drescue 1.24
Presione Ctrl-C para interrumpir
ipos: 6619 kB, no recortado: 6619 kB, no 65536 B, velocidad actual: 851 kB/s
opos: raspado: 0 B, velocidad media: 52634 kB/s
no probado: 0 B, sector defectuoso: 0 B, tasa de error: 0 B/s
rescatado: 21474 MB, áreas defectuosas: 0, tiempo de ejecución: 6m 47s
pct rescatado: 99,99\%, errores de lectura: 1, tiempo restante: tiempo n/A
desde la última lectura exitosa: n/A
Acabado [1

root@forensicbox:~# gato bad_log.txt

# archivo de mapas. Creado por GNU ddrescue versión 1.24


# Línea de comando: ddrescue -i0 -d -N /dev/sdd bad_disk.raw bad_log.txt
# Hora de inicio: 2019-07-09 12:58:21
# Hora actual: 2019-07-09 13:05:08
# Acabado
# actual_pos estado_actual actual_contraseña
0x00660000 2 +
# posición estado de tamaño
0x00000000 0x00640000 +
0x00640000 0x00010000 *
0x00650000 0x4FF9B0000 +

root@forensicbox:~# echo "ibase=16;00010000" | antes de Cristo


65536

El resultado anterior muestra un par de cosas (resaltados para énfasis). tenemos el completo
ejecución inicial con la opción -N , y el resultado muestra que tenemos 65536 bytes no recortados que indican un área ,
de errores. El archivo de mapa muestra la posición del área no copiada del disco.
(o set 0x00640000) y un tamaño de 0x00010000 (65536 bytes). El estado de esta área se indica
con un asterisco. Tenga en cuenta que los 65536 bytes son exactamente 128 sectores, y este es el valor predeterminado
tamaño de clúster utilizado por ddrescue. Esto no quiere decir que haya 128 sectores que no puedan ser
leer. Simplemente significa que no se pudo leer todo el clúster y la opción -N impidió
trimming , o reducir los sectores a trozos legibles más pequeños. El tamaño del conglomerado puede ser
controlado con la opción --cluster-size=X , donde X es el número de sectores en un clúster.
Ahora tenemos una imagen parcial.

Ahora podemos continuar con la creación de imágenes con el mismo archivo de entrada y salida, y el mismo mapa.
le, pero esta vez eliminamos la opción -N , lo que permite recortar las áreas de error, y agregamos
la opción -r para especificar el número de reintentos cuando se encuentra un sector defectuoso, que es
tres en este caso.

147
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# ddrescue -r3 -d /dev/sdd bad_disk.raw bad_log.txt


GNU drescue 1.24
Presione Ctrl-C para interrumpir
Estado inicial (leer del archivo de mapa)
rescatado: 21474 MB, probado: 65536 B, sector defectuoso: 0 B, áreas defectuosas: 0

Estado actual
ipos: 6576 kB, no recortado: 6576 0 B, tasa actual: 0 B/s
opos: kB, no raspado: 0 B, tasa media: 643 B/s
no probado: 0 B, sector defectuoso: 3072 B, tasa de error: 1, 24, 128 B/s
rescatado: 21474 MB, áreas defectuosas: tiempo restante:tiempo de ejecución: 1m 37s
pct rescatado: 99,99\%, errores de lectura: n/A
tiempo desde la última lectura exitosa: 1m 25s

root@forensicbox:~# gato bad_log.txt


# archivo de mapas. Creado por GNU ddrescue versión 1.24
# Línea de comando: ddrescue -r3 -d /dev/sdd bad_disk.raw bad_log.txt
# Hora de inicio: 2019-07-09 14:09:06
# Hora actual: 2019-07-09 14:10:43
# Acabado
# actual_pos estado_actual actual_contraseña
0x00645A00 3 +
# posición estado de tamaño
0x00000000 0x00645000 +
0x00645000 0x00000C00 -
0x00645C00 0x4FF9BA400 +

root@forensicbox:~# echo "ibase=16;00000C00" | antes de Cristo


3072

root@forensicbox:~# echo "3072/512" | antes de Cristo


6

El resultado muestra que nuestras áreas no recortadas ahora son 0 y el tamaño del error es 3072 bytes.
Mirando el archivo del mapa, vemos que hay una sección del disco que está marcada con el
-
, lo que indica bloques de hardware defectuosos, que en este caso son irrecuperables. El tamaño en el
map le (0x00000C00) coincide con el sector defectuoso en la salida (3072). Esto significa que tenemos 6
sectores defectuosos (512 bytes cada uno).

Si bien no pudimos obtener el disco completo en este ejemplo, esperamos que reconozca el
bene cios del enfoque que tomamos usando ddrescue para obtener los datos correctos primero mientras se recupera
tanto como podamos antes de acceder y potencialmente causar daño adicional a las áreas defectuosas
del disco

148
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.8 Imágenes por cable

Puede haber ocasiones en las que desee o necesite adquirir una imagen de una computadora utilizando
un disco de arranque y conectividad de red. La mayoría de las veces, este enfoque se usa con un disco
de arranque de Linux en la máquina en cuestión (la máquina de la que va a crear una imagen). Otra
computadora, la plataforma de recolección de imágenes, está conectada a través de un concentrador o
conmutador de red; o a través de un cable cruzado. Este tipo de adquisiciones pueden incluso tener lugar
en todo el país o en cualquier parte del mundo. Las razones y aplicaciones de este enfoque van desde el
nivel de acceso físico al hardware y problemas de interfaz hasta los recursos locales. Como ejemplo,
puede encontrarse con una máquina que tiene una interfaz de unidad que es incompatible con su equipo.
Si no hay puertos externos (USB, por ejemplo), es posible que deba recurrir a la interfaz de red para
transferir datos. Por lo tanto, la unidad se deja en su lugar y su plataforma de recolección se conecta a
través de un concentrador, un interruptor o un cable cruzado. Obviamente, el camino más seguro entre el
sujeto y la plataforma de recolección es el más deseable. Siempre que sea posible, usaría un cable
cruzado y un concentrador pequeño. Tenga en cuenta la seguridad y la integridad de sus datos si intenta
transferir evidencia a través de una empresa o una red externa. Aquí nos concentraremos en la mecánica
y en los comandos básicos necesarios. Como siempre, les insto a que me sigan.

Primero, aclaremos algo de terminología para el propósito de nuestra discusión aquí. En este caso, la
computadora de la que queremos obtener una imagen se denominará computadora en cuestión. La
computadora en la que estamos escribiendo la imagen se denominará estación de trabajo de recopilación.

Para lograr imágenes en toda la red, necesitaremos configurar nuestra estación de trabajo de recolección
para "escuchar" los datos de nuestra computadora en cuestión. Hacemos esto usando netcat, el comando
nc . La configuración básica se parece a esta imagen: Una vez que tenga la computadora en cuestión

Figura 8: Ejemplo de diagrama de adquisición de red

arrancado con un CD de arranque de Linux (preferiblemente uno que esté configurado teniendo en cuenta el análisis forense). lo harás

149
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

necesita asegurarse de que las dos computadoras estén con guradas en la misma red y puedan comunicarse.

La comprobación y con guración de las interfaces de red se realiza con el comando ifconfig (con guración de
interfaz). Si ejecuta ifconfig -a, obtendrá una lista de interfaces y su configuración actual (si corresponde). En mi
estación de trabajo de recolección, para acortar la salida, ejecutaré el comando en la interfaz de red (eth0)
directamente:

root@forensicbox:~# ifconfig eth0 eth0:


flags=4099<UP, BROADCAST, MULTICAST> mtu 1500
éter a4:4c:c8:14:b7:cb txqueuelen 1000 (Ethernet)
Paquetes RX 0 bytes 0 (0.0 B)
Errores de RX 0 descartados 0 desbordamientos 0
trama 0 Paquetes de TX 0 bytes 0 (0,0 B)
Errores de TX 0 descartados 0 desbordamientos 0 operador 0 colisiones
0 interrupción del dispositivo 16 memoria 0xed400000-ed420000

En este momento, la salida no muestra ninguna dirección IPv4 y la interfaz eth0 está inactiva. Puedo darle una
dirección simple con el comando ifconfig nuevamente, esta vez especificando algunas configuraciones simples:

root@forensicbox:~# ifconfig eth0 192.168.0.1 máscara de red 255.255.255.0

root@forensicbox:~# ifconfig eth0 eth0:


flags=4099<UP, BROADCAST, MULTICAST> mtu 1500
inet 192.168.0.1 máscara de red 255.255.255.0 transmisión 192.168.0.255
éter a4:4c:c8:14:b7:cb txqueuelen 1000 (Ethernet)
Paquetes RX 0 bytes 0 (0.0 B)
Errores de RX 0 descartados 0 desbordamientos 0
trama 0 Paquetes de TX 0 bytes 0 (0,0 B)
Errores de TX 0 descartados 0 desbordamientos 0 operador 0 colisiones
0 interrupción del dispositivo 16 memoria 0xed400000-ed420000

Ahora, el resultado anterior muestra que la interfaz está activa, y la dirección ahora es 192.168.0.1, y la máscara de
red y la dirección de transmisión también están configuradas. Por ahora, eso es todo para nuestra estación de trabajo
de recolección en lo que respecta a la configuración simple.

En nuestra estación de trabajo en cuestión, necesitaremos iniciarla con un disco de inicio adecuado (o una memoria
USB de inicio, suponiendo que tenga acceso a un puerto USB y la capacidad de iniciar desde él). Llevo varios
conmigo, y casi cualquiera de ellos funcionará siempre que tenga un conjunto de herramientas robusto. Una vez que
inicie el sistema en cuestión, repita los pasos anteriores para configurar una interfaz de red simple, asegurándose de
que las dos computadoras estén conectadas físicamente a través de un cable cruzado, un concentrador o algún otro
medio. Tenga en cuenta el cambio de aviso aquí para ilustrar que estamos trabajando en la computadora SUJETO
ahora (el nombre de host es bootdisk), y no en nuestro sistema de recopilación:

root@bootdisk:~# ifconfig eth0 192.168.0.2 máscara de red 255.255.255.0

150
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@bootdisk:~# ifconfig eth0 eth0:


flags=4163<UP, BROADCAST, RUNNING, MULTICAST> mtu 1500
inet 192.168.0.2 máscara de red 255.255.255.0 transmisión 192.168.0.255
éter 08:00:27:99:d6:30 txqueuelen 1000 (Ethernet)
Paquetes RX 73 bytes 11716 (11,4 KiB)
Errores de RX 0 descartados 0 desbordamientos 0
marco 0 Paquetes de TX 16 bytes 1392 (1,3 KiB)
Errores de TX 0 caídas 0 excesos 0 operador 0 colisiones 0

Ahora tenemos las direcciones IP asignadas de nuestros sistemas en una red local:

Asunto Computadora: 192.168.0.2


Estación de trabajo de recolección: 192.168.0.1

Entonces podemos ver si podemos comunicarnos con nuestra estación de trabajo de recolección de evidencia
(192.168.0.1 ,ÿ ) usando el comando ping (que interrumpimos con ctrl-c) 18:

root@bootdisk:~# ping 192.168.0.1 64


bytes desde 192.168.0.1: icmp_seq=1 ttl=64 time=39.5 ms 64 bytes
desde 192.168.0.1: icmp_seq=2 ttl=64 time=3.05 ms 64 bytes desde
192.168.0.1 : icmp_seq=3 ttl=64 tiempo=282 ms 64 bytes de 192.168.0.1:
icmp_seq=4 ttl=64 tiempo=203 ms 64 bytes de 192.168.0.1: icmp_seq=5
ttl=64 tiempo=25,8 ms 64 bytes de 192.168. 0.1: icmp_seq=6 ttl=64
tiempo=350 ms ^C

--- Estadísticas de ping 192.168.0.1 --- 6


paquetes transmitidos, 6 recibidos, 0% de pérdida de paquetes, tiempo
6009ms rtt min/avg/max/mdev = 3.049/167.451/349.541/131.698 ms

Ahora que tenemos ambas computadoras hablando, podemos ser nuestra imagen. Compruebe el hash del disco
sujeto:

root@bootdisk:~# sha1sum/dev/sda
0dec26535e6264544488c08a65cefda22ced0f66

8.8.1 Sobre el cable - dd

El siguiente paso es abrir un puerto de "escucha" en la computadora de recolección. Haremos esto en nuestro
sistema de recolección de evidencia con nc (nuestra utilidad netcat ), asegurándonos de tener un

18si su comando ping falla, asegúrese de verificar y ver si ICMP está deshabilitado a través de rc.firewall como se describe
en nuestra sección de con guración de estaciones de trabajo.

151
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

sistema de archivos para almacenar la imagen. En este caso, estamos usando una unidad USB externa montada en /
mnt/evidence (en la estación de trabajo de recopilación) para almacenar nuestra imagen:

root@forensicbox:~# nc -l -p 2525 | dd of=/mnt/evidence/net_dd.raw

...el comando no devuelve nada hasta que se inicia


el proceso de recopilación en la computadora en cuestión

Este comando abre una sesión de escucha de netcat (nc) (-l) en el puerto TCP 2525 (-p 2525) y canaliza cualquier
tráfico que pase por ese puerto al comando dd (con solo el indicador of=), que escribe el archivo . /mnt/evidence/
net_dd.raw.

Ahora, en la computadora en cuestión (observe el símbolo del sistema con el disco de arranque del nombre de
host), emitimos el comando dd . En lugar de darle al comando un parámetro de archivo de salida usando of=,
canalizamos la salida del comando dd a netcat (nc) y lo enviamos a nuestro puerto de escucha (2525) en la
computadora de recolección en la dirección IP 192.166.0.1.

root@bootdisk~# dd if=/dev/sda | nc 192.168.0.1 2525

... de nuevo el comando no devuelve nada

Este comando canaliza la salida de dd directamente a nc, dirigiendo la imagen a través de la red al puerto TCP 2525
en el host 192.168.0.1 (la dirección IP de nuestro cuadro de recopilación). Si quiere usar opciones dd como
conv=noerror,sync o bs=x, entonces hágalo en el lado dd de la canalización.

Una vez que se complete la creación de imágenes19, veremos que los comandos en ambos extremos parecen
colgarse. Después de recibir nuestra salida de finalización de dd en la computadora en cuestión (registros de entrada/
registros de salida), podemos eliminar el nc escuchando en nuestro cuadro de colección con un simple <ctrl-c>.

root@bootdisk:~#
41943040+0 registros en
41943040+0 registros fuera

21474836480 bytes (21 GB, 20 GiB) copiados, 3081,68 s, 7,0 MB/s

Cuando vea esto en la computadora en cuestión, usaría <ctrl-c>.

root@forensicbox:~# nc -l -p 2525 | dd of=/mnt/evidence/net_dd.raw ^C <- Hemos


usado <ctrl-c> para finalizar el proceso 34410182+9694042 registros en

41943040+0 registra
21474836480 bytes (21 GB, 20 GiB) copiados, 24497 s, 877 kB/s

19Puede agregar la opción de estado a dd en el lado del asunto si desea ver el progreso.

152
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Esto debería devolver nuestras indicaciones en ambos lados de las conexiones. A continuación, debe comprobar la
imagen resultante en la estación de trabajo de recopilación para ver si coinciden.

root@forensicbox:~# sha1sum /mnt/evidence/net_dd.raw


0dec26535e6264544488c08a65cefda22ced0f66 /mnt/evidence/net_dd.raw

Nuestra coincidencia de hash y nuestra adquisición de red fue exitosa.

8.8.2 Por cable - dc3dd

Como discutimos anteriormente, hay una serie de herramientas que podemos usar para obtener imágenes que
brindan un enfoque más orientado a la ciencia. dc3dd es una opción tan buena para imágenes inalámbricas como
lo es en discos locales. También tiene cierta flexibilidad con dc3dd en el sentido de que incluso si su disco de
arranque no viene con él instalado, aún puede usar todas sus funciones en la computadora de recolección de
evidencia.

dc3dd hace toda su magia en el lado de salida del proceso de adquisición (a menos que esté adquiriendo desde
conjuntos de archivos o alguna otra fuente no estándar). Esto significa que podemos usar dd simple en nuestra
computadora en cuestión (usando el disco de arranque) para adquirir el disco y transmitir el contenido a través de
nuestra tubería netcat, y aún permitir que dc3dd en nuestra máquina de recolección maneje el hash, la división y el
registro. La mayoría de las opciones y parámetros de dc3dd funcionan en el flujo de salida. Entonces, mientras que
nuestro proceso de escucha en el sistema de recopilación usará comandos dc3dd , el sistema sujeto puede usar
los mismos comandos dd que usamos antes.

En el sistema de recopilación, configuremos un proceso de escucha que use dc3dd para dividir el flujo de datos
entrantes en fragmentos de 2 GB y registre la salida en nc.dc3dd.raw. Tan pronto como iniciemos nuestro comando,
dc3dd se iniciará y esperará la entrada del puerto de escucha (2525):

root@forensicbox:~# nc-l -p 2525 | dc3dd ofs=/mnt/evidence/net_dc3dd.000ofsz=4G log=/mnt/


evidence/net_dc3dd.log
dc3dd 7.2.646 comenzó en 2019-07-13 17:06:22 -0400
opciones compiladas:
línea de comando: dc3dd ofs=/mnt/evidence/net_dc3dd.000 ofsz=4G log=/mnt/evidence/ ,ÿ
net_dc3dd.log tamaño del sector: 512 bytes (supuesto) 1324389536 bytes (1.2 G) copiado
(?? %), 207 s, 6,1 M/s ... la imagen continúa

La salida de dc3dd comenzará inmediatamente, pero permanecerá en 0 bytes hasta que reciba la entrada a través
de la tubería. Tan pronto como inicie el proceso de generación de imágenes en la máquina en cuestión, verá que el
comando dc3dd en la máquina de escucha comienza a procesar los datos entrantes. Nuevamente, observe que
estamos usando dd simple en el cuadro de asunto para simplemente transmitir bytes a través de la tubería. dc3dd
se hace cargo de la máquina de recolección para implementar nuestras opciones y registro de dc3dd .

153
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@bootdisk:~# dd if=/dev/sda | nc 192.168.0.1 2525

Cuando se completa la transferencia, podemos ver los archivos resultantes y el registro dc3dd en nuestra
máquina de recopilación.

root@forensicbox:~# ls -lh /mnt/evidence/net_dc3dd.* -rw-r--r-- 1


root root 4.0G 13 de julio 17:16 /mnt/evidence/net_dc3dd.000 -rw-r-- r-- 1 root root
4.0G 13 de julio 17:28 /mnt/evidence/net_dc3dd.001 -rw-r--r-- 1 root root 4.0G 13 de
julio 17:36 /mnt/evidence/net_dc3dd.002 -rw -r--r-- 1 raíz raíz 4.0G 13 de julio 17:45 /
mnt/evidence/net_dc3dd.003 -rw-r--r-- 1 raíz raíz 4.0G 13 de julio 17:55 /mnt/evidence/
net_dc3dd .004 -rw-r--r-- 1 raíz raíz 438 13 de julio 17:57 /mnt/evidence/net_dc3dd.log

root@forensicbox:~# cat /mnt/evidence/net_dc3dd.log dc3dd


7.2.646 comenzó el 2019-07-13 17:06:22 -0400
opciones compiladas:
línea de comando: dc3dd ofs=/mnt/evidence/net_dc3dd.000 ofsz=4G log=/mnt/evidence/ ,ÿ
net_dc3dd.log tamaño del sector: 512 bytes (supuesto) 21474836480 bytes (20 G) copiado (??
%), 3045,31 s, 6,7 M/s

resultados de entrada para el archivo


'stdin': 41943040 sectores en

resultados de salida para archivos '/mnt/evidence/net_dc3dd.000':


41943040 sectores fuera

dc3dd abortado el 2019-07-13 17:57:07 -0400

Podemos ver que el registro de dc3dd finalizó con un mensaje abortado porque tuvimos que detener
manualmente el proceso de escucha (con ctrl-c) ya que en este caso dc3dd no está manejando la entrada
en sí, sino que solo acepta la transmisión a través de netcat . dígale cuando la transmisión esté completa.
Una vez más, cuando haya terminado, debe verificar los hash resultantes con nuestro hash original de /dev/
sda en la máquina en cuestión.

root@forensicbox:~# cat /mnt/evidence/net_dc3dd.00*| sha1sum


0dec26535e6264544488c08a65cefda22ced0f66 -

8.8.3 Por cable - ewfacquirestream

Por último, pero no menos importante, cubriremos una herramienta que nos permitirá tomar un flujo de
entrada (con la misma tubería netcat ) y crear un archivo EWF a partir de él. ewfacquirestream actúa como

154
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ewfacquire (y es parte del mismo paquete libewf que instalamos anteriormente), pero permite
datos que se recopilarán a través de la entrada estándar. El uso más obvio para esto es tomar datos pasados
por nuestra tubería netcat.

En ejemplos anteriores, una vez que los datos llegaban a la computadora de recopilación de destino, la escucha
El proceso netcat canalizó la salida a la cadena de salida del comando dd o dc3dd , y el archivo fue
escrito exactamente como apareció, como una imagen de flujo de bits.

Pero al usar ewfacquirestream, podemos crear archivos EWF en lugar de una imagen de flujo de bits. Nosotros
simplemente canalice el flujo de salida de netcat a ewfacquirestream. Si no deseamos tener
el programa utiliza valores predeterminados, luego emitimos el comando con opciones que de nin cómo
quiere que se haga la imagen (sectores, algoritmos hash, manejo de errores, etc.) y qué información
queremos almacenar. El comando en la máquina en cuestión sigue siendo el mismo. El comando
en el sistema de recopilación se vería así (utilizando muchos de los comandos
predeterminados):

root@forensicbox:~# nc -l -p 2524 | ewfacquirestream -c 2019-001 -D"Disco de asunto"


-e "BGrundy" -E '1' -f encase6 -m fijo -M físico-N "Imagen a través de la red
conexión" -t /mnt/evidence/net_ewfstream

ewfacquirestream 20140806

Valores de compresión no admitidos predeterminados en método: desinflar con nivel: ninguno.


Utilizando los siguientes parámetros de adquisición:
Ruta de la imagen y nombre del /mnt/evidence/net_ewfstream.E01
archivo: Número de caso: número de caso

Descripción: Número de evidencia: Disco de asunto


1
Nombre del examinador: Bgruño
Notas: Imagen a través de una conexión de red
Tipo de medio: disco fijo

es físico: sí
Formato de archivo EWF: Caja 6 (.E01)
Método de compresión: desinflar

Nivel de compresión: ninguna

Compensación de inicio de adquisición: 0

Número de bytes a adquirir: 0 (hasta el final de la entrada)


Tamaño del archivo del segmento de evidencia: 1,4 GiB (1572864000 bytes)
Bytes por sector: 512
Tamaño de bloque: 64 sectores

Granularidad de errores: 64 sectores


Reintentos en error de lectura: 2
Cero sectores en error de lectura: no

La adquisición comenzó el: 13 de julio de 2019 21:44:46


Esto podría tomar un tiempo.

...la salida se detiene hasta que se inicia la adquisición en la computadora en cuestión.

155
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Este comando toma la salida de netcat (nc) y la canaliza a ewfacquirestream.

el número de caso se especifica con -C

la descripción de la evidencia se da con -D

el examinador dado con -e

número de evidencia con -E

el formato encase6 se especifica con -f encase6

el tipo de medio se da con -m

las etiquetas de medios se dan con -M

las notas se proporcionan con -N

la ruta de destino y el nombre del archivo se especifican con -t /ruta/archivo.

No se proporciona ninguna extensión y ewfacquirestream agrega automáticamente una extensión E0* al archivo
resultante. Para obtener una lista completa de opciones, consulte las páginas man o ejecute el comando con la
opción -h .

De vuelta en el sistema sujeto, usamos nuestro estándar para enviar los datos a través del cable desde un
comando de computadora sujeto. . .

root@bootdisk:~# dd if=/dev/sda | nc 192.168.0.1 2525

Una vez que se complete la adquisición (deberá detener el proceso ewfacquirestream en el sistema de
recopilación cuando el comando dd se complete en el sistema en cuestión; de nuevo, lo sabrá cuando vea el
mensaje de entrada/salida dd en el lado del asunto), puede buscar en los archivos resultantes y compare los
hashes. Dado que usamos sha1sum anteriormente, volveremos a ejecutar con md5sum para que podamos
comparar el hash con la salida de ewfverify (que usa MD5):

root@bootdisk:~# md5sum /dev/sda


e663f5fd97a73a8b37a942a58dde5496 /dev/sda

root@forensicbox:~# ls -lh /mnt/evidence/net_ewfstream.* -rw-r--r-- 1


root root 1.5G 14 de julio 09:52 /mnt/evidence/net_ewfstream.E01 -rw-r-- r-- 1 raíz raíz 1.5G
14 de julio 09:52 /mnt/evidence/net_ewfstream.E02 -rw-r--r-- 1 raíz raíz 1.5G 14 de julio
09:52 /mnt/evidence/net_ewfstream.E03 -rw -r--r-- 1 raíz raíz 1.5G 14 de julio 09:52 /mnt/
evidence/net_ewfstream.E04 -rw-r--r-- 1 raíz raíz 1.5G 14 de julio 09:52 /mnt/evidence/
net_ewfstream .E05 -rw-r--r-- 1 raíz raíz 1.5G 14 de julio 09:52 /mnt/evidence/
net_ewfstream.E06 -rw-r--r-- 1 raíz raíz 1.5G 14 de julio 09:52 /mnt /evidencia/
net_ewfstream.E07

156
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

-rw-r--r-- 1 raíz raíz 1.5G 14 de julio 09:52 /mnt/evidence/net_ewfstream.E08 -rw-r--r-- 1 raíz raíz 1.5G 14 de
julio 09:52 /mnt/evidence /net_ewfstream.E09 -rw-r--r-- 1 root root 1.5G 14 de julio 09:52 /mnt/evidence/
net_ewfstream.E10 -rw-r--r-- 1 root root 1.5G 14 de julio 09:52 /mnt/evidence/net_ewfstream.E11 -rw-r--r-- 1
raíz raíz 1.5G 14 de julio 09:52 /mnt/evidence/net_ewfstream.E12 -rw-r--r-- 1 raíz raíz 1.5G julio 14 09:52 /mnt/
evidence/net_ewfstream.E13 -rw-r--r-- 1 raíz raíz 988M 14 de julio 09:52 /mnt/evidence/net_ewfstream.E14

root@forensicbox:~# ewfverify net_ewfstream.E01 ewfverify 20140806

Verificar comenzó el: 14 de julio de 2019 09:56:03 Esto


podría demorar un tiempo.

Estado: al 6%.
verificó 1,2 GiB (1370980352 bytes) de un total de 20 GiB (21474836480 bytes). finalización en 1 minuto(s)
y 2 segundo(s) con 310 MiB/s (325376310 bytes/
,ÿ segundo).
...
Estado: al 99%.
verificó 19 GiB (21454585856 bytes) de un total de 20 GiB (21474836480 bytes). finalización en 0 segundo(s)
con 341 MiB/s (357913941 bytes/segundo).

Verificación completada el: 14 de julio de 2019 09:57:03

Lectura: 20 GiB (21474836480 bytes) en 1 minuto(s) y 0 segundo(s) con 341 MiB/s


,ÿ (357913941 bytes/segundo).

Hash MD5 almacenado en el archivo: e663f5fd97a73a8b37a942a58dde5496


Hash MD5 calculado sobre datos: e663f5fd97a73a8b37a942a58dde5496

ewfverify: ÉXITO

... compare la salida de md5sum de /dev/sda en la computadora en cuestión y el final de la salida de ewfverify
y vemos que nuestra verificación es exitosa.

8.9 Compresión: local y por cable

Aquí hemos cubierto los conceptos básicos y la mecánica de los medios de imagen a través de una tubería de
red. netcat no es la única solución para esto, aunque es una de las opciones más sencillas y suele estar
disponible en la mayoría de los discos de arranque y sistemas Linux.

En realidad, es posible que desee considerar si desea cifrar sus datos mientras atraviesan la red. En nuestro
ejemplo anterior, es posible que nos hayamos conectado a través de un cable cruzado (interfaz a interfaz) o a
través de un concentrador de red independiente. Pero, ¿y si estás en un

157
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

situación en la que el único medio de recogida es a distancia? ¿O sobre hardware de red empresarial?
En ese caso, tal vez desee encriptación. Para eso podrías usar cryptcat, o incluso ssh. Ahora que comprende
la mecánica básica de esta técnica, se le insta a explorar otras herramientas y métodos. Hay proyectos como
rdd (https://sourceforge.net/projects/rdd/ ) y aire (https://sourceforge.net/projects/air-imager/) es posible
que desee explorar y probar por su cuenta.

8.9.1 Compresión sobre la marcha con dd

Otra técnica útil durante la obtención de imágenes es la compresión. Teniendo en cuenta nuestra preocupación
por la aplicación forense aquí, nos aseguraremos de administrar nuestra técnica de compresión para que
podamos verificar nuestros hashes sin tener que descomprimir y escribir nuestras imágenes antes de verificarlas.

Para este ejercicio, usaremos la utilidad GNU gzip . gzip es una utilidad de línea de comandos que nos permite
un control bastante granular sobre el proceso de compresión. Hay otras utilidades de compresión (lzip, xz,
etc.), pero nos concentraremos en gzip por las mismas razones por las que aprendimos dd y vi... casi siempre
disponibles, y es un buen punto de partida para aprender los conceptos básicos de la línea de comandos. La
mayoría de los paquetes fuente de software están mínimamente disponibles en un formato comprimido gz ,
pero le recomiendo que explore otras opciones de compresión por su cuenta.

Primero, en aras de la familiaridad, veamos el uso simple de gzip en un solo archivo y exploremos algunas de
las opciones a nuestra disposición. Creé un directorio llamado testcomp y copié el archivo de imagen
NTFS_Pract_2017.raw (de nuestro ejercicio ewfexport en la sección sobre libewf) en ese directorio para
practicar. Copiar el archivo de imagen en un directorio vacío me brinda un lugar despejado para experimentar.
Puede usar cualquier archivo en el que desee practicar esta sección en particular. Primero, verifiquemos dos
veces el hash de la imagen:

raíz@forensicbox:~# mkdir testcomp

root@forensicbox:~# cp NTFS_Pract_2017.raw testcomp/.

root@forensicbox:~# cd testcomp

root@forensicbox:testcomp# ls -lh total 501M

-rw-r--r-- 1 raíz raíz 500M 14 de julio 10:54 NTFS_Pract_2017.raw

root@forensicbox:testcomp# sha1sum NTFS_Pract_2017.raw


094123df4792b18a1f0f64f1e2fc609028695f85 NTFS_Pract_2017.raw

Ahora, en su forma más simple, podemos llamar a gzip y simplemente proporcionar el nombre del archivo que
queremos comprimir. Esto reemplazará el archivo original con un archivo comprimido que tiene un .gz su x
adjunto.

158
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

raíz@forensicbox:testcomp# gzip NTFS_Pract_2017.raw

root@forensicbox:testcomp# ls -lh total 61M -rw-r--


r-- 1 root root 61M 14 de julio 10:54

NTFS_Pract_2017.raw.gz

Así que ahora vemos que hemos reemplazado nuestro archivo original de 500M con un archivo de 61M que tiene
una extensión .gz . Para descomprimir el archivo .gz resultante :

root@forensicbox:testcomp# gzip -d NTFS_Pract_2017.raw.gz root@forensicbox:testcomp#


ls -lh total 501M

-rw-r--r-- 1 raíz raíz 500M 14 de julio 10:54 NTFS_Pract_2017.raw

root@forensicbox:testcomp# sha1sum NTFS_Pract_2017.raw


094123df4792b18a1f0f64f1e2fc609028695f85 NTFS_Pract_2017.raw

Hemos descomprimido el archivo y reemplazado el archivo .gz con la imagen original. Una verificación del hash
muestra que todo está en orden.

Supongamos que nos gustaría comprimir un archivo pero dejar el original intacto. Podemos usar el comando gzip
con la opción -c . Esto escribe en la salida estándar en lugar de un archivo de reemplazo.
Al usar esta opción, debemos redirigir la salida a un nombre de archivo de nuestra elección para que el archivo
comprimido no se transmita simplemente a nuestra terminal. Aquí hay una sesión de muestra usando esta técnica:

root@forensicbox:testcomp# ls -lh total 501M

-rw-r--r-- 1 raíz raíz 500M 14 de julio 10:54 NTFS_Pract_2017.raw

root@forensicbox:testcomp# gzip -c NTFS_Pract_2017.raw > NuevaImagen.raw.gz

root@forensicbox:testcomp# ls -lh total 561M

-rw-r--r-- 1 raíz raíz 500M 14 de julio 10:54 NTFS_Pract_2017.raw

-rw-r--r-- 1 raíz raíz 61M 14 de julio 11:51 NewImage.raw.gz

root@forensicbox:testcomp# gzip -cd NewImage.raw.gz > NewUncompressed.raw

root@forensicbox:testcomp# ls -lh total 1.1G

-rw-r--r-- 1 raíz raíz 500M 14 de julio 10:54 NTFS_Pract_2017.raw

-rw-r--r-- 1 root root 61M 14 de julio 11:51 NewImage.raw.gz -rw-r--r-- 1 root root 500M
14 de julio 11:52 NewUncompressed.raw

159
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:testcomp# sha1sum NewUncompressed.raw


094123df4792b18a1f0f64f1e2fc609028695f85 NewUncompressed.raw

En el resultado anterior, vemos que la lista del primer directorio muestra el archivo de una sola imagen.
Luego comprimimos usando gzip -c que escribe en la salida estándar. Redirigimos esa salida a un nuevo
archivo (nombre de nuestra elección). La segunda lista muestra que el archivo original permanece y se
crea el archivo comprimido. Luego usamos gzip -cd para descomprimir el archivo, redirigiendo la salida a
un nuevo archivo y esta vez conservando el archivo comprimido.

Estas son opciones muy básicas para el uso de gzip. La razón por la que aprendemos la opción -c es
para permitirnos descomprimir un archivo y canalizar la salida a un algoritmo hash. En un sentido más
práctico, esto nos permite crear una imagen comprimida y verificar el hash de esa imagen sin escribir el
archivo dos veces.

Si volvemos a un solo archivo de imagen en nuestro directorio, podemos ver esto en acción. Elimine todos
los archivos que acabamos de crear (usando el comando rm ) y deje la única imagen dd original . Ahora
crearemos un solo archivo comprimido a partir de esa imagen original y luego verificaremos el hash del
archivo comprimido para garantizar su validez:

root@forensicbox:testcomp# rm -f NewImage.raw.gz NewUncompressed.raw

root@forensicbox:testcomp# ls -lh total 501M

-rw-r--r-- 1 raíz raíz 500M 14 de julio 10:54 NTFS_Pract_2017.raw

raíz@forensicbox:testcomp# gzip NTFS_Pract_2017.raw

root@forensicbox:testcomp# ls -lh total 61M -rw-r--


r-- 1 root root 61M 14 de julio 10:54

NTFS_Pract_2017.raw.gz

root@forensicbox:testcomp# gzip -cd NTFS_Pract_2017.raw.gz | sha1sum


094123df4792b18a1f0f64f1e2fc609028695f85 -

root@forensicbox:testcomp# ls -lh total 61M -rw-r--


r-- 1 root root 61M 14 de julio 10:54

NTFS_Pract_2017.raw.gz

Primero vemos que tenemos el hash correcto. Luego comprimimos la imagen con un simple comando
gzip que reemplaza el archivo original. Ahora, todo lo que queremos hacer a continuación es verificar el
hash de nuestra imagen comprimida sin tener que escribir una nueva imagen. Hacemos esto usando gzip
-c (para estándar) -d (descomprimir), pasando el nombre de nuestro archivo comprimido pero canalizando
la salida a nuestro algoritmo hash (en este caso, sha1sum). El resultado muestra el hash correcto del flujo
de salida, donde el flujo de salida está signi cado por el -.

160
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Bien, ahora que tenemos una comprensión básica del uso de gzip para comprimir, descomprimir y verificar
hashes, pongámoslo a trabajar en el uso de dd para crear una imagen comprimida. Luego verificaremos el
valor hash de la imagen comprimida contra un hash original.

Encuentre una memoria USB pequeña u otro medio extraíble para crear una imagen. Usaré una pequeña
memoria USB de 8 GB. Borre el directorio testcomp , o cree un nuevo directorio, para que tengamos un lugar
limpio para escribir nuestra imagen (o donde tenga espacio para escribir).

Obtener una imagen dd comprimida en el y es simplemente una cuestión de transmitir nuestra salida dd a
través de una tubería al comando gzip y redirigir esa salida a un archivo. El hash de nuestra imagen resultante
se puede verificar usando el mismo método que usamos anteriormente. Considere la siguiente sesión. El
dispositivo físico que tenemos como ejemplo en este caso es /dev/sdi (si está usando un dispositivo para
seguir, recuerde usar lsscsi o lsblk para encontrar el archivo de dispositivo correcto).

raíz@cajaforense:~# lsblk
NOMBRE MAJ:MIN RM TAMAÑO RO TIPO PUNTO DE MONTAJE
...
sdc 8:32 1 15G 0 disco
sdc1 8:33 1 15G 0 parte

root@forensicbox:~# sha1sum /dev/sdc


b8a8a99b3f9bf1ffbf942eeb0729e34e5ae7f36f /dev/sdc

root@forensicbox:~# dd if=/dev/sdc | gzip -c > sdc_img.raw.gz 31326208+0


registros en
31326208+0 registra
16039018496 bytes (16 GB, 15 GiB) copiados, 1512,94 s, 10,6 MB/s

root@forensicbox:~# ls -lh total


6.8G
-rw-r--r-- 1 raíz raíz 6.8G 14 de julio 17:40 sdc_img.raw.gz

root@forensicbox:~# gzip -cd sdc_img.raw.gz | sha1sum


b8a8a99b3f9bf1ffbf942eeb0729e34e5ae7f36f -

En el comando dd anterior no se especifica ningún archivo de salida, al igual que cuando canalizamos la salida
a netcat en nuestra sección over the wire. La salida simplemente se canaliza directamente a gzip para su
redirección a un nuevo archivo. Luego hacemos un seguimiento con nuestra verificación de integridad
descomprimiendo el archivo a la salida estándar y procesando el flujo. Los valores hash coinciden, por lo que
podemos ver que usamos dd para adquirir una imagen comprimida (imagen comprimida de 6,8 G frente al
dispositivo de 16 G) y verificamos nuestra adquisición sin necesidad de descomprimir (y escribir en el disco) primero.

Ahora vayamos un paso más allá en nuestra demostración de compresión en Y. ¿Qué tal poner algunos de
estos pasos juntos? Recupere nuestras imágenes a través de la red a través de netcat. Si observa los
diferentes tamaños de nuestras imágenes comprimidas y no comprimidas, verá

161
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Vea que hay una gran diferencia en el tamaño (lo que, por supuesto, dependerá de la capacidad de compresión de los
datos en el volumen que se está fotografiando). ¿Crees que podría ser más rápido comprimir los datos antes de enviarlos
por la red? Averigüémoslo.

Volviendo a nuestra configuración de red simple, hagamos la misma imagen, pero esta vez conectaremos gzip -c en un
lado de la red y gzip -cd en el otro, enviando efectivamente datos comprimidos a través del cable. La imagen resultante
NO está comprimida. Lo descomprimimos antes de que llegue a la herramienta de imagen. Puede optar por omitir eso si
lo desea y simplemente escribir una imagen comprimida.

Comenzaremos volviendo a codificar el disco duro en cuestión desde nuestro disco de arranque. Suponiendo que la
configuración de la red sea correcta, y luego abra nuestro proceso netcat listener y dc3dd en el cuadro de colección:

root@bootdisk~# sha1sum/dev/sda
0dec26535e6264544488c08a65cefda22ced0f66 /dev/sda

Abra el proceso de escucha, redirigiendo la salida a un archivo. Estoy usando dc3dd con hof= para recopilar el hash de
entrada y salida para compararlo con el hash SHA1 anterior.

root@forensicbox:~# nc -l -p 2525 | gzip-cd | dc3dd hash=sha1 hof=netCompress.raw


log=netCompress.log dc3dd
7.2.646 iniciado el 2019-07-15 10:07:56 -0400 opciones compiladas: línea de

comandos: dc3dd hash=sha1 hof=netCompress.raw log=netCompress.log


tamaño del sector: 512 bytes (supuesto ) 21474836480 bytes ( 20 G ) copiados (?? %), 12716 s, 1,6 M/s
21474836480 bytes ( 20 G ) hash ( 100 %), 36 s, 570 M/s

resultados de entrada para el archivo 'stdin':


41943040 sectores en
0dic26535e6264544488c08a65cefda22ced0f66 (sha1)

resultados de salida para el archivo 'netCompress.raw':


41943040 sectores fuera
[ok] 0dec26535e6264544488c08a65cefda22ced0f66 (sha1)

dc3dd completado el 2019-07-15 13:39:52 -0400

Y ahora inicie la creación de imágenes en la computadora en cuestión:

root@bootdisk:~# dd if=/dev/sda | gzip-c | nc 192.168.0.1 2525 41943040+0 registros en

41943040+0 registros fuera

21474836480 bytes (21 GB, 20 GiB) copiados, 12564,8 s, 1,7 MB/s ^C

162
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Cuando se completa la creación de imágenes, podemos verificar el registro dc3dd resultante , netCompress.log,
para verificar la integridad de la imagen resultante:

root@forensicbox:~# ls -lh netCompress.raw -rw-r--r-- 1


root root 20G 15 de julio 13:39 netCompress.raw

root@forensicbox:~# cat netCompress.log dc3dd


7.2.646 comenzó el 2019-07-15 10:07:56 -0400
opciones compiladas:
línea de comando: dc3dd hash=sha1 hof=netCompress.raw log=netCompress.log tamaño
del sector: 512 bytes (supuesto) 21474836480 bytes (20 G) copiado (??%), 12716 s, 1,6 M/s
21474836480 bytes (20 G) hash (100 %), 35,9389 s, 570 M/s

resultados de entrada para el archivo


'stdin': 41943040 sectores en
0dic26535e6264544488c08a65cefda22ced0f66 (sha1)

resultados de salida para el archivo 'netCompress.raw':


41943040 sectores fuera
[ok] 0dec26535e6264544488c08a65cefda22ced0f66 (sha1)

dc3dd completado el 2019-07-15 13:39:52 -0400

Un par de cosas para notar aquí. Primero, nuestros hashes coinciden. Leímos con éxito un dispositivo,
comprimimos los datos, los canalizamos a través de una red, descomprimimos los datos y escribimos un archivo
de imagen. La razón por la que hacemos esto es para ahorrar algo de tiempo. Puede probarlo usted mismo,
creando imágenes a través de una red y cronometrando todo el proceso con y sin compresión.

Tenga en cuenta que la utilidad de esto depende de dónde se encuentren sus cuellos de botella particulares.
En una red local, a través de un cable cruzado y escribiendo en una unidad USB, la compresión en toda la red
puede tener poco impacto. Pero si está creando imágenes a través de una red empresarial, o de forma remota,
es posible que observe una gran mejora en el rendimiento gracias a la compresión. Sus resultados pueden
variar, pero sea consciente de la técnica.

8.10 Preparación de un disco para la imagen sospechosa: limpieza

Una práctica común en el análisis forense de discos es desinfectar o "limpiar" un disco antes de restaurarlo o
copiarle una imagen forense. Esto asegura que cualquier dato que se encuentre en el disco borrado sea de la
imagen y no de datos residuales. Es decir, datos dejados atrás de un caso o imagen anterior. En términos
técnicos, los datos residuales nunca deberían ser un problema a menos que su sistema operativo o software
forense se rompa drásticamente. Aunque ha habido cierta preocupación sobre si un examinador busca
accidentalmente físicamente un dispositivo en lugar de un archivo de imagen en

163
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

el dispositivo. En términos legales, es un paso importante para garantizar el cumplimiento de las mejores
prácticas que existen desde hace mucho tiempo.

Ya hemos cubierto adquisiciones simples, y la desinfección de medios es un paso que normalmente se realiza
antes de realizar la recopilación de evidencia. Se presenta aquí porque tiene más sentido cubrir el tema de la
generación de imágenes cuando se presentan herramientas de generación de imágenes en lugar de introducir
la limpieza del disco antes de que hayamos cubierto las herramientas que usaremos.

A limpiar. Podemos usar un dispositivo especial, /dev/zero como fuente de ceros. Esto se puede usar para
crear archivos vacíos y borrar partes de los discos. Puede escribir ceros en un disco completo (o al menos en
aquellas áreas accesibles para el kernel y el espacio del usuario) usando el siguiente comando (suponiendo
que /dev/sdb sea el disco que desea borrar; en este caso, una pequeña memoria USB 2G) :

root@forensicbox:~# dd if=/dev/zero of=/dev/sdb bs=4k dd: error al escribir '/dev/


sdb': No queda espacio en el dispositivo 519553+0 registros en

519552+0 registros fuera

2128084992 bytes (2,1 GB, 2,0 GiB) copiados, 1682,24 s, 1,3 MB/s

Esto comienza al principio de la unidad (/dev/sdb) y escribe ceros (el archivo de entrada) en cada sector en /
dev/sdb (el archivo de salida) en fragmentos de 4 kilobytes (bs =<tamaño del bloque>). Especificar tamaños
de bloque más grandes puede acelerar el proceso de escritura (el valor predeterminado es 512 bytes).
Experimente con diferentes tamaños de bloque y vea qué efecto tiene en la velocidad de escritura (es decir,
32k, 64k, etc.). Tenga cuidado de perder bloques parciales al final de la salida si el tamaño de su bloque no es
un múltiplo adecuado del tamaño del dispositivo. El error No queda espacio en el dispositivo indica que el
dispositivo se ha llenado con ceros. Y, por supuesto, asegúrese de que el disco de destino sea, de hecho, el
disco que desea borrar. Revisa y revisa dos veces.

dc3dd facilita aún más el proceso de borrado y proporciona opciones para borrar con patrones especí cos.
En su forma más simple, dc3dd puede borrar un disco con un simple:

root@forensicbox:~# dc3dd wipe=/dev/sdb dc3dd 7.2.646


comenzó el 2019-07-15 15:21:10 -0400

opciones compiladas:
línea de comandos: dc3dd wipe=/dev/sdb tamaño
del dispositivo: 4156416 sectores (probados), tamaño del 2.128.084.992 bytes
sector: 512 bytes (probados) 28084992 bytes (2 G)
copiados (100 %), 1 s, 3,3 G/s
2128084992 bytes (2 G) copiados (100 %), 318 s, 6,4 M/s

resultados de entrada para el patrón '00':


4156416 sectores en

resultados de salida para el dispositivo '/dev/sdb':


4156416 sectores fuera

164
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

dc3dd completado el 2019-07-15 15:26:27 -0400

Entonces, ¿cómo verificamos que nuestro comando para escribir ceros en un disco completo fue un
éxito? Puede verificar sectores aleatorios con un editor hexadecimal, pero eso no es realista para
una unidad grande. Uno de los mejores métodos sería usar el comando xxd (hexdump de línea de
comando) con la opción "autoskip". La salida de este comando en una unidad de cero daría solo tres líneas.
La primera línea, comenzando en el conjunto cero con una fila de ceros en el área de datos, seguida
de un asterisco (*) para indicar líneas idénticas y, finalmente, la última línea, con el conjunto final
seguido de los ceros restantes en los datos. área. Aquí hay un ejemplo del comando en una unidad
de cero y su salida.

root@forensicbox:~# xxd -a /dev/sdb 00000000:


0000 0000 0000 0000 0000 0000 0000 0000 ................
*
7ed7fff0: 0000 0000 0000 0000 0000 0000 0000 0000 ................

Usando dc3dd con la opción hwipe (hash the wipe), la con rmación se vería así (y es mucho más
rápida que la combinación dd/xdd ):

root@forensicbox:~# dc3dd hwipe=/dev/sdb hash=sha1 dc3dd


hwipe=/dev/sdb hash=sha1

dc3dd 7.2.646 comenzó en 2019-07-15 15:28:13 -0400


opciones compiladas:
línea de comandos: dc3dd hwipe=/dev/sdb hash=sha1
tamaño del dispositivo: 4156416 sectores (probados), 2.128.084.992 bytes
tamaño del sector: 512 bytes (probados) 2128084992 bytes
(2 G) copiados (100 %), 471 s, 4,3 M /s 2128084992 bytes (2 G) hash (100 %),
151 s, 13 M/s

resultados de entrada para el patrón '00':


4156416 sectores en
4c9b7786abd51a554b35193dd1805476859903f4 (sha1)

resultados de salida para el dispositivo '/dev/sdb':


4156416 sectores fuera
[bien] 4c9b7786abd51a554b35193dd1805476859903f4 (sha1)

dc3dd completado el 2019-07-15 15:36:04 -0400

165
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8.11 Palabras finales sobre imágenes

Cualquiera que haya trabajado en el campo del análisis forense digital durante algún tiempo puede decirle que el
proceso de adquisición es la base de nuestro negocio. Todo lo demás que hacemos puede ser verificado y validado
después del hecho. Pero a menudo solo tiene una oportunidad para una adquisición adecuada. Es posible que tenga
una cantidad limitada de tiempo en el sitio, o una oportunidad para recuperar datos de una unidad defectuosa.
Asegúrese de comprender cómo funcionan las herramientas y qué hacen realmente las opciones. Es esencial validar
su enfoque antes de usarlo en el trabajo de campo real.

Esta sección ha introducido una serie de herramientas básicas y un proceso técnico aproximado. Los requisitos y los
procedimientos varían de una jurisdicción a otra y entre organizaciones.
Conozca los requisitos de su órgano de gobierno en particular y respételos.

Los avances tecnológicos cambiarán gran parte de la forma en que hacemos adquisiciones. Las tecnologías de
almacenamiento y medios de estado sólido son más que simples cambios en la interfaz que pueden requerir un adaptador.
La forma en que los datos se almacenan físicamente y los bloques de datos se manipulan está en constante evolución.
Todo el enfoque para "obtener un duplicado exacto" está cambiando a medida que avanzan las tecnologías y los
métodos de almacenamiento. ¡No te pongas demasiado cómodo!

8.12 Montaje de pruebas

Ya hemos discutido el comando de montaje y su uso para acceder a sistemas de archivos en dispositivos externos.
Ahora que estamos trabajando con imágenes forenses, también necesitaremos acceder a ellas.
Hay dos formas de hacer esto: a través de software forense "físicamente"; o mediante el montaje de volumen
"lógicamente".

Cuando accedemos a la imagen con software forense, estamos accediendo a la imagen física completa, incluidos los
bloques no asignados y los artefactos de administración de volumen y sistema de archivos inaccesibles que fueron
recuperados y copiados con éxito por nuestro software (o hardware) de imágenes.
Cubriremos algunos programas forenses en secciones posteriores.

Por ahora vamos a ver algunas herramientas y técnicas que podemos usar para ver el contenido de una imagen como
un sistema de archivos montado lógicamente.

8.12.1 Estructura de la Imagen

El primer paso en todo esto es determinar qué volúmenes y sistemas de archivos están disponibles para el montaje
, volúmenes
lógico dentro de nuestra imagen. En este caso, la estructura se refiere
y sistemas
al esquema
de archivos
de partición
dentroyde
la la
identificación
imagen. de

Dado que nuestras imágenes han sido de discos físicos, es probable que todas tengan algún tipo de tabla de
particiones. Podemos detectar esta tabla de particiones usando fdisk o gdisk. Lo haremos

166
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

cubrir más software orientado a la ciencia forense para esto más adelante (mmls del Sleuth Kit), pero para
ahora, fdisk y gdisk deberían estar disponibles en cualquier sistema Linux moderno.

Cubriremos fdisk rst, como se discutió anteriormente, anteriormente usando la opción -l . Podemos
obtenga la información de la partición en /dev/sda, por ejemplo, con:

raíz@forensicbox:~# fdisk -l /dev/sda


Disco /dev/sda 20 GiB, 21474836480 bytes, 41943040 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco: gpt
Identificador de disco: 6139EC4A-2EB3-4AF1-9A09-FE44CDEF22A3

Dispositivo comienzo Tipo de tamaño de sectores finales


/dev/sda1 34 131105 131072 64M Sistema de archivos Linux
/dev/sda2 131106 8519713 8388608 Intercambio de Linux 4G
/dev/sda3 8519714 33685537 25165824 Sistema de archivos Linux 12G
/dev/sda4 33685538 41943006 8257469 4G Datos básicos de Microsoft

Entonces, la salida de fdisk muestra que la etiqueta de partición es de tipo GPT. ¿Qué pasa si ejecutamos el
comando gdisk en el mismo disco? Aquí está la salida:

raíz@forensicbox:~# gdisk -l /dev/sda


GPT fdisk (gdisk) versión 1.0.5

Exploración de la tabla de particiones:

MBR: protector
BSD: no presente
APM: no presente
GPT: presente

Encontrado GPT válido con MBR de protección; utilizando GPT.


Disco /dev/sda: 41943040 sectores, 20,0 GiB
Tamaño del sector (lógico/físico): 512/512 bytes
Identificador de disco (GUID): 6139EC4A-2EB3-4AF1-9A09-FE44CDEF22A3
La tabla de particiones tiene capacidad para 128 entradas
La tabla de partición principal comienza en el sector 2 y termina en el sector 33
El primer sector utilizable es 34, el último sector utilizable es 41943006
Las particiones se alinearán en límites de 2 sectores
El espacio libre total es 0 sectores (0 bytes)

Número Inicio (sector) Tamaño final (sector) Nombre clave


1 34 131105 64,0 MiB 8300 sistema de archivos Linux
2 131106 8519713 4,0 GiB 8200 Intercambio de Linux
3 8519714 33685537 12,0 GiB 8300 sistema de archivos Linux

167
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

4 33685538 41943006 3,9 GiB 0700 Datos básicos de Microsoft

La conclusión importante aquí es que la salida de los dos es funcionalmente la misma. Sin embargo, al registrar
la salida de estos comandos para un examen forense, le recomiendo que utilice la herramienta diseñada
específicamente para el sistema con el que está trabajando actualmente.
Utilice fdisk para los esquemas de partición DOS y gdisk para los esquemas de partición GPT al grabar su salida.
Nuestro resultado anterior muestra que /dev/sda tiene cuatro particiones. Las particiones 1 y 2 se identifican como
virtual de Linux o archivo de, intercambio
una partición
para
de intercambio
el sistema operativo
de LinuxLinux).
(aproximadamente
La última partición
3 son del
es "Datos
tipo debásicos
memoriade
Microsoft", normalmente el código para un volumen que contiene un sistema de archivos NTFS.

Es especialmente importante tener en cuenta que el código y el nombre del sistema de archivos no identifican
necesariamente el sistema de archivos real en ese volumen. En nuestro ejemplo anterior, los sistemas de archivos
podrían ser ext2, ext3, ext4, reiserfs, etc.

Grabar la salida para un examen es una simple cuestión de redirigir la salida de cualquiera de los comandos (fdisk
o gdisk) a un archivo. Usando gdisk como ejemplo (asumiendo un diseño GPT):

root@forensicbox:~# gdisk -l /dev/sda > /mnt/evidence/sda.gdisk.txt

Un par de cosas a tener en cuenta aquí: El nombre del archivo de salida (sda.gdisk.txt) es completamente
arbitrario. No hay reglas para las extensiones. Nombra el archivo como quieras. Le sugiero que se ciña a una
convención y la haga descriptiva. También tenga en cuenta que, dado que identificamos una ruta explícita para el
nombre del archivo, se creará sda.gdisk.txt en /mnt/evidence. Si no hubiésemos dado la ruta, el archivo se
crearía en el directorio actual (/root, como lo indica el carácter de tilde en el símbolo del sistema [abreviatura del
directorio de inicio del usuario actualmente conectado]).

Una vez que haya determinado el diseño de la partición del disco, es hora de ver si podemos identificar el sistema
de archivos y montar los volúmenes para revisar el contenido.

8.12.2 Identificación de sistemas de archivos

Antes de pasar directamente a montar un volumen para su análisis o revisión, es posible que desee identificar el
sistema de archivos contenido en ese volumen. hay muchas maneras de hacer esto.
El comando de montaje es realmente muy bueno para identificar sistemas de archivos durante el montaje, por lo
que no siempre es necesario dar una opción -t <fstype> (y a menudo no se usa). Pero sigue siendo una buena
práctica comprobar y registrar el sistema de archivos antes del montaje, suponiendo que vaya a realizar una
revisión manual del contenido del volumen lógico.

Para ver un ejemplo de sistema de archivos simple, descargue el siguiente archivo y verifique el hash20:

20Esta imagen es idéntica a la utilizada en versiones anteriores de esta guía. Lo seguiremos usando aquí.

168
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# wget https://www.linuxleo.com/Files/fat_fs.raw --2019-07-16 12:26:38--


https://www.linuxleo.com/Files/fat_fs. raw Resolviendo www.linuxleo.com
(www.linuxleo.com)... 74.208.236.144 Conectando a www.linuxleo.com (www.linuxleo.com)|
74.208.236.144|:443... conectado.
Solicitud HTTP enviada, esperando respuesta... 200 OK
Longitud: 1474560 (1.4M)
Guardando en: 'fat_fs.raw'

fat_fs.raw 100%[===========================>] 1,41 M 3,52 MB/s en 0.4s

2019-07-16 12:26:38 (3.52 MB/s) - 'fat_fs.raw' guardado [1474560/1474560]

root@forensicbox:~# sha1sum fat_fs.raw


f5ee9cf56f23e5f5773e2a4854360404a62015cf fat_fs.raw

Podemos usar el comando de archivo para darnos una idea de lo que contiene la imagen. Recuerde que la salida
del archivo depende de los archivos mágicos para su distribución de Linux dada.
Ejecutar el comando le en mi sistema da esto:

root@forensicbox:~# archivo fat_fs.raw fat_fs.raw:


sector de arranque DOS/MBR, compensación de código 0x3e+2, OEM-ID "(wA~PIHC" almacenado en caché por
,ÿ Windows 9M, entradas raíz 224, sectores 2880 (volúmenes <=32 MB), sectores/FAT 9, , ÿ sectores/pista
18, número de serie 0x16e42d6d, sin etiqueta, FAT (12 bits), seguido de FAT

Hay mucha información provista en la salida del archivo. Obtenemos los ID, el número de sectores (esto se lee de
los metadatos, no del tamaño de la imagen en sí), el número de serie y otros identificadores. Cubriremos las
imágenes con particiones separadas en un momento. Esta es una imagen simple de un sistema de archivos que no
forma parte de un medio de múltiples particiones. Es posible que vea imágenes como esta en las que se han creado
imágenes de unidades de memoria USB u otros medios extraíbles y que contienen un solo volumen sin particiones.

Una palabra rápida sobre el uso del comando de archivo directamente en los dispositivos. El comando de archivo
proporcionará una respuesta exactamente sobre el objeto al que hace referencia. Si ejecuto un archivo en /dev/sda,
por ejemplo, recibo una notificación de que es un archivo especial de bloque. Si desea obtener más información
sobre el dispositivo en lugar del archivo del dispositivo, utilice la opción -s en el archivo para especificar que
queremos saber sobre el volumen al que hace referencia el dispositivo de bloque /dev . Pruebe esto en su propio sistema:

root@forensicbox:~# archivo /dev/sda /dev/


sda: bloque especial (8/0)

root@forensicbox:~# archivo -s /dev/sda /dev/


sda: sector de arranque DOS/MBR, tabla de particiones extendida (último)

porque es pequeño, simple y proporciona un conjunto de buenas prácticas para los comandos en las siguientes secciones.

169
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# archivo -s /dev/sda1 /dev/


sda1: datos del sistema de archivos Linux rev 1.0 ext4, UUID=64c20574-ca10-4401-9b3e-
,ÿ a9d3e63e2fc6 (necesita recuperación del diario) (extensiones) (archivos grandes) (archivos enormes)

Entonces sabemos con qué sistema de archivos estamos tratando, ahora necesitamos montar la imagen como un
dispositivo para que podamos ver el contenido. Para eso podemos usar un dispositivo de bucle.

8.12.3 El dispositivo de bucle

Podemos montar los sistemas de archivos dentro de la imagen usando la interfaz de bucle . Básicamente, esto le
permite montar un sistema de archivos dentro de un archivo de imagen (en lugar de un disco) en un punto de montaje
y explorar los contenidos. En términos simples, el dispositivo de bucle actúa como un disco proxy para servir el sistema
de archivos como si estuviera en medios reales.

8.12.4 Opción de bucle al comando de montaje

Para una imagen de sistema de archivos simple (donde no hay múltiples particiones en la imagen), podemos usar el
mismo comando de montaje y las mismas opciones que cualquier otro sistema de archivos en un dispositivo, pero esta
vez incluimos el bucle de opción para indicar que desea utilizar el dispositivo de bucle para montar el sistema de
archivos dentro del archivo de imagen. Cambie al directorio donde colocó fat_fs.raw y escriba lo siguiente (omita el
comando mkdir si ya creó este directorio en nuestra sección anterior sobre el montaje de sistemas de archivos externos):

root@forensicbox:~# mkdir /mnt/análisis

root@forensicbox:~# mount -t vfat -o ro, loop fat_fs.raw /mnt/analysis

root@forensicbox:~# ls /mnt/análisis ARP.EXE*

Documentos/

FTP.EXE*
Pics/
loveletter.virus*
ouchy.dat*
snoof.gz*

Ahora puede cambiar al directorio /mnt/analysis y navegar por la imagen como si fuera un disco montado. Use el
comando de montaje por sí mismo para verificar dos veces las opciones montadas (lo canalizamos a través de grep
aquí para aislar nuestro punto de montaje):

170
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# montaje | análisis grep /root/


fat_fs.raw en /mnt/tipo de análisis vfat (ro,relatime,fmask=0022,dmask=0022,, ÿ
codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount- ro)

Cuando haya terminado de navegar, desmonte el archivo de imagen (nuevamente, tenga en cuenta que el comando es
umount, no unmount ):

root@forensicbox:~# desmontar /mnt/análisis

Entonces, ¿qué sucede con esa opción de bucle ? Cuando pasa la opción de bucle en el comando de montaje , en
realidad está llamando a un atajo para crear dispositivos de bucle con un comando especial, losetup. Es importante que
entendamos el trasfondo aquí.

8.12.5 perder la configuración

La creación de dispositivos de bucle es una habilidad importante. En lugar de dejar que el comando de montaje se haga
cargo de ese proceso, echemos un vistazo a lo que realmente está sucediendo.

Los dispositivos de bucle son creados por el kernel de Linux en el directorio /dev , al igual que otros dispositivos.

root@forensicbox:~# ls /dev/loop* /dev/loop-


control /dev/loop0 /dev/loop1 /dev/loop2 /
dev/loop3 /dev/loop4 /dev/loop5 /dev/loop6 /
dev/loop7

Estos son dispositivos que se pueden utilizar para asociar archivos con un dispositivo. El dispositivo /dev/loop-control es
una interfaz que permite que las aplicaciones asocien dispositivos de bucle. El comando que usamos para administrar
nuestros dispositivos de bucle es losetup. Invocado por sí mismo, losetup enumerará los dispositivos de bucle asociados
(no devolverá nada si no hay dispositivos de bucle en uso). En la forma más simple, simplemente llame a losetup con el
nombre del dispositivo (/dev/loopX) y el archivo con el que desea asociarlo:

root@forensicbox:~# losetup /dev/loop0 fat_fs.raw

root@cajaforense:~# losetup -l
NOMBRE SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/bucle0 0 0 0 0 /raíz/fat_fs.raw 0 512

171
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# archivo -s /dev/loop0 /dev/


loop0: sector de arranque DOS/MBR, compensación de código 0x3e+2, OEM-ID "(wA~PIHC" almacenado en caché por
,ÿ Windows 9M, entradas raíz 224, sectores 2880 (volúmenes <=32 MB), sectores/FAT 9, , ÿ sectores/
pista 18, número de serie 0x16e42d6d, sin etiqueta, FAT (12 bits), seguido de FAT

root@forensicbox:~# sha1sum fat_fs.raw


f5ee9cf56f23e5f5773e2a4854360404a62015cf /dev/loop0

root@forensicbox:~# sha1sum /dev/loop0


f5ee9cf56f23e5f5773e2a4854360404a62015cf fat_fs.raw

En los comandos anteriores, asociamos el dispositivo de bucle /dev/loop0 con el archivo fat_fs.raw.
Seguimos usando el comando losetup con la opción -l para listar las asociaciones de /dev/loop .
Esto es esencialmente lo que ocurre en segundo plano cuando ejecuta el comando de montaje con la opción
de bucle -o que usamos anteriormente. Cuando identificamos el contenido del archivo del dispositivo usando
el archivo -s, obtenemos lo mismo que cuando ejecutamos el archivo en fat_fs.raw. También vemos que el
hash de fat_fs.raw coincide con el dispositivo de bucle ahora asociado, lo que indica que es un duplicado exacto.
Con el dispositivo de bucle asociado, puede ejecutar el comando de montaje como si fat_fs.raw fuera un
volumen llamado /dev/loop0:

root@forensicbox:~# mount -t vfat -o ro /dev/loop0 /mnt/analysis/

root@forensicbox:~# montaje | grep /mnt/analysis /dev/loop0


en /mnt/análisis tipo vfat (ro,relatime,fmask=0022,dmask=0022,codepage ,ÿ
=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount -ro)

root@forensicbox:~# ls /mnt/análisis
ARP.EXE*
Documentos/

FTP.EXE*
Pics/
loveletter.virus*
ouchy.dat* snoof.gz*

root@forensicbox:~# desmontar /mnt/análisis

En la sesión de comando anterior, montamos el sistema de archivos asociado con /dev/loop0, usando la
opción de solo lectura (-o ro) en el punto de montaje /mnt/analysis. Verificamos el montaje con el comando
de montaje que muestra solo las líneas que contienen /mnt/analysis (usando grep) y luego enumeramos el
contenido del punto de montaje con ls. Desmontamos el sistema de archivos con umount.

Finalmente, podemos eliminar la asociación del bucle con losetup -d:

172
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# perder la configuración


NOMBRE SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/bucle0 0 0 0 0 /raíz/fat_fs.raw 0 512

root@forensicbox:~# losetup -d /dev/loop0


root@forensicbox:~# losetup root@forensicbox:~#

Sin embargo, no todas las imágenes de los medios son tan simples...

8.12.6 Montaje de imágenes de disco completo con losetup

El ejemplo utilizado en el ejercicio anterior utiliza un sistema de archivos independiente simple. ¿Qué sucede
cuando se trata de sectores de arranque e imágenes de disco de varias particiones? Cuando crea una imagen
sin procesar de medios con dd o comandos similares, generalmente termina con una cantidad de componentes
para la imagen. Estos componentes pueden incluir un sector de arranque, una tabla de particiones y las distintas
particiones.

Si intenta montar una imagen de disco completa con un dispositivo de bucle, encontrará que el comando de
montaje no puede identificar el sistema de archivos. Esto se debe a que mount no sabe cómo reconocer la tabla
de particiones. Recuerde, el comando mount maneja sistemas de archivos, no discos (o imágenes de disco). La
forma más fácil de evitar esto (aunque no es muy eficiente para discos grandes) sería crear imágenes separadas
para cada partición de disco que desee analizar.
Para un disco duro simple con una única partición grande, puede crear dos imágenes.

Uno para todo el disco:

root@forensicbox:~# dd if=/dev/sda of=fulldiskimage.raw

Y uno para la partición:

root@forensicbox:~# dd if=/dev/sda1 of=firstpartitionimage.raw

El primer comando le brinda una imagen completa de todo el disco (/dev/sda) para fines de respaldo, incluido el
sector de arranque y la tabla de particiones. El segundo comando te da la primera partición (/dev/sda1). La
imagen resultante del segundo comando se puede montar a través del dispositivo de bucle, al igual que con
nuestro fat_fs.raw, porque es un sistema de archivos simple.

Aunque las dos imágenes anteriores contendrán el mismo sistema de archivos con los mismos datos, los valores
hash obviamente no coincidirán. Hacer imágenes separadas para cada partición es muy ineficiente.

173
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Un método para manejar discos llenos cuando se usa el dispositivo de bucle es enviar un mensaje al comando de montaje
para omitir el sector de arranque de la imagen y encontrar la partición. Estos sectores se utilizan para contener información
(como el MBR) que no forma parte de un sistema de archivos normal. Podemos mirar el desplazamiento de una partición,
normalmente dado en sectores (usando el comando fdisk ), y multiplicarlo por 512 (el tamaño del sector). Esto nos da el
byte de compensación desde el inicio de nuestra imagen hasta la primera partición que queremos montar. Esto luego se
pasa al comando de montaje como una opción, lo que esencialmente desencadena el uso de un dispositivo de bucle
disponible para montar el sistema de archivos especificado. Podemos ilustrar esto observando la imagen sin procesar del
archivo que exportamos con ewfexport en nuestro ejercicio de adquisiciones anterior, el archivo NTFS_Pract_2017.raw .
Navegue hasta donde tiene guardado el archivo.

Muy rápidamente, repasemos los pasos que necesitamos para montar esta imagen. La primera vez, determinaremos la
estructura con fdisk, obtendremos el desplazamiento del sistema de archivos real usando la expansión matemática y luego
montaremos el sistema de archivos usando el comando mount con la opción -o loop .

root@forensicbox:~# fdisk -l NTFS_Pract_2017.raw Disco


NTFS_Pract_2017.raw: 500 MiB, 524288000 bytes, 1024000 sectores Unidades: sectores de 1
*512 = 512 bytes Tamaño del sector (lógico/físico): 512 bytes / 512 bytes I/ Tamaño O (mínimo/
óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador de disco: 0xe8dd21ee

Dispositivo Inicio de arranque Tipo de ID de tamaño de sectores finales


NTFS_Práctica_2017.raw1 2048 1023999 1021952 499M 7 HPFS/NTFS/exFAT

root@forensicbox:~# echo $((2048*512)) 1048576

root@forensicbox:~# mount -o ro,loop,offset=1048576 NTFS_Pract_2017.raw /mnt/tmp

root@forensicbox:~# ls /mnt/tmp ProxyLog1.log*


Sistema\ Volumen\ Información/ Usuarios/

ventanas/

Así que aquí tenemos una imagen de disco completa. Ejecutamos fdisk en la imagen (un archivo de imagen no es
diferente a un archivo de dispositivo) y encontramos que el desplazamiento a la partición es de 2048 bytes (en rojo para enfatizar).
Usamos la expansión aritmética para calcular el byte de compensación (2048*512=1048576) y lo pasamos como
compensación en nuestro comando de montaje . Esto salta de manera efectiva sobre el sector de arranque y va
directamente a la primera partición, lo que permite que el comando de montaje funcione correctamente. Exploraremos
esto con más detalle más adelante.

Tenga en cuenta que puede hacer los cálculos para el desplazamiento utilizando la expansión aritmética directamente en

174
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

el comando de montaje si elige:

root@forensicbox:~# montaje -o ro,bucle,desplazamiento=$((2048*512)) NTFS_Pract_2017.raw


/mnt/tmp/

Veamos de nuevo lo que está pasando en segundo plano aquí con el dispositivo de bucle. Haremos el mismo
ejercicio de montaje , pero esta vez usando losetup.

Primero, asegúrese de que el sistema de archivos esté desmontado:

root@forensicbox:~# desmontar /mnt/tmp

Ahora vamos a recrear el comando de montaje utilizando un dispositivo de bucle en lugar de un desplazamiento
pasado a montaje. En este caso usaremos la expansión aritmética directamente en los comandos:

root@forensicbox:~# fdisk -l NTFS_Pract_2017.raw Disco


NTFS_Pract_2017.raw: 500 MiB, 524288000 bytes, 1024000 sectores Unidades: sectores de 1
*512 = 512 bytes Tamaño del sector (lógico/físico): 512 bytes / 512 bytes I/ Tamaño O (mínimo/
óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador de disco: 0xe8dd21ee

Dispositivo Inicio de arranque Tipo de ID de tamaño de sectores finales


NTFS_Práctica_2017.raw1 2048 1023999 1021952 499M 7 HPFS/NTFS/exFAT

root@forensicbox:~# losetup -o $((2048*512)) --sizelimit $((1021952*512))/dev/


loop0 NTFS_Pract_2017.raw

root@cajaforense:~# losetup -l
NOMBRE SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop0 523239424 1048576 0 0 /raíz/NTFS_Pract_2017.raw 0 512

root@forensicbox:~# montar /dev/loop0 /mnt/tmp

root@forensicbox:~# ls /mnt/tmp ProxyLog1.log*


Sistema\ Volumen\ Información/ Usuarios/

ventanas/

root@forensicbox:~# desmontar /mnt/tmp

Así que aquí estamos usando el comando losetup en una imagen, pero esta vez le pasamos un ajuste a un
sistema de archivos dentro de la imagen ( -o $((2048*512)) ) y también dejamos que el dispositivo de bucle sepa
exactamente tamaño de la partición que estamos asociando ( --sizelimit $((1021952*512)) ). Una vez

175
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

asociamos el dispositivo de bucle, lo montamos en /mnt/tmp y enumeramos el contenido de la imagen con ls21.
Finalmente, desmontamos el sistema de archivos con umount. Para una imagen de partición múltiple, puede
repetir los pasos anteriores para cada partición que desee montar, o puede usar una herramienta configurada
para hacer exactamente eso. Para imágenes de una sola partición como las que tenemos aquí, la opción --
sizelimit en realidad no es necesaria.

8.12.7 Montaje de imágenes de múltiples particiones con losetup -P

Hasta este punto, hemos montado una imagen de sistema de archivos simple con el comando mount , hemos
montado un sistema de archivos a partir de una imagen de disco completa con una única partición, y hemos
aprendido sobre el dispositivo de bucle y cómo especificar su asociación. con una partición específica.

Veamos ahora una imagen de disco que tiene múltiples particiones. Nuestro método anterior de identificar cada
partición por desplazamiento y tamaño, y pasar esos parámetros al comando losetup funcionaría bien para
montar múltiples sistemas de archivos dentro de una imagen de disco (usando diferentes dispositivos de bucle
para cada partición), pero afortunadamente losetup incluye un Opción para sondear y asociar volúmenes en una
imagen de disco con dispositivos de bucle apropiados.

En términos simples, losetup -P mapea particiones dentro de una imagen para separar dispositivos de bucle que
luego se pueden montar igual que cualquier otro volumen (suponiendo un sistema de archivos montable).

Hay una imagen de partición múltiple muy simple que puede descargar y usar para practicar. Las particiones
están vacías para una máxima capacidad de compresión.

Descargue el archivo con wget y verifique el hash para asegurarse de que coincida con el siguiente:

root@forensicbox:~# wget http://www.linuxleo.com/Files/gptimage.raw.gz --2019-07-17


10:18:44-- http://www.linuxleo.com/Files/ gptimage.raw.gz Resolviendo www.linuxleo.com
(www.linuxleo.com)... 74.208.236.144 Conectando a www.linuxleo.com (www.linuxleo.com)|
74.208.236.144|:80... conectado.
Solicitud HTTP enviada, esperando respuesta... 301 Movido permanentemente
Ubicación: https://linuxleo.com/Files/gptimage.raw.gz [siguiente] --2019-07-17
10:18:45-- https:// linuxleo.com/Files/gptimage.raw.gz Resolviendo linuxleo.com
(linuxleo.com)... 74.208.236.144 Conectando a linuxleo.com (linuxleo.com)|
74.208.236.144|:443... conectado.
Solicitud HTTP enviada, esperando respuesta... 200 OK
Longitud: 4181657 (4.0M) [aplicación/gzip]
Guardando en: 'gptimage.raw.gz'

gptimage.raw.gz 100 %[======================>] 3,99 M 2,43 MB/s en 1.6s

2019-07-17 10:18:48 (2,43 MB/s) - 'gptimage.raw.gz' guardado [4181657/4181657]

21Observe las barras inclinadas en la salida de ls. La barra inclinada invertida es un carácter de escape para permitir
los espacios dentro del nombre del directorio System Volume Information/, y la barra inclinada final identifica un directorio.
Vemos que hay tres directorios en la salida.

176
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# sha1sum gptimage.raw.gz


b7dde25864b9686aafe78a3d4c77406c3117d30c gptimage.raw.gz

Descomprima el archivo gzip'd con gzip -d y verifique el hash del archivo de imagen sin procesar resultante:

root@forensicbox:~# gzip -d gptimage.raw.gz

root@forensicbox:~# sha1sum gptimage.raw


99b7519cecb9a48d2fd57c673cbf462746627a84 gptimage.raw

Agregaremos un par de opciones más para perder la configuración para este ejercicio. Anteriormente usamos losetup
para mapear simplemente un sistema de archivos en una imagen a un dispositivo de bucle, y usamos losetup con un
límite de tamaño y desplazamiento para especificar un solo volumen en una imagen de disco completa. Ahora usaremos
la opción -P para buscar particiones adicionales y crear nodos de partición dentro de nuestro dispositivo de bucle.

root@forensicbox:~# losetup -Prf --show gptimage.raw /dev/loop0

Aquí estamos usando losetup con la opción -P para buscar y asociar particiones. También usamos la opción -r para
'solo lectura' y la opción -f para 'encontrar el primer dispositivo de bucle disponible'.
La opción --show devuelve el dispositivo de bucle asignado a nuestra imagen. Una vez que ejecutamos el comando
anterior, se crean nuestras asignaciones de partición. Podemos ver esto simplemente usando gdisk -l en el dispositivo
de bucle resultante. Y lo seguiremos enumerando los nodos de partición y luego verificando el contenido de cada
dispositivo de bucle de partición con el comando de archivo :

root@forensicbox:~# gdisk -l /dev/loop0 GPT fdisk


(gdisk) versión 1.0.5

Exploración de la tabla de particiones:

MBR: protector
BSD: no presente
APM: no presente
GPT: presente

Encontrado GPT válido con MBR de protección; utilizando GPT.


Disco /dev/loop0: 8388608 sectores, 4,0 GiB Tamaño
del sector (lógico/físico): 512/512 bytes Identificador de
disco (GUID): B46C3ED5-CF96-4906-9BD9-066DD92B9405 La tabla de
particiones admite hasta 128 entradas La tabla de particiones principal
comienza en sector 2 y termina en el sector 33 El primer sector utilizable es
34, el último sector utilizable es 8388574 Las particiones se alinearán en los
límites del sector 2048 El espacio libre total es 2014 sectores (1007,0 KiB)

177
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Número Inicio (sector) Final (sector) Tamaño Nombre clave


1 2048 206847 100.0 MiB 8300 Sistema de archivos Linux
2 206848 2303999 1024.0 MiB 8300 Sistema de archivos Linux
3 2304000 8388574 2,9 GiB 8300 sistema de archivos Linux

raíz@forensicbox:~# ls /dev/loop0*
brw-rw---- 1 disco raíz 7, 0 1 de septiembre 11:43 /dev/loop0
brw-rw---- 1 disco raíz 259, 3 1 de septiembre 11:43 /dev/loop0p1 <-- tenga en cuenta el valor 'p'
brw-rw---- 1 disco raíz 259, 4 1 de septiembre 11:43 /dev/loop0p2 para cada partición
brw-rw---- 1 disco raíz 259, 5 1 de septiembre 11:43 /dev/loop0p3

root@forensicbox:~# archivo -s /dev/loop0p*


/dev/loop0p1: datos del sistema de archivos Linux rev 1.0 ext4, UUID=cd5213b1-e674-41b2-8f7f-
,ÿ d6f6e97fbdee (extensiones) (archivos grandes) (archivos enormes)
/dev/loop0p2: datos del sistema de archivos Linux rev 1.0 ext4, UUID=7f7be41c-4b0d-41d4-8c94-
,ÿ ff84a121e542 (extensiones) (archivos grandes) (archivos enormes)
/dev/loop0p3: datos del sistema de archivos Linux rev 1.0 ext4, UUID=837a55a6-39f1-433b-bf1a
,ÿ -34538feee7e8 (extensiones) (archivos grandes) (archivos enormes)

Ahora podemos montar y explorar estos volúmenes mapeados como lo haríamos con cualquier otro.

root@forensicbox:~# montar /dev/loop0p1 /mnt/tmp


mount: /mnt/tmp: ADVERTENCIA: dispositivo protegido contra escritura, montado de solo lectura.

raíz@forensicbox:~# ls /mnt/tmp
perdido+encontrado/

root@forensicbox:~# montaje | bucle grep0p1


/dev/loop0p1 en /mnt/tmp escriba ext4 (ro,relatime)

root@forensicbox:~# desmontar /mnt/tmp

Una vez que haya terminado y el sistema de archivos se haya desmontado con el comando umount como se muestra
arriba, puede eliminar las asignaciones con losetup -d /dev/loop0:

root@forensicbox:~# losetup -d /dev/loop0

8.12.8 Montaje de archivos de imagen dividida con affuse

Vamos a continuar nuestra exploración de opciones de montaje para archivos de imagen abordando
aquellas ocasiones en las que es posible que desee montar y explorar un archivo de imagen que se ha dividido
con dd/split o dc3dd, etc. Para eso podemos usar affuse del paquete afflib .

178
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El formato forense avanzado (AFF) es un formato abierto para imágenes forenses, y el paquete afflib
proporciona una serie de utilidades para crear y manipular imágenes en formato AFF.
No cubriremos esas herramientas o el formato AFF en este documento (al menos no en esta versión), por lo
que todo lo que nos interesa ahora es la utilidad affuse que viene con afflib.

affuse proporciona acceso virtual a una serie de formatos de imagen, archivos divididos entre ellos. Lo hace
a través de la interfaz del software File System in User Space. Comúnmente conocidas como fuse fuse, las
aplicación, queutilidades
pueden conectarse
nos permiten
concrear
el kernel
mecanismos
y los controladores
de acceso normales
al sistemadel
de sistema
archivosde
a nivel
archivos.
de

El paquete afflib está disponible como SlackBuild para Slackware y se puede instalar simplemente con
sboinstall:

root@forensicbox:~# sboinstall afflib afflib es una


biblioteca y un conjunto de herramientas utilizadas para admitir el formato forense avanzado
(AFF).
...

Paquete afflib-3.7.19-x86_64-1_SBo.tgz instalado.

Limpieza para afflib-3.7.19...

El siguiente ejercicio asume que la imagen dividida con la que está trabajando está en formato sin procesar
(como una imagen dd ) cuando se vuelve a ensamblar. Un archivo que usaremos para una serie de ejercicios
más adelante está en formato dividido y se puede descargar para que pueda seguirlo aquí. Nuevamente, use
wget y verifique su hash con el siguiente:

root@forensicbox:~# wget http://www.linuxleo.com/Files/able_3.tar.gz --2019-07-18 08:28:29--


https://linuxleo.com/Files/able_3. tar.gz Resolviendo linuxleo.com... 74.208.236.144
Conectando a linuxleo.com|74.208.236.144|:443... conectado.

Solicitud HTTP enviada, esperando respuesta... 200 OK


Longitud: 526734961 (502M) [aplicación/gzip]
Guardando en: 'able_3.tar.gz'

capaz_3.tar.gz 100 %[======================>] 502,33 M 3,11 MB/s en 3m 31s

2019-07-18 08:32:02 (2,38 MB/s) - 'able_3.tar.gz' guardado [526734961/526734961]

root@forensicbox:~# sha1sumable_3.tar.gz
6d8de5017336028d3c221678b483a81e341a9220 able_3.tar.gz

Vea el contenido del archivo con el siguiente comando:

179
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# tar tzf capaz_3.tar.gz capaz_3/


capaz_3/capaz_3.000 capaz_3/capaz_3.001 capaz_3/
capaz_3.log capaz_3/capaz_3.003 capaz_3/capaz_3.002

Ahora podemos extraer el archivo usando el comando tar con la opción de extracción (x) en lugar de la opción
para enumerar los contenidos (t):

root@forensicbox:~# tar xzvf able_3.tar.gz able_3/

capaz_3/capaz_3.000
capaz_3/capaz_3.001
capaz_3/capaz_3.log
capaz_3/capaz_3.003
capaz_3/capaz_3.002

Primero, cambie al directorio able_3 con cd. Tenga en cuenta que nuestro símbolo del sistema cambió para
reflejar nuestro directorio de trabajo. Ahora tenemos 4 archivos de imagen (.000-.003) y un archivo de registro. La
sección de entrada del archivo de registro muestra que esta imagen es una imagen 4G tomada con dc3dd y
dividida en 4 partes.

root@forensicbox:~# cd capaz_3

root@forensicbox:able_3# cat able_3.log dc3dd 7.2.646


comenzó el 2017-05-25 15:51:04 +0000
opciones compiladas:
línea de comando: dc3dd if=/dev/sda hofs=able_3.000 ofsz=1G hash=sha1 log=able_3.log tamaño del
dispositivo: 8388608 sectores (probado), tamaño del sector:
4.294.967.296
512 bytes (probado)
bytes

4294967296 bytes (4 G) copiados (100 %), 1037,42 s, 3,9 M/s 4294967296 bytes (4
G) hash (100 %), 506,481 s, 8,1 M/s

resultados de entrada para el dispositivo '/dev/sda':


8388608 sectores en
0 sectores defectuosos reemplazados por
ceros 2eddbfe3d00cc7376172ec320df88f61afda3502 (sha1)
4ef834ce95ec545722370ace5a5738865d45df9e, sectors 0 - 2097151
ca848143cca181b112b82c3d20acde6bdaf37506, sectors 2097152 - 4194303
3d63f2724304205b6f7fe5cadcbc39c05f18cf30, sectors 4194304 - 6291455
9e8607df22e24750df7d35549d205c3bd69adfe3, sectors 6291456 - 8388607

resultados de salida para archivos 'able_3.000':

180
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

8388608 sectores fuera


[bien] 2eddbfe3d00cc7376172ec320df88f61afda3502 (sha1)
[ok] 4ef834ce95ec545722370ace5a5738865d45df9e, sectores 0 - 2097151, 'able_3
,ÿ .000'
'
[ok] ca848143cca181b112b82c3d20acde6bdaf37506, sectores 2097152 - 4194303,
,ÿ capaz_3.001'
'
[ok] 3d63f2724304205b6f7fe5cadcbc39c05f18cf30, sectores 4194304 - 6291455,
,ÿ capaz_3.002'
'
[ok] 9e8607df22e24750df7d35549d205c3bd69adfe3, sectores 6291456 - 8388607, ,ÿ able_3.003'

dc3dd completado el 2017-05-25 16:08:22 +0000

Verifiquemos el hash de las partes de la imagen combinadas y comparemos con el registro:

root@forensicbox:able_3# cat able_3.00*| sha1sum


2eddbfe3d00cc7376172ec320df88f61afda3502 -

Recuerde que el comando cat simplemente transmite los archivos uno tras otro y los envía a través de la salida
estándar. El comando sha1sum toma los datos de la tubería y los procesa. Como mencionamos anteriormente,
'
el ' en la salida hash indica que la entrada- estándar
imagen fue
es buena.
codificada, no un archivo. Los hashes coinciden y nuestra

Ahora supongamos que queremos montar las imágenes para ver los sistemas de archivos y examinarlos o
buscarlos en busca de archivos especí cos. Una solución sería usar el comando cat como lo hicimos arriba y
redirigir la salida a un nuevo archivo compuesto por todos los segmentos.

root@forensicbox:able_3# cat able_3.0*> able_3.raw

root@forensicbox:able_3# ls -lh able_3.raw -rw-r--r-- 1 root root


4.0G 18 de julio 09:13 able_3.raw

root@forensicbox:able_3# sha1sum able_3.raw


2eddbfe3d00cc7376172ec320df88f61afda3502 able_3.raw

El problema con este enfoque es que ocupa el doble de espacio, ya que esencialmente estamos duplicando todo
el disco adquirido, pero en una sola imagen en lugar de dividirlo. No es muy eficiente para la gestión de recursos.

Necesitamos una forma de tomar las imágenes divididas y crear un "disco completo" virtual que podamos montar
usando técnicas que ya hemos aprendido. Usaremos affuse y el sistema de fusibles que proporciona.
Todo lo que tenemos que hacer es llamar a affuse con el nombre del primer segmento de nuestra imagen dividida y
proporcionar un punto de montaje donde podamos acceder a la imagen del disco virtual:

181
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:able_3# mkdir /mnt/aff

root@forensicbox:able_3# affuse able3.000 /mnt/aff

root@forensicbox:able_3# ls -lh /mnt/aff total 0

-r--r--r-- 1 raíz raíz 4.0G 31 de diciembre de 1969 able_3.000.raw

root@forensicbox:able_3# sha1sum /mnt/aff/able_3.000.raw


2eddbfe3d00cc7376172ec320df88f61afda3502 /mnt/aff/able_3.000.raw

En la sesión anterior, creamos un punto de montaje para nuestra imagen de fusible (el nombre aquí es arbitrario)
con el comando mkdir . Usamos affuse con el primer segmento de nuestra imagen de cuatro partes y lo montamos
en /mnt/aff. affuse crea nuestro único archivo de imagen virtual para nosotros en /mnt/aff y lo nombra con el
nombre de la imagen y la extensión .raw . Finalmente, verificamos el hash de esta nueva imagen virtual y
encontramos que es el mismo que el hash de los bytes de entrada y salida (para el disco total) en nuestro archivo
de registro. Acabamos de crear una imagen virtual sin procesar de "disco completo" a partir de nuestra imagen
dividida.

Ahora podemos ejecutar gdisk o fdisk en la imagen para identificar el diseño de la partición; podemos usar
losetup -P para asignar las particiones a los dispositivos de bucle que podemos montar; y podemos ejecutar el
comando de archivo para identificar los sistemas de archivos para una mayor investigación. Todo esto como
hemos aprendido en las secciones anteriores al trabajar en archivos de imagen completos:

root@forensicbox:able_3# fdisk -l /mnt/aff/able_3.000.raw Disco /mnt/aff/


able_3.000.raw: 4 GiB, 4294967296 bytes, 8388608 sectores Unidades: sectores de 1 * 512 = 512
bytes Sector tamaño (lógico/físico): 512 bytes/512 bytes Tamaño de E/S (mínimo/óptimo): 512
bytes/512 bytes Tipo de etiqueta de disco: gpt Identificador de disco: B94F8C48-CE81-43F4-A062-
AA2E55C2C833

Dispositivo comienzo Sectores finales Tamaño Tipo /


mnt/aff/able_3.000.raw1 2048 104447 102400 50M Sistema de archivos Linux /mnt/aff/
able_3.000.raw2 104448 309247 204800 100M Sistema de archivos Linux /mnt/aff/able_3.000.raw3
571392 8388774 731.392 Sistema de archivos G Linux

root@forensicbox:able_3# losetup -Prf --show /mnt/aff/able_3.000.raw /dev/loop0

root@forensicbox:able_3# ls -l /dev/loop0* brw-rw---- 1 disco


raíz 7, 0 Sep 2 10:20 /dev/loop0 brw-rw---- 1 disco raíz 259, 0 Sep 2 10:20 /
dev/loop0p1 brw-rw---- 1 disco raíz 259, 1 de septiembre 2 10:20 /dev/loop0p2
brw-rw---- 1 disco raíz 259, 2 de septiembre 2 10:20 /dev /bucle0p3

182
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:able_3# archivo -s /dev/loop0p*


/dev/loop0p1: datos del sistema de archivos Linux rev 1.0 ext4, UUID=ca05157e-f7b3-4c6a-9b63-235
,ÿ c4cad7b73 (extensiones) (archivos grandes) (archivos enormes)
/dev/loop0p2: datos del sistema de archivos Linux rev 1.0 ext4, UUID=c4ac4c0f-d9de-4d26-9e16
,ÿ -10583b607372 (extensiones) (archivos grandes) (archivos enormes)
/dev/loop0p3: datos del sistema de archivos Linux rev 1.0 ext4, UUID=c7f748b2-3a38-44e9-aa43-
,ÿ f924955b9fdd (extensiones) (archivos grandes) (archivos enormes)

Entonces, sin tener que volver a ensamblar las imágenes divididas en una sola imagen, pudimos mapear el
particiones e identificar los sistemas de archivos listos para el montaje.

root@forensicbox:able_3# mount -o ro -t ext4 /dev/loop0p1 /mnt/analysis/

root@forensicbox:able_3# ls /mnt/análisis
README.initrd@config-huge-4.4.14 onlyblue.dat
System.map@ elilo-ia32.efi* slack.bmp
System.map-generic-4.4.14 elilo-x86_64.efi* tuxlogo.bmp
System.map-huge-4.4.14 grub/tuxlogo.dat
boot.0800 dentro.bmp vmlinuz@
boot_message.txt inside.dat vmlinuz-generic@
café.dat perdido+encontrado/ vmlinuz-generic-4.4.14
vmlinuz-enorme@
config@config-generic-4.4.14 mapa onlyblue.bmp vmlinuz-enorme-4.4.14

Cuando hayamos terminado con el punto de montaje affuse , lo eliminamos con fusermount -u
dominio. Esto elimina nuestra imagen de disco virtual del punto de montaje. RECUERDA que debemos
desmonte cualquier sistema de archivos montado de la imagen y luego elimine nuestras asociaciones de bucle
con losetup -d /dev/loopX antes de desmontar nuestro fusible.

root@forensicbox:able_3# desmontar /mnt/análisis

root@forensicbox:able_3# losetup -d /dev/loop0

root@forensicbox:able_3# fusermount -u /mnt/aff

8.12.9 Montaje de archivos EWF con ewfmount

Así como estamos obligados a encontrar imágenes divididas que queremos explorar, también es probable que
encontrar archivos de Testigo experto (E01 o EWF) a los que queremos llegar sin tener que
restaurarlos y ocupar mucho más espacio del necesario.

Ya instalamos libewf como parte de nuestras lecciones de adquisición anteriores. Si no lo has hecho
así que ya puede instalar libewf con sboinstall en Slackware o usando cualquier método

183
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

la distribución que elija lo permita. Para esta sección estamos interesados en la utilidad ewfmount que viene con
libewf.

Al igual que affuse, ewfmount proporciona un sistema de archivos fuse. Se llama de la misma manera y da
como resultado la misma imagen de disco virtual sin formato que se puede analizar para particiones y montar en
bucle para la exploración. Si leyó la sección anterior sobre affuse, todo esto le resultará muy familiar. Usaremos
la versión EWF de los archivos NTFS_Pract_2017.E0* que usamos en nuestros ejercicios anteriores.

Podría ser una buena idea ejecutar ewfverify (también del retiro del paquete libewf que usamos en la sección
de adquisiciones) para garantizar que la integridad del conjunto E01 aún esté intacta.

root@forensicbox:~# cd NTFS_Pract_2017

root@forensicbox:NTFS_Pract_2017# ewfverify NTFS_Pract_2017.E01 ewfverify 20140806

Verificar comenzó el: 18 de julio de 2019 09:56:58 Esto


podría demorar un tiempo.

Verificación completada en: 18 de julio de 2019 09:56:59

Lectura: 500 MiB (524288000 bytes) en 1 segundo(s) con 500 MiB/s (524288000 bytes/
,ÿ segundo).

Hash MD5 almacenado en el archivo: eb4393cfcc4fca856e0edbf772b2aa7d


Hash MD5 calculado sobre datos: eb4393cfcc4fca856e0edbf772b2aa7d

ewfverify: ÉXITO

Tome nota del hash MD5 de nuestra salida de ewfverify .

Ahora creamos nuestro punto de montaje EWF (de nuevo, este es un nombre arbitrario). Utilice el comando
ewfmount para fusionar los archivos de imagen. Solo necesita proporcionar el primer nombre de archivo para el
conjunto de imágenes. ewfmount encontrará el resto de los segmentos. Podemos usar el comando ls en nuestro
punto de montaje para ver la imagen de disco montada en fusible que resultó:

root@forensicbox:NTFS_Pract_2017# mkdir /mnt/ewf

root@forensicbox:NTFS_Pract_2017# ewfmount NTFS_Pract_2017.E01 /mnt/ewf ewfmount 20140806

root@forensicbox:NTFS_Pract_2017# ls /mnt/ewf ewf1

Nuestra imagen de disco virtual es ewf1. Hagámoslo y comparémoslo con nuestra salida de ewfverify anterior.
Como puede ver, obtenemos una coincidencia:

184
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:NTFS_Pract_2017# md5sum /mnt/ewf/ewf1


eb4393cfcc4fca856e0edbf772b2aa7d /mnt/ewf/ewf1

Y ahora, una vez más, estamos listos para analizar y montar nuestra imagen de disco fusible utilizando las técnicas
que ya hemos aprendido. Recuerde, la imagen montada en el fusible (/mnt/ewf/ewf1) es una imagen sin procesar:

root@forensicbox:NTFS_Pract_2017# fdisk -l /mnt/ewf/ewf1


Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco: dos
Identificador de disco: 0xe8dd21ee

Dispositivo Inicio de arranque Tipo de ID de tamaño de sectores finales


/mnt/ewf/ewf1p1 2048 1023999 1021952 499M 7 HPFS/NTFS/exFAT

root@forensicbox:NTFS_Pract_2017# losetup -Prf --show /dev/loop0

root@forensicbox:NTFS_Pract_2017# archivo -s /dev/loop0p* /dev/


loop0p1: sector de arranque DOS/MBR, compensación de código 0x52+2, OEM-
"NTFS ID ", sectores/clúster 8, descriptor de medios 0xf8,
sectores/pista 63, encabezados 255, sectores ocultos 2048, dos < 4.0
BootSector (0x0), FAT (1Y bit por descriptor); NTFS, sectores/pista 63, unidad física
0x80, sectores 1021951, $MFT iniciar clúster 42581, $MFTMirror iniciar clúster 2,
bytes/RecordSegment 2^(-1*246), clústeres/bloque de índice 1, número de serie
0cae0dfd2e0dfc2bd; contiene arranque BOOTMGR

root@forensicbox:NTFS_Pract_2017# mount -o ro -t ntfs-3g /dev/loop0p1


/mnt/análisis

root@forensicbox:NTFS_Pract_2017# ls /mnt/analysis
ProxyLog1.log* Sistema\ Volumen\ Información/ Usuarios/ Windows/

Usando fdisk -l, vemos la estructura de la imagen. Usamos losetup -P con la opción de solo lectura (-r), y el
primer dispositivo de bucle disponible (-f) para agregar el mapeo de bucle para la partición.
Verificamos el archivo (-a) para la partición. Verificamos el archivo NTFS. Finalmente montamos el volumen con el
comando mount . En este caso, usamos el controlador del sistema de archivos ntfs-3g22 (-t ntfs-3g).

Y, como antes, cuando hayamos terminado, debemos desmontar el volumen, eliminar las asignaciones,

22Hay varias opciones útiles cuando se monta con ntfs-3g, como show_sys_files o streams_interface=windows.
No los cubrimos aquí, pero es posible que desee consultar man mount ,ÿ .ntfs-3g para obtener más información.

185
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

y desmonte el sistema de fusibles. Este es el mismo conjunto de pasos (hacia adelante y hacia atrás) que hicimos con
affuse y la imagen dividida.

root@forensicbox:NTFS_Pract_2017# desmontar /mnt/análisis

root@forensicbox:NTFS_Pract_2017# losetup -d /dev/loop0

root@forensicbox:NTFS_Pract_2017# fusermount -u /mnt/ewf

Y eso cubre nuestra sección sobre evidencia acumulada. Como con todo en esta guía, hemos omitido muchos detalles.
Experimente y lea las páginas man. Asegúrese de saber lo que está haciendo cuando se trata de pruebas reales. Siempre
que sea posible, el montaje y la exploración de imágenes deben realizarse en copias de trabajo.

8.13 Análisis básico


En esta sección, comenzaremos nuestra exploración de la funcionalidad básica de la línea de comandos para revisar la
evidencia montada. Hasta ahora hemos cubierto las herramientas que nos permiten acceder a nuestra evidencia, ahora
es el momento de explorarla.

La mayor parte de lo que cubrimos aquí será aplicable en exámenes reales. Descubrirá que parte de esto se puede lograr
mejor utilizando otras herramientas más enfocadas. Pero como con todo lo demás, estamos construyendo una base para
el conocimiento de la plataforma Linux, no solo un subconjunto de herramientas forenses. Una vez más, puede haber
ocasiones en las que solo le queden las herramientas que vienen con la mayoría de las distribuciones. Es útil conocer
algunas de estas utilidades básicas.

Comenzaremos con algo que es útil, incluso en una plataforma forense totalmente equipada: Escaneo de virus.

8.13.1 Antivirus: análisis de pruebas con clamav

Parte de nuestro enfoque para comprender e implementar Linux como una plataforma informática forense es hacer que
todo el proceso sea "independiente". El objetivo de esta guía es permitirle realizar un examen desde el análisis hasta la
generación de informes dentro del entorno de Linux (y preferiblemente de la línea de comandos). Uno de esos pasos que
deberíamos considerar realizar en casi todos los exámenes que se nos encomienden es escanear nuestros datos
adquiridos con algún tipo de herramienta antivirus.

Todos hemos escuchado la siempre famosa "Defensa del caballo de Troya", en la que nos preocupa que la actividad
maliciosa se culpe a una computadora infectada sobre la que el acusado "no tenía control".

186
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Si bien no es algo que haya experimentado personalmente, ha sucedido y está bien documentado23. Escanear
la evidencia tiene sentido tanto para hacer que su caso sea más sólido como desde un punto de vista
exculpatorio. Si hay circunstancias en las que el malware puede haber influido, seguramente querremos saberlo.

Hay otras consideraciones que justifican un análisis de virus/malware, y pueden depender muy específicamente
del tipo de caso que esté investigando. Simplemente hacerlo parte de una rutina de lista de verificación para el
análisis está bien, pero aún debe comprender por qué se realiza el escaneo y cómo se aplica al caso actual. Por
ejemplo, si los medios que se examinan son víctimas de un compromiso, un análisis de virus puede proporcionar
un punto de partida para un análisis adicional.
El punto de partida puede ser tan simple como identificar un vector y utilizar fechas y horas de archivo para
generar análisis adicionales. Alternativamente, podemos encontrarnos examinando la computadora en un caso
de explotación infantil. Los resultados negativos, aunque presuntivos, aún pueden ayudar a combatir la defensa
del caballo de Troya discutida anteriormente. La conclusión es que siempre se debe incluir un simple análisis de
virus como práctica estándar. Y aunque existen muchas herramientas compatibles con Linux, nos centraremos
en ClamAV.

ClamAV es de código abierto y está disponible gratuitamente. Tiene un buen soporte y es bastante comparable
a otros antivirus con respecto a la identificación de infecciones y artefactos. Si está implementando Linux en un
entorno de laboratorio, también proporciona una excelente copia de seguridad y verificación cruzada de los
resultados antivirus proporcionados en otros sistemas operativos.

Ya instalamos el paquete ClamAV anteriormente en la sección que cubre el software externo.


Si no lo ha hecho, instale clamav a través de SlackBuild (usando sboinstall) o mediante el método de
administración de paquetes de su distribución.

ClamAV tiene muchos más usos y opciones de configuración de las que cubriremos aquí. Se puede usar para
escanear en volúmenes de uso, servidores de correo electrónico y tiene opciones y usos para una navegación
segura. Hay herramientas instaladas con el paquete ClamAV que permiten la revisión del código de bytes, el
envío de muestras y ayudar con la configuración del modo daemon. Lo usaremos para escanear la evidencia
adquirida. Esto supone que lo actualizaremos según sea necesario y lo ejecutaremos en archivos de imagen,
volúmenes o puntos de montaje específicos. Con nuestro caso de uso simplificado, nos concentraremos en dos
herramientas específicas de ClamAV: freshclam y clamscan.

Una vez que ClamAV esté instalado, necesitaremos descargar los archivos de definición. Hacemos esto con
almejas frescas. Este comando descargará los archivos apropiados con el main.cvd inicial, así como el
daily.cvd que contiene las firmas más recientes:

root@forensicbox:~# El proceso de
actualización de Freshclam ClamAV comenzó el jueves 18 de julio a las
13:07:15 de 2019 ADVERTENCIA: [LibClamAV] cl_cvdhead: no se puede leer el
encabezado CVD en main.cvd Descargando main.cvd [100 %] main.cvd actualizado
(versión: 58, firmas: 4566249, nivel f: 60, constructor: sigmgr)
ADVERTENCIA: [LibClamAV] cl_cvdhead: no se puede leer el encabezado CVD en daily.cvd

23http://digitalcommons.law.scu.edu/cgi/viewcontent.cgi?article=1370&context=chtlj

187
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Descargando daily.cvd [100%]


daily.cvd actualizado (versión: 25514, firmas: 1660366, nivel f: 63, constructor: raynman)
Descargando bytecode.cvd [100%]
bytecode.cvd actualizado (versión: 330, firmas: 94, nivel f: 63, constructor: neo)
Base de datos actualizada (6226709 firmas) de base de datos.clamav.net (IP: 104.16.218.84)
ADVERTENCIA: Clamd NO fue notificado: No se puede conectar a clamd a través de /var/run/clamav/
,ÿ clamd.socket: No existe tal archivo o directorio

Aquí vemos la descarga de main.cvd, daily.cvd y bytecode.cvd. Hay un par de advertencias emitidas, y esto
se debe a que los archivos no existen y freshclam intenta leer los encabezados de la versión antes de
actualizar. Las actualizaciones posteriores no mostrarán estas advertencias. También recibimos una advertencia
de que Clamd NO fue notificado. Esto se debe a que no estamos ejecutando un demonio de escaneo (común
para servidores de correo). Puede ejecutar freshclam --no-warnings si desea suprimirlos.

Ahora estamos listos para ejecutar clamscan en nuestro objetivo. ClamAV admite el escaneo directo de
archivos y puede repetirse a través de muchos tipos de archivos y archivos diferentes, incluidos archivos zip,
archivos PDF, puntos de montaje y archivos de imágenes forenses (tipos de partición GPT y MBR). La forma
más confiable de ejecutar clamscan es ejecutarlo en un sistema de archivos montado.

Hay opciones dentro de clamscan para copiar o mover archivos infectados a directorios alternativos.
Normalmente, no hacemos esto con archivos infectados o malware durante un examen forense, sino que
preferimos examinar los archivos en su lugar o extraerlos con herramientas forenses. Compruebe hombre , ÿ
clamscan para obtener detalles adicionales si está interesado. La salida de clamscan se puede registrar con
la opción --log=logfile , útil para mantener notas de examen completas.

Probaremos clamscan en nuestros archivos NTFS EWF que descargamos anteriormente. Cambie al directorio
en el que se encuentran los archivos, use ewfmount para montar las imágenes y luego losetup -P para asignar
la partición NTFS. Si aún no ha creado los puntos de montaje de destino en /mnt , utilice mkdir para crearlos
ahora. Escanearemos la partición NTFS.

root@forensicbox:~# cd NTFS_Pract_2017

root@forensicbox:NTFS_Pract_2017# ewfmount NTFS_Pract_2017.E01 /mnt/ewf


ewfmount 20140806

root@forensicbox:NTFS_Pract_2017# losetup -Prf --show /mnt/ewf/ewf1 /dev/loop0

root@forensicbox:NTFS_Pract_2017# mount -o ro -t ntfs-3g /dev/loop0p1


/mnt/análisis

root@forensicbox:NTFS_Pract_2017# clamscan -r -i /mnt/analysis --log=NTFS_AV.txt /mnt/analysis/


Windows/System32/eicar.com: Win.Test.EICAR_HDB-1 ENCONTRADO

188
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

----------- RESUMEN DE ESCANEO -----------


Virus conocidos: 8774757
Versión del motor: 0.102.4
Directorios escaneados: 26
Archivos escaneados: 187
Archivos infectados: 1
Datos escaneados: 213,82 MB
Lectura de datos: 95,12 MB (proporción 2,25:1)
Tiempo: 83.347 seg (1 m 23 s)

Usando ewfmount, fusionamos el montaje de los archivos EWF en /mnt/ewf, y luego usamos losetup -P para
mapear la partición NTFS, que luego se monta en /mnt/analysis. Luego, el comando clamscan se ejecuta con
la opción -r para recursivo (escanear subdirectorios) y -i para mostrar solo los archivos infectados. La opción -i
evita una salida excesivamente desordenada (listas de archivos OK). Finalmente, usamos --log para documentar
nuestra salida. La firma de virus encontrada es para un archivo de prueba de antivirus común.

Ver el registro resultante con cat:

root@forensicbox:NTFS_Pract_2017# gato NTFS_AV.txt

-------------------------------------------------- --------------------------------------------

/mnt/analysis/Windows/System32/eicar.com: Win.Test.EICAR_HDB-1 ENCONTRADO

----------- RESUMEN DE ESCANEO -----------


Virus conocidos: 8774757
Versión del motor: 0.102.4
Directorios escaneados: 26
Archivos escaneados: 187
Archivos infectados: 1
Datos escaneados: 213,82 MB
Lectura de datos: 95,12 MB (proporción 2,25:1)
Tiempo: 83.347 seg (1 m 23 s)

Tenga en cuenta que se encontró un solo resultado positivo Win.Test.EICAR_HDB-1 . Este es un archivo de
prueba AV colocado intencionalmente en la imagen. Cuando haya terminado, desmonte el sistema de archivos
NTFS, elimine la asignación de pérdida y desmonte la imagen montada en fusible.

root@forensicbox:NTFS_Pract_2017# desmontar /mnt/análisis

root@forensicbox:NTFS_Pract_2017# losetup -d /dev/loop0

root@forensicbox:NTFS_Pract_2017# fusermount -u /mnt/ewf

189
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Este es un ejemplo muy simple de evidencia de escaneo de virus con ClamAV. Esta es una herramienta
excepcionalmente poderosa, y debe explorar la página de manual y la documentación en línea.

8.13.2 Revisión de datos básicos en la línea de comandos

Linux viene con una serie de utilidades simples que facilitan comparativamente la creación de imágenes y la
revisión básica de discos y unidades sospechosas. Ya hemos cubierto dd, fdisk, comandos grep limitados ,
hashing e identificación de archivos con el comando de archivo . Continuaremos usando esas herramientas y
también cubriremos algunas utilidades adicionales en algunos ejercicios prácticos.

A continuación, se incluye una serie de pasos muy simples que le permitirán realizar una revisión de datos de
práctica fácil utilizando las herramientas simples mencionadas anteriormente. Todos los comandos se pueden
explorar más con man [comando]. Nuevamente, esto es solo una introducción a los comandos básicos. Nuestro
enfoque aquí está en los comandos mismos, NO en el sistema de archivos que estamos revisando. Estos pasos
pueden ser mucho más poderosos con algunos ajustes en la línea de comandos.

Habiendo dicho ya que esto es solo una introducción, la mayor parte del trabajo que hará aquí se puede aplicar al
trabajo de casos real. Las herramientas son herramientas estándar de GNU/Linux, y aunque el ejemplo que se
muestra aquí es muy simple, se puede ampliar con un poco de práctica y un poco (bueno, mucho) de lectura. El
sistema de archivos de práctica que usaremos aquí es una imagen sin procesar antigua simple de un sistema de
archivos FAT producido por el comando dd24 Usamos esta imagen en algunos ejercicios anteriores.
Si aún no lo ha hecho, descárguelo ahora. Puede hacer esto como un usuario normal con wget:

barry@forensicbox:~$ wget https://www.linuxleo.com/Files/fat_fs.raw --2019-07-18 21:13:10--


https://www.linuxleo.com/Files/fat_fs. raw Resolviendo www.linuxleo.com... 74.208.236.144
Conectando a www.linuxleo.com|74.208.236.144|:443... conectado.

Solicitud HTTP enviada, esperando respuesta... 200 OK Longitud:


1474560 (1.4M)
Guardando en: 'fat_fs.raw'

fat_fs.raw 100 %[================>] 1,41 M 4,29 MB/s en 0.3s

2019-07-18 21:13:11 (4.29 MB/s) - 'fat_fs.raw' guardado [1474560/1474560]

barry@forensicbox:~$ sha1sum fat_fs.raw


f5ee9cf56f23e5f5773e2a4854360404a62015cf fat_fs.raw

La salida de varios comandos y la cantidad de búsqueda que haremos aquí está limitada por el alcance de este
ejemplo y la cantidad de datos en esta imagen muy pequeña.

Como mencionamos anteriormente, cuando realmente haga un análisis en medios más grandes, querrá tenerlo
organizado. Cuando emite un comando que da como resultado un archivo de salida, ese

24Esta es exactamente la misma imagen que el nombre práctico anterior.floppy.dd.

190
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El archivo terminará en su directorio actual, a menos que especifique una ruta para él.

Una forma de organizar sus datos sería crear un directorio en su directorio principal para pruebas y luego un
subdirectorio para diferentes casos. Puede crear su directorio de salida en cualquier medio o volumen que desee. En
aras de la simplicidad aquí, usaremos nuestro directorio de inicio.
Continuaremos y haremos esto como un usuario regular, para que podamos acostumbrarnos a ejecutar los comandos
necesarios para el acceso de root. Nunca es una buena idea hacer todo su trabajo conectado como root. Aquí está
nuestro comando para crear un directorio de salida para los resultados del análisis. Estamos ejecutando el comando en
el directorio donde colocamos nuestro archivo de imagen arriba. El ./ delante del nombre del directorio que estamos
creando indica en el directorio actual:

barry@cajaforense:~$ mkdir ./análisis

barry@forensicbox:~$ ls
análisis/ fat_fs.raw

Dirigir todos los resultados de nuestro análisis a este directorio mantendrá nuestros archivos de salida separados de
todo lo demás y ayudará a mantener la organización del caso. Es posible que desee montar una unidad separada como /
mnt/analysis para almacenar la salida de su análisis. Cómo lo organices depende de ti.

Un paso adicional que quizás desee realizar es crear un punto de montaje especial para todos los análisis del sistema
de archivos sujetos. Esta es otra forma de separar el uso del sistema común con el procesamiento de pruebas. Para
crear un punto de montaje en el directorio /mnt , deberá iniciar sesión temporalmente como raíz. En este caso,
iniciaremos sesión como root, crearemos un punto de montaje y luego montaremos la imagen fat_fs.raw para examinarla
más a fondo. Recuerde nuestra discusión sobre el superusuario (root).
Usamos el comando su para convertirnos en root:

barry@forensicbox:~$ su -
Contraseña: <ingrese la contraseña raíz>

raíz@forensicbox:~# mkdir /mnt/evid

Todavía usando nuestro inicio de sesión raíz, seguiremos adelante y montaremos la imagen fat_fs.raw en /mnt/evid:

root@forensicbox:~# mount -t vfat -o ro,loop ~barry/fat_fs.raw /mnt/evid

root@forensicbox:~# perder la configuración


NOMBRE SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/bucle0 0 0 1 1 /home/barry/fat_fs.raw

El primer comando anterior es nuestro comando de montaje con el tipo de sistema de archivo establecido
en vfat (-t vfat) y las opciones (-o) solo lectura (ro) y usando el dispositivo de bucle (loop). El sistema de archivos que
estamos montando, fat_fs.raw, está ubicado en /home/barry (como lo indica la tilde delante del nombre del usuario)
montándolo en /mnt/evid. Para la ilustración, usamos el ciclo

191
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Comando para mostrar la asociación del bucle. También hay otras opciones de montaje útiles, como noatime y noexec.
Ver montaje de hombre para más detalles.

Con la imagen montada, podemos salir de nuestro inicio de sesión raíz.

root@forensicbox:~# salir

barry@cajaforense:~$

Ahora puede ver el contenido de la imagen montada en bucle de solo lectura. Aquí es donde puede encontrar la línea de
comandos como una herramienta poderosa, que permite la redirección de archivos y otros métodos para registrar
permanentemente su análisis.

Supongamos que está emitiendo los siguientes comandos desde el punto de montaje adecuado (/mnt/evid). Si
desea guardar una copia de la salida de cada comando, asegúrese de redirigir la salida a su directorio de pruebas (~/
análisis) utilizando una ruta explícita. De nuevo, si ha iniciado sesión como usuario timmy, entonces la tilde es un acceso
directo a /home/timmy. Entonces, en mi caso, escribir ~/analysis es lo mismo que escribir /home/barry/analysis.

Navegue a través de los directorios y vea lo que puede encontrar. Utilice el comando ls . Nuevamente, debe estar en el
directorio /mnt/evid, donde se monta la imagen.

La evidencia está montada en /mnt/evid

Escribiremos nuestros resultados en ~/analysis

Puede comenzar con una lista simple de los contenidos del volumen:

barry@forensicbox:evid$ ls -l total
107
-rwxr-xr-x 1 root root 19536 24 de agosto de 1996 ARP.EXE*
drwxr-xr-x 3 root root 512 23 de septiembre de 2000 Docs/
-rwxr-xr-x 1 root root 37520 24 de agosto de 1996 FTP.EXE*
drwxr- xr-x 2 root root 512 23 de septiembre de 2000 Pics/ -r-xr-
xr-x 1 root root 16161 21 de septiembre de 2000 loveletter.virus* -rwxr-xr-
x 1 root root 21271 19 de marzo de 2000 ouchy.dat* -rwxr -xr-x 1 raíz raíz
12384 2 de agosto de 2000 snoof.gz*

Esto enumerará los archivos en formato largo para identificar el permiso, la fecha, etc. (-l). También puede usar la opción
-R para enumerar recursivamente a través de directorios. Es posible que desee canalizar eso a través de menos.

barry@forensicbox:evid$ ls-lR | menos


.:

192
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

total 107
-rwxr-xr-x 1 raíz raíz 19536 24 de agosto de 1996 ARP.EXE*
drwxr-xr-x 3 raíz raíz 512 23 de septiembre de 2000 Docs/
-rwxr-xr-x 1 raíz raíz 37520 24 de agosto de 1996 FTP.EXE*
drwxr-xr-x 2 root root 512 23 de septiembre de 2000 Pics/ -r-xr-
xr-x 1 root root 16161 21 de septiembre de 2000 loveletter.virus* -rwxr-xr-
x 1 root root 21271 19 de marzo de 2000 ouchy.dat* -rwxr-xr-x 1 raíz raíz
12384 2 de agosto de 2000 snoof.gz*

./Documentos:

total 57
-rwxr-xr-x 1 root root 17920 21 de septiembre de 2000 Benchmarks.xls*
-rwxr-xr-x 1 root root 2061 21 de septiembre de 2000 Computer_Build.xml*
-rwxr-xr-x 1 root root 32768 21 de septiembre de 2000 Law.doc * drwxr-xr-x
2 root root 512 23 de septiembre de 2000 Privado/ -rwxr-xr-x 1 root root
3928 21 de septiembre de 2000 whyhack*

./Docs/Privado:
total 0

./Fotos:
total 1130
-rwxr-xr-x 1 raíz raíz 94426 19 de marzo de 2000 C800x600.jpg* -rwxr-
xr-x 1 raíz raíz 243245 21 de septiembre de 2000 Stoppie.gif* -rwxr-xr-
x 1 raíz raíz 183654 21 de septiembre de 2000 bike2.jpg * -rwxr-xr-x 1
raíz raíz 187598 21 de septiembre de 2000 bike3.jpg* -rwxr-xr-x 1 raíz
raíz 27990 21 de septiembre de 2000 matrixs3.jpg* -rwxr-xr-x 1 raíz
raíz 418582 21 de septiembre de 2000 mulewheelie. gif*

Estamos viendo archivos en una partición FAT usando herramientas de Linux. Cosas como los permisos pueden
ser un poco engañosas dependiendo del sistema de archivos. Aquí es donde entran en juego algunas de nuestras
herramientas forenses más avanzadas.

Utilice la barra espaciadora para desplazarse por la lista recursiva de archivos. Recuerde que la letra q cerrará una
sesión de paginación (menos) .

Un paso importante en cualquier análisis es verificar la integridad de sus datos tanto antes como después de que se
complete el análisis. Ya hemos cubierto las verificaciones de integridad en discos e imágenes. Los mismos comandos
funcionan en archivos individuales. Puede obtener un hash (CRC, MD5 o SHA) de cada archivo de varias maneras
diferentes. En este ejemplo, usaremos el hash SHA1. Podemos obtener un hash SHA1 de un archivo individual
cambiando a nuestro directorio de evidencia (/mnt/evid) y ejecutando el siguiente comando en uno de los archivos
(estos comandos se pueden reemplazar con md5sum si prefiere usar el algoritmo hash MD5) .

barry@forensicbox:evid$ sha1sum ARP.EXE


49f0405267a653bac165795ee2f8d934fb1650a9 ARP.EXE

193
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:evid$ sha1sum ARP.EXE > /análisis/ARP.sha1.txt

barry@forensicbox:evid$ gato /análisis/ARP.sha1.txt


49f0405267a653bac165795ee2f8d934fb1650a9 ARP.EXE

La redirección en el segundo comando, usando el > nos permite almacenar la firma en el archivo ~/analysis/
ARP.sha1.txt y usarla más adelante. Tener hashes de archivos individuales puede servir para una serie de
propósitos, incluida la comparación de los hashes con listas de archivos malos conocidos (archivos de
contrabando o malware, por ejemplo), o para eliminar archivos buenos conocidos de un examen. También hay
ocasiones en las que simplemente se le puede pedir que proporcione una lista de todos los archivos en un
volumen, e incluir un hash de cada archivo es simplemente una buena práctica. Hacer esto como un comando
individual para cada archivo en un disco sería tedioso en el mejor de los casos.

Podemos obtener un hash de cada archivo en el disco usando el comando de búsqueda y una opción que nos
permite ejecutar un comando adicional en cada archivo encontrado. Podemos obtener una lista muy útil de
hashes SHA1 para cada archivo en nuestro punto de montaje usando find para identificar todos los archivos
regulares en el sistema de archivos y ejecutar un hash en todos esos archivos:

barry@forensicbox:evid$ ~/ encontrar .-tipo f -exec sha1sum {} \; >


análisis/sha1.filelist.txt

barry@forensicbox:evid$ gato ~/análisis/sha1.filelist.txt


86082e288fea4a0f5c5ed3c7c40b3e7947afec11 ./Docs/Benchmarks.xls
81e62f9f73633e85b91e7064655b0ed190228108 ./Docs/Computer_Build.xml
0950fb83dd03714d0c15622fa4c5efe719869e48 ./Docs/Law.doc
7a1d5170911a87a74ffff8569f85861bc2d2462d ./Docs/whyhack
63ddc7bca46f08caa51e1d64a12885e1b4c33cc9 ./Pics/C800x600.jpg
8844614b5c2f90fd9df6f8c8766109573ae1b923 ./Pics/bike2.jpg
4cf18c44023c05fad0de98ed6b669dc4645f130b ./Pics/bike3.jpg
aeb0151e67ff4dd5c00a19ee351801b5a6f11438 ./Pics /matrixs3.jpg
d252ac06995c1a6215ca5e7df7c3e02c79c24488 ./Pics/mulewheelie.gif
f6f8586eefb5f163eac2bd8ec09053d70cae000e ./Pics/Stoppie.gif
49f0405267a653bac165795ee2f8d934fb1650a9 ./ARP.EXE
9a886c8e8ad376fc53d6398cdcf8aab9e93eda27 ./FTP.EXE
4c703ee9802aa110b0673d7ae80468e6418bf74c ./loveletter.virus
7191c24f0f15cca6a5ef9a4db0aee7b40789d6c0 ./ouchy.dat
6666d9b50508360f4a2362e7fd74c91fcb68d2e8 ./snoof.gz

Este comando dice nd, comenzando en el directorio actual (indicado por "."), cualquier archivo normal (-type f) y
ejecuta (-exec) el comando sha1sum en todos los archivos encontrados ({}). Redirija la salida a sha.filelist.txt
en el directorio ~/analysis (donde almacenamos todos nuestros archivos de evidencia). El \; es una secuencia
de escape que finaliza el comando -exec . El resultado es una lista de archivos de nuestro punto de montaje de
análisis y sus hashes SHA. Nuevamente, puede sustituir el comando md5sum si lo prefiere.

194
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Luego miramos los hashes usando el comando cat para transmitir el archivo a la salida estándar (en
este caso, nuestra pantalla de terminal), como en el segundo comando anterior.

También puede hacer su verificación (o coincidencia de hash) utilizando una lista de hash creada con
uno de nuestros programas de hash (sha1sum, md5sum, etc.), puede usar la opción -c . Si los archivos
coinciden con los de la lista hash, el comando devolverá OK. Asegurándose de estar en un directorio
donde las rutas relativas provistas en la lista apuntarán a los archivos correctos, use el siguiente comando:

barry@forensicbox:evid$ ./ sha1sum -c ~/analysis/sha1.filelist.txt


Docs/Benchmarks.xls: OK ./
Docs/Computer_Build.xml: OK ./
Docs/Law.doc: OK ./Docs/whyhack:
OK ./Pics/C800x600.jpg: OK . /Pics/
bike2.jpg: OK ./Pics/bike3.jpg: OK ./
Pics/matrixs3.jpg: OK ./Pics/
mulewheelie.gif: OK ./Pics/
Stoppie.gif: OK ./ARP.EXE: OK

./FTP.EXE: OK
./loveletter.virus: OK ./
ouchy.dat: OK ./snoof.gz:
OK

Nuevamente, los hash SHA en el archivo se compararán con las sumas SHA tomadas del punto de
montaje. Si algo ha cambiado, el programa dará un mensaje de FALLO . Si hay hashes fallidos, recibirá
un mensaje que resume la cantidad de fallas en la parte inferior de la salida. Esta es la forma más rápida
de verificar hashes. Tenga en cuenta que los nombres de archivo comienzan con ./ esto indica una ruta
relativa. Lo que significa que debemos estar en el mismo directorio relativo cuando comprobamos los
hashes, ya que ahí es donde el comando buscará los archivos.

Seamos creativos. Tome el comando ls que usamos anteriormente y redirija la salida a su directorio ~/
analysis . Con eso, tendrá una lista de todos los archivos y sus propietarios y permisos en el sistema
de archivos en cuestión. Consulte la página del manual para conocer varios usos y opciones. Por
ejemplo, podría usar la opción -i para incluir el inodo en la lista (para sistemas de archivos Linux), la
opción -t se puede usar para que la salida incluya y ordene por tiempo de modificación.

barry@forensicbox:evid$ ls-lRt

También puede obtener una lista de los archivos, uno por línea, usando el comando de búsqueda (con
-type f) y redirigiendo la salida a otro archivo.

barry@forensicbox:evid$ encontrar .-tipo f > ~/analysis/find.filelist.txt

195
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

O una lista de solo directorios (-tipo d)

barry@forensicbox:evid$ encontrar . -escriba d > ~/analysis/find.dirlist.txt

También está el comando de árbol , que imprime una lista recursiva que es más visual...
sangra las entradas por profundidad de directorio y colorea los nombres de archivo (si la terminal está correctamente
establecer).

barry@forensicbox:evid$ árbol
.
|-- ARP.EXE
|-- Documentos

| |-- Puntos de referencia.xls


| |-- Computer_Build.xml
| |-- Derecho.doc
| |-- Privado
| '-- por qué hackear
|-- FTP.EXE
|-- Fotos
| |-- C800x600.jpg
| |-- Stoppie.gif
| |-- bici2.jpg
| |-- bici3.jpg
| |-- matrices3.jpg
| '-- mulewheelie.gif
|-- loveletter.virus
|-- ouchy.dat
'-- snoof.gz

3 directorios, 15 archivos

Eche un vistazo a los comandos anteriores y compare su salida. ¿Cuál te gusta más?
Recuerde que la sintaxis asume que está emitiendo el comando desde el directorio /mnt/evid
(mire su aviso, o use pwd si no sabe dónde está). El comando de búsqueda es
especialmente poderoso para buscar archivos de un sello de fecha o tamaño especí co (o superior e inferior)
límites).

También puede usar el comando grep en cualquiera de las listas creadas por los comandos anteriores para
cualquier cadena o extensión que desee buscar.

barry@forensicbox:evid$ ./ grep -i .jpg ~/analysis/find.filelist.txt


Fotos/C800x600.jpg
./Fotos/bicicleta2.jpg
./Fotos/bicicleta3.jpg
./Fotos/matrixs3.jpg

196
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Este comando busca el patrón .jpg en la lista de archivos, usando la extensión de nombre de archivo para
alertarnos sobre un archivo JPEG. El -i hace que el comando grep no distinga entre mayúsculas y minúsculas.
Una vez que tenga un mejor manejo de grep, puede hacer que sus búsquedas sean mucho más específicas. Por
ejemplo, especificar cadenas al principio o al final de una línea (como extensiones de archivo) usando
grep
^ otiene
$. man
una
sección completa sobre estos términos de expresión regular.

8.13.3 Elaboración de una lista de tipos de archivos

¿Qué sucede si está buscando archivos JPEG pero el nombre del archivo ha cambiado o la extensión es
incorrecta? También puede ejecutar el comando de archivo en cada archivo y ver qué puede contener.
Como vimos en secciones anteriores al examinar los sistemas de archivos, el comando de archivo compara el
encabezado de cada archivo (los primeros bytes de un archivo sin procesar, o lo que defina un archivo) con el
contenido del archivo "mágico". Luego genera una descripción del archivo.

¿Recuerda nuestro uso de la opción -exec del comando de búsqueda con sha1sum? Hagamos lo mismo con el
archivo:

barry@forensicbox:evid$ encontrar . -tipo f -exec archivo {} \; > ~/análisis/


tipo de archivo.txt

Esto crea un archivo de texto con la salida del comando de archivo para cada archivo que devuelve el comando
de búsqueda . El archivo de texto está en ~/analysis/filetype.txt. Ver la lista resultante con cat (o menos). Las
entradas del archivo están separadas a continuación para facilitar la lectura:

barry@forensicbox:evid$ ./ Docs/ gato ~/análisis/tipo de archivo.txt


Benchmarks.xls: Composite Document File V2 Document, Little Endian, OS: Windows, versión 4.10, página
de códigos: 1252, autor: Barry J. Grundy, último guardado por: Barry J. Grundy , Nombre de la aplicación de
creación: Microsoft Excel, Hora/fecha de creación: Sábado 9 de enero 19:53:35 1999, Seguridad: 0

./Docs/Computer_Build.xml: datos comprimidos gzip, de Unix, tamaño original 39880

./Docs/Law.doc: Archivo de documento compuesto Documento V2, Little Endian, Sistema


operativo: Windows, Versión 4.0, Página de código: 1252, Título: El brazo largo de la ley, Autor: OAG,
Plantilla: Normal.dot, Último guardado Por: OAG, número de revisión: 2, nombre de la aplicación de creación:
Microsoft Word 8.0, tiempo total de edición: 01:00, hora/fecha de creación: jueves 21 de septiembre 13:16:00
2000, última hora/fecha guardada: jueves 21 de septiembre 13:16:00 2000, Número de páginas: 1, Número de
palabras: 1335, Número de caracteres: 7610, Seguridad: 0

./Docs/whyhack: texto ASCII, con líneas muy largas, con terminaciones de línea CRLF, LF
...

197
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Si está buscando imágenes en particular, use grep para especificar eso. El siguiente comando buscaría la cadena
'image' usando el comando grep en el archivo /root/evid/filetype.list

barry@forensicbox:evid$ grep 'image' ~/analysis/filetype.txt ./Pics/


C800x600.jpg: datos de imagen JPEG, estándar JFIF 1.02, resolución (DPI), densidad
80x80, longitud de segmento 16, comentario: "Archivo escrito por Adobe Photoshop
5.0", progresivo, precisión 8, 800x600, componentes 3

./Pics/matrixs3.jpg: datos de imagen JPEG, estándar JFIF 1.01, relación de aspecto, densidad 1x1
,ÿ , longitud de segmento 16, línea base, precisión 8, 483x354, componentes 3

./Pics/Stoppie.gif: datos de imagen GIF, versión 87a, 1024 x 693

./ouchy.dat: datos de imagen JPEG, estándar JFIF 1.02, resolución (DPI), densidad
74x74, longitud de segmento 16, comentario: "Archivo escrito por Adobe
Photoshop 5.0", línea de base, precisión 8, 440x297, componentes 3

El archivo leouchy.dat no tiene la extensión adecuada, pero aún se identifica como una imagen JPEG. También
tenga en cuenta que algunas de las imágenes anteriores no aparecen en nuestra lista grep porque sus descripciones
no contienen la palabra imagen. Hay dos imágenes de mapa de bits de Windows que tienen extensiones .jpg que no
terminan en la lista grep . Tenga esto en cuenta cuando utilice el comando de archivo .

Cuando usa grep en esta lista, está buscando cadenas en la descripción, no tipos de archivos reales. Preste atención
a la diferencia.

8.13.4 Visualización de archivos

Para archivos de texto, como hemos cubierto, puede usar cat, more o less para ver el contenido.

nombre de archivo de gato

más nombre de archivo

menos nombre de archivo

Tenga en cuenta que si la salida no es texto estándar, entonces podría corromper la salida del terminal (escriba reset
o stty sane en el indicador y debería desaparecer). El uso del comando de archivo le dará una buena idea de qué
archivos se podrán ver y qué programa podría usarse mejor para ver el contenido de un archivo. Por ejemplo, los
documentos de Microsoft O ce se pueden abrir en Linux utilizando programas como OpenO ce, catdoc o catdocx.

Quizás una mejor alternativa para ver archivos desconocidos sería usar el comando strings.
Este comando se puede usar para analizar texto ASCII regular de cualquier archivo. Es bueno para formatear

198
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

documentos, archivos de datos comprimidos no XML (archivos antiguos de MS Office, etc.) e incluso archivos
binarios (archivos ejecutables no identificados, por ejemplo), que pueden tener cadenas de texto interesantes
ocultas en ellos. Podría ser mejor canalizar la salida a través de menos.

Eche un vistazo a la imagen montada en /mnt/evid. Hay un archivo llamado ARP.EXE. ¿Qué hace este le? No
podemos ejecutarlo, y al usar el comando de archivo sabemos que es un ejecutable de DOS/Windows. Ejecute
el siguiente comando (nuevamente, suponiendo que se encuentra en el directorio /mnt/evid ) y desplácese por el
resultado. ¿Encuentras algo de interés (pista: como un mensaje de uso)?

barry@forensicbox:evid$ cadenas ARP.EXE | menos !Este


programa no se puede ejecutar en modo DOS.
.texto
'.datos
.rsrc
@.reloc
WSOCK32.dll
CRTDLL.dll
KERNEL32.dll
Salida NTDLL.DLL
...
Muestra y modifica las tablas de traducción de direcciones IP a físicas utilizadas por el protocolo
de resolución de direcciones (ARP).
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [dirección_inet] [-N dirección_if]
-a Muestra las entradas ARP actuales interrogando los datos del protocolo
actual. Si se especifica inet_addr, se muestran las direcciones IP y física solo
para la computadora especificada. Si más de una interfaz de red usa ARP, se
muestran las entradas para cada tabla ARP.

-g Igual que -a.


inet_addr Especifica una dirección de Internet.
...

El uso de cadenas puede ayudarnos a identificar potencialmente el propósito de un ejecutable en algunos casos.

La visualización de imágenes (archivos de imágenes) desde el punto de montaje de la evidencia se puede realizar
en la línea de comandos con el comando de visualización (suponiendo que se encuentre en una sesión de X
Window). Eche un vistazo al archivo ouchy.dat en la raíz de su punto de montaje /mnt/evid . Podemos ver que
es un archivo de imagen, aunque la extensión es incorrecta al usar el comando de archivo . Sin salir de la línea
de comando, podemos ver el archivo usando display:

barry@forensicbox:evid$ archivo ouchy.dat


ouchy.dat: datos de imagen JPEG, estándar JFIF 1.02, resolución (DPI), densidad
74x74, longitud de segmento 16, comentario: "Archivo escrito por Adobe

199
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Photoshop 5.0", línea base, precisión 8, 440x297, componentes 3

barry@forensicbox:evid$ mostrar ouchy.dat

Figura 9: Visualización de una imagen con una extensión que no coincide

Cierre la imagen con el mouse o use la combinación de teclas <ctrl-c> desde la línea de comando para cerrar el
programa.

Un buen truco que puede hacer si tiene un puñado de archivos de imagen en un directorio que desea ver sin tener
que usar un comando separado para cada uno es usar un ciclo bash . Las secuencias de comandos y la
programación bash están fuera del alcance de este documento (por ahora), pero este es un ciclo muy simple que
ilustra un uso más poderoso de la línea de comandos. Esto se puede hacer todo en una línea, pero separar los
comandos individuales con la tecla <enter> lo hace un poco más legible.25

Primero, vayamos al directorio Pics/ bajo /mnt/evid, hagamos un ls rápido y veamos que tenemos un pequeño
directorio con algunos archivos de imagen (puedes verificar esto con el archivo *). Luego escribimos nuestro bucle:

barry@forensicbox:evid$ cd Fotografías

barry@forensicbox:Pics$ ls
C800x600.jpg* Stoppie.gif* bike2.jpg* bike3.jpg*
matrixs3.jpg* mulewheelie.gif*

barry@forensicbox:Pics$ para foto en ./* <enter>

25Existen, por supuesto, programas de visualización de imágenes que le permiten buscar imágenes en miniatura, como Ranger, pero
cubrimos este ciclo con fines educativos

200
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

> haz <ingresar> >


muestra $pic <ingresar> >
hecho <ingresar>

La primera línea de un ciclo de bash anterior significa que para cada archivo en el directorio actual (./*), asigne
a cada archivo el nombre de variable pic a medida que avanzamos en el ciclo. La segunda línea es simplemente
la palabra clave bash do. La tercera línea ejecuta la visualización del valor de la variable pic ($pic) en cada
iteración del bucle, seguida de la palabra clave bash done para cerrar el bucle. A medida que ejecuta el ciclo,
se mostrará cada imagen (pase a la siguiente imagen con la barra espaciadora; puede variar según su sistema).
El ciclo continúa hasta que se agotan todos los valores de \$pic (todos los archivos en el directorio) y el ciclo
finaliza. Aprenda a hacer esto y le prometo que lo encontrará útil casi a diario.

Si actualmente está ejecutando el sistema de ventanas X, puede usar cualquiera de las herramientas gráficas
que vienen estándar con cualquier distribución de Linux que esté usando. geeqie es una herramienta gráfica
para el escritorio XFCE que mostrará archivos gráficos en un directorio. Experimenta un poco.
Otras herramientas, como gthumb para Gnome y Konqueror del escritorio KDE, tienen una función que creará
una galería de imágenes html muy agradable para usted a partir de todas las imágenes en un directorio.

Una vez que haya terminado de explorar, asegúrese de desmontar la imagen de disco montada en bucle.
Nuevamente, asegúrese de no estar en ningún lugar del punto de montaje (usando ese directorio en otra sesión
de terminal) cuando intente desmontar, o obtendrá el error de ocupado. Los siguientes comandos lo llevarán
de regreso a su directorio de inicio (cd sin argumentos lo llevará a su directorio de inicio automáticamente).
Pasamos a root y desmontamos el sistema de archivos montado en bucle.

barry@forensicbox:fotos$ cd

barry@cajaforense:~$ su -
Clave:

root@forensicbox:~# desmontar /mnt/evid

root@forensicbox:~# salir

barry@cajaforense:~$

8.13.5 Búsqueda de texto en todas las áreas de la imagen forense

Ahora volvamos a la imagen original. La imagen de disco montada en bucle le permitió verificar todos los
archivos y directorios usando una vista lógica del sistema de archivos. ¿Qué pasa con el espacio sin asignar y
de holgura (vista física)? Ahora analizaremos la imagen en sí, ya que fue una copia bit a bit e incluye datos en
las áreas no asignadas del disco. Haremos esto usando herramientas rudimentarias de Linux.

201
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Supongamos que hemos tomado esta imagen de los medios utilizados por un ex empleado de una gran
corporación. El aspirante a cracker envió una carta a la corporación amenazando con liberar un virus en su
red. El sospechoso niega haber enviado la carta. Esta es una simple cuestión de encontrar el texto de un
archivo eliminado (espacio no asignado).

Primero, vuelva al directorio donde guardó el archivo de imagen fat_fs.raw. En este caso, el archivo está en
el directorio de inicio (que puede ver que es el directorio de trabajo actual tanto por el ~ en el indicador como
por la salida del comando pwd ).

barry@forensicbox:~$ pwd /inicio/


barry

barry@forensicbox:~$ ls Escritorio/
Descargas/ análisis/ fat_fs.raw*

Ahora usaremos el comando grep para buscar en la imagen cualquier instancia de una expresión o patrón.
Usaremos una serie de opciones para hacer que la salida de grep sea más útil. La sintaxis de grep es
normalmente:

grep [-opciones] <patrón> <archivo a buscar>

Lo primero que haremos será crear una lista de palabras clave para buscar. Después de todo, es raro que
alguna vez queramos buscar evidencia de una sola palabra clave. Para nuestro ejemplo, usemos "rescate",
"$50,000" y "desatar un virus". Estas son algunas palabras clave y una frase que hemos decidido usar de la
carta original recibida por la corporación ficticia. Haga la lista de palabras clave (¡usando vi , por supuesto!) y
guárdela como ~/analysis/searchlist.txt. Asegúrese de que cada cadena que desee buscar esté en una línea
diferente.

$50,000
rescate
desencadenar un virus

¡Asegúrese de que NO HAY LÍNEAS EN BLANCO EN LA LISTA O AL FINAL DE LA LISTA!

Ahora ejecutamos el comando grep en nuestra imagen:

barry@forensicbox:~$ grep -abif análisis/lista de búsqueda.txt fat_fs.raw > análisis/aciertos.txt

Le estamos pidiendo a grep que use la lista que creamos en ./analysis/searchlist.txt para los patrones que
estamos buscando. Esto se especifica con la opción -f <archivo> . Le estamos diciendo a grep que busque
estos patrones en fat_fs.raw y redirija la salida a un archivo llamado hits.txt en el directorio ./analysis , para
que podamos registrar la salida. La opción -a le dice a grep que procese el archivo como si fuera texto, incluso
si es binario. La opción -i le dice a grep que ignore superior e

202
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

minúscula. Y la opción -b le dice a grep que nos proporcione el conjunto de bytes de cada hit para que podamos
encontrar la línea en xxd (nuestro visor hexadecimal de línea de comando). Anteriormente mencionamos la
página del manual de grep y la sección que tiene sobre expresiones regulares. Tómese el tiempo para leerlo y
experimentar.

Una vez que ejecute el comando anterior, debería tener un nuevo archivo en su directorio de análisis llamado
hits.txt. Ver este archivo con menos o cualquier visor de texto. Tenga en cuenta que las cuerdas pueden ser
mejores para el trabajo. Nuevamente, si usa menos, corre el riesgo de corromper su terminal si hay caracteres
que no son ASCII. Simplemente usaremos cat para transmitir todo el contenido del archivo a la salida estándar.
El archivo hits.txt debería darle una lista de líneas que contienen las palabras en su archivo searchlist.txt .
Delante de cada línea hay un número que representa el conjunto de bytes para ese hit en el archivo de imagen.
Con fines ilustrativos, los términos de búsqueda están subrayados y los conjuntos de bytes están en negrita en el
siguiente resultado:

barry@forensicbox:~$ cat analysis/hits.txt 75441: usted y todo


su negocio rescatan.
75500: Ya he tenido suficiente de su piratería corporativa sin sentido y ya no la toleraré. Recibirás
otra carta la próxima semana. Tendrá un único número de cuenta bancaria y nombre del banco. Quiero que deposites
$50,000 en la cuenta el día que recibas la carta.

75767: No intentes nada y no contactes a la policía. Si lo hace, desencadenaré un virus que


derribará toda su red y destruirá la confianza de sus consumidores.

De acuerdo con nuestra filosofía de línea de comandos, usaremos xxd para mostrar los datos encontrados en
cada byte de desplazamiento. xxd es una herramienta de volcado hexadecimal de línea de comandos, útil para
examinar archivos. Haga esto para cada desplazamiento en la lista de aciertos. La opción -s para xxd es para
que podamos "buscar" en el archivo el número especificado de bytes. Esto debería producir algunos resultados
interesantes si se desplaza por encima y por debajo de las compensaciones. Aquí usaremos xxd y buscaremos
el primer hit en el byte de desplazamiento 75441 con la opción -s . Canalizaremos la salida al comando head ,
que nos mostrará las primeras 10 líneas de salida. Puede ver más de la salida canalizando menos en su lugar.

barry@forensicbox:~$ xxd -s 75441 fat_fs.raw | head 000126b1: 796f 7520 616e


6420 796f 7572 2065 6e74 usted y su ent 000126c1: 6972 6520 6275 7369 6e65 7373 2072 616e ire
business corrió
000126d1: 736f 6d2e 0a0a 5468 6973 2069 7320 6e6f algo... Esto no es

000126e1: 7420 6120 6a6f 6b65 2e0a 0a49 2068 6176 ta joke...I hav 000126f1: 6520 6861 6420 656e 6f75
6768 206f 6620 e had enough of 00012701: 796f 7572 206d 696e 646c 6573 7320 636f your mindless co
00012711: 7270 6f72 6174 6520 7069 7261 6379 2061 piratería corporativa a 00012721: 6e64 2077 696c
6c20 6e6f 206c 6f6e 6765 nd will no long 00012731: 7220 7374 616e 6420 666f 7 420 2 stand for it 69.

00012741: 596f 7520 7769 6c6c 2072 6563 6965 7665 Recibirás

Tenga en cuenta que el uso de grep de esta manera es bastante limitado. Hay juegos de caracteres

203
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

que las versiones comunes de grep (y cadenas también) no son compatibles. Entonces, hacer una búsqueda física
de una cadena en un archivo de imagen solo es útil para lo que le muestra. En otras palabras, los resultados
negativos de una búsqueda grep de una imagen pueden ser engañosos. Las cadenas o palabras clave pueden
existir en la imagen en una forma no reconocible para grep o cadenas. Existen herramientas y métodos que abordan
esto, y discutiremos algunos de ellos más adelante.

Además de la estructura de las imágenes y los problemas del tamaño de las imágenes, también debemos
preocuparnos por el uso de la memoria y nuestras herramientas. Es posible que encuentre que grep, cuando se usa
como se ilustra en el ejemplo de análisis de imágenes pequeñas, podría no funcionar como se esperaba con
imágenes más grandes y podría salir con un error similar a:

grep: memoria agotada

La causa más aparente de esto es que grep realiza sus búsquedas línea por línea. Cuando está grepeando una
imagen de disco grande de terabytes de tamaño, es posible que tenga una gran cantidad de bytes para leer antes
de que grep encuentre un carácter de nueva línea. ¿Qué pasaría si grep tuviera que leer varios gigabytes de datos
antes de encontrar una nueva línea? Se agotaría (el búfer de entrada se llena). Hay muchas variables que afectarán
esto, y las causas son en realidad mucho más complejas.

Una posible solución es forzar la alimentación de grep en algunas líneas nuevas. En nuestro análisis de ejemplo,
buscamos texto. No nos preocupan en absoluto los caracteres que no son de texto. Si pudiéramos llevar el flujo de
entrada a grep y cambiar los caracteres que no son de texto a nuevas líneas, en la mayoría de los casos , grep no
tendría ningún problema. Tenga en cuenta que cambiar el flujo de entrada a grep no cambia la imagen en sí.
Además, recuerde que todavía estamos buscando un byte de compensación. Afortunadamente, los tamaños de los
caracteres siguen siendo los mismos, por lo que el desplazamiento no cambia a medida que ingresamos nuevas
líneas en la transmisión (simplemente reemplazamos un carácter por otro).

Digamos que queremos tomar todos los caracteres de control que se transmiten a grep desde la imagen del disco y
cambiarlos a líneas nuevas. Podemos usar el comando de traducción, tr, para lograr esto. Consulte man tr para
obtener más información sobre este poderoso comando:

barry@forensicbox:~$ tr '[:cntrl:]' '\n' < fat_fs.raw | grep-abif


analysis/searchlist.txt 75441:
usted y todo su negocio rescatan.
75500: Ya he tenido suficiente de su piratería corporativa sin sentido y ya no la
toleraré. Recibirás otra carta la próxima semana.
Tendrá un único número de cuenta bancaria y nombre del banco. Quiero que
deposites $50,000 en la cuenta el día que recibas la carta.
75767: No intentes nada y no contactes a la policía. Si lo hace, desencadenaré un virus
que derribará toda su red y destruirá la confianza de sus consumidores.

Este comando diría: "Traduce todos los caracteres contenidos en el conjunto de caracteres de control [:cntrl:] a
nuevas líneas \n. Toma la entrada a tr desde fat_fs.raw (esta vez estamos redirigiendo en la dirección opuesta) y
canaliza la salida a grep, y luego a head.

204
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Esto cambia efectivamente la transmisión antes de que llegue a grep. Observe que la salida no cambia.
La traducción ocurre en la secuencia, y es un intercambio de carácter por carácter.

Este es solo uno de los muchos posibles problemas con los que se puede encontrar. El punto aquí es
que cuando surgen problemas como estos, debe estar lo suficientemente familiarizado con las
herramientas proporcionadas para poder comprender por qué se pueden haber producido tales errores
y cómo puede evitarlos. Recuerde, las herramientas de shell y el software GNU que acompañan a una
distribución de Linux son extremadamente potentes y capaces de abordar casi cualquier tarea. Cuando
falla el shell estándar, puede considerar perl o python como opciones. Estos temas están fuera del
alcance de la presentación actual, pero se presentan como forraje para una mayor experimentación.

Asegúrese de desmontar la imagen cuando haya terminado:

barry@forensicbox:~$ su -
Clave:

root@forensicbox:~# desmontar /mnt/evid

root@forensicbox:~# salir

barry@cajaforense:~$

205
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

9 Análisis forense avanzado (principiante)

Las siguientes secciones son más avanzadas y detalladas. Se presentan nuevas herramientas para
ayudar a completar algunos de sus conocimientos y proporcionar una base más sólida sobre las
capacidades de la línea de comandos de GNU/Linux. Los temas aún se encuentran en el nivel de
principiante, pero debe estar al menos algo cómodo con los comandos que se muestran aquí antes de
abordar los ejercicios. Aunque he incluido los comandos y gran parte de la salida para aquellos que
están leyendo esto sin el beneficio de una computadora Linux a la mano, es importante que siga en su
propio sistema a medida que avanzamos en los ejercicios prácticos. La experimentación práctica es la
mejor manera de aprender.

9.1 Manipulación y análisis de archivos

Profundicemos un poco más en la línea de comandos. A menudo, se discute la utilidad de la interfaz


de línea de comandos (CLI) frente a una herramienta GUI para el análisis. Yo diría que en el caso de
grandes conjuntos de datos estructurados, la CLI puede ser más rápida y más flexible que muchas
herramientas GUI disponibles hoy en día cuando se trata de análisis.

Como ejemplo, veremos un conjunto de archivos de registro de un único sistema Unix. No vamos a
analizarlos en busca de ningún tipo de datos probatorios. El punto aquí es ilustrar la capacidad de los
comandos a través de la CLI para organizar y analizar datos mediante el uso de canalizaciones para
unir una serie de comandos y obtener el resultado deseado. Siga el ejemplo y tenga en cuenta que
para llegar a ser un experto en esto se requerirá mucha lectura y práctica. El payo es enorme.

Cree un directorio llamado Registros y descargue el archivo logs.v3.tar.gz en ese directorio:

barry@cajaforense:~$ Registros mkdir

barry@cajaforense:~$ Registros de discos compactos

barry@forensicbox:Logs$ wget https://www.linuxleo.com/Files/logs.v3.tar.gz --2019-07-22 08:53:46--


https://www.linuxleo.com/ Files/logs.v3.tar.gz Resolviendo www.linuxleo.com... 74.208.236.144
Conectando a www.linuxleo.com|74.208.236.144|:443... conectado.

Solicitud HTTP enviada, esperando respuesta... 200 OK


Longitud: 5144 (5.0K) [aplicación/gzip]
Guardando en: 'logs.v3.tar.gz'

registros.v3.tar.gz 100%[======================>] 5.02K --.-KB/s en 0s

2019-07-22 08:53:47 (1,15 GB/s) - 'logs.v3.tar.gz' guardado [5144/5144]

206
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una vez que se descarga el archivo, verifique el hash y use el comando tar para enumerar el contenido.
Nuestro comando a continuación muestra que los archivos en el archivo se extraerán directamente a nuestro directorio
actual. Hay 5 registros de mensajes .

barry@forensicbox:Registros$ sha1sum logs.v3.tar.gz


a66bc61628af6eab8cef780e4c3f60edcedbcf12 logs.v3.tar.gz

barry@forensicbox:Registros$ tar tzvflogs.v3.tar.gz 8282


-rw-r--r-- raíz/raíz -rw------- 2003-10-29 12:45 mensajes 8302
raíz/raíz 2003-10-29 16:17 mensajes.1 8293
-rw------- raíz/raíz 2003-10-29 16:19 mensajes.2 4694
-rw------- raíz/raíz 2003-10-29 16: 23 mensajes.3 1215
-rw------- raíz/raíz 2003-10-29 16:23 mensajes.4

Los registros de mensajes contienen entradas de una variedad de fuentes, incluido el kernel y otras aplicaciones. Los
archivos numerados resultan de la rotación de registros. A medida que se llenan los registros, se rotan y finalmente
se eliminan. En la mayoría de los sistemas Unix, los registros se encuentran en /var/log/ o /var/adm. Estos son de un
sistema muy antiguo, pero nuevamente, no es el contenido lo que nos interesa aquí, sino el uso de las herramientas.

Extraiga los registros:

barry@forensicbox: Registros$ tar xzvf logs.v3.tar.gz


mensajes
mensajes.1
mensajes.2
mensajes.3
mensajes.4

En lugar de enumerar el contenido con la opción t, lo estamos extrayendo con la opción x. Todas las demás opciones
siguen siendo las mismas.

Echemos un vistazo a una entrada de registro. Canalizamos la salida de cat al comando head -n 1 para que solo
obtengamos la primera línea (recuerde que head sin argumentos adicionales dará las primeras 10 líneas):

barry@forensicbox:Registra $ mensajes de gatos | head -n 1 17


de noviembre 04:02:14 hostname123 syslogd 1.4.1: reiniciar.

Cada línea de los archivos de registro comienza con una marca de fecha y hora. Luego viene el nombre de host
seguido del nombre de la aplicación que generó el mensaje de registro. Finalmente, se imprime el mensaje real.

Por el bien de nuestro ejercicio, supongamos que estos registros son de un sistema víctima y queremos analizarlos y
analizar la información útil. no nos vamos a preocupar

207
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

lo que realmente estamos viendo aquí (no hay nada nefasto en estos registros), nuestro objetivo es
entender cómo reducir la información a algo útil.

En primer lugar, en lugar de analizar cada archivo individualmente, intentemos analizar todos los registros
a la vez. Todos están en el mismo formato y esencialmente comprenden un registro grande. Podemos
usar el comando cat para agregar todos los archivos y enviarlos a la salida estándar. Si trabajamos en
ese flujo de datos, esencialmente estamos haciendo un registro grande de los cinco registros.
¿Puedes ver un problema potencial con esto?

barry@forensicbox:Logs$ mensajes de gatos*| menos


17 de noviembre 04:02:14 hostname123 syslogd 1.4.1: reiniciar.
17 de noviembre 04:05:46 hostname123 su(pam_unix)[19307]: sesión abierta por noticias de
usuarios 17 de noviembre 04:05:47 hostname123 su(pam_unix)[19307]: sesión cerrada por noticias de usuarios
...
23 de noviembre 18:27:58 hostname123 núcleo: hda: hda1 hda2 hda3 hda4 <hda5 hda6 hda7>
23 de noviembre 18:27:00 hostname123 rc.sysinit: montaje del sistema de archivos proc:
exitoso 10 de noviembre 04:02:08 hostname123 syslogd 1.4.1: reinicio.
10 de noviembre 04:05:55 hostname123 su(pam_unix)[15181]: sesión abierta por noticias del
usuario 10 de noviembre 04:05:55 hostname123 su(pam_unix)[15181]: sesión cerrada por
noticias del usuario 11 de noviembre 04:06:09 hostname123 su(pam_unix)[32640]: sesión abierta para noticias de usuario
...

Si observa la salida (desplazarse usando menos), verá que las fechas ascienden y luego saltan a una
fecha anterior y luego comienzan a ascender nuevamente. Esto se debe a que las entradas de registro
posteriores se agregan al final de cada archivo, de modo que cuando se agregan los archivos, las fechas
parecen estar desordenadas. Lo que realmente queremos hacer es transmitir cada archivo hacia atrás
para que se sumen con la fecha más reciente en cada archivo en la parte superior en lugar de en la parte inferior.
De esta manera, cuando los archivos se suman, están en orden. Para lograr esto, usamos tac (sí, eso es
gato al revés).

barry@forensicbox:Logs$ mensajes tácticos*| menos


23 de noviembre 18:27:00 hostname123 rc.sysinit: montaje del sistema de archivos proc:
exitoso 23 de noviembre 18:27:58 hostname123 kernel: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 >
23 de noviembre 18:27:58 hostname123 kernel: Comprobación de partición:

23 de noviembre 18:27:58 hostname123 kernel: controlador ide-floppy 0.99.newide


...

Hermoso. Las fechas ya están en orden. Ahora podemos trabajar en el flujo de entradas de registro como
si fueran un archivo grande (en orden). Continuaremos trabajando con este comando tac para crear
nuestro flujo en orden con cada comando. Podríamos redirigir a otro archivo de registro único que
contenga todos los registros, pero no hay necesidad de hacerlo ahora y crear un archivo de registro
grande no tiene un propósito real.

Primero, reunamos algo de información. Podríamos querer saber, quizás para nuestras notas, cuántas
entradas hay en cada archivo y cuántas entradas hay en total. Aquí hay una forma rápida de hacerlo.

208
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

desde la línea de comando:

barry@forensicbox:Registros$ mensajes tácticos*| wc-l


374

El mismo comando se usa para transmitir todos los archivos juntos y enviar la salida a través de la canalización
al comando wc ("recuento de palabras"). La opción -l especifica que queremos contar solo líneas en lugar de
la salida predeterminada de líneas, palabras y bytes. Para obtener un recuento de todos los archivos y el total
al mismo tiempo, use wc -l en todos los archivos de mensajes a la vez:

barry@forensicbox:Registros$ wc -l mensajes*
100 mensajes 109
mensajes.1 100 mensajes.2
50 mensajes.3 15
mensajes.4 374 en total

Ahora introduciremos un nuevo comando, awk , para ayudarnos a ver campos especí cos de las entradas de
registro. En este caso vamos a ver las fechas. awk es un comando extremadamente poderoso. La versión
que se encuentra con mayor frecuencia en los sistemas Linux es gawk (GNU awk). Si bien lo usaremos como
un comando independiente, awk es en realidad un lenguaje de programación por sí mismo y se puede usar
para escribir scripts para organizar datos. Nuestra concentración se centrará en la función de impresión awk .
Ver hombre awk para más detalles.

Los conjuntos de datos repetitivos a menudo se pueden dividir en columnas o "campos", según la estructura
del archivo. En este caso, los campos en los archivos de registro están separados por un simple espacio en
blanco (el separador de campos predeterminado de awk ). La fecha se compone de los dos primeros campos
(mes y día). Así que echemos un vistazo a awk en acción:

barry@forensicbox:Registros$ mensajes tácticos*| awk '{imprimir $1" "$2}' | menos


23 de noviembre

23 de noviembre

23 de noviembre

...
20 de octubre

20 de octubre

20 de octubre

...

Este comando transmitirá todos los archivos de registro (cada uno de abajo hacia arriba) y enviará la salida a
awk , que imprimirá el primer campo, $1 (mes), seguido de un espacio (" "), seguido del segundo campo, $2
(día). Esto muestra solo el mes y el día de cada entrada. Supongamos que solo quiero ver una de cada fecha
en la que se realizó una entrada. No necesito ver fechas repetidas. Pido ver una de cada línea única de salida
con uniq:

209
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:Registros$ mensajes tácticos*| awk '{imprimir $1" "$2}' | único | menos


23 de noviembre

22 de noviembre

21 de noviembre

...
22 de octubre

21 de octubre

20 de octubre

Esto elimina las fechas repetidas y me muestra solo aquellas fechas con actividad de registro.

Sugerencia CLI: en lugar de volver a escribir el comando cada vez, use la flecha hacia arriba en su teclado para
desplazarse por los comandos más antiguos (parte del historial de comandos de bash). Presione la flecha hacia
arriba una vez y podrá editar su último comando. Muy útil al ajustar comandos para este tipo de análisis.

Si una fecha en particular es de interés, puedo grep los registros para esa fecha en particular (tenga en cuenta
que hay 2 espacios entre el 4 de noviembre , un espacio no funcionará en nuestro comando grep ):

barry@forensicbox:Registra$ mensajes tac*| grep "4 de noviembre"


4 de noviembre 17:41:27 hostname123 sshd(pam_unix)[27630]: sesión cerrada para el usuario raíz 4 de
noviembre 17:41:27 hostname123 sshd[27630]: Desconexión recibida de 1xx.183.221.214: ,ÿ 11: Desconexión
solicitada por Cliente SSH de Windows.
4 de noviembre 17:13:07 hostname123 sshd(pam_unix)[27630]: sesión abierta para usuario root por
,ÿ (uid=0)
4 de noviembre 17:13:07 hostname123 sshd[27630]: Contraseña aceptada para root desde 1xx , ÿ
.183.221.214 puerto 1762 ssh2
4 de noviembre 17:08:23 hostname123 sshd(pam_unix)[27479]: sesión cerrada para usuario raíz
...

Por supuesto, tenemos que tener en cuenta que esto nos daría cualquier línea donde residiera la cadena 4 de
noviembre , no solo en el campo de fecha. Para ser más explícitos, podríamos decir que solo queremos líneas
que comiencen con el 4 de noviembre , usando ^ (en nuestro caso, esto da esencialmente el mismo resultado):

barry@forensicbox:Logs$ 4 de mensajes tácticos*| grep ^ "4 de noviembre" | menos


noviembre 17:41:27 hostname123 sshd(pam_unix)[27630]: sesión cerrada para usuario raíz 4 de noviembre
17:41:27 hostname123 sshd[27630]: Desconexión recibida de 1xx.183.221.214: , ÿ 11: Desconexión solicitada por
Windows SSH Client.
4 de noviembre 17:13:07 hostname123 sshd(pam_unix)[27630]: sesión abierta para usuario root por
,ÿ (uid=0)
4 de noviembre 17:13:07 hostname123 sshd[27630]: Contraseña aceptada para root desde 1xx , ÿ
.183.221.214 puerto 1762 ssh2
4 de noviembre 17:08:23 hostname123 sshd(pam_unix)[27479]: sesión cerrada para usuario raíz
...

210
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Además, si no sabemos que hay dos espacios entre Nov y 4, podemos decirle a grep que busque cualquier
número de espacios entre los dos:

barry@forensicbox:Logs$ 4 mensajes tácticos*| grep ^"Nov[ ]*4" | menos


de noviembre 17:41:27 hostname123 sshd(pam_unix)[27630]: sesión cerrada para usuario raíz 4 de
noviembre 17:41:27 hostname123 sshd[27630]: Desconexión recibida de 1xx.183.221.214: , ÿ 11:
Desconexión solicitada por Windows SSH Client.
...

La expresión grep anterior se traduce como "Líneas que comienzan (^) con la cadena Nov seguida de cero o
más (*) de los caracteres anteriores que están entre corchetes ([ ] - en este caso, un espacio) seguido de un
4". Obviamente, este es un tema complejo. Saber cómo usar expresiones regulares le dará una gran flexibilidad
para clasificar y organizar grandes conjuntos de datos.
Como se mencionó anteriormente, lea man grep para obtener una buena introducción a las expresiones regulares.

Mientras miramos a través de los archivos de registro, podemos encontrar entradas que parezcan sospechosas.
Tal vez necesitemos recopilar todas las entradas que vemos que contienen la cadena No recibió la cadena
de identificación de <IP> para un análisis más detallado.

barry@forensicbox:Registros$ mensajes tácticos*| grep "cadena de identificación"


22 de noviembre 23:48:47 hostname123 sshd[19380]: No recibió la cadena de identificación de
,ÿ 19x.xx9.220.35

22 de noviembre 23:48:47 hostname123 sshd[19379]: No recibió la cadena de identificación de


,ÿ 19x.xx9.220.35

20 de noviembre 14:13:11 hostname123 sshd[29854]: No recibió la cadena de identificación de


,ÿ 200.xx.114.131
...

¿Cuántas de estas entradas hay?

barry@forensicbox:Registros$ mensajes tácticos*| grep "cadena de identificación" | wc-l


35

Hay 35 entradas de este tipo. Ahora solo queremos la fecha (campos 1 y 2), la hora (campo 3) y la dirección
IP remota que generó la entrada de registro. La dirección IP es el último campo. En lugar de contar cada
palabra de la entrada para llegar al número de campo de la IP, simplemente podemos usar la variable $NF,
que significa "número de campos". Dado que la IP es el último campo, su número de campo es igual al número
de campos:

barry@forensicbox:Registros$ mensajes tácticos*| grep "cadena de identificación" | awk


'{imprimir $1" "$2" "$3" "$NF}'
22 de noviembre 23:48:47 19x.xx9.220.35
22 de noviembre 23:48:47 19x.xx9.220.35
20 de noviembre 14:13:11 200.xx.114.131

211
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

18 de noviembre 18:55:06 6x.x2.248.243


...

Podemos agregar algunas tabulaciones (\t) en lugar de espacios en nuestro comando awk para hacer la salida
más legible (esto supone una longitud de cadena fija). El siguiente comando colocará una pestaña
carácter entre la fecha y la hora, y entre la hora y la dirección IP:

barry@forensicbox:Registros$ mensajes tácticos*| grep "cadena de identificación" | awk


'{imprimir $1" "$2"\t"$3"\t"$NF}'
22 de noviembre 23:48:47 19x.xx9.220.35
22 de noviembre 23:48:47 19x.xx9.220.35
20 de noviembre 14:13:11 200.xx.114.131
18 de noviembre 18:55:06 6x.x2.248.243
...

Todo esto se puede redirigir a un registro de análisis o archivo de texto para agregarlo fácilmente a un informe.
Recuerde que > report.txt crea el archivo de informe (sobrescribiendo cualquier cosa allí previamente),
mientras que >> report.txt se le agrega. Puede usar su para convertirse en root y establecer el "append
only" en su archivo de informe para evitar sobrescrituras accidentales26 .

Los siguientes comandos se escriben en una línea cada uno:

barry@forensicbox:Registros$ echo "Localhost123: Entradas de registro de /var/log/messages"


> informe.txt

barry@forensicbox:Registros$ echo"\"No recibió cadena de identificación\":" >>


informe.txt

barry@forensicbox:Registros$ mensajes tácticos*| grep "cadena de identificación" | awk


'{imprimir $1" "$2"\t"$3"\t"$NF}' >> informe.txt

barry@forensicbox:Registros$ informe gato.txt


Localhost123: Entradas de registro de /var/log/messages "No recibió identificación
,ÿ cadena":
22 de noviembre 23:48:47 19x.xx9.220.35
22 de noviembre 23:48:47 19x.xx9.220.35
20 de noviembre 14:13:11 200.xx.114.131
18 de noviembre 18:55:06 6x.x2.248.243
17 de noviembre 19:26:43 200.xx.72.129
...

También podemos obtener una lista ordenada (ordenar) de las direcciones IP únicas (-u) involucradas en el mismo
camino:

26Cubrimos esto anteriormente en la guía con el comando chattr .

212
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:Registros$ echo "Direcciones IP únicas: " >> informe.txt

barry@forensicbox:Registros$ mensajes tácticos*| grep "cadena de identificación" | awk


'{imprimir $NF}' >> informe.txt

barry@forensicbox:Logs$ informe gato.txt


Localhost123: Entradas de registro de /var/log/messages "No
recibió cadena de identificación": 22 de noviembre 23:48:47
19x.xx9.220.35
22 de noviembre 23:48:47 19x.xx9.220.35
...
Direcciones IP únicas:
19x.xx9.220.35
200.xx.114.131
200.xx.72.129
212.xx.13.130
2xx.54.67.197
2xx.71.188.192
2xx.x48.210.129
6x.x2.248.243
6x.x44.180.27
xx.192.39.131

El comando anterior imprime solo el último campo ($NF) de nuestra salida grep (que es la dirección IP). La
lista resultante de direcciones IP también se puede enviar a un script que realiza consultas de base de datos
nslookup o whois .

Puede ver el informe resultante (informe.txt) usando el comando menos .

Al igual que con todos los ejercicios de este documento, acabamos de probar las capacidades de la línea de
comandos de Linux. Todo parece algo complicado para el principiante. Después de un poco de práctica y
experiencia con diferentes conjuntos de datos, descubrirá que puede echar un vistazo a un archivo y decir
Quiero esa información y podrá escribir un
, formato comando
legible canalizado
en cuestión rápido para
de segundos. obtener
Al igual quelocon
quetodas
desealas
en un
habilidades lingüísticas, el lenguaje de línea de comandos de Linux (en realidad, bash en este caso) es
perecedero. Mantenga una buena referencia a mano y recuerde que es posible que tenga que buscar la
sintaxis varias veces antes de que se convierta en una segunda naturaleza.

9.2 Diversión con dd

Ya hicimos algunas imágenes simples y limpiamos usando dd, exploremos algunos otros usos para esta
herramienta flexible. dd es como una pequeña navaja suiza forense. Tiene muchas aplicaciones, limitadas
solo por tu imaginación.

213
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

9.2.1 Talla de datos con dd

En el siguiente ejemplo, usaremos dd para tallar un archivo de imagen JPEG a partir de una porción de datos sin procesar.
Por sí mismo, este no es un ejercicio realmente útil. Existen muchas herramientas que "tallarán" archivos a partir de
imágenes forenses, incluido un simple cortar y pegar desde un editor hexadecimal. El propósito de este ejercicio es
ayudarlo a familiarizarse más con dd. Además, tendrá la oportunidad de utilizar una serie de otras herramientas en
preparación para el "tallado". Esto lo ayudará a familiarizarse más con la caja de herramientas de Linux. Primero deberá
descargar el fragmento de datos sin procesar y verificar su hash:

barry@forensicbox:~$ wget https://www.linuxleo.com/Files/image_carve_2017.raw


...

barry@forensicbox:~$ sha1sum image_carve_2017.raw


ac3dd14e9a84f8dc5b827ba6262c295d28d3cecc image_carve_2017.raw

Eche un breve vistazo al archivo image_carve_2017.raw con su maravillosa herramienta de volcado hexadecimal de
línea de comandos, xxd:

barry@forensicbox:~$ xxd image_carve_2017.raw | menos


00000000: f0d5 0291 431e 41db 5fb9 abce 7240 4543 ....CA_...r@EC 00000010: 9a71
389a e0f1 4cf7 bfb4 32e2 6fe9 1132 .q8...L...2.o. .2 00000020: fc36 ddca eb48 56c1
1501 bcfd e7dd 2631 .6...HV.......&1
$ .V 00000050: da3d 0a2c a91c e2dd 5095 40fd e43a 1208 .=.,....P.@..:.. 00000060:
a76d 997e 9daf f4fa 9218 a2e4 6d81 a8ca .m.~........ metro...

00000070: cdf2 5055 12d5 f703 44bd 8d8b 88ed abab ..PU....D....... 00000080: 9023
ee54 f4f4 77f5 c89e ffdc 7c1a dba3 .#.T..w.....|.. 00000090: 42c7 9f07 902e 08c9 778c
67e3 479b 70f4 B.......wgGp
...

En realidad, es solo un archivo lleno de caracteres aleatorios. En algún lugar dentro hay una imagen JPEG estándar.
Repasemos los pasos necesarios para recuperar el archivo de imagen usando dd y otras herramientas de Linux. Nos
quedaremos con las herramientas de línea de comandos disponibles en la mayoría de las instalaciones predeterminadas
de Linux.

Primero necesitamos un plan. ¿Cómo haríamos para recuperar el archivo? ¿Cuáles son las cosas que necesitamos saber
para obtener la imagen (imagen), y solo la imagen? Imagina dd como un par de tijeras. Necesitamos saber dónde poner
las tijeras para empezar a cortar, y necesitamos saber dónde dejar de cortar. Encontrar el inicio del JPEG y el final del
JPEG puede decirnos esto. Una vez que sepamos dónde comenzaremos y nos detendremos, podemos calcular el tamaño
del JPEG. Luego podemos decirle a dd dónde comenzar a cortar y cuánto cortar. El archivo de salida será nuestra imagen
JPEG. Fácil, ¿verdad? Este es nuestro plan y las herramientas que usaremos:

214
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

1. Encuentra el inicio del JPEG (xxd y grep)

2. Encuentra el final del JPEG (xxd y grep)

3. Calcular el tamaño del JPEG en bytes (bc)

4. Corte desde el inicio calculado: el número calculado de bytes y la salida a un archivo (dd)

Este ejercicio comienza con la suposición de que estamos familiarizados con los encabezados de archivo estándar.
Dado que buscaremos una imagen JPEG estándar dentro del fragmento de datos, comenzaremos con la
estipulación de que el encabezado JPEG comienza con 0xffd8 (el valor hexadecimal ffd8) con un desplazamiento
de seis bytes a la cadena JFIF. El final del JPEG estándar está marcado por hexadecimal
ffd9.

Avancemos con el paso 1: usando xxd, canalizamos la salida de nuestro archivo image_carve.raw a grep y
buscamos el inicio de JPEG27:

barry@forensicbox:~$ xxd image_carve_2017.raw | grep ffd8 0000f900:


901d cfe7 8488 ac23 ffd8 24ab 4f4d 1613 .......#..$.OM.. 0001bba0: e798 a4b6 d833
9567 af5f ffd8 e5e9 ed24 .....3.g._... ..$ 00033080: 84a5 aeec d7db ffd8 3c37 c52d
a80e 6e7e ........<7.-..n~
00036ac0: 1676 761b e3d4 ffd8 ffe0 0010 4a46 4946 .vv.........JFIF

El comando grep encontró cuatro líneas que contienen el encabezado potencial de nuestro archivo de imagen.
Sabemos que estamos buscando una imagen JPEG, y sabemos que después de cuatro bytes adicionales después
de 0xffd8 deberíamos ver la cadena JFIF . La última línea de nuestra salida muestra eso, lo que significa que esta
es la coincidencia correcta. Esto se muestra en rojo arriba.

Se ha encontrado el inicio de un encabezado de archivo JPEG estándar. El desplazamiento (en hexadecimal) para
el comienzo de esta línea de salida xxd es 0x00036ac0. Ahora podemos calcular el byte o establecido en decimal.
Para ello utilizaremos el comando bc . Como discutimos en una sección anterior, bc es una "calculadora" de línea
de comando, útil para conversiones y cálculos. Se puede usar de forma interactiva o tomar entradas canalizadas.
En este caso, haremos eco del hex o establecido en bc, primero diciéndole que el valor está en base 16. bc
devolverá el valor decimal.

barry@forensicbox:~$ echo "ibase=16;36AC0" | antes de Cristo


223936

Es importante que utilice letras mayúsculas en el valor hexadecimal. Este NO es el comienzo del JPEG, solo el
comienzo de la línea en la salida xxd . La cadena ffd8 en realidad se encuentra otros seis bytes más adelante en
esa línea de salida (cada par hexadecimal es un valor de carácter, y

27Los perspicaces entre ustedes notarán que esta es una situación de "mundo perfecto". Hay una serie
de variables que pueden dificultar esta operación. El comando grep se puede ajustar para muchas
situaciones usando una expresión regular compleja (fuera del alcance de este documento).

215
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

hay seis parejas antes de ffd8). Así que sumamos 6 al comienzo de la línea. Nuestro conjunto ahora es 223942. Hemos
encontrado y calculado el inicio de la imagen JPEG en nuestro fragmento de datos.

00036ac0: 16 76 76 1b e3 d4 ffd8...
(223936) +1 +2 +3 +4 +5 +6 = 223942 desplazamiento al inicio del encabezado

Ahora es el momento de encontrar el final del archivo.

Como ya sabemos dónde comienza el archivo JPEG, comenzaremos nuestra búsqueda del final del archivo desde ese
punto. Nuevamente, usando xxd y grep , buscamos el valor de pie de página 0xffd9 en algún lugar después del encabezado:

barry@forensicbox:~$ xxd -s 223942 image_carve_2017.raw | grep ffd9


0005d3c6: af29 6ae7 06e1 2e48 38a3 ffd9 8303 a138 .)j....H8......8

La opción -s 223942 de xxd especifica dónde comenzar a buscar (dado que sabemos que este valor es el comienzo del
encabezado JPEG, no hay razón para buscar antes y eliminamos los resultados falsos de esa región). La salida muestra el
primer 0xffd9 en la línea en el desplazamiento hexadecimal 0x0005d3c6.
Convirtámoslo a decimal, observando nuevamente el valor en mayúsculas en nuestro hexadecimal:

barry@forensicbox:~$ 381894 eco "ibase=16;0005D3C6" | antes de Cristo

Debido a que 381894 es el desplazamiento para el inicio de la línea, necesitamos agregar 12 al valor para incluir el 0xffd9
(lo que nos da 381906). Hacemos esto porque el 0xffd9 debe incluirse en nuestro tallado, por lo que lo saltamos.

0005d3c6: af 29 6a e7 06 e1 2e 48 38 a3 sig d9
(381894) +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 = 381906 desplazamiento al final del encabezado

Ahora que conocemos el inicio y el final del archivo, podemos calcular el tamaño:

barry@forensicbox:~$ 157964 eco "381906-223942" | antes de Cristo

Ahora sabemos que el archivo tiene un tamaño de 157964 bytes y comienza en el conjunto de bytes 223942. ¡ La talla es
la parte fácil! Usaremos dd con tres opciones:

skip= qué tan lejos en el plato de datos comenzamos a cortar. bs= (tamaño de bloque) el número de bytes que incluimos
como bloque. count= el número de bloques que estaremos cortando.

El archivo de entrada para el comando dd es image_carve_2017.raw. Obviamente, el valor de skip será el desplazamiento
al inicio del JPEG. La forma más fácil de manejar el tamaño del bloque es

216
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

especifíquelo como bs=1 (lo que significa un byte) y luego ajuste el conteo al tamaño del archivo. El
nombre del archivo de salida es arbitrario.

barry@forensicbox:~$ dd if=image_carve_2017.raw of=tallado.jpg bs=1 skip=223942


cuenta=157964
157964+0 registros en
157964+0 registros fuera

157964 bytes (158 kB, 154 KiB) copiados, 0,174065 s, 908 kB/s

Ahora debería tener un archivo en su directorio actual llamado carved.jpg. Desde la terminal (suponiendo
que se encuentre en un entorno GUI)28, simplemente use el comando xv para ver el archivo (o cualquier
otro visor de imágenes, como una pantalla) y vea lo que tiene.

barry@cajaforense:~$ xv tallado.jpg

9.2.2 Tallar particiones con dd

Ahora podemos probar otro ejercicio útil de tallado con dd. En ocasiones, puede que le resulte deseable
separar las particiones dentro de una imagen de disco. Recuerde, no puede simplemente montar una
imagen de disco completa, solo las particiones. Ya aprendimos que podemos encontrar la estructura de
una imagen y montar las particiones usando herramientas como losetup -P y el dispositivo de bucle
resultante con el comando de montaje .

Presentamos esta técnica aquí no para enseñarla para un uso práctico (aunque puede tener un uso práctico
limitado), sino para proporcionar otro ejercicio práctico utilizando una serie de herramientas importantes de
la línea de comandos. En cualquier caso, para el estudiante principiante de análisis forense de Linux,
todavía lo consideraría una habilidad importante. Es solo una buena práctica para una serie de comandos
comunes y útiles.

El método que usaremos en este ejercicio implica identificar las particiones dentro de una imagen sin
formato con fdisk o gdisk. Luego usaremos dd para tallar las particiones de la imagen.

Usaremos la misma imagen de disco que usamos anteriormente (able_3.00*). Si aún no lo ha descargado,
hágalo ahora usando wget. Luego verifique el hash del archivo descargado. Debería coincidir con el mío
aquí:

barry@forensicbox:~$ wget https://www.linuxleo.com/Files/able_3.tar.gz


...

barry@forensicbox:~$ sha1sumable_3.tar.gz
6d8de5017336028d3c221678b483a81e341a9220 able_3.tar.gz

28Si está en una consola sin GUI, puede usar un programa como fbi

217
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Verifique el contenido del archivo tar (tar tzvf), descomprima los archivos (tar xzvf ) y cambie al directorio
able_3 con cd. Puede omitir todo esto si ya tiene el directorio able_3 de nuestro ejercicio anterior.
Simplemente cambie al directorio.

barry@forensicbox:~$ drwxr- tar tzvf able_3.tar.gz 0 2017-05-25


xr-x barry/usuarios -rw-r--r-- 12:42 able_3/
barry/usuarios 1073741824 2017-05-25 12:13 able_3/able_3.000 -rw-r--r-- barry /usuarios 1073741824
2017-05-25 12:13 capaz_3/capaz_3.001 -rw-r--r-- barry/usuarios 1339 2017-05-25 12:14 capaz_3/
able_3.log -rw-r--r- - barry/usuarios 1073741824 2017-05-25
usuarios 12:14 able_3/able_3.003
1073741824 -rw-r--r-- barry/
2017-05-25 12:14 able_3/able_3.002

barry@forensicbox:~$ tar xzvf able_tar.gz


capaz_3/ capaz_3/capaz_3.000
capaz_3/capaz_3.001 capaz_3/
capaz_3.log capaz_3/
capaz_3.003 capaz_3/
capaz_3.002

barry@cajaforense:~$ cd capaz_3

Ahora que estamos en el directorio able_3 , podemos ver que tenemos nuestros 4 archivos de imágenes
divididas y un archivo de registro con la información de adquisición. Este registro en particular fue creado
por el comando dc3dd (lo cubrimos anteriormente). Ver el registro y mirar los hashes:

barry@forensicbox:able_3$ dc3dd gato capaz_3.log


7.2.646 comenzó el 2017-05-25 15:51:04 +0000
opciones compiladas:
línea de comando: dc3dd if=/dev/sda hofs=able_3.000 ofsz=1G hash=sha1 log=able_3.log tamaño del dispositivo:
8388608 sectores (probado), tamaño del sector: 512 bytes (probado)
4.294.967.296 bytes

4294967296 bytes (4 G) copiados (100 %), 1037,42 s, 3,9 M/s 4294967296 bytes (4 G) hash
(100 %), 506,481 s, 8,1 M/s

resultados de entrada para el dispositivo '/dev/sda':


8388608 sectores en
0 sectores defectuosos reemplazados por
ceros 2eddbfe3d00cc7376172ec320df88f61afda3502 (sha1)
4ef834ce95ec545722370ace5a5738865d45df9e, sectors 0 - 2097151
ca848143cca181b112b82c3d20acde6bdaf37506, sectors 2097152 - 4194303
3d63f2724304205b6f7fe5cadcbc39c05f18cf30, sectors 4194304 - 6291455
9e8607df22e24750df7d35549d205c3bd69adfe3, sectors 6291456 - 8388607

resultados de salida para archivos 'able_3.000':


8388608 sectores fuera

218
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

[bien] 2eddbfe3d00cc7376172ec320df88f61afda3502 (sha1)


[ok] 4ef834ce95ec545722370ace5a5738865d45df9e, sectores 0 - 2097151, 'able_3
,ÿ .000'
'
[ok] ca848143cca181b112b82c3d20acde6bdaf37506, sectores 2097152 - 4194303,
,ÿ capaz_3.001'
'
[ok] 3d63f2724304205b6f7fe5cadcbc39c05f18cf30, sectores 4194304 - 6291455,
,ÿ capaz_3.002'
'
[ok] 9e8607df22e24750df7d35549d205c3bd69adfe3, sectores 6291456 - 8388607,
,ÿ capaz_3.003'

dc3dd completado el 2017-05-25 16:08:22 +0000

El primer hash en la salida anterior es el hash de entrada completo para el dispositivo del que se creó la imagen (/
dev/sda1 del sistema en cuestión). Podemos verificar eso transmitiendo todas nuestras partes divididas juntas y
canalizándolas a través de sha1sum:

barry@forensicbox:able_3$ gato capaz_3.0*| sha1sum


2eddbfe3d00cc7376172ec320df88f61afda3502 -

Los siguientes cuatro hashes son para los archivos de imagen divididos (y el rango de sector en cada división).
También podríamos verificarlos individualmente, aunque si el comando anterior funciona, ya hemos con rmado que
nuestros hashes individuales coincidirán. Continúe y verifíquelos de todos modos:

barry@forensicbox:able_3$ sha1sumable_3.0*
4ef834ce95ec545722370ace5a5738865d45df9e able_3.000
ca848143cca181b112b82c3d20acde6bdaf37506 capaz_3.001
3d63f2724304205b6f7fe5cadcbc39c05f18cf30 capaz_3.002
9e8607df22e24750df7d35549d205c3bd69adfe3 capaz_3.003

Podemos ver que coinciden con los valores hash en el archivo de registro.

Bien, ahora tenemos nuestra imagen y hemos verificado que es una copia exacta. Para verificar el sistema de
archivos y tallar las particiones, necesitaremos trabajar en una sola imagen sin procesar en lugar de divisiones.
Partiendo del supuesto de que estamos ejecutando esto en un sistema con herramientas básicas, renunciaremos al
uso de herramientas como affuse y losetup. En su lugar, simplemente recrearemos una imagen sin procesar
usando cat para volver a agregar los archivos y redirigir a la imagen sin procesar:

barry@forensicbox:able_3$ cat able_3.0*> able_3.raw

Y ahora trabajaremos en la imagen able_3.raw .

Comencemos por explorar el contenido de la imagen con algunas de nuestras herramientas de análisis de partición.
Para usar estas herramientas, deberá ser root (o usar sudo) y cambiar al directorio donde están las imágenes
(directorio de inicio del usuario y subdirectorio able_3 ):

219
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@cajaforense:able_3$ su -
Clave:

root@forensicbox:~# cd /home/barry/able_3

root@forensicbox:able_3#

Comenzando con fdisk:

root@forensicbox:able_3# fdisk -l able_3.raw Disco able_3.raw: 4


GiB, 4294967296 bytes, 8388608 sectores Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes I/ Tamaño O (mínimo/óptimo):
512 bytes / 512 bytes Tipo de etiqueta de disco: gpt Identificador de disco: B94F8C48-
CE81-43F4-A062-AA2E55C2C833

Dispositivo comienzo Sectores finales Tamaño Tipo


able_3.raw1 2048 104447 102400 50M Sistema de archivos Linux able_3.raw2 104448
309247 204800 100M Sistema de archivos Linux able_3.raw3 571392 8388574 7817183
3.7G Sistema de archivos Linux

Al observar la salida, vemos que el disco tiene un esquema de partición GPT . Puede volver a ejecutar el
comando usando gdisk con fines de documentación. Una vez que hayamos terminado con fdisk, salga
del inicio de sesión raíz y volverá a ser un usuario normal:

root@forensicbox:able_3# salir

barry@cajaforense:able_3$

Ahora usa dd para tallar cada una de las particiones. Con la salida de fdisk -l que se muestra arriba, el
trabajo es fácil.

barry@forensicbox:able_3$ dd if=able_3.raw of=able_3.part1.raw bs=512 skip=2048


cuenta=102400
102400+0 registros en
102400+0 registros fuera

52428800 bytes (52 MB, 50 MiB) copiados, 1,742 s, 30,1 MB/s

barry@cajaforense:able_3$ dd if=able_3.raw of=able_3.part2.raw bs=512


skip=104448 count=204800 204800+0
registros en
204800+0 registros copiados

104857600 bytes (105 MB, 100 MiB), 0,731567 s, 143 MB/s

220
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@cajaforense:able_3$ dd if=able_3.raw of=able_3.part3.raw bs=512 skip=571392


count=7817183 7817183+0 registros en

7817183+0 registros fuera

4002397696 bytes (4,0 GB, 3,7 GiB) copiados, 35,585 s, 112 MB/s

Examine estos comandos de cerca. El archivo de entrada (if=able_3.raw) es la imagen de disco completa.
Los archivos de salida (of=able_3.part#.raw) contendrán cada una de las particiones. El tamaño de bloque
que estamos usando es el tamaño del sector (bs=512), que coincide con la salida del comando fdisk .
Cada sección dd debe comenzar donde comienza cada partición (skip=X) y cortar hasta donde llegue la
partición (count=Y). El conteo es de la columna Sectores de la salida fdisk y nos dice el número de sectores
a contar.

Esto le dejará con tres archivos able_3.part*.raw en su directorio actual que ahora se pueden montar en
bucle sin necesidad de programas especiales. Exploraremos y trabajaremos con estas particiones en la
siguiente sección.

9.2.3 Reconstrucción de un sistema de archivos de materias (Linux)

Volviendo a nuestras imágenes sin procesar de case_3 de able_3 , ahora tenemos la imagen original junto
con las imágenes de partición que tallamos (más las imágenes divididas originales).

able_3.part1.raw (1.ª partición) able_3.part2.raw (2.ª partición) able_3.part3.raw (3.ª partición)

El siguiente truco es montar las particiones de tal manera que reconstruyamos el sistema de archivos original.
Por lo general, esto se refiere a discos en cuestión cuyas imágenes se obtuvieron de hosts Unix, pero aun así
es un buen ejercicio de línea de comandos.

Uno de los beneficios de los sistemas Linux/Unix es la capacidad de separar el sistema de archivos en
particiones. Esto se puede hacer por varias razones, lo que permite flexibilidad cuando existen preocupaciones
sobre el espacio en disco o la seguridad, etc.

Por ejemplo, un administrador del sistema puede decidir mantener el directorio /var/logon en su propia
partición separada. Esto podría hacerse en un intento de evitar que los archivos de registro desenfrenados
llenen la partición raíz (/ no /root) y desactiven el sistema. En el pasado, también era común encontrar el
directorio /boot en su propia partición. Esto permite que la imagen del núcleo se coloque cerca de "la parte
delantera" (en términos de cilindros) de un volumen de arranque, un problema en algunos cargadores de
arranque más antiguos. También hay una variedad de implicaciones de seguridad abordadas por esta configuración.
Finalmente, algunos considerarían una buena idea tener /home en su propia partición, permitiéndole formatear
y reinstalar sin tener que tocar datos personales y archivos.

Entonces, cuando tiene un disco con múltiples particiones, ¿cómo averigua la estructura del sistema de
archivos? Anteriormente en este documento discutimos el archivo /etc/fstab . Este archivo mantiene el

221
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

información de montaje para cada sistema de archivos, incluida la partición física; punto de montaje, le
tipo de sistema y opciones. Una vez que encontramos este archivo, reconstruir el sistema es fácil. Con
experiencia, comenzará a tener una idea de cómo se configuran las particiones y dónde buscar el
fstab. Para simplificar las cosas aquí, simplemente monte cada partición (bucle, solo lectura) y tenga un
mira alrededor.

Una cosa que nos gustaría saber es qué tipo de sistema de archivos hay en cada partición antes
tratamos de montarlos. Podemos usar el comando de archivo para hacer esto. Recuerda de nuestro
ejercicio anterior en el que el comando de archivo determina el tipo de archivo buscando información de encabezado.

barry@forensicbox:able_3$ archivo able_3.part*


able_3.part1.raw: datos del sistema de archivos Linux rev 1.0 ext4, UUID=ca05157e-f7b3-4c6a-9b63
,ÿ -235c4cad7b73 (extensiones) (archivos grandes) (archivos enormes)
able_3.part2.raw: datos del sistema de archivos Linux rev 1.0 ext4, UUID=c4ac4c0f-d9de-4d26-9e16
,ÿ -10583b607372 (extensiones) (archivos grandes) (archivos enormes)
able_3.part3.raw: datos del sistema de archivos Linux rev 1.0 ext4, UUID=c7f748b2-3a38-44e9-aa43-
,ÿ f924955b9fdd (extensiones) (archivos grandes) (archivos enormes)

Anteriormente, pudimos determinar que las particiones eran particiones "Linux" de la


salida de fdisk. Ahora file nos informa que el tipo de sistema de archivos es ext4. Podemos usar esto
información para montar las particiones. Recuerda que necesitarás ser root para montar el
particiones, así que haga su para rootear primero (o use sudo), monte y desmonte cada partición, hasta que encuentre
el directorio /etc que contiene el fstab:

barry@cajaforense:~$ su -
Clave:

root@forensicbox:~# mount -t ext4 -o ro,loop/home/barry/able_3/able_3.part1.raw


/mnt/evidencia

raíz@forensicbox:~# ls /mnt/evid
README.initrd@ config-enorme-4.4.14 onlyblue.dat
System.map@ elilo-ia32.efi* slack.bmp
System.map-generic-4.4.14 elilo-x86_64.efi* tuxlogo.bmp
System.map-huge-4.4.14 grub/ boot.0800 tuxlogo.dat
inside.bmp vmlinuz@
boot_message.txt inside.dat vmlinuz-generic@
café.dat perdido+encontrado/ vmlinuz-genérico-4.4.14
vmlinuz-enorme@
config@config-generic-4.4.14 mapa onlyblue.bmp vmlinuz-enorme-4.4.14

(Estamos buscando /etc/fstab, y no está aquí...)

root@forensicbox:~# desmontar /mnt/evid

222
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Si hace esto para cada partición a la vez (ya sea desmontando entre particiones o montando
a un punto de montaje diferente), eventualmente encontrará el directorio /etc que contiene el fstab
archivo en able_3.part3.raw con las siguientes entradas importantes:

barry@forensicbox:able_3$ / dev/ gato /mnt/evid/etc/fstab


sda3 / /dev/sda1 ext4 predeterminados 1 1
/bota ext4 predeterminados 1 2
/dev/sda2 /hogar ext4 predeterminados 1 2

Así que ahora vemos que el sistema de archivos lógicos se construyó a partir de tres particiones separadas
(Tenga en cuenta que /dev/sda aquí se refiere al disco cuando está montado en el sistema original, y
no al disco en la estación de trabajo forense):

(directorio raíz) montado desde /dev/sda3 (able_3.part3)


|-- papelera
|-- arranque montado desde /dev/sda1 (able_3.part1)
|-- desarrollador

|-- etc.
|-- montado en casa desde /dev/sda2 (able_3.part2)
|-- libre
|-- lib64
|-- perdido+encontrado
|-- medios
|-- mnt
|-- optar
|-- proceso
|-- raíz
|-- correr
|-- sbin
|-- servicio
|-- sistema
|-- mp
|-- usuario
'--var

Ahora podemos crear el sistema de archivos original en nuestro punto de montaje de pruebas. el punto de montaje
/mnt/evid ya existe. Cuando monta la partición raíz de able_3.raw en /mnt/evid,
notará que los directorios /mnt/evid/boot y /mnt/evid/home ya existen, pero están
vacío. Eso es porque tenemos que montar esos volúmenes para acceder al contenido de esos
directorios. Primero montamos el sistema de archivos raíz, y los demás se montan en él. Otra vez,
ejecutaremos como root para esto:

root@forensicbox:able_3# mount -t ext4 -o ro,loop able_3.part3.raw /mnt/evid

root@forensicbox:able_3# mount -t ext4 -o ro,loop able_3.part1.raw /mnt/evid/boot

223
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:able_3# mount -t ext4 -o ro,loop able_3.part2.raw /mnt/evid/home

Ahora tenemos el sistema de archivos original recreado en /mnt/evid:

barry@forensicbox:~$ / montar | prueba de grep


home/barry/able_3/able_3.part3.raw en /mnt/evid tipo ext4 (ro) /home/barry/
able_3/able_3.part1.raw en /mnt/evid/boot tipo ext4 ( ro) /home/barry/able_3/
able_3.part2.raw en /mnt/evid/home escriba ext4 (ro)

En este punto, podemos ejecutar todas nuestras búsquedas y comandos tal como lo hicimos en el ejercicio
anterior fat_fs.raw en un sistema de archivos completo con raíz en /mnt/evid.

Como siempre, debe saber lo que está haciendo cuando monta un sistema de archivos completo en su
estación de trabajo forense. Tenga en cuenta las opciones del comando de montaje que podría querer
usar (verifique el montaje de man para opciones como nodev y nosuid , noatime, etc.). Tome nota de
hacia dónde apuntan los enlaces desde el sistema de archivos de asunto. Tenga en cuenta que hemos
montado las particiones de solo lectura (ro). Recuerde desmontar (desmontar) cada partición cuando termine de explorar.

224
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

10 herramientas de análisis avanzadas

Así que ahora tiene algo de experiencia con el uso de la línea de comandos de Linux y las potentes herramientas
que se proporcionan con una instalación de Linux.

Sin embargo, como examinadores forenses, pronto nos damos cuenta de que el tiempo es un bien valioso.
Si bien aprender a usar las herramientas de línea de comandos nativas de una instalación de Linux es útil para
una gran cantidad de tareas en el "mundo real", también puede ser tedioso. Después de todo, existen herramientas
basadas en Windows que le permiten hacer mucho de lo que hemos discutido aquí en una GUI simple de apuntar
y hacer clic.

La popularidad de Linux está creciendo a un ritmo fantástico. No solo lo vemos en un entorno empresarial y en
los grandes medios, sino que continúa creciendo en popularidad dentro del campo de la informática forense. En
los últimos años, hemos visto crecer la lista de herramientas forenses disponibles para Linux con el resto de la
industria.

En esta sección, cubriremos una serie de herramientas forenses disponibles para que su análisis sea más fácil y
eficiente.

NOTA DEL AUTOR: La inclusión de herramientas y paquetes en esta sección de ninguna manera constituye una
aprobación de dichas herramientas. Pruébelos usted mismo para asegurarse de que satisfacen sus necesidades.

Dado que este es un documento de Linux, estoy cubriendo las herramientas de Linux disponibles. Esto no
significa que las herramientas comunes disponibles para otras plataformas no puedan usarse para lograr muchos
de los mismos resultados.

Recuerde, mientras trabaja con estos ejercicios, este documento NO pretende ser una educación en el sistema
de archivos o un análisis de volumen físico. A medida que realice los ejercicios, encontrará términos como inodo,
entrada MFT, estado de asignación, tablas de partición y bloques directos e indirectos, etc. Sistemas de archivos
Linux o cualquier otro sistema de archivos. Esto es todo acerca de las herramientas.

Si necesita conocer la estructura del sistema de archivos en relación con el análisis forense informático, lea el
libro de Brian Carrier: Análisis forense del sistema de archivos (publicado por Addison-Wesley, 2005).
Esta no es la última vez que sugeriré esto.

Para obtener una descripción general rápida de algunos sistemas de archivos, puede realizar una búsqueda
rápida en Internet. Hay un montón de información disponible si necesita una cartilla. Aquí hay algunos enlaces
simples para que pueda comenzar. Si tiene preguntas sobre cualquiera de estos sistemas de archivos, o sobre
cómo funcionan, le sugiero que lea un poco antes de sumergirse en estos ejercicios.

NTFS http://www.ntfs.com
http://en.wikipedia.org/wiki/NTFS

ext2/3/4 http://e2fsprogs.sourceforge.net/ext2intro.html

225
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

http://en.wikipedia.org/wiki/Ext3 http://
en.wikipedia.org/wiki/Ext4

GRASA http://en.wikipedia.org/wiki/File_allocation_table

Además, una vez que Sleuth Kit (que cubriremos pronto) esté instalado, es posible que desee navegar por
http://wiki.sleuthkit.org/ para obtener información adicional sobre los sistemas de archivos y la
implementación.

10.1 El enfoque de capas para el análisis

Una de las razones por las que Linux es visto como extremadamente eficiente por sus defensores y
excesivamente complejo por sus detractores es su enfoque en la programación modular donde una herramienta
realiza una tarea en lugar del enfoque de "conjunto de herramientas" de muchas herramientas comerciales. El
diseño de las herramientas de Linux, tanto las utilidades de línea de comandos de GNU como el software
forense como Sleuth Kit, puede parecer desalentador cuando un estudiante se da cuenta de que debe tratar
de recordar múltiples herramientas, resultados y parámetros de comando para ejecutar un examen efectivo en
lugar de hacerlo. que navegar por un menú gráfico donde las funciones, las opciones y los resultados se
muestran en una forma organizada de "un clic de distancia".

Brian Carrier, autor de The Sleuth Kit, utiliza un marco para el análisis de dispositivos de almacenamiento en
su libro Análisis forense del sistema de archivos, que mencionamos anteriormente. Con este enfoque, Carrier
organiza sus herramientas en una serie de capas virtuales que definen el propósito de cada herramienta con
respecto a una capa especí ca. Convenientemente, las herramientas del Sleuth Kit se nombran de acuerdo
con estas capas. Al introducir herramientas en una categoría determinada y definir su aplicabilidad respectiva
a una capa virtual específica, los estudiantes pueden organizar mejor su comprensión de la función de cada
herramienta y dónde encaja mejor en un análisis.

Este enfoque se puede extender y expandir fácilmente para abarcar herramientas adicionales desde fuera de
Sleuth Kit. Si bien algunas herramientas no se ajustan sucintamente a este paradigma, aún se pueden abordar
en una secuencia que se ajuste al enfoque analítico general. La siguiente figura proporciona un resumen
gráfico de las capas designadas por Carrier para el análisis de la evidencia.

Figura 10: Un ejemplo de capas y su contenido asociado basado en el trabajo de Carrier

226
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Esto tiene el beneficio adicional de brindarles a los estudiantes un método para conceptualizar la forma en que se emplean las
herramientas.

Tenemos un conjunto diverso de herramientas para trabajar en Linux, particularmente cuando se trata de abordar un análisis
desde la línea de comandos. Saber cuándo usar qué herramientas se puede entender mejor extendiendo este enfoque de
capas a todo nuestro análisis.

Ya hemos cubierto una serie de herramientas comunes como dd, dc3dd, hdparm, lsscsi, lshw y otras. Estos son
ejemplos de herramientas que funcionan en la capa de medios físicos y buscan directamente en los medios físicos y la
información del disco, incluidos los números de serie, los tamaños de los sectores del disco y el bus físico en el que
residen los medios.

También hemos analizado herramientas que actúan en la capa de administración de medios, como fdisk, gdisk,
losetup y otras. Estas herramientas analizan o trabajan sobre la información proporcionada en el nivel de la tabla de
particiones, pero sin actuar específicamente sobre los sistemas de archivos en sí.

A medida que avanzamos en el resto de esta guía, tenga en cuenta que, a menudo, el lugar de una herramienta en el enfoque
de capa no está de nido por la herramienta en sí, sino por cómo la usa. Tome grep por ejemplo. grep busca expresiones
coincidentes en un archivo. Así que podríamos decir que funciona en la subcapa de archivos de la capa del sistema de archivos
(consulte la ilustración anterior). Sin embargo, cuando lo usamos contra una imagen forense de un disco físico (como nuestro
archivo able_3.raw ), no lo estamos usando en la capa de archivos de esa imagen, sino en la capa física de la imagen. Puedo
hacer grep para una expresión en un conjunto de archivos, o puedo hacer grep para una expresión en una imagen de disco.
Cómo utilizo la herramienta de ne su lugar, no la herramienta en sí en muchos casos.

Por lo tanto, debemos ajustar nuestro pensamiento sobre cómo abordamos nuestro análisis, teniendo en cuenta que la
organización de herramientas del Sleuth Kit puede no siempre coincidir directamente con nuestro enfoque de análisis.
Pero simplemente podemos resumirlo así:

1. Analice la capa del dispositivo físico:

lshw
lsscsi

hdparm

2. Analice la capa de gestión de medios:

fdisco

gdisk
archivo -s

mmls (cubriremos pronto)

3. Analice la capa del sistema de archivos:

expediente

fsstat

227
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

fls

4. Analice la capa de archivos:

expediente

encontrar

herramientas comunes como ls, etc.

5. Capa de aplicación:

Ver contenido de archivo con menos y gato, etc.

Localice contenido especí co con grep.


Use aplicaciones externas para ver contenido binario: xv, display, regfmount para archivos
de registro, etc.

Los comandos que se muestran aquí son solo algunos ejemplos. Hay muchos más que funcionan en cada capa dada. De
modo que puede ver en la lista anterior que podemos aplicar herramientas a varias capas diferentes. Esto habla de la
simplicidad del enfoque de desarrollo de Unix que ha existido durante décadas. Las herramientas generalmente hacen una
cosa, la hacen bien, pero pueden ser versátiles en su empleo.

En resumen, todo esto significa que, en lugar de adoptar el enfoque que normalmente adoptaríamos con el software forense
multifuncional de Windows:

abrir un programa

Abra (o adquiera) un archivo de imagen con ese programa

"Indizar" el archivo de imagen dentro del programa

Navegar por los menús, recopilar datos e informarlos

... ahora podemos sentarnos en un símbolo del sistema y recorrer las diversas capas de nuestro examen, recopilando y
redirigiendo información a medida que avanzamos, analizando capa por capa de nuestro análisis hasta llegar a nuestra
conclusión. En lugar de buscar a tientas la línea de comandos, dirigimos nuestros comandos a la capa que estamos examinando
actualmente.

10.2 El kit de detective

La primera de las herramientas externas avanzadas que cubriremos aquí es una colección de comandos de línea
herramientas llamadas Sleuth Kit (TSK). Este es un conjunto de herramientas escrito por Brian Carrier y mantenido en http://
www.sleuthkit.org. Se basa parcialmente en The Coroner's Toolkit (TCT) escrito originalmente por Dan Farmer y Wietse
Venema. TSK agrega compatibilidad adicional con el sistema de archivos y le permite analizar varios tipos de sistemas de
archivos, independientemente de la plataforma en la que esté trabajando actualmente. La versión actual, a partir de este escrito
es 4.6.x.

228
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Comencemos con una discusión de las herramientas primero. La mayor parte de esta información está disponible en la
documentación de Sleuth Kit o en el sitio web de Sleuth Kit.

Ya hemos discutido la organización de la función de herramientas de TSK por capas. Aquí hay una lista de algunas de las
herramientas y dónde encajan.

Capa de gestión de medios: mmls, mmcat, mmstat

Capa del sistema de archivos: fsstat

Capa de nombre de archivo (interfaz humana): fls , ffind

Capa de metadatos (inodo): icat, ils, ifind, istat

Capa de contenido (datos): blkcalc, blkcat, blkls, blkstat

También tenemos herramientas que se ocupan de los discos físicos y herramientas que se ocupan de los "diarios" de algunos
sistemas de archivos.

Herramientas de diario: jcat, jls

Herramientas de contenido de archivos: hfind, fcat

Observe que los comandos que corresponden al análisis de una capa determinada generalmente comienzan con una letra
común. Por ejemplo, los comandos del sistema de archivos comienzan con fs y los comandos de capa de inodo (metadatos)
comienzan con i y así sucesivamente.

Si el enfoque de "capa" al que se hace referencia anteriormente le parece un poco confuso, debe tomarse el tiempo para leer
la descripción general de la herramienta de TSK en:

http://wiki.sleuthkit.org/index.php?title=TSK_Tool_Overview

El autor hace un buen trabajo al definir y describir estas capas y cómo se unen para un análisis forense. Comprender que las
herramientas TSK operan en diferentes capas es extremadamente importante.

Al realizar los siguientes ejercicios, preste atención al hecho de que la salida de cada herramienta se adapta específicamente
al sistema de archivos que se analiza. Por ejemplo, el comando fsstat se usa para imprimir los detalles del sistema de archivos
(capa fs). La estructura de la salida y los campos descriptivos cambian según el sistema de archivos de destino. Esto se hará
evidente a lo largo de los ejercicios.

Además de las herramientas ya mencionadas, hay algunas herramientas misceláneas incluidas con el Sleuth Kit que no entran
en las categorías anteriores:

tsk_recover: recupera archivos no asignados (o todos) de un sistema de archivos.

tsk_gettimes: crea un archivo de cuerpo para líneas de tiempo (solo actividad de archivo)

229
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Clasificador : clasifica los archivos asignados y no asignados según el tipo (imágenes,


ejecutables, etc.). Extremadamente flexible y configurable. img_cat: permite la separación de
metadatos y datos originales de los archivos de imagen (duplicación de medios, no imágenes).
img_stat: proporciona información sobre una imagen forense. La información que proporciona
depende del formato de la imagen (aff, ewf, etc.).

hfind: herramienta de búsqueda de hash. Crea y busca en una base de datos

indexada. sigfind: busca en un archivo determinado (imagen forense, disco, etc.) una firma hexadecimal en
cualquier desplazamiento especificado (límite del sector). Se utiliza para encontrar estructuras de datos

mactime: crea una línea de tiempo de la actividad del archivo. Útil para investigaciones de intrusión donde
las relaciones temporales son críticas.

srch_strings: como el comando de cadenas BSD estándar , pero con la capacidad de analizar diferentes
codificaciones.

10.2.1 Instalación del kit de detección

En Slackware, podemos instalar TSK simplemente con sboinstall:

root@forensicbox:~# sboinstall sleuthkit


...
¿Continuar con sleuthkit? [y]
...
Limpieza para sleuthkit-4.6.6...

Cuando instalamos TSK usando SlackBuild a través de sboinstall, o si lo instala manualmente desde la fuente,
puede ver el proceso de compilación. Debe tenerse en cuenta que para que las herramientas de Sleuth Kit tengan
soporte incorporado para imágenes en formato Expert Witness (imágenes EWF), primero debemos tener instalado
libewf . Es por eso que cubrimos libewf y lo instalamos anteriormente en la guía. Mientras Sleuth Kit está
configurando su proceso de instalación, busca en el sistema las bibliotecas que admite. A menos que se le indique
que no incluya capacidades específicas, se compilará en consecuencia. En este caso, dado que ya tenemos
instalados libewf y afflib , TSK se compilará con esos formatos compatibles. Esto nos permitirá trabajar directamente
sobre imágenes EWF y AFF.29

Cuando finalice la instalación, encontrará las herramientas de Sleuth Kit ubicadas en /usr/bin.

Recuerde, puede ver una lista de lo que se instaló (y otra información del paquete) al ver el archivo en /var/log/
packages/sleuthkit-<versión>:

29TSK también es compatible con los formatos VMDK y VHDI que no cubrimos en esta guía. Instale libvmdk y
libvhdi antes de instalar TSK si desea probarlos.

230
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

root@forensicbox:~# menos /var/log/packages/sleuthkit-4.6.6-x86_64-1_SBo


sleuthkit-4.6.6-x86_64-1_SBo NOMBRE DEL PAQUETE:
TAMAÑO DEL PAQUETE COMPRIMIDO: 656K
...
usr/
usr/bin/
usr/bin/blkcalc
usr/bin/blkcat usr/
bin/blkls usr/bin/
blkstat usr/bin/
fcat usr/bin/ffind
usr/bin/fiwalk

...

Use la página del manual para cada una de las utilidades instaladas en /usr/bin que se muestran en el resultado para
tener una idea de las capacidades completas de TSK.

10.3 Ejercicios del kit de detective

Esta sección sigue siendo una de las secciones más populares de esta guía y proporciona ejercicios prácticos para
TSK y una muestra de sus herramientas.

Al igual que todos los otros ejercicios presentados aquí, se recomienda encarecidamente que los siga si puede. Usar
estos comandos por su cuenta es la única forma de aprender realmente las técnicas.
Lea las páginas de manual incluidas y juegue con las opciones para obtener resultados novedosos. Los archivos de
imagen utilizados en los siguientes ejemplos están disponibles para su descarga y algunos ya se han descargado y
utilizado anteriormente en la guía.

Hay varias maneras de abordar los siguientes problemas. En algunos casos, usaremos affuse o ewfmount para
proporcionar imágenes montadas en fusibles desde archivos EWF o archivos divididos. Lo haremos aquí para practicar,
pero no dude en ejecutar las herramientas directamente en los archivos de imagen (habrá demostraciones de ambos).
Practica y experimenta.

También usaremos algunos de los archivos de imagen más antiguos que se usaron en versiones anteriores de la guía.
Si bien las imágenes son antiguas y los sistemas de archivos algo obsoletos, los usamos aquí porque proporcionan un
vehículo perfecto para demostrar el uso de herramientas. Comprenderá esto un poco más a medida que avancemos.
Podemos comparar la salida de algunas de las imágenes más nuevas y comprenderá algunas de las limitaciones.

Para el siguiente conjunto de ejercicios, usaremos la imagen able2 , una de las imágenes más antiguas pero más
educativas que hemos usado. Cree un directorio para la imagen de able2 y luego cd en el directorio. Como de
costumbre, descargue con wget y verifique el hash, asegurándose de que coincida con lo que tenemos aquí:

231
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ mkdir capaz2

barry@forensicbox:~$ cd capaz2

barry@forensicbox:able2$ wget https://www.linuxleo.com/Files/able2.tar.gz

barry@forensicbox:able2$ sha1sum able2.tar.gz


a093ec9aed6054665b89aa82140803790be97a6e able2.tar.gz

Extraiga el archivo para descomprimir la imagen y luego comencemos. Pon tus manos en el teclado y síguelo.

barry@forensicbox:able2$ tar tzf able2.tar.gz <- enumera primero los contenidos able2.dd

capaz2.log
md5.dd
md5.hdd

barry@forensicbox:able2$ tar xzvf able2.tar.gz <- luego extrae el contenido able2.dd

capaz2.log
md5.dd
md5.hdd

Recuerde que al enumerar primero el contenido del archivo con la opción t, podemos ver que se extraerá a
nuestro directorio actual (sin rutas principales en la lista) en lugar de a algún lugar inesperado.

10.3.1 Sleuth Kit Ejercicio 1A: Identificación y recuperación de archivos eliminados (ext2)

Comenzaremos con un vistazo a un par de herramientas del sistema de archivos y capa de nombre de archivo,
fsstat y fls , ejecutándolas contra nuestra imagen able2 .

Parte del conjunto de herramientas de TSK, mmls, proporciona acceso a la tabla de particiones dentro de una
imagen y proporciona las compensaciones de partición en unidades de sector. mmls proporciona la misma
información que obtenemos de fdisk o gdisk.

barry@forensicbox:able2$ mmls able2.dd Tabla de


particiones de DOS
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción

232
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

000: Meta 0000000000 0000000000 0000000001 Tabla primaria (#0)


001: ------- 0000000000 0000000056 0000000057 Sin asignar
002: 000:000 0000000057 0000010259 0000010203 Linux (0x83)
003: 000:001 0000010260 0000112859 0000102600 Linux (0x83)
004: 000:002 0000112860 0000178694 0000065835 Cambio de Linux/Solaris x86 (0
,ÿ x82)
005: 000:003 0000178695 0000675449 0000496755 Linux (0x83)

Por el bien de este análisis, la información que estamos buscando se encuentra en la partición raíz (sistema de
archivos) de nuestra imagen. El sistema de archivos raíz ( / ) se encuentra en la segunda partición. Mirando nuestra
salida mmls , podemos ver que esa partición comienza en el sector 10260 (en realidad numerado 03 en la salida
mmls , o ranura 000:001).

Por lo tanto, ejecutamos el comando fsstat de Sleuth Kit con -o 10260 para recopilar información del sistema de
archivos en ese momento. Al usar el sector compensado proporcionado por mmls, le decimos a nuestras herramientas
TSK dónde comienza el volumen. Canalice la salida a través de less para pasar página:

barry@forensicbox:able2$ fsstat -o 10260 able2.dd | menos INFORMACIÓN DEL SISTEMA


DE ARCHIVOS
--------------------------------------------

Tipo de sistema de archivos: Ext2


Nombre del volumen:
Id. de volumen: 906e777080e09488d0116064da18c0c4

Escrito por última vez en: 2003-08-10 14:50:03 (EDT)


Última comprobación en: 1997-02-11 00:20:09 (EST)

Montado por última vez en: 1997-02-13 02:33:02 (EST)


Desmontado incorrectamente

SO fuente: Linux

Estructura Dinámica
Funciones InCompat: tipo de archivo,
Funciones compatibles de solo lectura: Sparse Super,

INFORMACIÓN DE METADATOS
--------------------------------------------

Rango de inodos: 1 - 12881


Directorio raíz: 2
Inodos libres: 5807

INFORMACIÓN DE CONTENIDO
--------------------------------------------

Rango de bloque: 0 - 51299


Tamaño del bloque: 1024
Bloques reservados antes de los grupos de bloques: 1
Bloques gratis: 9512

233
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

INFORMACIÓN DEL GRUPO DE BLOQUES


--------------------------------------------

Número de grupos de bloques: 7


Inodos por grupo: 1840
Bloques por grupo: 8192

Grupo: 0:
Rango de inodos: 1 - 1840
Rango de bloque: 1 - 8192
Diseño:
Súper bloque: 1 - 1
Tabla de descriptores de grupo: 2 - 2
Mapa de bits de datos: 3 - 3
Mapa de bits de inodo: 4 - 4
Tabla de inodos: 5 - 234
Bloques de datos: 235 - 8192
Inodos libres: 789 (42%)
Bloques libres: 4601 (56%)
Directorios totales: 16
...

El comando fsstat proporciona información específica del tipo sobre el sistema de archivos en un volumen.
Como se señaló anteriormente, ejecutamos el comando fsstat anterior con la opción -o 10260. Esto especifica
que queremos información del sistema de archivos que reside en la partición que se inicia
en el desplazamiento del sector 10260.

Podemos obtener más información usando el comando fls . fls enumera los nombres de archivos y directorios
contenidos en un sistema de archivos o en un directorio si se pasa el identi cador de metadatos para un directorio
en particular. La salida se puede ajustar con una serie de opciones, para incluir la recopilación de información
sobre los archivos eliminados. Si escribe fls solo, verá las opciones disponibles (vea la página del manual para
obtener una explicación más completa).

Si ejecuta el comando fls con solo la opción -o para especificar el sistema de archivos, se ejecutará de forma
predeterminada en el directorio raíz del sistema de archivos. Este es el inodo 2 en un sistema de archivos EXT
y la entrada MFT 5 en un sistema de archivos NTFS. En otras palabras, en un sistema de archivos EXT, ejecutando:

barry@forensicbox:able2$ fls -o 10260 able2.dd

Y ...

barry@forensicbox:able2$ fls -o 10260 able2.dd 2

234
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

...dará como resultado el mismo resultado. En el segundo comando, el 2 pasado al final del comando significa
"directorio raíz" (para EXT), que es el predeterminado en el primer comando.

Entonces, en el siguiente comando, ejecutamos fls y solo pasamos -o 10260. Esto da como resultado una lista
del contenido del directorio raíz:

barry@forensicbox:able2$ fls -o 10260 able2.dd d/d 11:


perdido+encontrado d/d 3681: boot d/d 7361: usr d/d 3682: proc d/d
7362: var d/d 5521: tmp d/d 7363: dev d/d 9201: etc. d/d 1843:
contenedor

d/d 1844: hogar


d/d 7368: lib d/d
7369: mnt d/d 7370:
opt d/d 1848: root d/
d 1849: sbin r/r
1042: .bash_history d/
d 11105: .001 V/V 12881: $ Archivos
huérfanos

Hay varios puntos de los que queremos tomar nota antes de continuar. Tomemos algunas líneas de salida y
describamos lo que nos dice la herramienta. Eche un vistazo a las últimas tres líneas del comando fls anterior.

r/r 1042: .bash_history d/d 11105:


.001 V/V 12881: $OrphanFiles

Cada línea de salida comienza con dos caracteres separados por una barra inclinada. Este campo indica el tipo
de archivo como se describe en la entrada del directorio del archivo y los metadatos del archivo (en este caso,
el inodo porque estamos viendo un sistema de archivos EXT). Por ejemplo, el primer archivo enumerado en el
fragmento anterior, .bash_history, se identi ca como un archivo normal tanto en el directorio del archivo como
en la entrada del inodo. Esto se indica mediante la designación r/r . Por el contrario, la segunda entrada (.001)
se identifica como un directorio.

La última línea de la salida, $OrphanFiles, es una carpeta virtual creada por TSK y a la que se le asigna un
inodo virtual. Esta carpeta contiene entradas de archivos virtuales que representan entradas de metadatos no
asignadas donde no hay nombres de archivos correspondientes. Estos se conocen comúnmente como "archivos
huérfanos", a los que se puede acceder especificando la dirección de metadatos, pero no a través de

235
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

cualquier nombre de archivo o ruta.

El siguiente campo es el número de entrada de metadatos (inodo, entrada MFT, etc.) seguido del
nombre de archivo. En el caso del archivo .bash_history, el inodo aparece como 1042.

Podemos continuar ejecutando fls en las entradas del directorio para profundizar en la estructura del
sistema de archivos (o usar -r para una lista recursiva). Al pasar el número de entrada de metadatos de
un directorio, podemos ver su contenido. Lea man fls para ver algunas características útiles. Por
ejemplo, eche un vistazo al directorio .001 en la lista anterior. Este es un directorio inusual y podría
causar sospechas. Está oculto (comienza con un ".") y no existe tal directorio común en la raíz del
sistema de archivos. Entonces, para ver el contenido del directorio .001 , pasaríamos su inodo a
fls:

barry@forensicbox:able2$ fls -o 10260 able2.dd 11105 r/r 2138:


lolit_pics.tar.gz r/r 11107: lolitaz1

r/r 11108: lolitaz10 r/r


11109: lolitaz11 r/r 11110:
lolitaz12 r/r 11111:
lolitaz13 r/r 11112: lolitaz2
r/r 11113: lolitaz3 r/r
11114: lolitaz4 r/r 11115:
lolitaz5 r/ r 11116: lolitaz6
r/r 11117: lolitaz7 r/r
11118: lolitaz8 r/r 11119:
lolitaz9

Se enumeran los contenidos del directorio. Cubriremos los comandos para ver y analizar los archivos
individuales más adelante.

fls también puede ser útil para descubrir archivos eliminados. De forma predeterminada, fls mostrará
archivos asignados y no asignados. Podemos cambiar este comportamiento pasando otras opciones.
Por ejemplo, si quisiéramos ver solo las entradas eliminadas que aparecen como archivos (en lugar de
directorios), y queremos que la lista sea recursiva, podríamos usar el siguiente comando:

barry@forensicbox:able2$ fls -o 10260 -Frd able2.dd r/r *


11120(realloc): var/lib/slocate/slocate.db.tmp r/r * 10063:
var/log/xferlog.5 var/
r/r * 10063: lock/makewhatis.lock
r/r * 6613: var/run/shutdown.pid r/r *
1046: var/tmp/rpm-tmp.64655 r/r *
6609(realloc): var/catman/cat1/rdate.1.gz
r/ r * 6613: var/catman/cat1/
rdate.1.gz r/r * 6616: tmp/logrot2V6Q1J

236
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

r/r * 2139: dev/ttYZ0/lrkn.tgz


d/r * 10071 (realizar): dev/ttYZ0/lrk3
r/r * 6572 (reubicación): etc/X11/fs/config l/r * 1041
(reubicación): etc/rc.d/rc0.d/K83ypbind
l/r * 1042 (reubicación): etc/rc.d/rc1.d/K83ypbind
l/r * 6583 (reubicación): etc/rc.d/rc2.d/K83ypbind
l/r * 6584 (reubicación): etc/rc.d/rc4.d/K83ypbind
l/r * 1044: etc/rc.d/rc5.d/K83ypbind
l/r * 6585 (reubicación): etc/rc.d/rc6.d/K83ypbind
r/r * 1044: etc/rc.d/rc.firewall~
r/r * 6544 (realizar): etc/ pam.d/passwd r/r * 10055
(realizar): etc/mtab.tmp
r/r * 10047(reasignación): etc/mtab~
r/- * 0: etc/.inetd.conf.swx
r/r * 2138(realloc): root/ lolit_pics.tar.gz
r/r * 2139: raíz/lrkn.tgz
-/r * 1055: $ArchivosHuérfanos/ArchivosHuérfanos-1055
-/r * 1056: $ArchivosHuérfanos/ArchivosHuérfanos-1056
-/r * 1057: $ArchivosHuérfanos/ArchivosHuérfanos-1057
-/r * 2141: $ArchivosHuérfanos/ArchivosHuérfanos-2141
-/r * 2142: $ArchivosHuérfanos/ArchivosHuérfanos-2142
-/r * 2143: $ArchivosHuérfanos/ArchivosHuérfanos-2143
...

En el comando anterior, ejecutamos el comando fls contra la partición en able2.dd comenzando


en el sector o set 10260 (-o 10260), mostrando solo entradas de archivo (-F), descendiendo a directorios
recursivamente (-r) y mostrando entradas eliminadas (no asignadas) (-d).

Observe que todos los archivos enumerados tienen un asterisco (*) antes del inodo. Esto indica el
El archivo se elimina o no se asigna, lo que esperamos en el resultado anterior ya que especificamos -d
opción a fls. Luego se nos presenta el número de entrada de metadatos (inodo, entrada MFT,
etc.) seguido del nombre del archivo.

Eche un vistazo a la línea de salida del inodo número 2138 (root/lolit_pics.tar.gz). los
inode es seguido por realloc. Tenga en cuenta que fls describe la capa de nombre de archivo. los
realloc significa que el nombre del archivo enumerado está marcado como no asignado, aunque el meta
la entrada de datos (2138) se marca como asignada. En otras palabras... el inodo de nuestro archivo eliminado
puede haber sido reasignado a un nuevo archivo.

Según Brian Carrier:

La diferencia surge porque hay una capa de nombre de archivo y una capa de metadatos.
capa. Cada archivo tiene una entrada en ambas capas y cada entrada tiene su propia asignación
estado.
Si un archivo está marcado como "eliminado", significa que tanto el nombre del archivo como
las entradas de metadatos se marcan como no asignadas. Si un archivo está marcado como "realloc", entonces

237
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

esto significa que su nombre de archivo no está asignado y sus metadatos están asignados.
Esto último ocurre si:

Se cambió el nombre del archivo y se creó una nueva entrada de nombre de archivo para el archivo,
pero los metadatos permanecieron iguales.

NTFS recurrió a los nombres y las copias antiguas del nombre se "no asignarán" aunque el archivo
aún exista (aquí estamos en un sistema de archivos EXT, por lo que esto no se aplica)

El archivo se eliminó, pero los metadatos se reasignaron a un nuevo archivo.

En los dos primeros casos, los metadatos corresponden correctamente al nombre del archivo eliminado.
En el último caso, los metadatos pueden no corresponder al nombre porque en su lugar pueden corresponder
a un archivo nuevo.

En el caso del inodo 2138, parece que la realloc se debió a que el archivo se movió al directorio .001 (vea la lista de fls de
.001 en la página anterior - inodo 11105). Esto hace que se elimine de su entrada de directorio actual (root/lolit_pics.tar.gz)
y se cree un nuevo nombre de archivo (.001/lolit_pics.tar.gz). El inodo y los bloques de datos a los que apunta permanecen
sin cambios y en "estado asignado", pero han sido "reasignados" al nuevo nombre.

Continuemos con nuestro ejercicio de análisis usando un par de herramientas de capa de metadatos (inodo) incluidas con
Sleuth Kit. En un sistema de archivos de tipo EXT de Linux, un inodo tiene un número único y se asigna a un archivo. El
número corresponde a la tabla de inodos, asignada cuando se formatea una partición. El inodo contiene todos los metadatos
disponibles para un archivo, incluidos los tiempos de modificación/acceso/cambio (mac) y una lista de todos los bloques de
datos asignados a ese archivo.
le.

Si observa la salida de nuestro último comando fls , verá un archivo eliminado llamado lrkn.tgz ubicado en el directorio /root
(el último archivo en la salida de nuestro comando fls , antes de la lista de archivos huérfanos; recuerde que el el asterisco
indica que se eliminó):

...
r/r * 2139: raíz/lrkn.tgz
...

El inodo que muestra fls para este archivo es 2139. Este mismo inodo también apunta a otro archivo eliminado en /dev
anteriormente en la salida (mismo archivo, ubicación diferente). Podemos encontrar todos los nombres de archivos asociados
con una entrada de metadatos en particular usando el comando ffind :

barry@forensicbox:able2$ ffind -o 10260 -a able2.dd 2139 * /dev/ttYZ0/


lrkn.tgz * /root/lrkn.tgz

Aquí vemos que hay dos nombres de archivos asociados con el inodo 2139, y ambos se eliminan, como se indica nuevamente
con el asterisco (la -a asegura que obtengamos todas las asociaciones de inodos).

238
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Continuando, vamos a usar istat. Recuerde que fsstat tomó un sistema de archivos como argumento e
informó estadísticas sobre ese sistema de archivos. istat hace lo mismo; solo funciona en un inodo especi
cado o entrada de metadatos. En NTFS, sería una entrada MFT, por ejemplo. Aquí estamos trabajando en
un sistema de archivos EXT, por lo que el comando istat funciona en los inodos EXT.

Usamos istat para recopilar información sobre el inodo 2139:

barry@forensicbox:able2$ istat -o 10260 able2.dd 2139 | menos Grupo no asignado: 1 ID de


generación: 3534950564

uid/gid: 0/0 modo: rrw-


r--r--
tamaño: 3639016
número de enlaces: 0

Tiempos de inodo:
Acceso: 2003-08-10 00:18:38 (EDT)
Archivo modificado: 2003-08-10 00:08:32 (EDT)
Inodo modificado: 2003-08-10 00:29:58 (EDT)
Eliminado: 2003-08-10 00:29:58 (EDT)

Bloques directos:
22811 22812 22813 22814 22815 22816 22817 22818
22819 22820 22821 22822 22824 22825 22826 22827
...
32233 32234

Bloques indirectos:
22823 23080 23081 23338 23595 23852 24109 24366
30478 30735 30992 31249 31506 31763 32020

Esto lee las estadísticas del inodo (istat), en el sistema de archivos ubicado en la imagen able2.dd en la
partición en el sector o set 10260 (-o 10260), del inodo 2139 que se encuentra en nuestro comando fls .
Aquí hay una gran cantidad de resultados, que muestran toda la información del inodo y los bloques del
sistema de archivos ("Bloques directos") que contienen todos los datos del archivo. Podemos canalizar la
salida de istat a un archivo para registrarlo, o podemos enviarlo a less para verlo.

Sleuth Kit es compatible con varios sistemas de archivos diferentes. istat (junto con muchos de los
comandos del Sleuth Kit) funcionará en más que un sistema de archivos EXT. La salida descriptiva cambiará
para coincidir con el sistema de archivos en el que se está utilizando istat . Veremos más de esto un poco
más adelante. Puede ver los sistemas de archivos admitidos ejecutando istat con -f list.

barry@forensicbox:able2$ istat -f lista


Tipos de sistemas de archivos admitidos:

239
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ntfs (NTFS)
fat (FAT (detección automática))
ext (ExtX (detección automática))
iso9660 (ISO9660 CD) hfs (HFS+)
ufs (UFS (detección automática))
raw (datos sin procesar) swap
(espacio de intercambio) fat12
(FAT12 ) fat16 (FAT16) fat32
(FAT32) exfat (exFAT) ext2 (Ext2)
ext3 (Ext3) ext4 (Ext4) ufs1
(UFS1) ufs2 (UFS2) yaffs2
(YAFFS2)

Ahora tenemos el nombre de un archivo de interés eliminado (de fls) y la información del inodo, incluido
el lugar donde se almacenan los datos (de istat).

Ahora vamos a usar el comando icat de TSK para obtener los datos reales contenidos en los bloques de
datos a los que se hace referencia desde el inodo. icat también toma el inodo como argumento y lee el
contenido de los bloques de datos que están asignados a ese inodo, enviándolo a la salida estándar.
Recuerde, este es un archivo eliminado que estamos recuperando aquí.

Vamos a enviar el contenido de los bloques de datos asignados al inodo 2139 a un archivo para un
examen más detallado.

barry@forensicbox:able2$ icat -o 10260 able2.dd 2139 > lrkn.tgz.2139

Esto ejecuta el comando icat en el sistema de archivos en nuestra imagen able2.dd en el sector o set
10260 (-o 10260) y transmite el contenido de los bloques de datos asociados con el inodo 2139 al
archivo lrkn.tgz.2139. El nombre de archivo es arbitrario; Simplemente tomé el nombre del archivo de
fls y agregué el número de inodo para indicar que se recuperó. Normalmente, esta salida debe dirigirse
a algunos resultados o al directorio de evidencia especificado.

Ahora que tenemos lo que esperamos que sea un archivo recuperado, ¿qué hacemos con él? Mire el
archivo resultante con el comando de archivo :

barry@forensicbox:able2$ archivo lrkn.tgz.2139


lrkn.tgz.2139: datos comprimidos con gzip, era "lrkn.tar", última modificación: sábado 3 de octubre
,ÿ 09:04:08 1998, de Unix, tamaño original 10106880

240
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Echa un vistazo a los contenidos del archivo recuperado (canaliza la salida a través de menos... es
larga). Recuerde que la opción t del comando tar muestra el contenido del archivo.

barry@forensicbox:able2$ tar tzvf lrkn.tgz.2139 | menos drwxr-xr-x


0 1998-10-01
lp/lp -rwxr-xr-x lp/lp -rw-r--r-- lp/lp -rw-r--r-- 18:48 lrk3/
lp/lp -rw-r--r- - lp/lp -rwxr-
xr-x lp/lp 742 1998-06-27 11:30 lrk3/1
716 1996-11-02 16:38 lrk3/MCONFIG 6833
1998-10-03 05:02 lrk3/Makefile 6364
1996-12-27 22:01 lrk3/README
90 1998-06-27 12:53 lrk3/EJECUTAR
...
-rwxr-xr-x lp/lp -rw- 5526 1998-08-06 06:36 lrk3/z2 1996
r--r-- lp/lp 1996-11-02 16:39 lrk3/z2.c

Todavía no hemos extraído el archivo, solo enumeramos su contenido. Observe que hay un archivo README
incluido en el archivo. Si tenemos curiosidad sobre el contenido del archivo, tal vez leer el archivo README
sería una buena idea, ¿no? En lugar de extraer todo el contenido del archivo, buscaremos solo el LÉAME
usando el siguiente comando tar :

barry@forensicbox:able2$ tar xzvfO lrkn.tgz.2139 lrk3/README > lrkn.2139.README lrk3/README

La diferencia con este comando tar es que especificamos que queremos que la salida se envíe a
stdout (O -letra mayúscula 'oh') para que podamos redirigirla. También especificamos el nombre del
archivo que queremos extraer del archivo (lrk3/README). Todo esto se redirige a un nuevo archivo llamado
lrkn.2139.LÉAME.

Si lee ese archivo (usar menos), descubrirá que hemos descubierto un "rootkit", lleno de programas
utilizados para ocultar la actividad de un hacker.

Brevemente, veamos un tipo diferente de archivo recuperado por icat. El concepto es el mismo, pero
en lugar de extraer un archivo, puede transmitir su contenido a stdout para verlo. Recuerde nuestra
lista de directorio anterior del directorio .001 en el inodo 11105:

barry@forensicbox:able2$ fls -o 10260 able2.dd 11105 r/r 2138:


lolit_pics.tar.gz r/r 11107: lolitaz1 r/r 11108: lolitaz10 r/r 11109:
lolitaz11 r/r 11110: lolitaz12 r/ r 11111: lolitaz13 r/r 11112: lolitaz2 r/
r 11113: lolitaz3 r/r 11114: lolitaz4 r/r 11115: lolitaz5

241
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

r/r 11116: lolitaz6 r/r


11117: lolitaz7 r/r 11118:
lolitaz8 r/r 11119: lolitaz9

Podemos determinar el contenido del archivo (asignado) en el inodo 11108, por ejemplo, usando icat para
transmitir los bloques de datos del inodo a través de una canalización al comando de archivo . Usamos el
'-' para indicar que el archivo está recibiendo su entrada de la tubería:

barry@forensicbox:able2$ icat -o 10260 able2.dd 11108 | archivo - /dev/


stdin: datos de imagen GIF, versión 89a, 233 x 220

La salida muestra que estamos tratando con un archivo de imagen. Así que decidimos usar el comando de
visualización para mostrarnos los contenidos. display es un programa útil ya que tomará la entrada de
stdin (de una tubería). Esto es particularmente útil con el comando icat .

barry@forensicbox:able2$ icat -o 10260 able2.dd 11108 | monitor

Esto da como resultado una imagen que se abre en una ventana, suponiendo que esté ejecutando en un
entorno gráfico y tenga instalado ImageMagick, que proporciona la utilidad de visualización .

Figura 11: La imagen producida por la pantalla cuando se usa directamente desde icat

10.3.2 Sleuth Kit Ejercicio 1B: Identificación y recuperación de archivos eliminados (ext4)

El ejercicio anterior es una buena base para aprender a ejecutar comandos TSK contra una imagen forense
e identificar y extraer archivos. Usamos una imagen forense más antigua de un ext2

242
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

porque nos permite ejecutar el curso completo de las herramientas de identificación y extracción proporcionadas
por TSK. Podemos hacer esto porque los archivos ext2 que se eliminan todavía tienen suficiente información en
sus metadatos del sistema de archivos asociados ("inodo" para sistemas de archivos EXT) para poder recuperar
el archivo. Como verá en las próximas páginas, esto ha cambiado para el sistema de archivos ext4. Como se ha
dejado claro en el pasado, esto no pretende ser una educación sobre los sistemas de archivos en general. Más
bien, el propósito aquí es resaltar las herramientas y cómo puede esperar resultados diferentes según el sistema
de archivos que se esté examinando. También queremos asegurarnos de que se conozcan las limitaciones de
nuestras herramientas. Si aprendiera TSK solo en un sistema de archivos ext2, podría esperar que funcionara
exactamente de la misma manera en ext4. Este no es el caso, y este ejercicio lo ilustra. Es una de las razones
principales por las que se agregó la imagen able_3 a nuestro conjunto de problemas.

Así que ahora vamos a replicar aproximadamente el mismo análisis que el ejercicio anterior, pero esta vez
examinando un sistema de archivos ext4 en la imagen capaz_3 . Seremos breves en la explicación de los
comandos, ya que son básicamente los mismos que ejecutamos en el ejercicio 1A. Revise ese ejercicio y
asegúrese de estar familiarizado con los comandos utilizados antes de continuar aquí. Los archivos que se
recuperan son los mismos, pero su ubicación difiere un poco de la imagen de able2 .

Primero tenemos que decidir cómo queremos acceder a nuestro archivo de imagen. La imagen de disco de
able_3 , tal como se descargó, es un conjunto de cuatro imágenes divididas. Como hemos hecho antes, puede
usar affuse para montar las divisiones como una sola imagen e incluso usar losetup -P para separar las
particiones. Pero dado que Sleuth Kit admite el análisis de archivos de imágenes divididas, seguiremos adelante
y los dejaremos como están. Puede usar el comando img_stat de TSK para documentar esto.

Comience cambiando al directorio able_3 que creamos previamente para nuestros archivos de imagen, ejecute
img_stat para ver el soporte de archivos divididos y ejecute mmls para identificar las particiones. Al usar TSK en
imágenes divididas, solo necesitamos proporcionar el primer archivo de imagen en el conjunto (la misma regla se
aplica a los archivos EWF, solo proporciona el primer nombre de archivo en el conjunto):

barry@forensicbox:~$ cd capaz_3

barry@forensicbox:able_3$ img_stat able_3.000 INFORMACIÓN


DEL ARCHIVO DE IMAGEN
--------------------------------------------

Tipo de imagen: crudo

Tamaño en bytes: 4294967296


Tamaño del sector: 512

--------------------------------------------

Información dividida:
able_3.000 (0 a 1073741823) able_3.001
(1073741824 a 2147483647) able_3.002 (2147483648 a
3221225471) able_3.003 (3221225472 a 4294967295)

243
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:able_3$ mmls capaz_3.000


Tabla de particiones GUID (EFI)
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla de seguridad
001: ------- 0000000000 0000002047 0000002048 Sin asignar
002: Meta 0000000001 0000000001 0000000001 Encabezado GPT
003: Meta 0000000002 0000000033 0000000032 Tabla de partición
004: 000 0000002048 0000104447 0000102400 Sistema de archivos Linux
005: 001 0000104448 0000309247 0000204800 Sistema de archivos Linux
006: ------- 0000309248 0000571391 0000262144 Sin asignar
007: 002 0000571392 0008388574 0007817183 Sistema de archivos Linux
008: ------- 0008388575 0008388607 0000000033 Sin asignar

Dado que nuestro propósito aquí es resaltar las diferencias entre el examen de esta imagen
establecer frente a la imagen de able2 , en lugar de buscar cada partición individualmente, solo nos centraremos en
la partición /home . Recuerde de nuestro ejercicio de reconstrucción del sistema de archivos que la partición
utilizada para el directorio /home en la imagen able_3 es la partición en o set 104448 (negrita para
énfasis arriba).

Ejecute fsstat en esa partición para identificar el tipo de sistema de archivos y la información. podrías
desea canalizar la salida a través de menos para una visualización más fácil:

barry@forensicbox:able_3$ fsstat -o 104448 able_3.000


INFORMACIÓN DEL SISTEMA DE ARCHIVOS
--------------------------------------------

Tipo de sistema de archivos: Ext4


Nombre del volumen:
Id. de volumen: 7273603b5810169e264dded90f4cacc4

Último escrito en: 2017-05-25 15:20:50 (EDT)


Última consulta: 2017-05-06 16:49:45 (EDT)

Montado por última vez el: 2017-05-25 15:10:23 (EDT)


Desmontado correctamente
Montado por última vez el: /home
...

Aquí vemos que estamos examinando un sistema de archivos ext4 que se montó en /home. ejecutar un rápido
comando fls para ver el contenido de esta partición:

barry@forensicbox:able_3$ fls -o 104448 able_3.000


d/d 11: perdido+encontrado

244
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

d/d 12: ftp


d/d 13: alberto
V/V 25689: $Archivos huérfanos

Puedes ver que hay pocas entradas aquí. Puede comenzar a profundizar proporcionando el inodo
al comando fls para el contenido de directorios individuales, pero en su lugar simplemente haremos un
archivos recursivos

barry@forensicbox:able_3$ fls -o 104448 -r capaz_3.000


d/d 11: perdido+encontrado
d/d 12: ftp
d/d 13: alberto
+ d/d 14: .h
++ r/d * 15(realizar): lolit_pics.tar.gz
++ r/r * 16(realizar): lolitaz1
++ r/r * 17: lolitaz10
++ r/r * 18: ++ r/ lolitaz11
r * 19: ++ r/r 20: lolitaz12
lolitaz13
++ r/r * 21: ++ r/ lolitaz2
r * 22: lolitaz3
++ r/r * 23: lolitaz4
++ r/r * 24: lolitaz5
++ r/r * 25: lolitaz6
++ r/r * 26: lolitaz7
++ r/r * 27: lolitaz8
++ r/r * 28: + d/d lolitaz9
15: Descargar
++ r/r 16: índice.html
++ r/r * 17: lrkn.tar.gz
V/V 25689: $Archivos huérfanos

Puede ver algunos archivos familiares en esta salida. Vemos las lolitaz les que vimos en el .001
directorio en able2, y también vemos el archivo lrkn.tar.gz que recuperamos y extrajimos el
LÉAME de. Para este ejercicio, nos interesarán las lolitaz les. El lrkn.tar.gz
el contenido vendrá más tarde. Notará que la mayoría de los archivos residen en un
(no eliminado) llamado .h y son archivos no asignados (señalados con un asterisco *). Ahí
es un único archivo asignado en ese directorio llamado lolitaz13. Compare la salida de istat y
un comando icat de seguimiento entre el asignado le lolitaz13 (inodo 20), y uno de los
archivos borrados - usaremos lolitaz2 (inode 21). Para el comando icat , canalizaremos la salida a
nuestro visor hexadecimal xxd y mire las primeras cinco líneas con head -n 5. Aquí está el resultado de ambos:

barry@forensicbox:able_3$ istat -o 104448 able3.000 20


inodo: 20

245
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Asignado
Grupo: 0
Identificación de generación: 1815721463

uid/gid: 1000/100 modo: rrw-r--


r--

Banderas:
Extensiones, tamaño: 15045
número de enlaces: 1

Tiempos de inodo:
Acceso: 2017-05-08 00:18:16 (EDT)
Archivo modificado: 2003-08-03 19:15:07 (EDT)
Inodo modificado: 2017-05-08 00:18:16 (EDT)

Bloques directos:
9921 9922 9923 9924 9925 9926 9927 9928
9929 9930 9931 9932 9933 9934 9935

barry@forensicbox:able_3$ icat -o 104448 able3.000 20 | xdd | cabeza -n 5 00000000: ffd8 ffe0 0010 4a46 4946
0001 0100 0001 ......JFIF......
00000010: 0001 0000 ffdb 0043 0008 0606 0706 0508 .........C........
00000020: 0707 0709 0908 0a0c 140d 0c0b 0b0c 1912 ................
00000030: 130f 141d 1a1f 1e1d 1a1c 1c20 242e 2720 ........... $.' 00000040: 222c 231c 1c28 3729 2c30
3134 3434 1f27 ",#..(7),01444.'

La salida interesante de istat está resaltada en rojo. Podemos ver que el inodo está asignado y los
datos se pueden encontrar en los bloques directos especificados en la parte inferior. Cuando se ve
con xxd y head , vemos la firma esperada de una imagen JPEG.

... y ahora para el inodo 21 no asignado:

barry@forensicbox:able_3$ istat -o 104448 able3.000 21 inodo: 21

No asignado
Grupo: 0
ID de generación: 1815721464 uid/gid:

1000/100 modo: rrw-r--r--

Banderas: Extensiones,
tamaño: 0
número de enlaces: 0

Tiempos de inodo:
Acceso: 2017-05-08 00:18:16 (EDT)
Archivo modificado: 2017-05-08 00:22:58 (EDT)
Inodo modificado: 2017-05-08 00:22:58 (EDT)
Eliminado: 2017-05-08 00:22:58 (EDT)

246
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Bloques directos:

barry@forensicbox:able_3$ icat -o 104448 able3.000 21 | xdd | head -n 5 <sin salida>

Aquí tenemos un resultado diferente. El inodo 21 apunta a un archivo no asignado. En un sistema de


archivos ext4, cuando se anula la asignación de un inodo, se borra la entrada para los bloques directos .
Ya no hay punteros a los datos, por lo que los comandos como icat no funcionarán. Recuerde que icat
funciona en la capa de inodo (archivo de metadatos). El comando icat usa la información que se encuentra
en el inodo para recuperar el archivo. En este caso no hay ninguno.

Esto no significa que no podamos recuperar los datos que estaban allí. Por el contrario, existen varias
técnicas que podemos utilizar para intentar recuperar los archivos eliminados. Pero en este caso se vuelve
mucho más difícil recuperar los datos y asociarlos con un nombre de archivo e información de inodo en
particular. Si bien este tipo de análisis forense está fuera del alcance de nuestro ejercicio, destaca la
diferencia entre usar estas herramientas en dos sistemas de archivos diferentes. Y ese es el punto: conozca
sus herramientas, sus capacidades y sus límites.

Cuando probamos herramientas para uso forense, no es suficiente decir "La herramienta X no funciona en
el sistema de archivos Y". Deberías entender por qué. En este caso, sería correcto decir que "icat funciona
como se espera en un sistema de archivos ext4, pero tiene un uso limitado en entradas eliminadas".
¡Asegúrese de entender la diferencia y pruebe sus herramientas!

10.3.3 Sleuth Kit Ejercicio 2A: Búsqueda de cadenas físicas y estado de asignación
(ext2)

Hicimos una recuperación muy básica de una búsqueda de cadena física en nuestra imagen del sistema
de archivos fat_fs.raw anteriormente en este documento. Este ejercicio pretende tomar algo de lo que
aprendimos allí y aplicarlo a una imagen de disco más compleja con desafíos adicionales. En un examen
normal, querrá averiguar (si es posible) a qué archivo pertenece un resultado de búsqueda de cadena
positivo y si ese archivo está asignado o no. Ese es el propósito de este ejercicio.

Ejercicios como este resaltan muy claramente el beneficio de aprender análisis forense digital con
herramientas como Sleuth Kit. A diferencia de la mayoría de las herramientas forenses de GUI con menús
y múltiples ventanas, TSK lo obliga a comprender estos conceptos detrás de las herramientas. No puede
usar TSK sin comprender qué herramientas usar y cuándo. Sin conocer los conceptos detrás de las
herramientas, no llegará muy lejos.

Volver a nuestra imagen de able2 . Esta vez vamos a hacer una búsqueda de una sola cadena en
able2.dd. En este caso buscaremos en nuestra imagen la palabra clave Cybernetik. Cambie al directorio
que contiene nuestra imagen able2.dd y use grep para buscar la cadena:

barry@forensicbox:~$ cd capaz2

247
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:able2$ grep -abi cybernetik able2.dd 10561603: * actualizado por


Cybernetik para el rootkit de Linux 55306929:Cybernetik presenta con orgullo...

55312943: Correo electrónico: cybernetik@nym.alias.net


55312975: Dedo: cybernetik@nym.alias.net

Recuerde que nuestro comando grep toma el archivo able2.dd, lo trata como un archivo de texto (-a) y busca la
cadena cybernetik. La búsqueda no distingue entre mayúsculas y minúsculas (-i) y generará el conjunto de
bytes de cualquier coincidencia (-b).

Nuestro resultado muestra que la primera coincidencia se encuentra en el byte de compensación 10561603.
Como hicimos en nuestro ejercicio de búsqueda de la primera cadena, vamos a ver rápidamente la coincidencia
usando nuestro visor hexadecimal xxd y usando la opción -s para proporcionar la compensación dada. por grep.
También usaremos el comando head para indicar que solo queremos ver un número especí co de líneas, en
este caso solo 5 (-n 5). Solo queremos echar un vistazo rápido al contexto de la coincidencia antes de continuar.

barry@forensicbox:able2$ xxd -s 10561603 able2.dd | head -n 5 00a12843: 202a 0975 7064 6174
6564 2062 7920 4379 *.actualizado por Cy 00a12853: 6265 726e 6574 696b 2066 6f72 206c 696e bernetik
para lin
00a12863: 7578 2072 6f6f 746b 6974 0a20 2a2f 0a0a ux rootkit. */.. 00a12873: 2369 6e63 6c75 6465 203c
7379 732f 7479 #include <sys/ty 00a12883: 7065 732e 683e 0a23 696e 636c 7564 6520 pes.h>.#include

También debemos tener en cuenta que lo que hemos encontrado es el desplazamiento de la coincidencia en
todo el disco (able2.dd es una imagen de disco completa), no en un sistema especí co. Para usar las
herramientas del Sleuth Kit, necesitamos tener un sistema de archivos para apuntar.

Averigüemos en qué partición (y sistema de archivos) se encuentra la coincidencia. Use bc para calcular en qué
sector de la imagen y, por lo tanto, el disco original en el que se encuentra la palabra clave. Cada sector tiene
512 bytes, por lo que dividir el conjunto de bytes por 512 nos dice que sector:

barry@forensicbox:able2$ echo "10561603/512" | antes de Cristo

El comando mmls de Sleuth Kit nos da el desplazamiento de cada partición en la imagen:

barry@forensicbox:able2$ mmls able2.dd Tabla de particiones


de DOS
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla primaria (#0)
001: ------- 0000000000 0000000056 0000000057 Sin asignar

248
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 12: El conjunto de sectores en able2.dd donde se encontró el resultado de la búsqueda.

002: 000:000 0000000057 0000010259 0000010203 Linux (0x83)


003: 000:001 0000010260 0000112859 0000102600 Linux (0x83)
004: 000:002 0000112860 0000178694 0000065835 Cambio de Linux/Solaris x86 (0
,ÿ x82)
005: 000:003 0000178695 0000675449 0000496755 Linux (0x83)

Del resultado de mmls anterior, vemos que nuestro sector calculado, 20628, cae en la segunda partición (entre 10260
y 112859). El desplazamiento de nuestro sistema de archivos para los comandos del Sleuth Kit será 10260.

El problema es que el desplazamiento que tenemos es el desplazamiento de la palabra clave en la imagen del disco,
no en el sistema de archivos (que es con lo que está asociado el bloque de datos de volumen). Así que tenemos que
calcular el desplazamiento del archivo Y el desplazamiento de la partición que contiene el archivo. El ajuste a la partición
es simplemente una cuestión de multiplicar el ajuste del sector por el tamaño del sector para nuestro sistema de
archivos:

barry@forensicbox:able2$ echo "10260*512" | antes de


Cristo 5253120

La diferencia entre los dos es el desplazamiento del volumen del hit de la palabra clave, en lugar del desplazamiento
del disco físico (o imagen).

barry@forensicbox:able2$ echo "10561603-5253120" | ac 5308483

249
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 13: El volumen compensado en able2.dd donde se encontró el resultado de la búsqueda.

Figura 14: El desplazamiento a la palabra clave en el volumen

Ahora conocemos el desplazamiento de la palabra clave dentro del volumen real, en lugar de la imagen completa.
Averigüemos qué inodo (unidad de metadatos) apunta al bloque de datos de volumen en ese desplazamiento. Para
encontrar a qué inodo pertenece, primero tenemos que calcular la dirección del bloque de datos de volumen. Mire la
salida fsstat del Sleuth Kit para ver la cantidad de bytes por bloque. Necesitamos ejecutar fsstat en el sistema de
archivos en el sector o set 10260:

barry@forensicbox:able2$ fsstat -o 10260 able2.dd

INFORMACIÓN DEL SISTEMA DE ARCHIVOS


--------------------------------------------

Tipo de sistema de archivos: Ext2


Nombre del volumen:
Id. de volumen: 906e777080e09488d0116064da18c0c4

250
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

...
INFORMACIÓN DE CONTENIDO
--------------------------------------------

Rango de bloque: 0 - 51299


Tamaño del bloque: 1024

El resultado abreviado de fsstat anterior nos muestra (resaltado en negrita) que los bloques de datos dentro del
volumen tienen 1024 bytes cada uno. Si dividimos el volumen compensado por 1024, identificamos el bloque
de datos que contiene el resultado de la palabra clave.

barry@forensicbox:able2$ echo "5308483/1024" | aC 5184

Figura 15: Identificación del bloque de datos de la palabra clave

Aquí están nuestros cálculos, resumidos:

o establezca la cadena en la imagen del disco (de nuestra salida grep ): 10561603
*
o establecer en la partición que contiene el archivo: 10260 sectores 512 bytes por sector

o establecido en la cadena en la partición es la diferencia entre los dos números anteriores.

el bloque de datos es el desplazamiento en el sistema de archivos dividido por el tamaño del bloque (tamaño de la unidad
de datos) 1024, de nuestra salida fsstat .

En resumen, nuestro cálculo, teniendo en cuenta todas las ilustraciones anteriores, es simplemente:

barry@forensicbox:able2$ echo "(10561603-(10260*512))/1024" | aC 5184

Tenga en cuenta que usamos paréntesis para agrupar nuestros cálculos. Encontramos el byte desplazado al
sistema de archivos primero (10260*512), lo restamos del desplazamiento a la cadena (10561603) y luego
dividimos todo por el tamaño de la unidad de datos (1024) obtenido de fsstat. Este (5184) es nuestro

251
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 16: Cálculo único para identificar el bloque de datos de la palabra clave

unidad de datos (¡no el inodo!) que contiene la cadena que encontramos con grep. Muy rápidamente,
podemos determinar su estado de asignación con el comando blkstat de Sleuth Kit

barry@forensicbox:able2$ blkstat -o 10260 able2.dd 5184 Fragmento: 5184 Grupo no


asignado: 0

El comando blkstat toma un bloque de datos de un sistema de archivos y nos dice lo que puede sobre su
estado y a dónde pertenece. Cubriremos las herramientas TSK blk con más detalle más adelante. Entonces,
en este caso, blkstat nos dice que nuestra búsqueda de palabras clave para la cadena cybernetik resultó en
una coincidencia en un bloque no asignado. Ahora usamos ifind para decirnos qué inodo (estructura de
metadatos) apunta al bloque de datos 5184 en la segunda partición de nuestra imagen:

barry@forensicbox:able2$ ifind -o 10260 -d 5184 able2.dd 10090

¡Excelente! El inodo que contiene la coincidencia de palabras clave es 10090. Ahora usamos istat para
obtener las estadísticas de ese inodo:

barry@forensicbox:able2$ istat -o 10260 able2.dd 10090 inodo: 10090

No asignado
Grupo: 5
Identificación de generación: 3534950782

uid/gid: 4/7 modo: rrw-


r--r--
tamaño: 3591
número de enlaces: 0

252
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Tiempos de inodo:
Acceso: 2003-08-10 00:18:36 (EDT)
Archivo modificado: 1996-12-25 16:27:43 (EST)
Inodo modificado: 2003-08-10 00:29:58 (EDT)
Eliminado: 2003-08-10 00:29:58 (EDT)

Bloques directos:
5184 5185 5186 5187

De la salida de istat vemos que el inodo 10090 no está asignado (igual que blkstat nos dijo sobre la unidad de
datos). Tenga en cuenta también que el primer bloque directo indicado por nuestra salida de istat es 5184, tal
como lo calculamos.

Podemos obtener los datos de los bloques directos del archivo original usando icat -r. Canalice la salida a través
de less para que podamos leerla más fácilmente. Tenga en cuenta que nuestra palabra clave está justo en la
parte superior:

barry@forensicbox:able2$ icat -o 10260 able2.dd 10090 | menos /*

* fijador.c

* por Idefix *
inspirado en sum.c y SaintStat 2.0 * actualizado por
Cybernetik para linux rootkit */

#include <sys/types.h> #include


<sys/stat.h> #include <sys/
time.h> #include <stdio.h>

...

En este punto, hemos recuperado los datos que buscábamos. Podemos ejecutar nuestro comando icat como se
indicó anteriormente nuevamente, esta vez dirigiendo la salida a un archivo (como hicimos con el archivo rootkit
de nuestro ejercicio de recuperación anterior). Lo haremos aquí para una posible referencia posterior:

barry@forensicbox:able2$ cat -o 10260 able2.dd 10090 > 10090.recuperar

barry@forensicbox:able2$ ls -l 10090.recover -rw-r--r-- 1 usuarios de


barry 3591 30 de julio 06:47 10090.recover

barry@forensicbox:able2$ md5sum 10090.recuperar


c3b01f91d3fa72b1b951e6d6d45c7d9a 10090.recuperar

Una nota adicional: Sleuth Kit proporciona un directorio virtual que contiene entradas para

253
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

les huérfanos. Como señalamos anteriormente, en nuestra discusión sobre el comando fls , estos archivos son el
resultado de un inodo que contiene datos de archivo que no tienen un nombre de archivo (entrada de directorio)
asociado. Sleuth Kit los organiza en el directorio virtual $OrphanFiles . Esta es una función útil porque nos permite
identificar y acceder a archivos huérfanos desde la salida del comando fls .

En este ejercicio, determinamos a través de nuestros cálculos que estábamos buscando el contenido del inodo
10090. El comando ffind de Sleuth Kit puede decirnos el nombre del archivo asociado con un inodo. Aquí, se nos
proporciona la entrada $OrphanFiles :

barry@forensicbox:able2$ ffind -o 10260 able2.dd 10090 * /


$OrphanFiles/OrphanFile-10090

Recuerde que varios sistemas de archivos actúan de manera muy diferente. Continuaremos explorando las
diferencias entre ext2 y ext4 aquí en el próximo ejercicio. Al igual que el ejercicio #1 de TSK, vamos a hacer el
mismo conjunto de pasos en la imagen de able_3 y veremos qué obtenemos.

10.3.4 Sleuth Kit Ejercicio 2B: Búsqueda de cadenas físicas y estado de asignación
(ext4)

Al igual que el ejercicio #1 de TSK, vamos a repetir nuestros pasos aquí para la imagen ext4 en able_3.000. Una
vez más, estamos ilustrando las diferencias en la salida de nuestras herramientas según el tipo de sistema de
archivos que se analiza para que podamos reconocer la diferencia que el comportamiento del sistema de archivos
hace en nuestra salida. No hay diagramas esta vez. Debe estar familiarizado con los comandos que vamos a
utilizar aquí. El objetivo es mostrar el resultado que podemos esperar al final y cómo quizás podamos manejarlo.

Cambie de nuevo al directorio able_3/ donde se almacena el conjunto de imágenes able_3 . En el ejercicio de
able2 hicimos una búsqueda en disco completo del término cybernetik. En este caso tenemos un conjunto de
imágenes divididas. Sabemos que las herramientas de Sleuth Kit funcionan en los archivos divididos, pero ¿cómo
grep el disco completo cuando tengo imágenes divididas? Como mencionamos en nuestro ejercicio anterior de
able_3 , podemos usar affuse para proporcionarnos una imagen de disco completa montada en fusible. En este
caso, sin embargo, no necesito una imagen de disco completa excepto por el comando grep . Y dado que grep
tomará la entrada de stdin (a través de una tubería), ¿por qué no simplemente transmitir las imágenes a través de
una tubería a grep para que aparezcan como una sola imagen, sin un paso preliminar? Eso es lo que hacemos
aquí, buscando el mismo término que hicimos antes:

barry@forensicbox:able_3$ cat able_3.00*| grep -abi cybernetik


429415089:Cybernetik presenta con orgullo...
429422127: Correo electrónico:
cybernetik@nym.alias.net 429422159: Dedo:
cybernetik@nym.alias.net 1632788547: *actualizado por
Cybernetik para el rootkitCybernetik.net
de Linux 2934551933:23140

254
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Usamos el comando cat para transmitir nuestros archivos divididos a grep para nuestra búsqueda. Esto no es diferente
que reconstruir el archivo (creando una sola imagen con cat >), sino que simplemente pasamos
la salida de cat directamente a grep. El comando puede tomar más tiempo y la palabra clave compensa
son obviamente diferentes que en able2 porque esta es una imagen más grande y diferente. Estamos
vamos a concentrarnos en la misma coincidencia que usamos para nuestro ejercicio de able2 ext2. Eso sería
la palabra clave acertó en 1632788547.

Recuerda nuestros pasos desde aquí. Necesitamos calcular el desplazamiento en sectores (dividir por 512),
luego calcule el desplazamiento al volumen en el que encontramos la palabra clave, y luego reste el
volumen o set de la palabra clave o set para encontrar el o set a la cadena en el volumen. Hacer
seguro que calculamos usando el tamaño de bloque correcto para el sistema de archivos. Recuerda que estamos trabajando
con bloques de datos aquí. El comando ffstat le dará el tamaño adecuado para este sistema de archivos.

Terminamos con los números a continuación. Revisa el ejercicio anterior si tienes alguna duda
sobre los pasos dados:

barry@forensicbox:able_3$ echo $((1632788547/512))


3189040

barry@forensicbox:able_3$ mmls capaz_3.000


Tabla de particiones GUID (EFI)
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla de seguridad
001: ------- 0000000000 0000002047 0000002048 Sin asignar
002: Meta 0000000001 0000000001 0000000001 Encabezado GPT
003: Meta 0000000002 0000000033 0000000032 Tabla de partición
004: 000 0000002048 0000104447 0000102400 Sistema de archivos Linux
005: 001 0000104448 0000309247 0000204800 Sistema de archivos Linux
006: ------- 0000309248 0000571391 0000262144 Sin asignar
007: 002 0000571392 0008388574 0007817183 Sistema de archivos Linux
008: ------- 0008388575 0008388607 0000000033 Sin asignar

barry@forensicbox:able_3$ fsstat -o 571392 able_3.000 | menos


INFORMACIÓN DEL SISTEMA DE ARCHIVOS
--------------------------------------------

Tipo de sistema de archivos: Ext4


Nombre del volumen:
Id. de volumen: dd9f5b9524f943aae944383ab248f7c7
...
INFORMACIÓN DE CONTENIDO
--------------------------------------------

Grupos de bloques por grupo flexible: 16


Rango de bloque: 0 - 977146
Tamaño del bloque: 4096

255
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Bloques gratis: 557639


...

barry@forensicbox:able_3$ echo "(1632788547-(571392*512))/4096" | antes de cristo


327206

Estamos listos para ejecutar nuestro comando blkstat para averiguar si nuestro hit de palabra clave está en un bloque
asignado a un inodo asignado:

barry@forensicbox:able_3$ blkstat -o 571392 able_3.000 327206 Fragmento:


327206 No asignado

Grupo: 9

Entonces el bloque no está asignado. Veamos ahora si podemos encontrar a qué inodo pertenecía este bloque no
asignado:

barry@forensicbox:able_3$ ifind -o 571392 -d 327206 able_3.000 Inodo no


encontrado

Y ahí está nuestra respuesta. No se puede encontrar el inodo. Nuevamente, esto se debe a que los inodos en ext4 que
no están asignados tienen los punteros de bloque directo eliminados. El comando ifind está buscando un puntero a la
unidad de datos (-d 327206) en la tabla de inodos y no puede encontrar uno.

Todo no esta perdido. En lugar de usar icat para extraer los bloques de datos a los que apunta un inodo, podemos usar
blkcat para transmitir directamente el contenido de un bloque de datos. Echa un vistazo a continuación. Usaremos
blkcat y redirigiremos a un archivo:

barry@forensicbox:able_3$ blkcat -o 571392 able_3.000 327206 > negro.327206

barry@forensicbox:able_3$ ls -l blk.327206 -rw-r--r-- 1


usuarios de barry 4096 30 de julio 07:31 blk.327206

Mira el le con gato o menos. Verá que es el mismo archivo que recuperamos de able2. Sin embargo, tiene algo de
basura al final. ¿Porqué es eso? ¿Recuerdas cuando recuperamos este mismo archivo de able2 con icat? icat tenía la
información que necesitaba para hacer una recuperación completa de los datos correctos. No tenemos eso aquí, y todo
lo que hicimos fue transmitir ("block cat") un solo bloque de datos (que sabemos que son 4096 bytes de nuestra salida
fsstat ) y guardar todo. Recuerde nuestro resultado del ejercicio de able2 anterior a este (los siguientes comandos se
ejecutan en el directorio de able2 ; tenga en cuenta el símbolo del sistema):

barry@forensicbox:able2$ ls -l 10090.recover -rw-r--r-- 1


usuarios de barry 3591 30 de julio 06:47 10090.recover

256
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:able2$ md5sum 10090.recuperar


c3b01f91d3fa72b1b951e6d6d45c7d9a 10090.recuperar

Lo anterior es de la imagen de disco de able2 . Mira el tamaño del archivo. 3591 bytes. Ahora, de manera realista,
no tendríamos esta información disponible para nosotros en un examen real, pero solo por diversión, veamos si
podemos hacer que los archivos coincidan usando el tamaño del archivo de nuestra recuperación de able2 como
guía. Dado que el archivo de able_3 es más grande, podemos usar dd para cortar los datos correctos de él. El
archivo tiene actualmente un tamaño de 4096 bytes. Necesitamos que sea de 3591 bytes:

barry@forensicbox:able_3$ dd if=blk.327206 bs=1 count=3591 > 327206.recuperar 3591+0 registros en

3591+0 registros fuera

3591 bytes (3,6 kB, 3,5 KiB) copiados, 0,00413113 s, 869 kB/s

barry@forensicbox:able_3$ md5sum 327206.recuperar


c3b01f91d3fa72b1b951e6d6d45c7d9a 327206.recuperar

Compare la salida de md5sum de 327206.recover con la de able2/10090.recover. ¡Mira eso! El md5sum del
archivo que recuperamos de able2 con icat ahora coincide con el archivo que recuperamos usando blkcat en
able_3. Nuevamente, no es del todo realista, pero sirve para ilustrar exactamente qué datos estamos obteniendo
y por qué. Esperemos que haya algún valor educativo para usted allí.

10.3.5 Ejercicio 3 del kit de detectives: Extracción y examen no asignados

A medida que crece el tamaño de los medios que se examinan, muchos investigadores se dan cuenta de que las
técnicas de reducción de datos son más importantes que nunca. Estas técnicas adoptan varias formas, incluido
el análisis hash (eliminación de archivos "buenos" conocidos de un conjunto de datos, por ejemplo) y la separación
del espacio asignado en una imagen del espacio no asignado, lo que permite buscarlos por separado con
herramientas especializadas. Haremos esto último en este ejercicio.

El comando blkcat que usamos anteriormente es un miembro del conjunto de herramientas Sleuth Kit para
manejar información en la capa de "bloque" del modelo de análisis. La capa de bloque consta de los bloques del
sistema de archivos reales que contienen la información que buscamos. No son especí cos solo para datos no
asignados, pero son especialmente útiles para trabajar en bloques no asignados que se han extraído de una
imagen. Las herramientas que manipulan esta capa, como era de esperar, comienzan con blk e incluyen:

blkls
blkcalc
blkstat
gato negro

257
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Nos centraremos en blkls, blkcalc y blkstat para los próximos ejercicios.

La herramienta que nos inicia aquí es blkls. Este comando "enumera todos los bloques de datos". Si usara la
opción -e , la salida sería la misma que la salida de dd para ese volumen, ya que -e le dice a blkls que copie
cada bloque. Sin embargo, de forma predeterminada, blkls solo copiará los bloques no asignados de una imagen.

Esto nos permite separar bloques asignados y no asignados en nuestro sistema de archivos. Podemos usar
herramientas lógicas (find, ls, etc.) en los archivos "en vivo" en un sistema de archivos montado y concentrar
los esfuerzos de recuperación de datos solo en aquellos bloques que pueden contener datos eliminados o no
asignados. Por el contrario, cuando hacemos una búsqueda física de la salida de blkls, podemos estar seguros
de que los artefactos encontrados son de contenido no asignado.

Para ilustrar de lo que estamos hablando aquí, ejecutaremos el mismo ejercicio que hicimos en el Ejercicio TSK
#2A, esta vez extrayendo los datos no asignados de nuestro volumen de interés y comparando el resultado del
análisis de volumen completo con el análisis no asignado. Entonces, estaremos trabajando en la imagen
able2.dd . Esperamos obtener los mismos resultados que obtuvimos en el Ejercicio n.º 2A, pero esta vez
analizando solo el espacio no asignado y luego asociando los datos recuperados con su ubicación original en la
imagen de disco completa.

Primero necesitaremos cambiar al directorio que contiene nuestra imagen able2.dd . Luego revisamos la tabla
de particiones y decidimos qué volumen examinaremos para saber el valor -o (o set) para nuestros comandos
de Sleuth Kit. Para hacer esto, ejecutamos el comando mmls como antes:

barry@forensicbox:~$ cd capaz2

barry@forensicbox:able2$ mmls able2.dd Tabla de particiones


de DOS
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla primaria (#0)
001: ------- 0000000000 0000000056 0000000057 Sin asignar
002: 000:000 0000000057 0000010259 0000010203 Linux (0x83)
003: 000:001 0000010260 0000112859 0000102600 Linux (0x83)
004: 000:002 0000112860 0000178694 0000065835 Cambio de Linux/Solaris x86 (0
,ÿ x82)
005: 000:003 0000178695 0000675449 0000496755 Linux (0x83)

Al igual que con el Ejercicio n.º 2, hemos decidido buscar el espacio no asignado en la segunda partición de
Linux (en el conjunto 10260, en negrita arriba).

Ejecutamos el comando blkls usando la opción o set -o que indica de qué sistema de archivos de partición
estamos exportando el espacio no asignado. Luego redirigimos la salida a un nuevo archivo que contendrá solo
los bloques no asignados de ese volumen en particular.

258
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:able2$ blkls -o 10260 able2.dd > able2.blkls

barry@forensicbox:able2$ ls -lh able2.blkls -rw-r--r-- 1


usuarios de barry 9,3 millones 30 de julio 09:37 able2.blkls

En el comando anterior, usamos blkls en la segunda partición (-o 10260) dentro de la imagen able2.dd y redirigimos
la salida a un archivo llamado able2.blkls. El archivo able2.blkls contendrá solo los bloques no asignados del
sistema de archivos de destino. En este caso, terminamos con un archivo de 9,3 M de tamaño.

Ahora, como hicimos en nuestro análisis anterior de este sistema de archivos (Ejercicio #2), usaremos grep, esta vez
en el espacio no asignado extraído, nuestro archivo able2.blkls , para buscar nuestra cadena de texto de interés.
Vuelva a leer el ejercicio n.° 2 si necesita refrescar estos comandos.

barry@forensicbox:able2$ grep -abi cybernetik able2.blkls 1631299: *


actualizado por Cybernetik para el rootkit de Linux 9317041:Cybernetik
presenta con orgullo...
9323055: Correo electrónico:
cybernetik@nym.alias.net 9323087: Dedo: cybernetik@nym.alias.net

El comando grep anterior ahora nos dice que hemos encontrado la cadena cybernetik en cuatro conjuntos diferentes
en el espacio no asignado extraído. Nos concentraremos en el primer golpe. Por supuesto, estos son diferentes de
los desplazamientos que encontramos en el Ejercicio #2 porque ya no estamos buscando en la imagen original
completa.

Así que la siguiente pregunta obvia es "¿y qué?". Encontramos evidencia potencial en nuestro espacio no asignado
extraído. Pero, ¿cómo se relaciona con la imagen original? Como examinadores forenses, simplemente encontrar
evidencia potencial no es suficiente. También necesitamos saber de dónde proviene: la ubicación física en la imagen
original, a qué archivo pertenece o (posiblemente) pertenecía, los metadatos asociados con el archivo y el contexto.
Encontrar evidencia potencial en un gran bloque de espacio agregado no asignado es de poca utilidad para nosotros
si no podemos al menos hacer algún esfuerzo de atribución en el sistema de archivos original.

Ahí es donde entran las otras herramientas de capa de bloque. Podemos usar blkcalc para calcular la ubicación (por
bloque de datos o fragmento) en nuestra imagen original. Una vez que hayamos hecho eso, simplemente usamos las
herramientas de la capa de metadatos para identificar y potencialmente recuperar el archivo original, como hicimos
en nuestro esfuerzo anterior.

Primero necesitamos recopilar un poco de información sobre el sistema de archivos original. Ejecutamos el comando
fsstat para determinar el tamaño de los bloques de datos con los que estamos trabajando. Ya hemos hecho esto
varias veces, pero la repetición es útil para resaltar la importancia de esta información.

barry@forensicbox:able2$ fsstat -o 10260 able2.dd | menos

259
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

INFORMACIÓN DEL SISTEMA DE ARCHIVOS


--------------------------------------------

Tipo de sistema de archivos: Ext2


Nombre del volumen:
Id. de volumen: 906e777080e09488d0116064da18c0c4
...
INFORMACIÓN DE CONTENIDO
--------------------------------------------

Rango de bloque: 0 - 51299


Tamaño del bloque: 1024
...

En el comando fsstat anterior, vemos que el tamaño del bloque (en negrita) es 1024. Tomamos el
desplazamiento de nuestra salida grep en la imagen de able2.blkls y lo dividimos por 1024. Esto nos dice
cuántos bloques de datos no asignados hay en el imagen no asignada encontramos nuestra cadena de
interés. Como de costumbre, usamos el comando echo para pasar la expresión matemática a la calculadora
de línea de comandos, bc:

barry@forensicbox:able2$ echo "1631299/1024" | 1593 aC

Ahora sabemos, por el resultado anterior, que la cadena cybernetik está en el bloque de datos 1593 de
nuestro archivo extraído sin asignar, able2.blkls.

Aquí es donde entra en juego nuestro útil comando blkcalc . Usamos blkcalc con la opción -u para
especificar que queremos calcular la dirección del bloque a partir de una imagen extraída sin asignar (de la
salida de blkls ). Ejecutamos el comando en la imagen dd original porque estamos calculando el bloque
de datos original en esa imagen. La pregunta que estamos respondiendo aquí es "¿Qué bloque de datos
en la imagen original es el bloque 1593 sin asignar?".

barry@forensicbox:able2$ blkcalc -o 10260 -u 1593 able2.dd 5184

El comando anterior está ejecutando blkcalc en el sistema de archivos en o set 10260 (-o 10260) en el able2.dd original,
pasando el bloque de datos que calculamos a partir de la imagen de blkls able2.blkls (-u 1593). El resultado es un bloque
familiar 5184 (consulte el Ejercicio n.° 2A nuevamente). La siguiente ilustración brinda una representación visual de un ejemplo
simple: En el ejemplo ilustrado arriba, los datos en el bloque 3 de la imagen blkls se asignarían al bloque 49 en el sistema de
archivos original. Encontraríamos esto con el comando blkcalc como se muestra en la figura.

Entonces, en términos simples, extrajimos el espacio no asignado, encontramos una cadena de interés en
un bloque de datos en la imagen no asignada y luego encontramos el bloque de datos correspondiente en
la imagen original.

260
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 17: Un ejemplo simple de cómo se usa blkcalc para determinar la dirección original de una unidad
de datos no asignada

Si observamos la salida de blkstat (estadísticas de bloques de datos) para el bloque 5184 en la imagen
original, vemos que, de hecho, no está asignado, lo cual tiene sentido, ya que lo encontramos dentro de
nuestro espacio extraído sin asignar (volvemos a la mismos resultados que en el Ejercicio #2A). Tenga en
cuenta que ahora estamos ejecutando los comandos en la imagen dd original . Continuaremos en aras de
la exhaustividad. Y porque es una buena práctica...

barry@forensicbox:able2$ blkstat -o 10260 able2.dd 5184 Fragmento:


5184 No asignado

Grupo: 0

Usando el comando blkcat podemos ver el contenido sin procesar del bloque de datos (usando xxd y
menos como visor). Si queremos, incluso podemos usar blkcat para extraer el bloque, redirigiendo el
contenido a otro archivo, tal como hicimos en el ejercicio #2B con nuestra imagen del sistema de archivos ext4.

Si queremos recuperar el archivo real y los metadatos asociados con el bloque de datos identificado,
usamos ifind para determinar qué estructura de metadatos (en este caso, inodo, ya que estamos
trabajando en un sistema de archivos EXT) contiene los datos en el bloque 5184. Luego , istat nos
muestra los metadatos para el inodo:

barry@forensicbox:able2$ ifind -o 10260 -d 5184 able2.dd 10090

261
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:able2$ istat -o 10260 able2.dd 10090 inodo: 10090

No asignado

Grupo: 5
Identificación de generación: 3534950782

uid/gid: 4/7 modo: rrw-


r--r--
tamaño: 3591
número de enlaces: 0

Tiempos de inodo:
Acceso: 2003-08-10 00:18:36 (EDT)
Archivo modificado: 1996-12-25 16:27:43 (EST)
Inodo modificado: 2003-08-10 00:29:58 (EDT)
Eliminado: 2003-08-10 00:29:58 (EDT)

Bloques directos:
5184 5185 5186 5187

Nuevamente, como vimos anteriormente, el comando istat , que nos muestra los metadatos para el inodo
10090, indica que el archivo con este inodo no está asignado y su primer bloque directo es 5184. Tal
como esperábamos.

Luego usamos icat para recuperar el archivo. En este caso, solo canalizamos las primeras líneas para ver
nuestra cadena de interés, cybernetik.

barry@forensicbox:able2$ icat -o 10260 able2.dd 10090 | cabeza -n 10 /*

* fijador.c

* por Idefix *
inspirado en sum.c y SaintStat 2.0 * actualizado por
Cybernetik para linux rootkit */

#include <sys/types.h> #include


<sys/stat.h> #include <sys/time.h>

10.3.6 SleuthKit Ejercicio 4: Examen NTFS - Análisis de archivos

En este punto, hemos realizado un par de ejercicios intermedios utilizando los sistemas de archivos ext2 y
ext4 de las imágenes de disco de Linux. En los siguientes ejercicios haremos algunos análisis simples en un

262
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Sistema de archivos NTFS. Este es uno de los sistemas de archivos más comunes que probablemente encontrará cuando
se trata de computadoras personales y empresariales en la actualidad.

Algunos podrían preguntarse, "¿por qué?" Existen muchas herramientas capaces de analizar un sistema de archivos NTFS
en su entorno nativo. En mi opinión, hay dos muy buenas razones para aprender a aplicar Sleuth Kit en los sistemas de
archivos de Windows. En primer lugar, el Sleuth Kit se compone de una serie de herramientas separadas con conjuntos de
capacidades muy discretos. La naturaleza especializada de estas herramientas significa que debe comprender su interacción
con el sistema de archivos que se analiza.
Esto los hace especialmente adecuados para ayudar a aprender los entresijos del comportamiento del sistema de archivos.
El hecho de que Sleuth Kit haga menos trabajo por usted lo convierte en una gran herramienta de aprendizaje.
En segundo lugar, una herramienta de código abierto que funciona en un entorno que no sea Windows constituye una
excelente utilidad de verificación cruzada.

El siguiente ejercicio demuestra un conjunto de pasos muy básicos útiles en la mayoría de los análisis.
Asegúrese de seguir la línea de comando. La experimentación es la mejor manera de aprender.

Si aún no lo ha hecho, le sugiero (nuevamente) que invierta en una copia del libro de Brian Carrier: Análisis forense del
sistema de archivos (publicado por Addison-Wesley, 2005).
Este libro es la guía definitiva sobre el comportamiento del sistema de archivos para analistas forenses. Como recordatorio
(nuevamente), el propósito de estos ejercicios NO es enseñarle sistemas de archivos o métodos forenses, sino ilustrar e
introducir la información detallada que TSK puede proporcionar sobre los sistemas de archivos comunes que encuentran los
examinadores de campo.

Para estos ejercicios que siguen, usaremos el conjunto de archivos NTFS_Pract_2017.E01 que descargamos y usamos
para nuestras secciones libewf anteriormente. Dado que estos son archivos EWF y tenemos soporte para libewf integrado
en TSK, trabajaremos directamente desde esos archivos. Si aún no lo ha hecho, descargue los archivos NTFS EWF, extraiga
el archivo y comencemos.

barry@forensicbox:~$ wget http://www.linuxleo.com/Files/NTFS_Pract_2017_E01.tar.gz


...
barry@forensicbox:~$ tar tzf NTFS_Pract_2017_E01.tar.gz
...
barry@forensicbox:~$ tar xzvf NTFS_Pract_2017_E01.tar.gz
NTFS_Pract_2017/
NTFS_Práctica_2017/NTFS_Práctica_2017.E04
NTFS_Práctica_2017/NTFS_Práctica_2017.E02
NTFS_Práctica_2017/NTFS_Práctica_2017.E01
NTFS_Práctica_2017/NTFS_Práctica_2017.E03

barry@forensicbox:~$ cd NTFS_Pract_2017

Comenzaremos ejecutando una serie de comandos básicos de Sleuth Kit como lo haríamos en cualquier análisis. La
estructura de la imagen forense se visualiza mediante mmls:

263
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:NTFS_Pract_2017$ mmls NTFS_Pract_2017.E01 Tabla de particiones de


DOS
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla primaria (#0)
001: ------- 0000000000 0000002047 0000002048 Sin asignar
002: 000:000 0000002048 0001023999 0001021952 NTFS / exFAT (0x07)

El resultado muestra que una partición NTFS (y muy probablemente el sistema de archivos) comienza en el sector
o set 2048. Este es el o set que usaremos en todos nuestros comandos de Sleuth Kit. Ahora usamos fsstat para
echar un vistazo a las estadísticas del sistema de archivos dentro de esa partición:

barry@forensicbox:NTFS_Pract_2017$ fsstat -o 2048 NTFS_Pract_2017.E01 | menos INFORMACIÓN DEL SISTEMA DE


ARCHIVOS
--------------------------------------------

Tipo de sistema de archivos: NTFS


Número de serie del volumen: CAE0DFD2E0DFC2BD
Nombre del OEM: NTFS
Nombre del volumen: NTFS_2017d
Versión: Windows XP

INFORMACIÓN DE METADATOS
--------------------------------------------

Primer Grupo de MFT: 42581


Primer grupo de espejo MFT: 2

Tamaño de las entradas de MFT: 1024 bytes


Tamaño de los registros de índice: 4096 bytes
Rango: 0 - 293
Directorio raíz: 5

INFORMACIÓN DE CONTENIDO
--------------------------------------------

Tamaño del sector: 512


Tamaño del grupo: 4096
...

Al observar la salida de fsstat en nuestro sistema de archivos NTFS, vemos que difiere mucho de la salida que
vimos ejecutándose en un sistema de archivos EXT de Linux. La herramienta está diseñada para proporcionar
información pertinente basada en el sistema de archivos al que se dirige. Tenga en cuenta que cuando se ejecuta
en un sistema de archivos NTFS, fsstat nos proporciona información especí ca de NTFS, incluidos datos sobre la
tabla maestra de archivos (MFT) y valores de atributos especí cos.

Ahora veremos cómo Sleuth Kit interactúa con los archivos activos y eliminados en un sistema de archivos NTFS.
Primero ejecutemos fls solo en el directorio de nivel raíz de nuestra imagen:

264
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:NTFS_Pract_2017$ fls -o 2048 NTFS_Pract_2017.E01


r/r 4-128-4: $AttrDef
r/r 8-128-2: $BadClus
r/r 8-128-1: $BadClus:$Bad
r/r 6-128-4: $mapa de bits

r/r 7-128-1: $arranque


d/d 11-144-4: $Extender
derecho 2-128-1: $Archivo de registro

derecho 0-128-6: $ MFT


derecho 1-128-1: $MFTMirr
r/r 9-128-8: $seguro:$SDS
r/r 9-144-11: $seguro:$SDH
r/r 9-144-14: $Seguro:$SII
r/r 10-128-1: $UpCase
r/r 10-128-4: $UpCase:$Info
r/r 3-128-3: $Volumen
r/r 38-128-1: ProxyLog1.log
d/d 35-144-1: Información de volumen del sistema
d/d 64-144-2: Usuarios
d/d 67-144-2: ventanas
V/V 293: $Archivos huérfanos

Tenga en cuenta que fls muestra mucha más información para nosotros que las listas de directorios normales para NTFS.
Incluidos con nuestros archivos y directorios regulares están los archivos del sistema NTFS (comenzando con el
$), incluidos $MFT y $MFTMIRROR (números de registro 0 y 1). Si miras el
Números MFT, verá que por alguna razón falta el registro número 5. registro MFT
5 es el directorio raíz, que es lo que estamos mostrando aquí. Al igual que la pantalla predeterminada para
Los sistemas de archivos EXT con fls son el inodo 2, el valor predeterminado para NTFS es el registro MFT 5.

Puede profundizar más y más en el sistema de archivos proporcionando fls con un directorio MFT
record y mostrará el contenido de ese directorio. Por ejemplo, vuelva a ejecutar el comando
(utilice la flecha hacia arriba y edite el comando anterior) con el registro MFT 64 (los Usuarios
directorio):

barry@forensicbox:NTFS_Pract_2017$ fls -o 2048 NTFS_Pract_2017.E01 64


d/d 65-144-2: AlbertE
d/d 66-144-2: ElsaE

Puede profundizar en cada directorio de esta manera. Esta es una forma de "explorar" el sistema de archivos
con fls.

También podemos especificar que fls solo nos muestre contenido "eliminado" en la línea de comando con
la opción -d . Usaremos -F (solo entradas de archivo) y -r (recursivo) también:

barry@forensicbox:NTFS_Pract_2017$ fls -o 2048 -Frd NTFS_Pract_2017.E01

265
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

-/r * 40-128-1: Usuarios/AlbertE/Documentos/Informe de Crédito.pdf


-/r * 40-128-3: Usuarios/AlbertE/Documentos/Informe de Crédito.pdf:Zona.Identificador
r/- * 0: Users/AlbertE/Documents/ManProj/La primera bomba atómica del mundo - Manhattan
,ÿ Proyecto Documental - Películas - YouTube.url

-/r * 236-128-2: -/r * Usuarios/AlbertE/Documentos/ManProj/MMManhattan Project.docx


237-128-2: ,ÿ .url Usuarios/AlbertE/Documentos/ManProj/El Proyecto Manhattan - YouTube

-/r * 238-128-2: Usuarios/AlbertE/Documentos/ManProj/La primera bomba atómica del mundo -


,ÿ Documental del Proyecto Manhattan - Películas - YouTube.url

-/r * 239-128-2: Usuarios/AlbertE/Documentos/ManProj/manhattan_project.zip


-/r * 248-128-2: Usuarios/AlbertE/Documentos/cyberbullying_by_proxy.doc
r/- * 0: r/r * Usuarios/AlbertE/Pictures/Tails/Thumbs.db
221-128-2: -/r * Usuarios/AlbertE/Pictures/Tails/Thumbs.db
216-128-2: -/r * Usuarios/AlbertE/Pictures/Tails/BigBikeBH1017.jpg
217-128-2: -/r * Usuarios/AlbertE/Pictures/Tails/BigBikeSoloCBR900SC33.jpg
218-128-2: -/r * Usuarios/AlbertE/Pictures/Tails/BigBikeTailBandit.jpg
219-128-2: Usuarios/AlbertE/Pictures/Tails/GemoTailG4.jpg
-/r * 220-128-2: Usuarios/AlbertE/Pictures/Tails/GemoTailUniversal.jpg
r/- * 0: Windows/Prefetch/EXPLORER.EXE-A80E4F97.pf
r/- * 0: Windows/Prefetch/MAINTENANCESERVICE.EXE-28D2775E.pf
r/- * 0: Windows/Prefetch/RUNDLL32.EXE-411A328D.pf
d/- * 0: Windows/Sistema32
-/r * 167-128-2: Windows/Ubicación de colocación 2.kml
-/r * 168-128-2: Windows/Ubicación de entrega 1.kml
-/r * 169-128-2: Ventanas/Lugar de encuentro.kml
-/r * 170-128-2: Windows/Nums_to_use.txt
-/r * 171-128-2: Windows/micaso.jpg
-/r* 172-128-2: Windows/mycase.jpg_original
-/r * 173-128-2: Windows/ubicación de recogida.kml

El resultado anterior muestra que nuestro sistema de archivos de ejemplo NTFS contiene una cantidad de archivos eliminados
en varios directorios. Echemos un vistazo más de cerca a la información especí ca de NTFS que puede
analizarse con las herramientas TSK.

Eche un vistazo al archivo eliminado en la entrada 216 de MFT . El archivo es Users/AlbertE/Pictures/Tails


,ÿ /BigBikeBH1017.jpg. Podemos echar un vistazo más de cerca a los atributos del archivo examinando su
Entrada de MFT directamente con istat. Recuerde que cuando trabajábamos en un sistema de archivos EXT
anteriormente, la salida de istat nos daba información directamente del inodo del especificado
le (consulte el ejercicio n.º 1 del equipo de detectives). Así que ejecutemos el comando en la entrada 216 de MFT en nuestro actual
ejercicio:

barry@forensicbox:NTFS_Pract_2017$ istat -o 2048 NTFS_Pract_2017.E01 216


Valores de encabezado de entrada de MFT:

266
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Entrada: 216 Secuencia: 2


$Número de secuencia del archivo de registro: 4199136
Archivo no asignado
Enlaces: 1

$STANDARD_INFORMATION Valores de atributos:


Banderas: Archivo
Identificación del propietario: 0

ID de seguridad: 0 ()
Creado: 2017-05-01 09:04:42.810747600 (EDT)
Archivo modificado: 2006-10-14 10:41:41.158486000 (EDT)
MFT Modificado: 2017-05-01 09:04:42.818945100 (EDT)
Consultado: 2017-05-01 09:04:42.818865600 (EDT)

$FILE_NAME Valores de atributo:


Indicadores: Nombre de archivo:
BigBikeBH1017.jpg Entrada principal de
MFT: 186 Secuencia: 1 Tamaño asignado: 61440
Tamaño real: 59861
Creado: 2017-05-01 09:04:42.810747600 (EDT)
Archivo modificado: 2006-10-14 10:41:41.158486000 (EDT)
MFT Modificado: 2017-05-01 09:04:42.818865600 (EDT)
Consultado: 2017-05-01 09:04:42.818865600 (EDT)

Atributos:
Tipo: $STANDARD_INFORMATION (16-0) Nombre: N/A Tamaño del residente: 48
Tipo: $FILE_NAME (48-4) Nombre: N/A Tamaño del residente: 100
Tipo: $SECURITY_DESCRIPTOR (80-1) Nombre: N/A Tamaño del residente: 80
Tipo: $DATA (128-2) Nombre: N/A No residente tamaño: 59861 init_size: 59861 91473 91474 91475 91476 91477 91478
91479 91480
91481 91482 91483 91484 91485 91486 91487

La información que nos proporciona istat de la MFT muestra valores directamente del
atributo $STANDARD_INFORMATION (que contiene los metadatos básicos para un archivo), así como
el atributo $FILE_NAME e información básica para otros atributos que forman parte de una entrada de
la MFT. Los bloques de datos que contienen el contenido real del archivo se enumeran en la parte
inferior de la salida (para datos de no residentes ).

Tome nota del hecho de que hay un identificador de atributo separado para el atributo $FILE_NAME ,
48-4. Es interesante notar que podemos acceder al contenido de cada atributo por separado usando el
comando icat (más sobre esto más adelante).

El atributo 48-4 almacena el nombre del archivo. Al canalizar la salida de icat a xxd , podemos ver el
contenido de este atributo, lo que nos permite ver atributos individuales para cada entrada de MFT.
Por sí mismo, esto puede no ser de mucho interés para la investigación en este caso en particular, pero
debe comprender que se puede acceder a los atributos por separado al proporcionar el atributo completo

267
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

identificador

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 216-48-4 |


xd
00000000: ba00 0000 0000 0100 d486 cd7f 7bc2 d201 ............{... 00000010: 5cef 99dc
9eef c601 f0c3 ce7f 7bc2 d201 \...........{. .. 00000020: f0c3 ce7f 7bc2 d201 00f0 0000
0000 0000 ....{........... 00000030: d5e9 0000 0000 0000 2000 0000 0000 0000 ........ .... ...

00000040: 1100 4200 6900 6700 4200 6900 6b00 6500 ..BigBike 00000050: 4200 4800
3100 3000 3100 3700 2e00 6a00 BH1.0.1.7...j. 00000060: 7000 6700
pág.

La misma idea se extiende a otros atributos de un archivo, más notablemente el "flujo de datos alternativo" o ADS. Al
mostrarnos la existencia de múltiples identificadores de atributos para un archivo dado, Sleuth Kit nos brinda una forma
de detectar datos potencialmente ocultos. Cubrimos esto en nuestro
próximo ejercicio.

10.3.7 Sleuth Kit Ejercicio 5: Examen NTFS de ADS

El sistema de archivos NTFS permite flujos de datos alternativos (ADS), lo que significa que un archivo en NTFS puede
tener contenido separado que normalmente no se puede ver con aplicaciones destinadas a mostrar un tipo de archivo
determinado.

Obviamente, al examinar un sistema, puede ser útil echar un vistazo a todos los archivos contenidos en una imagen.
Podemos hacer esto de dos maneras. Podríamos simplemente montar en bucle nuestra imagen y obtener una lista de
archivos. O bien, podríamos usar una utilidad forense como TSK. Compararemos la salida aquí para ilustrar una
diferencia importante, incluso con contenido en vivo (asignado).

Recuerde que el comando de montaje funciona en sistemas de archivos, no en discos. El sistema de archivos en esta
imagen inicia 2048 sectores en la imagen, por lo que montamos usando un desplazamiento. Dado que también
estamos examinando una imagen EWF, necesitaremos usar ewfmount para fusionar el montaje del archivo de imagen.
Haremos esto como root (y si aún no existe, asegúrese de crear /mnt/ewf):

barry@forensicbox:NTFS_Pract_2017$ su -
Clave:

root@forensicbox:~# cd barry/NTFS_Pract_2017

root@forensicbox:NTFS_Pract_2017# ewfmount NTFS_Pract_2017.E01 /mnt/ewf ewfmount


20140806

root@forensicbox:NTFS_Pract_2017# montaje -o ro,bucle,desplazamiento=$((2048*512))


/mnt/ewf/ewf1 /mnt/evid

root@forensicbox:NTFS_Pract_2017# ls /mnt/evid

268
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ProxyLog1.log* Sistema\ Volumen\ Información/ Usuarios/ Windows/

root@forensicbox:NTFS_Pract_2017# salir cerrar


sesión

barry@forensicbox:NTFS_Pract_2017$

En el conjunto de comandos anterior, hacemos su a root, usamos ewfmount para montar la imagen EWF en /
mnt/ewf como /mnt/ewf/ewf130. Luego montamos la partición de datos (que sabemos que está en el punto
2048 de nuestro ejercicio anterior) y luego salimos.

Luego podemos obtener una lista simple de archivos usando el comando find :

barry@forensicbox:NTFS_Pract_2017$ find /mnt/evid/ -type f /mnt/evid/


ProxyLog1.log /mnt/evid/System Volume Information/IndexerVolumeGuid /mnt/
evid/System Volume Information/WPSettings.dat /mnt/evid/ Users/AlbertE/
Documents/better_access_unix.txt /mnt/evid/Users/AlbertE/Documents/
books.txt /mnt/evid/Users/AlbertE/Documents/cable.txt /mnt/evid/Users/AlbertE/
Documents/cabletv. txt /mnt/evid/Users/AlbertE/Documentos/hackcabl.txt

El comando de búsqueda comienza en el punto de montaje (/mnt/evid), buscando todos los archivos
normales (escriba -f). El resultado nos da una lista muy larga de todos los archivos regulares asignados en el
punto de montaje. Son muchos archivos , así que por el bien de este ejercicio, veamos el contenido del directorio
de imágenes del usuario Albert (utilice el mismo comando, pero grep para AlbertE/Pictures):

barry@forensicbox:NTFS_Pract_2017$ buscar /mnt/evid/ -tipo f | grep


"AlbertE/Imágenes"
/mnt/evid/Users/AlbertE/Pictures/b45ac806a965017dd71e3382581c47f3_refined.jpg /mnt/evid/Users/
AlbertE/Pictures/bankor1.jpg /mnt/evid/Users/AlbertE/Pictures/desktop.ini /mnt/evid/Users/AlbertE /
Pictures/fighterama2005-ban3.jpg /mnt/evid/Users/AlbertE/Pictures/jet.mpg <Presta atención a este /
mnt/evid/Users/AlbertE/Pictures/pvannorden2.jpg

...

De particular interés en esta salida es jet.mpg. Tome nota de este archivo. Sin embargo, nuestro método actual
de listar archivos no nos da ninguna indicación de por qué este archivo es digno de mención.

La salida del comando de archivo nos muestra el tipo de archivo esperado. Es un vídeo MPEG.
Puede reproducir el video con el comando mplayer desde la línea de comando para verlo si
30Puede usar ewfmount como un usuario normal, pero en este caso necesitamos ser root para montar en bucle de todos modos.

269
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

me gusta.

barry@forensicbox:NTFS_Pract_2017$ archivo /mnt/evid/Users/AlbertE/Pictures/jet.mpg /mnt/evid/


Users/AlbertE/Pictures/jet.mpg: secuencia MPEG, v1, progresiva Y'CbCr
,ÿ Vídeo 4:2:0, CIF NTSC, NTSC 4:3, 29,97 fps, Restringido

barry@forensicbox:NTFS_Pract_2017$ mplayer /mnt/evid/Users/AlbertE/Pictures/jet.mpg


<reproducciones de video> Reproduciendo /mnt/evid/Users/AlbertE/Pictures/jet.mpg. libavformat
versión 56.40.101 (interno)

Formato de archivo MPEG-ES detectado.


...

En este punto hemos terminado con el punto de montaje y la imagen del fusible montado. Realizar un
seguimiento de los discos y particiones montados y desmontarlos correctamente antes de que se olvide
es una parte importante de este proceso:

barry@forensicbox:NTFS_Pract_2017$ su -
Clave:

root@forensicbox:~# umount /mnt/evid && fusermount -u /mnt/ewf

root@forensicbox:~# cerrar
sesión

Podemos desmontar tanto el sistema de archivos /mnt/evid como la imagen del disco fuse en /mnt/ewf
en la misma línea separándolos con &&. Esto significa que el segundo comando (fusermount) solo se
ejecutará si el primer desmontaje es exitoso.

Volviendo a nuestro problema... Para ver por qué le jet.mpg es interesante, probemos otro método para
obtener una lista de archivos, el comando fls . Podemos usar la opción -F para mirar solo archivos, y -r
para hacerlo recursivamente. También haremos grep para jet.mpg. Puede usar el directorio de números
de registro de MFT para navegar hasta el archivo, pero esto es más rápido y más eficiente:

barry@forensicbox:NTFS_Pract_2017$ fls -o 2048 -Fr NTFS_Pract_2017.E01 | grep


jet.mpg
r/r 39-128-1: Usuarios/AlbertE/Imágenes/jet.mpg r/r
39-128-3: Usuarios/AlbertE/Imágenes/jet.mpg:unixphreak.txt

En la salida de fls , jet.mpg tiene dos entradas:

39-128-1
39-128-3

270
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Ambas entradas tienen el mismo número de registro MFT (39) y se identifican como datos de archivo (39-128),
pero los incrementos del identificador de atributo son diferentes. Este es un ejemplo de un flujo de datos alternativo.
Acceder al contenido estándar (39-128-1) de jet.mpg es fácil, ya que es un archivo asignado. Sin embargo,
podemos acceder a cualquier flujo de datos, a los datos normales o al ADS, usando el comando icat de Sleuth
Kit, tal como lo hicimos con los archivos en nuestros ejercicios anteriores. Simplemente llamamos a icat con la
entrada de registro MFT completa, para incluir el identificador de atributo alternativo.
Aquí especificamos cada uno de los flujos de datos y los enviamos al comando de archivo usando icat:

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 39 | archivo - /dev/stdin: secuencia


MPEG, v1, video progresivo Y'CbCr 4:2:0, CIF NTSC, NTSC 4:3,
,ÿ 29.97 fps, Restringido

En este primer flujo (predeterminado), simplemente usamos el registro MFT 39 para pasar los datos predeterminados
al archivo. Para la segunda transmisión, pasamos el atributo completo (39-128-3):

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 39-128-3 |


expediente -
/dev/stdin: texto ASCII, con terminaciones de línea CRLF

Esta vez vemos que es texto ASCII. Así que ahora podemos canalizar el mismo comando a less (o directamente a
stdout) para ver:

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 39-128-3 | menos


+------------------------------------------------- --------------------------+

:PHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHA: :pha+----------------------------------
:PHA: Phreakers/Hackers/Anarquistas presentes: :PHA:
:fa: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= +=+=+=+=+=+=+=+= :pha:
:FA: +=+ Obtener un mejor acceso en cualquier sistema Unix +=+ :FA:
:fa: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= +=+=+=+=+=+=+=+= :pha: :PHA: Escrito por
Doctor Dissector (doctord@darkside.com) UPDT: 1/8/91 :PHA: :pha+----- --------------------------------------------------
------------+pha: :PHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHAphaPHA:

+------------------------------------------------- --------------------------+

+------------------------------------------------- ----------------------------+
:=[ Descargo de responsabilidad ]============================================ ==================:
+------------------------------------------------- ----------------------------+

El autor y el grupo patrocinador Phreakers/Hackers/Anarchists no serán responsables de las acciones


realizadas por cualquier persona que lea este material antes, durante y después de la exposición a este
documento. Este documento se ha publicado bajo la noción de que el material que se presenta en él es
solo para fines informativos y que ni el autor ni el grupo P/H/A fomentan el uso de esta información
para ningún tipo de propósito ilegal. Gracias.

271
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Y aquí hemos mostrado nuestro flujo de datos alternativo NTFS, un archivo de texto.

10.3.8 Sleuth Kit Ejercicio 6: Búsqueda de cadenas físicas y estado de asignación (NTFS)

Ya hemos realizado algunos ejercicios de búsqueda de cadenas, pero todos ellos se han realizado en sistemas de
archivos EXT. Hacemos muchas suposiciones cuando buscamos cadenas simples en una imagen. Asumimos que se
podrá acceder a las cadenas (no en un contenedor que requiera preprocesamiento), y asumimos que estarán en una
codificación de caracteres que encontrará nuestra utilidad de búsqueda. Este no es siempre el caso. La mayoría de las
búsquedas de cadenas que hemos hecho hasta ahora han dado como resultado coincidencias que se encuentran en
archivos de texto ASCII regulares. Cuando buscamos cadenas en documentos en sistemas Windows, por ejemplo, no
siempre será así. Tendremos que lidiar con más caracteres de control y sobrecarga y consideraciones adicionales de la
aplicación, como formatos comprimidos y codificados.

Este ejercicio todavía simplifica algo de eso, pero también sirve para que se dé cuenta de algunos de los problemas más
complejos que pueden surgir al buscar imágenes más grandes con contenido más complejo. También nos presentará
algunos visores de archivos de nivel de aplicación básicos más allá de los que ya hemos visto. El escenario aquí es el
mismo que en los ejercicios anteriores. Elegiremos una palabra clave, buscaremos en todo el disco y luego recuperaremos
y veremos el archivo asociado. Será muy similar a los ejercicios EXT que hicimos anteriormente (2A y 2B). Esta vez, sin
embargo, NTFS es nuestro sistema de archivos de destino.

Una vez más, estamos tratando con el conjunto de imágenes NTFS_Pract_2017.E01 . Y, nuevamente, dado que
estamos haciendo una búsqueda física utilizando herramientas que no son compatibles con EWF, montaremos las
imágenes y trabajaremos en la imagen de disco montada en el fusible sin formato. Esta vez creamos un punto de
montaje en nuestro directorio actual y usamos ewfmount con nuestra cuenta de usuario normal... sin necesidad de
dispositivos de bucle ni permisos de root:

barry@forensicbox:NTFS_Pract_2017$ mkdir ewfmnt

barry@forensicbox:NTFS_Pract_2017$ ewfmount NTFS_Pract_2017.E01 ewfmnt/


ewfmount 20140806

El comando grep apunta a la imagen montada en el fusible en ewfmnt/. Dado que ewfmnt está en nuestro directorio
actual (acabamos de crearlo aquí), no es necesario un /.

barry@forensicbox:NTFS_Pract_2017$ grep -abi cyberbullying ewfmnt/ewf1 <texto y


caracteres ilegibles>

Cuando ejecutamos nuestra búsqueda, somos recibidos con un número significativo de caracteres que no son ASCII
que impiden seriamente la legibilidad de la salida. Cuando se desplaza hacia abajo en la salida, puede ver la cadena
que estamos buscando, pero los conjuntos están ocultos.

272
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

De vuelta en nuestra sección de conceptos básicos forenses, al principio de este documento, discutimos el uso
del comando tr para traducir "caracteres de control" a líneas nuevas. Esto tiene el efecto de eliminar gran parte
del contenido ilegible de nuestra vista, así como de la búsqueda grep , mientras que el reemplazo de un carácter
por uno no causa ningún problema para los cálculos de compensación. Utilice tr aquí:

barry@forensicbox:NTFS_Pract_2017$ tr '[:cntrl:]' '\n' < ewfmnt/ewf1 | grep-abi


ciberacoso

426596865:www.stopcyberbullying.org
426596971:Cyberbullying by proxy
426596995: Cyberbullying by proxy es cuando un ciberacosador consigue que
otra persona haga el trabajo sucio. La mayoría de las veces son cómplices
involuntarios y no saben que están siendo utilizados por el ciberacosador. El
acoso cibernético por poder es el tipo de acoso cibernético más peligroso porque
a menudo involucra a adultos en el acoso y a personas que no saben que están
tratando con un niño o alguien que conocen.

...

El comando anterior usa tr para convertir el conjunto de caracteres de control ('[:cntrl:]') a nuevas líneas ('\n'). La
entrada se toma de ewfmnt/ewf1, y luego el flujo resultante se canaliza a través de grep a nuestra búsqueda con
las opciones habituales -abi para tratarlo como un archivo de texto (a), proporcionar el byte de compensación (b)
y realizar la búsqueda . mayúsculas y minúsculas (i). El resultado muestra que nuestros desplazamientos y
aciertos de cadenas ahora son mucho más legibles.

Ahora ejecutamos el mismo conjunto de comandos que hicimos anteriormente. Calcular en qué sector se
encuentra la palabra clave, el desplazamiento dentro del volumen y, finalmente, qué bloque de datos y entrada de
metadatos están asociados con la palabra clave acertada.

Trabajaremos con la primera palabra clave acertada (426596865:www.stopcyberbullying.org , resaltada arriba).


El sector compensado para nuestro hit se encuentra dividiendo el byte compensado por el tamaño del sector
(512). Ya sabemos que solo hay una partición en esta imagen, pero ejecutaremos mmls solo para estar seguros.
También ejecutamos fsstat nuevamente para con rmar el tamaño del bloque (que ya sabemos por ejercicios
anteriores es de 4096 bytes). Repetir estos pasos es solo una buena práctica:

barry@forensicbox:NTFS_Pract_2017$ echo "426596865/512" | ac 833197

barry@forensicbox:NTFS_Pract_2017$ mmls NTFS_Pract_2017.E01 Tabla


de particiones de DOS
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla primaria (#0)
001: ------- 0000000000 0000002047 0000002048 Sin asignar

273
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

002: 000:000 0000002048 0001023999 0001021952 NTFS / exFAT (0x07)

barry@forensicbox:NTFS_Pract_2017$ fsstat -o 2048 NTFS_Pract_2017.E01 INFORMACIÓN DEL


SISTEMA DE ARCHIVOS
--------------------------------------------

Tipo de sistema de archivos: NTFS


Número de serie del volumen: CAE0DFD2E0DFC2BD
...
INFORMACIÓN DE CONTENIDO
--------------------------------------------

Tamaño del sector: 512


Tamaño del grupo: 4096
...

Como era de esperar, la palabra clave está en la única partición NTFS que reside en el desplazamiento 2048 (sectores).
Podemos completar los cálculos y determinar el bloque en el que reside la palabra clave a la vez:

barry@forensicbox:NTFS_Pract_2017$ echo "(426596865-(2048*512))/4096" | antes de cristo 103893

Para repasar, esto dice: "Tome nuestro ajuste a la palabra clave en nuestro disco (426596865), reste el ajuste al inicio
de la partición (2048 * 512) y divida el valor resultante por el tamaño de bloque de nuestro sistema de archivos (4096 )
Nuestro bloque de sistema de archivos es 103893.

barry@forensicbox:NTFS_Pract_2017$ blkstat -o 2048 NTFS_Pract_2017.E01 103893 Clúster: 103893

No asignado

barry@forensicbox:NTFS_Pract_2017$ ifind -o 2048 -d 103893 NTFS_Pract_2017.E01 248-128-2

Podemos ver que blkstat nos dice que el clúster (bloque) no está asignado, y ifind nos muestra que la estructura de
metadatos (entrada MFT) asociada con ese bloque de datos (-d 103893) es
248-128-2.

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 248 | archivo - /dev/stdin: Documento compuesto


Archivo de documento V2, Little Endian, Sistema operativo: Windows, Versión 5.1, Página de códigos: 1252, Plantilla:
Normal, Último guardado por: buckyball, Número de revisión: 2, Nombre de la aplicación de creación: Microsoft Word 10.0,
última impresión: 02:05, hora/fecha de creación: martes 21 de noviembre 21:41:00 1995, última hora/fecha guardada:
miércoles 25 de octubre 23:14:00 2006, número de páginas: 2, número de palabras: 822, Número de Caracteres: 4087,
Seguridad: 0

274
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Canalizar nuestra salida icat a través del comando de archivo nos muestra que tenemos un documento de Microsoft Word.
Tenga en cuenta que cuando pasamos el registro MFT a icat, usamos solo el número de registro, 248 en lugar del atributo
completo, ya que estamos buscando el atributo predeterminado de todos modos, que es $DATA.

Si intentamos ver el documento con cat o menos, nuevamente obtenemos caracteres que no son ASCII, lo que dificulta la
lectura.

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 248 | less <texto y


caracteres ilegibles>

Podríamos usar icat para redirigir el contenido a un archivo:

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 248 > ntfs.248

Desde allí podríamos ver el archivo en una aplicación compatible con MS Word como LibreO ce para
Linux (que no está instalado en este momento, pero se vería así): Esto está bien, pero abriendo

Figura 18: Captura de pantalla de LibreO ce viendo un documento de MS O ce recuperado

y cerrar programas GUI para ver el contenido de los archivos no es ideal para nuestro enfoque de línea de comandos.
En su lugar, podemos usar una herramienta simple como catdoc para leer los archivos de MS Office ( formato .doc ) desde
la línea de comandos.

catdoc se puede instalar a través de sboinstall en Slackware:

barry@forensicbox:NTFS_Pract_2017$ su -
Clave:

root@forensicbox:~# sboinstall catdoc catdoc


lee el archivo de MS Word e imprime texto ASCII legible en la salida estándar, solo

275
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

como el comando cat de Unix. También puede producir secuencias de escape correctas
si algunos caracteres UNICODE deben representarse especialmente en su sistema de
composición tipográfica, como (La) TeX.

¿Continuar con catdoc? [y]


...
Limpieza para catdoc-0.94.2...

root@forensicbox:~# cerrar
sesión

Una vez instalado, puede abrir el archivo que exportó (ntfs.248) con catdoc, o simplemente puede transmitir
la salida de icat directamente a catdoc, y nuevamente a través de menos (múltiples tuberías son simplemente
increíbles).

barry@forensicbox:NTFS_Pract_2017$ icat -o 2048 NTFS_Pract_2017.E01 248-128-2 |


catdoc | menos

www.stopcyberbullying.org

________________________________________________________________________
______

Ciberacoso por poder

El ciberacoso por poder es cuando un ciberacosador consigue que otra persona


haga el trabajo sucio. La mayoría de las veces son cómplices involuntarios y
...

Este ejercicio esencialmente cierra el ciclo de nuestra búsqueda física de sistemas de archivos. Como
podemos ver, puede haber mucho más en la búsqueda de una imagen que simples cadenas grep .

Vamos con un comando más y una pregunta. La imagen montada en el fusible aún debería estar disponible
en ewfmnt/ewf1. Haga una búsqueda rápida de palabras clave para "Uranio-235" (suena siniestro, ¿no?):

barry@forensicbox:NTFS_Pract_2017$ grep -abi "Uranio-235" ewfmnt/ewf1 <no devuelve


nada>

El patrón "Uranio-235" no parece encontrarse. ¿Significa esto que soy libre de sacar la conclusión de que no
hay instancias de la cadena "Uranium-235" en el disco? Por supuesto que no. Abordaremos esto en nuestro
próximo ejercicio.

Asegúrese de desmontar la imagen montada en el fusible antes de continuar.

276
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:NTFS_Pract_2017$ fusermount -u ewfmnt/

10.4 bulk_extractor - búsqueda exhaustiva

En ejercicios anteriores, discutimos problemas en los que las búsquedas de cadenas basadas en texto simple
podrían no ser efectivas según la codificación de caracteres y los formatos de archivo (compresión, etc.). Hay
una serie de herramientas conscientes del conjunto de caracteres que podemos usar para superar muchos de
estos problemas, pero las descripciones detalladas de la codificación de caracteres y las búsquedas no son lo
que buscamos aquí. En su lugar, vamos a presentar una herramienta, bulk_extractor, que incorpora
excelentes funciones de búsqueda multiformato con otras funciones muy útiles. bulk_extractor fue creado por
Simson Gar nkel en la Escuela Naval de Postgrado.

Para aquellos de ustedes que aún no han oído hablar o no han usado bulk_extractor, es una de esas
herramientas que muy rara vez no uso en todos los casos. Incluso cuando tengo que realizar una extracción o
un análisis específicos, bulk_extractor siempre puede encontrar información adicional o, al menos,
proporcionar una excelente visión general de la actividad del usuario o el contexto de los medios. Es
especialmente útil en situaciones en las que se le ha proporcionado (o ha adquirido) un gran volumen de
medios y desea clasificar rápidamente los datos interesantes. Esta capacidad de clasificación es uno de los
aspectos más destacados de bulk_extractor.

bulk_extractor se diferencia de otras herramientas más comunes en que se ejecuta y busca de forma
completamente independiente del sistema de archivos. En este caso, no son los archivos en sí los que son
interesantes, sino el contenido, ya sea asignado o no asignado, completo o fragmentado, o incluso en
contenedores comprimidos. bulk_extractor lee los datos por bloques, sin tener en cuenta la estructura del
sistema de archivos, y busca recursivamente esos bloques en busca de características interesantes. Recursivo
en este caso significa que la herramienta, por ejemplo, descomprimirá un archivo para buscar el contenido y
extraer el texto de los archivos PDF para su posterior procesamiento.

Un manual de usuario completo para bulk_extractor está disponible en:

http://downloads.digitalcorpora.org/downloads/bulk_extractor/BEUsersManual.pdf

bulk_extractor también tiene una herramienta GUI, BEviewer, comúnmente utilizada para leer los archivos
de funciones y ejecutar el programa. Si desea ver esto en acción, necesitará tener Java instalado. OpenJDK
es el más fácil de instalar desde sbotools, pero asegúrese de leer el LÉAME. OpenJDK deberá instalarse
antes de bulk_extractor para que BEviewer se incluya en el paquete final. BEviewer fue escrito por Bruce
Allen.

Instalemos bulk_extractor ahora y echemos un vistazo más de cerca a las opciones.

root@forensicbox:~# sboinstall bulk_extractor


bulk_extractor es un programa C++ que escanea una imagen de disco, un archivo o un directorio
de archivos y extrae información útil sin analizar el sistema de archivos o

277
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

estructuras del sistema de archivos...


...

Las búsquedas realizadas por bulk_extractor se realizan mediante escáneres especí cos que se
pueden habilitar y deshabilitar según lo que desee buscar y cómo. Son estos escáneres los que
administran el análisis de archivos PDF o archivos comprimidos y otros formatos. Podemos echar un
vistazo a los escáneres disponibles al ver la salida de bulk_extractor con -h. Es una larga lista de
opciones de comando, por lo que es posible que desee canalizar la salida a través de menos:

barry@forensicbox:~$ bulk_extractor -h | menos bulk_extractor


versión 1.5.5
Uso: el archivo de imagen bulk_extractor [opciones] ejecuta
el extractor masivo y genera un resumen estándar de lo que se encontró y dónde

Parámetros requeridos:
archivo de imagen - el archivo a extraer
o -R filedir - recurse a través de un directorio de archivos
TIENE SOPORTE PARA ARCHIVOS E01
TIENE SOPORTE PARA ARCHIVOS AFF
-o outdir - especifica el directorio de salida. No debe existir. bulk_extractor
crea este directorio.
Opciones:
-i - Modo INFORMACIÓN. Haga una muestra aleatoria rápida e imprima un informe. -b
banner.txt- Agrega contenido de banner.txt en la parte superior de cada archivo de salida. -r alert_list.txt:
un archivo que contiene la lista de alertas de funciones para alertar
(puede ser un archivo de características o una lista de globs)
(se puede repetir). -w stop_list.txt: un archivo que contiene
la lista de detención de características (lista blanca
(puede ser un archivo de características o una lista de globos)
(se puede repetir).
-F <rfile>: lee una lista de expresiones regulares de <rfile> para encontrar -f <regex>: busca apariciones
de <regex>; se puede repetir.
...
Estos escáneres están deshabilitados por defecto; habilitar con -e:
-e base16 - habilitar escáner base16
-e facebook - habilitar el escáner de facebook
-e Outlook - habilitar la perspectiva del escáner
-e sceadan - habilitar escáner sceadan
-e lista de palabras: habilita la lista de palabras del escáner
-e xor - habilitar escáner xor

Estos escáneres están habilitados de forma predeterminada; deshabilitar con -x:


-x accts - deshabilitar las cuentas del escáner
-x aes - deshabilita el escáner aes
-x base64 - deshabilita el escáner base64
-x elf - deshabilitar escáner elf
-x email - deshabilita el escáner de correo electrónico

278
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

-x exif - deshabilita el escáner exif


...

También puede obtener una salida un poco más descriptiva en los escáneres haciendo lo mismo que arriba pero con -H en
lugar de -h.

Hay muchas opciones para pasar. Algunos los cubriremos a medida que avanzamos en un ejercicio de muestra, y otros los
omitiremos y le permitiremos explorar por su cuenta. La forma más sencilla de ejecutar bulk_extractor es dejar todo
predeterminado y simplemente proporcionar un directorio de salida para los resultados. Esto puede llevar un tiempo, pero
proporciona la mejor inteligencia general sobre el contenido del disco. Por ahora, vamos a reducir la salida limitando los
escáneres y proporcionando un solo término de búsqueda. Esto nos permitirá aislar los resultados y pasar algún tiempo
hablando de los archivos de salida.

Algunas de las opciones más importantes para recordar al ejecutar bulk_extractor son:

-o <output_dir> Directorio para escribir los resultados (bulk_extractor creará esto)

-e <escáner> Activar <escáner>

-E <escáner> Deshabilitar TODOS los escáneres excepto <escáner>


-x <escáner> Deshabilitar <escáner>

La forma más sencilla de explicar las opciones es ejecutar el comando y comprobar el resultado. Terminamos la última sección
sobre la búsqueda de cadenas físicas de NTFS haciendo un grep simple para el término Uranium-235 en nuestro conjunto
de imágenes NTFS E01 . Los resultados no arrojaron nada. Ahora ejecutaremos la misma búsqueda nuevamente usando
bulk_extractor. Ejecute el comando con las siguientes opciones.
Tenga en cuenta que bulk_extractor puede ejecutarse directamente en los archivos EWF si libewf está instalado:

barry@forensicbox:~$ bulk_extractor -E zip -e find -f "Uranium-235" -o blk_out NTFS_Pract_2017/


NTFS_Pract_2017.E01 versión de bulk_extractor: 1.5.5

Nombre de host: caja forense

Archivo de entrada: NTFS_Pract_2017/NTFS_Pract_2017.E01


Directorio de salida: blk_out Tamaño del disco: 524288000

Temas: 2
11:28:34 Compensación 67 MB (12,80 %) Hecho en 0:00:05 a las 11:28:39
11:28:36 Compensación 150 MB (28,80 %) Hecho en 0:00:05 a las 11:28:41 /
colorblue ...
1:29:58 Compensación 486 MB (92,80 %) Hecho a las 0:00:06 a las 11:30:04
Se leen todos los datos; esperando a que terminen los hilos...
Tiempo transcurrido esperando que terminen 2 hilos:
(tiempo de espera en 60 min.)
¡Todos los hilos terminados!
Tiempo de espera del productor: 86.5672 seg.
Tiempo medio de espera del consumidor: 0,064092 seg.

279
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

MD5 de la imagen de disco: eb4393cfcc4fca856e0edbf772b2aa7d


Fase 2. Apagar los escáneres Fase 3. Crear histogramas
Tiempo transcurrido: 90,6774 seg.

MB totales procesados: 524


Rendimiento general: 5,78191 MBytes/seg (2,89095 MBytes/seg/hilo)

En el comando anterior, usamos -E zip para deshabilitar todos los escáneres predeterminados excepto el escáner zip .
Luego, volvemos a habilitar el escáner de búsqueda con -e find (para que podamos ejecutar nuestra búsqueda de
cadenas). Esto es seguido por el término de búsqueda -f "Uranium-235" . Este término puede ser una cadena o una
expresión regular. También podemos agregar términos adicionales o crear un archivo de términos de búsqueda (con
una lista de palabras clave o expresiones) y ejecutarlo con la opción -F . Nuestro directorio de salida se establece con
-o blk_out (que bulk_extractor creará para nosotros).

El comando proporciona información que se explica por sí misma, incluidos los datos procesados y el hash de la
imagen del disco. Cambie al directorio de salida y echemos un vistazo a los archivos que se produjeron.

barry@forensicbox:~$ cd blk_fuera

barry@forensicbox:bulk_out$ ls -l total
336
-rw-r--r-- 1 usuarios de barry 0 1 de agosto 11:28 alertas.txt
-rw-r--r-- 1 usuarios de barry 263 1 de agosto 11:29 find.txt -rw-r--
r-- 1 usuarios de barry 206 1 de agosto 11: 30
-rw-r--r-- find_histogram.txt
1 usuarios de barry 9803 1 de
agosto 11:30 report.xml -rw-r--r-- 1 usuarios de barry -rw-r--r-- 1 usuarios de
barry 319995 1 de agosto 11:30 zip.txt0 1 de agosto 11:28 unzip_carved.txt

Básicamente, hay tres archivos diferentes que se muestran en el resultado anterior. Estos son:

Archivos de características: archivos que contienen la salida de cada escáner.

Archivos de histograma: archivos que muestran la frecuencia con la que se encuentra cada elemento en un
archivo de características. Discutiremos la utilidad de estos con más detalle más adelante.

El archivo de informe: un informe con formato DFXML de la salida y el entorno.

Todos los archivos que tienen un tamaño 0 están vacíos y no se observaron características. En este caso, el archivo
alerts.txt está vacío porque no especificamos un archivo de alerta con la opción -r . El archivo de características que
nos interesa aquí es find.txt, producido por el escáner de búsqueda . Abra y eche un vistazo a este archivo:

barry@forensicbox:bulk_out$ cat find.txt #


ARCHIVO DE BANNER NO PROPORCIONADO (opción -b)

280
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

# BULK_EXTRACTOR-Versión: 1.5.5 ($Rev: 10844 $)


# Feature-Recorder: encontrar
# Nombre de archivo: NTFS_Pract_2017/NTFS_Pract_2017.E01
# Característica-Archivo-Versión: 1.1
445901295-ZIP-9745 Uranio-235 ferencia entre Uranio-235 y Uranio-238

El archivo find.txt tiene un área comentada (líneas que comienzan con #) y la salida real del escáner mismo, con
cada "característica" encontrada en una línea. Hay tres partes en la salida del escáner para cada función. El primero
es una compensación. Este desplazamiento puede tener múltiples partes. En bulk_extractor esto se denomina ruta
forense. Esto incluye una compensación de disco a los datos que contienen la característica, los escáneres que
encontraron el objeto y luego la compensación dentro de esos datos. El camino forense es seguido por la función en
sí, en este caso nuestro término de búsqueda "uranio-235". Finalmente se nos da un poco de contexto. En otras
palabras, para nuestro ejemplo anterior:

445901295-ZIP-9745 Los datos comprimidos (ZIP) se encontraron en el disco o set


445901295. La característica (uranio-235) se encontró en el o - set
9745 en esos datos comprimidos.

Uranio-235 La función que se encontró (nuestro término de búsqueda)

ferencia entre uranio El contexto en el que se encontró la función.


,ÿ -235 y Uranio-238

Usando lo que hemos aprendido previamente sobre la búsqueda física, echemos un vistazo rápido a los datos
encontrados en ese desplazamiento. ¿Recuerda nuestra fórmula para encontrar el desplazamiento en un sistema de
archivos cuando se le da un desplazamiento de disco? Hemos visto este conjunto de imágenes NTFS antes, por lo
que ya sabemos que el sistema de archivos comienza en el sector o set 2048, por lo que calcularemos el conjunto
de sistema de archivos y luego ejecutaremos el comando ifind que ya hemos usado varias veces para averiguarlo.
qué entrada MFT apunta al bloque de datos. Finalmente, usaremos el comando icat y canalizaremos la salida al
archivo para que podamos identificar el tipo:

barry@forensicbox:bulk_out$ echo "((445901295-(2048*512))/4096)" | ac 108606

barry@forensicbox:bulk_out$ ifind -d 108606 -o 2048 ../NTFS_Pract_2017/


NTFS_Pract_2017.E01 236-128-2

barry@forensicbox:bulk_out$ icat -o 2048 ../NTFS_Pract_2017/NTFS_Pract_2017.E01


236 | archivo - /
dev/stdin: Microsoft Word 2007+

Entonces vemos que la función se encontró en un documento de Microsoft Word en formato .docx , que es XML
comprimido. Este archivo se puede ver con el script catdocx (¿recuerda catdoc? catdocx es similar, pero para el
formato XML comprimido .docx ). Lo haremos al final del ejercicio.

281
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Después de los archivos de características, pasamos al archivo de histograma. Un histograma es simplemente un


archivo que enumerará las características junto con la cantidad de veces que se encontró esa característica. Este
informe de frecuencia es uno de los aspectos más útiles de bulk_extractor. Son los histogramas los que proporcionan
una gran cantidad de contexto al contenido de una imagen de disco. En particular, cuando se trata de investigaciones
que involucran fraude o PII, la frecuencia de un número de tarjeta de crédito o dirección de correo electrónico puede
decirle a un investigador, de un vistazo, qué cuentas se usaron y las cuentas más utilizadas, o quiénes podrían ser los
socios más cercanos, etc. En nuestro caso, el histograma muestra solo una instancia (n=1) de nuestro término de
búsqueda.

barry@forensicbox:bulk_out$ cat find_histogram.txt # ARCHIVO DE


BANNER NO PROPORCIONADO (opción -b)
# BULK_EXTRACTOR-Versión: 1.5.5 ($Rev: 10844 $)
# Feature-Recorder: encontrar
# Nombre de archivo: NTFS_Pract_2017/NTFS_Pract_2017.E01
# Histograma-Archivo-Versión: 1.1 n=1 uranio-235

Ejecutemos bulk_extractor nuevamente, pero esta vez dejaremos todos los escáneres predeterminados ejecutándose
y usaremos una lista de términos de búsqueda en su lugar (solo dos). Vuelva a su directorio de inicio y, utilizando un
editor de texto (¡vi!), cree un archivo con solo estos dos términos:

[Uu]ranio-235
262698143

...hemos convertido nuestro primer término en una expresión regular que busca una letra mayúscula o minúscula para
comenzar la palabra. El segundo es un número de seguro social de "víctima conocida"31 .
Guarde el archivo como myterms.txt.

También crearemos un archivo de banner para que todos nuestros archivos de salida tengan un encabezado que
identifique el caso y el examinador/analista. Nuevamente, usando un editor de texto, ingrese la información que desee
en la parte superior de cada archivo:

Oficina de Investigaciones
caso del siglo
Caso#: 2017-01-0001
Investigador: Barry Grundy

... guarde el archivo como mybanner.txt.

Ahora volveremos a ejecutar bulk_extractor, sin deshabilitar ni habilitar los escáneres, usando un archivo de banner (-
b mybanner.txt) y un archivo de términos para buscar (-F myterms.txt). El directorio de salida será blk_out_full (-o
blk_out_full). Con todos los escáneres en ejecución, verá bastantes archivos más en el directorio de salida.

31El segundo término es un número de seguro social. Los números para este ejercicio se generaron con http:
//www.theonegenerator.com/ssngenerator

282
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox~$ bulk_extractor -b mybanner.txt -F myterms.txt -o blk_out_full


NTFS_Práctica_2017/NTFS_Práctica_2017.E01
versión de extractor a granel: 1.5.5
Nombre de host: caja forense

Archivo de entrada: NTFS_Pract_2017/NTFS_Pract_2017.E01


Directorio de salida: blk_out_full
Tamaño del disco: 524288000
...

Rendimiento general: 5,3725 MBytes/seg (2,68625 MBytes/seg/hilo)


Funciones de correo electrónico totales encontradas: 570

Este comando da como resultado una gran cantidad de resultados (pero tenga en cuenta que los archivos de longitud cero
están vacíos nada encontrado). Mire el contenido del archivo find.txt ahora:

barry@forensicbox:~$ ls - blk_out_full
aes_keys.txt find_histogram.txt teléfono_histograma.txt
alertas.txt unrar_tallado.txt gps.txt
ccn.txt httplogs.txt ip.txt descomprimir_tallado.txt
ccn_histograma.txt ip_histogram.txt url.txt
ccn_track2.txt jpeg_carved.txt json.txt url_facebook-dirección.txt

ccn_track2_histograma.txt dominio.txt kml/ kml.txt url_facebook-id.txt

url_histograma.txt
histograma_dominio.txt elf.txt url_microsoft-live.txt
url_búsquedas.txt
correo electrónico.txt pii.txt url_servicios.txt

email_domain_histogram.txt pii_teamviewer.txt vcard.txt


email_histogram.txt rar.txt ether.txt ether_histogram.txt vientos.txt
exif.txt informe.xml winlnk.txt
rfc822.txt winpe.txt
sqlite_tallado.txt winprefetch.txt
encontrar.txt telefono.txt zip.txt

barry@forensicbox:~$ cat blk_out_full/find.txt


# Oficina de Investigaciones
# Caso del Siglo
# Caso #: 2017-01-0001

# Investigador: Barry Grundy


# BULK_EXTRACTOR-Versión: 1.5.5 ($Rev: 10844 $)
# Feature-Recorder: encontrar
# Nombre de archivo: NTFS_Pract_2017/NTFS_Pract_2017.E01
# Característica-Archivo-Versión: 1.1
1193351-PDF-92 262698143 629369510 SSN: 262698143
445901295-ZIP-9745 Uranio-235 ferencia entre Uranio-235 y Uranio-238
445901295-ZIP-0-MSXML-857 Uranio-235 ferencia entre Uranio-235 y Uranio-238

Todos los archivos de salida también tienen nuestro texto mybanner.txt en la parte superior. Y esta vez vemos que

283
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

nuestro find.txt contiene tanto el golpe de Uranio-235 que vimos anteriormente como el número de seguro social de la
"víctima" que agregamos a nuestra lista de términos. Ahora tenemos características que se encontraron en un archivo
zip (archivo .docx que identificamos anteriormente) y un archivo PDF (usando el escáner de pdf ). El archivo de
Microsoft Word que identificamos anteriormente ahora muestra dos funciones en lugar de una. Esto se debe a que fue
encontrado por dos escáneres, el escáner zip y el escáner msxml .

Puede navegar por el resto de los archivos de funciones e histogramas para ver qué más hemos descubierto. Hay
bastante información allí y puede obtener una idea general de cosas como la actividad de navegación del usuario
mirando url_histogram.txt. Ciertamente no puede sacar conclusiones, pero los dominios de mayor frecuencia pueden
proporcionar algo de contexto para su investigación.

Una cosa que puede notar es que una gran cantidad de las funciones encontradas por los escáneres de correo
electrónico y URL (y otros) provienen de fuentes conocidas. Todos los sistemas operativos y el software externo que
usamos tienen archivos de ayuda, manuales y otra documentación que contiene direcciones de correo electrónico,
números de teléfono y direcciones web que no son interesantes, pero que aún así terminarán en sus archivos de
funciones e histogramas de bulk_extractor . Estos falsos positivos se pueden limitar mediante el uso de listas de
detención. Al igual que nuestro archivo myterms.txt , una lista de bloqueo puede ser una lista simple de términos (o
términos con contexto) que están bloqueados de los archivos de características del escáner normal (pero que aún se
informan en archivos detenidos.txt especiales para cada escáner).

Una capacidad final de extractor masivo que mencionaremos brevemente aquí es el escáner de lista de palabras .
Deshabilitado de forma predeterminada, el escáner de listas de palabras crea listas de palabras que se pueden usar
para intentar descifrar contraseñas. En una ejecución normal de bulk_extractor , solo use -e lista de palabras para
habilitar el escáner, o use -E lista de palabras para ejecutarlo por sí solo.

Muy rápidamente, regresemos y usemos nuestra palabra clave hit en Uranium-235 para obtener información sobre un
visor de archivos de formato .docx de línea de comando rápido, catdocx. Este es en realidad un script muy corto en
lugar de un programa, y simplemente descomprime el archivo y hace que el contenido XML sea legible.

barry@forensicbox:bulk_out$ su -
Clave:

raíz@cajaforense:~# wget
https://raw.githubusercontent.com/jncraton/catdocx/master/catdocx.sh -O /usr/bin/catdocx &&
chmod 755 /usr/bin/catdocx
...
2019-08-01 13:54:31 (81,6 MB/s) - '/usr/bin/catdocx' guardado [434/434]

root@forensicbox:~# salir

Este comando usa wget para descargar el script catdocx de GitHub directamente a /usr/bin/ ,ÿ catdocx (con la opción
-O ). El && nos permite ejecutar chmod inmediatamente después de que wget se complete para cambiar los permisos
y hacer que el archivo sea ejecutable.

Ahora podemos volver a ejecutar el comando icat que usamos anteriormente en la entrada MFT que apunta a la

284
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Palabra clave de uranio-235. Esta vez redirigiremos la salida de icat a un archivo llamado NTFS.236.
Luego usamos catdocx canalizado a través de less para mostrar el archivo:

barry@forensicbox:~$ icat -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 236 >


NTFS.236

barry@forensicbox:~$ catdocx NTFS.236 | menos Mira


las maravillas modernas del proyecto Manhattan. Puedes encontrarlo en 5 partes en youtube
https://www.youtube.com/watch?v=SwHds1any9Y https://www.youtube.com/watch?v=VGGAIuc5dWI
https://www.youtube.com/watch ?v=eHvUgtVOP64 https://www.youtube.com/watch?v=aAXy5V-
zRyc https://www.youtube.com/watch?v=aJuBHzgLUAw Nombre________________________________

Maravillas modernas: Proyecto Manhattan


...
¿Cuál es la diferencia entre el uranio-235 y el uranio-238?
...

...Y vemos la palabra clave acertada en nuestra salida junto con el contexto esperado de la característica
le.

10.5 Talla Física


Hemos visto varios casos en ejercicios anteriores en los que necesitábamos ubicar encabezados de archivos para
recuperar datos. Vimos una necesidad especí ca de esto con nuestro ejercicio ext4 donde descubrimos que los
punteros de bloque directos ya no estaban disponibles para los archivos eliminados, lo que dificultaba mucho la recuperación.
También hicimos una recuperación manual en nuestro ejercicio "Grabado de datos con dd" , ubicando el encabezado
de un archivo JPEG en hexadecimal y usando dd para "tallar" físicamente el archivo. Una habilidad útil, pero un poco
tediosa en una imagen de disco grande con potencialmente docenas, cientos o incluso miles de archivos que podrían
requerir recuperación. Si no está familiarizado con el tallado de archivos o necesita un repaso, puede comenzar a
leer aquí: http://forensicswiki.org/wiki/File_Carving

Dado que obtuvimos una comprensión superficial de la mecánica de tallado a través de nuestro problema dd ,
podemos pasar a herramientas más automatizadas que hacen el trabajo por nosotros. Hay una serie de herramientas
disponibles para lograr esto. Nos vamos a concentrar en sólo dos. bisturí y fotograbado. Este último es del paquete
testdisk .

10.5.1 bisturí

Comenzaremos instalando bisturí. Use sboinstall para instalarlo, asegurándose de leer el archivo README . Si no
está usando Slackware, continúe y use la administración de paquetes de su distribución

285
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

herramienta. Verá que para Slackware, el bisturí tiene una sola dependencia que debe instalarse
primero TRE, que sboinstall maneja automáticamente :

root@forensicbox:~# sboinstall bisturí TRE es


una biblioteca de comparación de expresiones regulares compatible con POSIX,
liviana, robusta y eficiente, con algunas características interesantes, como la
coincidencia aproximada (difusa).

Continuar con tre? [y] tre


agregado a la cola de instalación.

Scalpel es un cortador de archivos rápido que lee una base de datos de definiciones de
encabezado y pie de página y extrae archivos coincidentes o fragmentos de datos de un
conjunto de archivos de imagen o archivos de dispositivo sin formato. Scalpel es
independiente del sistema de archivos y tallará archivos de particiones FATx, NTFS, ext2/3,
HFS+ o raw. Es útil tanto para la investigación forense digital como para la recuperación de archivos.

Para usarlo, DEBE tener un archivo conf que defina los tipos de archivos que desea
recuperar. Use el archivo bisturí.conf de ejemplo de /usr/doc/scalpel

Vea la página man para más detalles.

¿Proceder con bisturí? [y]


...

Limpieza para bisturí-2.0...

Si lee el archivo LÉAME (lo cual hizo, ¿CIERTO?), verá que necesitamos copiar y editar el archivo
bisturí.conf antes de que podamos ejecutar el programa. Podemos editarlo y usarlo en su lugar, o
copiarlo a nuestro directorio de trabajo que bisturí usa por defecto.

Por ahora, copiaremos el archivo scalpel.conf que se instaló con nuestro paquete en un nuevo
subdirectorio tallado en nuestro directorio / home , que crearemos ahora, y editaremos el archivo con g allí.

barry@forensicbox:~$ mkdir ~/tallar

barry@forensicbox:~$ cd ~/tallar

barry@forensicbox:~$ cp /usr/share/doc/scalpel-2.0/scalpel.conf .

El final '.' en el comando anterior significa el destino, nuestro directorio actual. bisturí.conf
comienza completamente comentado. Tendremos que descomentar algunas de niciones de archivos
para poder trabajar con bisturí . Abra bisturí.conf con vi (o el editor de su elección). Debe tomarse
un tiempo para leer el archivo, ya que explica la estructura de las definiciones de archivo con detalles
útiles.

286
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ vi bisturí.conf
# Archivo de configuración de bisturí

# Este archivo de configuración controla los tipos y tamaños de archivos que


# están tallados con bisturí. TENGA EN CUENTA QUE EL FORMATO DE ESTE ARCHIVO FUE
# EXTENDIDO en Bisturí 1.90-->!

# Para cada tipo de archivo, el archivo de configuración describe el archivo


# extensión, si el encabezado y el pie de página distinguen entre mayúsculas y minúsculas, la
# tamaño de archivo mínimo/máximo, y el encabezado y pie de página del archivo. los
# El campo de pie de página es opcional, pero la extensión, la distinción entre mayúsculas y minúsculas, el tamaño y
# pie de página son obligatorios. Cualquier línea que comience con un '#' se considera
# un comentario e ignorado. Por lo tanto, para omitir un tipo de archivo, simplemente coloque un '#' en
# el comienzo de la línea que contiene la regla para el tipo de archivo.
...

Desplácese hacia abajo hasta donde comienza la sección # ARCHIVOS GRÁFICOS (para el propósito de nuestro ejercicio) y
simplemente elimine el comentario de cada línea que describa un archivo en esa sección. Tenga cuidado de no descomentar
Líneas que deberían quedar como comentarios. Para descomentar una línea, simplemente elimine el hash (#)
símbolo al principio de la línea. La sección # ARCHIVOS GRÁFICOS debería verse así cuando
están hechos (los símbolos hash adicionales no importan, siempre que las líneas correctas no estén comentadas,
y las líneas de sección todavía están comentadas):

#------------------------------------------------- --------------------
# ARCHIVOS GRÁFICOS
#------------------------------------------------- --------------------
#
#
# archivos AOL ART
arte y 150000 \x4a\x47\x04\x0e arte y \xcf\xc7\xcb
150000 \x4a\x47\x03\x0e \xd0\xcb\x00\x00
#
# Archivos GIF y JPG (muy común)
gif y 5000000 \x47\x49\x46\x38\x37\x61 gif y 5000000 jpg y \x00\x3b
\x47\x49\x46\x38\x39\x61
200000000 \xff\xd8\xff\xe0\x00\x10 jpg y 200000000 \x00\x00\x3b
\xff\xd8\xff\xe1 \xff\xd9
\xff\xd9

# PNG
png y 20000000 \x50\x4e\x47? \xff\xfc\xfd\xfe

# BMP (usado por MSWindows, úselo solo si tiene motivos para pensar que hay
# Archivos BMP que vale la pena buscar. Esto a menudo genera una gran cantidad de falsos
# positivos

bmp y 100000 BM??\x00\x00\x00

287
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

#
# TIFF

tif y 200000000 \x49\x49\x2a\x00


# TIFF

tif y 200000000 \x4D\x4D\x00\x2A


#

Si observa las líneas de las imágenes jpg , verá el patrón familiar que buscamos
para durante nuestro ejercicio de tallado de dd . \xff\xd8 para el encabezado y \xff\xd9 para el pie de página.
Cuando ejecutamos el bisturí , estas líneas sin comentar se utilizarán para buscar patrones. Cuando
ha terminado de editar el archivo (¡doble verificación!), guárdelo y salga con :wq

Para este ejercicio, utilizaremos la imagen dividida de able_3 como nuestro objetivo de ejercicio. En nuestro kit de detective
ejercicio n.º 1B (identificación de archivos eliminados y recuperación ext4), nos encontramos con varios archivos
(lolitaz*) en el directorio /home que no se pudo recuperar. Este es un caso de uso obvio
para le talla.

Dado que podemos obtener los archivos asignados de la partición /home en able_3, es posible que queramos
para limitar nuestro tallado solo a bloques no asignados. Esta es una forma común de dividir los sistemas de archivos
separando los bloques asignados y no asignados y dividir solo esos bloques. ya aprendimos
cómo extraer todos los bloques no asignados de un sistema de archivos utilizando la herramienta TSK blkls. Muy bien
Comience extrayendo el primero no asignado.

Recuerda que las herramientas TSK pueden trabajar directamente sobre imágenes divididas, por lo que no es necesario que
monte con fusible la imagen o monte en bucle cualquier sistema de archivos. Ejecutar mmls nos da el sistema de archivos
o conjuntos (si recuerda, el directorio /home se montó en el segundo sistema de archivos de Linux
en el set 104448). Lo usamos con nuestro comando blkls . Puede ejecutar un fls recursivo rápido
comando usando la opción -r para refrescar su memoria en los archivos que estamos buscando. los
Los archivos con el asterisco ( * ) junto al número de inodo se eliminan:

barry@forensicbox:tallar $ mmls ../able_3/able_3.000


Tabla de particiones GUID (EFI)
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla de seguridad
001: ------- 0000000000 0000002047 0000002048 Sin asignar
002: Meta 0000000001 0000000001 0000000001 Encabezado GPT
003: Meta 0000000002 0000000033 0000000032 Tabla de partición
004: 000 0000002048 0000104447 0000102400 Sistema de archivos Linux
005: 001 0000104448 0000309247 0000204800 Sistema de archivos Linux
006: ------- 0000309248 0000571391 0000262144 Sin asignar
007: 002 0000571392 0008388574 0007817183 Sistema de archivos Linux
008: ------- 0008388575 0008388607 0000000033 Sin asignar

288
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:tallar $ fls -o 104448 -r ../able_3/able_3.000


d/d 11: perdido+encontrado
d/d 12: ftp
d/d 13: alberto
+ d/d 14: ++ .h
r/d * 15(realizar): lolit_pics.tar.gz
++ r/r * 16(realizar): lolitaz1
++ r/r * 17: lolitaz10
++ r/r * 18: lolitaz11
++ r/r * 19: lolitaz12
++ r/r 20: lolitaz13
++ r/r * 21: lolitaz2
++ r/r * 22: lolitaz3
++ r/r * 23: lolitaz4
++ r/r * 24: ++ r/ lolitaz5
r * 25: ++ r/r * lolitaz6
26: ++ r/r * 27: + lolitaz7
+ r/r * 28: + d/d lolitaz8
15: Descargar lolitaz9

++ r/r 16: índice.html


++ r/r * 17: lrkn.tar.gz
V/V 25689: $Archivos huérfanos

Para obtener los bloques no asignados usando blkls:

barry@forensicbox:tallar $ blkls -o 104448 ../able_3/able_3.000 > able3.home.blkls

barry@forensicbox:tallar $ ls -lh
total 92M
-rw-r--r-- 1 usuarios de barry 92M 2 de agosto 08:35 able3.home.blkls
-rwxr-xr-x 1 usuarios de barry 13K 2 de agosto 08:28 bisturí.conf*

El comando blkls se ejecuta con el o set (-o) apuntando al segundo sistema de archivos de Linux que
comienza en el sector 104448. La salida se redirige a able3.home.blkls. El nombre de casa es
se utiliza para indicar que esta es la partición montada como /home en el disco original de able_3 . Ahora
podemos ver (con el comando ls arriba) que tenemos dos archivos en el directorio ~/carve .

bisturí tiene una serie de opciones disponibles para ajustar la talla. Hay una opción para tener
bisturí tallar los archivos en los límites alineados del bloque (o grupo). Esto significa que usted
estar buscando archivos que comiencen al principio de un bloque de datos. Ten cuidado al hacer eso. los
comercio o aquí es que si bien obtiene menos falsos positivos, también significa que pierde menos
que pueden estar incrustados o "anidados" en otros archivos. La búsqueda alineada por bloques se realiza con el
Opción -q <tamaño de bloque> . Pruebe esta opción más tarde y compare el resultado. Para obtener el tamaño del bloque
para el sistema de archivos de destino, puede usar el comando fsstat como lo hicimos en ejercicios anteriores.

289
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Puede tallar varias imágenes a la vez con la opción -i <listfile> , y hay otras opciones para probar datos (escribir un
archivo de auditoría sin tallar).

En este caso, usaremos una opción que nos permite analizar correctamente los archivos incrustados (-e). Esta
opción permite el emparejamiento adecuado de encabezados y pies de página. Sin la opción -e , un encabezado
seguido de otro encabezado (como con un archivo incrustado), daría como resultado que ambos archivos compartan
el mismo pie de página.

Finalmente, usaremos la opción -o para redirigir nuestros archivos tallados a un directorio que llamaremos scalp_out
y la opción -O para que la salida permanezca en un solo directorio de salida en lugar de subdirectorios categorizados.
Tener los archivos en una sola carpeta facilita la visualización.

barry@forensicbox:carve$ bisturí -o scalp_out -O -e able3.home.blkls Bisturí versión 2.0


Escrito por Golden G. Richard III y Lodovico Marziale.

Modelo de subprocesamiento de CPU multinúcleo habilitado.


Inicializar estructuras de datos de grupos de subprocesos.
Creando hilos...
Creación de tema completada.

Objetivo de apertura "/home/barry/carve/able3.home.blkls"

Archivo de imagen pase


1/2. able3.home.blkls: 100.0% |***********************************| 91,3 MB 00:00
,ÿ ETAAsignando colas de trabajo...
Asignación de colas de trabajo completada. Creando colas de trabajo...
Colas de trabajo construidas. Carga
de trabajo: arte con encabezado "\x4a\x47\x04\x0e" y pie de página "\xcf\xc7\xcb" --> 0
archivos arte con encabezado "\x4a\x47\x03\x0e" y pie de página "\xd0\xcb" \x00\x00" --> 0 archivos
gif con encabezado "\x47\x49\x46\x38\x37\x61" y pie de página "\x00\x3b" --> 0 archivos gif con
encabezado "\x47\x49\x46 \x38\x39\x61" y pie de página "\x00\x00\x3b" --> 1 archivo jpg con encabezado
"\xff\xd8\xff\xe0\x00\x10" y pie de página "\xff\xd9" --> 6 archivos jpg con encabezado "\xff\xd8\xff\xe1"
y pie de página "\xff\xd9" --> 0 archivos png con encabezado "\x50\x4e\x47?" y pie de página
"\xff\xfc\xfd\xfe" --> 0 archivos bmp con encabezado "BM??\x00\x00\x00" y pie de página "" --> 0
archivos tif con encabezado "\x49\x49\x2a \x00" y pie de página y
""pie
tif con
de página
encabezado
"" "\x4D\x4D\x00\x2A"
--> 0 archivos
--> 0 archivos
Tallar archivos de imagen.
Archivo de imagen paso
2/2. able3.home.blkls: 100.0% |***********************************| 91,3 MB ,ÿ ETA Procesamiento 00:00
del archivo de imagen completo. Limpiar...
Hecho.
Bisturí hecho, limas talladas = 7, transcurrido = 1 seg.

barry@forensicbox:carve$ ls cuero cabelludo_out/


00000000.gif 00000002.jpg 00000004.jpg 00000006.jpg 00000001.jpg
00000003.jpg 00000005.jpg audit.txt

290
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

El resultado anterior muestra el tallado con bisturí de aquellos tipos de archivos en los que las definiciones no
estaban comentadas. Una vez que se completa el comando, una lista de directorios muestra los archivos (con el
extensión para el tipo de archivo tallado agregado) y un archivo audit.txt . El archivo audit.txt proporciona
un registro con el contenido de bisturí.conf y la salida del programa:

barry@forensicbox:tallar $ menos cuero cabelludo_out/audit.txt


Archivo de auditoría bisturí versión 2.0
Comenzó el vie 2 ago 08:44:13 2019
Línea de comando:
bisturí -o cuero cabelludo_fuera -O -e capaz3.home.blkls

Directorio de salida: scalp_out


Archivo de configuración: /home/barry/carve/scalpel.conf

------ COMENZAR LA COPIA DEL ARCHIVO DE CONFIGURACIÓN UTILIZADO ------

# Archivo de configuración de bisturí

# Este archivo de configuración controla los tipos y tamaños de archivos que


# están tallados con bisturí. TENGA EN CUENTA QUE EL FORMATO DE ESTE ARCHIVO FUE
# EXTENDIDO en Bisturí 1.90-->!
...
------ FINALIZAR LA COPIA DEL ARCHIVO DE CONFIGURACIÓN UTILIZADO ------

Objetivo de apertura "/home/barry/carve/able3.home.blkls"

Se tallaron los siguientes archivos:


Expediente comienzo Cortar Longitud Extraído de
00000006.jpg 6586930 NO 6513 able3.home.blkls
00000005.jpg 6586368 NO 64601 able3.home.blkls
00000004.jpg 6278144 NO 15373 able3.home.blkls
00000003.jpg 6249472 NO 27990 able3.home.blkls
00000002.jpg 6129070 NO 5145 able3.home.blkls
00000001.jpg 6128640 NO 94426 able3.home.blkls
00000000.gif 6223872 NO 25279 able3.home.blkls

Completado el viernes 2 de agosto 08:44:14 2019

Todo el archivo bisturí.conf está incluido en audit.txt. En la parte inferior de la salida está nuestra
lista de archivos tallados con el desplazamiento en el que se encontró el encabezado, la longitud del archivo y la
fuente (lo que fue tallado). La columna etiquetada Chop se referiría a los archivos que tenían un máximo
número de bytes grabados antes de encontrar el pie de página. Puede leer el archivo scalpel.conf para
una descripción más detallada.

Los archivos se pueden ver con visualización en la línea de comando o con un visor GUI que puede
proporcionar una vista en miniatura y en ventana (sxiv es un excelente visor de imágenes CLI con vista en miniatura
capacidades). El programa geeqie es un ejemplo simple de un visor GUI.

291
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:tallar $ cd cuero cabelludo_fuera/

barry@forensicbox:tallar $ geeqie

Figura 19: Visualización de archivos tallados con geeqie

Hay otros archivos que se pueden encontrar en estos datos no asignados. Para ilustrar esto, veamos de nuevo el
archivo scalpel.conf y agreguemos una definición de encabezado diferente para un archivo de mapa de bits. Abra
32
bisturí.conf con su editor de texto (vi) la línea y agregue la siguiente línea (que se muestra en rojo) debajo
bmp actual en la sección # ARCHIVOS GRÁFICOS :

barry@forensicbox:tallar $ vi bisturí.conf
...
# BMP (usado por MSWindows, úselo solo si tiene motivos para pensar que hay #
Archivos BMP que vale la pena buscar. Esto a menudo genera una gran cantidad de falsos

32Si está usando vi para editar el archivo, debe copiar y pegar la línea. Con el cursor sobre el existente
línea, use yy para copiar el texto (línea actual) y luego p para pegar en la línea de abajo. Luego edite esa línea.

292
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

# positivos

bmp y 100000 BM??\x00\x00\x00 bmp y


300000 BM??\x04\x00\x00
...

Aquí cambiamos el tamaño máximo a 300000 bytes y reemplazamos la primera cadena x00 con x04.
Guarde el archivo. Vuelva a ejecutar el bisturí nuevamente (escriba en un directorio de salida diferente:
scalp_out2) y verifique la salida:

barry@forensicbox:carve$ bisturí -o cuero cabelludo_out2 -O -e capaz3.home.blkl Bisturí versión


2.0 Escrito por Golden G. Richard III y Lodovico Marziale.

Modelo de subprocesamiento de CPU multinúcleo habilitado.


Inicializar estructuras de datos de grupos de subprocesos.
Creando hilos...
Creación de tema completada.

Objetivo de apertura "/home/barry/carve/able3.home.blkls"

Archivo de imagen pase


1/2. able3.home.blkls: 100.0% |***********************************| 91,3 MB 00:00
,ÿ ETAAsignando colas de trabajo...
Asignación de colas de trabajo completada. Creando colas de trabajo...
Colas de trabajo construidas. Carga de
trabajo: arte con encabezado "\x4a\x47\x04\x0e" y pie de página "\xcf\xc7\xcb" --> 0 archivos
art con encabezado "\x4a\x47\x03\x0e" y pie de página "\xd0\xcb\x00\x00" --> 0 archivos gif con encabezado
"\x47\x49\x46\x38\x37\x61" y pie de página " \x00\x3b" --> 0 archivos gif con encabezado
"\x47\x49\x46\x38\x39\x61" y pie de página "\x00\x00\x3b" --> 1 archivos jpg con encabezado "\xff\xd8
\xff\xe0\x00\x10" y pie de página "\xff\xd9" --> 6 archivos jpg con encabezado "\xff\xd8\xff\xe1" y pie de página
"\xff\xd9" --> 0 archivos png con encabezado "\x50\x4e\x47?" y pie de página "\xff\xfc\xfd\xfe" --> 0 archivos bmp
con encabezado "BM??\x00\x00\x00" y pie de página "" --> 0 archivos bmp con encabezado "BM??\x04\ x00\x00"
y pie de página ""
-> 1 archivos
tif con encabezado "\x49\x49\x2a\x00" y pie de página "" --> 0 archivos
tif con encabezado "\x4D\x4D\x00\x2A" y pie de página "" --> 0 archivos
Tallar archivos de imagen.
Archivo de imagen paso
2/2. able3.home.blkls: 100.0% |***********************************| 91,3 MB ,ÿ ETA Procesamiento del 00:00
archivo de imagen completo. Limpiar...
Hecho.
Bisturí hecho, limas talladas = 8, transcurrido = 1 seg.

Mirando el resultado resaltado arriba, podemos ver que esta vez se grabaron un total de ocho archivos. La
definición de mapa de bits que agregamos muestra claramente que se puede mejorar el archivo scalpel.conf .
Tampoco es difícil de hacer. Simplemente usando xxd para encontrar patrones coincidentes en grupos de archivos

293
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

puede ser suficiente para construir una biblioteca decente de encabezados. Esto es particularmente útil si se
encuentra con muchos formatos propietarios.

Dado que la talla se puede abordar con una variedad de algoritmos, podría ser una buena idea ejecutar sus datos
a través de más de una herramienta. Para esto, ahora veremos photorec.

10.5.2 fotograbación

Parte del paquete testdisk , photorec es otro programa de tallado. Sin embargo, adopta un enfoque
muy diferente. photorec no se diseñó originalmente como una utilidad forense, sino como una
herramienta de recuperación de datos para personas que pierden archivos de tarjetas SD y otros
medios. Se ha convertido en una herramienta muy útil para extraer muchos archivos diferentes de los
medios. Como parte del paquete testdisk , se instala junto con la propia herramienta testdisk (para
recuperar particiones), fidentify (la misma idea básica que el comando file , pero menos detallado) y
qphotorec. qphotorec es una interfaz gráfica de usuario para photorec.

Figura 20: qphotorec - Interfaz gráfica de usuario para photorec

Por supuesto, nos apegaremos a la versión de la línea de comandos aquí (que en realidad está impulsada por
menús). Podemos comparar la salida recibida del bisturí con la salida de photorec

294
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ejecutando el tallado en los mismos datos no asignados home.blkls de nuestra imagen de disco able_3 .
Primero, inicie sesión como root (su -) e instale el paquete testdisk con sboinstall:

barry@forensicbox:tallar$
su -
Clave:

root@forensicbox:~# sboinstall testdisk TestDisk


es un potente software gratuito de recuperación de datos. Fue diseñado principalmente
para ayudar a recuperar particiones perdidas y/o hacer que los discos que no
arrancan puedan volver a arrancar cuando estos síntomas son causados por software
defectuoso, ciertos tipos de virus o errores humanos (como eliminar accidentalmente
una tabla de particiones). La recuperación de la tabla de particiones usando TestDisk
es realmente fácil.

PhotoRec es un software de recuperación de datos de archivos diseñado para


recuperar archivos perdidos, incluidos videos, documentos y archivos de discos
duros y CD-ROM, e imágenes perdidas de la memoria de la cámara digital.

Si desea habilitar el uso de sudo, ejecute el script con SUDO=true

libewf es una dependencia opcional.


...
¿Continuar con testdisk? [y]
...
Paquete testdisk-7.0-x86_64-1_SBo.tgz instalado.

Limpieza para testdisk-7.0...

SlackBuild especifica que libewf es una dependencia opcional y, dado que ya tenemos instalado
libewf , se detectará y compilará para que sea compatible con EWF.

Ejecutar photorec desde la línea de comandos es simple. Usaremos una opción para crear un archivo
de registro usando /log (creado en el directorio actual) y proporcionando un directorio de salida /d
<dirname> (usaremos photorec_out). También apuntaremos el programa directamente a los datos no
asignados de able3.home.blkls de able_3. Esto nos llevará al menú photorec .

barry@forensicbox:~$ photorec /log /d photorec_out able3.home.blkls*)

El menú principal aparece con el archivo able3.home.blkls ya seleccionado y cargado (Ver Figura 21).
Repasaremos las opciones del menú rápidamente. Todo se explica por sí mismo y se pueden encontrar
detalles adicionales en http://www.cgsecurity.org/wiki/PhotoRec_Step_By_ Step.

Normalmente, el menú principal incluiría particiones de disco de discos internos y extraíbles.

295
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 21: menú principal de photorec

media, pero dado que específicamente llamamos al archivo able3.home.blkls , se carga de forma predeterminada
(consulte la Figura 22). Seleccione [Continuar] con las teclas de flecha y presione <enter>.

Figura 22: photorec ejecutándose en el archivo able3.home.blkls

Si se tratara de una imagen de disco completa, photorec mostraría los sistemas de archivos y las particiones
contenidas en la imagen. En este caso, son simplemente datos no asignados y no hay partición para mostrar.
Seleccione [Opciones] y presione <enter>.

Las opciones proporcionadas son (Ver Figura 23):

296
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 23: Visualización de opciones de fotograbado en el programa en ejecución

Paranoico: se usa para validar archivos que están tallados. Lo dejaremos como Sí por ahora.

Conservar archivos dañados: en el uso normal, es posible que desee habilitar esto solo para estar seguro (recopilar la
mayor cantidad de datos posible). Nunca lo he encontrado particularmente útil.

Modo experto: proporciona opciones adicionales para configurar una geometría de disco especí ca. A menos
que esté trabajando con una imagen de disco corrupta con una tabla de particiones destrozada, puede dejar
esto en el No.

Poca memoria: para imágenes de disco realmente grandes donde la memoria se convierte en un problema.

Obviamente, siéntete libre de jugar con las opciones y explorar los diferentes menús. Para este simple ejercicio, dejar los valores
predeterminados como están funcionará perfectamente.

Vuelva al menú principal seleccionando >Salir y, en el menú principal, elija [File Opt] y presione <enter>.

Esto lo llevará al menú de selección de archivos (vea la Figura 24). photorec recuperará casi quinientas firmas de archivos diferentes.
Puede seleccionar o deseleccionar de este menú. Por ahora, dejaremos las selecciones de archivos predeterminadas en su lugar
(hay algunos deseleccionados de forma predeterminada). Seleccione [Salir] de nuevo para volver al menú principal. En el menú
principal, seleccione [Buscar] y presione <enter>.

Aquí es donde seleccionamos el tipo de sistema de archivos (Ver Figura 25). Elegiremos [ext2/ext3] y le daremos a <enter>,
comenzando la búsqueda.

Una vez que se complete la búsqueda, verá la cantidad de archivos recuperados y el directorio de salida (photorec_out, que
especificamos en nuestra línea de comando). La talla ahora está completa.

297
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 24: menú de opciones de la fotograbación

Figura 25: selección del sistema fotorreceptor

Seleccione [Salir] en los menús subsiguientes y salga del programa. Volverá al símbolo del sistema (consulte la
Figura 26).

Mirando una lista de directorios, puede ver que ahora tenemos un nuevo directorio de salida,
photorec_out.1/ junto con un archivo de registro que se creó con la opción /log . Eche un vistazo al archivo de
registro, photorec.log con el comando less .

barry@forensicbox:tallar $ ls -l

298
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Figura 26: selección del sistema fotorreceptor

total 93516
-rw-r--r-- 1 usuarios de barry 95726592 4 de agosto 12:35 able3.home.blkls
-rw-r--r-- 1 usuarios de barry drwxr-xr-x
2825 24 usuarios
de agostode barry
15:07 drwxr-xr-- 2
photorec.log
usuarios de barry usuarios drwxr-xr-- 2 usuarios
4096 de 15:07
4 de agosto barry photorec_out.1/
-rwxr-xr-x 1
usuarios de barry 4096 4 de agosto 12:38 scalp_out/ 4096 4
de agosto 12:41 scalp_out2/ 12967 4 de
agosto 12:41 bisturí.conf*

barry@forensicbox:tallar $ menos photorec.log


...
Dom 4 de agosto 12:56:02
2019 Línea de comandos: PhotoRec /log /d photorec_out able3.home.blkls

PhotoRec 7.0, Utilidad de recuperación de datos, abril de


2015 Christophe GRENIER <grenier@cgsecurity.org> http://
www.cgsecurity.org Disco able3.home.blkls - 95 MB / 91
MiB - CHS 12 255 63 (RO), tamaño de sector =512
...
blocksize=1024, offset=0
Tiempo transcurrido 0h00m00s
Paso 1 (blocksize=1024) STATUS_EXT2_ON
photorec_out.1/f0012156.gif 12156-12205
photorec_out.1/f0012206.jpg 12206-12261
photorec_out.1/f0012262.jpg 12262 photo-
rec_out.jpg 12262 1/f0012294.bmp 12294-12863
photorec_out.1/f0012904.gz 12904-186965 Tiempo
transcurrido 0h00m01s

299
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Pasar 1 +5
archivos jpg: 2/4
recuperados bmp: 1/1
recuperados gif: 1/1
recuperados gz: 1/1 recuperados
Total: 5 archivos encontrados

12196 sectores contienen datos desconocidos, 2 archivos no válidos encontrados y rechazados.

Al igual que el bisturí, la salida del registro proporciona información adecuada para su inclusión en un informe si es
necesario, tenga en cuenta que las ubicaciones de compensación para cada archivo tallado se dan en conjunto de sectores
en lugar de conjunto de bytes (multiplique cada compensación dada anteriormente por 512 para comparar la o establece
con el archivo bisturí audit.txt ).

Echa un vistazo a la salida de photorec:

barry@forensicbox:carve$ ls photorec_out.1/
f0012156.gif f0012206.jpg f0012262.jpg f0012294.bmp
f0012904_lrkn.tar.gz report.xml

El contenido del directorio de salida muestra que photorec recuperó no solo algunos archivos de imagen, sino también un
archivo llamado f0012904_lrkn.tar.gz. Si recuerda nuestro ejercicio able_3 , recordará que este fue un archivo de cierto
interés. photorec es útil para mucho más que unas pocas imágenes.
Si intenta descomprimir/extraer el archivo, encontrará que está dañado. Parte de él, sin embargo, todavía es recuperable.

barry@forensicbox:carve$ tar tzvf photorec_out.1/f0012904_lrkn.tar.gz drwxr-xr-x lp/lp


0 1998-10-01 18:48 lrk3/ -rwxr-xr-x lp/lp
1996-11-02
742 1998-06-
16:3827
lrk3/MCONFIG
11:30 lrk3/1 -rw-r--r--
-rw-r--r--lp/lp
lp/lp716
6833
1998-10-03 05 :02 lrk3/Makefile -rw-r--r-- lp/lp 6364 1996-12-27 22:01 lrk3/README

...
gzip: stdin: descompresión correcta, basura final ignorada -rw-r--r--
lp/lp 1996 1996-11-02 16:39 lrk3/z2.c tar: El niño devolvió el estado 2

tar: el error no es recuperable: salir ahora

Todavía hay mucha información que se puede obtener de la recuperación de este archivo. Puede ver que el README es
uno de esos archivos recuperados. Podemos usar esto para de nir cadenas para que busquemos y tal vez descubramos
dónde se descomprimió y extrajo el archivo (que

300
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

hicimos anteriormente en nuestro ejercicio de búsqueda física). Esta es una de las razones por las que elegimos usar
más de una utilidad de tallado. Las diferencias en la producción pueden fortalecer nuestro análisis.

Una pregunta que podrías hacerte es "¿Cómo comparo eficientemente la salida de tallado de dos herramientas
diferentes para obtener un recuento preciso de los archivos recuperados?". En nuestra muestra muy pequeña producida
por los ejercicios aquí, es un trabajo bastante simple. Simplemente comparamos los archivos de imagen en un visor
gráfico. Hay un poco más de una docena de imágenes en total para revisar. Sin embargo, si tuviéramos que tallar una
imagen de disco con cientos de archivos de imagen no asignados, la comparación sería mucho más difícil. Para
abordar esto, echemos un vistazo a un programa simple que hará el trabajo por nosotros.

10.5.3 Comparación y deduplicación de la salida Carve

Obviamente, esto no es una simple cuestión de comparar nombres de archivos. Los archivos se extraen de los bloques
de datos sin tener en cuenta las entradas de directorio u otra información del sistema de archivos. Entonces, las
herramientas usan su propio esquema de nombres. Curiosamente , photorec incluyó el nombre del archivo tar original
lrkn.tar.gz en su salida. Esto se debe a que el nombre del archivo es parte de los metadatos del archivo (ejecute el
archivo f0012904_lrkn.tar.gz y verá que el encabezado gzip contiene el nombre).

Una cosa que podemos hacer es comparar hashes. Si los valores hash coinciden, independientemente del nombre del
archivo, sabemos que tenemos dos archivos iguales. Una forma simple de hacer esto sería hacer un hash de todos los
archivos en cada directorio (photorec_out y scalp_out2) y escribirlos en un archivo. Entonces podríamos ordenar
este archivo por el hash y buscar duplicados. Esto se puede hacer en un comando. Tenga en cuenta que usamos f0*
y 0* para el comando md5sum en cada directorio para que obtengamos solo los archivos de salida tallados y no los
archivos de registro/auditoría de cada herramienta.

barry@forensicbox:tallar $ md5sum photorec_out.1/f0*scalp_out2/0*| sort


110983800a177c1746c54b15edec989a photorec_out.1/f0012156.gif
110983800a177c1746c54b15edec989a scalp_out2/00000000.gif
2d7d4def42fcbcc0c813a27505f0508b photorec_out.1/f0012904_lrkn.tar.gz
357ca99e654ca2b179e1c5a0290b1f94 photorec_out.1/f0012262.jpg
357ca99e654ca2b179e1c5a0290b1f94 scalp_out2/00000004.jpg
437a614c352b03a6a4575e9bbc2070ae photorec_out.1/f0012206.jpg
437a614c352b03a6a4575e9bbc2070ae scalp_out2/ 00000003.jpg
6742ca9862a16d82fdc4f6d54f808f41 scalp_out2/00000007.bmp
a0794399a278ce48bfbd3bd77cd3394d scalp_out2/00000002.jpg
aa607253fc9b0a70564228ac27ad0b13 scalp_out2/00000006.jpg
b5ca633bea09599c3fb223b4187bb544 photorec_out.1/f0012294.bmp
b6703670db3f13f23f7a3ed496a2b95c scalp_out2/00000001.jpg
f979cd849ccdd5c00fd396b600a9a283 scalp_out2/00000005.jpg

Al ordenar la salida, los hash duplicados se enumeran juntos. Del resultado anterior podemos ver que estos dos
archivos son idénticos:

301
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

110983800a177c1746c54b15edec989a photorec_out.1/f0012156.gif

Esto se puede redirigir a un archivo para su posterior procesamiento.

barry@forensicbox:tallar $ md5sum photorec_out.1/f0*scalp_out2/0*| ordenar >


carvehash.txt

Bueno, esto está bien. Pero también podría ser bueno desduplicar los archivos eliminando uno de los duplicados. Una
vez más, bastante fácil en nuestra pequeña muestra aquí, pero mucho más desafiante y lento si se trata de cientos o
miles de imágenes de contrabando que necesita clasificar y contar con precisión.

Para ello podemos utilizar un programa llamado fdupes. fdupes funciona usando nombres de archivo y hash para
encontrar, informar y, si se solicita, eliminar archivos duplicados de los directorios especificados por el usuario. Es fácil
de usar y muy eficaz.

barry@forensicbox:tallar $ su -
Clave:

root@forensicbox:~# sboinstall fdupes


FDUPES es un programa para identificar o eliminar archivos duplicados que residen en
directorios específicos.

¿Continuar con fdupes? [y]


...
Paquete fdupes-1.6.1-x86_64-1_SBo.tgz instalado.

Limpieza para fdupes-1.6.1...

Ejecutaremos fdupes dos veces (siempre es una buena práctica). La primera ejecución mostrará todos los archivos
duplicados, cada par en una sola línea. Revise el resultado para asegurarse de que no haya archivos inesperados y
luego vuelva a ejecutar el comando con la opción --delete .

barry@forensicbox:carve$ fdupes -R -1 photorec_out.1/ cuero cabelludo_fuera2/


cuero cabelludo_fuera2/00000004.jpg fotorec_fuera.1/f0012262.jpg cuero
cabelludo_fuera2/00000000.gif fotorec_fuera.1/f0012156.gif cuero
cabelludo_fuera2/00000003.jpg fotorec_fuera.1/ f0012206.jpg

Las opciones que pasamos son -R para recursividad. No hay subcarpetas en este ejemplo, pero nunca está de más
permitir la recursividad. Particularmente en exámenes a gran escala donde la salida tallada puede ser bastante masiva y
es posible que haya especificado una salida categorizada para bisturí en particular (diferentes tipos de archivos en
diferentes directorios). También usamos la opción -1 para poner coincidencias en la misma línea. Esta es una preferencia
personal. Ejecute sin esta opción y vea lo que prefiere.

302
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una vez que se haya obtenido una vista previa de la salida, vuelva a ejecutar el comando con la opción --delete para
mantener solo el primer archivo en cada par (o conjunto). Si revisó la salida antes de eliminarla, es posible que desee
agregar la opción -N para "sin aviso". Úselo a su propia discreción. Sin -N, si tiene cientos de pares de archivos
coincidentes, deberá con rmar cada eliminación.

barry@forensicbox:~$ fdupes -R -N -delete photorec_out.1/ cuero cabelludo_out2/

[+] cuero
cabelludo_out2/00000004.jpg [-] photorec_out.1/f0012262.jpg

[+] cuero
cabelludo_out2/00000000.gif [-] photorec_out.1/f0012156.gif

[+] cuero
cabelludo_out2/00000003.jpg [-] photorec_out.1/f0012206.jpg

El resultado anterior indica que el primer archivo se mantuvo [+] y el segundo archivo se eliminó [-]. Si hubiera más de
un archivo coincidente en cada conjunto, solo quedaría el primero.
Para controlar mejor este comportamiento, elimine la opción -N y podrá seleccionar qué archivos conservar.

Esto concluye nuestra sección de tallado físico. Hemos aprendido cómo tallar archivos del espacio no asignado, ver
los archivos, ordenarlos y eliminar duplicados de manera eficiente.

10.6 Análisis de aplicaciones

Ahora hemos cubierto varias de las capas que discutimos anteriormente, incluidas las capas de administración física
y de medios para la información del disco y el diseño de la partición; herramientas del sistema de archivos para
recopilar información sobre las estadísticas del sistema de archivos; y herramientas para trabajar en archivos
individuales para buscar contenido e identificar tipos de archivos de interés. Incluso hemos realizado algunas
recuperaciones de datos en la capa de bloque físico, independientemente del volumen y el sistema de archivos,
mediante tallado y búsquedas exhaustivas. Entonces, ahora que hemos recuperado los archivos, ¿qué hacemos con ellos?

Aquí es donde entra en juego la capa de aplicación de nuestro modelo de análisis. Para nuestros propósitos aquí, el
término "aplicación" puede considerarse como un sistema operativo o archivos interactivos del usuario, es decir:
archivos creados por aplicaciones a las que accede el sistema operativo o a través de la interacción del usuario (ya
sea con el sistema operativo o software externo).

En términos más simples, el análisis de la aplicación puede ser tan simple como ver el archivo directamente para el
contenido. Hemos usado catdoc y catdox para los archivos de MS Office, varios visores de imágenes como geeqie,
xv y display para imágenes, y visores de texto simples como less para ASCII . les. Pero el análisis forense es mucho
más que simplemente recuperar archivos y mostrar el contenido. Ese tipo de actividad es realmente solo recuperación
de datos. Sin embargo, el análisis forense digital debe incluir otras técnicas:

análisis temporal (¿cuándo sucedió?)

303
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

atribución (¿quién hizo que sucediera?)

mapeo de actividades (¿cómo sucedió?)

Obviamente, podemos obtener parte de esta información a través del análisis que ya hemos hecho, utilizando los
tiempos de archivo que vemos en la salida de istat o la ubicación de los archivos en el directorio de inicio de un usuario
en particular o en la carpeta Usuarios .

Para profundizar un poco más, vamos a echar un vistazo a algunas aplicaciones simples que nos permitirán examinar
el Registro de Windows, los registros de eventos de Windows y otros artefactos para obtener información adicional útil
desde el punto de vista forense. Haremos esto usando algunas utilidades del proyecto libyal .

Puede leer más sobre libyal en https://github.com/libyal/libyal/wiki. Hay un par de notas importantes sobre estas
bibliotecas que debemos cubrir antes de comenzar. En primer lugar, asegúrese de comprender que muchas de estas
bibliotecas se encuentran en estado alfa o experimental, lo que significa que no están completamente maduras y, como
lo indica claramente el sitio anterior, están sujetas a interrupciones y/o cambios. Los proyectos que veremos aquí están
en estado alfa. Se han probado en algunos archivos de muestra simples, pero asegúrese de probarlos en su propio
entorno antes de usarlos. Estos son proyectos excelentes y vale la pena seguirlos, pero asegúrese de saber lo que está
haciendo (y viendo) antes de usarlos en producción. No se recomienda el uso de software claramente marcado como
alfa o experimental para el trabajo de casos de producción a menos que comprenda y pruebe el resultado por sí mismo.
Por el momento, estos constituyen excelentes herramientas de verificación cruzada terciaria y vehículos para el
aprendizaje de estructuras y artefactos específicos.

10.6.1 Ejercicio de análisis de registro 1: UserAssist

Comencemos nuestra exploración de libyal y el análisis de aplicaciones observando los archivos de registro de
Windows especí cos.

Como de costumbre, comenzamos con el descargo de responsabilidad de que esta sección no se trata de aprender análisis forense de registro.
Se trata de las herramientas. Por supuesto, puede obtener algo de conocimiento en el camino, pero ese no es nuestro
propósito aquí. Si desea profundizar en estos archivos de registro y obtener más información sobre el arte del análisis
forense de registros, le sugiero encarecidamente que consulte el excelente libro33 escrito por Harlan Carvey sobre el
tema (y explore su blog34). Es posible que desee tener una comprensión básica de la estructura del registro antes de
comenzar este ejercicio, de modo que tenga algo de contexto para lo que está por venir. Y, por supuesto, hay otras
formas (más rápidas y completas) de analizar un registro. Por ejemplo, el conocido RegRipper de Harlan Carvey se
ejecutará
ne en Linux.

33https://www.elsevier.com/books/windows-registry-forensics/carvey/978-0-12-803291-6 34http://
windowsir.blogspot.com/

304
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Nuestro propósito real en esta sección es mostrarle cómo hacer este tipo de análisis a nivel de byte, usando algunas herramientas
comunes de Linux como xxd y tr, en lugar de depender de herramientas más automatizadas para que lo hagan por usted. Lo que
hacemos aquí no es muy diferente de lo que hacen los scripts de Perl en RegRipper (aunque lo simplificamos un poco aquí).

Primero, sin embargo, necesitamos tener un archivo de registro para trabajar. Comenzaremos con el archivo NTUSER.DAT de la
cuenta AlbertE en nuestra muestra del sistema de archivos NTFS (NTFS_Pract_2017.E01).

Necesitamos asegurarnos de obtener el NTUSER.DAT correcto. Hay un par de formas en que podemos ubicar y extraer el archivo
de una imagen de disco. Puede montar la imagen (en nuestro caso usando ewfmount), buscar el archivo y extraerlo copiándolo del
sistema de archivos montado. Sin embargo, esto requiere algunos pasos más de los que necesitamos hacer, por lo que lo
demostraremos aquí con dos métodos de ubicación simples y luego extraeremos el archivo con icat.

Dado que estamos apuntando a la cuenta AlbertE y sabemos que el archivo NTUSER.DAT de un usuario específico está en la
carpeta /Users/$USERNAME/ , podemos usar ifind para apuntar al archivo específico por nombre.
Para ejecutar ifind, usamos mmls como lo hicimos anteriormente para encontrar el desplazamiento al sistema de archivos en
nuestra imagen:

barry@forensicbox:~$ cd NTFS_Pract_2017

barry@forensicbox:NTFS_Pract_2017$ mmls NTFS_Pract_2017.E01 Tabla de particiones de


DOS
Sector de compensación: 0

Las unidades están en sectores de 512 bytes

Ranura comienzo Final Longitud Descripción


000: Meta 0000000000 0000000000 0000000001 Tabla primaria (#0)
001: ------- 0000000000 0000002047 0000002048 Sin asignar
002: 000:000 0000002048 0001023999 0001021952 NTFS / exFAT (0x07)

barry@forensicbox:NTFS_Pract_2017$ ifind -n "usuarios/alberte/ntuser.dat" -o 2048


NTFS_Práctica_2017.E01 285

Así que aquí usamos ifind (encontrar el "inodo", o estructura de metadatos) usando -n para buscar por nombre, en el 2048 o set
que nuevamente encontramos en nuestra imagen de sistema de archivos NTFS ejecutando mmls. El valor de retorno que obtenemos
de ifind es 285, la entrada MFT para el archivo NTUSER.DAT de la cuenta AlbertE .

Alternativamente, si desea buscar todos los archivos NTUSER.DAT en un sistema, puede usar fls con la opción de enumerar
recursivamente todos los archivos regulares (-Fr), agrupando la salida para NTUSER.DAT.
En cualquier caso, nuevamente encontramos que la entrada MFT para NTUSER.DAT de AlbertE es 285:

barry@forensicbox:NTFS_Pract_2017$ fls -Fr -o 2048 NTFS_Pract_2017.E01 | grep


USUARIONT.DAT
r/r 285-128-2: Usuarios/AlbertE/NTUSER.DAT r/r 286-128-2:
Usuarios/ElsaE/NTUSER.DAT

305
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Una vez que haya identificado la entrada MFT usando uno de los dos métodos anteriores, simplemente puede
extraer el archivo con icat, nombrando arbitrariamente la salida (aquí usamos NTUSER.285 ). Ejecute el comando
de archivo para verificar el tipo resultante:

barry@forensicbox:~$ icat -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 285 >


USUARIONT.285

barry@forensicbox:~$ archivo NTUSER.285


NTUSER.285: archivo de registro de MS Windows, NT/2000 o superior

Ahora que tenemos el archivo de registro que queremos, podemos elegir una clave específica para buscar
información útil. Como ejemplo, veremos las entradas de UserAssist . Estas entradas ocurren en el registro cuando
un usuario ejecuta un programa desde el escritorio. Las entradas de UserAssist se encuentran en
Software\Microsoft\Windows\CurrentVersion\Explorer\. Para una explicación completa, los remito nuevamente
al libro antes mencionado de Harlan Carvey.

Así que tenemos nuestro archivo de registro, NTUSER.DAT, y la clave de destino, UserAssist. Necesitamos
software para acceder a los datos. Para ello instalamos libregf:

barry@forensicbox:~$ su -
Clave:

root@forensicbox:~# sboinstall libregf


...
Limpieza para libregf-20190303...

root@forensicbox:~# salir

Puede echar un vistazo a las utilidades que instaló este paquete mirando el archivo del paquete en /var/log/
packages:

barry@forensicbox:~$ grep usr/bin /var/log/packages/libregf-20190303-x86_64-1_SBo usr/bin/ usr/bin/


regfexport usr/bin/regfinfo usr/bin/regfmount

Podemos ver que el paquete viene con tres programas ejecutables ubicados en /usr/bin. Nos concentraremos en
el uso de regfmount. Al igual que ewfmount de libewf (que también forma parte del proyecto libyal ), regfmount
proporciona una interfaz de sistema de archivos fuse para un objeto de archivo, en este caso un archivo de registro.
El uso es muy similar. Primero, crearemos un punto de montaje en nuestro directorio actual, seguido del montaje
del registro:

barry@forensicbox:~$
mkdir regmount

306
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ montajeregf NTUSER.285 montajeregf/


montajeregf 20190303

barry@forensicbox:~$ montaje de registro de cd

barry@forensicbox:regmount$ ls
AppEvents/ Control\ Panel/ Environment/ Keyboard\ Layout/ Printers/ System/
Consola/ EUDC/ Identidades/ Red/ Software/

El archivo de registro NTUSER.285 se monta usando regfmount en el punto de montaje que


creamos, regmount (en el directorio actual). Cuando cambiamos al directorio regmount , vemos
el contenido del archivo de registro en el mismo tipo de estructura jerárquica que se encontraría en
cualquier otro visor de registro. Ahora podemos navegar y ver esto usando las utilidades de línea
de comandos normales. Entonces, vayamos a la tecla UserAssist y veamos el contenido.

barry@forensicbox:~$ cd
Software/Microsoft/Windows/CurrentVersion/Explorer/UserAssist/

barry@forensicbox:regmount/ Software/Microsoft/Windows/CurrentVersion/Explorer/UserAssist$
ls
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}/
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}/

¡Puede ver que una vez que cambiamos a ese directorio, nuestro indicador es bastante largo! Voy
a abreviar el símbolo del sistema con ... para que las líneas sean más legibles. Cuando ejecutamos
nuestro comando ls , vemos dos entradas de directorio de aspecto críptico (GUID). Cambie el
directorio a F4E57C4B-2036-45F0-A9AB-443BCFE33D9F35 y el subdirectorio Count/(values).
Tenga en cuenta que cuando escriba el subdirectorio (valores) , deberá escapar de los paréntesis
con \, por lo que utilizará \(valores\).

barry@forensicbox:...UserAssist$ cd \{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F\}/

barry@forensicbox:...443BCFE33D9F\}$ cd Count/\(valores\)/

barry@forensicbox:...(valores)$

Ahora eche un vistazo al contenido de este directorio.

barry@forensicbox:...(valores)$ ls
HRZR_PGYFRFFVBA
HRZR_PGYPHNPbhag:pgbe
{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Jvaqbjf\ Snk\ naq\ Fpna.yax

35Aquí es donde la finalización de bash resulta realmente útil. Cuando use el comando cd aquí, escriba el primero
dos caracteres y presione la tecla <tabulador> ... El resto se completará automáticamente. Mejor. Rasgo. Alguna vez

307
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\KCF\ Ivrjre.yax
{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\Cnvag.yax {0139Q44R-6NSR-49S2-
8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\Erzbgr\ Qrfxgbc\
,ÿ Pbaarpgvba.yax
{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\Favccvat\ Gbby.yax
{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\Fgvpxl\ Abgrf.yax
{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\Jrypbzr\ Pragre.yax
{0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\Pnyphyngbe.yax {0139Q4
-6NSR-49S2-8690-3QNSPNR6SSO8}\\\\Npprffbevrf\\\\qvfcynlfjvgpu.yax {0139Q44R-6NSR-49S2-8690-3QNSPNR6SSO8}\
\\\Nqzvavfgengvir\ Gbbyf\\\\Pbzchgre\
,ÿ Znantrzrag.yax
{9R3995NO-1S9P-4S13-O827-48O24O6P7174}\\\\GnfxOne\\\\Jvaqbjf\ Rkcybere.yax {9R3995NO-1S9P-4S13-
O827-48O24O6P7174}\\\\GnfxOne\\\\Tbbtyr\ Puebzr.yax {9R3995NO-1S9P-4S13-O827-48O24O6P7174}\\\
\GnfxOne\\\\Vagrearg\ Rkcybere.yax {9R3995NO-1S9P-4S13-O827-48O24O6P7174}\\\\GnfxOne\\\\Zbmvyyn\
Sversbk.yax {N77S5Q77-2R2O-44P3-N6N2-NON601054N51}\\\\Npprffbevrf\\\\Npprffvovyvgl\\\\Zntavsl.

,ÿ yax
{N77S5Q77-2R2O-44P3-N6N2-NON601054N51}\\\\Npprffbevrf\\\\Pbzznaq\ Cebzcg.yax

Entonces, si leyó algo sobre esta clave de registro en particular, encontrará que las entradas anteriores (o
"archivos" en nuestro sistema de archivos montados en fusibles) están ofuscados por ROT 13. Esto significa
que los caracteres en cada cadena anterior se intercambian am o AM por el correspondiente nz o NZ, de
modo que una a se convierte en una n y una b se convierte en una o, y así sucesivamente. Podemos quitar
la ofuscación de este texto con el comando tr que hemos usado anteriormente para reemplazar un carácter
por otro. En este caso, reemplazaremos los caracteres n-za-m con az, etc. Probemos esto en la cadena
repetida al final de cada línea, .yax:

barry@forensicbox:...(valores)$ echo ".yax" | tr 'n-za-mN-ZA-M' 'a-zA-Z' .lnk

Podemos ver que la cadena .yax al final de cada línea es en realidad la extensión del archivo .lnk (que indica
un enlace o archivo de acceso directo).

Entonces, ¿cuál es la mejor manera de ejecutar el comando tr anterior en todos los archivos en el directorio /
Count/(values) ? Podemos volver al bucle bash corto que presentamos en la sección Visualización de
archivos de esta guía:

barry@forensicbox:...(valores)$ para archivo en *


>
hacer > echo $archivo | tr 'n-za-mN-ZA-M' 'a-zA-z' > hecho

UEME_CTLSESSION
UEME_CTLCUACuenta:ctor
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Windows Fax and Scan.lnk
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\XPS Viewer.lnk
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Accesorios \\Paint.lnk
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Accesorios\\Conexión a escritorio remoto.lnk

308
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Accesorios\\Herramienta de recorte.lnk
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Accesorios\\Notas adhesivas.lnk
{0139D44E-6AFE-49F2-8AE960-3DAFC }\\Accesorios\\Centro de Bienvenida.lnk
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Accesorios\\Calculadora.lnk
{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}\\Accesorios\\displayswitch.lnk {0139D44E
-6AFE-49F2-8690-3DAFCAE6FFB8}\\Herramientas administrativas\\Administración de equipos.
,ÿ enlace
{9E3995AB-1F9C-4F13-B827-48B24B6C7174}\\TaskBar\\Explorer de Windows.lnk
{9E3995AB-1F9C-4F13-B827-48B24B6C7174}\\TaskBar\\Google Chrome.lnk
{9E3995AB-1F9C-4F13-B824B8246-48B1746-48B1727 }\\TaskBar\\Internet Explorer.lnk
{9E3995AB-1F9C-4F13-B827-48B24B6C7174}\\TaskBar\\Mozilla Firefox.lnk
{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}\\Accesorios\\Accesibilidad\\Ampliar .lnk
{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}\\Accesorios\\Símbolo del sistema.lnk

Para repasar, la primera línea de un bucle bash anterior significa "para cada archivo en el directorio actual
(*), ejecute el siguiente comando echo | tr ", seguido de la palabra clave bash done para cerrar el bucle.

Puede ver en la salida que hemos desofuscado los nombres. La salida desofuscada coincide con la salida
original línea por línea. Esto significa que estos son los mismos (el tercero desde abajo)36:

{9R3995NO-1S9P-4S13-O827-48O24O6P7174}\\\\GnfxOne\\\\Zbmvyyn\ Sversbk.yax
{9E3995AB-1F9C-4F13-B827-48B24B6C7174} \\TaskBar \\Mozilla Firefox.lnk

Esa entrada en particular es para un enlace a Mozilla Firefox. El valor GUID al frente del nombre del archivo
representa la "carpeta conocida"2 FOLDERID_UserPinned . Si queremos ver el contenido o el "valor" de la
entrada, debemos usar el nombre ROT-13 en la línea de comando. Podemos usar xxd para ver los valores
brutos en hexadecimal.

barry@forensicbox:...(valores)$ xxd
\{9R3995NO-1S9P-4S13-O827-48O24O6P7174\}\\\\GnfxOne\\\\Zbmvyyn\Sversbk.yax 00000000:
0000 0000 0400 0000 0000 0 0000 04 ...............
00000010: 0000 80bf 0000 80bf 0000 80bf 0000 80bf ................
00000020: 0000 80bf 0000 80bf 0000 80bf 0000 80bf ................
00000030: 0000 80bf 0000 80bf ffff ffff c03a bc03 .............:..
00000040: f8be d201 0000 0000 ........

Se puede encontrar un recuento de la cantidad de veces que se usó este enlace en el desplazamiento 0x04
(resaltado en amarillo). Así que este enlace fue accedido 4 veces, según esta entrada. La fecha en formato
FILETIME de Windows se puede encontrar en o set 0x3c (resaltado en azul).

Si bien el recuento de accesos en 0x04 es fácil de descifrar, el valor de la fecha de Windows no lo es. Uso un

36Los caracteres de escape adicionales (\) en la salida ofuscada se deben a que el comando ls escapa de los espacios.
El comando echo usado con el comando tr no lo hace.

309
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

pequeño script de python para decodificar el valor del tiempo (la cantidad de bloques de 100 nanosegundos desde
el 1 de enero de 1601). Puede descargar el script de python (WinTime) usando wget:

barry@forensicbox:(valores)$ wget http://www.linuxleo.com/Files/WinTime -O


~/WinTime.py

Dado que actualmente estamos en el punto de montaje regmount , asegúrese de usar la opción wget -O para
escribir el archivo en su directorio de inicio (~/WinTime.py). No desea intentar descargar el archivo en el directorio
actual (es nuestro punto de montaje del registro montado en el fusible).

Una vez que tenga el script, puede copiar el valor hexadecimal y proporcionarlo como argumento a WinTime.py.
Asegúrese de eliminar los espacios del valor (usaremos una forma alternativa de obtener este valor de xxd más
adelante):

barry@forensicbox:~$ python ~/WinTime.py c03abc03f8bed201 Jue 27


de abril 01:45:57 2017

Si realizó una instalación completa de Slackware, Python ya debería estar en su sistema. El comando python
apunta al archivo WinTime.py que nombramos anteriormente con wget -O. El ~ indica que el archivo está en
nuestro directorio de inicio. Esto nos deja con una última hora de ejecución del 27 de abril a las 01:45
aproximadamente. Una educación forense completa con respecto a las entradas del registro, la interpretación de
fechas y horas, y el ajuste de la zona horaria está muy lejos del alcance de esta guía, pero asegúrese de tener en
cuenta la configuración de la hora, las zonas horarias y el sesgo del reloj para cualquier examen forense donde las
fechas sean significativas. Las fechas de archivo y las marcas de tiempo son uno de los escollos del análisis.
Lea sobre el tema por completo antes de hacer cualquier interpretación.

En este punto, es hora de desmontar nuestro archivo de registro montado en fusible. Usaremos el mismo punto de
montaje regmount en el próximo ejercicio.

barry@forensicbox:~$ fusermount -u regmount

10.6.2 Ejercicio de análisis de registro 2: SAM y cuentas

Veamos otro archivo de registro, el subárbol SAM . La colmena SAM puede tener una gran cantidad de información
disponible si hay cuentas locales presentes en el sistema. Una vez más, no vamos a realizar un análisis completo,
solo vamos a echar un vistazo a algunos valores de una de las claves más importantes.

Podemos agarrar la sección SAM de la misma manera que hicimos con NTUSER.DAT, primero buscando la
entrada adecuada de MFT usando fls y luego usando icat para extraer el archivo: )

310
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ fls -Fr -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 | grep


SAM
r/r 178-128-2: Windows/System32/config/SAM

Así que nuestra entrada MFT de destino aquí es 178. Ahora extraeremos con icat y verificaremos el tipo de archivo
nuevamente con el comando de archivo . El nombre del archivo que usamos en el archivo extraído es arbitrario. Nómbralo
como quieras. Sin embargo, la consistencia es una buena idea.

barry@forensicbox:~$ icat -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 178 >


SAM.178

barry@forensicbox:~$ archivo SAM.178


SAM.178: archivo de registro de MS Windows, NT/2000 o superior

Usaremos el punto de montaje SAM para este ejercicio como lo hicimos en el anterior.

barry@forensicbox:~$ montajeregf SAM.178 montajeregf/


montajeregf 20190303

Dado que ya extrajimos el archivo NTUSER.DAT para la cuenta AlbertE , echemos un vistazo a la misma cuenta en el
archivo SAM . Si cambiamos los directorios a SAM/Dominios/Cuenta/Usuarios, veremos la siguiente lista de cuentas
potenciales:

barry@forensicbox:~$ cd regmount/SAM/Dominios/Cuenta/Usuarios/

barry@forensicbox:...Usuarios$ ls
(valores)/ 000001F4/ 000001F5/ 000003E8/ 000003E9/ Nombres/

Lo que vemos en el resultado anterior son una serie de subclaves (aquellas que comienzan con 00000* que representan
el valor hexadecimal de la identificación relativa de la cuenta. Podemos traducirlas con bc, como lo haríamos con
cualquier valor hexadecimal:

eco "ibase=16; 000001F4" | antes de Cristo

Pero hagámoslo todo a la vez con un bucle for para repetir el comando en todos los directorios (pero solo en aquellos que
tienen un valor hexadecimal):

barry@forensicbox:...Usuarios$ por nombre en 00000*


>
hacer > echo "ibase=16; $nombre" | bc
> hecho 500

311
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

501
1000
1001

Si lee sobre las cuentas de Windows, verá que tenemos el administrador del sistema (RID 500), la cuenta de
invitado (RID 501) y un par de cuentas de usuario (1000 y 1001). Hay varias formas de asociar las cuentas con usuarios
particulares, pero simplemente navegaremos a los valores bajo la subclave 000003E8/ .

barry@forensicbox:...Usuarios$ cd 000003E8/\(valores\)/

barry@forensicbox:...(valores)$ ls F
UserPasswordHint V

Tenemos tres "les" aquí para mirar. Un vistazo muy rápido en la parte inferior del archivo V muestra el nombre de usuario
asociado con esta cuenta:

barry@forensicbox:(valores)$ xxd V
...
00000160: 0000 0001 0000 0000 0102 0000 0000 0005 ................
00000170: 2000 0000 2002 0000 0102 0000 0000 0005 ... ...........
00000180: 2000 0000 2002 0000 4100 6c00 6200 6500 ... ...Alba
00000190: 7200 7400 4500 0000 0102 0000 0700 0000 rtE..........
000001a0: 0300 0100 0300 0100 13c4 df6f 671a 70d2 ..........og.p. 000001b0: 0c04 49e1
c16e c39a 0300 0100 0300 0100 ..I..n..........

El texto rojo muestra la cuenta asociada como la de AlbertE. El UserPasswordHint es bastante obvio. Pero echemos un
vistazo al contenido de F:

barry@forensicbox:~$ xxd F
00000000: 0200 0100 0000 0000 678e 5df7 f7c1 d201 ........g.]..... 00000010: 0000 0000
0000 0000 20d7 bf15 76ae d201 ...... .. ...v...
00000020: ffff ffff ffff ff7f 5ce9 5df2 f7c1 d201 ........\.]..... 00000030: e803 0000 0102 0000
1402 0000 0000 0000 .............. ..
00000040: 0000 0700 0100 0000 0000 4876 488a 3600 ..........HvH.6.

A diferencia de los archivos V o UserPasswordHint , F no muestra ningún dato obvio. Lo que está viendo es información
de la cuenta del usuario AlbertE, que incluye:

Última fecha de inicio de sesión: o set 8

Fecha de establecimiento/reinicio de contraseña: o set 24

Último inicio de sesión fallido: o set 40

312
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

...y otra información de la cuenta (número de inicios de sesión, RID, etc.). Nos vamos a concentrar en las fechas
en los intervalos que se muestran arriba. Ya convertimos fechas similares usando el script python WinTime.py .
Podríamos escribir cada valor en la línea de comando y ejecutar el script por separado para cada valor. Sin
embargo, una mejor manera sería usar la línea de comando para darnos solo el valor que queremos y pasar
cada uno al script WinTime.py . Podemos hacer esto con un bash for loop. Y si lee la página del manual para
xxd, verá que también podemos usar diferentes opciones para xxd que nos permitan completar la conversión
de fecha sin tener que copiar el valor hexadecimal.

Veamos qué sucede si ejecutamos xxd con -ps (volcado hexadecimal simple) -s8 (busca el byte 8) -l8 (la salida
tiene una longitud de 8 bytes). El símbolo del sistema se ha truncado nuevamente para mejorar la legibilidad (F
es el "archivo" que estamos viendo):

barry@forensicbox:(valores)$ xxd -ps -s8 -l8 F


678e5df7f7c1d201

Encontramos que la cadena de fecha extraída es exactamente el formato que necesitamos pasar a WinTime.py.
Para pasar la salida, usaremos la sustitución de comandos. Podemos hacer esto usando una subcapa.
Al ejecutar el comando xxd en una subcapa, podemos pasar el valor del comando ejecutado similar a una
variable usando el $. Esto se hace usando $(...) alrededor del comando xxd . Esto sustituye la salida de xxd
directamente al argumento requerido para WinTime.py:

barry@forensicbox:~$ python ~/WinTime.py $(xxd -ps -s8 -l8 F)


dom 30 abr 21:23:09 2017

Esto se puede llevar un paso más allá. Tenemos tres valores de fecha separados para convertir aquí. Uno está
en o set 8 (-s8 como convertimos arriba). Los otros están a 24 y 40 de compensación. Suena como un candidato
perfecto para nuestro ahora familiar bash for loop. Podemos usar los conjuntos 8, 24 y 40 como nuestra
variable, y pasarlos a nuestro comando de sustitución de WinTime.py. Debería verse algo como esto:

barry@forensicbox:(valores)$ para compensación en 8 24 40


> do
> python ~/WinTime.py $(xxd -ps -s$offset -l8 F) > done
dom 30 de abril 21:23:09 2017 jue 6 de abril 01:35:34 2017
dom 30 de abril 21:23:01 2017

En lugar de repetir el comando con -s8, -s24 y -s40, simplemente creamos un bucle con $offset y
proporcionamos los valores 8, 24 y 40 en el bucle. Esto nos da los valores resultantes:

Última fecha de inicio de sesión: dom 30 de abril 21:23:09 2017

313
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Fecha de establecimiento/reinicio de contraseña: jue 6 de abril 01:35:34 2017

Último inicio de sesión fallido: dom 30 de abril 21:23:01 2017

Examinar los archivos de registro de Windows en un entorno de línea de comandos puede no ser el método más simple, pero es
una excelente manera de aprender cómo se analiza un registro y dónde se encuentra la información.

10.6.3 Análisis de aplicaciones: captación previa

Al comprender las advertencias que proporcionamos anteriormente sobre el estado de muchos de los proyectos libio , asegúrese
de explorar algunos de ellos y probarlos. La documentación puede ser escasa en algunos lugares, pero ahí es donde entran la
experimentación y las pruebas. En muchos casos, las bibliotecas se proporcionan para agregar capacidades a otros programas,
las utilidades proporcionadas pueden simplemente exportar información de un artefacto a XML o formato de texto directamente a
la salida estándar. libscca es un ejemplo de esto y se usa para acceder a los archivos de recuperación previa de Windows.

Los archivos de captación previa pueden ser un artefacto forense útil por varias razones. Pueden proporcionar tiempos de ejecución
adicionales para líneas de tiempo, se pueden usar para probar la ejecución del programa incluso cuando se ha eliminado un
ejecutable y se pueden usar para correlacionar otros artefactos creados durante la ejecución. Se puede encontrar más información
en Internet37 .

Echemos un vistazo a un ejemplo rápido, después de instalar libscca:

barry@forensicbox:~$ su -
...
root@forensicbox:~# sboinstall libscca libscca
(analizador de archivos de captura previa de Windows libYAL)

libscca es una biblioteca para acceder al formato de archivo de búsqueda previa de Windows (SCCA).

¿Continuar con libscca? [y]


Limpieza para libscca-20181227...

root@forensicbox:~# salir

Con libscca instalada, busquemos un archivo de búsqueda previa para verlo. Buscaremos en la imagen NTFS archivos que
terminen en .pf. Puede ver que hay bastantes de ellos (la salida está truncada).

37http://www.forensicswiki.org/wiki/Prefetch es un buen comienzo

314
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

barry@forensicbox:~$ fls -Fr -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 | grep


.pf$
r/r 72-128-2: Windows/Prefetch/58.0.3029.81_CHROME_INSTALLER-F06A66AC.pf r/r 73-128-2:
Windows/Prefetch/AUDIODG.EXE-BDFD3029.pf
...
r/r 123-128-2: Windows/Prefetch/NMAP.EXE-69B77167.pf
...
r/r 160-128-2: Windows/Prefetch/WORDPAD.EXE-D7FD7414.pf r/r
161-128-2: Windows/Prefetch/WUDFHOST.EXE-AFFEF87C.pf

Nuestro conocido comando fls se ejecuta, buscando solo archivos, de forma recursiva (-Fr) en el sistema de archivos en
o set 2048 (-o 2048) en nuestros archivos NTFS EWF. Usando grep, buscamos .pf al final de la línea (significado por \$).
La lista es larga, pero veremos el archivo de captación previa NMAP.EXE (entrada MFT 123-128-2). Podemos extraer el
archivo de la imagen con icat:

barry@forensicbox:~$ icat -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 123 >


nmap.pf.123

Echemos un vistazo rápido al encabezado del archivo con xxd. Inmediatamente puede ver por qué la biblioteca que
acabamos de instalar se llama libscca. El encabezado de captación previa tiene una longitud de 84 bytes con la versión
en 0x00 de compensación y el encabezado SCCA en 0x041 de compensación.

barry@forensicbox:~$ xxd -l 84 nmap.pf.123 00000000:


1700 0000 5343 4341 1100 0000 aeaa 0000 ....SCCA........
00000010: 4e00 4d00 4100 5000 2e00 4500 5800 4500 NMAP..EXE
00000020: 0000 0200 0000 0000 d935 a382 c07b 719d .........5...{q. 00000030: bb36 a382
0100 0000 483d 4087 1100 0000 .6......H=@..... 00000040: 483d 4087 c029 3685 0000
0000 6771 b769 H=@..)6.....gq. yo 00000050: 0000 0000
....

Algunas de las características que podemos encontrar (tenga cuidado con el orden de los bytes):

versión de captación previa = 0x0017 (Versión 23 - Windows 7)


Encabezado SCCA = 0x5343 0x4341 (SCCA) nombre
ejecutable = 0x4e 0x4d 0x41 0x50 0x2e 0x45 0x58 0x45 (NMAP.EXE) prefetch hash = 0x69b7
0x7167 (coincide con el hash en el nombre de archivo .pf )

El último tiempo de ejecución se puede encontrar en el conjunto 128 en el archivo de búsqueda previa (8 bytes de largo),
y podemos usar WinTime.py nuevamente para descifrarlo:

barry@forensicbox:~$ python WinTime.py $(xxd -s 128 -l8 -ps nmap.pf.123)


jue 6 abr 15:07:20 2017

315
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Con suficiente información sobre el formato, podría pasar mucho tiempo analizando el archivo.
Hay otra información almacenada dentro, incluidas bibliotecas y otros archivos a los que se accede cuando el
se inicia el ejecutable. Pero a partir de aquí usaremos sccainfo de libscca para ver el archivo de captación previa
contenido, que es bastante extenso.

barry@forensicbox:~$ sccainfo nmap.pf.123


sccainfo 20181227

Información del archivo de recuperación previa de Windows (PF):


Versión de formato : 23
Hachís de captación previa : 0x69b77167
Nombre de archivo ejecutable : NMAP.EXE
Ejecutar cuenta :9
Tiempo de última ejecución: : 6 de abril de 2017 15:07:20.470652700 UTC

Nombres de archivo:

Número de nombres de archivo : 53


Nombre de archivo: 1 : \DISPOSITIVO\VOLUMEN DE DISCO DURO2\WINDOWS\SYSTEM32\NTDLL.DLL
Nombre de archivo: 2 : \DISPOSITIVO\VOLUMEN DE DISCO DURO2\WINDOWS\SYSTEM32\KERNEL32.DLL
...
Volúmenes:
Número de volúmenes :1

Volumen: 1 información:

Ruta del dispositivo : \DISPOSITIVO\VOLUMEN DE DISCO DURO2


Tiempo de creación : 6 de abril de 2017 04:48:55.209910400 UTC
Número de serie : 0x5019050c

Existen numerosas utilidades disponibles para los usuarios de Linux que se pueden encontrar para ayudar en el análisis
archivos, artefactos y otros datos recuperados de computadoras que ejecutan sistemas operativos distintos
que Linux. Hay, de hecho, demasiados para enumerarlos aquí. A veces es simplemente una cuestión de
encontrar un proyecto de código abierto comparable: como usar LibreOffice para ver Microsoft O ce o
Visio les. También están las utilidades simples que están preinstaladas o se instalan fácilmente
en su distribución de Linux, como catdoc o herramientas como pdfinfo y exiftool para leer archivos
metadatos Hay demasiados para enumerarlos aquí, pero baste decir que en los últimos años
El análisis de la capa de aplicación se ha vuelto mucho más fácil en Linux.

316
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

11 herramientas básicas de investigación de redes

En las secciones anteriores hemos cubierto una gran cantidad de herramientas que nos permiten adquirir y
examinar imágenes de disco y volúmenes del sistema de archivos. Sin embargo, hoy en día ese no es
generalmente el límite del apoyo a la investigación. A menudo nos encontramos en el ámbito en línea, donde
necesitamos hacer resolución de nombres, investigaciones de direcciones IP y otras consultas de red.
Regularmente necesitamos encontrar información de contacto para el proceso legal para obtener suscriptor,
registrador y otra información de cuenta en línea relacionada con víctimas de delitos y perpetradores.

En este capítulo, cubriremos algunas herramientas básicas que le permitirán responder algunas de las preguntas
comunes sobre cuentas en línea, direcciones y otros recursos.

Para muchas de estas búsquedas fundamentales, podemos usar sitios web informativos como
centralops.net o cualquiera de los sitios de WHOIS. Pero, ¿por qué volver a abrir un navegador web y escribir
cuadros de diálogo cuando puede ejecutar fácilmente un comando simple para obtener el mismo resultado (y a
menudo más limpio)? Además, con los argumentos de la línea de comandos, puede redirigir más fácilmente la
salida a un archivo para tomar notas de forma sencilla.

11.0.1 Búsqueda de direcciones IP

Una de las tareas de investigación de red más comunes que encontramos es una simple búsqueda del Servicio
de nombres de dominio (DNS) para asociar un nombre de dominio con una dirección IP. Este es el registro DNS
'A' para un dominio. Hay varias herramientas que le proporcionarán esta información. Veremos el comando
host , nslookup y dig.

El comando host está disponible en la mayoría de los sistemas operativos y en Linux es tan fácil de usar como
en cualquier otra plataforma. Puede especificar el 'tipo' de registro DNS que desea buscar con -t. Por ejemplo,
para obtener el registro 'A' (dirección) de linuxleo.com:

barry@forensicbox:~$ host -t A linuxleo.com linuxleo.com tiene


la dirección 74.208.236.144

El comando nslookup se considera 'obsoleto', pero lo mostraremos aquí para completarlo, ya que todavía se
usa ampliamente (dig es la herramienta de búsqueda de DNS preferida). nslookup proporciona una salida
similar (aunque algo más detallada):

barry@forensicbox:~$ nslookup linuxleo.com Servidor:


192.168.86.1
Dirección: 192.168.86.1#53

Respuesta no autorizada:
Nombre: linuxleo.com
Dirección: 74.208.236.144

317
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

La información del servidor y la dirección en la parte superior de la salida de nslookup proviene de la puerta
de enlace de la red que aparece en el archivo /etc/resolv.conf (en este caso, la puerta de enlace también
es nuestro servidor DNS, como lo indica el #53 para el DNS estándar Puerto).

También podemos usar el comando dig , otra herramienta de consulta de DNS con toneladas de flexibilidad
incorporada y un poco más de funcionalidad que host o nslookup. Para un uso simple, podemos pasar a
cavar el nombre de host que queremos buscar:

barry@forensicbox:~$ cavar linuxleo.com A

; <<>> DiG 9.16.5 <<>> linuxleo.com A ;; opciones


globales: +cmd ;; Tengo respuesta: ;; ->>HEADER<<-
código de operación: CONSULTA, estado: NOERROR,
id: 46296 ;; banderas: qr rd ra; CONSULTA: 1, RESPUESTA: 1, AUTORIDAD: 0,
ADICIONAL: 1

;; PSEUDOSECCIÓN
OPCIONAL: ; EDNS: versión: 0, banderas:; upp: 512 ;;
SECCIÓN DE PREGUNTAS: ;linuxleo.com.
EN UN

;; SECCIÓN DE RESPUESTAS:
linuxleo.com. 3599 EN UN 74.208.236.144

;; Tiempo de consulta: 54 ms ;;
SERVIDOR: 10.0.2.3#53(10.0.2.3)
;; CUÁNDO: lun 07 sep 17:01:01 EDT 2020 ;; TAMAÑO
DEL MENSAJE recibido: 57

Hemos usado el comando dig anterior con el nombre de dominio que queremos buscar
(linuxleo.com) y A para obtener el registro A (dirección). Busque en la SECCIÓN DE RESPUESTAS la
dirección IP que estamos buscando.

Dado que el registro A es el predeterminado de todos modos, realmente no necesita pasar ese argumento. Y
si desea llegar a una respuesta simple sin todo el ruido adicional, puede pasar la opción de comando +breve
para mostrar solo la respuesta a la consulta específica que se está realizando.

barry@forensicbox:~$ cavar linuxleo.com +corto 74.208.236.144

¿Qué pasa con su propia dirección IP? Por supuesto, ya aprendimos cómo determinar la dirección IP local de
una máquina con el comando ip addr . Si quiero saber cuál es mi dirección IP pública, puedo usar varios
métodos. Una de las más sencillas es consultar la URL ifconfig.me usando un comando de red simple
llamado curl. curl es una utilidad utilizada para transferir datos a través de una red. En este caso simplemente
lo usamos para solicitar información el

318
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

nosotros [presentamos] a los servidores que visitamos. Un uso simple es solo el comando con la URL ifconfig.me
como argumento:

barry@forensicbox:~$ curl ifconfig.me


98.233.62.28

Saber qué dirección IP presenta al mundo exterior puede ser importante si desea verificar que su VPN funcione
correctamente o que no se revele como originario de una dirección IP que preferiría no mostrar en los registros
de alguien.

11.0.2 Búsqueda de intercambio de correo

Buscar registros de direcciones IP es solo una parte del rompecabezas en muchos casos. Las direcciones de
correo electrónico muy a menudo juegan en las investigaciones. Al preparar el proceso legal para obtener
información de la cuenta de correo electrónico de un proveedor, querrá asegurarse de saber a quién enviarla.
Una cuenta de correo electrónico sospechosa del dominio comcast.net probablemente requerirá que envíe el
proceso a comcast.net, pero ¿puede estar siempre seguro de que cada dominio maneja su propia entrega de correo electrónico?
Para verificar quién maneja el intercambio de correo electrónico para un dominio determinado, verificamos los
registros DNS 'MX'.

Esto se puede hacer con las herramientas que ya hemos presentado. Tanto para el comando de host como para
el comando de excavación , simplemente debe especificar que desea ver los registros MX para un dominio
determinado. Usaremos la opción +short para una salida abreviada con dig.

barry@forensicbox:~$ host -t MX linuxleo.com El


correo de linuxleo.com es manejado por 10 mx01.1and1.com.
El correo de linuxleo.com es manejado por 10mx00.1and1.com.

barry@forensicbox:~$ cavar linuxleo.com MX 10


mx01.1and1.com.
10mx00.1and1.com.

En ambos casos vemos que el correo electrónico para el dominio linuxleo.com en realidad es manejado
por "1and1". Esto es muy común para las empresas de alojamiento, por supuesto. Pero también lo verá para
grandes instituciones que usan Google, Inc. u otras soluciones empresariales para sus necesidades de red
(Google lo llama 'G Suite'). University College Dublin (ucd.ie) es un ejemplo:

barry@forensicbox:~$ cavar ucd.ie MX +corto 10


aspmx3.googlemail.com. 5 alt2.aspmx.l.google.com.
5 alt1.aspmx.l.google.com. 10 aspmx2.googlemail.com.
1 aspmx.l.google.com.

319
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Entonces vemos que UCD en realidad usa Gmail para sus servicios de correo electrónico.

11.1 Datos Whois

Conocer la dirección IP o el nombre de dominio es parte de la información. También necesitamos saber


quién es el registrante y quizás el registrador. Esto también nos ayuda a identificar a quién podríamos
necesitar para notificar el proceso legal para obtener pistas adicionales.

Al igual que con dig and host, etc., la mayoría de los investigadores usan sitios web como el centralops.net
mencionado anteriormente. para buscar esta información. Simplemente usaremos whois en la línea de
comando. Veamos de nuevo linuxleo.com. Ya conocemos la dirección IP (74.208.236.144), y también
sabemos que el correo electrónico lo maneja "1and1". Ahora echemos un vistazo a los datos de whois .
Pasaremos esto por menos para que sea más legible y usaremos la opción -H para suprimir las advertencias
legales. El resultado que se muestra a continuación está abreviado.

barry@forensicbox:~$ whois linuxleo.com | menos

Nombre de Dominio: LINUXLEO.COM


ID de dominio del registro: 1243007046_DOMAIN_COM-VRSN
Servidor WHOIS del registrador: whois.ionos.com URL del
registrador: http://www.ionos.com Fecha de actualización:
2019-09-28T07:32:07Z Fecha de creación: 2007-09-27T17:03
:33Z Fecha de vencimiento del registro: 2020-09-27T17:03:33Z
Registrador: 1&1 IONOS SE Registrador IANA ID: 83 Correo
electrónico de contacto de abuso del registrador:
abuse@ionos.com Teléfono de contacto de abuso del
registrador: +1.6105601459 Estado del dominio:
clientTransferProhibited https:// icann.org/epp# ,ÿ
clientTransferProhibited

Servidor de nombres: NS1066.UI-DNS.BIZ


...
Nombre de dominio: linuxleo.com
ID de dominio del registro: 1243007046_DOMAIN_COM-VRSN
Servidor WHOIS del registrador: whois.ionos.com URL del
registrador: http://ionos.com Fecha de actualización:
2018-03-14T14:06:51.000Z Fecha de creación: 2007-09-27T17:03:
33.000Z
Registrador Fecha de vencimiento del registro: 2020-09-27T17:03:33.000Z Registrador:
1&1 IONOS SE Registrador IANA ID: 83 Correo electrónico de contacto de abuso del
registrador: abuse@ionos.com Teléfono de contacto de abuso del registrador:
+1.8774612631 Registro ID del registrante: ELIMINADO POR PRIVACIDAD Registrante
Nombre: CENSURADO POR PRIVACIDAD

320
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Organización registrante: 1&1 Internet Inc


Calle del registrante: CENSURADO POR PRIVACIDAD
Ciudad del registrante: ELIMINADO POR PRIVACIDAD
Estado/provincia del registrante: PA
Código postal del registrante: CENSURADO POR PRIVACIDAD
País del registrante: EE. UU.
...

Algunos bits obvios de información se muestran aquí. El registrador es IONOS, y el dominio se registró en
2007, lo que nos da un poco de historia del dominio. El registrante (el probable propietario) se establece como
PRIVADO, lo cual es muy común. Sin embargo, esto brinda suficiente información sobre el dominio para
permitirnos realizar un seguimiento de cualquier proceso de investigación permitido en su jurisdicción.

11.2 Búsqueda de direcciones MAC

Podemos completar esta sección sobre la recopilación de información de red pasiva observando las direcciones
de control de acceso a medios (MAC). La dirección MAC es una dirección 'física' dada a una interfaz de red
que opera en un nivel diferente al de la dirección IP. Junto con las direcciones IP, las direcciones MAC son
parte del modelo OSI que estandariza los modelos de comunicación para redes.
38 .

Las direcciones MAC son utilizadas por enrutadores y otros dispositivos de red para ayudar a identificar
correctamente el tráfico de red y dirigir los paquetes al destino adecuado (consulte el Protocolo de resolución
de direcciones para obtener más información). Las direcciones MAC a menudo se registran en registros para
su uso en la resolución de problemas y la depuración de la red. También son herramientas de investigación
útiles, que quizás permitan a un investigador diferenciar dos dispositivos diferentes conectados a un punto de
acceso inalámbrico, por ejemplo. Esto se debe a que las direcciones MAC son "específicas del proveedor" y
están estandarizadas por IEEE para las interfaces de comunicación, incluidas las inalámbricas, Bluetooth y
Ethernet. Podemos usar una lista publicada por IEEE de identificadores únicos organizacionales para ayudar a
determinar el fabricante de una interfaz de red a partir de la dirección MAC que se encuentra en los registros.

Primero descargamos el archivo oui.txt , una lista de identificadores MAC para fabricantes registrados, de
IEEE. Luego buscamos los primeros valores hexadecimales en la dirección MAC. Podemos usar nuestra
propia dirección MAC de interfaz de red como en el siguiente ejemplo:

Descargar oui.txt:

barry@forensicbox:~$ wget http://standards-oui.ieee.org/oui.txt --2020-09-07


21:48:42-- http://standards-oui.ieee.org/oui. txt Resolviendo standards-
oui.ieee.org (standards-oui.ieee.org)... 140.98.223.27

38El modelo OSI es una parte importante para comprender cómo interoperan las redes. sugiero fuertemente
familiarizándose con él.

321
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Conectando a standards-oui.ieee.org (standards-oui.ieee.org)|140.98.223.27|:80...


,ÿ conectado.

Solicitud HTTP enviada, esperando respuesta... 200 OK


Longitud: 4526692 (4.3M) [texto/sin formato]
Guardando en: 'oui.txt'

oui.txt 100 %[==============================>] 4,32 M 1,60 MB/s en 2.7s

2020-09-07 21:48:45 (1,60 MB/s) - 'oui.txt' guardado [4526692/4526692]

Esto coloca el archivo oui.txt de información de la dirección MAC en nuestro directorio actual. Por ejemplo,
podemos buscar la dirección MAC de nuestra interfaz de red actual. En este caso, mi interfaz actual es un
dongle USB de red inalámbrica. Usaré el comando ip addr para encontrar el MAC (resaltado en rojo).

barry@forensicbox:~$ / sbin/ip addr show wlan0 3: wlan0:


<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
enlace/ether 9c:ef:d5:fd:aa:ce brd ff:ff:ff:ff:ff:ff inet 192.168.86.22/24
brd 192.168.86.255 ámbito dinámica global
...

Usando los primeros tres números hexadecimales (sin los dos puntos de separación), puedo grep el archivo
oui.txt para encontrar el fabricante de mi interfaz de red:

barry@forensicbox:~$ grep -i 9cefd5 oui.txt 9CEFD5 (base


16) panda inalámbrico, inc.

Y en este caso la salida es correcta. La interfaz de red se identifica como un dongle Panda Wireless. La utilidad
de esta información varía, pero en algún momento probablemente necesitará resolver una dirección MAC con
un fabricante. Esta es una forma sencilla de hacerlo.

Esta ha sido una breve introducción a algunas de las herramientas de red más básicas que podemos usar
desde la línea de comandos. Hay un énfasis en 'breve' aquí porque este capítulo apenas araña la superficie de
las capacidades de reconocimiento de red de la línea de comandos de Linux.
Slackware viene con nmap incorporado para escanear hosts y bloques de red, y hay herramientas como dnsmap
y dmitry disponibles en los repositorios de software. Al usar estas herramientas, asegúrese de tener los permisos
adecuados para escanear y reconocer las redes a las que se dirige, incluso para practicar.

Atrás quedaron los días en los que el análisis forense de 'caja muerta' por sí solo podía ayudarlo como
examinador/investigador. Un conocimiento básico de las investigaciones de redes es ahora un requisito para el éxito.

322
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

12 Integración de Linux con su trabajo

Esta guía ha cubierto una gran cantidad de temas que realmente solo tocan la superficie de las capacidades
de la línea de comandos de Linux como plataforma forense. Y si bien es una guía extensa, solo imparte un
conjunto básico de comandos y utilidades para permitirle aprender y crecer como examinador forense o
investigador digital. El verdadero poder de Linux (como heredero del mismo UNIX) está en pensar en UNIX.
Cuanto más utilice los comandos y se acostumbre a los resultados que presentan, más aprenderá a
encadenarlos, resolviendo problemas cada vez más complejos de manera rápida y eficiente. Obtener una
comprensión sólida de los comandos, el historial de comandos, las canalizaciones y la redirección es un
proceso liberador.

Algunos de los ejercicios repetidos que hemos hecho aquí fueron diseñados para iniciar la repetición
necesaria para anclar el proceso de la línea de comandos en la memoria. Sin embargo, no es realista
esperar que todos se conviertan repentinamente a Linux y renuncien a otros sistemas operativos para
el análisis forense. Linux es, al final del día, solo otra plataforma y conjunto de herramientas. Mantengo
que es un conjunto de herramientas útiles, y que hay algo de valor en que cada examinador al menos
se familiarice con él y las herramientas que proporciona. Hemos hablado sobre cómo las herramientas
de línea de comandos que hemos encontrado aquí (y hay muchas más) son únicas en comparación con
las herramientas comunes de Windows. Gran parte de esta diferencia surge del hecho de que
generalmente están diseñados con el enfoque UNIX de "hacer una cosa y hacerlo bien". Vemos esto en
herramientas como grep, head, tail, tr, sed y utilidades como icat, blkls y catdoc. Proporcionan una
salida discreta cuando se ejecutan por sí solos, pero a medida que comienza a conectarlos, terminamos
realizando varios pasos en la misma línea de comando. Esto se vuelve muy poderoso no solo cuando
aprende de lo que es capaz cada herramienta, sino también cuando comienza a pensar en términos de
una línea de comando modular. Sin embargo, aprender y recordar todo esto significa una mayor carga
para los recursos del examinador. Y así, una de las fortalezas de Linux es también, de hecho, una de
sus debilidades cuando se trata de un atractivo masivo en la comunidad forense.

Entonces, ¿cómo continuamos usando Linux, mantenemos lo que hemos aprendido y continuamos
aprendiendo, sin dejar de ser eficientes? Aquí hablaremos sobre cómo puede integrar una plataforma Linux
en su laboratorio actual o procesos de examen y continuar usándola, si no a diario, al menos lo suficiente
para mantener (y continuar aumentando) las habilidades que hemos presentado aquí.

Hemos visto herramientas en esta guía que se pueden usar para acceder a datos de archivos, datos del
sistema de archivos, información de volúmenes e información de bloques, etc. Se puede hacer rápidamente
y sin necesidad de licencias o recursos excesivos para cargar y ver información específica. . Ser capaz de
lograr esto en una imagen de disco completa o bloques de datos separados (como la salida no asignada de
blkls, por ejemplo), e incluso archivos individuales, hace de Linux una plataforma excelente tanto para la
validación de herramientas como para la verificación cruzada de hallazgos.

La validación, en este contexto, puede verse como la comparación de la salida de diferentes herramientas
para probar funciones de software específicas (o en algunos casos, funciones de hardware) y, con suerte,
determinar que la salida esperada realmente se produzca. Si su laboratorio u organización tiene estándares
de validación para software y hardware forense, puede fortalecerlos no solo con rmando

323
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

ing funciones similares en múltiples herramientas, pero comparando el resultado de la herramienta que se está
probando (una función de software comercial en Windows, por ejemplo) con una herramienta de código abierto en
un sistema operativo alternativo (y también de código abierto). La validación concluyente de la salida funcional es
mucho más fácil de atribuir a los resultados de las pruebas cuando esos resultados provienen de sistemas
completamente diferentes. Linux puede proporcionar ese entorno en el que se ejecutan herramientas separadas
en un kernel y entorno de sistema operativo completamente diferente, eliminando cualquier posible apariencia de
interferencia.

También podemos usar Linux para verificación cruzada. En aquellos casos en los que encuentre evidencia
específica con una de sus herramientas forenses comerciales estándar, puede verificar esos resultados
comparándolos en un sistema operativo alternativo con herramientas alternativas. Esto no es lo mismo que la
validación. En este caso no estamos probando una función, estamos con rmando un hallazgo. Por ejemplo, puede
encontrar un archivo o conjunto de archivos relacionados con una investigación. Los archivos se encontraron en
un volumen en particular, en un bloque (o grupo) en particular que estaba asociado con una entrada de metadatos
en particular (por ejemplo, MFT). Ejecutar mmls, blkstat e ifind, etc. puede ayudarnos a verificar esos hallazgos
tomados de una herramienta comercial. En los casos en que los datos recuperados puedan ser cuestionados o su
proceso de recuperación inspeccionado, tener esta verificación cruzada puede hacer que los argumentos en contra
de sus procedimientos o herramientas sean más difíciles.

Como un ejemplo muy simple, veamos el archivo de registro SAM en el que trabajamos en la sección que cubre el
análisis de la capa de aplicación. Si comúnmente usamos Windows como nuestra plataforma forense estándar,
podríamos extraer archivos de registro con FTK de Access Data y usar herramientas como RegRipper para
analizarlos. Si ese fuera el caso con el archivo SAM que examinamos anteriormente, es posible que haya
encontrado la siguiente información: Al analizar el archivo en busca de datos de usuario, es posible que

Figura 27: archivo SAM examinado con una herramienta común de Windows

nd que el último inicio de sesión para el usuario AlbertE es fundamental para nuestro caso y los datos encontrados
podrían aparecer en el testimonio. El resultado de nuestro análisis de registro principal muestra lo siguiente
(resultado de un examen con herramientas de Windows):

324
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Nombre de usuario : Alberto E [1000]


Nombre completo :
Comentario del usuario :
Tipo de cuenta : Usuario administrador predeterminado

Cuenta creada: jueves 6 de abril 01:35:32 2017 Z


Nombre :
Sugerencia de contraseña: InitialsInCapsCountToFour
Última fecha de inicio de sesión: dom 30 de abril 21:23:09 2017 Z
Fecha de restablecimiento de Pwd: jueves 6 de abril 01:35:34 2017 Z
Fecha de error de Pwd: dom 30 de abril 21:23:01 2017 Z
Recuento de inicios de sesión :7

Debido a la importancia de esta evidencia en particular para el caso, decidimos cotejar


la salida usando herramientas completamente ajenas bajo Linux (cubrimos los pasos anteriormente).
Mirando la entrada de MFT con el istat de TSK , podemos verificar la información que se encuentra en nuestro Windows
software. El siguiente comando istat con rma las fechas y la hora del archivo, el tamaño y la
ubicación del archivo.

barry@forensicbox:~$ istat -o 2048 NTFS_Pract_2017/NTFS_Pract_2017.E01 178


Valores de encabezado de entrada de MFT:

Entrada: 178 Secuencia: 1


...
Creado: 2017-05-01 09:00:42.659179200 (EDT)
Archivo modificado: 2017-05-01 12:39:35.889046400 (EDT)
MFT Modificado: 2017-05-01 09:00:42.676485200 (EDT)
Consultado: 2017-05-01 09:00:42.676286700 (EDT)

Valores del atributo $FILE_NAME:


Banderas: Archivo
Nombre: SAM
Entrada principal de MFT: 69 Secuencia: 1
Tamaño asignado: 262144 Tamaño real: 262144
Creado: 2017-05-01 09:00:42.659179200 (EDT)
Archivo modificado: 2017-05-01 12:39:35.889046400 (EDT)
MFT Modificado: 2017-05-01 09:00:42.676286700 (EDT)
Consultado: 2017-05-01 09:00:42.676286700 (EDT)

Atributos:
Tipo: $STANDARD_INFORMATION (16-0) Nombre: N/A Tamaño del residente: 48
Tipo: $FILE_NAME (48-4) Nombre: N/A Tamaño del residente: 72
Tipo: $SECURITY_DESCRIPTOR (80-1) Nombre: N/A Tamaño del residente: 80
Tipo: $DATA (128-2) Nombre: N/A No residente tamaño: 262144 init_size: 262144
95487 95488 95489 95490 95491 95492 95493 95494
95495 95496 95497
...

325
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Tenga en cuenta que los tiempos son diferentes. Obviamente esto se debe a la aplicación de zonas horarias.
Las diferencias en la salida no descalifican como verificación cruzada si puede explicar por qué ocurre la diferencia.
Esta es la base para saber cómo funciona su software.

Si observamos el resultado del análisis del registro del software de Windows, podemos verificarlo con los comandos
que usamos anteriormente (consulte la sección 10.6.2 (Análisis de SAM) en la página 310 para refrescar la información):

barry@forensicbox:(valores)$ xxd F
00000000: 0200 0100 0000 0000 678e 5df7 f7c1 d201 ........g.]..... 00000010: 0000 0000
0000 0000 20d7 bf15 76ae d201 .... .... ...v...
00000020: ffff ffff ffff ff7f 5ce9 5df2 f7c1 d201 ........\.]..... 00000030: e803 0000 0102 0000
1402 0000 0000 0000 .............. ..
00000040: 0000 0700 0100 0000 0000 4876 488a 3600 ..........HvH.6.

Última fecha de inicio de sesión: o set 8

barry@forensicbox:(valores)$ python ~/WinTime.py $(xxd -ps -s8 -l8 F)


dom 30 abr 21:23:09 2017

Entonces, con unos simples pasos, hemos con rmado un resultado crítico, usando diferentes herramientas en una
plataforma diferente, lo que esperamos pueda fortalecer cualquier testimonio que se nos solicite dar sobre los hallazgos.

La verificación cruzada también se puede utilizar para con rmar el primer y más importante paso de cualquier proceso
forense: la adquisición y el manejo adecuado de las pruebas recopiladas. Podemos verificar los hashes de medios, los
hashes de colección o la identificación de medios de otras herramientas.

Si puede encontrar una manera de agregar Linux a su flujo de trabajo, podría mantener sus habilidades actualizadas,
aprender habilidades adicionales y tal vez incluso aprender a automatizar parte de este flujo de trabajo a través de
secuencias de comandos. Hay varias formas de implementar Linux en su trabajo, incluidas máquinas virtuales,
estaciones de trabajo independientes y distribuciones de arranque.

Las máquinas virtuales (VM) están creciendo en popularidad y lo han estado haciendo durante años. Hay opciones
gratuitas (como VirtualBox Qemu) que son bastante sólidas y ofrecen excelentes opciones de compatibilidad y
configuración para un examinador forense. Puede ejecutar una VM en su estación de trabajo forense principal y
proporcionarle acceso a carpetas y archivos de evidencia, lo que permite una interfaz directa entre la herramienta y la
imagen de destino. Las máquinas virtuales también tienen una función de "instantánea" para que cuando se complete
el trabajo, se pueda restaurar una instantánea de un sistema operativo limpio y actualizado periódicamente. También
tenga en cuenta que las máquinas virtuales se pueden ejecutar de la otra manera que normalmente ejecuto Windows
en una máquina virtual en una estación de trabajo física Slackware Linux. La razón por la que hago esto destaca uno
de los inconvenientes del acceso directo al hardware del uso de VM. Una máquina virtual VirtualBox, por ejemplo,
permitirá conexiones a través de un controlador USB virtual. Sin embargo, hay ocasiones en las que me gustaría
consultar dispositivos conectados directamente sin necesidad de un puente virtual. Prefiero

326
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

use Linux para eso, por lo que Windows queda relegado a una VM y Slackware tiene acceso directo al
hardware. Eso, sin embargo, es una cuestión de preferencia personal.

La otra forma obvia de ejecutar Linux es tener una estación de trabajo dedicada real. Esto es bueno si
tiene uno que pueda dedicar al propósito, y alivia los problemas de interrogación y acceso al hardware
antes mencionados. Una estación de trabajo completa es especialmente útil cuando se desea validar o
realizar una verificación cruzada de la identificación o enumeración del hardware. Tener una estación
de trabajo física requiere más recursos monetarios y puede requerir más esfuerzo de configuración para
hardware exótico o menos común, pero también brinda el acceso forense más completo para que el
sistema operativo interactúe con el hardware adjunto.

La última forma en que puede continuar usando Linux es a través de una distribución de arranque. Estos
siempre son útiles para los momentos en los que es posible que necesite iniciar una computadora en
cuestión para adquirir evidencia o incluso realizar un examen limitado sin imágenes de medios internos.
Usamos este enfoque en nuestro ejercicio "dd over the wire". Hay una serie de buenas distribuciones
de arranque disponibles adecuadas para uso forense. Descargue un par, pruébelos y vea cuál funciona
mejor para usted. Puede ser una buena idea tener varias versiones diferentes para diferentes escenarios
o configuraciones de hardware. Dos variantes de arranque de Linux que vienen a la mente de inmediato
son Caine y Kali Linux:

Caín: http://www.caine-live.net/ Kali: https://


www.kali.org/

327
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

13 Conclusión

Los ejemplos y ejercicios prácticos que se le presentan aquí son relativamente simples. Hay formas
más rápidas y poderosas de lograr algo de lo que hemos hecho en este documento. Los pasos dados
en estas páginas le permiten usar herramientas y utilidades comunes de Linux que son útiles para
los principiantes. También hemos incorporado herramientas y ejercicios más avanzados para agregar
algo de aplicabilidad en el "mundo real".

Una vez que se sienta cómodo con Linux, puede ampliar los comandos para abarcar muchas más
opciones. La práctica te permitirá sentirte cada vez más cómodo con la combinación de comandos
para realizar tareas que nunca creíste posibles con una carga predeterminada del sistema operativo
(¡y en la línea de comandos para arrancar!). La única forma de dominar la línea de comandos es
usándola. Y una vez que llegue allí, es posible que le resulte difícil volver.

Espero que su tiempo dedicado a trabajar con esta guía haya sido una inversión útil. Como mínimo,
espero que le haya dado algo que hacer, en lugar de mirar fijamente a Linux por primera vez y
preguntarse "¿y ahora qué?".

328
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

14 Soporte Linux

Aparte de las abundantes referencias a sitios web a lo largo de este documento, hay una serie de sitios muy básicos
que puede visitar para obtener más información sobre todo, desde ejecutar Linux hasta el uso de herramientas
forenses específicas. Aquí hay una muestra de algunos de los sitios más informativos que encontrará:

14.1 Lugares a los que acudir para recibir asistencia

Slackware. Solo una de las muchas distribuciones de Linux.


http://www.slackware.com

Aprenda Slackware (Slackware Linux


Essentials): https://slackbook.org/beta/

La fuente oficial "uno cial" de asistencia en línea es el foro de Slackware en


linuxquestions.org:

http://www.linuxquestions.org/questions/slackware-14/

Wiki Kit de detective:


http://wiki.sleuthkit.org Foro del kit
de detective: https://
sleuthkit.discourse.group/

El Proyecto de Documentación de Linux


(LDP): http://www.tldp.org

Además de la lista anterior, hay una gran cantidad de foros de usuarios, algunos de los cuales son especí cos para
Linux y análisis forense informático:

http://www.forensicfocus.com

IRC (chat de retransmisión por Internet):

Pruebe ##slackware en la red Freenode (u otro canal adecuado para la distribución de Linux que elija).

Una búsqueda en Google será su mejor amigo en la mayoría de los casos.

329
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Lista de Figuras

1 XFCE con volumen USB Win10Image insertado. . . .... . ... . ... . . . 42

2 Haga clic con el botón derecho en el menú contextual para montar en disco [XFCE] . . . . ... . ... . . . 43

3 Diálogo de medios extraíbles XFCE . . ... . ... . .... . ... . ... . . . 44

4 Instalación- netconfig . . .... . ... . ... . .... . ... . ... . . . 71

5 NetworkManager: conexión Ethernet. . ... . .... . ... . ... . . . 73

6 NetworkManger: conexión inalámbrica. . . ... . .... . ... . ... . . . 73

7 Detalles del hardware en una etiqueta de unidad. . . . . ... . .... . ... . ... . . . 110

8 Ejemplo de diagrama de adquisición de red. . . ... . .... . ... . ... . . . 149

9 Visualización de una imagen con una extensión que no coincide. . . . . . . . . .... . . 200

10 Un ejemplo de capas y su contenido asociado basado en el trabajo de Carrier. 226

11 La imagen producida por la pantalla cuando se usa directamente desde icat . . . . . . . . 242

12 El conjunto de sectores en able2.dd donde se encontró el resultado de la búsqueda. . . . . . . . . . 249

13 El volumen compensado en able2.dd donde se encontró el resultado de la búsqueda. . . . . . . . . 250

14 El desplazamiento a la palabra clave en el volumen. . . . . .... . ... . ... . . . 250

15 Identificación del bloque de datos de la palabra clave . . . . . .... . ... . ... . . . 251

16 Cálculo único para identificar el bloque de datos de la palabra clave. . . . . . . . . . 252

17 Un ejemplo simple de cómo se usa blkcalc para determinar la dirección original de


una unidad de datos sin asignar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

18 Captura de pantalla de LibreO ce viendo un documento de MS O ce recuperado. . . . . . 275

19 Visualización de archivos tallados con geeqie . . . . . . ... . .... . ... . ... . . . 292

20 qphotorec - interfaz gráfica de usuario para photorec .. . . . . .... . ... . ... . . . 294

21 menú principal de photorec . . . . . . . .... . ... . .... . ... . ... . . . 296

22 photorec ejecutándose en el archivo able3.home.blkls. . . . . . . ... . ... . . . 296

23 Visualización de las opciones de Photorec en el programa en ejecución . . . . . . . . . ... . . . 297

330
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Menú de 24 opciones de fotograbación . . . .. . . . . ... . .... . ... . ... . . . 298

25 Selección del sistema fotorreceptor . .. . . . . ... . .... . ... . ... . . . 298

26 Selección del sistema fotorreceptor . .. . . . . ... . .... . ... . ... . . . 299

27 Archivo SAM examinado con una herramienta común de Windows. . . . . . . . . .... . . 324

331
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

Lista de ejemplos de comandos

1 su sesión. . . . . ... . .... . ... . ... . .... . ... . ... . . . 21

2 Determine la versión del kernel. . .... . ... . .... . ... . ... . . . 23

3 Lista de dispositivos PCI con lspci . . . . . . . ... . .... . ... . ... . . . 24

4 Determine el controlador (módulo) en uso. . . ... . .... .... . ... . . . 25

5 Lista de dispositivos USB con lsusb . . . . ... . ... . .... . ... . ... . . . 26

6 Enumere los dispositivos USB con usb-devices . . . . . . . . .... . ... . ... . . . 26

7 Dispositivos enumerados con lsblk . .... . ... . ... . .... . ... . ... . . . 29

8 Salida de lsscsi . ... . .... . ... . ... . .... . ... . ... . . . 29

9 Visualización de tablas de particiones con fdisk . . . . . . . .... . ... . ... . . . 30

10 Visualización de tablas de particiones con gdisk . . . . . . . .... . ... . ... . . . 30

11 Búsqueda de asignación de dispositivo USB con dmesg . . . . . . . . . ... . ... . . . 32

12 Búsqueda de asignación de dispositivo USB en tiempo real. . . . . . . . ... . ... . . . 32

Salida 13 dmesg con NVMe. .... .... . ... . .... . ... . ... . . . 33

14 Creación de un punto de montaje como root . . . . . . ... . .... . ... . ... . . . 37

15 Recopilación de información para montar un volumen . . . . . . . . . ... . .... . . 38

16 Montaje de una partición . . . . . . . . ... . ... . .... . ... . ... . . . 38

17 Cambie el directorio al punto de montaje. . . ... . .... . ... . ... . . . 38

18 comando de desmontaje . ... . .... . ... . ... . .... . ... . ... . . . 39

19 Identificación del sistema de archivos en un disco óptico. . . . . . . ... . ... . . . 39

20 Montaje de medios ópticos . .... . ... . ... . .... . ... . ... . . . 39

21 Desmontar/mnt/cdrom . . . .... . ... . ... . .... . ... . ... . . . 40

22 Salida del comando de montaje . . . . . . . . . ... . .... . ... . ... . . . 40

23 El archivo /etc/fstab . . . . .... . ... . ... . .... . ... . ... . . . 41

332
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

24 montaje fstab . . ... . .... . ... . ... . .... . ... . ... . . . 41

25 Determinación del volumen del dispositivo por etiqueta. . . . ... . .... . ... . ... . . . 42

26 Uso de mount para comprobar un volumen montado en el escritorio: . . . . . . . . . ... . . . 43

27 Uso del comando udisks2 udisksctl . . ... . .... . ... . ... . . . 44

28 Desmontar con udisksctl . . . . ... . ... . .... . ... . ... . . . 45

29 Comando ls simple . . . .... . ... . ... . .... . ... . ... . . . 46

30 Uso del comando man . .... . ... . ... . .... . ... . ... . . . 48

31 Uso del comando de búsqueda . . . . . . ... . ... . .... . ... . ... . . . 48

Ejemplo de 32 personas . . . . . . . . .... .... . ... . .... . ... . ... . . . 49

33 Uso del comando de archivo . . . . . . ... . ... . .... . ... . ... . . . 49

34 Uso del comando ps . . .... . ... . ... . .... . ... . ... . . . 49

35 Visualización de permisos de archivos con ls -l . . . . . . . . .... . ... . ... . . . 50

36 Cambio de permisos de archivos con chmod . . . . . . . .... . ... . ... . . . 51

37 Redirección de salida . . . . .... . ... . ... . .... . ... . ... . . . 52

38 Redirección de salida (añadir) . . . . ... . ... . .... . ... . ... . . . 52

39 Comparación de tuberías y redirección . . . . ... . .... . ... . ... . . . 53

40 Salida de ps . . . ... . .... . ... . ... . .... . ... . ... . . . 53

41 Salida de ps canalizada a través de grep . . . . . . . . .... . ... . ... . . . 54

42 Uso del comando tee . .... . ... . ... . .... . ... . ... . . . 54

43 Listado de atributos de archivo con lsattr . . . . . ... . .... . ... . ... . . . 55

44 Cambio de atributos de archivo con chattr . . . . . . . .... . ... . ... . . . 55

45 Intente eliminar un archivo inmutable. . . . . . ... . .... . ... . ... . . . 55

46 Adición del atributo de solo agregar . . . . . ... . .... . ... . ... . . . 56

47 Usando bc . . . . . . ... . .... . ... . ... . .... . ... . ... . . . 56

48 Ajuste de la escala en bc . . .... . ... . ... . .... . ... . ... . . . 57

333
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

49 Sesión bc no interactiva con una tubería. . . ... . .... . ... . ... . . . 57

50 Convertir hexadecimal con bc . . . . . . . . ... . ... . .... . ... . ... . . . 58

51 Aritmética de shell bash . . . .... . ... . ... . .... . ... . ... . . . 58

52 Ejemplo lilo.conf . . . . .... . ... . ... . .... . ... . ... . . . 64

53 Ver los mensajes de arranque con dmesg . . . . . . .... . ... . ... . . . 64

54 Ver el nivel de ejecución predeterminado . . . . . . . . ... . .... . ... . ... . . . 66

55 entrada eth0 para /etc/rc.d/rc.inet1.conf usando una dirección IP estática.. . . . . . 72

56 Entrada eth0 para /etc/rc.d/rc.inet1.conf mediante DHCP. . . . . . . ... . . . 72

57 /etc/rc.d/rc.inet1.conf mientras ejecuta Network Manager. . . . ... . . . 74

58 Uso de ifconfig para ver su dirección IP . . ... . .... . ... . ... . . . 74

59 Uso de ip addr para ver su dirección IP . . ... . .... . ... . ... . . . 75

60 Uso de nmcli para ver las conexiones de red . . . . . .... . ... . ... . . . 76

61 Uso de ping para probar el enrutamiento/conexión IP. . . . . .... . ... . ... . . . 77

62 Uso de netstat para ver conexiones y puertos de red . . . ... . ... . . . 78

63 Uso de ss para ver puertos y conexiones de red . .... . ... . ... . . . 79

64 Uso de lsof para identificar un puerto TCP abierto . . . . . .... . ... . ... . . . 79

65 Llamar al script de demonios de red desde rc.M . . .... . ... . ... . . . 81

66 OpenSSH se inicia desde rc.inet2 . . ... . .... . ... . ... . . . 81

67 Permisos de rc.sshd . . .... . ... . ... . .... . ... . ... . . . 82

68 Cambio de permisos para evitar que SSH se inicie en el arranque. . . . . . . . . 82

69 Impedir el inicio del servicio con chmod 644 . . . . . . .... . ... . ... . . . 83

70 Lectura de comentarios de scripts rc . . . . . . . . ... . .... . ... . ... . . . 83

71 Conexión exitosa con SSH . . ... . ... . .... . ... . ... . . . 84

72 Edición de /etc/hosts.deny . . . . . . ... . ... . .... . ... . ... . . . 84

73 Sesión SSH denegada a través de /etc/hosts.deny . . . . . . .... . ... . ... . . . 85

334
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

74 Editado /etc/hosts.allow para permitir SSH en la red local. . . .... . . 85

75 Listado de reglas de iptables vacías . . . . . . . . ... . .... . ... . ... . . . 87

76 Ping sin ltrar ( sin reglas de iptables ) . . . . ... . .... . ... . ... . . . 87

77 /etc/rc.d/rc.firewall editado . . . ... . ... . .... . ... . ... . . . 87

78 Implementando nuestras reglas de cortafuegos (iptables) . . . . . . . . ... . ... . . . 88

79 Visualización de las reglas de iptables después de iniciar el script de recuperación de iptables . . . . . 89

80 Intento de ping con las reglas de iptables vigentes. . . . . . . ... . ... . . . 89

81 Selección de un espejo de paquete . . . . . . . . . ... . .... . ... . ... . . . 91

82 Edición del archivo de la lista negra . .... .... . ... . .... . ... . ... . . . 92

83 Compilando desde la fuente . . . . . . . ... . ... . .... . ... . ... . . . 94

84 Instalación desde la fuente . . . . . . . . ... . ... . .... . ... . ... . . . 95

85 Instalar un paquete con installpkg . . . ... . .... . ... . ... . . . 95

86 Instalación de sbotools con SlackBuild . . . ... . .... . ... . ... . . . 98

87 Ver un archivo .info de SlackBuild . . ... . ... . .... . ... . ... . . . 98

88 Crear el paquete sbotools Slackware con un SlackBuild . . . . .... . . 99

89 Instalación del paquete sbotools . . ... . ... . .... . ... . ... . . . 100

90 Obtener el repositorio de SlackBuilds . . . . ... . .... . ... . ... . . . 100

91 Búsqueda de software con sbotools . . . ... . .... . ... . ... . . . 101

92 Uso de sbofind para leer un LÉAME . . ... . ... . .... . ... . ... . . . 102

93 Comandos de configuración para clamav . . . . . . . . ... . .... . ... . ... . . . 103

94 Ver README para lshw usando sbofind . . ... . .... . ... . ... . . . 103

95 Instalación de lshw . . . . . . . .... . ... . ... . .... . ... . ... . . . 104

96 Listado de paquetes SlackBuild instalados usando grep . . . . . . ... . ... . . . 104

97 Comprobación de actualizaciones de software con sbocheck . . . .... . ... . ... . . . 105

98 Montaje de destino y comprobación del espacio libre de la unidad de destino con df -h . . 108

335
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

99 Ejecutando lsusb para detectar un puente USB SATA. . . . . . . ... . ... . . . 110

100 Uso de lsscsi para identificar una unidad USB a SATA conectada. . . . . . . . ... . . . 111

101 Uso de hdparm en un disco sujeto . . . . . . . ... . .... . ... . ... . . . 111

102 Redirigir la salida de hdparm a un archivo . . . . . . . . .... . ... . ... . . . 113

103 Uso de hdparm para detectar un HPA . . . . . . ... . .... . ... . ... . . . 114

104 hdparm que muestra la existencia de un HPA. . . . . .... . ... . ... . . . 114

105 Obtención de un hash de disco SHA1 . . . . . . . . ... . .... . ... . .... . . 116

106 Redirigir la salida hash a un archivo . . . . . . ... . .... . ... . ... . . . 116

107 Ejemplo de comando dd (básico) . . . . . . . . ... . .... . ... . ... . . . 118

108 Comparación de hash de dispositivo con hash de imagen . . . ... . .... . ... . .... . . 118

109 Dividir una imagen con split . . . ... . ... . .... . ... . ... . . . 119

110 Listado de archivos de imágenes divididas . . . . . ... . ... . .... . ... . ... . . . 119

111 Reensamblado de archivos de imágenes divididas con cat y redirección . . ... . ... . . . 120

112 Obtención de un hash de imágenes divididas con cat . . . . . .... . ... . ... . . . 120

113 Dividir imágenes 'en la y' con dd y split . . .... . ... . ... . . . 120

114 Ejemplo de sesión de creación de imágenes y división de una memoria USB. . . . . . . . . 121

115 Comando dc3dd básico en un disco de 80 GB. . . . . . .... . ... . ... . . . 124

116 La opción dc3dd FMT . . . .... . ... . ... . .... . ... . ... . . . 125

117 Dividir y procesar imágenes con un archivo de registro utilizando dc3dd . .... . ... . ... . . . 127

118 Listado de imágenes divididas dc3dd . . . . . . . . . ... . .... . ... . ... . . . 128

119 Recopilación de imágenes simultáneas con dc3dd . . . . . .... . ... . ... . . . 129

120 Instalación de libewf . . . . . . .... . ... . ... . .... . ... . ... . . . 130

121 Ejemplo de ejecución de ewfacquire . . . . . . . . . ... . .... . ... . ... . . . 131

122 ewfacquire con opciones de comando. . . . . ... . .... . ... . ... . . . 133

123 Uso de ewfinfo para leer metadatos de EWF . . . . . . .... . ... . ... . . . 134

336
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

124 ewfinfo en una imagen recopilada bajo Windows. . . . . . . ... . ... . . . 135

125 Verificación del hash de una imagen EWF con ewfverify . . . . . . . ... . . . 136

126 Descargar los archivos EWF de muestra con wget . . . . . . . ... . ... . . . 136

127 Ver el contenido del archivo tar descargado . . . . ... . ... . . . 137

128 Extracción del tar le de muestra E01 . . . . . ... . .... . ... . ... . . . 137

129 Ver los metadatos del archivo E01 de muestra con ewfinfo . . . . . . . . ... . . . 137

130 Verificación del archivo E01 de muestra con ewfverify . . . . . . . . ... . ... . . . 138

131 Visualización del tamaño de la imagen sin procesar de ewfexport . . . .... . ... . ... . . . 139

132 dd con conv=noerror,sync . . . . . ... . ... . .... . ... . ... . . . 140

133 Ejecutar dd en un disco con errores . . . . . ... . .... . ... . ... . . . 141

134 Interrupción de ddrescue en un buen disco . . . . . . . .... . ... . ... . . . 143

135 Visualización del archivo de mapa interrumpido . .... . ... . .... . ... . ... . . . 144

136 Ver el tamaño de la recuperación parcial de drescue . . . . . . . . ... . ... . . . 145

137 Finalización de la imagen de dirección y visualización del archivo de mapa (buen disco) . . . . 145

138 Primera etapa: recopilar buenos datos de un disco defectuoso con ddrescue . . . . . . . 147

139 Imágenes de segunda etapa con ddrescue (disco defectuoso) . . .... . ... . ... . . . 147

140 Uso de ifconfig en una estación de trabajo de recopilación. . . . . . . . . ... . ... . . . 150

141 Configuración de la interfaz con ifconfig . . . . . . . . .... . ... . ... . . . 150

142 Verificación de conectividad con ping (Asunto Computadora a estación de trabajo) . . . . . 151

143 Comprobación del hash del ordenador en cuestión (disco de arranque) . . . ... . ... . . . 151

144 Inicio del proceso de escucha nc en la estación de trabajo de recopilación de pruebas . . . 152

145 Inicio del proceso de generación de imágenes en el equipo en cuestión. . . ... . .... . . 152

146 Salida de nuestro comando over the wire dd en la computadora del sujeto. . . . 152

147 Comprobar el hash de la imagen de red dd . . . . . .... . ... . ... . . . 153

148 Uso de dc3dd en la red . . . ... . ... . .... . ... . ... . . . 153

337
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

149 Salida de dc3dd en una adquisición de red. . . . .... . ... . ... . . . 154

150 Comprobación del hash de las imágenes dc3dd adquiridas en la red. . . . . .... . . 154

151 Verificando el MD5 en la computadora del sujeto para compararlo con ewfverify . . . 156

152 Comprobando el hash de nuestra imagen previo a la compresión. . . . . . . .... . . 158

153 Simplemente comprimiendo un archivo con gzip . . . . . . . .... . ... . ... . . . 159

154 Simplemente descomprimiendo un archivo con gzip -d . ... . .... . ... . ... . . . 159

155 Comprimir y descomprimir a un archivo nuevo . . . .... . ... . .... . . 159

156 Comprimir y comprobar un hash sin descomprimir. ... . .... . . 160

157 Imágenes y hashing con compresión directa . . .... . ... . .... . . 161

158 Uso de la compresión en la y a través de la red con gzip y dc3dd . . . . . 162

159 Comprimiendo a través de la red con gzip desde el ordenador sujeto. . . . . 162

160 Visualización del archivo de registro resultante de una adquisición de red dc3dd con compresión 163

161 Limpiando un disco con dd . . . . . . . ... . ... . .... . ... . ... . . . 164

162 Limpiando un disco con dc3dd . . . . . . ... . ... . .... . ... . ... . . . 164

163 Con rmar una unidad de cero con xxd . . . . ... . .... . ... . ... . . . 165

164 Uso de dc3dd para limpiar con la opción hwipe . . . . . . . . . ... . ... . . . 165

165 Ver información de partición en un disco físico con fdisk . . . .... . . 167

166 Ver información de partición en un disco físico con gdisk . . . .... . . 167

167 Redirigir la salida de gdisk a un archivo . . . . . ... . .... . ... . ... . . . 168

168 Descargando nuestra imagen FAT con wget . . . . . . .... . ... . ... . . . 169

169 Ejecutando el comando de archivo en nuestra imagen FAT. . . . . . . ... . ... . . . 169

170 Uso del comando de archivo en un dispositivo de bloque. . . . . . . . . ... . ... . . . 169

171 Montaje de nuestra imagen FAT utilizando el dispositivo de bucle. .... . ... . .... . . 170

172 Comprobación de las opciones de montaje con el comando mount . . . . . . . . . ... . . . 171

173 Uso de umount para desmontar el sistema de archivos FAT . . . . . . . ... . ... . . . 171

338
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

174 Visualización de dispositivos de bucle en el directorio /dev . . . . .... . ... . ... . . . 171

175 Uso de losetup para asociar un archivo con un dispositivo . . . . . . . ... . ... . . . 171

176 Montaje del nuevo dispositivo de bucle asociado . . . . . . . . . ... . .... . . 172

177 Eliminación de una asociación de bucle con losetup -d . . . . . . . . ... . ... . . . 173

178 Uso de compensaciones para montar en bucle una partición en una imagen . . . . ... . .... . . 174

179 Uso de la expansión matemática en el comando de montaje para encontrar el desplazamiento del sector. . . . 175

180 Uso de mount y losetup para acceder a una partición dentro de una imagen NTFS . .. . 175

181 Descarga de la imagen de práctica losetup -P . . . .... . ... . ... . . . 176

182 Usar losetup con opciones de partición . . . ... . .... . ... . ... . . . 177

183 Listado de los nodos /dev/loopXpY producidos por losetup -P .. . . . . ... . . . 177

184 Montaje de particiones mapeadas con losetup -P . . . . . . . ... . ... . . . 178

185 Eliminación de las asignaciones de partición losetup -P . . . . . . . . ... . ... . . . 178

186 Instalación de afflib con sbotools . . . . . . ... . .... . ... . ... . . . 179

187 Descargar la imagen de la práctica dividida (wget) . . . . . . . . ... . ... . . . 179

188 Ver el contenido del archivo de imágenes divididas . . . . . . . ... . ... . . . 180

189 Extracción del contenido del archivo de imagen dividida . . . ... . ... . . . 180

190 Ver el registro de imágenes divididas para nuestra muestra dividida. .... . ... . .... . . 180

191 Comprobación de los hashes para compararlos con el archivo de registro (usando cat y sha1sum) . . 181

192 Reensamblaje de una imagen dividida con cat . . . . . . . .... . ... . ... . . . 181

193 Uso de affuse para crear una imagen montada en fusible de la imagen dividida. . . . . . . . 182

194 Usando losetup en nuestras imágenes divididas montadas en fusibles . .... . ... . ... . . . 182

195 Montaje de una partición de imagen dividida montada en un fusible para análisis . . . . .... . . 183

196 Desmontar la partición, eliminar las asignaciones de bucle y desmontar la


archivos divididos fusionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

197 Verificando nuestro hash contra la salida anterior de ewfverify . . . . . . . ... . . . 185

339
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

198 Desmontar el portafusibles ewf . . ... . ... . .... . ... . ... . . . 186

199 Actualización de ClamAV con freshclam . . . . . ... . .... . ... . ... . . . 187

200 Usando clamscan en nuestra imagen NTFS. . . . . . . . .... . ... . ... . . . 188

201 Descargando la muestra del sistema de archivos FAT con wget . . . . . . . . ... . . . 190

202 Creando nuestro directorio de salida de casos . . . . . . . . .... . ... . ... . . . 191

203 Creando un punto de montaje de evidencia para nuestra imagen FAT (como root) . . .... . . 191

204 Montaje de nuestra imagen FAT con la opción loop . . . . . . . ... . .... . . 191

205 ls básico para ver una lista de archivos. . . . . . . . ... . .... . ... . ... . . . 192

206 Un comando ls con la opción recursiva. . . . .... . ... . ... . . . 192

207 Obtención de le hash . . . .... . ... . ... . .... . ... . ... . . . 193

208 Uso de find para calcular hashes de cada archivo regular en un volumen. . . . . . . 194

209 Comprobación de hashes con la opción -c para sha1sum . . . . . . ... . ... . . . 195

210 Incluyendo el tiempo modificado en un listado de archivos. . ... . .... . ... . ... . . . 195

211 Listado de archivos simple con rutas usando el comando de archivo . . . . . . . ... . . . 195

212 Listado de directorios simple con rutas usando el comando de archivo . . . . . . . . . 196

213 Uso del comando de árbol para mostrar una lista de archivos. . . . . . ... . ... . . . 196

214 Uso de grep para buscar cadenas en una lista de archivos. . . . . . . ... . ... . . . 196

215 Uso de buscar para ejecutar un archivo en los resultados de búsqueda. . .. . .... . ... . ... . . . 197

216 Visualización de los resultados del comando find letype . . . . . . . . . ... . . . 197

217 Uso de grep para buscar imágenes en nuestra salida de tipo le. . . . . . . ... . . . 198

218 Uso del comando strings en un ejecutable. . . .... . ... . .... . . 199

219 Determinar el tipo de archivo y luego ver un archivo JPEG usando file y
mostrar _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

220 Uso del comando grep con una lista de palabras clave. . . . . . . . ... . ... . . . 202

221 Visualización de nuestros resultados de búsqueda de grep con cat . . . ... . .... . ... . ... . . . 203

340
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

222 Uso de xxd para ver resultados de búsqueda . . . ... . ... . .... . ... . ... . . . 203

223 Uso de tr para traducir caracteres de control a líneas nuevas . . . . . . . . ... . . . 204

224 Uso de wget para descargar los archivos de registro de práctica . . . .... . ... . .... . . 206

225 Hashing y listado del contenido de nuestro archivo de registros de práctica. . . . . . . . . 207

226 Extrayendo nuestros registros de prácticas del archivo . . . . . . . ... . .... . . 207

227 Visualización de los registros con cat . . . . . . . . . ... . .... . ... . ... . . . 208

228 Uso de tac para 'revertir' los archivos de registro. ... . ... . .... . ... . ... . . . 208

229 Cuente el número total de líneas en los archivos de registro con wc . . . . . . ... . . . 209

230 Cuente el número de líneas en cada archivo de registro junto con el total usando wc . . . 209

231 Uso de awk para imprimir solo el mes y el día (campos 1 y 2) . . . . .... . . 209

232 Encontrar fechas únicas en el archivo de registro con uniq . . . . . . . . ... . ... . . . 210

233 Usando grep para encontrar una fecha en particular. . . . ... . .... . ... . ... . . . 210

234 Uso de grep para cadenas al comienzo de una línea. . . . . . ... . ... . . . 210

235 Uso de grep para incluir un número desconocido de espacios en la búsqueda. . . . . . . . 211

236 Usando grep para encontrar una cadena. . . . . ... . ... . .... . ... . ... . . . 211

237 Contando nuestros hits de grep con wc . . . . . . ... . .... . ... . ... . . . 211

238 Uso de grep y awk para recopilar más campos. . . . . .... . ... . ... . . . 211

239 Uso de tabulaciones en lugar de espacios en nuestra salida awk . . .... . ... . ... . . . 212

240 Creación de un archivo de informe sobre el análisis de registros . ... . .... . ... . .... . . 212

241 Obtener una lista ordenada de direcciones IP de los registros. . . . . . . . . .... . . 213

242 Descarga de la imagen del ejercicio de talla . . . . . .... . ... . .... . . 214

243 Visualización de la imagen del ejercicio de tallado con xxd y menos . . . . . . . ... . . . 214

244 Buscando el encabezado JPEG con xxd y grep . .... . ... . ... . . . 215

245 Cálculo del desplazamiento decimal (cabecera) usando bc . . . . . . ... . ... . . . 215

246 Buscando el pie de página JPEG con xxd y grep . .... . ... . ... . . . 216

341
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

247 Cálculo del desplazamiento decimal (pie de página) usando bc . . . . . . ... . .... . . 216

248 Cálculo del tamaño de la imagen usando compensaciones para encabezado y pie de página . . . . . . 216

249 Uso de dd para tallar el JPEG con nuestro desplazamiento y tamaño de archivo para saltar y contar . 217

250 Uso de xv para ver la imagen tallada . . . . . ... . .... . ... . ... . . . 217

251 Mirando particiones de imagen con fdisk . . ... . .... . ... . ... . . . 220

252 Uso de la información de partición para tallar particiones con dd . . . . . . . . . . 220

253 Comprobación de los tipos de sistema de archivos de nuestras imágenes de partición con el archivo . .... . . 222

254 Buscando el directorio /etc en nuestras imágenes de partición. . . . . ... . . . 222

255 Visualización del archivo fstab en nuestra imagen de partición montada. . . . . . . ... . . . 223

256 Reconstruyendo nuestro sistema de archivos able_3 . . . ... . .... . ... . ... . . . 223

257 Instalación de TSK con sboinstall . . . . . . ... . .... . ... . ... . . . 230

258 Visualización del contenido del paquete instalado en /var/log/packages . .. . . . . . . 231

259 Obtención y comprobación de la imagen de práctica de able2 . . . . . . . . . ... . . . 232

260 Extracción del archivo que contiene la imagen able2 . . . . . ... . ... . . . 232

261 Uso de mmls en able2image . . . ... . ... . .... . ... . ... . . . 232

262 Uso de fsstat en la imagen able2 . ... . ... . .... . ... . ... . . . 233

263 Ejecutar fls en el directorio raíz de un sistema de archivos. . . . . . . . . ... . . . 234

264 Ejecutando fls en el directorio raíz de la imagen able2 . . . ... . ... . . . 235

265 Uso de fls en un inodo especí co. . . . . . . . ... . .... . ... . ... . . . 236

266 Uso de fls para ver una lista recursiva de archivos no asignados. . . . . . . .... . . 236

267 Uso de ffind para buscar archivos asociados con un inodo. . . . . . . . . ... . . . 238

268 Uso de istat para recopilar información sobre un inodo especí co. . . . . .... . . 239

269 Listado de sistemas de archivos TSK admitidos . . . . . . . . .... . ... . ... . . . 239

270 Redirigir la salida de icat a un archivo recuperado. . . . . ... . ... . . . 240

271 Determinar el tipo de archivo recuperado con el comando de archivo . . . . . . . . 240

342
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

272 Listado del contenido del archivo tar recuperado. .... . ... . ... . . . 241

273 Listado del contenido del directorio en el inodo 11105 usando fls . . . . . . . . . 241

274 Uso de la pantalla para mostrar una imagen recuperada directamente desde icat . . . .... . . 242

275 img_stat y mmls en la imagen de able3 . . ... . .... . ... . ... . . . 243

276 Ejecutando fsstat en /home (ext4) . . . . . . ... . .... . ... . ... . . . 244

277 Ejecutando fls en /home (ext4) . . . . . . . . ... . .... . ... . ... . . . 244

278 Ejecutando fls recursivamente en /home (ext4) . . . . . .... . ... . ... . . . 245

279 Ejecutar istat e icat en un archivo ASIGNADO en ext4 . ... . ... . . . 245

280 Ejecutar istat e icat en un archivo NO ASIGNADO en ext4 . . . ... . . . 246

281 Búsqueda de una palabra clave en able2.dd con grep . . . . . . . ... . ... . . . 247

282 Ver el contexto de un resultado de búsqueda con xxd . . . . . . . . ... . ... . . . 248

283 Cálculo del desplazamiento del sector a un acierto de búsqueda con bc . . . . ... . ... . . . 248

284 Uso de mmls para determinar a qué volumen pertenece un sector . . . . . . . . . . 248

285 Cálculo del desplazamiento de bytes al volumen que contiene el resultado de búsqueda . . . . . . 249

286 El volumen compensado de la coincidencia de búsqueda. . . . ... . .... . ... . ... . . . 249

287 Determine el número de bytes por bloque con fsstat . . . ... . ... . . . 250

288 Cálculo de la dirección de bloque que contiene el resultado de búsqueda . . ... . .... . . 251

289 Cálculo único para determinar el bloque de datos de la palabra clave. . . . . . . . 251

290 Determine el estado de asignación del bloque de datos con blkstat . . .... . . 252

291 Uso de ifind para determinar el inodo de un bloque de datos. . . . . . . ... . ... . . . 252

292 Uso de istat para explorar el inodo . . . . . . ... . .... . ... . ... . . . 252

293 Uso de icat para recuperar datos de los bloques en el inodo 10090 . . . . . ... . . . 253

294 Guardando y hashing los datos recuperados con icat . . . . . ... . ... . . . 253

295 Uso de nd para obtener el nombre del archivo a asociar con nuestros datos. . . . . . . . 254

296 Uso de grep en imágenes divididas. . . . . . . . . ... . .... . ... . ... . . . 254

343
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

297 Cálculo del bloque de datos del sistema de archivos para el resultado de búsqueda ext4 . . . .... . . 255

298 Uso de blkstat para determinar el estado del bloque de datos de palabras clave. . . . . . . 256

299 Uso de ifind para determinar el inodo de un bloque no asignado. . . . . . ... . . . 256

300 Uso de blkcat para transmitir el contenido de un bloque de datos. . . . . . . . ... . . . 256

301 Usando dd para corregir el tamaño de nuestros datos recuperados. . . .... . ... . ... . . . 257

302 Obteniendo el offset a nuestro sistema de archivos con mmls . . . . . . ... . ... . . . 258

303 Uso de blkls para extraer los datos no asignados . . . . . . . . ... . ... . . . 259

304 Usar grep en nuestro archivo que contiene solo bloques no asignados. . . . . .... . . 259

305 Encontrar nuestro tamaño de bloque con fsstat . . . . . . . . .... . ... . ... . . . 259

306 Determinación de la dirección de bloque del resultado de búsqueda en la imagen de blkls sin asignar260

307 Cálculo de la dirección de bloque de la unidad no asignada en able2.dd . . . . . . 260

308 Búsqueda y examen del inodo para el resultado de búsqueda no asignado . . . . . . . 261

309 Uso de icat para recuperar los datos no asignados en el inodo 10090 . . . . . ... . . . 262

310 Obtención y extracción de la imagen de práctica NTFS . . . . ... . .... . . 263

311 Visualización de la tabla de particiones en la imagen NTFS. . . . . . ... . ... . . . 263

312 fsstat en un sistema de archivos NTFS. . . . . . ... . .... . ... . ... . . . 264

313 fls en NTFS. . . ... . .... . ... . ... . .... . ... . ... . . . 265

314 fls en un directorio NTFS específico. ... . ... . .... . ... . ... . . . 265

315 Directorios de navegación con fls recursivos . . . . . . .... . ... . ... . . . 265

316 Acceso a un atributo NTFS individual con icat . . . . . ... . ... . . . 268

317 Usando ewfmount para montar nuestra imagen NTFS EWF . . . . . . ... . ... . . . 268

318 Uso de buscar en la imagen NTFS montada en bucle . . . . . . . ... . ... . . . 269

319 Uso de find y grep para reducir la lista de archivos . . . . . . . ... . ... . . . 269

320 Comprobación del formato de archivo y reproducción del vídeo MPEG. . . . . . . .... . . 270

321 Uso de fls para entradas con el nombre jet.mpg . . . . . . . . ... . ... . . . 270

344
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

322 Uso del comando de archivo en el flujo de datos predeterminado. . . . . . . ... . . . 271

323 Uso del comando de archivo en el flujo de datos alternativo. . . . . . .... . . 271

324 Visualización del flujo de datos alternativo . . . . . ... . .... . ... . ... . . . 271

325 Fusible de montaje de la imagen NTFS para la búsqueda. . . . . . . ... . .... . . 272

326 Una búsqueda de cadena en la imagen montada en fusible. . . . .... . ... . .... . . 272

327 Uso de tr para hacer legibles los resultados de la búsqueda . . . .... . ... . ... . . . 273

328 Encontrar el tamaño del clúster NTFS (tamaño de bloque) . . . . .... . ... . ... . . . 273

329 Cálculo de la palabra clave offset en NTFS . . . . . .... . ... . ... . . . 274

330 Encontrar la entrada MFT dado el bloque de datos. . . . . . . . ... . ... . . . 274

331 Determinar el tipo de datos para la entrada MFT localizada. . . . . . . ... . . . 274

332 Intentando leer los datos de MS O ce con menos . . . . . . . . ... . ... . . . 275

333 Redirigir los datos de MS O ce a un archivo . . . . . . .... . ... . .... . . 275

334 Uso de icat y catdoc para ver el MS O ce le recuperado. . . . ... . . . 276

335 Cadena de búsqueda de uranio-235 . . . . . . . ... . .... . ... . .... . . 276

336 Desmontaje de la imagen EWF montada en fusible . . . . . . . . . ... . ... . . . 277

337 Instalación de bulk_extractor .. . . . . ... . ... . .... . ... . ... . . . 277

338 Visualización de la ayuda de bulk_extractor . .. ... . ... . .... . ... . ... . . . 278

339 Ejecutando bulk_extractor, buscando "Uranium-235" . . ... . .... . . 279

340 Visualización de la salida de bulk_extractor . . ... . ... . .... . ... . ... . . . 280

341 Visualización del archivo de funciones find.txt . ... . ... . .... . ... . ... . . . 280

342 Determinar la entrada MFT y el tipo de archivo de los datos en nuestro extractor masivo
búsqueda . . .... . ... . .... .... . ... . .... . ... . ... . . . 281

343 Ver el histograma creado por el escáner de búsqueda . . . . ... . ... . . . 282

344 Ejecutando bulk_extractor con un archivo de banner y un archivo de palabra clave. . . ... . . . 283

345 Ver el archivo MSXML con catdocx . . ... . .... . ... . ... . . . 285

345
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

346 Instalación de bisturí . . . . . .... . ... . ... . .... . ... . ... . . . 286

347 Colocación del archivo de con guración del bisturí . . . . . . . .... . ... . ... . . . 286

348 Ver y editar el archivo scalpel.conf . ... . .... . ... . ... . . . 287

349 Revisando la ubicación de las imágenes JPG de lolitaz . . . . . . . . . .... . . 288

350 Extracción de espacio no asignado para tallar . . . . . .... . ... . .... . . 289

351 Ejecución de bisturí en las imágenes de able_3 . . . . . . .... . ... . ... . . . 290

352 Visualización del archivo bisturí audit.txt . . .. . . . . .... . ... . ... . . . 291

353 Agregar una nueva definición de mapa de bits a bisturí.conf . . . . . . ... . ... . . . 292

354 Repetición del bisturí con una nueva definición de bmp. . . . . . . ... . ... . . . 293

355 Instalación de testdisk para photorec . . . . . . . ... . .... . ... . ... . . . 295

356 Grabación fotográfica en ejecución . ... . .... . ... . ... . .... . ... . ... . . . 295

357 Listado de archivos recuperados por photorec . . . . . . .... . ... . ... . . . 298

358 Listado de archivos de salida photorec . . . . . . ... . .... . ... . ... . . . 300

359 Ver el contenido del archivo tar recuperado de photorec . .... . . 300

Hashing 360 de todos los archivos de salida de nuestras herramientas de tallado. . . . . ... . .... . . 301

361 Instalación de la utilidad fdupes . . . . . . . . ... . .... . ... . ... . . . 302

362 Ejecutar fdupes para ver los archivos duplicados . . . . . . . . ... . ... . . . 302

363 Vuelva a ejecutar fdupes, esta vez con la opción --delete . . . . . . ... . . . 303

364 Encontrar el número de entrada MFT de un archivo de registro. . . . . . ... . ... . . . 305

365 Uso de un método alternativo (fls) para encontrar la entrada MFT de NTUSER.DAT . . . 305

366 Instalación de libregf . . . . . .... . ... . ... . .... . ... . ... . . . 306

367 Ver el contenido del paquete libregf . . . ... . .... . ... . ... . . . 306

368 Montaje de la sección de registro . . . . . . . . . ... . .... . ... . ... . . . 306

369 Listado de claves de registro en el punto de montaje NTUSER.DAT . . . . . . ... . . . 307

370 Cambio de directorio a la clave de registro de destino. . . . . . . ... . ... . . . 307

346
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

371 Visualización de los valores de clave de registro . . ... . ... . .... . ... . ... . . . 307

372 Usando tr en una sola cadena (.yax) . . . . . ... . .... . ... . ... . . . 308

373 Uso de un bucle for de bash para ejecutar tr en todos los 'archivos'. .... . ... . ... . . . 308

374 Visualización de los valores con xxd . . . . . . . . ... . .... . ... . ... . . . 309

375 Descifrando la fecha con WinTime.py . . . ... . .... . ... . ... . . . 310

376 Desmontar el fusible montado NTUSER.DAT . . . . .... . ... . ... . . . 310

377 Búsqueda de la entrada MFT de la sección de registro SAM. . . . . . . . . ... . . . 311

378 Extracción de la sección de registro SAM con icat . . . . . . . . ... . ... . . . 311

379 Uso de regfmount para montar el subárbol SAM. . . . . .... . ... . ... . . . 311

380 Visualización de las cuentas en el archivo SAM . . . . . . . .... . ... . ... . . . 311

381 Descodificación de las cuentas de usuario en la clave Usuarios con un bucle for . . . .... . . 311

382 Visualización de los valores para 000003E8 en el archivo SAM . . .... . ... . ... . . . 312

383 Visualización de las fechas asociadas a la cuenta de Usuario. . . . . . . . .... . . 312

384 Uso de xxd para ver valores especí cos de la clave de registro. . . . . . . ... . . . 313

385 Pasar argumentos xxd directamente a WinTime.py . . . . . . . ... . ... . . . 313

386 Uso de un bucle for para pasar los valores de desplazamiento a xxd . .... . ... . ... . . . 313

387 Instalación de libscca . . . . . .... . ... . ... . .... . ... . ... . . . 314

388 Buscando archivos de captación previa en la imagen NTFS . . . .... . ... . ... . . . 315

389 Extracción del archivo de captación previa de NMAP con icat . . . . .... . ... . ... . . . 315

390 Visualización del archivo de captación previa con xxd . ... . ... . .... . ... . ... . . . 315

391 Decodificando el último tiempo de ejecución en el archivo de captación previa. . . . ... . ... . . . 315

392 Visualización del archivo de captación previa con sccainfo . . ... . .... . ... . ... . . . 316

393 Búsqueda de un registro 'A' con host . . . . . . ... . .... . ... . ... . . . 317

394 Búsqueda de DNS con nslookup . . . . . . . . . ... . .... . ... . ... . . . 317

395 Búsqueda de DNS con excavación . . . .... . ... . ... . .... . ... . ... . . . 318

347
Machine Translated by Google

Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley

396 cavar con la opción +corto . . . . . ... . ... . .... . ... . ... . . . 318

397 Uso de curl para encontrar su IP externa . . . . . . . . .... . ... . ... . . . 319

398 Búsqueda de registros de Mail Exchange con host y dig . . . . . . . . . ... . . . 319

399 Google Enterprise Services encontrado con dig . . . . . . . . . ... . ... . . . 319

400 Uso de whois . . . . ... . .... . ... . ... . .... . ... . ... . . . 320

401 Descarga del archivo oui.txt para la búsqueda de MAC.. . . . . . ... . ... . . . 321

402 Usando ip para encontrar nuestra dirección MAC. ... . ... . .... . ... . ... . . . 322

403 Buscando el archivo oui.txt para una dirección MAC. .. . . . . . ... . ... . . . 322

404 Verificación cruzada usando istat . . . . . . . ... . .... . ... . ... . . . 325

405 Verificación cruzada de la fecha usando el archivo SAM montado y xxd . . . . . . . . . 326

406 Descodificación de la fecha recuperada de la llave (F) con xxd . . . . . . ... . . . 326

348

Potrebbero piacerti anche