应用程序填充
对手可能会通过执行由应用程序填充触发的恶意内容来建立持久性和/或提升权限。Microsoft Windows应用程序兼容性基础设施/框架(应用程序填充)是为了允许随着操作系统代码库的变化而保持软件的向后兼容性而创建的。例如,应用程序填充功能允许开发人员应用修复程序(无需重写代码)到为Windows XP创建的应用程序,使其能够在Windows 10上运行。(引用: Elastic Process Injection July 2017) 在框架内,填充被创建为在程序(或更具体地说,导入地址表)和Windows操作系统之间充当缓冲。当程序执行时,填充缓存会被引用,以确定程序是否需要使用填充数据库(.sdb)。如果需要,填充数据库使用挂钩重定向代码,以便与操作系统通信。 默认Windows安装程序(sdbinst.exe)安装的所有填充的列表保存在: * %WINDIR%\AppPatch\sysmain.sdb
和 * hklm\software\microsoft\windows nt\currentversion\appcompatflags\installedsdb
自定义数据库存储在: * %WINDIR%\AppPatch\custom & %WINDIR%\AppPatch\AppPatch64\Custom
和 * hklm\software\microsoft\windows nt\currentversion\appcompatflags\custom
为了保持填充的安全性,Windows设计它们在用户模式下运行,因此它们不能修改内核,并且必须具有管理员权限才能安装填充。然而,某些填充可以用于绕过用户帐户控制(UAC和RedirectEXE)、注入DLL到进程(InjectDLL)、禁用数据执行保护(DisableNX)和结构异常处理(DisableSEH),以及拦截内存地址(GetProcAddress)。 利用这些填充可能允许对手执行多种恶意行为,例如提升权限、安装后门、禁用防御(如Windows Defender)等。(引用: FireEye Application Shimming) 填充还可以被滥用以通过受影响的程序持续调用来建立持久性。