Windows下免杀思路总结

news2024/12/24 2:55:41

1.简介

在安全厂商日趋成熟的背景下,编写免杀马的难度和成本日益增长。好用新兴的开源项目在短时间内就被分析并加入特征库。笔者调研了部分开源项目,其中也有项目做了类似的分析 [1],目前能够免杀的项目初步统计,其特征一是star数不过千,二是发布时间不会很长。尽管以上开源测试项目已经无法免杀,也有两种可以发展的方向,一个是学习其思想,自己实现并去特征免杀;二是改造原有项目,自己查特征、去特征,经过测试也能达到免杀。

免杀方法和思路很多,但据笔者观察,目前免杀分为两大流派。一是二进制流,利用汇编配合上C++,调用系统底层函数进内核的方式免杀。杀软如果直接在用户态检测其行为特征会比较困难。二是新工具新项目、小众工具流,其主要思想是寻找反病毒厂商未覆盖的方法和工具,一个是寻找新的语言工具和项目,跟厂商比速度。另一个是偏僻语言,用户量小,厂商一直并未发现或者工作重心不在上面。举个例子,可以用各种语言二次编译,配合上一些语言特性如python反序列化达成免杀。通过现有工具的组合有效提高复杂度,在反病毒人员的盲区里进行。两种各有优劣,后续若有文章会测试更多的免杀用例。这里推荐一个静态免杀学习项目[2]和52pojie上的免杀项目,利用了大部分后文中提到的免杀技术[3]。

2.杀毒软件检测方法

以下的内容多为前人总结。因为云查杀本质上也是基于特征查杀,顾不单独列出。

2.1特征码检测

对文件或内存中存在的特征做检测,一般的方法是做模糊哈希或者机器学习跑模型,优点是准确度高,缺点是对未知木马缺乏检测能力。所以目前依赖厂商的更新,厂商做的更新及时能有效提高杀软的防护水平。目前一些杀软对相似的病毒有一定的检测能力,猜测是基于模糊哈希做的。部分杀软同样对于加壳也有检测能力,对于不同的厂家有不同的策略,有些会对文件进行标记,而某数字会直接告警。

2.1.1关联检测

检测的特征不仅仅是恶意payload的特征,也可能是一组关联的代码,把一组关联信息作为特征。比如在使用加载器加载shellcode时,需要开辟内存,将shellcode加载进内存,最后执行内存区域shellcode。这些步骤就被反病毒人员提取出来作为特征,在调用了一组开辟内存的函数比如virtualAlloc之后对该内存使用virtualProtect来更改标示位为可执行并且对该内存进行调用就会触发报毒。以上只是一个简单的例子,具体情况具体分析,部分厂商对其进行了扩展,所以现在使用另外几个函数进行调用也无法免杀。不过其本质还是黑名单,还存在没有被覆盖到的漏网之鱼。

2.2行为检测

行为检测通过hook关键api,以及对各个高危的文件、组件做监控防止恶意程序对系统修改。只要恶意程序对注册表、启动项、系统文件等做操作就会触发告警。最后,行为检测也被应用到了沙箱做为动态检测,对于避免沙箱检测的办法有如下几个:

  • 延时,部分沙箱存在运行时间限制

  • 沙箱检测,对诸如硬盘容量、内存、虚拟机特征做检测

  • 部分沙箱会对文件重命名,可以检测自身文件名是否被更改

2.3小结

以上是对杀软检测做的一个小结,目前学术界对恶意代码的检测集中在机器学习上,已经有部分杀软已经应用落地了,如微软。对杀软检测手法更多的了解有助于我们写免杀马。

3.绕过技术

目前,随着cs的流行,越来越多的人使用cs的shellcode,而放弃了自己开发编写的木马,或者使用改造的msf马。本篇文章也会以shellcode加载器作为例子。后续文章将会涉及更深入的内容。

3.1经典技术

经典免杀技术如下,由于篇幅所限,本篇只含部分免杀技术。

  • 特征码修改

  • 花指令免杀

  • 加壳免杀

  • 内存免杀

  • 二次编译

  • 分离免杀

  • 资源修改

  • 白名单免杀

3.2修改特征

一个加载器存在两个明显的特征,一个是shellcode和硬编码字符串。我们需要消除这些特征,比较方便的方案,使用base64等对上述特征进行编码,最好使用多种编码手段。对于shellcode,使用base64并不安全,所以更安全的方案是加密,一个简单的异或加密就能消除shellcode的特征。第二个是加载器的关联特征也需要消除,对于代码中出现连续调用的virtualAlloc,virtualProtect进行插入花指令,通过加入无意义的代码干扰反病毒引擎。

笔者的一点想法,进一步混淆源代码,在不加壳的情况下稍微增加静态分析难度。也有论文提出可以使用ROP来提高代码的分析难度,因为现存的代码分析引擎对间接跳转和调用的支持存在瑕疵,复杂逻辑的代码更需要人工分析[12]。

3.3内存免杀

shellcode直接加载进内存,避免文件落地,可以绕过文件扫描。但是针对内存的扫描还需对shellcode特征做隐藏处理。对windows来说,新下载的文件和从外部来的文件,都会被windows打上标记,会被优先重点扫描。而无文件落地可以规避这一策略。同时申请内存的时候采用渐进式申请,申请一块可读写内存,再在运行改为可执行。最后,在执行时也要执行分离免杀的策略。

3.4修改资源

杀软在检测程序的时候会对诸如文件的描述、版本号、创建日期作为特征检测[7]。可用restorator对目标修改资源文件。

3.5隐藏IAT

每调用一个系统函数就会在导入表中存在,这对于反病毒人员是个很好的特征,直接通过检测导入表中有没有调用可疑函数。这里就需要隐藏我们的导入函数。一个比较通用的办法是直接通过getProcessAddress函数获取所需要函数的地址。知道地址也就能直接调用,这样整个程序内除了getProcessAddress其他函数都不会出现在IAT表中。尽管这样已经能绕过上面的检测,但还有种更保险的做法,用汇编从Teb里找到kernel32.dll的地址,再从其导出表中获取所需系统函数。

出自(https://www.52pojie.cn/thread-1360548-1-1.html)

3.6分离免杀

整个shellcode加载器分为两个部分,分离下载shellcode和执行。加载器处在stage0阶段,其作用除了加载大马外并无其他作用。但是直接执行大马会被检测到,所以需要用到分离免杀。

出自(https://www.anquanke.com/post/id/190354)

通常杀软只检测一个进程的行为,所以如果存在两个恶意进程通过进程间通信就能逃过检测、达到免杀。

分离免杀的方法多种多样,既可以用windows的管道[4][6],也可以用socket通信[5]。

3.7二次编译免杀

像msf或者cs的shellcode在各个厂商里都盯的比较严,对于这些shellcode已经提取好特征只要使用就会被检测出。所以会使用各种编码器进行免杀。编码器有很多种,这里仅推荐msf的shikata_ga_nai,是一种多态编码器,每次生成的payload都不一样。

3.7.1其他语言编译免杀

因为各种语言特性不同,对于不同语言编写的加载器厂商不一定第一时间跟进,导致了一段时间内可以绕过。在2020年初的时候,使用python作为加载器[11]免杀一阵,现在针对这类加载器逐渐严格,导致直接加载报毒,需要更多的混淆还改进。在2020年5月,奇安信红队出过一篇文章,利用python反序列化来加载python加载器[8],目前截止本文测试2021年1月已经无法使用了,是个比较好的思路。

3.8系统函数白名单免杀-uuid方式

Gamma实验室在2021年2月3号发布了一篇微信公众号的文章[9],分析了Check Point Research研究的apt攻击的文章。其中的亮点在内存中shellcode的编码方式和调用都没有使用传统编码和调用的方式,利用了系统函数的特性,这次的例子是uuid。使用的是系统给UuidFromStringA函数将payload的uuid数组转化为shellcode加载进内存,其特点就是程序中存在大量硬编码的uuid。另一个,调用使用的是EnumSystemLocalesA函数,它的第一个参数是回调函数指针,也就意味着参数一只要传入shellcode首地址就会执行恶意命令。现已被杀,但是这里给出一个比较重要的思路,还有其他可以利用的Windows系统函数可以利用。另外现已经有项目实现了使用调用guid来进行免杀。

3.9某数字公布的stage uri检测

因为cs密钥都是硬编码的,被逆向出来后,只要使用stage分阶段的方式加载cs,其流量都会被解密并能检测其特征[10]。对抗的方式,二次打包改密钥,或更改cs的配置文件使得关闭stage。同时使用stageless,也得更换自己的dll,cs的beacon.dll同样在检测列表中。其实用改造过的msf马也不错,这也就是上文提到的过的开源项目,目前这个项目已经被某数字检测了,所以需要对项目进行改造。

4.总结

以上总结了主流的免杀方式,后文的免杀就是以上技术的混合使用。本文还未涉及到诸如加壳,dll以及使用powershell免杀等,这些会在之后的文章中提出。

5.参考文献

[1]     https://github.com/TideSec/BypassAntiVirus

[2]     https://github.com/Rvn0xsy/BadCode

[3]     https://www.52pojie.cn/thread-1360548-1-1.html

[4]     https://payloads.online/archivers/2019-11-10/4

[5]     https://payloads.online/archivers/2019-11-10/5

[6]     https://www.anquanke.com/post/id/190354

[7]     https://cloud.tencent.com/developer/article/1512006

[8]     https://mp.weixin.qq.com/s/gZ28MvCPTQbTAVtQjO7T8w

[9]     https://mp.weixin.qq.com/s/1DvYNDiZc2iV1pXEn7GZEA

[10]   https://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw

[11]   https://www.secpulse.com/archives/151899.html

[12]   https://arxiv.org/pdf/2012.06658.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL8.0 show create view BUG解析

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:崔弘晨作者介绍:诺亚财富数据库DBA 擅长数据库SQL优化,喜欢分享技术文章来源:社区投稿…

【Linux】详解Linux权限管理

文章目录 1.Shell命令以及运行原理 2.Linux权限的概念 2.1用户介绍 2.2用户切换指令 su 当前所处目录不变 当前所处目录改变 3.Linux 权限管理 3.1文件访问者的分类 3.1.1 拥有者 3.1.2 所属组 3.1.3 other 3.1.4 总结 3.2文件类型和访问权限 3.2.1文件类型 3.2…

基于 SE (2)-XYZ 约束的地面车辆视觉-轮速计定位与建图

摘要-本文关注的是地面车辆使用轮速计和单目视觉传感器的SLAM问题,为了改进基于视觉的地面车辆估计精度,研究人员利用了近似平面运动的约束,通常将其作为 SE (3)位姿的随机约束来实现,在本文中提出了一个更简单的算法,…

如何利用数字创新使您的企业脱颖而出

如何利用数字创新使您的企业脱颖而出 数字创新并非易事,但它会对您的企业内部和外部产生积极影响。 然而,数字化的方式如此之多,企业很难决定将注意力集中在哪里。 本文的目的是概述数字创新的战略方法。这种方法让您重新审视现在与未来的…

订单管理是客户关系管理的有效延伸,那么订单管理系统对于企业的作用有哪些呢?

订单管理是客户关系管理的有效延伸,能更好的把个性化,差异化服务有机的融入到客户管理中去,能推动经济效益和客户满意度的提升。与此同时,随着电商的发展与经济全球化的影响,不少企业的订单量都是暴增状态。海量订单数…

【读书笔记】高级FPGA设计之高速率结构设计

目录 写在前面 1. 概念介绍 2. 高速度结构设计 2.1 高流量 2.2 低延时 2.3 优时序 2.3.1 组合逻辑插寄存器 2.3.2 并行结构 2.3.3 展平逻辑结构 2.3.4 寄存器平衡 2.3.5 重新安排路径 3. 总结 写在前面 本博客为阅读书籍《高级FPGA设计》的部分读书笔记&#xff0c…

XXL-JOB核心源码解读及时间轮原理剖析

你好,今天我想和你分享一下XXL-JOB的核心实现。如果你是XXL-JOB的用户,那么你肯定思考过它的实现原理;如果你还未接触过这个产品,那么可以通过本文了解一下。 XXL-JOB的架构图(2.0版本)如下: 它…

易基因|ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究

易基因|ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2022年11月21日,北京大学基础医学院赵东宇研究员、美国休斯敦卫理公会研究所Min…

详解 Redis 中 big keys 发现和解决

在使用 Redis 时,可能会出现请求响应慢、网络卡顿、数据丢失的情况。排查问题的时候,发现是 big keys 的问题。 什么是 big keys 在 Redis 中,一个字符串类型最大可以达到 512MB,其他非字符串类型的集合类型(list、set、hash、z…

网络常见面试题

1.简述OSI七层模型主要功能 OSI---开放(协议公有)系统互联参考模型 解决数据传输不兼容性 IS0---国际标准化组织---定义->OSI 7层(基本功): 应用层:人机交互的接口,接收应用程序的数据…

【AI】Python 实现粒子群算法

粒子群算法 1. 题目介绍 粒子群算法,其全称为粒子群优化算法 (Particle Swarm Optimization, PSO) 。它是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的搜索算法。粒子群算法属于启发式算法也叫智能优化算法,其基本思想在于通过群体中个体之间的…

零入门容器云网络-6:基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信测试案例

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

ROS系列:第六章 机器人建模

文章目录六、机器人系统仿真1.概述仿真优势:仿真缺陷:2. URDF集成Rviz基本流程1.创建功能包,导入依赖2.编写 URDF 文件3.在 launch 文件中集成 URDF 与 Rviz4.在 Rviz 中显示机器人模型5.优化 rviz 启动3. URDF语法详解3.1 URDF语法详解01_robotrobot1.属性2.子标签…

Promethus实操部署ARM架构 麒麟系统

由于有个地市局的等保测评要求安装监控软件,实操安装普罗米修斯和Zabbix,原本想安装Zabbix在本地安装非常顺利,但是服务器是华为鹏鲲的、ARM架构,Zabbix的有些东西找不到ARM的,所以两个都尝试了下。本篇讲解下Promethu…

协同过滤推荐算法

协同过滤:利用集体智慧,借鉴相关人群的观点进行推荐。 过去兴趣相似的用户在未来的兴趣也会相似;相似的用户会产生相似的历史行为数据。 根据历史行为,产生相似用户,分析出推荐结果。 用一句大白话说,其实也…

Android请求应用权限

文章目录前言参考一、请求应用权限基本原则二、请求权限的流程(官网摘抄)三、请求权限编码1.允许系统管理权限请求代码2.自行管理权限请求代码总结前言 学习Android为什么需要动态申请危险权限 学会Android应用危险权限申请的方式 参考 Android官方文档…

8 种 Python 定时任务的解决方案

在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond 结合命令行实现,另外一种方式是直接使用Python。 最近我整理了一下 Python 定时任务的实现方式,内容较长,建议收藏后学习&a…

uni-app云开发(我直接访问后端)

uniCloud 是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。 熟悉的js的程序员,轻松搞定前后台整体业务。实现了前端完成前后端工作的可能 用法: 第一步新建uniCloud项目 点击文件 ——>新建—…

Hue编译安装使用

简介 由于大数据框架很多,为了解决某个问题,一般来说会用到多个框架,但是每个框架又都有自己的web UI监控界面,对应着不同的端口号。比如HDFS(9870)、YARN(8088)、MapReduce(19888)等。这个时候有一个统一的web UI界面去管理各个大…

高斯混合模型下的变分推断

大概从下面几个部分学习: 1.EM算法 人人都懂EM算法 - 知乎 (zhihu.com) 18分钟理解EM算法 - 知乎 (zhihu.com) 变分贝叶斯深度学习综述 - 知乎 (zhihu.com) 【未看完】 EM算法存在的意义是什么? - 知乎 (zhihu.com)【八种境界】 EM 算法具备收敛性…