💻SMB
Protocolo SMB
Server Message Block
( SMB
) es un protocolo cliente-servidor que regula el acceso a archivos y directorios completos y otros recursos de la red, como impresoras, enrutadores o interfaces liberadas para la red. El intercambio de información entre diferentes procesos del sistema también se puede manejar según el protocolo SMB. SMB estuvo por primera vez disponible para un público más amplio, por ejemplo, como parte del sistema operativo de red OS/2 LAN Manager y LAN Server.
Desde entonces, el principal campo de aplicación del protocolo ha sido en particular la serie de sistemas operativos Windows, cuyos servicios de red soportan SMB de manera compatible con versiones anteriores, lo que significa que los dispositivos con ediciones más recientes pueden comunicarse fácilmente con dispositivos que tienen una versión anterior de Microsoft. sistema instalado. Con el proyecto de software libre Samba también existe una solución que permite el uso de SMB en distribuciones Linux y Unix y, con ello, la comunicación multiplataforma a través de SMB.
El protocolo SMB permite al cliente comunicarse con otros participantes en la misma red para acceder a archivos o servicios compartidos con él en la red. El otro sistema también debe haber implementado el protocolo de red y haber recibido y procesado la solicitud del cliente utilizando una aplicación de servidor SMB. Pero antes ambas partes deben establecer una conexión, por lo que primero intercambian los mensajes correspondientes.
En las redes IP, SMB utiliza el protocolo TCP para este propósito, que proporciona un protocolo de enlace de tres vías entre el cliente y el servidor antes de que finalmente se establezca una conexión. Las especificaciones del protocolo TCP también rigen el transporte posterior de datos. Podemos echar un vistazo a algunos ejemplos aquí .
Un servidor SMB puede proporcionar partes arbitrarias de su sistema de archivos local como recursos compartidos. Por lo tanto, la jerarquía visible para un cliente es parcialmente independiente de la estructura del servidor. Los derechos de acceso están definidos por Access Control Lists
( ACL
). Se pueden controlar de manera detallada en función de atributos como execute
, read
y full access
para usuarios individuales o grupos de usuarios. Las ACL se definen en función de los recursos compartidos y, por lo tanto, no corresponden a los derechos asignados localmente en el servidor.
Cheatsheet
Comando | Descripción |
| Autenticación de sesión nula en SMB. |
| Conéctese a un recurso compartido SMB específico. |
| Interacción con el objetivo mediante RPC. |
| Enumeración de nombres de usuario mediante scripts Impacket. |
| Enumeración de acciones de PYMES. |
| Enumeración de recursos compartidos de SMB mediante autenticación de sesión nula. |
| Enumeración SMB usando enum4linux. |
Samba
Como se mencionó anteriormente, existe una variante alternativa al servidor SMB, llamada Samba, desarrollada para el sistema operativo basado en Unix. Samba implementa el protocolo de red Common Internet File System
( CIFS
). CIFS es un "dialecto" de SMB. En otras palabras, CIFS es una implementación muy específica del protocolo SMB, que a su vez fue creado por Microsoft. Esto permite a Samba comunicarse con sistemas Windows más nuevos. Por eso se suele denominar SMB / CIFS
. Sin embargo, CIFS es la extensión del protocolo SMB. Entonces, cuando pasamos comandos SMB a través de Samba a un servicio NetBIOS anterior, generalmente se conecta al servidor Samba a través de los puertos TCP 137
, 138
y 139
pero CIFS usa solo el puerto TCP 445
. Existen varias versiones de SMB, incluidas versiones obsoletas que todavía se utilizan en infraestructuras específicas.
Versión PYME | Soportado | Características |
CIFS | windows nt 4.0 | Comunicación a través de la interfaz NetBIOS |
PyME 1.0 | ventana 2000 | Conexión directa vía TCP |
Pymes 2.0 | Windows Vista, servidor Windows 2008 | Actualizaciones de rendimiento, firma de mensajes mejorada, función de almacenamiento en caché |
PyME 2.1 | Windows 7, servidor Windows 2008 R2 | Mecanismos de bloqueo |
Pymes 3.0 | Windows 8, servidor Windows 2012 | Conexiones multicanal, cifrado de extremo a extremo, acceso a almacenamiento remoto |
PyME 3.0.2 | Windows 8.1, servidor Windows 2012 R2 | |
PyME 3.1.1 | Windows 10, servidor Windows 2016 | Comprobación de integridad, cifrado AES-128 |
Con la versión 3, el servidor Samba obtuvo la capacidad de ser miembro de pleno derecho de un dominio de Active Directory. Con la versión 4, Samba incluso proporciona un controlador de dominio Active Directory. Para ello contiene varios de los llamados demonios, que son programas en segundo plano de Unix. El demonio del servidor SMB ( smbd
) perteneciente a Samba proporciona las dos primeras funcionalidades, mientras que el demonio de bloque de mensajes NetBIOS ( nmbd
) implementa las dos últimas funcionalidades. El servicio SMB controla estos dos programas en segundo plano.
Sabemos que Samba es adecuado tanto para sistemas Linux como Windows. En una red, cada anfitrión participa en la misma workgroup
. Un grupo de trabajo es un nombre de grupo que identifica una colección arbitraria de computadoras y sus recursos en una red SMB. Puede haber varios grupos de trabajo en la red en un momento dado. IBM desarrolló un application programming interface
( API
) para computadoras en red llamado Network Basic Input/Output System
( NetBIOS
). La API de NetBIOS proporcionó un modelo para que una aplicación se conectara y compartiera datos con otras computadoras. En un entorno NetBIOS, cuando una máquina se conecta, necesita un nombre, lo cual se realiza mediante el llamado name registration
procedimiento. Cada host reserva su nombre de host en la red o se utiliza el servidor de nombres NetBIOS ( ) para este propósito. NBNS
También se ha mejorado para el Servicio de nombres de Internet de Windows ( WINS
).
Configuración predeterminada
Como podemos imaginar, Samba ofrece una amplia gama de ajustes que podemos configurar. Nuevamente, definimos la configuración a través de un archivo de texto donde podemos obtener una descripción general de algunas de las configuraciones. Estas configuraciones se ven similares a las siguientes cuando se filtran:
Vemos configuraciones globales y dos recursos compartidos destinados a impresoras. La configuración global es la configuración del servidor SMB disponible que se utiliza para todos los recursos compartidos. Sin embargo, en los recursos compartidos individuales se pueden sobrescribir los ajustes globales, que probablemente incluso se configuren incorrectamente. Veamos algunas de las configuraciones para comprender cómo se configuran los recursos compartidos en Samba.
Configuración | Descripción |
| El nombre del recurso compartido de red. |
| Grupo de trabajo que aparecerá cuando los clientes consulten. |
| El directorio al que se le dará acceso al usuario. |
| La cadena que aparecerá cuando se inicie una conexión. |
| ¿Sincronizar la contraseña de UNIX con la contraseña de SMB? |
| ¿Permitir que los usuarios no autenticados accedan al recurso compartido definido? |
| ¿Qué hacer cuando la solicitud de inicio de sesión de un usuario no coincide con un usuario UNIX válido? |
| ¿Esta acción debería aparecer en la lista de acciones disponibles? |
| ¿Permitir conectarse al servicio sin usar contraseña? |
| ¿Permitir a los usuarios leer solo archivos? |
| ¿Qué permisos se deben establecer para los archivos recién creados? |
Configuraciones peligrosas
Algunas de las configuraciones anteriores ya traen algunas opciones sensibles. Sin embargo, supongamos que cuestionamos las configuraciones que se enumeran a continuación y nos preguntamos qué podrían ganar los empleados con ellas, así como los atacantes. En ese caso veremos qué ventajas y desventajas traen consigo los ajustes.
Tomemos el escenario browseable = yes
como ejemplo. Si nosotros, como administradores, adoptamos esta configuración, los empleados de la empresa tendrán la comodidad de poder consultar las carpetas individuales con el contenido. Eventualmente se utilizan muchas carpetas para una mejor organización y estructura. Si el empleado puede navegar a través de los recursos compartidos, el atacante también podrá hacerlo después de acceder con éxito.
Configuración | Descripción |
| ¿Permitir listar acciones disponibles en la acción actual? |
| ¿Prohibir la creación y modificación de archivos? |
| ¿Permitir a los usuarios crear y modificar archivos? |
| ¿Permitir conectarse al servicio sin usar contraseña? |
| ¿Respetar los privilegios asignados a un SID específico? |
| ¿Qué permisos se deben asignar a los archivos recién creados? |
| ¿Qué permisos se deben asignar a los directorios recién creados? |
| ¿Qué script debe ejecutarse al iniciar sesión el usuario? |
| ¿Qué script debe ejecutarse cuando se cierra el script? |
| ¿Dónde se debe almacenar la salida del script mágico? |
Creemos un recurso compartido llamado [notes]
y algunos otros y veamos cómo la configuración afecta nuestro proceso de enumeración. Usaremos todas las configuraciones anteriores y las aplicaremos a este recurso compartido. Por ejemplo, esta configuración se aplica a menudo, aunque sólo sea con fines de prueba. Si se trata de una subred interna de un equipo pequeño en un departamento grande, esta configuración a menudo se conserva o se olvida para restablecerla. Esto lleva al hecho de que podemos navegar por todos los recursos compartidos y, con una alta probabilidad, incluso descargarlos e inspeccionarlos.
Ejemplo de Share
Se recomienda encarecidamente consultar las páginas de manual de Samba, configurarlo nosotros mismos y experimentar con los ajustes. Luego descubriremos aspectos potenciales que nos resultarán interesantes como probadores de penetración. Además, cuanto más nos familiaricemos con el servidor Samba y SMB, más fácil será orientarnos en el entorno y utilizarlo para nuestros propósitos. Una vez nos hayamos ajustado /etc/samba/smb.conf
a nuestras necesidades, tenemos que reiniciar el servicio en el servidor.
Reiniciar Samba
Ahora podemos mostrar una lista ( -L
) de los recursos compartidos del servidor con el comando smbclient
de nuestro host. Usamos el llamado null session
( -N
), que es el acceso anonymous
sin el ingreso de usuarios existentes o contraseñas válidas.
SMBclient - Conexión al recurso compartido
Podemos ver que ahora tenemos cinco recursos compartidos diferentes en el servidor Samba según el resultado. Por tanto print$
y IPC$
ya están incluidos por defecto en la configuración básica, como ya hemos visto. Ya que nos ocupamos del recurso compartido [notes]
, iniciemos sesión e inspeccionemos usando el mismo programa cliente. Si no estamos familiarizados con el programa cliente, podemos usar el comando help
al iniciar sesión correctamente, enumerando todos los comandos posibles que podemos ejecutar.
Una vez que hayamos descubierto archivos o carpetas interesantes, podemos descargarlos usando el get
comando. Smbclient también nos permite ejecutar comandos del sistema local usando un signo de exclamación al principio ( !<cmd>
) sin interrumpir la conexión.
Descargar archivos desde SMB
Desde el punto de vista administrativo, podemos comprobar estas conexiones mediante smbstatus
. Además de la versión Samba, también podemos ver quién, desde qué host y qué recurso compartido está conectado el cliente. Esto es especialmente importante una vez que hemos entrado en una subred (quizás incluso aislada) a la que los demás aún pueden acceder.
Por ejemplo, con seguridad a nivel de dominio, el servidor samba actúa como miembro de un dominio de Windows. Cada dominio tiene al menos un controlador de dominio, normalmente un servidor Windows NT que proporciona autenticación de contraseña. Este controlador de dominio proporciona al grupo de trabajo un servidor de contraseñas definitivo. Los controladores de dominio realizan un seguimiento de los usuarios y las contraseñas en su propio Security Authentication Module
( SAM
) y autentican a cada usuario cuando inician sesión por primera vez y desean acceder al recurso compartido de otra máquina.
Estado de samba
Enumeración del servicio
Volvamos a una de nuestras herramientas de enumeración. Nmap también tiene muchas opciones y scripts NSE que pueden ayudarnos a examinar más de cerca el servicio SMB del objetivo y obtener más información. La desventaja, sin embargo, es que estas exploraciones pueden llevar mucho tiempo. Por tanto, también es recomendable mirar el servicio manualmente, principalmente porque podemos encontrar muchos más detalles de los que Nmap podría mostrarnos. Sin embargo, primero veamos qué puede encontrar Nmap en nuestro servidor Samba de destino, donde creamos el recurso compartido [notes]
con fines de prueba.
Nmap
Podemos ver en los resultados que Nmap no nos proporcionó mucho aquí. Por tanto, deberíamos recurrir a otras herramientas que nos permitan interactuar manualmente con la PYME y enviar solicitudes específicas de información. Una de las herramientas útiles para esto es rpcclient
. Esta es una herramienta para realizar funciones de MS-RPC.
La Llamada a Procedimiento Remoto ( RPC
) es un concepto y, por tanto, también una herramienta central para realizar estructuras operativas y de trabajo compartido en redes y arquitecturas cliente-servidor. El proceso de comunicación vía RPC incluye el paso de parámetros y la devolución de un valor de función.
RPC Client
Rpcclient nos ofrece muchas solicitudes diferentes con las que podemos ejecutar funciones específicas en el servidor SMB para obtener información. Puede encontrar una lista completa de todas estas funciones en la página de manual de rpcclient.
Consulta | Descripción |
| Información del servidor. |
| Enumere todos los dominios que están implementados en la red. |
| Proporciona información de dominio, servidor y usuario de los dominios implementados. |
| Enumera todas las acciones disponibles. |
| Proporciona información sobre una acción específica. |
| Enumera todos los usuarios del dominio. |
| Proporciona información sobre un usuario específico. |
RPC Client: Enumeración
Estos ejemplos nos muestran qué información se puede filtrar a usuarios anónimos. Una vez que un usuarioanónimo
tiene acceso a un servicio de red, solo se necesita un error para otorgarle demasiados permisos o demasiada visibilidad para poner en riesgo significativo a toda la red.
Lo más importante es que el acceso anónimo a dichos servicios también puede conducir al descubrimiento de otros usuarios, que pueden ser atacados con fuerza bruta en el caso más agresivo. Los seres humanos son más propensos a errores que los procesos informáticos configurados correctamente, y la falta de conciencia de seguridad y la pereza a menudo conducen a contraseñas débiles que pueden descifrarse fácilmente. Veamos cómo podemos enumerar usuarios usando rpcclient
.
RPC Client - Enumeración de usuarios
Luego podemos usar los resultados para identificar el RID del grupo, que luego podemos usar para recuperar información de todo el grupo.
RPC Client - Información del grupo
Sin embargo, también puede ocurrir que no todos los comandos estén disponibles para nosotros, y tengamos ciertas restricciones en función del usuario. Sin embargo, la consulta queryuser <RID>
se permite principalmente según el RID. Entonces podemos usar rpcclient para aplicar fuerza bruta a los RID para obtener información.
Debido a que es posible que no sepamos a quién se le ha asignado qué RID, sabemos que obtendremos información al respecto tan pronto como consultemos un RID asignado. Hay varias formas y herramientas que podemos utilizar para esto. Para seguir con la herramienta, podemos crear un For-loop
uso Bash
donde enviamos un comando al servicio usando rpcclient y filtramos los resultados.
Brute Force a User RIDs
Una alternativa a esto sería un script Python de Impacket llamado samrdump.py .
Impacket - Samrdump.py
La información que ya hemos obtenido con rpcclient
también la podemos obtener utilizando otras herramientas. Por ejemplo, las herramientas SMBMap y CrackMapExec también se utilizan ampliamente y son útiles para la enumeración de servicios SMB.
SMB Map
CrackMapExec
Otra herramienta que vale la pena mencionar es la llamada enum4linux-ng , que se basa en una herramienta más antigua, enum4linux. Esta herramienta automatiza muchas de las consultas, pero no todas, y puede devolver una gran cantidad de información.
Enum4Linux-ng - Instalación
Enum4Linux-ng - Enumeración
Necesitamos utilizar más de dos herramientas para la enumeración. Porque puede suceder que debido a la programación de las herramientas, obtengamos información diferente que tengamos que comprobar manualmente. Por lo tanto, nunca debemos confiar únicamente en herramientas automatizadas de las que no sabemos exactamente cómo fueron escritas.
Última actualización