30 noviembre, 2016

Solución a Initramfs en el arranque de Linux

Puede darse el caso por diversas razones que el sistema operativo no consiga montar la partición principal de arranque, el cual nos mostrará un prompt en el arranque tipo (initramfs).

Initramfs (Initial Ramdisk File System), sistema de archivos ram inicial (ramdisk), es un archivo cpio comprimido normalmente en formato gzip que contiene un pequeño sistema de archivos que se cargará en la memoria RAM en el proceso de arranque del núcleo. El kernel lo montará, como una pequeña raíz, pues la necesita para completar algunas tareas relacionadas con módulos y controladores de dispositivos antes de poder arrancar el verdadero sistema de archivos raíz instalado en el disco duro e invocar al proceso init.

Figura 1: Prompt initramfs

La solución a este problema sería montar la partición raíz de forma manual, haciendo antes una comprobación de errores en el sistema de ficheros por si pasara algo, de ahí el problema inicial de que initramfs no diese montado en una primera vez la partición principal.

Desde la el prompt (initramfs) listamos el conjunto de particiones del sistema.
sudo fdisk -l
Figura 2: Lista de tablas de particiones.

En el caso anterior la partición que quiero recuperar es la la "/dev/sda1", aquí en cada caso puede ser distinto para cada usuario, dependiendo su escenario de particiones, tendremos que elegir la partición que sea correspondiente al sistema principal afectado.

Ahora usaremos fsck (File System Check) similar al chkdsk (CheckDisk) de Windows, fsck es una utilidad de comandos usada para las inconsistencias en los sistema de archivos y corregir posibles errores del sistema, se debería usar solo en sistemas desmontados.
sudo fsck /dev/sda1
Una vez realizada la comprobación anterior, montamos la partición manualmente.
sudo mount /dev/sda1 /mnt
Reiniciamos el sistema (reboot) y listo.

Saludos!

05 octubre, 2016

Error VirtualBox máquinas inaccesibles

Para aquellos que usen VirtualBox como virtualizador y tengan instaladas VMs en un medio externo-extraible (tipo disco portable o pendrive). Tenemos que indicarle en las preferencias de VirtualBox el path destino predeterminado donde queremos que se nos instale desde ese momento en adelante las VMs.

La problemática que esto nos puede plantear sería la siguiente, pongo escenario:
Al introducir nuestro medio extraible, en el cual se almancenan nuestra máquina virtuales, el sistema Windows le asigna una letra de unidad, por ejemplo "E:". Configuramos entonces en las preferencias de VirtualBox que este nos agrege las máquinas que creemos en esa unidad, y como es la unidad por defecto que establecimos si al desconectar y volver conectar nuestro medio extraible el sistema nos asigna siempre la misma letra de unidad, en este ejemplo: E:, no hay ningún problema.
¿Pero, qué pasaría si insertamos otro medio extraible y a este le asigna E: ya que tienen esa letra libre y a continuación insertamos el medio extraible que nos corresponde a las VMs?. Pues lo más común es que no nos recozca las VMs que tuviesemos cargadas en ese VirtualBox en cuestión.

Figura 1: VirtualBox: Error de mapeo de VMs no encontradas.

Que posibles soluciones se podrían realizar?

Eliminar solo la VM:
Una de ellas, sería eliminar la máquina virtual agregada a VirtualBox, pero no eliminar toda la VM sino eliminar solamente "el puntero o acceso hacía" la VM en cuestión, de modo que no estaríamos borrando la máquina virtual real almacenanda originalmente en el medio extraible. Cuando le damos a botón derecho > eliminar, puede mostrarnos dos opciones, una que nos la borre sin más y la otra que nos pregunte si deseamos "eliminar todos los archivos" o "solo borrar", le diremos que "solo borrar" de modo que este solo borra este acceso a la VM y no borra todos los archivos de la VM real almacenada en el medio extraible.

Agregar una VM ya existente:
Una vez eliminada solo la VM en cuestión la agregamos, aunque primeramente y para no ocasionar futuros problemas en las preferencias de VirtualBox cambiamos la letra de unidad anterior estableceida por la actual letra asignada a nuestro dispositivo externo que alamcena las VMs. Una vez hecho eso ahora tenemos dos posibles variantes para agregar una Vm ya existente.
En cualquier máquina virtual que creemos de VirtualBox esta crea tres tripos de ficheros fundamentales, un archivo .vbox (VirtualBox Machine Definition) el cual contiene la configuración inicial por defecto de la VM en la cual se cargará con esa configuración en VirtualBox entre otras opciones, el un archivo .vbox-prev sería una copia del .vbox y un último archivo .vdi (Virtual Disk Image) el cual por su tamaño de ocupación vemos que es el que contiene la máquina en su totalidad (el disco de la VM).
El fichero que nos interesa en este punto sería el .vbox extensión propietaria del propio VirtualBox el cual hace referencia al puntero de apertura de la máquina.

Opción 1: Por lo que una vez configurada en las preferencias con la nueva letra asignada como comenté anteriormente y eliminada solo la referencia de la máquina de VirtualBox, simplemente ejecutamos el fichero .vbox (puede que tarde un poco en la apertura) automáticamente se debería cargar de nuevo esa VM afectada en VirtualBox.
Opción 2: Si la opción anterior nos fallase o se nos quedase colgado VirtualBox (puede pasar en algún caso), entonces tendríamos que agregar la VM de forma manual, desde la barra de herramientas de VirtualBox > Máquina > Agregar > seleccionamos el fichero .vbox en cuestión y abrimos dicha máquina.

Figura 2: Agregar VM (.vbox) de forma manual en VirtualBox.

Cambiar letra de unidad o volumen:
Otra opción sería conservar las máquinas virtuales afectadas ya agregadas en VirtualBox y solamente cambiar la letra de unidad del medio externo por la letra que tengamos asignado en ese momento. Para esta solución tendríamos que tener privilegios de administrador local del equipo.

Opción 3: Podríamos hacerlo por consola de comandos con "Diskpart" o de forma gráfica por una consola de Microsoft con "Diskmgmt.msc".

Abrimos una consola de línea de comandos y entramos en la utilidad interactiva Diskpart, listamos los volúmenes disponibles, selecionamos la unidad de volumen afectada y finalmente asignamos la letra de unidad establecida en VirtualBox.
DISKPART> list volume
DISKPART> select volume x1
DISKPART> assign letter=x2
Donde x1: Sería número de volumen afectado a seleccionar.
Donde x2: Sería la letra de asignación a establecer.

Figura 3: Diskpart: Asignando nueva letra a un volumen.

En la siguiente captura vemos como el cambio de la nueva letra de unidad se realizó correctamente.

Figura 4: Diskpart: Nueva letra asignada con éxito.

La forma gráfica mediante diskmgmt.msc (administrador de discos de Windows), tendríamos que selecionar el volumen afectado, botón derecho en "Cambiar la eltra de y rutas de acceso de unidad...".

Figura 5: Diskmgmt.msc: Nueva letra asignada con éxito.

Selecionamos en "Cambiar...", asignar la letra de unidad siguiente y selecionamos la letra que queramos establecer y finalmente aceptamos los cambios.

Figura 6: Diskmgmt.msc: Asignando nueva letra a un volumen.

Cuarquiera de las opciones anteriores sería válida, personalmente cuando me ocurre este tipo de problema y no tengo privilegios para poder asignar otra letra de unidad, suelo agregar la VM en cuestión de forma manual a VirtualBox o directamente abrir el fichero .vbox desde el medio externo donde estuviese ubicada esa VM.

Saludos!

31 agosto, 2016

Instalar las Guest Additions en Linux

Las Guest Additions de VirtualBox son las equivalentes a las vmware-tools de VMWare Workstation, básicamente son módulos y controladores que mejoran el rendimiento y la usabilidad de la maquina virtual. Mejora la integración con el mouse, carpetas compartidas entre la VM y el anfitrión, mejora el soporte de vídeo permitiendo adaptar la redimensión de la pantalla de la VM a diferentes resoluciones, mejora la comunicación entre la VM y el anfitrión, mejor sincronización del reloj, etc.

Siempre que instalo una VM Linux en VirtualBox y a esta quiero instalarle las GuestAdditions estas siempre se me resisten al principio por el método de instalación gráfico y automático.
En este caso el ejemplo lo haré sobre un Kali Linux, pero sería de igual modo para cualquier sistema Linux.

Las Guest Additions están alojadas en una imagen .iso ubicadas en la raíz del path de instalación por defecto (C:\Program Files\Oracle\VirtualBox).
Para insertarlas directamente a través de VirtualBox con la VM ya iniciada.
Nos vamos a: "Dispositivos > Insertar imagen de CD de las <<Guest Additions>>".

Figura 1: Insertar la imagen .iso de Guest Additions de VirtualBox.

Cuando intentamos ejecutarlo una vez ya montado el CD nos salta un error de que no es posible ejecutar el programa, por que no pudo encontrar el .run de instalación.

Figura 2: Error al no poder ejecutar el programa de "VBoxLinuxAdditions.run".

Lo que haremos ahora será instalarlo de forma manual desde una terminal. Abrimos una terminal (Ctrl+Alt+T).
Los dispositivos externos se montan en el path: /media/, por lo que copiaremos el ejecutable "VBoxLinuxAdditions.run" desde el CD y lo llevaremos a un directorio home local (/root/). Una vez allí le daremos permisos para poder ser ejecutado por root y lanzaremos el ejecutable desde esa ubicación local.
cp /media/cdrom/VBoxLinuxAdditions.run /root/
chmod 755 /root/VBoxLinuxAdditions.run
cd /root
./VboxLinuxAdditions.run
Figura 3: Instalación de Guest Additions de VirtualBox en Kali Linux.

Simplemente con esto tendremos instaladas las Guest Additions de VirtualBox en una VM de Kali.

Saludos!

25 junio, 2016

Bypass UAC al acceder al recurso compartido C$ de Windows

En Windows existen ciertos recursos compartidos establecidos por defecto con intenciones administrativas. Entre ellos está el conocido C$ (C dolar), que seguramente muchos usaríamos para poder conectarnos al equipo remoto de una red de forma subyacente al usuario de ese equipo, básicamente tener acceso a su disco del sistema C: (letra de unidad asignada por defecto en sistemas Windows).
Podemos ver en la consola de Microsoft (fsmgmt.msc) de "Carpetas comparitdas", los recursos que por defecto son compartidos, donde veremos el conocido c$ (C dolar) entre otros.

Figura 1: Consola Miscroft fsmgmt.msc "Carpetas compartidas".

Para que esta conexión sea posible, a parte de tener las debidas configuraciones de red bien configuradas como veremos más adelante. Hablando en este caso de una "red privada o doméstica" es necesario una de las dos siguientes posibilidades:
- Conocer el usuario y contraseña con privilegios administrativos de la máquina remota.
- Crear un usuario y contraseña igual que el usuario con el que intentamos conectarnos al equipo remoto.

En este caso nos quedaremos con la opción más cómoda que sería la de añadir el usuario al equipo remoto.

En el caso de formar parte de una red de dominio, esto se debería administrar con grupos en el propio controlador de dominio (DC). En este caso podríamos crear un grupo en el que incluiríamos a los usuarios administrativos y ese grupo incluirlo en grupo de administradores de forma manual o por algún script mediante GPOs en los equipos de la red de Dominio.

Escenario de ejemplo:
Equipo: PLUTON | Usuario activo: maria
Equipo: JUPITER | Usuario activo: juan

En el siguiente ejemplo, de una red privada, el usuario activo en el equipo local es "juan" (equipo: Jupiter), pero el usuario remoto con el que queremos acceder desde el cliente es "maria" (del equipo: Pluton, pero que se creará también el equipo Jupiter). Por lo que en el equipo remoto crearíamos una cuenta de usuario con la misma contraseña que la del equipo donde queremos acceder y lo agregamos al grupo de Administradores, de modo que haiga una coherencia entre este usuario en ambas máquinas.

Figura 2: Usuarios administradores del equipo remoto.

Hasta este punto todo correcto. Pero cuando intentamos acceder con el usuario y contraseña del mismo que el del equipo remoto aunque exista dicha coherencia de credenciales igualmente, por seguridad, nos solicita usuario y contraseña a través del UAC. Por lo que queremos es evitar o eludir el UAC en este caso.

Escribiendo en una ventana de ejecución el nombre o dirección IP del equipo remoto seguido del recurso compartido C$: \\equipo_remoto\c$.

Figura 2: Ejecutando el recurso compartido C$ hacía un equipo remoto de la misma red.

En sistemas Windows XP dentro de una red era común si teníamos los suficientes privilegios en un usuario frente a un equipo remoto el poder acceder a su disco C: (letra de unidad asignada por defecto a un sistema Windows) ya que este por defecto se compartía.

Esto a partir de Windows Vista en adelante con la incorporación del sistema UAC (User Account Control) nos solicita, por seguridad, que nos autentiquemos con un el usuario privilegiado de la máquina remota y por lo tanto confirmemos las credenciales del usuario con el que intentamos acceder a la máquina remota.
En siguiente caso el usuario maria del equipo Pluton quiere conectarse al equipo Jupiter.

Figura 3: Autenticación de login con UAC para el acceso al recurso compartido C$.

Para poder eludir el UAC, solamente en este caso, podremos hacerlo facilmente añadiendo un valor con un dato específico en una clave concreta del registro de Windows.

Pero antes comentaré algunas configuraciones previas a tener en cuenta para todos los equipos de red o en los que queramos tener este tipo de acceso.

Antes de establecer la clave de registro oportuna, revisamos la configuración de la red privada para comprobar si está todo bien establecido, por defecto cuando nos unimos a un grupo de trabajo de una red privada o de hogar esto se autoconfigura correctamete.

En el caso de usar una red privada, formar parte de un grupo de trabajo o grupo del hogar, nos centraremos en la configuración de uso compartido avanzado de este. En el apartado privado (que sería el que correspondería en este caso) comprobaremos que esté activado la "detección de redes, compartir archivos e impresoras, y que Windows administre las conexiones del grupo del hogar".
Por defecto, cuando configuramos un equipo para que este se una a un grupo del hogar esta configuración debería estar ya preestablecida del siguiente modo.

Figura 4: Configuración del uso compartido de redes (entorno privado).

En un segundo bloque vemos la configuración de "Todas las redes" las cuales son otro tipo de características en la que digamos que el uso compartido no afecta para "perfiles públicos o invitados".

Deberemos tener activa las tres opciones disponobles, o simplemente las dos últimas opciones "Usar un cifrado de 128 bits y activar el uso compartido por contraseña", el cual en este caso no tendrá relevancia si lo tenemos activado o desactivado ya que no se trataría de recursos compartidos de forma intencionada sino de los recursos compartidos por defecto del sistema, esta característica no está disponible en equipos que se encuentren en un dominio.
En la primera opción "Activar el uso compartido para todos los usuarios a carpetas públicas" se refiere aquellas carpetas del perfil de usuario que por defecto Windows comparte, pero que no tienen una gran importancia si no guardamos nada en ellas.

Figura 5: Configuración del uso compartido de redes (todas las redes).

Al activar las características anteriores, sobretodo la que respeta al uso compartido de archivos e impresoras, esta por defecto añade unas determinas reglas de entrada en el WFAS (Windows Firewall Advanced Security) referentes al protocolo SMB (Service Mensage Block), las cuales se deberían aplicar en este caso solo al perfil privado.

Figura 6: Reglas de entrada del Firewall avanzado para SMB "Compartir archivos e impresoras".

Por último comprobaremos un par de servicios. El servicio "Examinador de equipos" (Browser) realiza repetidas comprobaciones de actualización para conocer a los equipos vecinos de una misma red, de modo que así nuestro equipo estará actualizando la lista de equipos latentes dentro de la red.

Figura 7: Servicio "Examinador de equipos de red" (Browser).

El servicio "Servidor" (LanmanServer) nos proporcionará compatibilidad para todos aquellos equipos que quieran acceder a este, ofreciendo así el servicio necesario para acceder a sus recursos compartidos.

Figura 8: Servicio "Servidor" (LanmanServer)

Finalmente y el motivo por lo que escribo este artículo, sería añadir el valor necesario el registro de Windows para poder bypassear la autenticación UAC.
La autenticación se hace pero se hace forma subyacente, esto simplemente nos evita autenticarnos con usuario y contraseña de forma manual.

En el registro de Windows del equipo remoto que queremos conectarnos (Jupiter), buscamos la clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Añadimos un nuevo valor REG_DWORD de 32 bits (aunque el sistema sea de x64 el valor tendría que ser igualmente de 32 bits). El nombre de este valor será: LocalAccountTokenFilterPolicy y la información de dato la establecemos a "1".

Figura 9: Creando valor "LocalAccountTokenFilterPolicy" para evitar la autenticación manual (bypass UAC) en acceso a C$.

Ahora simplemente cerramos el registro y probamos, si aún así no se actualizasen los cambios, cerraríamos sesión o si fuese necesario (que en las pruebas que he realizado no ha sido necesario) reiniciaríamos el equipo.

Veremos que ahora al intentar acceder al recurso compartido C$ del equipo remoto al que hemos añadido este valor no nos pedirá de forma visible la autenticación de un usuario con privilegios para acceder a el y a ese recurso.

Se puede ver en una fsmgmt.msc la existencia de una sesión remota activa del usuario maria procediente del equipo remoto Pluton, la cual solo usó el usuario usuario local creado en el grupo administradores del equipo Jupiter (equipo al que remoto al que se conectó maria) para autenticarse, aunque como se ve en la captura de pantalla la sesión es con referencia al equipo remoto que accedió. (usuario maria del equipo Pluton accedió al equipo > Jupiter) . Visualizando las sesiones activas en la consola fsmgmt.msc.

Figura 10: Evidencia de conexión remota activa, existencia de una sesión de usuario conectada al equipo.

Esto está definido por Microsoft (KB951016): https://support.microsoft.com/es-es/kb/951016

Saludos!

13 junio, 2016

Virtualbox error: "Nonexistent host networking interface"

Si usamos máquinas virtuales de Virtualbox desde un dispositivo externo USB, al usar o crear VMs (Virtual Machine) este mapea las VMs desde el dispositivo externo, este mapeo se realiza con la ruta que obtiene haciendo referencia a la la letra de unidad que Windows asigna al origen donde se encuentran las VMs.
Este path puede variar si conectamos el dispositivo USB (en el que tenemos instaladas las VMs) en distintos equipos, de modo que por ejemplo, en el Equipo_A cargue las VMs desde la letra asignada "F:\[PATH_VM]" y el Equipo_B asigna "H:\[PATH_VM]". Dando como consecuencia un error al fallo al abrir la VM seleccionada, fallo con referencia a la tarjeta de red.

El error que se visualiza en virtualbox es algo como: "Fallo al abrir una sesión para la máquina virtual" y en los detalles "Nonexistent host networking interface" (VERR_INTERNAL_ERROR).

Figura 1: Virtualbox "Nonexistent host networking interface" (VERR_INTERNAL_ERROR).

Para solucionar este error simplemente debemos deshabilitar los controladores USB en la configuración de la VM en cuestión dentro de Virtualbox.
En la configuración de la VM > apartado USB > Desmarcar el checkbox "Habilitar controlador USB".

Figura 2: Deshabilitar controlador USB en Virtualbox.

De este modo, al volver intentar arrancar la VM ya no mostrará dicho error y esta arrancará sin problemas.

Saludos!

11 junio, 2016

Virtualbox error: "cannot register the hard disk"

Si trabajamos con VirtualBox en el que tenemos una VM (Virtual Machine) existente a la que se encuentra vinculada un disco VDI (Virtualbox Disk Image) y esta por las razones que fuesen tendríamos que "restablecerla", haciendo una copia preveia del vdi y después eliminarla todo tipo de configuración por completo para volver crear otra instancia de máquina virtual y agregar el disco vdi original de la anterior VM borrada, el problema es que cuando intentamos hacer esto, se nos muestra un error que nos dice que el UUID (Universally Unique IDentifier) ya está asociado a otra máquina, eso es por que Virtualbox alamacena estos datos de referencia.
No siempre tiene que ser por esta causa, ya que esto también se produce con otro tipos de "movmientos" que hagamos entre si movemos o copiamos dos vdi dentro del mismo medio (unidad).

En cualquier caso, virtualbox nos muestra el siguiente mensaje de error: "Fallo al abrir el archivo de imagen de disco..." y en los detalles muestra "cannot register the hard disk...".

Figura 1: Error cannot register the hard disk en VirtualBox.

Lo que habría que hacer para solucionarlo sería establecer un nuevo UUID para el vdi que queremos importar en la nueva máquina virtual, de forma que quede importado correctamente.

Podremos realizarlo primeramente intentando liberar el UUID desde el "Administrador de medios virtuales" de Virtualbox. Seleccionaríamos el vdi en cuestión y lo liberaríamos de la VM asociada. Después intetamos importar de nuevo el vdi en la nueva VM.

Figura 2: Administrador de medios virtuales de VirtualBox (discos .vdi).

En el caso de que lo anterior no resulte efectivo podremos usar la utilidad de comandos VBoxManage (fichero que se encuentra en el path donde tegamos instalado Virtualbox), en la que entonces podremos establecer un nuevo UUID.

Para ver la información de un vdi:
VBoxManage showhdinfo "[PATH_VDI]"
Para establecer un nuevo UUID de un vdi:
VBoxManage sethduuid "[PATH_VDI]"
Figura 3: Establecer un nuevo UUID para el hd desde el VBoxManage desde consola.

En la captura anterior (como ejemplo) vemos como se estableció un nuevo UUID para el disco Win8.1_32IAWEB.vdi y en el showhdinfo vemos como el UUID del vdi es el nuevo establecido, sin embargo existe otro UUID el cual está asociado a la nueva VM "win8iaweb3".

Saludos

14 marzo, 2016

Shadow Explorer: Recuperar información a través de instantáneas

Shadow Explorer es una herramienta gratuita en la cual podemos recuperar información a través de instantáneas creadas en el tiempo gracias a la habilitación de protección del sistema de Windows.

Nos permitirá mendiante determinadas fechas (en las que se establecieron las instantaneas) recuperar información de ficheros/directorios en puntos del sistema. Simplemente seleccionamos la unidad, la fecha y el buscamos el directorio a examinar para recuperar dichos datos y con el botón derecho los restauraremos en su ubicación original donde habían sido borrados.

Figura 1: Instantáneas cronológicas de Shadow Explorer en Windows

Esta aplicación hace esta tarea de forma sencilla, pero la característica de mostrarnos estas instantáneas es debido a la "Protección del sistema" característica de Windows 7 en adelante la cual nos permite recuperar versiones anteriores de archivos en las cual previamente de forma programa Windows fue haciendo sus "shadow copy" para versiones anteriores en archivos.

En propiedades del sistema > Protección del sistema > Configurar. Habilitamos y personalizamos el tamaño de uso de esta característica.
Esta servicio es denomicando por Microsoft como: Volume Shadow Copy Service (VSS).

Figura 2: Protección del sistema para versiones anteriores.

Como ejemplo vemos que en las propiedades de esta carpeta de en la pestaña de "Versiones anteriores" están las shadow copys que se fueron haciendo a lo largo del tiempo desde su creación hasta la actualidad.

Aunque en la siguiente captura (Windows 7) nos describe que las versiones anteriores provienen o bien de Copias de seguridad o bien de Puntos de restauración.

Figura 3: Versiones anteriores en distintas fechas de un directorio.

Realmente en Windows 10 nos comentan en la misma descripción que las versiones anteriores de archivos provienen de estas dos anteriores y a mayores del historial de archivos ese sería el afectado en esta característica de Windows.
Ya que no es necesario tener habilitado o creado puntos de restauración o copias de seguridad para tener este característica habilitada (Volume Shadow Copy Service (VSS)).

Figura 4: Configuración de "Historial de archivos de Windows" (Shadow Copy).

Descargar Shadow Explorer

Saludos!

08 febrero, 2016

Steghide: Ocultar información dentro de otra

Steghide es una herramienta para esteganografía la cual que nos permitirá ocultar determinada información dentro de otra.

Es compatible con sistemas Windows y Linux. Por lo que la descargaremos y simplemente a través de la respectiva consola la ejecutaremos.

Cuenta con un manual detallado para cada uno de sus modificadores.

Para incrustar información dentro de otra, de un texto a una imagen por ejemplo.
steghide embed -cf {PATH_IMAGEN} -ef {PATH_fichTexto}
Nos pedirá una contraseña para proteger el fichero raíz.

Para extraer el fichero de texto que mantiene nuestra información "oculta", lo extraemos nos pedirá la contraseña establecida para desbloquear el fichero raíz.
steghide --extract -sf {PATH_IMAGEN}

Figura 1: Ocultando fichero de texto en una imagen .jpg con Steghide.

Saludos!

19 enero, 2016

Hot Potato: Elevación de privilegios en Windows

El equipo de Foxglovesecurity.com hace pocos días ha publicado en su blog un exploit el cual desde un usuario de nivel bajo puede elevar sus privilegios dentro de un sistema hasta el nivel más alto. Haciendo uso de una pequeña herramientas de comandos que estos denominaron como "Hot Potato".

Esto es posible a unos fallos de diseño de Windows bien gestionados en el que se realizan tres ataques en uno. NBNS Spoofing (NetBios sobre TCP/IP o NetBios Name Service), WPAP (Web Proxy Autodiscovery Protocol) y HTTP > SMB NTLM Relay (autenticación NTLM de HTTP a SMB).

Como ejemplo en una máquina virtual con Windows 7 PRO de 32bits el cual tiene las configuraciones por defecto. Haciendo uso de Potato intentaré escalar a un usuario raso y hacerlo formar parte del grupo Administradores del sistema en un Windows 7.
Nos descargamos a local Potato, abrimos una consola de comandos y comprobamos la dirección IP local y el usuario local de esa instancia el cual no tiene privilegios y es el usuario el cual queremos elevar sus permisos.

Figura 1: Comprobamos que el usuario no está como usuario administrador.

Dependiendo de ejecutar potato.exe en un sistema Windows 7/8/10/Server 2012 se aplicará de una u otra forma, dependiendo la técnica a aplicar.
Para más información consultar la web oficial del equipo de "Hot Potato".

Figura 2:  Sabiendo la dirección IP local y ejecutamos potato.exe para Windows 7.

Haciendo uso del modificador "-cmd" ejecutamos una cmd.exe y ejecutamos añadimos un usuario al grupo administradores (net localgroup administradores [user] /add).

Figura 3: Comprobamos que el usuario a sido agregado al grupo administradores.

¿Soluciones a estos tres ataques?

Lo que podemos hacer para solucionar esto sería revisar el tráfico NBNS de nuestra red, para WPAD detener el servicio de detección automática de proxy web WinHTTP, y para NTLM forzar la autenticación de Kerberos y NTLMv2 con esta solución de Microsoft y forzar la política para firmar comunicaciones SMB siempre.

Saludos!

15 enero, 2016

DeepSound: Ocultar información dentro de ficheros de audio

La práctica o técnica de ocultación de información de mensajes u objetos dentro de otros se conoce como Esteganografía. En este caso orientado al mundo te la tecnología de la información, existen diversos tipos de esteganografía, aunque fundamentalmente en este blog hablaré en la mayoría de los casos de esteganografía por técnicas de software.

Para aquellos que hayan visto la serie Mr. Robot, el protagonista Elliot hace uso de una herramienta para ocultar información de ficheros de imágen en ficheros de audios que posteriormente graba en CDs, esta aplicación solo funciona bajo sistemas Windows, por en la escena de la serie que vemos esto Elliot arranca una máquina virtual de Windows bajo su Linux.

DeepSound es una herramienta que solo funciona bajo sistemas Windows y que nos permite ocultar información dentro de ficheros de audio y también convertir ficheros de audio a otros formatos.

Lo bueno de esto, es que conservamos el contenido original del fichero de audio, es decir, que no altermos el contenido de reproducción del mismo así quien abra este fichero de audio lo reproducirá corretamente sin saber que hay información oculta "dentro de el". Lo único que podemos notar es un ligero aumento de tamaño del fichero de audio lo cual en principio no llevará a mucha sospecha.

Será necesario tener instalado en nuestro equipo el paquete Microsoft .NET Framework 4.0.

Es sencilla de utilizar, simplemente seleccionamos los ficheros de audio en los que queremos ocutlar otros ficheros de informaicón y marcamos el tipo de comprensión (low, normal, high).

Figura 1: Añadiendo ficheros a ocultar dentro de un fichero de audio en DeepSound.

Una vez tenemos los ficheros que queremos ocultar encapsulados en los ficheros de audio correspondientes los encodeamos para unificarlo en un mismo fichero con formato de audio que eligamos, en mi caso hice referencia a dos fichero .pdf. Finalmente hacemos referencia a un directorio y tendremos la opción de establecer una password con un cifrado AES de 256bits.

Figura 2: Encapsulando ficheros dentro de un fichero de audio .wav con password AES-256.

Para poder extraer y ver el contenido encapsulado en los ficheros de audio, abrimos el fichero de audio que queramos extraer, introducimos la password (en caso de a ver establecido alguna) y lo extramos, si nos vamos al directorio de salida por defecto establecido, veremos los fichero .pdf que se habían agregado al fichero .wav.

Figura 3: Extracción de información contenida en el fichero de audio original.

Un ejemplo en el que considero que tendríamos una ofuscación de información muy robusta, podría ser de la siguiente manera:
Comprimir en un Winrar un conjunto de ficheros, a este le establecemos una contraseña robusta a través de Winrar y a su vez este fichero comprimido lo dividimos en varias partes (para que sea de un tamaño más ligero), cada parte separada de compresión las iremos encapsulando en distintos ficheros de audio con otro password a mayores establecida en Deepsound y a su vez después convertir también desde Deepsound un formato de fichero .wav a otro formato.

Descargar DeepSound

Saludos!

07 enero, 2016

Habilitar el envío de mensajes a equipos remotos en Windows 10 usando MSG

En Windows XP esto era posible habilitando el servicio de Windows "Mensajero" en todos los equipos de la red y haciendo uso del comando NET SEND.

En Windows 7, 8 y 10 por motivos de seguridad a llamdas RPC y la sintaxis NET SEND con posibles vulnerabilidades en su estructura, se tuvo que cambiar la forma de usarlo al igual que la forma de habilitar esta función.

Actualmente es necesario habilitar las llamadas RPC para esta funcionalidad y cambiar la estructura del comando así como el propio comando, pasando a ser MSG.

Habilitamos o mejor dicho permitimos las llamadas a procedimientos remotos (RPC) en el registro de Windows.
Con privilegios de administrador entramos en el registro de Windows y buscamos la siguiente ruta.
HKLM/SYSTEM/CurrentControlSet/Control/Terminal Server
A continuación buscamos un valor tipo DWORD llamado "AllowRemoteRPC" el cual por defecto se establece con valor "0", (como ya dije, por motivos de seguridad) modificaremos la información de valor a "1", para permitir los procesos de llamadas remotas.

habilitarWindowsRPCparaMSG
Figura 1: Moficando "AllowRemoteRPC" en regedit para enviar mensajes MSG en Windows.

Esta opción debe activarse en TODOS los equipos a los que queramos enviar mensajes y que estos los reciban.

La sintaxis del comando MSG es sencilla, un ejemplo sería.
msg /server:[IPRemota/NombreEquipoRemoto] [NombreEquipoRemoto\Usuario]
Escribir el mensaje
Pulsar Ctrl+Z
Pulsar Enter
Donde IPRemota/NombreEquipoRemoto sería la IP o el nombre de equipo remoto correspondiente, y el después tendremos que introducir el nombre de equipo seguido del nombre de usuario remoto al que queramos enviar el mensaje (NombreEquipoRemoto\Usuario).
Después escribiremos el mensaje a enviar, en este paso seguiremos las instrucciones referenciadas que se muestran en ese mismo momento que la propia herramienta de Windows MSG.

Para más información del uso de la utilidad MSG en Windows podremos consultar la ayuda de este simplemente escribiendo: msg /?

Saludos!
Entradas Relacionadas