Verificar ASLR, DEP y SafeSEH con Powershell

Eric Gruber de NetSPI ha publicado un interesante script en Powershell que comprueba rápidamente si una DLL o EXE ha sido compilado con ASLR (Address Space Layout Randomization), DEP (Data Execution Prevention) y SafeSEH (Structured Exception Handling).

Existen herramientas como PEStudio, CFFExplorer, Windbg con plugins e Immunity Debugger con mona.py que ya lo hacen, pero no son tan intuitivos cuando se escanean múltiples ficheros.

PEChecker utiliza PowerShell para examinar el encabezado PE (Portable Executable), concretamente el member DLLCharacteristic, un valor hexadecimal que provee información de las opciones con las que se ha compilado un fichero: ASLR (IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE), DEP (IMAGE_DLLCHARACTERISTICS_NX_COMPAT) y SafeSEH (IMAGE_DLLCHARACTERISTICS_NO_SEH) con valores 140 o 400 si han sido o no activados respectivamente.

El código fuente está disponible en GitHub (https://github.com/NetSPI/PEchecker) y su uso es muy sencillo:

Chequear un único fichero:
C:\PS> ./PEchecker.ps1 -file C:\Windows\System32\kernel32.dll

Chequear un directorio de DLLs y EXEs:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\


Chequear un directorio de DLLs y EXEs recursivamente:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive

Chequear DLLs y EXEs pero sólo que no hayan sido compiladas con ASLR:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive -OnlyNoASLR

Chequear DLLs y EXEs pero sólo que no hayan sido compiladas con DEP:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive -OnlyNoDEP

Chequear DLLs y EXEs pero sólo que no hayan sido compiladas con SafeSEH:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive -OnlyNoSafeSEH

Muestra los resultados con el nombre de ruta completo:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive -FullPath

Exporta los resultados a CSV:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive | Export-CSV file.csv

Muestra los resultados en una tabla:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive | Format-Table

Muestra los resultados en una tabla y los ordena por columna:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive | Format-Table | sort ASLR

Muestra los resultados en una lista:
C:\PS> ./PEchecker.ps1 -directory C:\Windows\System32\ -recursive | Format-List

Fuente: https://www.netspi.com/blog/entryid/232/verifying-aslr-dep-and-safeseh-with-powershell

Comentarios