miércoles, 30 de marzo de 2016

Por necesidades acabe desarrollando un código ...

Por necesidades acabe desarrollando un código en bash cuyo objetivo es, siempre y cuando no tengamos una base de datos con los activos de nuestra empresa, buscar un determinado servicio en las redes que nosotros queramos.

El código se basa en la presencia de la herramienta "Nmap" en nuestro sistema, y de la catalogación de los servicios del mismo.

NOTA: El código es funcional y, obviamente, mejorable.

#!/bin/bash
#
#----- NOTA INFORMATIVA -----
#
#Desarrollado por 4null0
#
#Con el siguiente código se buscan direcciones IP que tengan el puerto indicando (segundo parámetro) abierto.
#
#NOTA: Las redes donde buscar vienen definidas en el archivo indicado como parámetro.
#
#El tercer parámetro, que es opcional, indicaría el servicio a buscar.
#
# Ejemplo del uso del tercer parámetro:
#              ./BusquedaServicio.sh Listado.txt 80 IIS  (Buscaría IPs con el puerto 80 abierto y que el servicio se base en IIS de Microsoft)

if [ $# = 0 ] || [ $# = 1 ] || [ $# -gt 3 ]; then
                echo "Este script sólo admite dos parámetros, que se corresponde con el archivo con:\n"
                echo "1.- Archivo con IPs"
                echo "2.- Puerto"
                echo "3.- Nombre del servicio a encontrar"
                exit
else
                #---VARIABLE QUE CONTIENEN EL NOMBRE DEL DIRECTORIO A CREAR       
                directorio=Puerto-$2

                #---SI EXISTE EL DIRECTORIO, PASAMOS A MOSTRAR LOS DATOS SEGÚN NOS INDIQUEN EL RESTO DE PARÁMETROS, SI NO, CREAMOS EL DIRECTORIO Y CONTINUAMOS CON
                #---NORMALIDAD
                if [ -d $directorio ]; then
                               echo "El directorio existe ... se pasara a mostrar los datos ya obtenidos según el resto de parámetros"
                               echo " "
                              
                               if [ -a $directorio/InformeFinal ]; then

                                               echo "Borramos el archivo: InformeFinal"
                                               echo " "
                                               rm $directorio/InformeFinal
                               fi
                else
                               mkdir $directorio
               
                               #----- ESCANEO DE PUERTOS PARA CADA UNA DE LAS IPs ENCONTRADAS -----
                               for IP in $(cat $1)
                               do
                                               red=$(echo $IP | awk -F "/" '{print $1}')
                                               echo "Escaneando: "$IP
                                               $(nmap -Pn -n -open --host-timeout 10m -p $2 -sV $IP -oN $directorio/$red.txt  1> /dev/null)
                               done
                fi

                #---EXISTE UN TERCER PARÁMETRO, POR LO QUE BUSCAMOS UN SERVICIO EN CONCRETO
                if [ $# = 3 ]; then
                               grep -e "$2/tcp" $directorio/*.txt | awk -F "    " '{print $2}' | sort -u | grep "$3" >> $directorio/Servicios
                else
                               grep -e "$2/tcp" $directorio/*.txt | awk -F "    " '{print $2}' | sort -u >> $directorio/Servicios                    
                              
                fi

                #---OBTENEMOS LAS DIRECCIONES IPs POR CADA SERVICIO ENCONTRADO
                while read i
                do
                               echo $i >> $directorio/InformeFinal
                               echo "-----" >> $directorio/InformeFinal
                               grep -e "$i$" -e "report for" Puerto-$2/*.txt | grep -e "$i$" -B 1 | awk -F "txt:" '{print $2}' | sed 's/Nmap scan report for //;s/open//g' | grep -v "$i$"  | sort -u >> $directorio/InformeFinal
                               echo " " >> $directorio/InformeFinal

                done < $directorio/Servicios

                cat $directorio/InformeFinal
               
                #---ELIMINAMOS EL ARCHIVO TEMPORAL: Servicios
                rm $directorio/Servicios
               
fi

Un saludo Mario






lunes, 14 de marzo de 2016

Vulnerabilidad en VirusScan de McAfee

Tras el conocimiento de la vulnerabilidad que afecta a VirusScan de McAfee se pasaron a realizar pruebas.

Antes de nada se procede a realizar una descripción somera de la vulnerabilidad:

Objetivo: La vulnerabilidad consiste en deshabilitar la clave que bloquea las modificaciones del susodicho VirusScan.

Permisos: Para llevar a cabo la explotación de la vulnerabilidad se necesita realizar el ataque utilizando un usuario con permisos de Administrador sobre la máquina.


Para dichas pruebas se han utilizado dos sistemas, un Windows 7 y un Windows XP.
Las pruebas se han realizado de manera manual y mediante un exploit.

NOTA:    Para realizar la prueba manual se ha tenido en cuenta la siguiente noticia:
NOTA:    Exploit: https://lab.mediaservice.net/code/mcafee_unprotector.c

                El código ha tenido que ser modificado en parte debido a errores en la compilación.

                Habría que cambiar las siguientes líneas marcadas en rojo:


Primer conjunto de líneas


Segundo conjunto de líneas

                Por la siguiente línea:

SOFTWARE\\Wow6432Node\\McAfee\\DesktopProtection

La versión de VirusScan utilizada para las pruebas ha sido la: 8.8.0 (Parche 6), que es la más actual sin tener en cuenta el nuevo parche de McAfee (parche 7)


Versión de VirusSCan .

Windows XP - Manualmente

Para este propósito se buscan los procesos que utilicen la clave de registro “HKEY_LOCAL_MACHINE\SOFTWARE \Mcafee\DesktopProtection”



Búsqueda de los procesos que utilizan la clave de registro “HKEY_LOCAL_MACHINE\SOFTWARE \Mcafee\DesktopProtection”

El siguiente paso es parar los procesos:

1.- mfeann.exe
2.- VsTskMgr.exe
3.- McTray.exe

En esta tarea nuestro intento de explotación se detiene debido a que no tenemos permisos para parar todos los procesos anteriormente indicados.


Intento de parar el proceso: mfeann.exe



Intento de parar el proceso: mfeann.exe



Intento de parar el proceso: VsTskMgr.exe



Intento de parar el proceso: VsTskMgr.exe


Los procesos anteriores no se pueden detener debído a que, incluso siendo administrador de la máquina, no se tienen permisos para ello. Para poder pararlos se necesitaría tener los permisos del usuario: “system”.

NOTA: El usuario System es el utilizado por el propio sistema operativo.


Usuario que lanza el proceso: mfeann.exe




Usuario que lanza el proceso: VsTskMgr.exe

Windows XP – Automático

Para este proceso se ha utilizado un exploit publicado recientemente, tal y como se ha comentado anteriormente.

Por este método se ha conseguido explotar la vulnerabilidad y conseguir eliminar la necesidad de utilizar una contraseña para poder modificar las características de VirusScan



Antes del uso del exploit


Después del uso del exploit.
Podemos parar el analizador en tiempo real sin necesidad de credenciales

Windows 7 - Manualmente

Se van a seguir la misma operativa que la utilizada en el sistema Windows XP.

Lo primero que se ve es la inexistencia de procesos que utilicen la clave de registro “HKEY_LOCAL_MACHINE\SOFTWARE \Mcafee\DesktopProtection” o parecida.


Resultados de la búsqueda comentada anteriormente


Aún así se pasa a comprobar si es posible parar los mismos procesos vistos en la máquina con Windows XP. Pero ni siquiera se puede ver el usuario que los ha lanzado, por lo que se puede decir que este método de explotación tampoco funciona


Proceso padre y propiedades del proceso: mfeann.exe



Windows 7 – Automático


Para este proceso se ha utilizado un exploit publicado recientemente.

NOTA: El código ha tenido que ser modificado en parte debido a errores en la compilación.

Por este método NO se ha conseguido explotar la vulnerabilidad y conseguir eliminar la necesidad de utilizar una contraseña para poder modificar las características de VirusScan


Resultado de lanzar el exploit en sistemas Windows 7

CONCLUSIONES

Por lo que se ha podido comprobar la explotación de la vulnerabilidad depende enteramente del sistema operativo que se utilice y de que el usuario que lo lance sea administrador de la máquina.

Se sugiere crear una regla que evite, en sistemas Windows XP, cambiar el valor de la siguiente clave de registro:

“HKEY_LOCAL_MACHINE\SOFTWARE\Mcafee\DesktopProtection\UIPMode”
“HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mcafee\DesktopProtection\UIPMode”

Como comentario final indicara que las pruebas no se han realizado sobre sistemas Windows 8 ni sistemas Windows 10.

lunes, 7 de marzo de 2016

Analizando "S4T4n B0tn3t" - Parte 2

Continuamos con el análisis.

En el trozo de código que se muestra a continuación se define una variable de tipo "Shell" que permite recuperar el acceso al contenido de las siguientes carpetas y archivos, por parte del administrador:

%systemdrive%\kernel - c:\kernel
%systemdrive%\security- c:\security
%alluserprofiler%\ - c:\ProgramData\
%systemRoot%\System32\wscript.exe - c:\Windows\System32\wscript.exe
%systemRoot%\System32\drivers - c:\Windows\System32\drivers
%systemRoot%\System32\drivers\flopydisk.sys - c:\Windows\System32\drivers\flopydisk.sys
""%systemdrive%\system Volume Information - c:\system Volume Information

Así como definir los permisos para las anteriores carpetas o archivos.

Modificación de permisos

En el trozo de código que se muestra a continuación se modifican los valores de las siguiente claves de registro, colocando en ambos casos el valor "0":

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\disabletaskmgr = 0

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools  = 0


Modificación del registro de Windows

En el trozo de código que se muestra a continuación se crea un archivo en la carpeta "Temp" del usuario con el que se ejecuta este código, con el nombre: tmp.bat. Posteriormente el archivo por lotes se ejecutará y se eliminará.

Contenido del archivo tmp.bat

Para ser más legible, se muestra una imagen del archivo por lotes: tmp.bat


Imagen del archivo: tmp.bat


Este archivo comprueba la existencia dentro del archivo "C:\security\blood.dat" de los delimitadores definidos por el sistema, si la cantidad encontrada supera los 18, entonces no se realizada nada. Por el contrario, se pasa a:

1.- Establecer un icono para los archivo de tipo ".vbe", mediante:

HKCR\VBEFile\DefaultIcon=%SystemRoot%\system32\shell32.dll,1

2.- Copia a la carpeta temporal del usuario todos los archivos con extensión ".vbe" ubicados en:

                A.- c:/kernel
                B.- El propio archivo ejecutado por el usuario.

3.- Se camufla el archivo ejecutado ubicado en la carpeta temporal mediante la ocultación y la declaración del archivo como archivo del sistema.

4.- Se comprueba que realmente existe el archivo anterior en la carpeta temporal. Si no existe se finaliza la ejecución del archivo por lotes.

5.- Se elimina de todas las unidades detectas en el sistema el archivo "config.dat"

6.- Se crean los siguiente directorios:

                A.- c:\security
                B.- c:\security\lpt1
                C.- c:\kernel
                D.- c:\kernel\lpt1

7.- Se camufla los directorios creados anteriormente mediante la ocultación y la declaración del archivo como archivo del sistema.

8.- Se elimina el contenido de los directorios: "c:\kernel" y "c:\security"
9.- Se copia en los dos directorios anteriores el archivo que ha sido lanzado por el usuario
10.- Se elimina de la carpeta temporal el archivo cuyo nombre es igual al nombre del archivo que ha ejecutado el usuario.
11.- Se renombrar los archivos copiados en el punto 9, por los nombres: r00t3r y blood.dat. Siendo el primero de ellos camuflado mediante los procedimientos vistos anteriormente (ocultando el archivo y declarándolo del sistema)
12.- Se procede a registrar todos las librerías y ejecutables ubicados en la carpeta "c:\windows\wbem"
13.- Se procede a configurar el servicio "TermService" para que se inicie de manera automática


En el trozo de código que se muestra a continuación se crea un archivo en la carpeta "Temp" del usuario con el que se ejecuta este código, con el nombre: tmp.vbs. Posteriormente el archivo por lotes se ejecutará y se eliminará.

Contenido del archivo tmp.vbs - 1º parte

Contenido del archivo tmp.vbs - 2º parte

Para ser más legible, se muestra una imagen del archivo tal y como quedaría: tmp.vbe

Contenido del archivo tmp.vbe

Este realizará lo siguiente:

1.- Crea en la carpeta temporal del usuario un archivo denominado: b.bat

2.- Comprueba la existencia de carpetas compartidas en el host, y por cada una de ellas se almacena en el archivo creado anteriormente las cadenas mostradas a continuación.

Es decir, por cada recurso compartido, elimina cualquier vestigio de archivos con extensión ".vbe", copia el archivo; "blood.dat", ubicado en la carpeta: "C:\security" en el recurso compartido, y renombrar el archivo como: "Update.dat", ocultándolo y dándole atributos del sistema

NOTA: Dicho archivo se ejecutará como última tarea del archivo: tmp.vbe


Recursos compartidos del host

Contenido del archivo b.bat


3.- Tras la inserción de las líneas de código, se procede a eliminar todo tipo de archivo: "de acceso directo"

4.-  Se pasa a crear un acceso directo bajo el nombre: "Mariage.lnk", que ejecutará el archivo: "update.dat" almacenado en el recurso compartido.

Conclusión: Este último archivo: tmp.vbe, es el encargado de propagar la infección de manera transversal, mediante el uso de unidades compartidas ( través de la red).