免杀Day-1

本文最后更新于 2024年8月20日 下午

杀毒软件检测⽅式

静态查杀

特征码扫描

机制:杀毒软件使用病毒数据库中的特征码(也称为病毒指纹)来检测已知的恶意软件。当杀毒软件扫描系统中的文件时,它会将文件的内容与特征码进行比对。如果匹配成功,文件将被标记为恶意软件。

优点:特征码扫描对已知的恶意软件非常有效,能够快速检测和处理。

缺点:对于未知或变种的恶意软件,特征码扫描可能无法检测到,因为这些恶意软件可能不包含数据库中的特征码。

⽂件校验和

每个文件都可以通过特定的哈希算法(如 MD5、SHA-1、SHA-256)生成一个唯一的校验和(哈希值)。如果文件被恶意软件篡改,即使只是一个字节的变化,其哈希值也会发生显著变化。

机制:杀毒软件在首次扫描系统时,会计算并保存每个文件的校验和值。在后续的扫描中,它会重新计算文件的哈希值并与之前保存的值进行比较。如果发现哈希值发生了变化,可能表明该文件已被篡改或感染恶意软件,从而提示用户注意

云查杀

云查杀利用云计算技术,通过将可疑文件或行为信息上传至云端服务器,借助强大的云端资源进行分析。

云端威胁数据库:相比本地数据库,云端的威胁数据库可以更加庞大且实时更新。杀毒软件客户端会将可疑文件的哈希值或行为日志上传到云端,与最新的威胁数据库进行匹配。

云端分析:云端可以执行更复杂的分析任务,如利用大数据技术分析大量的恶意软件样本,或通过机器学习模型识别新的威胁模式。

优点

  • 云查杀能够利用最新的威胁情报和更强大的计算资源,提高检测准确性和效率。

缺点

  • 需要网络连接才能发挥作用,且涉及隐私和数据安全问题。

启发式分析

但是面对未知的病毒,换个模样杀软就认不出了吗?所以安全厂商研究出了启发式算法

启发式则是将一类病毒总结后,归纳其特征,其后的演变都为一类病毒,这就是启发式算法。具体启发式算法可以由杀软来定,比如可以使用机器学习把家族病毒聚类,或简单的通过使用通用型yara规则,例如文件大小小于100kb,且没有图标则可以识别为病毒,以此达到查杀病毒。

优点

  • 能够发现未知的恶意软件,尤其是那些通过修改或变种试图规避特征码扫描的威胁。

缺点

  • 启发式分析可能会产生误报,即将合法软件误判为恶意软件。
  • 需要消耗更多的计算资源和时间。

动态查杀

行为分析

行为监控:杀毒软件会在后台实时监控所有正在运行的程序和进程,观察其行为。如果某个程序执行了与恶意软件相关的操作(如试图未经授权访问系统关键文件、篡改注册表、劫持浏览器设置等),它将被标记为可疑。

行为评分系统:某些杀毒软件会为每个程序的行为打分,基于其行为的潜在威胁程度。如果一个程序的行为评分超过了预设阈值,杀毒软件会触发警报或自动阻止该程序的运行。

优点:能够及时检测和阻止恶意软件在系统中的运行,即使是那些尚未被列入病毒数据库的恶意软件。

缺点:对计算资源的需求较高,可能影响系统性能。也可能出现误报,将正常程序的某些行为误判为恶意行为。

沙盒技术

沙箱技术通过将可疑文件在一个隔离的虚拟环境中运行,以便观察其行为而不影响实际系统。

  • 隔离执行:沙箱提供一个与操作系统隔离的虚拟环境,文件可以在其中自由运行,而不对系统造成任何实际的修改或破坏。
  • 行为分析:在沙箱中运行的程序如果表现出恶意行为(如试图修改系统文件、窃取用户信息、尝试自我复制等),杀毒软件可以在不危及系统安全的前提下,对这些行为进行记录和分析。

优点

  • 能够检测到潜伏的恶意软件,不会对系统安全构成威胁。
  • 提高了对复杂和高级持续性威胁(APT)的检测能力。

缺点

  • 运行沙箱需要大量的计算资源,可能导致系统性能下降。

常见免杀方式

免杀的最基本思想就是破坏特征,这个特征有可能是特征码,有可能是⾏为特征, 只要破坏了病毒与⽊⻢所固有的特征,并保证其原有功能没有改变,⼀次免杀就能 完成了

修改特征码

找到杀软查杀的特征码,修改,替换,编码等等在不影响程序运行的情况下,把特征码改的面目全非,删掉也可以。

但是这种定位特征码的办法只能针对本地病毒库,面对云查杀会束手无策,云查杀会产生越来越多的特征码,这种情况可以改为内存加载,在内存里面做免杀,或者利用白加黑…….

花指令免杀

花指令其实就是⼀段毫⽆意义的指令,也可以称之为垃圾指令。

花指令是否存在对 程序的执⾏结果没有影响,所以它存在的唯⼀⽬的就是阻⽌反汇编程序,或对反汇编设置障碍。 ⼤多数反病毒软件是靠特征码来判断⽂件是否有毒的,⽽为了提⾼精度,现在的特 征码都是在⼀定偏移量限制之内的,否则会对反病毒软件的效率产⽣严重的影响!

⽽在⿊客们为⼀个程序添加⼀段花指令之后,程序的部分偏移会受到影响,如果反病毒软件不能识别这段花指令,那么它检测特征码的偏移量会整体位移⼀段位置, ⾃然也就⽆法正常检测⽊⻢了。

动态分析的有效性:花指令免杀对静态分析效果较好,但如果杀毒软件或分析工具使用动态分析技术(在运行时分析程序的行为),则花指令的作用可能有限,因为在运行时这些指令通常不会影响恶意行为的检测。

增加代码大小:大量的花指令会使恶意软件的代码变得更大,这可能会引起某些杀毒软件的注意,特别是那些检查异常代码大小或结构的工具。

难以应对复杂检测方法:随着安全技术的发展,现代杀毒软件可能会结合多种检测技术,如启发式分析、行为分析、机器学习等,这些方法能够识别出花指令的使用并将其归类为试图绕过检测的特征。

加壳免杀

加壳免杀(Packers/Crypters)的原理是通过将恶意代码进行加密或压缩,并在运行时解密或解压缩,以躲避杀毒软件的静态分析和签名检测。这种技术通过改变恶意软件的外在特征,使得杀毒软件难以直接识别出其中的恶意内容。

加壳免杀的原理

  1. 代码加密或压缩
    • 加壳工具会先对恶意代码进行加密或压缩,将其变成难以辨认的二进制数据。这些数据在未解密或解压缩之前,无法被简单的二进制分析工具或杀毒软件识别为恶意代码。
  2. 注入解壳程序
    • 加壳工具在对恶意代码加密或压缩后,会在程序的入口点注入一个解壳程序。这个解壳程序负责在程序执行时,首先解密或解压缩恶意代码,然后将其加载到内存中执行。由于解壳程序通常较小且不包含明显的恶意行为,静态分析工具可能不会将其标记为威胁。
  3. 改变文件特征
    • 通过加壳,恶意软件的外观和文件结构发生了变化,生成的新文件具有与原始文件不同的特征。这使得基于签名检测的杀毒软件无法直接匹配到已知的恶意软件签名。
  4. 反调试与反分析
    • 一些高级的加壳工具还会加入反调试、反虚拟化或反沙盒技术,以防止恶意软件在被分析环境中暴露。这些技术可以让恶意软件识别出是否在被调试或运行于虚拟化环境中,并采取相应的措施(如自我销毁或暂停执行)。
  5. 多层加壳
    • 为了提高免杀效果,恶意软件作者有时会对同一个文件进行多次加壳,即在一个解壳程序之上再套一层壳。这样,分析人员或杀毒软件需要多次解壳才能还原出原始代码,增加了检测的难度。

加壳免杀的优势

  • 绕过静态分析:由于加壳后的文件不再具有原始恶意代码的特征,杀毒软件的静态分析工具很难直接识别出其恶意性。
  • 隐蔽恶意行为:加壳可以隐藏恶意代码的具体实现细节,使得逆向工程变得更加困难,增加了安全研究人员分析恶意软件的难度。
  • 多样性:通过使用不同的加壳工具或方法,攻击者可以生成外观完全不同的恶意文件,即使这些文件的核心代码相同,也难以通过传统的签名检测方法识别。

加壳免杀的局限性

  • 动态分析的威胁:虽然加壳能够绕过静态分析,但在执行时,恶意代码最终仍需解壳并在内存中运行,这时动态分析工具可以检测到恶意行为。一些杀毒软件会使用行为监控和沙盒技术来识别加壳后的恶意代码。
  • 被解壳工具破解:安全研究人员和杀毒软件厂商也开发了各种解壳工具,能够自动或手动解开常见的壳,将加密或压缩的恶意代码还原为可分析的形式。
  • 性能开销:加壳增加了恶意软件的复杂性,在某些情况下可能导致性能下降或引发异常行为,这有时会引起用户或系统管理员的注意。

内存免杀

内存免杀的原理

  1. 避免磁盘落地
    • 传统的恶意软件往往通过将自身或其组件写入磁盘来执行,这样的文件可以被杀毒软件通过文件扫描功能识别和拦截。内存免杀则完全绕过磁盘,通过各种技术直接将恶意代码注入内存并在其中运行,避免产生任何可能被静态分析捕获的文件。
  2. 内存注入技术
    • 内存免杀通常使用内存注入技术,将恶意代码注入到一个合法进程的内存空间中。例如,使用 API 函数如 WriteProcessMemoryCreateRemoteThread,恶意软件可以将代码注入到其他进程的内存中,并启动执行。这种方法不仅隐藏了恶意软件的存在,还利用了合法进程的掩护,增加了检测的难度。
  3. 内存加载(Reflective DLL Injection)
    • 反射式 DLL 注入是一种常见的内存免杀技术,它允许恶意 DLL 在目标进程内存中自行加载而不依赖操作系统的标准加载机制。通过这种方式,恶意软件可以将 DLL 加载到内存中,并在不触碰磁盘的情况下执行代码。
  4. 代码自解压/自解密
    • 恶意软件可能使用加密或压缩技术将自身嵌入到一个合法进程中,并在运行时通过解密或解压缩将恶意代码载入内存。这种方法不仅改变了恶意代码的外观,避免静态检测,还确保只有在执行时才会暴露恶意行为。
  5. 反调试与反内存分析
    • 为了防止内存分析和调试,内存免杀技术可能会加入反调试措施。例如,恶意软件可以检测是否处于调试环境中,或者不断地对内存进行随机化处理(如不断移动代码块的位置),以干扰调试和内存分析工具。
  6. 代码签名伪装
    • 有些内存免杀技术会伪装恶意代码的签名或使用合法代码的签名,从而混淆内存扫描工具。这种伪装增加了检测的难度,尤其是在动态分析中。

内存免杀的优势

  • 绕过静态检测:由于内存免杀技术避免了在磁盘上留下恶意代码的痕迹,传统的基于文件签名和哈希的静态分析方法很难检测到这种威胁。
  • 隐蔽性高:恶意代码直接在内存中执行,不留存于磁盘,且通常依附于合法进程,进一步增加了隐蔽性,难以被安全工具和用户发现。
  • 即时性:内存免杀技术通常与远程攻击结合使用,恶意代码可以通过网络传播并直接在目标机器的内存中运行,实现攻击的即时性。

内存免杀的局限性

  • 依赖内存检测工具:尽管内存免杀技术可以绕过静态文件检测,但一些高级的杀毒软件和安全工具能够对内存中的活动进行实时监控和分析,从而识别出异常行为。
  • 持久性问题:由于内存中的数据在系统重启或进程结束后会被清除,内存免杀的恶意代码无法持久驻留在系统中。因此,这种技术通常与其他持久化方法结合使用,以确保恶意软件在系统重启后能够重新感染。
  • 内存分析能力的提升:现代安全产品越来越多地采用内存分析技术,能够动态检测内存中运行的代码,识别注入或加载的恶意模块,这在一定程度上削弱了内存免杀的有效性。

二次编译免杀

二次编译免杀的原理

  1. 代码重编译
    • 将原始恶意代码在不同的编译环境中重新编译。由于编译器的优化策略、目标平台、编译器版本、编译选项等因素的不同,即使源代码完全相同,生成的二进制文件在指令集、代码排列和函数调用顺序等方面也会有所不同。
  2. 改变文件特征
    • 重新编译的二进制文件通常在文件特征上与原始文件有所不同,如字符串位置、函数地址、代码段排列顺序、节的对齐方式等。这种变化使得基于文件特征(如哈希值或二进制签名)的杀毒软件难以将新文件与已知恶意软件匹配。
  3. 混淆与优化
    • 在重编译过程中,可以利用编译器的混淆选项或手动添加混淆代码,增加恶意软件的复杂性,使其更难被逆向工程或静态分析工具分析。例如,重命名变量、函数混淆、插入无意义的代码等。
  4. 控制流图变化
    • 重新编译可能导致程序的控制流图(Control Flow Graph, CFG)发生变化,特别是当编译器优化策略不同的情况下。控制流图的变化使得基于CFG分析的检测技术更难识别出已知的恶意代码。
  5. 定制编译器或工具链
    • 恶意软件开发者可能使用定制编译器或修改后的工具链,以生成具有不同结构或独特特征的二进制文件。这样生成的文件更难被通用的杀毒软件检测。
  6. 去除调试信息
    • 重编译时可以选择去除或修改编译产生的调试信息,这些信息在文件中通常包含函数名、变量名和源代码文件路径等细节。去除这些信息可以进一步隐藏恶意软件的意图。

二次编译免杀的优势

  • 多样性:重新编译后的二进制文件在结构和内容上与原始文件有所不同,形成了新的独特性。这使得基于签名检测的杀毒软件难以识别。
  • 灵活性:通过不同的编译选项和环境,开发者可以生成多个版本的恶意软件,增加其在不同系统上的存活机会。
  • 降低被动检测概率:由于重编译后的代码与原始代码存在差异,传统的静态分析方法和基于签名的检测技术难以有效识别这些变化。

二次编译免杀的局限性

  • 动态分析的挑战:尽管重新编译改变了静态特征,但在执行时,恶意行为依然会被动态分析工具监测到。一些杀毒软件会利用行为分析和沙盒技术,识别程序运行时的恶意活动。
  • 复杂性与成本:需要额外的资源和技术知识来设置不同的编译环境,并调整编译选项来确保免杀效果。此外,重编译的过程可能会增加开发和维护恶意软件的成本。
  • 易受基因检测技术影响:一些现代杀毒软件已经能够通过基因检测(基于代码行为和特征的模式分析)来识别恶意软件,即使经过重新编译,它们仍然可能被检测出来。

分离免杀

分离免杀的原理

  1. 代码分解
    • 恶意软件被分解成多个独立的组件或片段。每个组件在单独存在时不会表现出任何恶意行为,因而难以被杀毒软件识别。这些组件可以是不同的文件、代码段、脚本或资源文件。
  2. 分散加载
    • 这些分解后的组件可以分别通过不同的载体或途径加载到目标系统中。例如,恶意软件的核心功能可能通过一个看似正常的程序部分加载,其他功能或数据则通过远程服务器、文件下载或用户交互逐步获取。
  3. 动态组合
    • 当所有必要的组件被加载到系统中后,它们会通过某种方式(如代码链接、脚本执行、内存注入等)被组合或重新组装,形成完整的恶意软件。这种组合通常在内存中进行,以避免磁盘上的静态分析。
  4. 延迟执行
    • 分离的组件可能在不同时间点被执行,或者在特定的条件下才会触发恶意行为。这种延迟执行进一步增加了检测的难度,因为杀毒软件需要持续监控系统的动态变化。
  5. 模块化设计
    • 恶意软件可能被设计为模块化结构,每个模块负责不同的功能,如信息窃取、持久化、传播等。这些模块可以独立存在或与其他模块在运行时动态协作,从而隐藏恶意意图。
  6. 异构环境部署
    • 分离免杀技术也可以利用异构环境,如将不同组件部署在不同的系统或设备上,只有当所有相关设备或系统同时协作时,恶意行为才会触发。这种方式尤其适用于复杂的攻击场景,如分布式攻击或多阶段攻击。

分离免杀的优势

  • 难以检测:由于每个分离组件在单独存在时无害,杀毒软件难以通过传统的签名检测和静态分析发现整个恶意软件。
  • 动态灵活性:分离免杀技术允许恶意软件在目标系统中逐步组装和执行,增加了分析和检测的复杂性。
  • 规避行为监控:通过将恶意行为分散到不同的时间点或触发条件,分离免杀技术能够绕过许多行为监控机制。

分离免杀的局限性

  • 依赖于组件组合:恶意软件的整体功能依赖于所有组件的成功加载和组合。如果其中一个组件被拦截或识别,整个攻击可能会失败。
  • 执行复杂性:分离免杀技术需要精确的时间控制和组件管理,这增加了恶意软件开发的复杂性和执行中的不确定性。
  • 动态分析的挑战:高级杀毒软件和安全工具可以通过监控系统行为、进程间通信和内存活动来识别分离组件的组合行为。

资源修改

有些杀软会设置有扫描⽩名单,⽐如之前把程序图标替换为360安全卫⼠图标就能 过360的查杀。

加资源

使⽤ResHacker对⽂件进⾏资源操作,找来多个正常软件,将它们的资源加⼊到⾃ ⼰软件,如图⽚,版本信息,对话框等。

替换资源

使⽤ResHacker替换⽆⽤的资源(Version等

加签名

使⽤签名伪造⼯具,将正常软件的签名信息加⼊到⾃⼰软件中。