3月31日消息:0Patch推缓解程序解决Win10字体库被黑客利用的漏洞。早前微软公布 Windows 10&Windows Server 系列新安全漏洞, 这枚安全漏洞被微软发现前已经遭到黑客利用。攻击者可使用特制的文件诱导用户加载然后远程执行任意命令。目前微软尚未发布安全更新对这枚高危级别的安全漏洞进行修复, 不过第三方安全公司0Patch已经推出缓解程序。
使用0Patch对漏洞进行缓解:
第三方安全公司Acros Security日前已经更新漏洞修复工具0Patch,借助这款工具所有用户均可无差别获得缓解。
缓解原理是0Patch内置多种安全漏洞信息及应对方法, 当检测到用户系统受特定漏洞影响时便自动加载修复程序。
此次字体管理器漏洞实际上还没有比较彻底的修复方法, 因此0Patch内置的是微软安全响应中心提供的缓解方法。
当用户安装该程序后会自动执行相应的修复方法进行缓解,具体缓解方法是禁用资源管理器预览和详细信息窗格。
Windows 7&Server 2008推荐使用此工具:
因 Windows 7&Windows Server 2008 系列已经结束支持 , 因此微软在下月发布安全更新时不会修复上述系统。
有鉴于此仍在使用这些操作系统的用户可以使用0Patch获得保护, 该软件有收费版本但普通用户使用免费版即可。
同时安装该工具后也有助于解决其他微软不会进行修复的漏洞 , 相对来说算是在生命周期结束后的临时应对办法。
当然蓝点网依然推荐您尽早升级到受支持的操作系统获得完整的安全支持,旧系统总归有些漏洞无法被彻底修复。
0Patch是个什么样的工具:
这款工具最初的开发目的其实是解决微软修复速度比较慢的缺点,通常微软需要半个月甚至更长时间来修复漏洞。
为此Acros Security安全公司开发这款工具,收集微软发布的缓解方法及该安全公司自己开发部分漏洞修复方案。
当用户安装该程序后会自动连接服务器获得最新的漏洞信息和修复方法,就及时性上说这款工具要比微软更快些。
当然如上面所述并不是所有修复方案都是该安全公司原创的,也不是所有安全漏洞都可以被这款工具彻底的修复。
因此在紧急时刻例如漏洞已经被爆出但微软无法及时修复的情况下,使用该工具可以更简单快速的缓解漏洞危害。
关于此次漏洞0Patch内置的微代码修复示例:
- MODULE_PATH "..\Affected_Modules\gdi32.dll_6.1.7601.24540_64bit\gdi32.dll"
- PATCH_ID 420
- PATCH_FORMAT_VER 2
- VULN_ID 6050
- PLATFORM win64
- patchlet_start
- PATCHLET_ID 1
- PATCHLET_TYPE 2
- PATCHLET_OFFSET 0x00009c00 ; Beginning of function NtGdiAddFontResourceW
- N_ORIGINALBYTES 5
- JUMPOVERBYTES 0
-
- code_start
- ; font path string (wide char) is in rcx
- ; example: "\??\C:\Analysis\ADV200006\SOSUE___.pfm|\??\C:\Analysis\ADV200006\SOSUE___.PFB"
- ; we make sure to restore rcx after we're done
- ; we can pollute rax because the original code doesn't use its value after our patch
- ; first upper-case the whole string
- push rcx
- LOOP1:
- cmp word [rcx], 0
- je END1
- cmp byte [rcx], 'a' ; if below 'a', no need to upper-case
- jb SKIP1
- cmp byte [rcx], 'z' ; if above 'z', no need to upper-case
- ja SKIP1
- sub byte [rcx], 0x20 ; make it upper-case
- SKIP1:
- add rcx, 2 ; next wide-char character
- jmp LOOP1
- END1:
- pop rcx
- ; now search for ".PFM" and ".MMM" in the string
-
- push rcx
- LOOP2:
- cmp word [rcx], 0 ; did we reach end of the string?
- je END2 ; note that we don't care if we test for four
- ; characters a bit beyond the buffer;
- ; there's always readable memory there and there can't be an
- ; unwanted match because the string is null-terminated
- mov rax, 004D00460050002Eh ; ".PFM" (in LSB byte order)
- cmp qword [rcx], rax ; is there ".PFM" at [rcx]?
- je BLOCK ; if ".PFM" is found, we block the loading of the font
- mov rax, 004D004D004D002Eh ; ".MMM" (in LSB byte order)
- cmp qword [rcx], rax ; is there ".MMM" at [rcx]?
- je BLOCK ; if ".MMM" is found, we block the loading of the font
- SKIP2:
- add rcx, 2 ; next wide-char character
- jmp LOOP2
- BLOCK:
- pop rcx
- mov rax, 0 ; simulate the syscall returning an error when trying to
- ; load the font
- retn ; return and avoid syscall being called
- END2:
- pop rcx
-
- code_end
-
- patchlet_end