Application Shimming在ATT&CK攻击矩阵中覆盖了持久化和提权两个阶段
    详见:https://attack.mitre.org/techniques/T1546/011/

    ATT&CK比较多攻击手法在实战中意义不是很大,Application Shimming是相对较不为人知,但是效果比较好的一种攻击手法

    先来了解下IAT和shim
    IAT
    IAT 全称为Import Address Table,中文译为导入地址表。 由于导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL 中.当PE 文件被装入内存的时候,Windows 装载器才将DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成.其中导入地址表就指示函数实际地址。

    shim
    shim是微软极少使用的四字母单词之一,也不是某种形式的缩写。它是英语单词shim的引申含义。shim是一个工程术语,描述为了让两个物体更好地组装在一起而插入的一块木头或金属。在计算机编程中,shim是一个小型的函数库,用于透明地拦截API调用,修改传递的参数、自身处理操作、或把操作重定向到其他地方。shim也可以用来在不同的软件平台上运行程序。

    原理
    当windows应用程序创建进程的时候,需要,WindowsLoader首先会检查sysmain.sdb(位于%windir%\AppPatch\),如果存在已注册的sdb文件,IAT将被重定向到Shim,实现功能替换。

    使程序的运行调用由:
    程序→导入表→windows

    image.png
    变为:
    程序→导入表→shim→windows
    image.png

    利用方式:
    shim原是为了解决相同的程序无法适应不同版本的windows操作系统而存在的,但其重定向的特性也为攻击者打开一扇大门。
    通过shim可以用自启动进程调用恶意程序起到权限维持的作用,也可用自动提权且绕过UAC的程序调用恶意程序进行提权。

    具体操作:
    1、创建好sdb文件
    Application Shimming在渗透中的利用 - 图3
    2、对sdb进行注册(sdbinst在windows中已默认内置)
    Application Shimming在渗透中的利用 - 图4
    3、打开putty,可见计算器被打开
    Application Shimming在渗透中的利用 - 图5

    references:
    How shims work:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/dd837644(v=ws.10)?redirectedfrom=MSDN?redirectedfrom=MSDN)
    微软的Compatibility administrator下载地址(已失效):https://www.microsoft.com/en-us/download/details.aspx?id=7352
    新下载地址:http://www.softsea.com/review/Microsoft-Application-Compatibility-Toolkit.html