GrabAccess https://github.com/Push3AX/GrabAccess
Bookit / Windows登陆密码和Bitlocker绕过工具
在物理接触的情况下,GrabAccess可以:
- 绕过Windows登陆密码执行任意操作(以System权限执行命令、重置Windows账户密码等)
- 植入木马并添加自启动(可以绕过Bitlocker,但要求受害者登录)
- 通过修改主板UEFI固件实现无视重装系统、更换硬盘的持久化(Bootkit)
GrabAccess最基础的功能是绕过Windows登录密码。
-
准备一个U盘。(需为
FAT16
或FAT32
格式) -
下载GrabAccess_Release.zip,解压到U盘根目录。
-
将U盘插入目标计算机。重启,在启动时进入BIOS菜单。选择从U盘启动(如果开启了
Security Boot
,还需将其设置为DISABLE
). -
在Windows启动时会弹出CMD窗口和账户管理窗口,可以System权限执行任意命令而无需登录。
-
按下
ALT+F4
关闭CMD窗口后,Windows回到登陆界面。
GrabAccess可以自动植入指定的程序,并为其添加启动项。
要使用该功能,需要预先将GrabAccess与要植入的程序打包:
-
下载GrabAccess_Release.zip,解压并放置在U盘根目录。
-
将需要植入的程序命名为
payload.exe
,放置在U盘根目录。 -
运行
build.bat
进行打包。 -
将U盘插入目标计算机、从U盘启动(与前文相同)
-
Windows启动后即可看到指定的程序。
该植入过程可以绕过Bitlocker的系统盘加密。
从含有GrabAccess的U盘启动后,GrabAccess就会写入到内存中。此时可以拔出U盘,但需要停留在Bitlocker输入密码的界面,等待受害者返回输入密码。当Bitlocker解锁之后,指定的程序会被写入磁盘。但在这之前,由于GrabAccess仅停留在内存,如果重启或关机,GrabAccess将会失效。
GrabAccess可以被植入到计算机主板的UEFI固件。实现硬件级别的持久化(Bootkit)。
每次Windows系统启动时,GrabAccess会植入指定的程序,即使重装系统或更换硬盘之后也会重新植入。要移除它,只能刷写主板固件或更换主板。
警告:以下操作可能损坏主板!必须对UEFI固件有一定了解才可继续。AT YOUR OWN RISK !!!!
要实现这一功能,大致分为四步:
- 将GrabAccess与要植入的程序打包
- 提取主板UEFI固件
- 向UEFI固件插入GrabAccessDXE
- 将固件刷回主板
不同主板的第2和第4步有较大不同。部分主板可以通过软件方式刷新固件,但也有部分主板存在校验,只能使用编程器刷新。因差异众多,在此不深入讨论,读者可以自行在网上搜索某型号主板对应的方式。
将GrabAccess与要植入的程序打包的方式与前文相同,即:将需要植入的程序命名为payload.exe,放置在GrabAccess的根目录,运行build.bat进行打包。结束后得到native.exe
,稍后将会用到。
在提取到主板UEFI固件后,使用UEFITool打开,按下Ctrl+F
,选择Text
,搜索pcibus
,在下方双击搜索到的第一项。
在pcibus
这一项上右键,选择Insert before
,然后选取GrabAccess_Release.zip中UEFI_FSS
文件夹的GrabAccessDXE.ffs
。
插入GrabAccessDXE
后,在GrabAccessDXE
上右键,选择Insert before
,插入UEFI_FSS
文件夹的native.ffs
。此时应该如下所示:
双击展开native.ffs
(它没有名字,但GUID是2136252F-5F7C-486D-B89F-545EC42AD45C
),在Raw section
上右键,选择Replace body
,然后选取前文中生成的native.exe
进行替换。
最后,点击File菜单的Save image file
,保存固件到文件。
这份固件已经成功植入了Bootkit,将其刷回主板。如果一切顺利,在每一次Windows启动过程中,native.exe
都会被写入并执行。
如果没有成功,可以尝试以下操作:
- 关闭UEFI设置中的
Security Boot
和CSM
,确定操作系统是通过UEFI模式加载的。 - 向固件插入
UEFI_FSS
文件夹下的pcddxe.ffs
(方法同前文。但注意,这个模块可能会与其它模块冲突造成不能开机,仅建议在使用编程器的情况下尝试!)
GrabAccess仅支持UEFI引导下的Windows系统,目前仅支持x64系统。
已测试Windows 10 (1803, 22H2)和Windows 11(23H2)。包括使用了TPM、联网账户、Pin码的情况。但不支持绕过Security Boot。
和Kon-boot篡改Windows内核不同,GrabAccess的工作原理,源自于Windows的一项合法后门:WPBT(Windows Platform Binary Table)。
WPBT常用于计算机制造商植入驱动管理软件、防丢软件。类似Bootkit病毒,一旦主板中存在WPBT条目,无论是重装系统还是更换硬盘,只要使用Windows系统,开机后都会被安装指定程序。
WPBT的原始设计,应当是由生产商在主板的UEFI固件中插入一个特定的模块实现。但是,通过劫持UEFI的引导过程,攻击者可以插入WPBT条目,而无需修改主板固件。
GrabAccess包含两个部分。
其一是用于写入WPBT条目的UEFI应用程序,即源码中的Stage1-UEFI。它们用于在UEFI环境下向ACPI表写入WPBT条目。
其二是一个Windows Native Application,即源码中的Stage2-NativeNT,用于写出最终Payload和添加启动项。
WPBT所加载的应用程序,并非常规的Win32程序。而是一个Windows Native Application。它在Windows Native NT阶段执行,早于用户登录。但是Windows提供给Native APP的API,也少于Win32程序。
源码中的Stage2-NativeNT负责将其末尾的最终Payload(即用户打包的指定程序)写出到C:\\Windows\\System32\\GrabAccess.exe
,并为其添加启动项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\GrabAccess
。
如果其末尾没有Payload,则通过IFEO劫持Logonui.exe,在Windows登录时显示cmd.exe和netplwiz.exe