如何防范jpackage生成的EXE程序遭遇DLL注入攻击
jpackage生成EXE后无需修改代码的DLL注入防护方案
以下方案均可以在jpackage打包完成后直接操作,不需要修改原有Java代码调用系统接口:
- 给生成的可执行文件添加Windows原生安全标记
用Visual Studio自带的editbin工具给exe打补丁,开启DEP、ASLR、强制完整性检查等系统级防护,命令如下:
开启后系统会自动拦截绝大多数常规DLL注入行为,不需要修改业务逻辑。editbin /NXCOMPAT /DYNAMICBASE /INTEGRITYCHECK 你的应用程序名.exe - 配置Windows进程缓解策略
直接通过PowerShell给目标exe配置系统级的进程防护规则,禁止未签名、非微软签名的DLL注入到进程中,命令如下:
该规则是系统层面生效,只要匹配文件名的程序运行就会触发防护,完全不需要改动打包好的程序。Set-ProcessMitigation -Name 你的应用程序名.exe -Enable BinarySignaturePolicy,MicrosoftSignedOnly - 调整打包目录权限与结构
将所有依赖DLL放到exe同级的独立目录(例如lib目录),安装时默认部署到C:\Program Files路径下,给程序目录设置普通用户只读权限,禁止普通身份往程序目录写入文件,从根源避免恶意DLL被放到DLL搜索路径中。 - 直接对打包产物签名
不需要在代码中实现签名校验逻辑,用Windows SDK自带的signtool工具直接对打包生成的所有EXE、DLL文件进行数字签名,再配合前面的进程缓解策略,就可以实现仅加载签名可信的DLL文件的效果。 - 修改启动器默认工作目录
jpackage默认生成的启动器会把用户启动程序时的当前工作目录加入DLL搜索序列,你可以用Resource Hacker等资源修改工具直接修改启动器的内置配置,强制程序启动后的工作目录为程序安装目录,避免从用户的随机工作目录加载恶意DLL。
内容的提问来源于stack exchange,提问作者Aayush Jain
相关产品推荐
相关产品推荐

