Entender el Flujo de Comunicación para la Arquitectura de un Sistema

Body

Así como se necesita entender cuales componentes existen en la red, además de como todos estos se comportan y relacionan, es igual de importantemente crítico tener un entendimiento completo e integral sobre como las comunicaciones fluyen sobre la red. Sin esta comprensión los datos sensibles podrían ser transmitidos y almacenados incorrectamente, o incluso peor, abandonar completamente la red. Utilizando el diagrama de arquitectura lógica se puede tener un claro entendimiento sobre como y donde los datos fluyen de entrada y salida en la red, además de determinar la postura adecuada en ciberseguridad. Este mapa para el flujo de comunicación ayuda a entender la exposición y visibilidad de componentes clave de la red hacia los ciberatacantes o internos maliciosos. Este entendimiento constituye las bases para crear un mapa sobre amenazas, para consecuentemente implementar controles y medidas correctivas en ciberseguridad.

Entender cual información puede fluir de salida y entrada entre los diferentes segmentos de la red, es importante no solo para entender el punto de compromiso, sino la cantidad de daño el cual puede ser causado por un ciberatacante. En muchos incidentes una de las razones por las cuales un ciberacatante tuvo la capacidad de causar mucho daño, es porque la organización no entendía como los datos fluían dentro de la red. Frecuentemente existen conexiones configuradas sobre las cuales las personas desconocían. Por tal razón siempre recordar; si la ofensiva conoce más comparado con la defensa, la defensa está destinada a perder. El flujo de comunicación ayuda a la defensa a tener un mejor entendimiento sobre la exposición, para así arreglarlo de manera proactiva.

Fuentes:

https://dl.acm.org/doi/10.5555/2829118

Diseño Físico para la Arquitectura de un Sistema

Body

Un diseño físico incluye todos los principales sistemas y factores dentro de áreas de servicio previamente definidos, como también servicios, objetos, o soluciones de software específicos. Este es el nivel de diseño representando como las redes y todos sus componentes ser comportarán mientras están “sobre el papel”. El diseño físico es el último creado antes de se implemente el diseño de la red. Este diseño usualmente precede la implementación final, o es incluida y mejorada por el diseño final de implementación.

El diseño físico muestra todos los detalles tales como el sistema operativo, parches, e incluso versiones. Es particularmente importante para adelantarse pues las actualizaciones de software realizan una diversidad de tareas. Las actualizaciones están regularmente disponibles para sistemas operativos, dispositivos de red, y programas de software individuales. Realizar estas actualizaciones entregará una multitud de revisiones hacia la computadora. Esto frecuentemente incluye adicionar alguna nueva funcionalidad la cual ha sido desarrollada, eliminar funcionalidades desactualizadas las cuales pueden contener vulnerabilidades, actualizar controladores los cuales podrían también tener exploits, entregar arreglos para fallas, y lo más importante, arreglar cualquier agujero en seguridad el cual haya sido descubierto.

Cualquier defecto físico puede ser identificado dentro de todos los sistemas y transmisiones. Limitaciones físicas también afectan el costo de despliegue y mantenimiento, como también crear (o eliminar) algunos retos de ciberseguridad, dependiendo sobre como se despliega la red física.

Fuentes:

https://dl.acm.org/doi/10.5555/2829118

Diseño Lógico para la Arquitectura de un Sistema

Body

Un diseño lógico de red, desde el punto de vista de un arquitecto y usuario, representa como los datos pasan entre dispositivos sobre una red. Es de lejos más detallado comparado con el diseño conceptual, e inicia dividiendo como actualmente opera la red en el mundo real. El diseño lógico difiere de un diseño físico, en lo referente a no refleja las conexiones entre los cables físicos, las computadoras, y otros sistemas de red. Un ejemplo de este punto podría ser; el diseño físico podría especificar la forma de la topología de red, mientras un diseño lógico no.

Típicamente un diseño de red lógico es mostrado como un diagrama de red detallado, el cual utiliza iconos y otras representaciones para mostrar, estaciones de trabajo, servidores, impresoras, escáneres, encaminadores, conmuntadores, concentradores, cortafuegos, y otros dispositivos de red. Este diseño puede mostrar como los cables se conectan para constituir la red, y usualmente especificarán el tipo de estaciones de trabajo según el sistema operativo.

Incluir servicios de la empresa, nombres de aplicación, y otra información funcional; como relevantes también es clave en el diseño lógico. Al final las redes son diseñadas y construidas para servir a una función mayor, lo cual es permitir la empresa u organización funcione de manera más efectiva y eficiente. Observar aquello ejecutándose sobre la red y porque, proporcionará una visión única sobre como mejorar la ciberseguridad, lo cual puede ser diferente de la misma arquitectura de red ejecutando servicios y aplicaciones de la empresa completamente diferentes.

Fuentes:

https://dl.acm.org/doi/10.5555/2829118

Diseño Conceptual para la Arquitectura de un Sistema

Body

El propósito clave de un diseño a alto nivel con una arquitectura de seguridad, es proporcionar una visión general del sistema completo, con el propósito de identificar los componentes principales a desplegarse. Esta tipo de visión general es críticamente importante, especialmente con algo tan completo como una red moderna. La puesta en funcionamiento de los componentes fundamentales de una red, requiere soporte y contribuciones desde muchas distintas disciplinas profesionales, cada una con un conjunto crítico de habilidades. Es aquí donde un diseño conceptual fuerte será compatible con cualquier subdiseño y con la gran imagen.

El diseño conceptual debe brevemente describir todas las plataformas, sistemas, productos, servicios, y procesos, los cuales dependen e incluyen cualquier cambio importante el cual podría ser necesario realizar sobre ellos. Un diseño conceptual puede incluso incorporar consideraciones para todo lo significativo; comercial, legal, entorno, seguridad, salvaguarda y riesgo técnico, inconvenientes, y suposiciones. El diseño conceptual también ayudará en identificar cada tipo de usuario final, lo cual permitirá a los arquitectos tengan la debida consideración a la experiencia buscada por el cliente.

Utilizar diagramación de caja negra es un método el cual muestra un dispositivo, sistema, u objeto, únicamente en términos de sus entradas y salidas, sin requerir algún conocimiento sobre su funcionamiento interno. Esto simplifica las características de la red durante la fase de diseño.

Fuentes:

https://dl.acm.org/doi/10.5555/2829118

Entender la Arquitectura de un Sistema

Body

Diseño Conceptual

Es un diseño de alto nivel, el cual incluye los componentes fundamentales para una arquitectura de red. Esta vista abstraída proporciona al profesional en ciberseguridad, una imagen comprensible sobre el propósito global de la red, y porque la solución fue diseñada de esta manera. El diseño conceptual incluirá los principales sistemas tecnológicos, cualquier sistema externo requerido para integración o funcionalidad general, flujo de datos, y comportamiento del sistema a alto nivel. Este método de diseño utiliza una perspectiva de diagramación “caja negra” para simplificar sistemas complejos en componente únicos con un rol o propósito general.

Diseño Lógico

Representa cada función lógica en el sistema. Es mucho más detallado y debe incluir todos los componentes principales en la red, además de sus relaciones. Los flujos de datos detallados y conexiones son también mapeados en el diseño lógico. Este diseño es creado principalmente para los desarrolladores y arquitectos en ciberseguridad. Los diseños lógicos incluyen servicios, nombres de aplicación, e información relevante de desarrollo, pero típicamente no incluye nombres de servidor o direcciones.

Diseño Físico

Incluye todos los principales sistemas y factores dentro de áreas previamente definidas de servidor. Este diseño físico es usualmente el último diseño creado antes de la implementación final, y puede ser utilizado como un recurso por el equipo de implementación final. Este nivel de diseño incluye el conocimiento sobre todos los detalles del sistema operativo, parches, y versiones. Cualquier restricción o limitación también son identificados dentro de componentes servidor, flujos de datos, o conexiones.

Entender el Flujo de Comunicación

Inicia con la arquitectura lógica. Cada flujo de comunicación, ya sea para intercambio de datos o mensajes para control, debe ser diagramado sin importar su propósito.

Conocer el valor de los Datos

También inicia con la arquitectura lógica. Y así como se necesita para conocer cada flujo de comunicación, también se necesita conocer donde reside cada archivo y datos valiosos.

Fuentes:

https://dl.acm.org/doi/10.5555/2829118

Formatos para Mostrar el Tiempo en Wireshark

Body

Mientras se realiza captura paquete utilizando Wireshark, a cada paquete se le define una marca de tiempo. Estas marcas de tiempo se guardarán en el archivo de captura, por lo cual estarán disponibles para su posterior análisis.

El formato para la presentación de la marca de tiempo y su precisión en la lista de paquetes se pueden elegir usando la opción “View → Time Display Format”.

Las marcas de tiempo, sus precisiones, y todo lo relacionado podría resultar algo confuso al inicio.

Cuando se capturan paquetes, a cada paquete se le marca un tiempo conforme es registrado por Wireshark. Estas marcas de tiempo también se guardan en un archivo de captura, consecuentemente estarán disponibles para ser utilizados en un análisis posterior.

¿De dónde vienen estas marcas de tiempo? Durante la captura Wireshark obtiene las marcas de tiempo desde la biblioteca libpcap (Npcap), la cual a su vez las obtiene del kernel del sistema operativo. Si los datos de captura se cargan desde un archivo de captura, Wireshark obviamente obtiene los datos desde ese archivo.

Fuentes:

https://www.wireshark.org/docs/wsug_html_chunked/ChWorkTimeFormatsSecti…
https://www.wireshark.org/docs/wsug_html_chunked/ChAdvTimestamps.html

Resolución de Nombres en Wireshark

Body

Una característica importante se relaciona con OPSEC (Seguridad Operacional). Por defecto Wireshark no realiza consultas DNS para cada dirección IP visualizada. Las razones para esto son probablemente minimizar el tráfico de red y carga sobre el sistema, pero desde la perspectiva forense se incluye la postura de seguridad sobre la actividad de análisis por si misma. Por esta razón es importante verificar este ajuste antes de iniciar la consulta de lo cual podría ser tráfico hostil. Es cada vez más común para un ciberatacante ejecutar sus propios servidores DNS y vigilar las consultas hechas contra estas. Al hacer esto un ciberatacante disciplinado y bien financiado podría incorporar una función en el malware el cual causaría consultas de DNS de un patrón determinado cuando se observe tráfico en Wireshark. Si sus servidores DNS ven este patrón de consulta, el ciberatacante podría conocer dos aspectos críticos sobre la actividad de análisis. Primero, se conocería alguien está consultando el tráfico. Segundo, se sabría la dirección IP desde donde provienen las consultas DNS, lo cual significa se tendría una idea bastante clara de dónde se encuentra.

Aunque esto puede parecer descabellado o incluso un poco paranoico, se conoce los ciberatacantes mejoran sus capacidades con bastante rapidez. Debido a la mejor práctica es minimizar el tráfico de red innecesario y al mismo tiempo maximizar razonablemente la posición OPSEC, esta opción casi nunca debe habilitarse.

Las versiones recientes de Wireshark han añadido una funcionalidad muy útil para solucionar este riesgo (Desempeño o OPSEC), incorporando una característica pasiva de DNS en la herramienta. Si la captura de paquetes en Wireshark incluye tráfico DNS para las direcciones IP, utilizará esta información para poblar la interfaz de usuario. Esto proporciona al profesional con los datos DNS mientras evita el riesgo OPSEC, pero también permite resolución DNS en un momento dado, permitiendo ver cuales fueron los resultados del DNS cuando la evidencia fue recolectada, no lo cual podría (o no) ser en el momento del análisis.

Es usualmente una preferencia personal si un profesional habilita la resolución de nombres MAC y transporte, y tampoco causa Wireshark genere su propio tráfico de red o cualquier preocupación OPSEC. Ambos consultan sus datos desde archivos sobre el sistema local. La resolución de nombres MAC significa Wireshark consultará los primeros tres bytes de una dirección MAC contra una tabla de proveedores. Estos datos son obtenidos desde el archivo “/usr/share/wireshark/manuf”.

De manera similar la resolución de nombres de transporte utilizará el archivo “/usr/share/wireshark/services”. Para consultar nombres de servicios de red comprensibles para los seres humanos, en lugar de los números de puertos. Esta es una característica conveniente en la Interfaz Gráfica de Usuario, y se busca independientemente de si el protocolo en uso realmente coincide con el puerto.

Fuentes:

https://www.wireshark.org/docs/wsug_html_chunked/ChAdvNameResolutionSec…

Disposición de la Interfaz de Wireshark

Body

Una funcionalidad muy útil algunas veces obviadas por un profesional forense, es cambiar la vista de los paneles para estar más confortables en requerimientos específicos. Esto frecuentemente es útil si la pantalla de un sistema tiene un tamaño reducido, o si si se está mostrando algo sobre una pantalla muy grande comparado con una estación de trabajo de único usuario. El profesional puede seleccionar cualquiera de las seis disposiciones para los paneles, como también cual información será mostrada en cada panel. Aunque es un ajuste puramente cosmético, este es un retoque fácil puede frecuentemente proporciona un impulso masivo en la usabilidad.

Asegurarse de al menos se tenga un panel configurado para contener la “Lista de Paquetes”. Tres paneles pueden estar activos al mismo tiempo, y puede distribuir como se muestra en la capa superior. Los tamaños exactos de estos paneles se pueden cambiar según sea necesario una vez se abre un archivo de captura.

Seleccionar “Mostrar Separador de Lista de Paquetes”, causa las entradas de lista de paquetes se separen ligeramente, lo cual puede mejorar la legibilidad a costo de la cantidad de paquetes mostrados en la lista de paquetes.

Seleccionar “Mostrar Definición de Columna” en el menú contextual de columna, el menú contextual de columna se amplía para mostrar el tipo de campo configurado actualmente para la columna. Esto puede ayudar a identificar la columna a seleccionar o modificar.

Seleccionar “Permitir Ordenar la Lista” habilita el operador de orden en todas las columnas. Esto puede evitar se active inadvertidamente un orden, lo cual puede tomar un tiempo considerable para archivos de captura de mayor tamaño.

Seleccionar “Habilitar Coloración al pasar el Mouse” habilita el resaltado del paquete actualmente apuntado en la lista de paquetes. El paquete seleccionado actualmente siempre está resaltado.

Seleccionar “Mostrar Número de Paquete Seleccionado” agrega el número de paquete seleccionado hacia los detalles del archivo de captura en la barra de estado, ocupando algo de espacio en la barra de estado.

Seleccionar “Mostrar Tiempo de Carga del Archivo” agrega el tiempo el cual tomó cargar el archivo de captura en la barra de estado, ocupando algo de espacio en la barra de estado.

Fuentes:

https://www.wireshark.org
https://www.wireshark.org/docs/wsug_html_chunked/ChCustPreferencesSecti…

Ejemplos de Tcpdump para Forense de Redes

Body

A continuación se presentan cuatro ejemplos separados sobre la utilización de Tcpdump.

El primer comando vigila la interfaz de red identificada como “enp0s17”, y muestra el contenido de los primeros 1,000 paquetes hacia la consola. El comando utiliza las siguientes opciones:

$ sudo tcpdump -n -s 100 -A -i enp0s17 -c 1000

-n No resuelve las direcciones IP hacia nombres de hosts o puertos hacia protocolos. Esta opción acelera significativamente tcpdump.
-s 100 Captura los primeros 100 bytes de cada paquete.
-A Envía el contenido de los paquetes (datos de aplicación) hacia la consola en adición hacia los metadatos estándar de los paquetes.
-i enp0s17 Utiliza “enp0s17” como la interfaz de red para captura.
-c 1000 Captura los primeros 1,000 paquetes desde la interfaz de red.

El segundo ejemplo toma el tráfico desde un archivo de entrada y filtra por una dirección IP específica hacia un archivo de salida de nombre “salida.pcap”. Este comando utiliza las siguientes opciones.

$ sudo tcpdump -n -r /tmp/captura.pcap -w /tmp/salida.pcap ‘host 192.168.0.96’

-n No resuelve las direcciones IP hacia nombres de hosts o puertos hacia protocolos. Esta opción acelera significativamente tcpdump.
-r Utiliza el archivo de captura de nombre “captura.pcap” como entrada.
-w Guarda el tráfico filtrado hacia el archivo “salida.pcap”.
‘host 192.168.0.96’ Este es el BPF utilizado por tcpdump para reducir paquetes a aquellos hacia o desde la dirección IP especificada.

El tercer comando captura 14 días de tráfico DNS, y luego finaliza. Cada periodo de 24 horas tiene un archivo separado (24 horas * 60 minutos * 60 segundos = 86400 segundos). BPFs limita la salida a solo tráfico TCP y UDP sobre el puerto 53.

$ sudo tcpdump -n -i enp0s17 -w /tmp/dns-%F.%T,pcap -G 86400 -W 14 ‘(tcp or udp) and port 53’

-n No resuelve las direcciones IP hacia nombres de hosts o puertos hacia protocolos. Esta opción acelera significativamente tcpdump.
-i enp0s17 Utiliza “enp0s17” como la interfaz de red para captura.
-w dns-%F.%T.pcap Guarda el trafico filtrado hacia archivos nombrados con la fecha y hora con la cual inicia.
-G Rota los archivos de salida después de 86,400 segundos.
-W Crea 14 archivos de salida y luego finaliza.
‘(tcp or udp) and port 53’ BPF limita la recolección hacia el puerto 53, sobre ya sea TCP o UDP.

El comando final crea un número infinito de archivos de 100MB cada uno. Estos archivos contiene tráfico desde o hacia una dirección IP particular de interés.

$ sudo tcpdump -n -i enp0s17 -w /tmp/atacante.pcap -C 100 ‘host 192.168.0.96’

-n No resuelve las direcciones IP hacia nombres de hosts o puertos hacia protocolos. Esta opción acelera significativamente tcpdump.
-i enp0s17 Utiliza “enp0s17” como la interfaz de red para captura.
-w Guarda el archivo filtrado hacia el archivo “atacante.pcap”
-C 100 Rota los archivos de salida después de 100MB
‘host 192.168.0.96’ BPF limita la recolección hacia un personaje particularmente turbio.

Fuentes:

https://www.tcpdump.org/
https://www.tcpdump.org/bpfexam/

Opciones útiles de Tcpdump para Forense de Redes

Body

Tcpdump es un poderoso analizador de paquete en linea de comando; y libpcap una librería portable C/C++ para realizar captura de tráfico de red. Tcpdump imprime una descripción del contenido de los paquetes en una interfaz de red, coincidentes con una expresión Booleana.

Aunque el número de trucos con Tcpdump resultaría ingente y demandaría muchas publicaciones, existen algunas opciones las cuales pueden ser particularmente útiles en apoyo al proceso forense de redes y de investigación.

-r Lee paquetes de datos desde un archivo pcap existente, en lugar de una interfaz de red en vivo.

-w Escribe paquetes coincidentes con un BPF proporcionado hacia un archivo pcap en lugar de la pantalla.

-i Especifica la interfaz desde el cual capturar tráfico. Puede ser el nombre especifico de una interfaz como “venet0”, “enp0s3”, o “en1”, o la pseudo interfaz “any” para de manera simultanea capturar desde todas las interfaces disponibles en plataformas soportándola.

-n Previene cualquier resolución DNS. Sin esto, Tcpdump podría realizar una consulta DNS para cada dirección IP observada. Esto es indeseable por muchas razones. Esto añade una significativa cantidad de tráfico de red en el entorno, causando retrasos en el procesamiento y almacenamiento de paquetes. También se tiene el riesgo de alertar un ciberatacantes bajo investigación (o al menos capturar) su tráfico, un suceso preocupante. La opción “-n” es automática cuando se utiliza Tcpdump.

-C Cuando se utiliza con la opción “-w” para escribir paquetes de datos hacia un archivo en lugar de mostrar datos en la consola, esta opción crea un archivo pcap después de alcanzar un tamaño especifico (en megabytes).

-G Similar a la opción “-C”, pero rota el archivo después de un número especifico de segundos; por ejemplo “-G 86400” podría rotar diariamente. Sin embargo esta opción requiere un nombre de archivo especialmente formateado, utilizando marcadores para posición de cadena de formato compatibles con strftime(3). Por ejemplo un nombre de de archivo de salida “output_%F.%T.pcap” resultará en nombres de archivo como “outfile_2024-07-22.12:27:34.pcap”, con el tiempo representando el tiempo de inicio para cada archivo creado. Precaución. Utilizar un nombre de archivo sin cadena de formato resultará en un archivo de salida continuamente siendo sobrescrito.

-W Cuando es utilizado con “-w” y ya sea “-C” o -G“, únicamente el número especifico de archivo serán mantenidas. Con “-C” esto resultará en una secuencia rotativa de un número de archivos solicitado. Con “-G”, tcpdump creará el número solicitado de archivos y luego finalizará.

-F En lugar de especificar el BPF en linea de comando, se carga desde un archivo. Particularmente útil cuando se trabaja con BPFs complejos o comparte BPFs entre un equipo. Por ejemplo es posible se desee conservar el BPF preferido del equipo en un repositorio git para asegurarse todos estén usando los correctos.

Fuentes:

https://www.tcpdump.org/
https://www.tcpdump.org/manpages/tcpdump.1.html