文章目录:
- 一.Chrome浏览器密码保存功能解析
- 二.Chrome致Win10蓝屏漏洞复现
- 三.音乐软件漏洞复现
- 四.总结
作者的github资源:
- 逆向分析:https://github.com/eastmountyxz/ SystemSecurity-ReverseAnalysis
- 网络安全:https://github.com/eastmountyxz/ NetworkSecuritySelf-study
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。
一.Chrome浏览器密码保存功能解析
1.Chrome密码保存功能
大家可能都见过浏览器保存密码的功能,那么,Chrome浏览器是如何存储这些用户名和密码的呢?它又是否安全呢?我们以Chrome浏览器为例进行安全渗透测试普及。
首先,打开密码管理器。设置->高级->密码,或者输入:
- chrome://settings/passwords
然后,我们查看某个网站的密码。所幸,Chrome浏览器对显示的密码进行了一道验证,需要输入正确的电脑账户密码才能查看,如下图所示。
- 为了执行加密(在Windows操作系统上),Chrome使用了Windows提供的API,该API只允许用于加密密码的Windows用户账户去解密已加密的数据。所以基本上来说,你的主密码就是你的Windows账户密码。所以,只要你登录了自己的Windows账号,Chrome就可以解密加密数据。
最后,输出Windows账户正确显示对应网站的密码。
浏览器安全普及: 由于Windows账户密码是一个常量,并不是只有Chrome才能读取“主密码”,其他外部工具也能获取加密数据,同样也可以解密加密数据。比如使用NirSoft的免费工具ChromePass(NirSoft官方下载),就可以看得你已保存的密码数据,并且可以轻松导出为文本文件。既然ChromePass可以读取加密的密码数据,那么恶意软件也是能读取的。
- 值得注意的是,当ChromePass.exe被上传至VirusTotal(在线沙箱)时,超过半数的反病毒(AV)引擎会标记这一行为是危险级别。不过微软的Security Essentials并没有把这一行为标记为危险。
假设你的电脑被盗,小偷重设了Windows账号密码。如果他们随后尝试在Chrome中查看你的密码,或用ChromePass来查看,密码数据都是不可用的。原因很简单,因为“主密码”并不匹配,所以解密失败。此外,如果有人把那个SQLite数据库文件复制走了,并尝试在另外一台电脑上打开,ChromePass也将显示空密码,原因同上。
- 综合结论:Chrome浏览器中已保存密码的安全性一定程度上取决于用户本身。
2.密码元素定位
我们在Web渗透或Python网络爬虫中,都知道分析网页DOM树结构可以定位指定元素。那么,作者能不能修改input密码的属性,让它显示密码呢?如下图所示:
比较幸运,Chrome应该已经解决了该漏洞,显示空白。
3.密码提取复现
接下来,作者尝试获取本地Chrome浏览器登录的账户信息。
第一步,找到密码存储的位置,文件或者是注册表。 这个时候需要开启监控工具Process Monitor(后续文章会详细介绍),查看打开注册表和文件操作信息。然后到chrome密码管理界面,随便删除一条记录,然后看看chrome本身对哪些文件或者注册表进行了修改。推荐TK13大神文章:
- https://blog.csdn.net/u013761036/article/details/53822036
同样,可以直接寻找文件,通常用户名文件的存储路径为:
- C:Users用户名AppDataLocalGoogle ChromeUser DataDefault
第二步,找到如下图所示的文件——Login Data。
第三步,打开这个文件,还好这个文件是加密的,而不是明文存储。
虽然该文件加密了,但是可以看到它是 SQLite format 3 的格式。接着通过工具读取该数据。这里使用 Navicat Premium工具。
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。
第四步,打开Navicat premium,新建连接。
第五步,输入连接名如“test0803”,并导入本地的“Login Data”数据。
第六步,打开之后在“main”数据库中包含了三张表,其中logins为登录表。
新版本表增加如下图所示:
第七步,打开如下所示,比如163邮箱的用户名为我的电话,密码是加密的。
第八步,解密。 想要解密一个加密算法是很难的。这学习TK13大神的文章,了解到Chrome开源的加密函数CryptProtectData和CryptUnprotectData。这对加解密函数非常特别,调用的时候会去验证本地登录身份,这也就是为什么别人的那个密码文档不能直接拷贝到我们自己chrome相关文件夹下去看的原因了。
接下来是代码实现,找到开源的Sqllite3库,把数据库解析出来,然后得到密码的加密数据,用CryptUnprotectData解密。注意,如果chrome开启的时候直接对这个数据库文件操作会失败,建议每次操作先把文件拷贝出来再处理。
第九步,使用AnalysisChrome Login.exe工具进行解密。将Login Data放置到同一个文件夹下运行即可。下载地址如下:
- http://download.csdn.net/detail/u013761036/9719029
渗透结论:Chrome保存的密码存在泄漏风险,尤其是操作系统用户名被攻破后。是不是很可怕,所以个人电脑大家一定要保护好开机密码,别轻易让坏人使用。后续尝试破壳看看这个EXE程序源代码是如何解析的。
4.Chrome浏览器密码存储机制
下面分享N1ckw0rm大神讲解的Chrome浏览器密码存储机制。谷歌浏览器加密后的密钥存储于 %APPDATA%…LocalGoogle ChromeUser DataDefaultLogin Data 下的一个SQLite数据库中。那么他是如何加密的呢?通过开源的Chromium,我们来一探究竟:
首先,我们作为用户登录一个网站时,会在表单提交Username以及Password相应的值,Chrome会首先判断此次登录是否是一次成功的登录,部分判断代码如下:
当我们登录成功时,并且使用的是一套新的证书(也就是xx次登录该网站),Chrome就会询问我们是否需要记住密码。
那么登录成功后,密码是如何被Chrome存储的呢?答案在EncryptedString函数,通过调用EncryptString16函数,代码如下:
代码利用了Widows API函数CryptProtectData(前面提到过)来加密。当我们拥有证书时,密码就会被回复给我们使用。在我们得到服务器权限后,证书的问题已经不用考虑了,所以接下来就可以获得这些密码。
下面通过Python代码实现从环境变量中读取Login Data文件的数据,再获取用户名和密码,并将接收的结果通过win32crypt. CryptUnprotectData解密密码。
用CryptUnprotectData函数解密,与之对应的是前面提到的 CryptProtectData,理论上来说CryptProtectData加密的文本内容,都可以通过CryptUnprotectData函数来解密。对其他服务的解密方式,大家可以自行尝试。
完整的脚本代码如下所示:
代码语言:javascript复制#coding:utf8
import os, sys
import sqlite3
import win32crypt
google_path = r'GoogleChromeUser DataDefaultLogin Data'
db_file_path = os.path.join(os.environ['LOCALAPPDATA'],google_path)
conn = sqlite3.connect(db_file_path)
cursor = conn.cursor()
cursor.execute('select username_value, password_value, signon_realm from logins')
#接收全部返回结果
for data in cursor.fetchall():
passwd = win32crypt.CryptUnprotectData(data[1],None,None,None,0)
if passwd:
print '-------------------------'
print u'[ ]用户名: ' data[0]
print u'[ ]密码: ' passwd[1]
print u'[ ]网站URL: ' data[2]
5.安全建议
最后作者给出浏览器安全保护的建议:
- 电脑不用轻易借给他人使用,除非身边非常信任的人。
- 非私人电脑一定不能让浏览器保存密码。
- 非重要网站设定一些易于记住的密码,浏览器里登录时重要账户选择不要保存密码,每次登录手动输入。
- 离开电脑务必记得随时锁屏或者关机,登录系统一定要设定密码。
- 使用一个极高强度的Windows账号密码。必须记住,有不少工具可以解密Windows账号密码。如果有人获取了你的Windows账号密码,那他也就可以知道你在Chrome已保存的密码。
- 远离各种各样的恶意软件及钓鱼攻击。如果工具可以轻易获取你已保存的密码,那恶意软件和那些伪安全软件同样可以做到。如果非得下载软件,请到软件官方网站去下载。
- 把密码保存至密码管理软件中(如KeePass),或使用可以整合到Chrome中的第三方工具(如LastPass),使用主密码来管理你的那些密码。
- 用工具(如TrueCrypt)完全加密整个硬盘,并且非私人电脑一定不能让浏览器保存密码。
二.Chrome致Win10蓝屏漏洞复现
接下来补充一个2021年初大家会遇到的Chrome浏览器导致Win10蓝屏的漏洞。
注意:该漏洞请勿轻易测试,需要在个人虚拟机上测试,测试前先保存好资料。本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
第一步,在Win10谷歌浏览器(建议使用虚拟机测试)中输入命令。
代码语言:javascript复制\.globalrootdevicecondrvkernelconnect
第二步,我们的计算机就会自动蓝屏死机重启。 该漏洞请勿轻易测试,个人虚拟机测试前先保存好资料。漏洞可用于拒绝服务攻击,并且微软还未修复该漏洞,微软edge浏览器也具有相同的效果。
第三步,分析漏洞原因,参考网站bleeping computer。
- https://www.bleepingcomputer.com/news/security/windows-10-bug-crashes-your-pc-when-you-access-this-location/
该Windows 10中的错误是通过在浏览器的地址栏中打开特定路径或使用其他Windows命令,即可使操作系统崩溃并显示蓝屏死机。据BleepingComputer了解,这是Windows安全研究人员在Twitter上披露的两个错误,攻击者可以在各种攻击中滥用这些错误。
- 第一个错误允许无特权的用户或程序输入单个命令,该命令会导致NTFS卷被标记为已损坏。该测试表明该命令导致硬盘驱动器损坏,从而导致Windows无法启动,本文不复现该漏洞。
- 第二个漏洞是Windows 10通过尝试打开一条异常路径导致BSOD(Blue Screen of Death,蓝屏死机)崩溃,致使电脑蓝屏重启。
自去年10月以来,Windows安全研究员Jonas Lykkegaard已经多次在推特上发布了一个路径,当输入到 Chrome 浏览器地址栏时,该路径会立即导致Windows 10崩溃并显示BSOD(蓝屏死机)。
当开发人员想要直接与Windows设备进行交互时,他们可以将Win32设备命名空间路径作为参数传递给Windows编程函数。例如,允许应用程序直接与物理磁盘进行交互,而无需通过文件系统。Lykkegaard发现以“控制台多路复用器驱动程序” 的 Win32 设备命名空间路径,他认为该路径用于 “内核/用户模式ipc”。当以各种方式打开该路径时,即使是低权限用户,也会导致 Windows 10 崩溃。
代码语言:javascript复制\.globalrootdevicecondrvkernelconnect
当连接到该设备时,开发人员应传递“attach”扩展属性以与该设备正确通信。如果你试图在没有传递属性的情况下由于错误检查不当而连接到该路径,它将导致一个异常,最终导致Win10出现BSOD崩溃。
更糟糕的是,特权低的Windows用户可以尝试使用此路径连接到设备,从而使计算机上执行的任何程序都很容易让Windows 10崩溃。在测试中,已经确认此错误在Windows 10 1709版及以后的版本中存在。
代码语言:javascript复制winver
查看windows版本信息如下图所示:
BleepingComputer公司上周与Microsoft联系,以了解他们是否已经知道该错误以及是否会修复该错误。微软表示:“调查了已报告的安全问题,并承诺会尽快为受影响的设备提供更新。”
虽然目前尚不确定此漏洞是否可用于远程执行代码或提升特权,但可以将其以当前形式用作对计算机的拒绝服务攻击。BleepingComputer通过共享一个Windows URL文件(.url),其设置指向路径:
- \.globalrootdevicecondrvkernelconnect
当下载文件后,Windows 10会尝试从有问题的路径中呈现URL文件的图标,并自动使Windows 10崩溃。此后,BleepingComputer发现了许多其他利用此bug的方法,包括在Windows登录时自动导致BSOD的方法。
- 浏览器能致使蓝屏死机,最新微信客户端打开文件导致BSOD的变体也出现。确实,如果浏览器能导致计算机直接死机,各种变体是非常容易实现的,提醒大家升级该漏洞!谨防钓鱼及陌生文件。
在现实生活中,该漏洞可能会被攻击者滥用,他们可以访问网络并希望在攻击过程中掩盖自己的踪迹。如果他们具有管理员权限,则可以远程执行访问网络上所有Windows 10设备上的此路径的命令,以使它们崩溃。在网络上造成的破坏可能会延迟调查或阻止管理控件检测到特定计算机上的攻击。比如2017年,远东国际银行(FEIB)银行就遭遇了类似的攻击手法。在该攻击中,攻击者在网络上部署了爱马仕勒索软件(the Hermes ransomware),以延迟对攻击的调查。
最后,作为安全白帽子,我们应该发现漏洞即时通知相关厂商进行漏洞修补。同时,既然操作系统、浏览器存在一些漏洞,那么常用的软件会存在漏洞吗?下面继续补充。
三.音乐软件漏洞复现
该部分内容将复现“鬼手56”大神的文章,他的网络安全、Crackme、病毒分析、软件逆向等系列文章真心推荐大家学习,包括他开源的项目。
第一步,打开PC端某音乐客户端,比如想下载周杰伦的“骑士精神”,通常会被拒绝。
第二步,此时点开设置,选中“下载设置”,找到缓存文件目录。
C:Users用户名AppDataLocalNeteaseCloudMusicCacheCache
第三步,双击播放该歌曲,然后按照寻找最新的文件或只保留一首歌,其中后缀名为“.uc”的最大文件就是加密过后的文件。
第四步,接着再将文件拖动到010 Editor软件,如下图所示:它是一个加密文件,最多的数据是A3,猜测其是加密后的无意义0(逆向熟练后的感觉),通常音频的加密方式不会太复杂,而最简单的异或加密(可逆)。
第五步,接着点开菜单,Tools(工具),将其转换为“十六进制”,进行“二进制异或”操作,修改数据为无符号十六进制,并对A3进行异或即可。
注意选择无符号(Unsigned Byte)和异或A3。
异或加密解密:
A3 ⊕ A3 = 00
代码语言:javascript复制A 01100001 3 00000011
A 01100001 3 00000011
0 00000000 0 00000000
文件解密如下所示,其中A3变换为00,解密完之后的字符变得有意义。前三个字节是ID3,这个是MP3文件格式的头部。
最后,将文件重命名为“.mp3”,此时可以听歌了,“骑士精神”走起。
注意:这是一个简单的加密过程,推荐读者们下载正版歌曲,共同维护版权和绿色网络环境。同时,异或加密音乐已经很多年了,希望这些开发公司优化下加密算法,解决这些常见漏洞。
四.总结
写到这里,这篇文章介绍结束,分别叙述了三个漏洞:
- 浏览器漏洞 CryptProtectData和CryptUnprotectData加解密
- Windows10蓝屏漏洞 正常程序会传递attach扩展属性与该设备正确通信。如果你在没有传递属性的情况下,错误检查不当而连接到该路径,它将导致一个异常,最终造成Win10出现BSOD崩溃。
- 音乐软件漏洞 异或A3解密Cache文件
如果你是一名新人,一定要踏踏实实亲自动手去完成这些基础的逆向和渗透分析,相信会让你逐步提升,过程确实很痛苦,但做什么事又不辛苦呢?加油!希望你能成长为一名厉害的系统安全工程师或病毒分析师,到时候记得回到这篇文章的起点,告诉你的好友。
家人永远是最珍贵的礼物!珍爱前行。
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。