Yogesh Khatri的取证博客
一切与取证和安全相关的事
页面
- 主页
- 关于
2022年11月4日,星期五
解读OneDrive日志(第二部分)
在上篇关于OneDrive的博文中,我概述了ODL文件格式的结构,并创建了一个可运行的ODL解析器来读取这些文件。其中一个关键细节是,个人文件/文件夹、位置或凭证标识字符串是如何被混淆的,其原始值存储在ObfuscationStringMap.txt文件中。然而,大约在2022年4月,微软决定改变混淆的工作方式,导致解析器(去混淆部分)不再有效。
发生了什么变化?
OneDrive现在似乎对数据进行加密,不再使用ObfuscationStringMap.txt文件。在较旧的安装中该文件可能仍然存在,但较新的安装包含一个不同的文件。
图1 - \AppData\Local\Microsoft\OneDrive\logs\Business1 文件夹内容
如上图1所示,出现了一个名为general.keystore的新文件。此文件是JSON格式,易于读取,显然其中包含一个base64编码的字符串,是解密加密内容的关键。
图2 - general.keystore内容示例
进行一些逆向工程的时候了
通过对OneDrive中的LoggingPlatform.dll文件使用IDA Pro进行一番挖掘,我们可以看到该文件中使用了BCrypt Windows API。请注意,这不是同名的bcrypt哈希算法!
图3 - LoggingPlatform.dll中的BCrypt*导入 跳转到使用这些函数的地方,很快就清楚所使用的加密是CBC模式的AES,密钥大小为128位。
图4 - IDA Pro反汇编
在上述代码片段中,我们可以看到对BCryptAlgorithmProvider的调用,如果成功,随后会调用BCryptSetProperty函数,该函数语法如下:
|
|
不深入太多枯燥的汇编细节,我直接跳到相关部分…
对于每个要加密的字符串,OneDrive使用存储在general.keystore文件中的密钥初始化一个新的加密对象,然后加密该字符串并释放加密对象。加密后的数据块随后进行base64编码,并作为混淆字符串写入日志。过程中还有一些其他特点,例如将字符 / 和 + 分别替换为 _ 和 -,因为前者可能出现在base64文本中,但同时也用于URL,以便后续解析。
为何改变?
在上一版本的ODL(使用ObfuscationStringMap时),存在这样的情况:文件中经常重复使用相同的密钥(3个词的组合),使得难以或无法知道使用哪个值作为替换来获取原始字符串。
采用加密而非查找表似乎是一种更稳健的方案,消除了上述问题。它确实会占用更多的磁盘空间,因为加密后的数据块大小始终是16字节(128位)的倍数,这是基于块(block)的加密。换句话说,对于小文本(小于10字节)来说效率不高。
更新的代码 Python ODL解析器已更新以适应这种新格式,并且适用于新旧版本。可在此处获取。
发布者:Yogesh Khatri 时间:上午10:35
标签: dfir, ODL, OneDrive