loading...
ternaryop8479の小窝

CFTQ反病毒云API文档

本文档说明范围主要覆盖CFTQ反病毒云的文件分析API接口的 调用说明、云服务状态查询、API认证方式(匿名访问格式及API Key用法)、文件上传/分析方式、接口响应格式、引擎证据树的导出方式以及HTTP响应状态码汇总。

调用说明

  1. API接口支持匿名访问,即支持不提供API Key的扫描请求,且匿名访问模式与API Key访问模式具有相同的请求权限,但匿名访问有调用速率限制,单IP最高调用速率为每分钟一次扫描请求。

  2. API接口允许用户申请并使用API Key,进行不限制调用频率的请求,但对请求并发数进行了限制,单API Key最高并发数为2。

  3. API接口允许的最大上传文件大小为200MB。

  4. 对于超额、超并发数或超过文件大小限制的访问,CFTQ反病毒云不会采取封禁API Key的行为,但是会对影响到服务正常运营的IP给予永久封禁。

  5. 关于API Key的获取,用户可以申请加入CFTQ用户群(QQ1053168772),并联系管理员获取API Key。

  6. CFTQ反病毒云引擎只支持x86 32位及64位PE程序的分析,其他类型文件不支持分析。

云服务状态查询

CFTQ反病毒云在线API支持用户查询当前的云服务状态:

curl -s https://starlight-v3.ternaryop.top/health

预期响应(云服务状态正常):

{"status":"ok","model_version":"26.08.04","concurrency_in_use":0}

响应体说明:该接口返回数据为json文本,status字段代表模型状态,model_version代表模型当前版本,concurrency_in_use代表当前IP已用并发数。

API认证方式

CFTQ反病毒云在线API支持如下三种鉴权方式(为方便测试,所有示例请求均使用访客模式执行):

# 访客模式(无api_key,每IP每分钟最多请求1次,超限返回429)
curl -F "file=@sample.exe" https://starlight-v3.ternaryop.top/scan

# API Key模式:api_key附加到请求头调用(推荐使用,不限制调用速率,最大并发数为2)
curl -F "file=@sample.exe" -H "X-API-Key: $KEY" https://starlight-v3.ternaryop.top/scan

# API Key模式:api_key附加到查询参数(不限制调用速率,最大并发数为)
curl -F "file=@sample.exe" "https://starlight-v3.ternaryop.top/scan?api_key=$KEY"

文件上传/分析方式

CFTQ反病毒云在线API支持如下两种文件上传形式(为确保标准,所有示例请求均使用multipart/form-data形式执行):

# multipart/form-data上传:file字段为样本,原始文件名取自该字段
curl -F "file=@/path/启动游戏.exe" https://starlight-v3.ternaryop.top/scan

# 原始二进制上传:将文件的原始二进制数据作为请求题,需要附加X-Filename头传递文件名
curl --data-binary @sample.exe -H "X-Filename: sample.exe" https://starlight-v3.ternaryop.top/scan

接口响应格式

CFTQ反病毒云在线API通过返回json文本的形式,对请求进行响应,字段说明如下:

  • 分析成功时的响应json:

段

字段

类型

意义

-

code

int

文件分析状态,0代表分析成功,1代表分析失败

model

version

string

当前模型版本,如"26.08.04"

model

tspm_trie_node_count

int

当前tosSPM语义解析引擎的Trie树节点数量(代表模型规模)

file

name

string

目标文件名

file

size

int

目标文件大小(单位字节)

file

machine

string

目标文件架构,x86为32位程序,amd64为64位程序

file

import_count

int

目标程序导入表条目数

file

efg_node_count

int

目标程序EFG(外部调用流程图)节点数

file

efg_edge_count

int

目标程序EFG边数

file

sha256

string

目标程序的SHA-256值

file

md5

string

目标程序的MD5值

result

type

string

引擎对目标程序作出的判别,"malware"为病毒程序,"benign"为良性程序,"suspicious"为可疑程序

result

confidence

float

引擎判别该文件是恶意的置信度,即该文件是恶意程序的概率

result

analyzing_time_ms

float

引擎对该文件的分析时长

tspm

final_score

float

tosSPM语义解析引擎对目标程序给出的语义分数(<0偏良性,>0偏恶意)

tspm

malware_score

float

tosSPM语义解析引擎对目标程序给出的恶意概率分数,返回值>=0

tspm

benign_score

float

tosSPM语义解析引擎对目标程序给出的良性概率分数,返回值<=0

tspm

malware_call_chain_count

int

tosSPM语义解析引擎在目标程序的EFG上发现的意图偏恶意的调用链数

tspm

benign_call_chain_count

int

tosSPM语义解析引擎在目标程序的EFG上发现的意图偏良性的调用链数

tspm

malware_call_count

int

tosSPM语义解析引擎在目标程序的EFG上发现的组成恶意调用链的外部调用数

tspm

benign_call_count

int

tosSPM语义解析引擎在目标程序的EFG上发现的组成良性调用链的外部调用数

  • 分析失败时的响应json:

字段

类型

意义

code

int

文件分析状态,0代表分析成功,1代表分析失败

error

string

请求失败原因,为英文字符串

  • 分析成功响应示例:

{
  "code": 0,
  "model": {
    "version": "26.08.04",
    "tspm_trie_node_count": 6545210
  },
  "file": {
    "name": "sample.exe",
    "size": 94208,
    "machine": "x86_64",
    "import_count": 134,
    "efg_node_count": 372,
    "efg_edge_count": 1028,
    "sha256": "34e640085bda4a851559bb958e59525d764240681aecc4593f04d2336ce04819",
    "md5": "782c5b25d5053b83a90830e0818f7aa5"
  },
  "result": {
    "type": "malware",
    "confidence": 0.997319,
    "analyzing_time_ms": 39.5
  },
  "tspm": {
    "final_score": 0.911864,
    "malware_score": 3142.782769,
    "benign_score": -144.879949,
    "malware_call_chain_count": 503,
    "benign_call_chain_count": 95,
    "malware_call_count": 1416,
    "benign_call_count": 247
  }
}
  • 分析失败响应示例:

{
  "code": 1,
  "error": "invalid api key"
}

引擎证据树导出方式

CFTQ反病毒云支持以DOT图格式导出引擎在推理过程中的匹配树,即证据树,包含引擎在目标程序上匹配到的具有恶意或良性意图的调用链,其调用方法如下:

# 附加export_evidence=true查询参数,证据树DOT图数据将附加在响应json文本的evidence_dot字段中
curl -F "file=@sample.exe" "https://starlight-v3.ternaryop.top/scan?api_key=$KEY&export_evidence=true"

# 可以使用Python脚本将返回的证据树保存为dot文件
curl -s -F "file=@sample.exe" "https://starlight-v3.ternaryop.top/scan?api_key=$KEY&export_evidence=true" \
 | python3 -c "import sys,json; print(json.load(sys.stdin)['evidence_dot'])" > evidence.dot

HTTP响应状态码汇总

状态码

场景

200

Check health成功/分析成功

400

文件上传失败/目标文件为空

401

API Key无效

413

请求体过大

429

访问速率过快/访问并发数过多

500

引擎分析失败(如非PE文件、PE文件无效或不支持分析、目标架构不支持等)

503

服务繁忙或正在维护(常见的如云服务模型未加载等)

评论