Abuso de aplicaciones confiables con ejecución anidada

Ejecución anidada

Hace poco, mis cofundadores dieron una charla en DerbyCon 7.0 sobre cómo evadir las herramientas comunes de enumeración de persistencia. La evasión mediante aplicaciones confiables ha sido un tema de mucho debate en la comunidad de seguridad informática, y es una de las técnicas que abordaron en su presentación. Sin embargo, casi no se habla de por qué esto importa ni de los pasos que siguen los investigadores para encontrar aplicaciones de "hospedaje". Este blog ofrece algo de contexto sobre el cómo y el porqué.

Mientras revisábamos un elemento sospechoso que Huntress detectó en uno de los endpoints de un partner, notamos un grupo de servicios desconocidos (sin relación alguna con el elemento sospechoso):

listado de servicios desconocidos
Servicios distintos, mismo ejecutable

Cada servicio tenía un nombre único, pero todos compartían el mismo ejecutable. Aunque no es raro que servicios compartidos usen el mismo binario (ver svchost.exe), este servicio en particular se vuelve un poco más interesante por dentro:

Comando completo ejecutado para cada servicio.

En la imagen de arriba, observa que un ejecutable llama a otro como argumento. WseClientSvc.exe es un binario firmado de Microsoft. ¿Podemos hacer que ejecute algo arbitrario como calc.exe?

Error devuelto al intentar iniciar calc.exe directamente

Obviamente no tuvimos suerte ahí, pero el error es interesante: "Could not load file or assembly 'file:///c:\windows\system32\calc.exe'…". Parece que intentó cargar/llamar a calc.exe. Con un descompilador de .NET podemos ver qué está pasando.

Efectivamente, solo está invocando el nombre del archivo especificado como argumento. Ahora volvamos al mensaje de error que obtuvimos con calc.exe: "The module was expected to contain an assembly manifest". Esto parece indicar que espera un ejecutable de .NET. Hagamos el nuestro.

fragmento de código 1
Programa simple de paso directo

Ahora podemos intentarlo de nuevo, esta vez llamando a "WseClientSvc.exe passthru.exe calc.exe":

¡Funcionó!

El WseClientSvc.exe y los servicios que encontramos están instalados como parte del Windows Server Essentials Connector for Windows Server 2012 R2. El registro del MSI muestra una instalación estándar de servicio.

Los servicios mismos usan la ProviderServiceBase Class que ofrece un entorno genérico de servicio de Windows para alojar objetos ProviderHost. Todo esto viene incluido con el Windows Server 2012 Essentials SDK. ¿Parece que alguien podría crear un servicio intermediario usando el SDK que utilice el WseClientSvc.exe firmado (haciéndolo parecer un servicio legítimo de Windows) para llamar a cualquier ejecutable arbitrario?

También te podría interesar