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

看俺是怎样查询并解码恶意的PowerShell脚本

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

一、媒介
PowerShell的身影无所不在,我近来也遇到过愈来愈多的歹意PowerShell剧本。为何入侵攻击者热衷于应用PowserShell?由于很多Windows版本中都邑自带这个对象,而且该对象能够拜访WMI和.Net Framework的全体功效,也能在内存中履行歹意代码以回避反病毒软件的查杀,对了,与PowerShell相干的日记记载也没有那末完整。
在对这种案例的阐发进程当中,我发明了多条线索能够证实某位入侵攻击者曾经应用PowerShell实行过入侵攻击。这些线索包含已装置的办事、注册表条款和磁盘上的PowerShell文件。假如启用了日记记载功效,我也能找到很多有用的信息。本文的目标是为那些对PowerShell不是分外认识的网安阐发职员供给一份参考。在本文中,我会向人人先容若何定位歹意PowerShell法式的一些履历,同时也会先容解码颠末混杂的PowerShell剧本的一些办法。这一系列文章共有三篇,本文是第一篇,将来几周我会连续推出后续文章。
二、Part 1:以办工作势装置的PowerShell剧本
起首我想先容我最爱好的一个例子:若何经由进程System变乱日记发明入侵攻击者将PowerShell剧本装置成本机办事。为了定位这种法式,我所做的第一件工作便是查找ID为7045的那些变乱(Event ID 7045)。当体系中装置某个办事时,日记中就会出现这种变乱。以办工作势装置的某个PowerShell剧本以下所示:

上图中我用红框标出了一些值得留意的信息:
1、办事名(Service Name)为随机的字符串。
2、办事文件名(Service File Name)为%COMSPEC%,这个字符串为cmd.exe所对应的情况变量。
3、引用了powershell可履行文件。
4、包含颠末Base64编码的数据。
那末,这种变乱为何会出如今日记中?有多种办法能够做到这一点,此中一种办法便是应用内置的Windows办事节制管理器(Service Control Manager)来创立办事,敕令以下所示:
sc.exe create MyService binPath=%COMSPEC% powershell.exe -nop -w hidden -encodedcommand
sc start MyService
上述敕令会创立名为“MyService”的一个办事,“binPath=”选项用来启动cmd.exe,后者会履行PowerShell代码。
有个风趣的信息必要惹起咱们的留意:以这种方法创立办事后,咱们能够会获得一些差错信息。但是,这些差错信息其实不意味着办事装置失败,缘故原由在于Windows盼望装置“实在”的二进制法式,是以在期待这个“办事”时会出现“超时”,终极出现差错信息。我也是颠末测试才晓得这一点。在测试进程当中,我应用该办法胜利装置了一个反弹shell,操纵进程当中Windows主机上会发生办事差错信息。以下图中,左图为我在入侵攻击虚构机上启动的一个Metasploit会话,右图为装置了Windows 7体系的虚构机。固然Windows 7主机遇提醒“办事没有实时相应启动或节制哀求(The service did not respond to the start or control request in a timely fashion)”,但其实不影响Metasploit会话中胜利关上反弹shell:

以下两图分离对应System变乱日记中的7000和7009变乱。固然7009变乱提醒说“FakeDriver办事启动失败(The FakeDriver service failed to start)”,但这其实不代表binPath变量中包含的敕令履行失败。以是,假如依据这些信息断定PowerShell没有履行,咱们能够会获得差错论断:


咱们能够应用python来解码System日记中7045变乱所包含的颠末base64编码的PowerShell敕令。风趣的一点是,这是一段Unicode编码的base64代码,是以在解压时咱们必要指定额定的参数。(为了便于展现,我没有全体出现一切base64文本,你必要在解码法式中包含一切的base64文本):
import
base64 code="JABjACAAPQAgAEAAIgAKAFsARABsAGwASQBtAHAA...."
base64.b64decode(code).decode('UTF16')
解码后的PowerShell敕令以下所示。疾速检查代码后,咱们能够找到一些风趣的线索,好比,咱们能够在此中找到与Net Socket无关的TCP协定和IP地点信息:

这段代码在功效上与应用Meterpreter用来创立反弹shell相似。上述PowerShell代码解码起来异常轻易,但是,很多场景下,咱们面对的情况并无那末简略。
接下来是另一个例子,这一次咱们面对的是“通俗”的base64代码。此中咱们必要再次留意%COMSPEC%变量和此中包含的powershell.exe字符串:

咱们照样应用Python来解码这段base64编码的PowerShell代码:

这一次,解码后的结果没有那末直观。假如咱们回过火好好察看一下System中的变乱记载,咱们能够发明此中包含无关“Gzip”和“Decompress”相干信息:

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

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