【保护好你的后门!】通过IPC,凭据和后门对浏览器的攻击研究

前言:

Web浏览器默认就是受用户信任的,浏览器地址栏上会有一个安全挂锁标志,有些还会标注是受信任网站。这种信任使用户放心地将敏感数据输入这些网站,从攻击者的角度来看,这种信任是好事,因为一旦你破坏了用户工作站,就会有一个进程处理大量的敏感数据,同时又会被用户大量使用。使用带有浏览器扩展程序的密码管理器,你就会成为红队攻击的目标。

0x01 总体概述

我决定研究的浏览器是Google Chrome,原因很简单,因为它拥有台式机浏览器近70%的市场份额,所以它是迄今为止最受欢迎的浏览器,因此是明显的选择。

与大多数浏览器一样,Chrome使用多进程架构(如下所示):

get?code=YTEzNjNjNjRlMzE1MDM1MTQ4NDlkMmE4M2E5NjQ3MmYsMTYyMjg5NDY3NjUyOA==

这样做的原因是出于安全性和可用性的考虑,它允许对浏览器的特定部分(例如渲染器)进行沙盒处理,同时仍允许浏览器的其他部分在不受沙盒限制的情况下运行。Chrome分为7个不同的部分,其中最重要的部分是网络服务,存储服务和渲染器。网络服务按其提示运行,它处理与Internet的通信,因此可以获取我们追踪的敏感数据。

get?code=YzYwZjkyZTJlYWI1YmQwMjA0YWNlODA0ZTZmMDhlMTksMTYyMjg5NDY3NjUyOA==

0x02 窃取数据

我将针对Windows上运行的Chrome,而且Windows拥有自己的套接字库,称为Winsock。因此,Chrome很可能会使用Winsock进行网络通信。Chrome的大部分代码都存储在内部,  因此将chrome.dll加载到IDA中并查看WSASend 。

get?code=MDJkNDQxMjljNmZhZGQ5NTJjZjhlMWNiODVmNjIyMmMsMTYyMjg5NDY3NjUyOA==

唯一的问题是,当用户连接到未启用SSL的站点时,WSASend仅将包含纯文本数据,这不太可能是我们要从中窃取数据的站点。那么,我们如何才能获得相同的数据,我们只针对SSL加密函数进行分析。

在Chrome开发过程中的某个地方,Google认为OpenSSL对他们来说还不够安全,因此他们自己制作了一个名为 BoringSSL的分支。它们保留了原始的核心函数名称, 例如 SSL_write,在OpenSSL和BoringSSL中都做相同的事情。它将指向某些纯文本数据的指针作为 buf 参数,并将ssl写入参数所指向的SSL流  。该函数的源代码如下所示:

get?code=NzBiN2FiYjNiNTI1ZDBiZDFiODc1OGIzNTBhNzZmYzMsMTYyMjg5NDY3NjUyOA==

我们可以通过搜索字符串 SSL_write 确认是Chrome在使用 chrome.dll:

get?code=ZGJhNjk0ZTI1MWIyZDhjNzRlODMyY2VkNjQxNTQwN2EsMTYyMjg5NDY3NjUyOA==

经过一番寻找之后,我在offset 0x0000000182ED03E0位置找到了函数 ,我已经重命名了一些变量和函数名称,因此可以很清楚地看到它是 SSL_write 函数:

get?code=MzlkYTJlMDdjMTI4MDZhOGU0OTJmYTYyOWM2YmY4NmIsMTYyMjg5NDY3NjUyOA==

现在我们有了偏移量,可以放置一个钩子来将调用从合法重定向 SSL_write 到我们的 SSL_write 函数,我在之前的博客文章中做了这件事 。

我写了 一段代码 来搜索以下模式字符串:

41 56 56 57 55 53 48 83 EC 40 45 89 C6 48 89 D7 48 89 CB 48 8B 05 EE 3E DC 05 48 31 E0 48 89 44

并将其替换为以下函数,该函数将仅在其中显示一个带有请求数据的文本框。

int SSL_write(void* ssl, void* buf, int num) {
 MessageBoxA(NULL, (char*)buf, "SSL_write", 0);
    
 return Clean_SSLWrite(ssl, buf, num);
}

我将DLL注入到网络服务中,并登录到Outlook帐户。如预期的那样,我有两个弹出框,一个包含请求标头,另一个包含POST正文:

get?code=NGZlOTI0YTg0NmE3MGZiYWJhN2ZkNGM3YjY2NzJlNjUsMTYyMjg5NDY3NjUyOA==

为了确保这一点,我尝试登录了其他两个网站,在我尝试登录google服务并且没有弹框之前,一切似乎都正常运行。我不明白为什么我能够捕获除从任何请求到Google服务之外的所有请求。经过研究后,我发现了 QUIC 协议。事实证明,谷歌已决定TCP不再支持HTTP,而Chrome现在将改为使用UDP。

但是仍有一线希望,至少这迫使我承认Chrome实际上支持多种不同的协议这一事实,并且我必须找到一种更通用的解决方案来实现自己的目标。

在这里我要推荐下我自己建的Web安全运维学习群:581499282,群里都是学Web安全运维的,如果你正在学习网络安全 ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是技术开发党,不定期分享干货,包括我自己整理的一份2021最新的网络安全资料和渗透测试教程,欢迎进阶中和进想深入的小伙伴

0x03 在多协议模式中窃取数据

现在完全可以重复上述过程,找到每个协议的关键函数的偏移量,然后进行Hook。但这似乎是一项艰巨的工作,并不是一种特别优雅的方法。取而代之的是,我决定寻找一种更简洁的方法。

回顾Chrome使用的多进程体系结构,我意识到渲染器进程必须使用一种方法将请求传达给网络服务并接收回响应。我发现了 这个分享 ,他给出了有关浏览器如何使用进程间通信(IPC)的许多细节。通过针对两个进程之间用于IPC的函数,我现在可以窃取正在发送和接收的数据,这与协议无关。

在IP

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值