凭证窃取杂谈(上)

为什么凭证窃取部分叫做杂谈呢。

虽然最近在做的凭证窃取工作有对各类的原理细节复现,改进。

但是本文中并不会非常详细深入,目标是广度与思考。

希望能对凭证窃取部分有一个类似“评分标准”的东西,供给大家。

以上。

接下来,正式开始。

 

当我们拿到一台机器首先应当做的是什么事呢,当然是信息收集。

信息收集贯彻在方方面面。

首先是熟悉环境,区分当前系统,系统的版本,系统装载的应用,应用版本,机器所处环境等等。

接下来我们从主动收集与被动收集的两个角度来进行分类,这里不对操作系统进行区分,windows和linux的操作与实现有所不同,但只是原理不同,思路一致。

主动收集我们要考虑的地方有哪些呢?

1.是否需要环境与文件落地。

环境决定了我们能否通过绕过漏扫文件扫描的方式进行攻击,大多数情况下,漏扫无法主动去运行脚本文件,只能逻辑语法推断,实在不行我们还可以直接在目标系统写入。

文件落地这步如果没有足量的免杀,很容易触发杀软规则产生告警,有较高的准备成本。

2.是否需要对敏感进程,目录,文件进行操作。

通常edr更关注系统本身的进程,对于第三方进程与文件的防护较弱,所以对于系统进程的操作风险更高。

3.获取的凭证可用性如何。

更高风险拿到的凭证的可用性一般是更高的,对于lsass等进程中存储的凭证,经常“拿来就能用”,也非常的好用,有较高的权限,第三方系统的文件等,我们更多会用于爆破与密码喷洒,可用性是相对一般的。

当然,也分应用就是了,例如云环境,拿到敏感配置是可以直接拿到高权限账号等。

我们先从上面这三个角度来对每种方法进行评估。

 

第一点为推荐大家做的事情。

大范围的敏感信息收集。

例如windows中使用findstr /c:“pwd” /si *.txt > password.txt

类似指令在运行其他操作的同时进行同步收集,有时会有意外惊喜。

当然,使用时别忘了做一些语法混淆,password,pwd等简单匹配edr还是会做的,利用管道符多次筛选等,方式很多就不提了。

 

第二点是判断当前环境后,可以对第三方软件进行解密。

目前的xshell,mobaxterm等较为常用的软件由于其密钥存储位置均为本地,获取后就可以使用离线解密的方式得到明文,可以有不错的横向效果,并且正如上面所说的,第三方软件的检测目前还是较为薄弱。

至于什么软件应当被我们重视,存有凭证的都应当,具体指哪些就看各位的经验积累了。

 

第三点既然用户存储的凭证,应用存储的凭证我们都检查过了,那么接下来就是系统凭证。

我们以windows为例。

常见的系统凭证存储位置为lsass进程,sam/lsa这两个注册表中。

在dc中nidt数据库也存储域内用户的凭证。

由于域环境中涉及到多机间的认证问题,目前国内的edr防护基本都不到位,只要不使用需要创建smb连接用于命令回传的dump工具,创建rpc等敏感行为,或者在使用前提前进行过工具魔改也行。

针对落地点进行免杀会有不错的效果。

(这里后期插一句,部分edr会检测hash作为参数,使用时别忘了注意。)

目前国外的edr还没有测试,下篇会在测试后给出大家结论。

而针对lsass进程,目前主流工具例如mimikatz的行为被研究的很透测,使用dll直接注入的方式逐渐行不通,可以考虑cs上修改的反射形注入,或dump内存后离线读取。

同样的,对于dump方法,目前主要还是对于mimidump接口的调用,如果不能到内核层,其实被检测的可能还是很高的。

工具提前做好足量免杀,起码先过静态检测与指令检测,调用行为的话,一般没能力去修改,之后会专门研究一下dll中方法的计算性提取,用于绕过edr,应当是下周会进行的课题了。

这里提一嘴,有趣的是对国外某edr进行测试时发现,其对于dll调用的方式有报警但是无阻断,绕过报警即可,所以尽量利用原生dll会有不错的降低检测率的效果。

针对系统层,是edr的重视层,规则层,没有edr的凭证窃取是较为容易的,在这层如果不能进入ring0或者直接在ring3与edr进行对抗,我个人认为还是做好行踪隐匿工作是最重要的。

当然,也可以选择暴力的方式进行攻击,那么就要求极高的攻击速度了,hw中也许可用,但是作为apt来说,可能还是希望有更长的控制时间吧。

 

第四点再深入。

再深入即拿到操作系统的全部信息。

这部分只有一个要求,干掉edr。

能够干掉edr且不被发现,这台机器就算是完全拿下了,我将其归入主动部分也是由于对抗的主动性与侵略性,但是这部分目前还没什么研究,之后也会具体说说edr的原理,监测机制,自保护等等方面。(事实上目前只知道个皮毛,不好意思写嘿嘿。)

 

好的,主动收集就分为以上四点,每一种中还会包括多种实现方式,免杀,命令混淆等等,这里不展开讲了,先有个概念,在凭证窃取下时候,会整理一份出来(如果记得住的话。)

哦对,其实暴力破解,密码喷洒等也算是凭证窃取的部分,但是大家都懂我就不提了。

 

说完了主动收集,接下来讲讲被动收集。

被动收集就是监控用户的输入数据,然后提取其中的凭证信息。

那么用户的输入信息流通的地方就是我们需要关注的地方。

用户键盘输入-系统接受-系统判断-判断成功

用户键盘输入-应用接受-应用判断-应用结果

服务包接受-系统接受-应用接受-应用判断-判断结果发送

 

其实被动记录也可以套用上面的观察角度。

先看用户输入,这里常用的是keylogger,键盘监听,实际上所有的输入都会进行监听,也不一定是键盘,也可以屏幕截取。

可以在页面用xss的方式插入,在ring3层进行接口监听,ring0层进行堆栈读取,实现的方式很多,重点也就是,免杀。

并且在进行安装时,可以模仿应用软件的申请思路去进行。

如何检测也是个问题点,这些会在下周具体测试后进行细节输出。

 

然后说系统接受,系统接受后存储与内存中,获取内存能够获取密码,系统接受的过程中,提前dll注入可以读取密码,系统调用验证时,可以对调用接口进行hook然后获取账号密码(service限定)。

同样,实现的角度很多,并且获取的密码的可用度也比较高,问题重点在于如何规避检测。

 

应用侧可以考虑对应用的源文件进行修改,补丁,对应用的发包进行检测。

对部分协议投毒来监听流量,对接受包解密,等等。

 

被动收集的重点在于我们的目标,如果目标系统有web业务,那么web的账号价值会偏高,管理员在设置时候一类密码会有一类的逻辑。

我们的目标如何,决定了重点放在哪一部分,被动收集有一定的免杀检测难度也是比较高的,具体实现也会放在下中展示,同时会把部分工具也链接出来,自己的微调版在公司就不拿出来了hhh。

会说说调整思路。

 

以上,在进行收集时候先进性主动收集,再进行被动收集,会相对全面一些,如果我们的目标是下一个操作系统,那么冒着一定风险收集系统侧凭证时候就应当注意edr对抗,至于web对抗就不在内网侧聊了。

在拿下一定资源后,进行足量的信息收集可以使得收益最大化,也更加利于下一步的拓展。

上篇就到这里,算是引出下篇吧,下篇会进行各个技术的详解。

希望大家看完之后能有个凭证窃取的概念,也能知道凭证窃取的着力点。

以上,上篇思路为主,下篇技术为主。

 

posted @ 2021-12-19 15:12  HOloBlogs  阅读(199)  评论(0)    收藏  举报