ChkApi 1.0 实战:Python3.8 自动化巡检 100+ API 资产与敏感信息挖掘
在数字化转型浪潮中,API已成为企业数据流通的核心动脉。据统计,2025年全球API调用量将突破50万亿次,而其中约34%的API存在未修复的高危漏洞。传统人工巡检方式面对海量API资产时力不从心,自动化API安全检测工具正成为甲方的刚需。本文将深度解析开源工具ChkApi 1.0在Ubuntu 20.04环境下的实战应用,从零搭建自动化巡检体系,到精准提取JDBC连接串、AKSK密钥、私钥等核心敏感数据。
1. 环境部署与工具配置
1.1 基础环境准备
ChkApi基于Python3.8开发,推荐使用Ubuntu 20.04 LTS作为运行环境。以下为完整依赖安装流程:
# 更新系统并安装基础依赖 sudo apt update && sudo apt upgrade -y sudo apt install -y python3.8 python3-pip git chromium-browser # 安装Chromedriver(注意版本匹配) LATEST_CHROME=$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE) wget https://chromedriver.storage.googleapis.com/$LATEST_CHROME/chromedriver_linux64.zip unzip chromedriver_linux64.zip && sudo mv chromedriver /usr/local/bin/1.2 ChkApi安装与验证
通过Git克隆项目仓库并安装Python依赖:
git clone https://github.com/0x727/ChkApi_0x727.git cd ChkApi_0x727 pip3 install -r requirements.txt # 验证安装成功 python3 ChkApi.py -h正常运行时将显示如下参数说明:
usage: ChkApi.py [-h] [-u URL] [-f FILE] [-c COOKIES] [--chrome {on,off}] [--at {0,1}] [--na {0,1}] optional arguments: -h, --help show this help message and exit -u URL Target URL -f FILE File containing multiple URLs -c COOKIES Authentication cookies --chrome {on,off} Enable/disable Chrome driver (default: on) --at {0,1} 0=collect+scan, 1=collect only (default: 0) --na {0,1} 0=scan vulns, 1=skip vuln scan (default: 0)注意:若企业网络存在严格代理限制,需提前配置系统代理环境变量或使用
--chrome off关闭浏览器驱动模式。
2. 资产扫描策略设计
2.1 目标资产识别
ChkApi通过三重机制发现API端点:
- 静态解析:提取HTML/JS中的硬编码接口路径
- 动态爬取:执行浏览器自动化获取异步加载接口
- 字典爆破:内置300+常见API路径字典(如
/api/v1/users)
扫描策略建议采用渐进式覆盖:
# 示例扫描命令组合 # 第一阶段:基础信息收集(不检测漏洞) python3 ChkApi.py -u https://target.com --at 1 -c "sessionid=xxxx" # 第二阶段:深度漏洞检测 python3 ChkApi.py -u https://target.com --na 0 -c "sessionid=xxxx"2.2 扫描参数优化
针对不同场景推荐配置:
| 场景类型 | 推荐参数 | 耗时预估 | 内存消耗 |
|---|---|---|---|
| 单域名深度扫描 | --na 0 --chrome on | 2-4小时 | 2GB+ |
| 多域名快速巡检 | --na 1 --chrome off | 30分钟/域 | 500MB |
| 登录态接口检测 | -c "token=xxxx" | 增加20% | 基本持平 |
特殊场景处理:
- Swagger文档解析:自动识别
/swagger-ui.html等路径 - GraphQL接口:需手动添加
--headers '{"Content-Type":"application/json"}'
3. 敏感信息挖掘实战
3.1 JDBC连接串提取
数据库连接字符串通常包含IP、端口、账号密码等敏感信息。ChkApi通过正则匹配以下模式:
jdbc:(mysql|oracle):\/\/([0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]{2,4}\/[^\s]+实战案例:在某金融平台巡检中发现泄露的MySQL配置:
jdbc:mysql://10.2.8.47:3306/core_db?user=dbadmin&password=C0mplexP@ss20233.2 AKSK密钥识别
云服务访问密钥通常具有固定特征:
- 阿里云:
LTAI[0-9a-zA-Z]{20} - AWS:
AKIA[0-9A-Z]{16} - 腾讯云:
AKID[0-9a-zA-Z]{32}
ChkApi内置多云厂商密钥模式识别,并自动验证密钥有效性。某次扫描结果示例:
{ "cloud_type": "aliyun", "access_key": "LTAI5tR8kP9qZwX7MNZ*****", "secret_key": "W4V9LpzKx0BmQ2nHjJ8**********", "is_valid": true, "services": ["OSS", "ECS"] }3.3 私钥文件检测
通过以下特征识别RSA/DSA私钥:
-----BEGIN (RSA|DSA|EC) PRIVATE KEY----- [\s\S]+? -----END (RSA|DSA|EC) PRIVATE KEY-----风险等级评估标准:
| 泄露位置 | 风险等级 | 典型影响 |
|---|---|---|
| 前端JS文件 | 高危 | 全线业务系统沦陷 |
| 接口响应包 | 严重 | 中间人攻击风险 |
| 错误信息回显 | 中危 | 辅助其他漏洞利用 |
4. 结果分析与报告生成
4.1 数据聚合分析
ChkApi输出三种格式结果:
- 原始日志:
target.com_api.txt(含完整请求响应) - 结构化数据:
target.com_api.xlsx(分类统计) - 风险摘要:
target.com_risk.txt(按CVSS评分排序)
关键指标计算公式:
风险密度 = 高危漏洞数 / 有效API总数 × 100% 敏感接口占比 = 含敏感信息的API数 / 总API数 × 100%4.2 典型漏洞修复方案
针对高频漏洞的即时处置建议:
| 漏洞类型 | 修复方案 |
|---|---|
| 硬编码密钥 | 立即轮换密钥,改用KMS动态获取 |
| 未授权访问 | 添加JWT/OAuth2.0鉴权,设置IP白名单 |
| 敏感信息泄露 | 配置响应过滤器,移除调试信息 |
| SQL注入风险 | 使用PreparedStatement,启用ORM框架的SQL过滤 |
4.3 自动化集成方案
通过GitHub Actions实现CI/CD流水线集成:
name: API Security Scan on: [push] jobs: chkapi-scan: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Set up Python 3.8 uses: actions/setup-python@v2 with: python-version: '3.8' - name: Run ChkApi run: | git clone https://github.com/0x727/ChkApi_0x727 cd ChkApi_0x727 pip install -r requirements.txt python ChkApi.py -u ${{ secrets.TARGET_URL }} --na 0 - name: Upload Results uses: actions/upload-artifact@v2 with: name: scan-report path: ChkApi_0x727/*.xlsx在金融行业某次实战中,通过ChkApi发现的未授权访问接口导致攻击者可批量下载客户身份证扫描件。该漏洞在自动化扫描触发后的37分钟内即被修复,避免了千万级罚款风险。