Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
1 Instalación 15
1.1 Distribuciones. . . ... . .... .... . ... . .... . ... . ... . . . dieciséis
1.5 Usuarios del Sistema. . . . . . . .... .... . ... . .... . ... . ... . . . 20
1.7 El núcleo de Linux. ... . .... .... . ... . .... . ... . ... . . . 23
1.8 Interacción entre el núcleo y el 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
2.1 Discos. . . .... . ... . .... .... . ... . .... . ... . ... . . . 28
2.2 Asignación de nodos de dispositivos: una mirada más cercana. . . . . . . . . ... . ... . . . 31
3.1 Navegación muy básica. . .... . ... . ... . .... . ... . ... . . . 46
3.6 Golpe 'globoso'. . ... . .... . ... . ... . .... . ... . ... . . . 59
4 Edición con 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
5.1 Init frente a Systemd. . . . . .... .... . ... . .... . ... . ... . . . 63
5.3 Inicialización del sistema. . . . . . . . ... . ... . .... . ... . ... . . . sesenta y cinco
5.4 Nivel de ejecución. .... . ... . .... .... . ... . .... . ... . ... . . . sesenta y cinco
5.6 Guiones de inicio del servicio. . . . . . .... . ... . .... . ... . ... . . . 67
5.7 Golpe . . . .... . ... . .... . ... . ... . .... . ... . ... . . . 68
3
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.7.1 dc3dd . . . . ... . .... . ... . ... . .... . ... . ... . . . 123
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.9 Compresión: local y por cable. ... . .... . ... . ... . . . 157
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.2 Identificación de sistemas de archivos. . ... . ... . .... . ... . ... . . . 168
8.12.5 perder la configuración . . ... . .... . ... . ... . .... . ... . ... . . . 171
8.12.6 Montaje de imágenes de disco completas con losetup . . . . . . ... . ... . . . 173
8.12.8 Montaje de archivos de imagen dividida con affuse . . . . . . . ... . ... . . . 178
8.13 Análisis básico. . . ... . .... . ... . ... . .... . ... . ... . . . 186
8.13.3 Elaboración de una lista de tipos de archivos. . . . ... . .... . ... . ... . . . 197
8.13.4 Visualización de archivos. . . .... . ... . ... . .... . ... . ... . . . 198
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.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
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.5 Talla física. ... . .... . ... . ... . .... . ... . ... . . . 285
10.5.1 bisturí . . ... . .... . ... . ... . .... . ... . ... . . . 285
6
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
11.0.2 Búsqueda de intercambio de correo. . . ... . ... . .... . ... . ... . . . 319
11.1 Datos Whois. . . . ... . .... . ... . ... . .... . ... . ... . . . 320
11.2 Búsqueda de direcciones MAC. . . . . . . ... . ... . .... . ... . ... . . . 321
13 Conclusión 328
14.1 Lugares a los que acudir para recibir asistencia. .... . ... . ... . .... . ... . .... . . 329
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
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?
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
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.
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.
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.
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.
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.
root@forensicbox:~# salida
del comando
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
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.
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:
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
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.
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
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.
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.
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
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:
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
* 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.
Crea un nombre de usuario para ti. No utilice el inicio de sesión raíz para las operaciones normales.
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.
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:
20
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
directorio de inicio
shell de usuario
Longevidad de la cuenta
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.
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:~$ su -
Clave:
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:~# 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.
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.
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 .
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.
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".
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
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".
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):
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
...
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
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
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.
27
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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:
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"]):
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
MBR: protector
BSD: no presente
APM: no presente
GPT: presente
¡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.
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.
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
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.
compartimiento
bota
desarrollador
(dispositivos)
etc.
X11
rc.d
hogar
usuario2
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)
correr
usuario
local
liberación
var (registro)
/compartimiento
/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
/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
/lib64
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
/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
/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
/usr
/var
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
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:
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 /
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:~# 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:
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.
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:
Ahora podemos montar los medios y cambiar al sistema de archivos recién montado:
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
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)
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.
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
Con esto en /etc/fstab, puedo montar medios ópticos simplemente emitiendo el comando:
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.
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).
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.
42
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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
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):
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
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.
Listados de directorios:
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.
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:
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
Copiar archivos:
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:
47
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
NOMBRE
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
...
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.
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:
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
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.
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).
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:
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.
- = 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:
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
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:
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:
Cambiar los permisos y luego mostrar una nueva lista larga del archivo mostraría:
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)
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).
estándar : 2>
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:
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:
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:
Esta es una herramienta extremadamente poderosa para la línea de comando. Mira la siguiente lista de procesos
(salida parcial mostrada):
¿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
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 .
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.
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:
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:
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
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:
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.
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.
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:~$
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.
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:
58
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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.
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.
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.
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.
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.
Modo normal:
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
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
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í.
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.
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.
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
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
[ 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:
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:
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
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):
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
id:3:initpredeterminado:
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.
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.
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.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.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.
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
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.
interfaces de red
configuración inicial
IP estática
identificarse en la 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.
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.
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.
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).
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
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).
Si está utilizando Slackware, la rutina de instalación habría ejecutado el programa netconfig por usted. Se habría
visto algo como esto:
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í:
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:
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:
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.
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:
IPALIAS[0]=""
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""
...
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.
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:
74
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 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:
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
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:
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
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.
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:
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:
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.
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
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.
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
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.
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.
79
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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.
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):
...
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:
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:
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:
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:
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
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.
#
# 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.
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@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í:
#
# 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 #
# 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:
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í:
# 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
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:
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.
87
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, 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:~# 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 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).
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
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.
Fedora mmm
ArchLinux pacman
Portage Gentoo
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.
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
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.
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.
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:
92
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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.
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):
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.
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:~# ./ 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
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'
...
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.
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:
95
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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:
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.
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:
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:~# ls
sbotools.tar.gz
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.
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:~# ls README
sbotools-2.7.tar.gz sbotools.SlackBuild* sbotools.info slack-desc
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:
...
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
./
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:
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.
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
Una vez hecho esto, puede buscar, instalar y actualizar paquetes y sus dependencias iniciales.
todo desde comandos individuales usando lo siguiente:
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.
Ruta: /usr/sbo/repo/desktop/thunar-sendto-clamtk
101
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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).
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
Debe tener el grupo y el usuario 'clamav' para ejecutar este script, por ejemplo:
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.
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 :
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
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.
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):
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...
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.
105
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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
Obtención de un hash
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'.
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
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:~# 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
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).
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
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.
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
...
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.
/dev/sdd:
111
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
* DESCARGAR_MICROCÓDIGO
112
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
No está bloqueado
no congelado
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:~# 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).
La salida de hdparm sería diferente si estuviera presente un HPA (que se muestra aquí en un disco de Seagate):
Y la salida de hdparm -I run contra /dev/sdi mostraría solo 41943040 (salida parcial por brevedad):
/dev/sdf:
114
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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í.
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.
Hay una serie de algoritmos hash y herramientas que los implementan, que incluyen:
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):
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.
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í:
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).
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# imágenes de CD
root@forensicbox:imágenes#
pwd /mnt/evidence/case1/images
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.
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 (..).
118
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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:
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):
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
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
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.
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:
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:
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
...
2128084992 bytes (2,1 GB, 2,0 GiB) copiados, 153,338 s, 13,9 MB/s
-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
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.
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:
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
ofs=BASE.FMT
hofs=BASE.FMT
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
registro=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 .
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
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
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
...
7 s, 282 M/s
127
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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
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:
3 s, 614 M/s
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.
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.
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
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):
131
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
es físico: sí
Formato de archivo EWF: Caja 6 (.E01)
Método de compresión: desinflar
Nivel de compresión: ninguna
...
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).
ewfacquire: ÉXITO
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:
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).
ewfacquire: ÉXITO
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):
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
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).
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
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.
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).
Lectura: 1,9 GiB (2128084992 bytes) en 4 segundo(s) con 507 MiB/s (532021248 bytes/
,ÿ segundo).
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:
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:
Ahora descomponemos las imágenes con la opción tar x y cambiamos al directorio resultante:
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
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
Es físico: si
Bytes por sector: 512
Número de sectores: 1024000
Tamaño de medios: 500 MiB (524288000 bytes)
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:
138
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
Lectura: 500 MiB (524288000 bytes) en 1 segundo(s) con 500 MiB/s (524288000 bytes/
,ÿ segundo).
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.
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
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.
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í:
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.
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:
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á:
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
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
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
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
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
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
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
6577664 bytes (6,6 MB, 6,3 MiB) copiados, 34,8038 s, 189 kB/s 41943032+8 registros en
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.
143
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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>.
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:
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.
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.
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ó:
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
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
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
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
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
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
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:
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:
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:
150
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
Ahora tenemos las direcciones IP asignadas de nuestros sistemas en una red local:
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:
Ahora que tenemos ambas computadoras hablando, podemos ser nuestra imagen. Compruebe el hash del disco
sujeto:
root@bootdisk:~# sha1sum/dev/sda
0dec26535e6264544488c08a65cefda22ced0f66
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:
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.
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
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.
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):
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
Cuando se completa la transferencia, podemos ver los archivos resultantes y el registro dc3dd en nuestra
máquina de recopilación.
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.
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):
ewfacquirestream 20140806
es físico: sí
Formato de archivo EWF: Caja 6 (.E01)
Método de compresión: desinflar
155
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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. . .
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):
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
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).
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.
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.
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:
root@forensicbox:~# cd testcomp
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
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 :
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:
-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
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:
NTFS_Pract_2017.raw.gz
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
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.
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:
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.
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) :
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:
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
164
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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 ):
165
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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!
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.
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:
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:
MBR: protector
BSD: no presente
APM: no presente
GPT: presente
167
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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):
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.
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
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:
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:
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
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.
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.
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):
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
Cuando haya terminado de navegar, desmonte el archivo de imagen (nuevamente, tenga en cuenta que el comando es
umount, no unmount ):
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í.
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.
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@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
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:~# ls /mnt/análisis
ARP.EXE*
Documentos/
FTP.EXE*
Pics/
loveletter.virus*
ouchy.dat* snoof.gz*
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.
172
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, no todas las imágenes de los medios son tan simples...
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.
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 .
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
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.
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@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
ventanas/
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.
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:
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
Descomprima el archivo gzip'd con gzip -d y verifique el hash del archivo de imagen sin procesar resultante:
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.
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 :
MBR: protector
BSD: no presente
APM: no presente
GPT: presente
177
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:~# 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
Ahora podemos montar y explorar estos volúmenes mapeados como lo haríamos con cualquier otro.
raíz@forensicbox:~# ls /mnt/tmp
perdido+encontrado/
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:
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:
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:~# sha1sumable_3.tar.gz
6d8de5017336028d3c221678b483a81e341a9220 able_3.tar.gz
179
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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):
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
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
180
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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
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:
182
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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# 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.
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
Lectura: 500 MiB (524288000 bytes) en 1 segundo(s) con 500 MiB/s (524288000 bytes/
,ÿ segundo).
ewfverify: ÉXITO
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ó:
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
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# 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.
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.
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.
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.
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
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
188
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
-------------------------------------------------- --------------------------------------------
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.
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.
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:
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
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@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>
Todavía usando nuestro inicio de sesión raíz, seguiremos adelante y montaremos la imagen fat_fs.raw en /mnt/evid:
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.
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.
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.
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) .
193
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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:
./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.
195
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á 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
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.
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.
¿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:
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:
./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
./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
./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.
Para archivos de texto, como hemos cubierto, puede usar cat, more o less para ver el contenido.
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)?
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:
199
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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*
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
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:~# salir
barry@cajaforense:~$
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:~$ 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:
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
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:
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.
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:
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:
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.
barry@forensicbox:~$ su -
Clave:
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
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.
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.
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 .
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.
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):
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?
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).
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
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:
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
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 ):
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):
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:
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.
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:
211
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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 .
También podemos obtener una lista ordenada (ordenar) de las direcciones IP únicas (-u) involucradas en el mismo
camino:
212
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 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 .
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.
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
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:
Eche un breve vistazo al archivo image_carve_2017.raw con su maravillosa herramienta de volcado hexadecimal de
línea de comandos, xxd:
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
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:
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.
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
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:
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:
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:
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.
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
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:~$ 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@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:
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
218
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 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:
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:
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#
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.
220
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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).
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@cajaforense:~$ su -
Clave:
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
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:
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):
|-- 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:
223
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, 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
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.
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.
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í:
lshw
lsscsi
hdparm
fdisco
gdisk
archivo -s
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
expediente
encontrar
5. Capa de aplicación:
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
... 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.
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.
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.
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_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
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.
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
...
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.
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:~$ cd capaz2
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
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.
232
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
SO fuente: Linux
Estructura Dinámica
Funciones InCompat: tipo de archivo,
Funciones compatibles de solo lectura: Sparse Super,
INFORMACIÓN DE METADATOS
--------------------------------------------
INFORMACIÓN DE CONTENIDO
--------------------------------------------
233
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
Y ...
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:
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.
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
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:
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:
236
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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)
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 :
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.
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.
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.
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 :
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.
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 :
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:
241
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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 .
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
--------------------------------------------
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
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:
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:
244
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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
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:
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
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.
No asignado
Grupo: 0
ID de generación: 1815721464 uid/gid:
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:
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
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:
248
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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).
249
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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
--------------------------------------------
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.
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
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:
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
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:
¡Excelente! El inodo que contiene la coincidencia de palabras clave es 10090. Ahora usamos istat para
obtener las estadísticas de ese inodo:
No asignado
Grupo: 5
Identificación de generación: 3534950782
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:
* fijador.c
* por Idefix *
inspirado en sum.c y SaintStat 2.0 * actualizado por
Cybernetik para linux rootkit */
...
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:
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 :
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:
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:
255
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
Estamos listos para ejecutar nuestro comando blkstat para averiguar si nuestro hit de palabra clave está en un bloque
asignado a un inodo asignado:
Grupo: 9
Entonces el bloque no está asignado. Veamos ahora si podemos encontrar a qué inodo pertenecía este bloque no
asignado:
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:
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):
256
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
3591 bytes (3,6 kB, 3,5 KiB) copiados, 0,00413113 s, 869 kB/s
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í.
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
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
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
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.
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.
259
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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?".
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...
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:
261
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
No asignado
Grupo: 5
Identificación de generación: 3534950782
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.
* fijador.c
* por Idefix *
inspirado en sum.c y SaintStat 2.0 * actualizado por
Cybernetik para linux rootkit */
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:~$ 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
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:
INFORMACIÓN DE METADATOS
--------------------------------------------
INFORMACIÓN DE CONTENIDO
--------------------------------------------
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
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):
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:
265
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 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.
266
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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)
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
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.
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# 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
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 :
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):
...
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.
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:~# 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:
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:
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):
Esta vez vemos que es texto ASCII. Así que ahora podemos canalizar el mismo comando a less (o directamente a
stdout) para ver:
: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 ]============================================ ==================:
+------------------------------------------------- ----------------------------+
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:
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 /.
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í:
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.
273
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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.
No asignado
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.
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.
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
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.
barry@forensicbox:NTFS_Pract_2017$ su -
Clave:
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.
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).
www.stopcyberbullying.org
________________________________________________________________________
______
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?):
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.
276
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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.
277
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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
278
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 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:
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:
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
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 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.
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:
280
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 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:
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:
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
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
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
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
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
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:
...Y vemos la palabra clave acertada en nuestra salida junto con el contexto esperado de la característica
le.
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 :
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
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:~$ 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í
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
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
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:
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 $ 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.
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:
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 $ 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
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:
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.
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:
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 .
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.
295
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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>.
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>.
296
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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
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
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*
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
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 ).
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.
...
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
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.
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.
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
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:
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 .
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.
[+] 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.
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:
303
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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
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:
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:
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:~# salir
Puede echar un vistazo a las utilidades que instaló este paquete mirando el archivo del paquete en /var/log/
packages:
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:regmount$ ls
AppEvents/ Control\ Panel/ Environment/ Keyboard\ Layout/ Printers/ System/
Consola/ EUDC/ Identidades/ Red/ Software/
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)$
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:
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:
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:
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):
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.
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
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.
Usaremos el punto de montaje SAM para este ejercicio como lo hicimos en el anterior.
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:
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):
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:
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):
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:
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:
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:
313
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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 .
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).
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).
314
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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:
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.
Algunas de las características que podemos encontrar (tenga cuidado con el orden de los bytes):
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:
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.
Nombres de archivo:
Volumen: 1 información:
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
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.
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:
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):
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:
;; 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.
¿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:
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.
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.
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:
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.
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.
320
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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.
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:
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
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).
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:
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
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
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.
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:
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á:
http://www.linuxquestions.org/questions/slackware-14/
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
Pruebe ##slackware en la red Freenode (u otro canal adecuado para la distribución de Linux que elija).
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
2 Haga clic con el botón derecho en el menú contextual para montar en disco [XFCE] . . . . ... . ... . . . 43
7 Detalles del hardware en una etiqueta de unidad. . . . . ... . .... . ... . ... . . . 110
9 Visualización de una imagen con una extensión que no coincide. . . . . . . . . .... . . 200
11 La imagen producida por la pantalla cuando se usa directamente desde icat . . . . . . . . 242
15 Identificación del bloque de datos de la palabra clave . . . . . .... . ... . ... . . . 251
19 Visualización de archivos tallados con geeqie . . . . . . ... . .... . ... . ... . . . 292
20 qphotorec - interfaz gráfica de usuario para photorec .. . . . . .... . ... . ... . . . 294
330
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
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
5 Lista de dispositivos USB con lsusb . . . . ... . ... . .... . ... . ... . . . 26
7 Dispositivos enumerados con lsblk . .... . ... . ... . .... . ... . ... . . . 29
Salida 13 dmesg con NVMe. .... .... . ... . .... . ... . ... . . . 33
332
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
25 Determinación del volumen del dispositivo por etiqueta. . . . ... . .... . ... . ... . . . 42
30 Uso del comando man . .... . ... . ... . .... . ... . ... . . . 48
42 Uso del comando tee . .... . ... . ... . .... . ... . ... . . . 54
333
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
60 Uso de nmcli para ver las conexiones de red . . . . . .... . ... . ... . . . 76
64 Uso de lsof para identificar un puerto TCP abierto . . . . . .... . ... . ... . . . 79
69 Impedir el inicio del servicio con chmod 644 . . . . . . .... . ... . ... . . . 83
334
Machine Translated by Google
Versión 4.95.1 Introducción a Linux para los forenses y encargados de hacer cumplir la ley
76 Ping sin ltrar ( sin reglas de iptables ) . . . . ... . .... . ... . ... . . . 87
82 Edición del archivo de la lista negra . .... .... . ... . .... . ... . ... . . . 92
89 Instalación del paquete sbotools . . ... . ... . .... . ... . ... . . . 100
92 Uso de sbofind para leer un LÉAME . . ... . ... . .... . ... . ... . . . 102
94 Ver README para lshw usando sbofind . . ... . .... . ... . ... . . . 103
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
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
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
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
133 Ejecutar dd en un disco con errores . . . . . ... . .... . ... . ... . . . 141
135 Visualización del archivo de mapa interrumpido . .... . ... . .... . ... . ... . . . 144
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
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
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
153 Simplemente comprimiendo un archivo con gzip . . . . . . . .... . ... . ... . . . 159
154 Simplemente descomprimiendo un archivo con gzip -d . ... . .... . ... . ... . . . 159
157 Imágenes y hashing con compresión directa . . .... . ... . .... . . 161
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
182 Usar losetup con opciones de partición . . . ... . .... . ... . ... . . . 177
183 Listado de los nodos /dev/loopXpY producidos por losetup -P .. . . . . ... . . . 177
186 Instalación de afflib con sbotools . . . . . . ... . .... . ... . ... . . . 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
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
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
253 Comprobación de los tipos de sistema de archivos de nuestras imágenes de partición con el archivo . .... . . 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
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
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
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
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
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
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
338 Visualización de la ayuda de bulk_extractor . .. ... . ... . .... . ... . ... . . . 278
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
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
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
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
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
384 Uso de xxd para ver valores especí cos de la clave de registro. . . . . . . ... . . . 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