the_open_door
café
ESEN
← Volver al índice

Insecure service permissions (Windows)

Un servicio de Windows arranca ejecutando un binario concreto (BINARY_PATH_NAME) con una cuenta determinada (SERVICE_START_NAME), a menudo LocalSystem. Si un usuario normal tiene permiso de escritura sobre ese binario o sobre la carpeta que lo contiene, puede reemplazarlo por código propio; cuando el servicio arranque de nuevo (reinicio o sc start), ejecutará ese código con la cuenta del servicio, normalmente SYSTEM.

Se enumera con sc qc (configuración) y icacls/accesschk (permisos):

sc qc <service>
icacls "C:\ruta\al\servicio.exe"
icacls "C:\ruta\al"
accesschk.exe /accepteula -uwcqv "Users" *          :: servicios modificables por Users
accesschk.exe /accepteula -quvw "C:\ruta\al\servicio.exe"   :: permisos del binario
# PowerUp automatiza los tres fallos (binario, carpeta y config del servicio)
powershell -ep bypass -c "Import-Module .\PowerUp.ps1; Invoke-AllChecks"
Get-ModifiableServiceFile; Get-ModifiableService

Interesan dos casos:

Para no dejar el servicio caído, el binario malicioso suele lanzar el payload (una reverse shell o net user ... /add) y después relanzar el ejecutable original renombrado. Tras dejar el fichero se fuerza el reinicio si el servicio es AUTO_START y no se puede reiniciar directamente:

move C:\svc\svc.exe C:\svc\svc.orig.exe
move payload.exe C:\svc\svc.exe
shutdown /r /t 0

Matices. Es distinto del unquoted service path (ahí el problema es una ruta con espacios sin comillas) y del weak service permissions sobre el propio servicio (SERVICE_CHANGE_CONFIG, que permite cambiar el binario con sc config). Aquí el fallo son los permisos NTFS del fichero o la carpeta.

Cómo detectarlo. La firma en el host es la sobrescritura del binario del servicio: Sysmon Event ID 11 (FileCreate) o auditoría de objeto 4663 (acceso de escritura) sobre el .exe de un servicio por una cuenta que no es de administración, seguida del reinicio del servicio (7036/7035) y de un 4688/Sysmon 1 donde ese binario, corriendo como SYSTEM, lanza cmd/powershell o net user ... /add. Si en vez de tocar el fichero se cambia la config del servicio, aparece 7040 (cambio de tipo de arranque) o 4697/7045 (servicio instalado/modificado). En reposo, accesschk -uwcqv Users * que devuelva servicios con SERVICE_ALL_ACCESS o binarios con (M)/(W) para Users es el indicador previo.

Defensa. Las carpetas y binarios de servicios que corren como SYSTEM deben ser escribibles solo por administradores; nunca conceder Modify/Write a Users sobre C:\Program Files ni sobre directorios de servicio. Auditar la escritura sobre binarios de servicio y los cambios de configuración con Sysmon. Relacionado con el abuso de ACL con icacls y el servicio con carpeta escribible por un grupo.

HerramientasaccesschkPowerUp

Máquinas donde se aplica