攻击者使用 Python 编译的字节码来逃避检测

news2025/1/12 10:57:38

以 PyPI(Python 包索引)等开源包存储库为目标的攻击者设计了一种新技术,可以将他们的恶意代码隐藏在安全扫描器、人工审查和其他形式的安全分析中。

在一次事件中,研究人员发现恶意软件代码隐藏在 Python 字节码 (PYC) 文件中,该文件可以直接执行,而不是源代码文件由 Python 运行时解释。

安全公司 ReversingLabs 的研究人员在一份报告中说:这可能是第一个利用 Python 字节码文件可以直接执行这一事实的供应链攻击,而且它是在恶意提交到 Python Package Index 的激增之际发生的。

如果是这样,它会带来另一个供应链风险,因为大多数安全工具可能会错过这种类型的攻击,这些工具只扫描 Python 源代码 (PY) 文件。

编译代码与源代码

在公共存储库(例如用于 JavaScript 的 npm、用于 Python 的 PyPI 和用于 Ruby 的 RubyGems)中发现的绝大多数包都包含打包到存档中的开源代码文件。它们很容易解包和阅读,因此已经为这些存储库构建了安全扫描器来处理这种类型的包装。

攻击者一直在与安全公司进行斗争以逃避检测,而对于明文代码,最常见的逃避技术是混淆。这包括使用编程语言本身的特性,如编码、解码或评估,使代码不可读但功能正常。例如,用base64编码恶意代码是一种常用的技术,但安全工具可以处理这种编码。

在 PyPI 生态系统中,W4SP Stealer 恶意软件背后的网络犯罪分子以采用包括 base64 编码、LZMA 压缩和缩小在内的技术而闻名,从代码中删除空格和注释以使其更紧凑但也更难阅读。

该小组使用一些第三方开源工具来实现这一点,例如 pyminifier、Kramer 或 Hyperion。在 W4SP 攻击的一种变体中,文件中混淆的恶意代码被移动到默认屏幕边框的边缘之外,这样手动查看源代码文件的人就看不到它了。

但是,PYC 文件不同。它们不像纯文本 PY 脚本那样是人类可读的。PYC 文件是在 Python 解释器导入或执行 Python 脚本时生成的。因为它们已经是解释(编译)代码,所以它们稍后可以由 Python 解释器直接执行,而无需重新解释原始脚本。这有助于提高性能,因为它具有更快的执行时间,并且此类文件最常见的用途是分发 Python 模块。

在大多数 PyPI 恶意软件实例中,恶意混淆代码旨在访问外部 URL 并下载恶意软件,通常是信息窃取程序,这是安全工具检测可疑行为的另一个机会。

在最近的这起事件中,一个名为 fshec2 的包被发现包含一个恶意 PYC 文件,完整的恶意负载可以隐藏在文件中,如果安全工具不是为反编译它而设计的,就很难检测到它。

在 fshec2 包中发现的加载程序脚本包含最少的 Python 代码,并执行一个简单的操作:加载已编译的 Python 模块,它恰好是一个恶意模块。

检查器是 PyPI 安全团队提供的用于分析 PyPI 包的默认工具,目前不提供任何分析二进制文件以发现恶意行为的方法。编译代码来自.PYC 文件需要反编译才能分析其内容。

发现的 fshec2 包表现出可能意在逃避检测的额外行为。通常,使用 import 指令从 Python 脚本导入模块。然而,在这种情况下,恶意 PYC 模块是使用 importlib 加载的,importlib 是一个实现导入功能的单独包,仅用于特定情况,例如在导入时动态修改导入的库。

在这种情况下,恶意 PYC 没有被修改,因此除了避免使用常规导入指令之外,没有技术理由使用 importlib,可能是为了逃避检测。

凭证窃取似乎是主要目标

一旦在机器上执行,fshec2 恶意负载会收集有关系统的信息,例如用户名、目录列表和主机名,然后在 Linux 上设置 cron 作业或在 Windows 上设置计划任务以执行从远程服务器获取的命令。

这些命令允许恶意软件自我更新,攻击者能够提供新版本以及 Python 脚本形式的其他有效负载。

研究人员分析了命令和控制服务器,发现了允许他们浏览某些信息的错误配置。例如,他们发现受害者机器被赋予了一个递增的 ID,并且能够确认该恶意软件确实是由多个受害者执行的。

这些错误的数量之多可能会让我们得出这样的结论,即这次攻击不是国家支持的行为者所为,也不是高级持续威胁 (APT)。虽然团队没有收集到足够的证据来以某种方式证明这一假设,但通过增加文件 ID 来收集文件名让我们确定在某些情况下攻击是成功的。

我们的研究人员仍然无法说出目标是谁或什么是。但是,我们可以确认开发人员确实安装了恶意 PyPI 包,并且他们的机器名称、用户名和目录列表因此被收集。

在服务器上发现的一些文件名表明攻击者在一些机器上部署了键盘记录功能。

从历史上看,npm 一直是不幸的领导者,PyPI 也参加了比赛,看看哪个开源平台最受恶意软件作者的关注。然而,在过去六个月中,我们和其他人观察到发布到 PyPI 的恶意软件数量显着增加。事实上,在 5 月份,在 PyPI 上创建新用户帐户和项目被暂停了几个小时,因为大量的恶意活动。

我们向 PyPI 安全团队报告了新的攻击媒介,他们删除了软件包并表示他们之前从未见过这种攻击技术。这并不排除其他类似包进入存储库的可能性。

为了应对这些现代软件供应链威胁,组织需要的不仅仅是静态代码分析解决方案。

他们需要的工具还可以监控敏感的开发系统,以发现可疑进程创建、文件执行、未经授权的 URL 访问、信息收集命令以及使用 get_path 或 importlib 等易于滥用的功能。

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

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

相关文章

Scala学习(十二)---模式匹配

文章目录 1.基本语法2.模式守卫3.匹配常量和类型4.匹配对象和样例类4.1 匹配对象4.2 匹配样例类 5.偏函数中的模式匹配 1.基本语法 在Scala中的模式匹配类似于Java中的switch语法 //模式匹配基本语法val a10val b20val c""c match {case "" >println(…

VScode远程连接虚拟机(ubuntu系统)

文章目录 1. Windows端安装VScode2. 安装远程登录插件3. 配置Remote-SSH插件关于关闭后如何打开该配置文件 4. 测试ubuntu与windows可否ping通5. 在Ubuntu中安装 SSH1.检查是否安装ssh-server2.安装openssh-server3.查看ssh服务是否启动4.Ubuntu中配置openssh-server开机自动启…

路径规划算法:基于蝠鲼觅食优化的路径规划算法- 附代码

路径规划算法:基于蝠鲼觅食优化的路径规划算法- 附代码 文章目录 路径规划算法:基于蝠鲼觅食优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

6.4下周黄金最新行情走势分析及开盘交易策略

近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? ​黄金消息面解析:周五(6月2日),美市尾盘,现货黄金收报1947.82美元/盎司,大幅下跌29.70美元或1.50%,日内最高触及1983.43美元/盎司&…

chatgpt赋能python:Python升序排序

Python升序排序 Python是一种非常强大的编程语言,它在数学计算、数据处理等方面具备很强的优势。在实际应用中,我们经常需要对一系列数据进行排序。而在Python中,升序排序是非常常见的操作。本篇文章将介绍在Python中如何使用ifelse进行升序…

JavaWeb13(ajax01 AJAX介绍AJAX登陆AJAX加入购物车AJAX修改购物车商品数量)

目录 一. 什么是ajax 二.为什么需要AJAX? 三. 同步和异步的区别. 四.基于jQuery实现AJAX语法 4.1 语法1-$.ajax(url,[settings]). 4.1 语法2-$.get/post(url, [data], [callback], [type]). 五 .案例 5.1 ajax实现登录 ①html代码 用户登录 用户名: 密码…

【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

揭秘照片修复技巧:手把手教你如何让模糊照片变清晰

作为一名修图小能手,行走于修图界,修复模糊的照片是必备的技能之一,最近收到很多粉丝的私信,清一色都是问的怎么免费把照片变清晰,为了给各位小伙伴们解决难题,我决定拿出我私藏多年的秘密武器,…

【CloudCompare教程】016:计算点云的法向量

本文讲解CloudCompare计算点云的法向量的方法。 文章目录 一、法向量概述二、法向量计算1. 平面法向量2. 二次曲面3.三角网格化一、法向量概述 法向量,是空间解析几何的一个概念,垂直于平面的直线所表示的向量为该平面的法向量。法向量适用于解析几何。由于空间内有无数个直…

HAL库记录-RTC

芯片:STM32F29IIGT6 阿波罗开发板 1.配置时钟 2.HAL外设配置 3.代码解析 生成rtc文件 RTC_HandleTypeDef hrtc;/* RTC init function */ void MX_RTC_Init(void) {/* USER CODE BEGIN RTC_Init 0 */RTC_TimeTypeDef rtc_time;RTC_DateTypeDef rtc_data;/* USER CODE END RTC…

node笔记_生成自定义目录文件

文章目录 ⭐前言⭐node生成目录💖 mkdirSync创建目录💖 stat判断目录是否存在💖 mkdir创建目录💖 动态创建目录文件 ⭐结束 ⭐前言 大家好!我是yma16,本文分享node生成自定义目录文件。 背景: …

chatgpt赋能python:Python中去掉数字末尾的0:一种简单有效的方法

Python中去掉数字末尾的0:一种简单有效的方法 Python作为一种流行的编程语言,经常被用于各种应用程序的编写。在这篇文章中,我们将介绍如何使用Python去掉数字末尾的零的一种简单有效的方法。 为什么要去掉数字末尾的0? 对于数…

【工具使用】STM32CubeMX-GPIO配置

一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的GPIO的配置及其相关知识。GPIO…

(转载)基本粒子群算法及惯性权重分析(matlab实现)

1 理论基础 粒子群算法(particle swarm optimization,PSO)是计算智能领域,除了蚁群算法、鱼群算法之外的一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单…

一零五九、Windows系统(amd)通过VMware安装黑苹果

我来详细的说一下过程: 配置: windows amd锐龙VMware 16.0 (16.1.0 build-17198959)macos 11.1unlocker(工具,让虚拟机支持引导苹果系统) 总体步骤: 下载iso镜像和unlocker工具,这里提供两个链接&#…

Spring Cloud Alibaba Nacos 构建配置中心

构建配置中心 新建命名空间 登录 Nacos 面板,依次点击左侧菜单栏【命名空间→新建命名空间】、填写命名空间名和描述信息,点击【确定】: 新建配置文件 依次点击左侧菜单栏【配置管理→配置列表】、切换到指定命名空间【此处为 shop】、点击…

MySQL中的CONCAT()函数和CONCAT_WS()函数

一、介绍 1. CONCAT() MySQL的CONCAT()函数用于将多个字符串连接在一起。它接受两个或多个字符串参数,并返回它们的连接结果。 示例: select concat("hello"," ","world") as concatenated_str; 执行结果&#xff1a…

基于SpringBoot的爱心家园服装捐赠系统

目录 1、项目介绍 2、项目技术 3、运行环境 4、项目介绍 5、项目代码 5、运行截图 6、源码获取 1、项目介绍 角色:管理员、用户 管理员:管理员登录系统后,可以对首页、个人中心、用户管理、捐赠记录管理、论坛管理、留言管理、心愿管理等功能进行相应的操作…

二、KeilMDK+STM32CubeMX建立工程_LED灯闪烁为例

1、开发环境 (1)KeilMDK:V5.38.0.0 (2)STM32CubeMx:V6.8.1 (3)MCU:STM32F407ZGT6 2、实验目的&原理图 2.1、实验目的 实现两个LED灯以500毫秒闪烁一次。 2.2、原理图 (1)LED阴极接GPIO,GPIO输出低电平,LED点亮;GPIO输…

【Python】列表 List ② ( 使用下标索引访问列表 | 正向下标索引 | 反向下标索引 | 嵌套列表下标索引 | 下标索引越界错误 )

文章目录 一、使用下标索引访问列表1、下标索引用法2、正向下标索引3、反向下标索引4、代码示例 - 列表下标索引基本用法 二、嵌套列表下标索引1、嵌套列表下标索引简介2、代码示例 - 嵌套列表下标索引 三、下标索引越界错误 一、使用下标索引访问列表 1、下标索引用法 在 Pyth…