0X00前言
由于作者的朋友在某业务线的安服部门实习过一段时间,对蓝队安全方向有了强烈的兴趣。朋友对我说:由于现在的安服部门会在不同时期有不同的工作方向,在以往每年的某个时期都会承担一些蓝队的任务。因此,面试官在面试的时候都会考察个人的蓝队思维和应急水平。与朋友交流完后,他说这些话对我启发不小。于是就有了下面这篇文章。大纲如下图所示:
0X01攻击方式
众所周知,蓝队是指同时防御真正攻击者和红队的内部安全团队。蓝队应该与大多数组织中的标准安全团队区分开来,因为大多数安全运营团队没有时刻警惕攻击的心态,而这才是真正的蓝队的使命和观点。这就是蓝队和应急响应有不太一样的地方,尤其是在某时期蓝队成员激增原因了。
由于蓝队需要时时刻刻的面对红队攻击,并且需要解决掉这些威胁。知己知彼百战百胜,这句话的重要性就体现出来了。下面是红队常见攻击方法的总结和比较(如下表所示)。
攻击方式 | 可执行文件 | 钓鱼 | RCE(写入一句话) |
---|---|---|---|
可行性 | 较高,大部分是在进入内网后,留存后门 | 适中,容易在攻防演练中出现 | 偏小,一般针对网站目标作为突破口 |
利用难点 | 需要搭配C2工具使用 | 需要利用社会工程学,获取目标信任(难点) | 需要网站源代码进行分析;与此同时还要绕过WAF,写入一句话木马 |
隐蔽性 | 适中,由于存在白加黑等方法,较难被发现 | 较强,并且office存在较多漏洞,方便搭配浏览器内核进行攻击 | 较强,一般内存马运行在内存中,隐蔽性好,排查难度较大 |
易检测性 | 较低,需要针敏感命令对杀软、EDR等安全设备做混淆处理 | 适中,不过需要警惕邮件当中的安全检测设备 | 较低,需要针敏感命令对杀软、EDR等安全设备做混淆处理 |
另外再提一句,我们首先可以关注VT沙箱(静态扫描+沙箱运行)、360红雨滴和微步沙箱(较弱)这类的网站或者公众号。我们可以通过样本下载去获取恶意软件样本,并进行逆向分析。
0X02钓鱼类型
Netcat(多用于linux)
Netcat 是一款简单实用的Liunx工具,它使用UDP和TCP协议,因此多用于网络安全中的渗透测试环节。 它是一个可靠且方便被其他程序所启用的后台工具,与此同时它也被用作网络的测试工具。所以,使用它你可以轻易的建立任何连接内建有很多实用的工具。
Netcat的内网小尝试(确定内网ip没有开启21端口):由于学习Namp所以难免和Nectcat搭上关系,这不用nc -v
命令扫描靶机时后查找资料,发现了一些有意思的事情。事例如下(示例):
Flash插件(自解压)
我们需要知道是什么Flash?答:Adobe Flash自商业互联网诞生以来就已经存在。万维网的第一个版本是建立在一个非常不起眼的超文本标记语言 (HTML) 的基础上的,它无法以动画或脚本的方式做任何事情。Adobe 开发了Shockwave Flash,它变成了简单的Flash在后来的生活中,这为开发人员提供了一种将丰富内容带入静态网络的方法。Flash用于播放电影、创建在线视频游戏和显示烦人的广告。到 现在,Flash已安装在全球数百万台台式计算机上。这给黑客攻击提供了有一个好方法。
由于某时期的目标大多还是Win7和Win sever 2008版本,并且Flash当时还是较火爆的软件,于是攻击者通过构造XSS漏洞,弹框出"软件需要更新,请下载安装包",诱导人们点击恶意文件下载链接。由于搭配自解压,只要下载就会自己解压运行,攻击成功率很高。附上国外网站上的攻击事列图(如下图所示):
宏文件
2017 年 10 月 10 日,卡巴斯基实验室的高级漏洞利用防御系统发现了一种新的 Adobe Flash 零日漏洞利用,该漏洞被用于攻击我们的客户。该漏洞是通过 Microsoft Office 文档传递的,最终有效负载是最新版本的 FinSpy 恶意软件。我们已将此错误报告给 Adobe,Adobe 将其分配为CVE-2017-11292,并于今天早些时候发布了补丁(如下图所示):
到目前为止,这种类型的攻击,虽然出现的攻击的数量较少,而且针对性很强,在前几年非常流行。对有效负载的分析使分析人员能够自信地将此攻击与跟踪为BlackOasis的攻击者联系起来。并且BlackOasis 还对FireEye于 2017 年 9 月发现的另一个零日漏洞 (CVE-2017-8759) 负责。当前攻击中使用的 FinSpy 有效负载 (CVE-2017-11292) 共享相同的命令和控制C2服务器作为与 FireEye 发现的 CVE-2017-8759 一起使用的有效负载。
EXE.PDF.EXE
我们可以参考这位师傅写的一篇文章(链接:https://blog.csdn.net/qq_44874645/article/details/118516254);但是我们这里需要注意如果为了防止exe后缀被发现我们可以使用超级长的"空格"然后达到一个隐藏.exe后缀的目的。
补充:但是这个建议在钓鱼的时候使用,效果较好!
0X03样本规则检测
特征码
应急响应人员可以使用的最有用的技术之一是散列对比法。散列算法是一种单向函数,它为每个文件生成唯一的校验和,很像文件的指纹。也就是说,通过该算法的每个唯一文件都将具有唯一的哈希值,即使两个文件之间只有一位不同。例如,在上一章中,我们使用SHA256哈希来验证从VirtualBox下载的文件是否合法。
在我写的《关于特征码查杀的回望与分析》(链接:https://www.freebuf.com/articles/system/355027.html)分析中,讲述了一些敏感的文件名和DLL名的哈希值也可以当做特征码去进行比对的方法。而且不仅是敏感字符,比如一些常见的Loader(加载器)如果其中出现print("xxcode!") 的字符串也可以当做是特征码,然后由杀软上传到云端,被VT检测定义为XXX家族木马变种。
编译残留
众所周知Go写的Loader编译的特性(即:使用go build 编译会有信息残留)会存在eg:debug信息、路径、用户名、混淆Go的包名.....
通过go build编译由导入路径命名的包及其依赖项,但不安装结果。如果 build 的参数是来自单个目录的 .go 文件列表,则 build 将它们视为指定单个包的源文件列表。编译包时,构建会忽略以“_test.go”结尾的文件。
当编译单个主包时,build 将生成的可执行文件写入以第一个源文件命名的输出文件(go build ed.go rx.go写入ed' 或 ed.exe)或源代码目录(go build unix/sam写入sam或 sam.exe),编写 Windows 可执行文件时会加“.exe”后缀。编译多个包或单个非主包时,build 编译包但丢弃生成的对象,仅用作是否可以构建包的检查。
如果是需要编写Shellcode,尽量使用虚拟机编译并且将用户改为Admin这种常见的用户以免暴露个人信息。与此同时我们也需要注意修改编译的残留,比如:我们可以使用-ldflags "-w -s"调试去除敏感信息;go-strip去除路径信息;利用garble混淆Go的包名(项目链接:https://github.com/burrowers/garble)等。为了更好的进行免杀,我们一般进行以下编译操作:
gobuild-ldflags="-w -s -H windowsgui"-xx.exe
eg:基于 Golang 的恶意软件在APT组织中越来越受欢迎 。我们可以看到一些APT 组织转移到Go平台。重要的原因原因有:1.与 C++ 或 C# 编译的二进制文件相比,Go二进制文件更难分析和逆向工程;2. Go 在跨平台支持和编译方面也非常灵活。恶意软件作者能够使用适用于多个平台(例如 Windows 和 *NIX 操作系统)的通用代码库来编译代码。与此同也有相应的规则,如下图所示:
C2工具特征
C2工具的开发难度大家都是知道的,所以二开C2就是大多数人较好的选择。比如开发Sleepmask....这些Kit套件,或者去重写Cobalt Strike中Beacon的源码。这可以极大的节省红队攻击的时间成本与代码成本。并且这类二开的C2实战适用性一点都不比Cobalt Strike这种商用软件差。
配置信息:主要对比默认配置的profile和配置修改后的profile。(提示:主要变化,http-get、http-post中把信息隐藏在jquery*.js中)我们可以将CobaltStrike.jar解压,后进行class的更改。
HTTP指令特征分析
心跳包特征:请求的url为/jquery-3.3.1.min.js,返回包的值为5543,返回包到下一个请求包之间的时间为心跳时间。
Sleep特征:请求的url为/jquery-3.3.1.min.js,返回包大小为5607,包含指令数据。执行完之后,下一个请求包按照新的时间发送心跳包。
Shell特征:这里的shell指令,对应“shell whoami”,其请求的url为/jquery-3.3.1.min.js,返回包大小为5628,包含指令数据。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为96。另外,接收到指令到执行完指令,并返回结果,时间间隔为0.1s。
File特征:示例中的流量包,包含两个指令内容,第一个指令其特征为,请求的url为/jquery-3.3.1.min.js,返回包大小为5607。随后,间隔0.01s后,发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令的结果,值为395。第二个指令其特征为,请求的url为/jquery-3.3.1.min.js,返回包大小为5607。随后,间隔0.01s后,发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令的结果,大小为75。
Hashdump特征:请求的url为/jquery-3.3.1.min.js,返回包大小为115580,包含指令数据,以及用于进行hashdump的dll。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为288。另外,接收到指令到执行完指令,并返回结果,时间间隔为1s。
Screenshot特征:请求的url为/jquery-3.3.1.min.js,返回包大小为268497,包含指令数据,以及用于进行screenshot的dll。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为304566。另外,接收到指令到执行完指令,并返回结果,时间间隔为30s左右。
0X04编译器残留分析
编译残留分析
语言类(c、go...),具体效果可以看上面列举的go语言的编译残留问题。下面让大家知道C语言开发怎么去除编译残留(如下图所示):
文件加壳
首先我们通过查壳去分析壳的特征,然后准备相应的脱壳工具进行脱壳。常见的UPX、穿山甲.....我们通过PE工具去看一看入口函数。如果需要查看敏感函数,可以用IDA分析一下或者X64dbg调试确定文件编译日期、字符串等....
文件签名
pfx证书签名
我们可以使用以下命令使用存储在个人信息Exchange (PFX) 文件中的证书对名为MyControl.exe的文件进行签名:
SignToolsign/fMyCert.pfxMyControl.exe
以下命令使用存储在受密码保护的 PFX 文件中的证书对文件进行签名:
SignToolsign/fMyCert.pfx/pMyPasswordMyControl.exe
EV签名
EV代码签名证书除了验证企业的基本信息、税务信息外,还对企业的经营地址、申请人身份进行审查,区别于标准代码签名的重要特点是支持Windows 10内核驱动文件签名和消除SmartScreen筛选器安全提醒,此外EV代码签名针对内核模式的驱动文件需要进行微软的交叉签名。
0X05结尾
其实,如果我们认真思考的话,我们会发现上面那些检测的思路和方法,有很多都是简单学习就可以简单上手的,希望这篇文章可以拓宽师傅们的恶意文件检测的思路和方法。最后我的总结就到此为止啦,希望对大家以后的学习和工作有所帮助。同时,欢迎大家指出不足。
参考链接:https://securelist.com/blackoasis-apt-and-new-targeted-attacks-leveraging-zero-day-exploit/82732/
https://heimdalsecurity.com/blog/adobe-flash-vulnerabilities-security-risks/
https://www.vusec.net/projects/netcat/
https://cofense.com/knowledge-center/signs-of-a-phishing-email/
https://blog.csdn.net/qq_44874645/article/details/118516254
https://learn.microsoft.com/zh-cn/windows/win32/seccrypto/using-signtool-to-sign-a-file