系统安全二进制安全C/C++汇编 [2020]微软windows defender研究.pdf 主要说了微软的defender是如何做虚拟执行的 反cpuid反虚拟机 ![](https://key08.com/usr/uploads/2021/10/2461615230.png) 虚拟文件系统(注意这是不可见的,平时也没这些目录,但是在杀毒的时候defender就会生成) ![](https://key08.com/usr/uploads/2021/10/1349146434.png) 虚拟注册表 ![](https://key08.com/usr/uploads/2021/10/1427939148.png) JavaScript引擎 ![](https://key08.com/usr/uploads/2021/10/2711418115.png) vmp、net 脱壳/jit解析 ![](https://key08.com/usr/uploads/2021/10/2836626296.png) pdf文件 链接:https://pan.baidu.com/s/15msYM6Ye1Bu5mJdr_vpMow 提取码:7nua 阅读全文 2021-10-23 huoji 0 条评论
系统安全工具软件C/C++一线开发 [2021]不用hook在R3实现全局捕获syscall调用 在R3下ETW实现了一套接口允许你拿到一些syscall调用信息 在cmd下,输入如下代码: ```cpp logman start "NT Kernel Logger" -p "Windows Kernel Trace" (syscall) -o sys.etl -ets ``` 一段时间后停止 ```cpp logman stop "NT Kernel Logger" -ets ``` 接着转换成可读的格式: ```cpp tracerpt sys.etl ``` 你就看到对应的syscall了: ![](https://key08.com/usr/uploads/2021/10/2047136662.png) **但是,看情况我们目前只能拿得到两个信息: ** 1. syscall的index 2. syscall的处理器id 3. syscall的地址 **我们没办法拿到的信息并且是关键信息的有: ** 1. syscall的进程id 2. syscall的具体名字/内容 **我将会在这篇文章介绍一种非常巧妙的移花接木的方法来获取这些必要信息并且实现r3的dll注入检测 ** ### 线程切换 我们需要第一步推导出syscall的调用者是谁,但是etw并没有给我们更多的详细信息,因此我们需要做一个hack去获取它,那就是通过线程切换事件 线程切换事件ETW也会给我们消息,我们能知道: 1.老线程id 2.新线程id 3.老线程的状态 4.当前处理器id 阅读全文 2021-10-19 huoji 0 条评论
系统安全二进制安全 [2021]微软的两处内存泄露 ### Microsoft Kernel Memory Leak ***Please note that this is only a brief code bug. It is not a security problem and will not cause any security problems*** There are memory leaks in two Microsoft APIs: ``` win32kbase!NtDCompositionCommitSynchronizationObject win32kbase!NtGdiGetCertificate ``` 阅读全文 2021-10-14 huoji 0 条评论
系统安全二进制安全 [2021]鸭鸭杀毒 做这玩意做得很久了,头疼,一个人调试贼难受,一个人做要样本没样本,要建议没建议,于是开放给大家大家一起测试一起研究一下这个东西,看看能不能搞好来 这是2021.10.3日的卡饭样本库,没有入库的启发查杀情况: ![](https://key08.com/usr/uploads/2021/10/3192112192.png) 一些问题: 为什么不封装成本地应用而要做成在线形式? 本来想封装成本地应用的,但是这个涉及到python转C的问题,还要做界面,而且目前引擎各种bug,虚拟机动态运行部分也没做完,就先暂时做成云端的,实际上是一个flask+之前的demo 为什么没有批量杀毒? 因为服务器拉胯,1h4G的连模型跑起来都费劲,更别说批量杀毒了,但是你可以用下面的API做一个批量扫描的,仅限于夜深人静的时候测试一下,因为用的人多了真的会炸 鸭鸭杀毒引擎怎么工作的? 当一个病毒送入鸭鸭服务器后,将会进行如下操作 1.做CPU仿真,模拟程序执行,从内存中dump出脱壳后的文件(这部分没做完) 2.获取PE文件各种特征信息,比如导入表、字符串等后送入神经网络进行学习 3.然后看黑箱AI怎么说了 样本保留几天? 已经设置为7天删一次,样本仅用于调试鸭鸭引擎,仅当你发邮件或者在卡饭论坛跟我说误报或者不报的时候我会看看,其他时间一律不碰(我也没啥时间天天分析样本),上传即默认你允许与我共享样本 提供一个杀毒api: 网址: post 域名/api/post_file 参数: file 直接post上传文件即可,只支持exe或者lib并且小于20M的文件 成功会返回一个json,里面有是不是病毒、是病毒的概率 在引擎做完后,我会考虑开源的,不过目前不是开源的时候,因为还有很多要做,总不能开源一个半成品 如果有误报、没报的情况跟我说,带上样本sha256, 我们一起研究一下为什么会这样 地址: https://key08.com/index.php/1357.html 阅读全文 2021-10-05 huoji 2 条评论
系统安全二进制安全 [2021]为什么InstDrv.exe这个驱动加载工具绿色版被各个杀毒软件厂商报毒 写驱动的朋友应该或多或少的使用过"InstDrv.exe",或者叫做驱动加载工具绿色版 ![](https://key08.com/usr/uploads/2021/10/4018118908.png) 图标 ![](https://key08.com/usr/uploads/2021/10/1545487343.png) 不幸的是这玩意在VT上被各种杀毒软件报毒,包括defender,火绒,深信服等... ![](https://key08.com/usr/uploads/2021/10/1943224816.png) 这倒没什么,毕竟这很正常,奇怪的来了, 自己制作的启发引擎到最后也把这个报毒了? 什么原理? ### shap 目前很多的启发引擎都被是"基于神经网络",说白了就是塞一大堆东西,也不知道是啥,反正让机器给出一个0或者1就完事了,但是这样你也懂的,黑盒,完全不可见,包括我自己制作的杀毒引擎也是黑盒.好在存在,shap是一个神经网络查看工具,可以查看神经网络偏向哪个特征,方便调参 [由于保密协议问题,我不能展示我的神经网络的模型,但是可以用一下其他人的] ![](https://key08.com/usr/uploads/2021/10/4003497191.png) 使用shap工具查看神经网络,左边是特征类型,中间是权重 根据我的看法,是因为这个instdrv这个工具,**他的"代码段与总体积"的比率太小,被很多杀毒软件的启发引擎归类为病毒类** 这就是困扰多年的驱动加载工具绿色版报毒的原因 这种是属于"无法分辨"的软件,这也是为什么目前的启发引擎误报如此之大的原因,无法分辨是指绿色软件的特征是病毒的特征,你没有其他的办法分辨,一个东西,看起来像兔子,行为也像兔子,说话也像兔子,但是他就是一只猫,这没啥办法,只能通过人工加白. 阅读全文 2021-10-03 huoji 0 条评论
系统安全二进制安全C/C++ [2021]R0驱动内对Windows数字签名验证的大概流程 因为某些原因我不得不抛弃wintrust机制而自己在内核实现驱动数字签名验证,因此有了这篇文章: 首先PE文件有两种信息,一个是catalog一个是pe自带签名,目前文章只介绍PE自带签名,catalog签名较为简单,不做论述 数字签名验证分为几步: 1. 解析pe拿到security data 2. 通过asn1解析"signed security data"拿到证书信息(最为复杂) 3. 交叉验证证书链上的证书,拿到root证书,这个过程中还需要对证书是否被窜改进行确认,这个过程中确认时间戳 4. 检查root证书是否可信 5. 拿到证书hash算法,并且计算PE的hash,再拿PE的hash跟证书hash进行匹配,这一步确认PE是否有效 由于某些问题,不能直接开源代码,但是能稍微的介绍一下这个过程: 阅读全文 2021-09-23 huoji 0 条评论
APT研究系统安全 [2021]阴谋论: windows XP中可能带有NSA后门? **这篇文章消息不确定是否属实,仅仅是本人的一个小的想法与思考,请勿当真** 在审计windows XP代码的时候,在数字签名校验部分,PkcsPublicEncrypt、RSAPublicEncrypt这两个函数长这样: RSAPublicEncrypt: ![](https://key08.com/usr/uploads/2021/09/2609714416.png) PkcsPublicEncrypt: ![](https://key08.com/usr/uploads/2021/09/393499675.png) 按道理说,他们应该走标准的Pkcs、RSA加密算法,然而并不,在XP源码下,他们走到了一个叫做BSafeEncPublic的算法中: ![](https://key08.com/usr/uploads/2021/09/3065156119.png) ~~这个BSafeEncPublic源码是不公开的,是一个lib文件~~(有误,不是这个lib文件,但是目前也不知道是哪来的) ![](https://key08.com/usr/uploads/2021/09/1530459164.png) 百思不得其解,在查阅wiki后,发现这个算法挺有意思的: ![](https://key08.com/usr/uploads/2021/09/3832960814.png) > 从 2004 年到 2013 年,BSAFE 中默认的加密安全伪随机数生成器(CSPRNG) 是Dual_EC_DRBG,它包含一个据称来自NSA 的后门,以及一个有偏见且缓慢的 CSPRNG。[4]自 2005 年规范发布后不久,密码学社区就意识到 Dual_EC_DRBG 是一个非常糟糕的 CSPRNG,到 2007 年,很明显 CSPRNG 似乎被设计为包含 NSA 的隐藏后门,只能使用美国国家安全局通过密钥。[5] 2007 年,Bruce Schneier将后门描述为“太明显了,无法欺骗任何人使用它”。[5]后门在斯诺登泄密事件中得到证实在 2013 年,有人暗示 NSA 在 2004 年向 RSA Security 支付了 1000 万美元以默认使用 Dual_EC_DRBG,[3]尽管 RSA Security在 2004 年否认他们知道后门 不过时间有点对不上就是了,按照wiki说的bsafe默认设置为Dual_EC_DRBG的时间是2004年开始,但是微软的bsafe lib是2003年的,那么是真是假只能看微软的那个lib里面用的是啥随机生成算法了 更新: win7 ci.dll里面也有 ![](https://key08.com/usr/uploads/2021/09/1380179034.png) 不知道是故意隐藏代码不给看还是怎么滴,他的数字签名算法都是这玩意 哪怕是win7那时候已经说淘汰bsafe这个算法了还在用,**要么是名字正好重复了**,要么是故意使坏 阅读全文 2021-09-20 huoji 1 条评论