桌面应用渗透测试方法论入门
本网络研讨会最初发布于2024年10月24日。
在本视频中,专家深入探讨了桌面应用渗透测试方法的复杂性。他们讨论了全面评估应用安全性的各种技术,包括内存分析、DLL劫载和网络分析。对话还强调了制定全面测试策略的重要性,以及在测试过程中记录发现的价值。
网络研讨会讨论了桌面应用渗透测试的综合方法,强调在深入复杂逆向工程任务之前彻底理解应用的重要性。主讲人主张在渗透测试中进行详细的范围界定过程,确保所有相关组件和潜在漏洞都在测试范围内。随测随报(report as you go)作为渗透测试的关键方法被强调,促进了无缝文档过程并确保了彻底性。
亮点
-
2:53 桌面应用渗透测试的彻底性:超越漏洞赏金
解释了桌面应用渗透测试的综合方法,强调彻底的范围界定和文档分析。 -
1:23 分析应用变更:快照方法
学习如何使用System Explorer等快照工具分析应用安装后文件和注册表的变更。 -
1:59 理解DLL劫持:风险与方法
DLL劫持涉及诱骗应用加载恶意DLL,使攻击者能够实现持久化和权限提升。 -
0:45 探索模糊测试:发现应用漏洞的方法
模糊测试涉及向应用输入随机数据以发现漏洞,使用如Google的Cluster Fuzz等工具进行网络测试。 -
2:12 简化渗透测试:“随测随报”方法
“随测随报”方法将实时文档整合到渗透测试中,简化报告创建并提高生产力。
完整视频
转录
Craig Vincent
是的。那么我是谁?显然,我猜我测试了很多。我不知道,但我确实做了很多渗透测试。我大学学习计算机科学、计算机安全和数学,这就是我从技术角度学习安全知识的方式。他们也指引我们,比如,嘿,有个叫Defcon的东西,有个Linux发行版上面有所有这些黑客工具,为我们指明了去哪里自学资源的方向。毕业后,我几乎立刻开始做软件开发。不太喜欢写软件,所以我想,好吧,我懂计算机安全,让我学好这个,试着找份相关工作。最初我想成为恶意软件分析师,因为像Stuxnet这样的事情刚发生。我想我读了《零日倒计时》刚出版的时候,觉得那听起来很酷,想学。通过实践学习,所以我在家庭实验室做逆向工程。Open Security Training Info或DOT Info是个网站,有很多逆向工程、二进制分析的网络研讨会和培训,都是免费的,在YouTube上。我学完了所有内容,然后开始做逆向谜题和破解谜题,看一些旧的恶意软件样本。觉得自己还行,但后来发现真的不喜欢,不想再做了,就像不想做软件开发一样。所以我没考虑过渗透测试,以前觉得那些人很无聊,只是运行扫描器然后写报告。后来看到Security Weekly,上面有个家伙有家渗透测试公司,谈论渗透测试血汗工厂,说没必要那样。所以我想,好吧,试试吧。于是从头开始,家庭实验室,故意易受攻击的虚拟机,像Damn Vulnerable Web App,学习黑客技能。这让我找到了一份做红队的安全工作,之后来到Black Hills,一直待到现在。其他能让我滔滔不绝的话题还有高尔夫、足球、游泳。所以如果你想在会议上聊天,让我闭嘴,这些都是好话题。如Jason所说,这不是漏洞研究、零日漏洞开发或逆向工程的演讲,因为那是我最初的想法。他们像,嘿,Craig,我们有个测试,是桌面应用。我想,好吧,期望是什么?最初我有点慌,因为我在想,嗯,我是开发者,做过一些逆向工程,做过网络渗透测试,做过Web应用,做过所有这些不同的事情,所以我觉得有技能,但从哪里开始?不想坐在调试器前一周,他们期望我找到零日,却一无所获。所以停止恐慌后,我开始寻找,觉得应该有方法论,有统一、深思熟虑的方式。发现没有太多内容,找到像Reddit帖子提到的一些尝试,OWASP有点清单,所以以此为起点,构建了自己的方法论。不知道这是不是最近的事,但从没做过这些测试到过去一年半做了三四个。很久没做漏洞赏金了,但为了幻灯片找样本黑客,因为不能展示客户东西,搜索了公开漏洞赏金程序,有桌面应用在范围内的,有一堆。所以看起来越来越常见。这只是我高层次的方法,从安全角度查看应用,不深入反汇编、逆向工程等复杂内容。在达到那点之前,有很多其他事情可以做,应该做。这主要是我们要讨论的。想强调这是渗透测试方法论,喜欢比作Web应用渗透测试与漏洞赏金,漏洞赏金更像是概念证明或get out情况,而渗透测试更关于覆盖和彻底,你会报告漏洞赏金中他们可能不关心的事情。桌面应用也一样,这不是Pwn2Own,找零日概念证明POC或GTFO。这是方法论,检查所有事情,彻底。想澄清这一点。所以第一件事是范围界定,通常在规则约定(ROE)之前或期间,与客户会面,问他们,测试什么?总是喜欢要求更包容的范围,喜欢包含更多东西。有些人可能推回,说只测试应用。但应用与这些服务器通信,使用API,做所有其他事情,能包含在范围内吗?这不是我像贪婪黑客想要更多东西黑客。可能这些东西在常规网络渗透测试或Web应用渗透测试中测试过,但桌面应用以不同方式使用,可能有更多覆盖,不同上下文。所以喜欢尽可能包含更多东西,如API、其他相关基础设施,尝试获取源代码如果可能。不一定立即深入源代码,但作为参考可用有帮助。做ROE和问范围时,也问他们感兴趣的领域,应用中担心的事情,新东西, skeletons在哪里。很多时候他们知道,很多时候想让你去找,可以指引正确方向。几乎每次测试,我都做某种侦察,给自己更多信息。对于桌面应用,首先从文档开始。ROE期间也要求,嘿,给我所有文档,需要那个。如果他们不给或忘记,我可以去找公开可用的,下载阅读。阅读文档很有帮助,因为它会告诉你应用中有趣的功能,你可能想攻击。像,哦,它在这个端口运行服务做这个,或可以导入文件处理做那个。它会告诉你应用中感兴趣的东西。根据经验,这些大多是商业应用,人们使用的知名应用,所以为什么让他们测试。很多时候以前披露过漏洞,可能他们自己发布,像Microsoft、Cisco,发布影响这个那个的漏洞,有CVE发布,有概念证明漏洞在Exploit DB和GitHub等地方。所以可以去看看,这个东西以前有漏洞,想检查是否是常见主题,能在应用其他部分找相同类型漏洞吗?因为他们可能在这里修复了,可能其他地方存在。偶尔发生的是,漏洞披露后他们修补,但修补不完全有效,可能有办法绕过修补。很多时候研究人员会回去检查是否有其他方式绕过修复。但你可以总是看,这个漏洞,尤其是开源,可以看他们做了什么改变,能想到办法绕过吗?基本上重新打开现有漏洞。想查看,很多时候大项目有GitHub仓库,像GitHub账户,可能不是全部源代码,但可能有开发工具使用,可能有其他东西或应用组件是开源的,放在那里。可以去那里找秘密,找关于应用如何工作的信息。另一个有趣的事情,我还没在实际测试的应用中找到漏洞这样做,但最近 incorporated的是,很多时候他们会从现有项目fork仓库,像更大、更流行的项目,fork做自己的扩展。当他们这样做时,不总是将主仓库的其他东西合并到fork的仓库。所以是分开的完全不同的东西。所以如果你去看他们fork的东西,看它的更新和提交,找最近的安全问题,如果那里有较新的提交修复了安全bug,可以去检查客户的fork中是否存在,可能在他们的应用中。所以这很懒,真的,只是让别人为你找东西,可以用 against你的目标。在那里找秘密,像很多时候旧提交,如果提交了API密钥或凭据,即使覆盖了,也会留在git仓库中。所以想找那些东西。除了GitHub,还有其他地方,像BitBucket、SourceForge,客户可能托管这些东西的其他地方。所以Google dorp那些东西,尽可能找到。
好了,做了一点研究,有了文档,阅读了文档,做了所有事情。现在有了应用,第一件事想做什么?第一件喜欢做的是弄清楚应用在我的主机上做什么。所以每次新测试都以新鲜虚拟机开始。启动Windows机器,下载应用。要做的是在安装和运行应用之前,对这东西进行注册表和文件系统快照。用System Explorer更好。RegShot是旧工具我用过。最近都用过,工作,但基本上它们对机器的文件系统和注册表拍快照。拍一个快照,然后安装程序运行它,开始用它做事情。一旦觉得充分探索了应用的所有功能和可能做的事情,拍另一个快照,然后可以比较那些,显示测试机器上所有更改的东西,像文件、注册表键等。然后可以去看那些关于应用的有趣事情。所以找任何放在那里的有趣文件,如果有日志或配置文件,想去看。很多时候这会打开和暴露额外的攻击面。如果有注册表键用于他们通信的服务器,可能,我见过注册表键中的密钥和凭据。所以只是有趣的东西,可能以后利用。看那个,当然所有应用文件,现在在哪里。所以可以,喜欢把所有那些拿掉,放在Linux机器上运行strings,从这些文件中获取有用的ASCII字符串,看是否有有趣的东西。这让你对应用在机器上的足迹有很好了解,作为起点。然后可以看实际二进制文件,说,好吧,他们怎么做的?什么语言?可以用CFF Explorer Detectives。有很多其他工具可以指向二进制文件,它们会告诉你各种有趣东西。我想Gator自动做。但看这些东西,说,好吧,获取更多信息,像什么写的?如果C Sharp或Java写,反编译这些到不一定是原始源代码,但像可读源代码等价物,很直接,使用像ILSpy、JD工具。这里列出的工具,最近没用任何Java的。我想上次用Java应用做这个是好久以前,我想用旧Jad工具。但显然有更新的,研究时遇到。只知道如果C Sharp或Java,可能能得到原始源代码的很好表示,很直接的方式。所以有帮助,因为然后可以实际遍历源代码,然后可以看其他事情。所以有很多这些二进制保护,编译器和系统内置帮助开发者制作更难利用的代码。像地址空间布局随机化(ASLR)、安全SEH、DEP、控制流防护(CFG),这些都是编译器选项,可以扔进去让应用更难黑客。所以可以用Binscope和PE Security检查这些。最后会有所有这些提到的链接,因为不知道怎么在PowerPoint做脚注。所以只有带一堆东西的链接幻灯片。所以最后查看。但Binscope需要调试符号,ROE期间向客户要如果可能,否则不工作。但可以用PE Security检查东西,它会遍历所有二进制文件检查这些不同选项。这是Canva,提到漏洞赏金程序,只是选了一个,没黑客,只是走方法论。这不是他们会关心的,所以不是不负责任披露当我做这个像这样。所以请别生气。Canva,可以用Sysinternal Suite的工具SigCheck检查应用签名。基本上检查这些东西的代码签名。这只是对二进制本身的完整性检查,确保没被恶意行为者修改或搞乱。对吧?是发布者开发者做的东西,进程识别。所以可以用任务管理器或喜欢Procmon。Procmon很甜,谈到DLL劫持时会更多讨论。但是的,只是在Proclamation中看所有进程,看父进程,像从哪里生成,只是了解实际应用运行、生成和做的进程。想提到,这有趣。当看这个东西的文件时,通过系统添加的文件,他们有像Electron的许可东西。所以只是看那些东西,你像说,好吧,Electron是什么?如果Google什么是Electron应用?会发现所有像Web东西塞进浏览器在桌面应用中。像非常简化的解释。但基本上只是知道,像通过这些东西弄清楚用什么技术制作,让你更好了解攻击它的不同方式。我想之前忘了提到,只是想回去碰那个,内存分析。有更复杂的事情可以做,但我最喜欢的快速肮脏的事情是只是拿应用进程在任务管理器中,右键创建转储文件,然后可以运行strings,可以找到很多有趣东西。因为这东西内存中有数据可能敏感。会有像API密钥、凭据、私有加密密钥,可能然后利用 against其他东西,希望包含在范围内,说,好吧,这是暴露 here,因为这是一个系统,不只是这个应用。所以,找运行时内存中存储的敏感东西。那是快速肮脏的方式做那个。这里是另一个,DLL劫持。这是一个像。作为软件开发者,不控制端点。所以有这个DLL劫持事情,基本上恶意行为者让应用加载他们的DLL而不是你的一个DLL。所以基于DLL加载的搜索顺序。从应用加载的目录开始,然后去系统目录,然后想另一个目录,然后看路径变量。不记得头顶,但基本上那是去找这些DLLs的地方。如果能写同名DLL到搜索顺序中更高优先级的地方,可能能让它加载和执行你的DLL。我找最多的,认为开发者实际关心或应该关心的最多,是缺失DLL。所以如果找不存在的DLL,你能写到那里,那是做这种事情的机会。用Process Monitor做这个。如果看这里,过滤器中这两个绿色复选框只是我添加的。找结果名称为未找到且路径以DLL结束。所以基本上像所有找不到的DLLs。应用那个过滤器,可以看所有 proclamation有 everything。所以只是找目标进程找找不到的DLLs。在那里做什么是只是放恶意DLL在那里,它被加载和运行。这对攻击者有应用,但因为可以建立持久性,对吧?假设在端点上得到C2,人重启计算机,好吧,失去了那个,对吧?但如果有这个,如果有DLL劫持在像常见软件上,相当确定他们运行它,在上面找到,然后可以加载这个恶意DLL。所以下次计算机启动和应用运行,你的DLL被加载,砰,又有C2了。偶尔用于权限提升,取决于权限。所以当这样做时,你的DLL被加载,现在在加载它的进程的权限上下文中得到代码执行。所以如果有一些原因高权限进程或软件加载你的DLL,现在以那些权限运行。那可能比作为普通用户拥有的更高权限级别。对吧?其他,有趣副作用。测试一个EDR将保持未命名。所以测试的事情之一是,好吧,什么C2我能出去?所以有像Cobalt Strike信标,有几个工作回来,工作良好。也受DLL劫持影响。所以有远程隔离功能。对吧?所以基本上说,嘿,检测到恶意软件在这个计算机上,让我们隔离它。好吧,我用他们的门户在测试机器上做了那个,失去了所有信标。所有常规的消失了,除了DLL劫持信标,因为它实际运行在他们的EDR进程中,他们没隔离那个,因为他们必须维持对端点的控制继续做他们的EDR事情。那只是另一个奇怪副作用的事情可能发生与这个开发者可能关心。
网络分析。只是用TCPView看它 talking to什么。如果看这里,Canva talking to一堆这些Web服务器,至少它们看起来像Web服务器基于端口。然后看起来像打开和监听这个端口。那只是给你想法像应用通过网络通信。总是喜欢代理Web流量通过Burp Suite,因为为什么不。那给你所有工具,你会做正常Web应用渗透测试方法论 against这些其他端点和基础设施。对吧?对于其他协议和其他流量,可以用Wireshark,只是捕获所有然后通过它。这很像,这很通用。像选择你自己的冒险是每个应用不同。但在这个实例中,像所以这个,这个端口它监听,这是你想模糊的东西。对吧?所以会谈模糊测试。有很多。基本上模糊测试是你拿服务监听或 some other way你可以输入数据到这个应用,你喂它一堆东西,垃圾,缺乏更好术语。有些更,更计算 than that。但你喂它东西直到它打破。那是长短如何开始找应用中的漏洞。有一堆模糊测试器为网络东西。这些只是一些例子,没用所有。真的想看Cluster Fuzz,因为那是Google做的那个他们用找像Chrome自己中数千bug。这些只是一些模糊测试器例子你可以做这些网络应用。所以如果 got桌面应用打开端口监听一,百分之百想模糊它。是的,很快通过那个。那是,25分钟。这里是链接。Deb会有幻灯片PDF格式,所以可以有所有这些我想我们可以做问题。Jason。
Jason Blanchard
嘿,Craig。
Craig Vincent
我 kind of flew through that, but hopefully, yeah, hopefully I got it all.
Jason Blanchard
Well, that just gives us more time for Q and A. Yep. someone said be aware that PE Studio is now Pay to Play.
Craig Vincent
Did not know that.
Tom Smith
Yeah.
Jason Blanchard
All right. so if you have any questions about some of the stuff that Craig just covered, feel free to ask inside the, can someone, ask if you can put the links back up? you can also download the slides here, through Zoom. So if you go to Resources, is it in Zoom? Ryan?
Craig Vincent
Deb?
Jason Blanchard
Ryan?
Deb Wigley
Hmm? We m. Can put it in Zoom.
Jason Blanchard
Okay. It’s also available in Discord and the Slides Resources channel. Okay, Craig, here’s your first question. Are you ready?
Craig Vincent
I think so.
Jason Blanchard
All right. How far will you take a desktop test? When do you consider a test completed?
Craig Vincent
when I run out of time.
Jason Blanchard
Okay.
Craig Vincent
That’s the. I mean, that’s the. That’s like the cheeky answer, but it’s one of those things where it’s like, I. These are usually time box. I get a week, and then I get as much as I. That’s why, that’s why I want to do all this stuff before I start reverse engineering and doing all that, like, gnarly stuff. Because I don’t want to sit in front of a debugger for a week and not find anything and be like, oh, I looked. Here’s my one page report. Like, I’m gonna do all this stuff first to get more familiar with the application before I start going, stepping through the source code, debugging all that stuff. So just. And then I do that until I run out of time.
Jason Blanchard
Someone wanted to know more about the TCP view and what it does exactly.
Craig Vincent
it just looks at network traffic coming in and