欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

值得关注的威胁类别--利用脚本语言解析器过主防

来源:本站整理 作者:佚名 时间:2019-04-10 TAG: 我要投稿

终端安全软件功能可以分为两大部分,一部分是杀毒,另一部分是主防。主流安全软件几乎都同时包含两种功能。
杀毒方面10多年前开始已经有比较多的攻防对抗方式,这里不作过多讨论,本文主要讨论主防。
主防主要作用是在关键系统位置被操作的时,判断操作请求来源是否合法。合法则放行,不合法则拦截,未知则询问用户。
粗略来看可以这么理解:杀毒主要校验资源(文件、url、内存数据、代码)等是否合法,主防主要校验行为是否合法。
攻击者绕过主防的方式大致包括:寻找系统漏洞,寻找特定主防的漏洞绕过,寻找正规大厂签名,社工,寻找白名单exe等。
由于这些方式讨论起来涉及领域过大,本文主要介绍白名单exe的方式。
Why?因为白名单的方式发掘利用成本低(危),兼容性强(害),效果不错(巨),容易更新(大)。
白名单exe
  Windows平台下,大概7、8年前开始流行一种过主防执行高危操作的方式,原理大致如下:
1. 寻找在杀软主防白名单中的exe程序。(一般带有大公司合法签名)
2. 确认exe程序是否加载可控动态库(dll.ocx...),并且动态库可以被路径劫持。
3. 确认exe文件调用动态库时未作严格校验(哈希/签名/版本...)
4. 编写执行高危功能动态库,仿写原动态库接口,放到exe调用路径中。
5. 启动exe,让动态库中的恶意代码执行。
下面来解析下重点要关注的地方:
1. 为什么要寻找调用dll的exe,而不寻其他类型的exe?(例如exe调用exe)?
 原因是当时各类主防对exe文件的检测比较严格,相对来说 dll.ocx检测偏弱。exe的运行时容易取得完备的运行条件,这样可以比较轻易复现恶意场景,容易定义威胁代码,而dll/ocx等依附于exe,不管是模拟运行、或者静态检测都相对麻烦,而且运行场景比较容易被破坏。
2. 调用链(进程树)的问题
一般认为explorer派生出来的子进程和孙进程比较可信。(暂且抛开用户是否运行的病毒程序不说,制定这种规则大概是因为用户运行程序一般都通过桌面运行,桌面进程为explorer,所以exe的父进程是explorer。而其他父进程为非explorer的程序执行高危操作时,很有可能是恶意程序所为,当然系统本身的程序、服务等也会执行高危操作,这些需要主防排除)。正因为如此,甚至出现了一些恶意程序模拟鼠标键盘操作去关闭安全软件,或者点击恶意程序启动,并且能成功,因为模拟操作导致发送的消息父进程是explorer,这样恶意操作就在白名单进程中执行了,不会被拦截。
3. 这种方式现在几乎没有用了,因为主流主防对dll ocx等PE文件也开始重点照顾。
其实无论是过主防,bypassuac,域名检测,进内网,主要思路几乎一样,就是找到白名单的载体,想方设法镶进去自己的料,载体可以是签名,可以是可执行文件,可以是域名下的可控路径,可以是跳板机,可以是运行中的进程上下文等等。这种思路贯穿攻防对抗多个领域。载体可能会变,但是思路始终不变。
废话不多说,回到过主防领域,今天谈及的是白名单exe的改进版。
之前的方式payload一般是dll、ocx,随着开发领域技术栈的发展,脚本语言越来越多的应用到各领域,其中js就是近年很火的一种,通过nodejs,js可以写服务端程序和桌面程序(electron nwjs)。
这种开发方式不少大厂都在使用,但是很少会去校验载荷的合法性(exe/dll/ocx /ps1脚本都有签名,但是现在很少看到js代码有校验和签名),这其中就隐藏巨大风险。例如,通过替换程序内的js文件,可以控制白名单exe的执行逻辑,而且不会引入新的pe文件,也不会破坏原文件,更不会出现跨进程读写被拦截的情况,效果跟动态库效果无异。例如替换某些著名程序的js可以在用户运行时执行高危操作,主防不会报任何提示。更可怕的是这些白名单exe很多本身就是自启动项,不需要用户主动运行。
当然除了js其实还有其他脚本语言解析器可能会被利用,这里只讨论js。
今天主角就是以下这位:正规大厂签名
他们之间的互动如下
t.exe--->libs/node.exe--->js/main.js
T.exe调用node 参数为js/main.js
 
 
首先明确一点,由于node.exe是一个非常常用的js解析器,就像php 和.php的关系一样。
正是由于这种通用性使得它即使带有签名,但是签名权重极低(跟没有一样),所以通过它执行脚本高危操作一般都是被拦截的。这里起关键作用的是t.exe 他的签名是知名大厂,这样程序调用链就是explorer.exe-->t.exe-->node.exe-->main.js,explorer的权重之前已经介绍过,这里不多说。
这个调用链和老方式explorer.exe-->oo.exe-->xxx.dll的不同之处在于,他不需要引入额外pe,所有高危操作都在main.js完成即可,这意味着什么,相信你懂的。。。
然后重点就是写js了
关键代码完成功能:写启动(无提示),释放文件(其实被释放的文件可以写在js里面,这里做测试分开写比较清晰),重启(可有可无 只是为了测试快些)
function startup() {
var pr = require('child_process');
var pathrexe,pathrsys,pathrbat,regexe;
//console.log(process.env.LOCALAPPDATA+ ' | '+typeof process.env.LOCALAPPDATA);
if(process.env.LOCALAPPDATA==undefined){
    
    
    pathrsys = process.cwd()+'\\libs\\'+'r.sys';
    pathrbat = process.cwd()+'\\libs\\'+'r.bat';
    regexe = process.env.USERPROFILE+'\\'+'r.bat';
    //console.log('=xp:'+pathrexe);//不需要uacbypass直接加载bat
}
else {
         console.log('>xp:');
    if(process.env.PROCESSOR_ARCHITEW6432=='AMD64'){  
        pathrexe = process.cwd()+'\\libs\\'+'r64.exe';
        pathrsys = process.cwd()+'\\libs\\'+'r64.sys';//真证书不用导
        pathrbat = process.cwd()+'\\libs\\'+'r.bat';

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载