热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【技术分享】重磅!一种恶意软件绕过杀软的新方法

译者:blueSky预估稿费:200RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言随着越来越多的网络攻击、数据库漏洞、间谍软件以及敲诈软件频繁的出现在新闻头条上,每家商

https://img.php1.cn/3cd4a/1e618/bdf/129913486c37ddf6.jpeg

译者:blueSky

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

随着越来越多的网络攻击、数据库漏洞、间谍软件以及敲诈软件频繁的出现在新闻头条上,每家商业公司也开始在其企业网中部署安全产品。一般地,他们往往会投入人力物力来制定适合自己公司的信息安全策略以及寻找最佳的解决方案来对付这些网络攻击行为。

最近,我们发现一种新的令人震惊的绕过杀软的方法,该方法允许任何已知的恶意软件绕过最常见的安全解决方案,例如下一代防病毒软件,安全检测工具以及反勒索改软件等。这种技术被称为Bashware,该技术在实现上利用了Windows 10系统上一个新的、称为Subsystem for Linux(WSL)的功能,此新功能可以使Windows操作系统用户使用流行的bash终端,而且该功能还可以使Windows用户在本机操作系统上运行Linux操作系统的可执行文件。该功能能够允许Linux和Windows系统中的进程在同一时间运行,由于现有的安全解决方案还不能够监视在Windows操作系统上运行的Linux可执行文件的进程,因此该技术可能为那些希望运行恶意代码的网络犯罪分子提供了便利,他们可以利用WSL来绕过尚未集成正确检测机制的安全产品。

观看攻击演示:https://youtu.be/fwEQFMbHIV8

Bashware是一个非常令人震惊的技术,任何恶意软件利用WSL机制都可以很容易的绕过安全产品。我们在大多数知名的防病毒和安全产品上测试了这种技术,并使用该技术成功地绕过了上述所有的安全产品,由此可见Bashware对全球目前运行的4亿台Windows 10 PC 的影响还是很大的。在发现该技术之后,我们立马更新了我们的SandBlast威胁防护解决方案,以保护我们的客户免受Bashware的攻击。因此安全同行们也应立即采取行动并修改其安全解决方案,以防止这种网络攻击的新方法。

Bashware技术在实现上利用了Windows Subsystem for Linux(WSL)的底层机制,该功能是Windows 10系统中的一个新功能,允许本机Linux ELF二进制文件在Windows上运行。在正式介绍Bashware的细节之前,我们首先回顾一下WSL的内部原理。


WSL概述

Windows Subsystem for Linux(简称WSL,如图1所示)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,该兼容层包含了用户模式和内核模式,可用于运行Linux二进制可执行文件,而无需启动任何的虚拟机。

Microsoft打算实现一种在隔离环境中以低开销运行应用程序的方法来在单个进程的用户模式地址空间内运行目标应用程序和操作系统。为了达到这个目的,Microsoft在Windows 10系统中引入了Pico进程,该进程是允许在Windows操作系统上运行ELF二进制文件的容器,这些新引进的进程在结构上往往是比较小的,缺少Windows NT进程(PEB,TEB,NTDLL等)中常见的结构块。通过将未修改的Linux二进制文件放在Pico进程中,WSL可以将Linux系统中的调用引导到Windows内核,lxss.sys和lxcore.sys驱动程序将Linux系统调用转换为NT APIs并模拟Linux内核。

WSL概念最初是在Astoria项目Drawbridge项目中才开始出现,目的是想在Windows系统上运行原生的Android应用程序。在WSL的初始版本中发现多个问题后,Microsoft决定以beta模式提供此项目,并在其GitHub页面上添加技术支持板块,以收集社区中发现的实时问题。在修复了社区提出的大多数问题并达到一个稳定的版本之后,微软正式在2017年7月28日发布了WSL。虽然WSL已经成为一个稳定的功能,其许多问题现在也得到了解决,但似乎行业仍然没有适应这种允许Linux和Windows系统中的进程在同一时间运行的这个奇怪想法。并且这在一定程度上为那些希望运行恶意代码的网络犯罪分子提供了便利,他们可以利用WSL功能来绕过尚未集成正确检测机制的安全产品。有关WSL组件的详细信息请参见“附录A”。

https://img.php1.cn/3cd4a/1e618/c5a/d5d40da532c3a782.png


Bashware

Bashware是一种通用和跨平台技术,该技术在实现上利用了WSL,使得恶意软件能够以隐藏的方式运行,从而绕过当前大多数安全产品的检测。该技术的关键在于Pico进程结构的设计,虽然Pico进程与常见的Windows进程特征不同,甚至该进程没有任何特征可以将其标识为一个常见的NT进程,但是Pico进程却具有与常见NT进程相同的功能,并且不会造成任何的威胁。下面我们将从4个步骤来介绍Bashware是如何加载恶意软件payloads的,如下图所示:

https://img.php1.cn/3cd4a/1e618/cd5/af17da15769ccb2e.jpeg

步骤1:加载WSL组件

为了利用WSL,Bashware必须首先验证WSL功能是否已经启用,该操作是通过检查Pico驱动程序的状态来实现的(检查lxcore.sys和lxss.sys是否存在于Windows驱动程序的路径中)。在功能被禁用的情况下,Bashware将使用DISM程序来加载驱动程序。这种方法是最简单的,也不会引起任何安全软件的怀疑。在加载WSL组件之后,Bashware将会进入下一步操作。

步骤2:启用开发者模式

只有启用了开发者模式才可以使用WSL组件功能,进入开发者模式需要设置以下这些注册表项:

HKLMSOFTWAREMicrosoftWindowsCurrentVersionAppModelUnlockAllowAllTrustedApps

HKLMSOFTWAREMicrosoftWindowsCurrentVersionAppModelUnlockAllowDevelopmentWithoutDevLicense

虽然这些值由TrustedInstaller设置,但也可以由任何拥有管理员权限的用户(或应用程序)完成设置。由于机器系统或任何高级安全检查没有验证这些是否被修改,因此Bashware可以通过打开并使用这些注册表项,以执行恶意软件的payloads,一旦Bashware的操作完成,注册表项将会被关闭,使得这个操作对用户而言实际上是不可见的。

步骤3:安装Linux

虽然Bashware现在启用了WSL并进入开发者模式,但Linux实例仍然不包含任何的文件系统。因此,Bashware的下一步是从Microsoft的服务器下载并解压缩Linux文件系统。正常情况下,用户可以使用“Lxrun”命令行程序来下载linux文件系统(Ubuntu 16.04),并使用/install选项将文件系统安装到在Windows PC上。Bashware利用Lxrun.exe程序从Microsoft服务器下载Linux文件系统并将其安装到Windows系统上,整个操作看似都是合法的。有趣的是,根据我们的研究发现这个安装过程在某种条件下容易受到网络攻击,这部分内容我们会在下面的内容中进行阐述。

步骤4:Wine

现在,Bashware已经在Windows系统上建立了一个完整的Linux环境,并且能够在两个环境中执行任何操作,下一步该怎么办?我们的最终目的是:尽管恶意软件不是跨平台的,我们也可以从Linux程序中运行恶意软件来攻击Windows系统。经过分析和研究,我们发现Winehq项目是一个完美的解决方案,该项目是一个免费的开源兼容层,可以允许Microsoft Windows程序在类Unix操作系统上运行。对于那些不熟悉它的人来说,Wine不是一个模拟器,而是将Windows API调用转换成POSIX(Portable Operating System Interface)。这正是我们所需要的,因为使用Wine可以在WSL环境中静默运行Windows恶意软件。Bashware使用Winehq项目功能,并将优化后的Wine项目安装到WSL Linux环境中。

接下来,Wine对EXE格式的文件进行转换,将其NT系统调用转换为POSIX系统调用。之后,lxcore.sys驱动程序会将这些POSIX系统调用转换到NT系统调用,并将lxcore转换为此进程的实际调用者。这样一来,在Windows操作系统上运行的文件就可以在Linux操作系统执行任何恶意软件的payloads,并绕过大多数安全产品的检测。


结论

随着“Bashware”完成了上述四个步骤,它成为运行任何恶意软件,绕过最常见的防病毒安全产品、安全检测工具,调试工具等的完美工具。

基于我们的研究发现,Bashware并没有利用WSL设计中的任何逻辑或实现上的漏洞。事实上,WSL的功能设计的很好。而导致Bashware可以运行任意恶意软件的原因主要有以下两个方面:一是在Windows操作系统中这是一种相对较新的技术;二是各种安全厂商缺乏对该技术进行检测的意识。我们认为,安全厂商应该要行动起来了,在支持这项至关重要的新技术的同时也要想法设法去阻止诸如Bashware这样的网络威胁。

Microsoft已采取措施,协助安全厂商处理由WSL引入的新的安全问题,例如Microsoft提供了Pico APIs,这些API接口可由AV公司调用以用来对这些类型的进程进行监控。


进一步分析

https://img.php1.cn/3cd4a/1eebe/cd5/67cc2e96eddffff8.png

在WSL的安装过程中, LxRun.exe程序负责从Microsoft服务器上下载和解压缩Linux文件系统。之后,文件系统被命名为lxss.tar.gz,并保存在%APPDAT%目录下的隐藏文件夹中。在获取到文件系统的压缩包之后,LxRun.exe将其解压缩到同一目录中。解压后的文件夹中包含了完整的Linux文件系统,WSL和Bash.exe稍后会使用该文件系统。

虽然微软已经花了很大的努力来保护Linux文件系统本身,例如防止Linux初始化被篡改,防范常见的注入技术等安全保护,但文件系统本身的保护机制呢?

根据我们的研究和分析发现Linux文件系统在安装过程中是存在安全隐患的,如果攻击者在下载后(在提取文件系统压缩包之前)修改文件系统的压缩包,由于系统不会对文件系统的真实性进行检查。因此,它允许攻击者完全更改文件系统并加载任何Linux文件系统。

与实现此技术相关的主要问题是识别存档被解压的确切时间。幸运的是,对于我们来说,微软为下载的文件系统计算出了一个SHA256值,该值在下载过程完成之后(解压文件之前)被保存到一个文件中。但是,这个SHA256散列值除了用于识别文件系统的压缩包是何时被解压之外,并没有其他用途。

当用户希望使用WSL时,他会运行“Bash.exe”,该程序是在用户权限下执行的。在每个运行的WSL中,NTFS分区会被自动挂载到Linux环境中的/mnt中,从而被授予从WSL内读写和执行NTFS的能力,具体如下图所示:

https://img.php1.cn/3cd4a/1eebe/cd5/5287a7b3296ea13e.webp

如果一个网络攻击者利用管理员权限启动了Bash.exe程序,那么Bash.exe 以及其子进程都将以管理员的权限来执行,这样在Windows系统中,网络攻击者就可以轻易的绕过UAC,而在Linux系统端,网络攻击者可以通过提取操作以拥有超级管理员的权限,具体如下图所示:

https://img.php1.cn/3cd4a/1eebe/cd5/e3aa5425383ba10d.png


参考文献

1.   Official Microsoft's Blog and GitHub on WSL:

https://blogs.msdn.microsoft.com/wsl

https://github.com/Microsoft/BashOnWindows

2.   Alex Ionescu's repository on GitHub:

https://github.com/ionescu007/lxss – Dedicated to research, code, and various studies of the Windows Subsystem for Linux used as great source of information and inspiration for this project.

3.   Wine project – a free open-sourcecompatibility layer that allows Microsoft Windows programs to run on Unix-like operating systemshttps://www.winehq.org/


推荐阅读
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
  • Spring Security 认证模块的项目构建与初始化
    本文详细介绍了如何构建和初始化Spring Security认证模块的项目。首先,通过创建一个分布式Maven聚合工程,该工程包含四个模块,分别为core、browser(用于演示)、app等,以构成完整的SeehopeSecurity项目。在项目构建过程中,还涉及日志生成机制,确保能够输出关键信息,便于调试和监控。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • Python学习:环境配置与安装指南
    Python作为一种跨平台的编程语言,适用于Windows、Linux和macOS等多种操作系统。为了确保本地已成功安装Python,用户可以通过终端或命令行界面输入`python`或`python3`命令进行验证。此外,建议使用虚拟环境管理工具如`venv`或`conda`,以便更好地隔离不同项目依赖,提高开发效率。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Ubuntu系统中直接使用Snap安装软件
    Canonical与Opera Software近日宣布,基于Chromium的Opera浏览器现已作为Snap包提供给Ubuntu用户,显著提升了在Linux操作系统上的安装便捷性和兼容性。通过Snap,用户可以在Ubuntu系统中轻松安装和更新Opera浏览器,享受更流畅的浏览体验。此外,Snap的容器化特性还确保了应用的安全性和稳定性,为用户提供更加可靠的软件环境。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 题目描述非常吸引人。每颗星星可以通过其在窗口的左下角和右上角位置构建两条扫描线,从而将问题转化为区间增减和求最大值的操作。需要注意的是,位于边界的星星不应计入结果,因此在处理时应分别对左右边界进行适当的增减调整。此外,利用线段树和离散化技术可以显著提高算法效率,确保在大规模数据下的性能表现。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 优化后的标题:在WHMCS域名主机管理软件中集成云免签支付与订单查询接口的开发方案
    本文探讨了在WHMCS域名主机管理软件中集成云免签支付和订单查询接口的开发方案。首先,我们详细研究了接口文档,发现该接口在大多数情况下并非必需,主要用于辅助查询订单状态。通过这一集成,可以提升用户的支付体验和订单管理效率。 ... [详细]
author-avatar
用释怀来成全悲伤_490_905_560
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有