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-ModifiableServiceInteresan dos casos:
- Binario escribible (
icaclsmuestra(F)o(M)/(W)paraUsers/Authenticated Users): se sobrescribe directamente el.exe. - Carpeta escribible aunque el binario no lo sea: se renombra el original y se deja uno malicioso con el mismo nombre.
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 0Matices. 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.