桌面应用渗透测试方法入门
本网络研讨会最初发布于2024年10月24日。
在本视频中,专家深入探讨了桌面应用渗透测试方法的复杂性。他们讨论了全面评估应用安全性的各种技术,包括内存分析、DLL劫持和网络分析。对话还强调了制定全面测试策略的重要性,以及在测试过程中记录发现的价值。
网络研讨会讨论了桌面应用渗透测试的综合方法,强调在深入复杂逆向工程任务之前彻底理解应用的重要性。主讲人主张在渗透测试期间进行详细的范围界定过程,以确保所有相关组件和潜在漏洞都在测试范围内。强调了“随测随报”作为渗透测试的关键方法,促进无缝文档过程并确保彻底性。
亮点
-
2:53 桌面应用渗透测试的彻底性:超越漏洞赏金
解释桌面应用渗透测试的综合方法,强调彻底的范围界定和文档分析。 -
1:23 分析应用变更:快照方法
学习如何使用System Explorer等快照工具分析应用安装后文件和注册表的变更。 -
1:59 理解DLL劫持:风险与方法
DLL劫持涉及诱骗应用加载恶意DLL,使攻击者能够实现持久化和权限提升。 -
0:45 探索模糊测试:发现应用漏洞的方法
模糊测试涉及向应用输入随机数据以发现漏洞,使用如Google的Cluster Fuzz等工具进行网络测试。 -
2:12 简化渗透测试:“随测随报”方法
“随测随报”方法将实时文档集成到渗透测试中,简化报告创建并提高生产力。
完整视频
转录
Craig Vincent
是的。那么我是谁?显然,我猜我测试了很多。我不知道,但我做了很多渗透测试。我学过计算机科学、计算机安全和数学。在大学里,这就是我如何从技术角度学习安全知识进入信息安全领域的。他们也指引我们,比如,嘿,有个叫Defcon的东西。有个Linux发行版上面有所有这些黑客工具,指引我们去哪里找资源自学。毕业后,我几乎立刻开始做软件开发工作。不太喜欢写软件。所以我想,好吧,我懂计算机安全这些东西。让我学好这个,试着找份相关工作。最初我想做恶意软件分析,因为像Stuxnet这样的事情刚发生。我想我读了《零日倒计时》刚出版的时候。我觉得,哇,这听起来真酷。我想学这个。所以你通过实践来学习。所以我在家建了实验室,做逆向工程的东西。我想是opensecuritytraining.info,一个网站,有很多逆向工程、二进制分析的网络研讨会和培训。都是免费的,在YouTube上。所以我学完了所有内容,然后开始做逆向me和Crackme,看一些旧的恶意软件样本。我觉得,好吧,我在这方面还行。然后我想,我真的不喜欢这个。我不想再做这个了,就像我不想做软件开发一样。所以我没考虑过渗透测试。我以前觉得那些家伙很无聊。他们只是运行扫描器之类的东西,然后写报告。然后我看了Security Weekly。上面有个家伙有家渗透测试公司,他谈论渗透测试血汗工厂,以及不必那样做。我想,好吧,让我试试。所以又回到起点。家庭实验室,故意脆弱的虚拟机,像Damn Vulnerable Web App,只是学习黑客技能,对吧?这让我找到了一份做红队的安全工作。之后我来到了Black Hills,一直待到现在。其他能让我不停谈论的事情还有高尔夫、足球、游泳。所以如果你想在会议上闲聊,让我不停说话,这些都是好话题。正如Jason提到的,这不是关于漏洞研究、零日漏洞开发、逆向工程的演讲,对吧?因为那是我最初的想法。他们像,嘿,Craig,我们有个测试。是个桌面应用。我想,好吧,那里的期望是什么?最初我有点慌,因为我在想。我想,哦,是的。我是开发人员。我做过一些逆向工程,做过网络渗透测试,做过Web应用。我做过所有这些不同的事情。所以我觉得我有技能。但我想,我该从哪里开始?我不想坐在调试器前一周,他们期望我找到零日漏洞,然后一无所获,对吧?所以在我停止恐慌之后,我开始四处寻找。我想,好吧,肯定有方法学。肯定有统一、周到的方法来做这个。我发现没有太多内容。我找到像Reddit帖子提到一些你可能尝试的事情。OWASP有一点清单。所以我用它作为起点,然后构建了自己的方法学。我不知道这是不是最近的事情,但我从没做过这些测试到在过去一年半里做了三四个。我有一阵子没做漏洞赏金了。但我研究这个是因为我想有个样本用于幻灯片,因为我不能给你看客户的东西截图。我只是搜索了公开的漏洞赏金项目,有桌面应用在范围内的,有一堆。所以看起来越来越常见。所以这只是我高层次的方法,如何从安全角度看待应用,而不深入所有反汇编、逆向工程等复杂的东西。在你达到那一步之前,你可以做很多其他事情,可能应该做。所以这主要是我们要讨论的内容。
我想强调这是渗透测试方法学。所以我喜欢把它比作Web应用渗透测试与漏洞赏金,漏洞赏金更像是概念证明或即走即用的情况。而渗透测试更关于覆盖面和彻底性,你会报告漏洞赏金中他们可能不关心的事情,对吧?所以桌面应用也是一样,这不是像Pwn2Own。寻找零日概念证明,像POC或GTFO,对吧?这是方法学,像检查所有东西,要彻底。只想说清楚。
你要做的第一件事是范围界定。这通常在你的参与规则之前或期间,你与客户会面,问他们,好吧,我要测试什么?我总是喜欢要求更包容的范围。我喜欢包含更多东西。有些人可能想推脱。他们说,不,我们只想你测试应用。但就像,应用与这些服务器通信,使用API,做所有其他事情。我们能把它包含在范围内吗?这不只是我像贪婪的黑客一样想要更多东西来攻击。那是一种,好吧,也许这些东西在你的常规网络渗透测试中测试过,或者作为Web应用渗透测试的一部分。但就像,如果你的桌面应用以不同方式使用它呢?也许有更多覆盖要添加。有不同的上下文。所以我喜欢尽可能包含更多东西。所以像API、其他相关基础设施,我尽量让他们提供源代码如果可能。不一定我立即深入源代码。但作为参考可用是有帮助的。我在做ROE和询问范围时做的另一件事是问他们感兴趣的领域,应用中他们担心的事情,新东西,骨架在哪里?很多时候他们知道,很多时候他们会想让你去找。他们可以指引你方向。
几乎我做的每个测试,大部分情况下,我做一些某种程度的侦察,给自己更多信息。对于桌面应用,我想开始的第一件事是文档。要么我在ROE期间也要这个。像,嘿,给我你有什么文档,我需要那个。如果他们不给我或忘记或不管,我可以去找。无论公开可用什么,我下载下来阅读。阅读文档真的很有帮助,因为它基本上告诉你应用中有趣的功能和东西,你可能想去攻击。所以,像,哦,是的,它在这个端口运行服务做这个,或者你可以导入文件处理做这个。它只是告诉你应用中你想看的有趣信息。很多时候这些是,至少我的经验,这些大多是商业应用,人们使用的知名应用,对吧?这就是为什么他们让人测试。所以很多时候他们以前披露过漏洞。所以可能是,也许只是。他们自己发布,像微软、思科,他们会发布自己的东西。嘿,是的,我们有这个漏洞影响这个、这个、这个。有CVE发布,有概念证明漏洞利用,在Exploit DB和GitHub等地方。所以你可以去看看。想法是你看,好吧,这东西以前有漏洞。你想检查的一件事是,好吧,这是常见主题吗?我能在应用其他部分寻找相同类型的漏洞吗?因为他们可能在这里修复了,可能其他地方存在。另一件偶尔发生的事情是,他们有漏洞披露,他们修补了,但补丁不完全有效。像,可能有办法绕过补丁。很多时候发现这些的研究人员会回去检查,看是否有其他方法可以绕过修复。但那是你可以总是看的东西,嘿,这个漏洞。然后如果它是开源的,你可以看,说,嘿,他们做了什么改变?然后我能想到办法绕过它,基本上重新打开这个现有漏洞吗?你想看很多,很多时候这些大项目有GitHub仓库,像GitHub账户,可能不是整个源代码,但可能有他们使用的开发工具,可能有其他东西或应用组件是开源的,他们放在那里。你可以去那里找秘密,你可以找关于应用如何工作的信息。另一件有趣的事,我还没在实际测试的应用中这样找到任何漏洞,但这是我最近纳入的东西,很多时候他们会从现有项目分叉仓库,像更大、更流行的项目,他们会分叉做自己的扩展之类。当他们这样做时,他们不一定总是将主仓库添加的其他东西合并到他们的分叉仓库,对吧?所以像分开的、完全分开的东西。所以如果你去看他们分叉的东西,看它的更新和提交,找最近的安全问题。如果那里有新的提交,他们修复了安全漏洞,你可以检查,好吧,这个漏洞存在于我客户的分叉中,可能在他们应用中吗?所以这真的很懒。我是说就像让别人为你找东西,你可以用来对付你的目标。在那里找秘密,像很多时候旧提交,像如果提交了API密钥或凭据之类,这些会留在你的git仓库,即使你覆盖了。所以你想找那些东西。除了GitHub还有其他地方,像BitBucket、Sourceforge,有其他地方你的客户可能托管这些东西。所以只是Google dorp那些东西,尽可能找。
好吧,你做了一点研究。你有文档,读完了文档,做了所有事情。现在你有应用。你想做的第一件事是什么?我想做的第一件事是弄清楚应用在我的主机上做什么。所以我每个新测试都从新虚拟机开始。所以我启动Windows机器,下载应用。我要做的是在安装和运行应用之前,对这东西进行注册表和文件系统快照。我用。我想System Explorer更好。Reg Shot是我用过的旧工具。我最近都用了。它们工作,但基本上它们对机器的文件系统和注册表拍快照。所以你拍一个快照,然后安装程序,运行它,开始用它做事。一旦你觉得充分了解了应用的所有功能和它可能做的一切,你拍另一个快照,然后可以比较那些,显示测试机器上所有变更的东西,像文件、注册表键之类。然后你可以去看那些关于应用的有趣事情。所以你找任何放在那里的有趣文件。如果有日志或配置文件,你想去看。很多时候这会打开并暴露额外的攻击面。如果他们有像他们通信的服务器的注册表键,可能,我见过,我见过注册表键中的密钥和凭据。所以只是有趣的东西,你可能以后能利用。你看那个,当然所有应用文件,现在在哪里。所以我可以把所有那些拿下来,放在Linux机器上,对它们运行strings,只是从这些文件中获取有用的ASCII字符串,看里面有没有有趣的东西。这让你很好地了解应用在你的机器上的足迹,作为起点。
然后你可以看实际二进制文件,说,好吧,像,他们怎么做的?什么语言?你可以用CFF Explorer Detectives。有很多其他工具,你可以指向二进制文件,它们会告诉你各种有趣的东西。我想,我想Gator自动做。但你看这些东西,说,好吧,像,获取更多信息,像什么写的?如果是用C#或Java写的,反编译这些到不一定是原始源代码,但像可读源代码等价物,很直接,使用像ILSpy、JD之类的工具。我这里列出的工具。我最近没用任何Java的。我想上次我用Java应用做这个是好久以前,我想我用旧的Jad工具。但显然有更新的,我研究时遇到的。只知道如果是C#或Java,那么你可能可以相当好地表示原始源代码,相当直接的方式。所以有帮助,因为然后你可以实际遍历源代码,然后你可以看其他东西。
所以有很多这些像二进制保护,这些编译器和系统内置帮助开发者制作更难利用的代码。所以像你的地址空间布局随机化、安全SEH、DEP东西像控制流防护,这些都是你可以像的东西。它们基本上是编译器选项,你可以加上使你的应用更难黑客。所以你可以用Binscope和PE Security检查这些。我最后会有所有这些提到的链接,因为我不知道怎么在PowerPoint做脚注。所以我只是有个链接幻灯片有一堆东西。所以你最后看那个。但Binscope需要调试符号。那是他们向客户要的东西,如果他们在做ROE时能拿到,否则不工作。但你可以用PE Security检查东西,它只是基本上遍历所有二进制文件检查这些不同选项。
这是Canva,这是。我提到漏洞赏金项目。我只是去,我只是选了一个。我没黑客或任何东西。我只是走过这个方法学。这不是他们会关心的任何东西。所以不是不负责任披露当我做这个像这样。所以请不要生气。Canva,你可以用Sysinternal Suite检查应用签名,有个叫SigCheck的工具。基本上检查这些东西的代码签名。那只是对二进制本身的完整性检查,确保没被恶意行为者修改或搞乱,对吧?是发布者开发者做的东西,进程识别。
所以我。你可以用任务管理器或。我喜欢procmon。Procmon很酷。我们谈到DLL劫持时更多讲procmon。但是的,你只是在这里看Proclamation,你可以看所有进程,你可以看父进程,像它从哪里生成,只是了解你的实际应用运行、生成和做的进程。我想提,这是有趣的事情。
当我看这东西的文件,遍历系统添加的文件,他们有像Electron的许可东西。所以只是看那些东西你像说,好吧,什么是Electron?如果你Google什么是Electron应用?你会发现所有这些都是Web东西塞进浏览器在桌面应用中。像非常简化的解释。但基本上只是知道,像,遍历这些东西弄清楚用什么技术制作,让你更好地了解攻击它的不同方式。我想我早先忘了提。我只是想回去碰那个,内存分析。有更复杂的事情你可以做。但我最喜欢的快速肮脏的事情是只是拿你的应用进程在任务管理器,右击它创建转储文件,然后你可以对那个运行strings,你可以找到很多有趣东西。因为这东西内存中有数据可能敏感。会有像API密钥、凭据、私有加密密钥,你可能能然后利用对抗其他东西,希望你已经包含在范围内,说,好吧,这是暴露这里,因为这都是一个系统,不只是这个应用。所以,寻找运行时内存中存储的敏感东西。那是快速肮脏的方式做那个。这里是另一个,DLL劫持。
这是一个像。作为软件开发人员,你不控制端点。所以有这个DLL劫持事情,基本上恶意行为者让你的应用加载他们的DLL而不是你的一个DLL。所以基于DLL加载的搜索顺序。它开始像应用加载的目录。然后去,看像系统目录,然后像我想另一个目录,然后看你的路径变量。我不记得头顶,但基本上那是它去找这些DLL的地方。如果你能写一个同名DLL到搜索顺序中更高优先级的地方,那么你可能能让它加载和执行你的DLL。我找最多的,我认为开发人员最关心或应该关心的,是缺失DLL。所以如果它找不存在的DLL,你能写到那里,那是做这种事情的机会。用Process Monitor做这个。如果你看这里,过滤器中这两个绿色复选框只是我添加的东西。你找结果名是not found且路径以DLL结尾。所以这基本上像所有它找不到的DLL。你应用那个过滤器,你可以看所有proclamation有的一切。所以你只是找你的目标进程找DLL找不到。你在那里做的是只是放你的恶意DLL在那里,它被加载运行。这对攻击者有应用,因为他们能建立持久性,对吧?假设你得到端点的C2,人重启电脑。好吧,你刚丢了那个,对吧?但如果你有这个,如果你有像常见软件的DLL劫持,你相当确定他们运行它,你在上面找到它,那么你能加载这个恶意DLL。所以下次他们的电脑启动,这个应用运行,你的DLL被加载,砰,你又有了C2。它偶尔用于权限提升,取决于权限。所以当你做这个,你的DLL被加载,你现在有代码执行在加载它的进程的特权上下文中。所以如果你有像,某种原因高特权进程或软件加载你的DLL,你现在以那些权限运行。那可能比作为普通用户更高的权限级别,对吧?其他,有趣的副作用。
我测试了一个EDR,将保持无名。所以我测试的一件事是,好吧,什么C2我能出去?所以我有像cobalt strike信标,我有几个那些工作正常回去。它也受DLL劫持影响。所以它有远程隔离功能,对吧?所以你基本上说,嘿,我们检测到这台电脑上的恶意软件,让我们隔离它。好吧,我继续在我的测试机器上用他们的门户做那个,我丢了所有信标。所有常规的消失了,除了DLL劫持信标,因为它实际运行在他们的EDR进程中,他们没隔离那个,因为他们必须维持对端点的控制继续做他们的EDR事情。那只是另一个奇怪副作用的事情可能发生与这个,作为开发者你可能关心。
网络分析。只是用TCP view看它在和什么通信。如果你看这里,Canva和一堆这些Web服务器通信,至少它们看起来像Web服务器基于端口。然后看起来它打开监听这个端口。那只是给你应用通过网络通信的想法。我总是喜欢代理Web流量通过Burp Suite,因为为什么不。那给你所有工具,你会做正常Web应用渗透测试方法学对抗这些其他端点和基础设施,对吧?对于其他协议和其他流量。你可以用Wireshark,只是捕获所有然后遍历。这很像,这很通用。这像选择你的冒险是每个应用不同。但在这个实例,像所以这个,这个它监听的端口,这是你想模糊的东西,对吧?所以我们谈模糊测试。有很多。基本上模糊测试是你拿监听的服务或其他方式你可以输入数据到这个应用,你喂它一堆东西,垃圾,缺乏更好术语。有些是,更,比那更有计算。但你喂它东西直到它崩溃。那是你开始找应用漏洞的长短。有一堆模糊测试器为网络东西。这些只是一些例子。我没用所有。我真的很想看Cluster Fuzz,因为那是Google做的那个他们用找像,像Chrome自己成千上万的bug。这些只是一些模糊测试器的例子你可以做这些网络应用。所以如果你有桌面应用打开端口监听,百分百想模糊它。
是的,我很快过完了那个。那是,25分钟。这里是链接。Deb会有PDF格式的幻灯片,所以你可以有所有这些我想我们可以做问题。
Jason Blanchard
嘿,Craig。
Craig Vincent
我有点飞过那个,但希望,是的,希望我全讲了。
Jason Blanchard
嗯,那只是给我们更多时间问答。是的。有人说注意PE Studio现在付费玩。
Craig Vincent
不知道。
Tom Smith
是的。
Jason Blanchard
好吧