SeeCode Audit Community Edition 帮助文档

概述

SeeCode Audit 是一套代码审计管理系统,该系统需要结合 seecode-scanner 工具一起使用。 SeeCode Audit 是使用 Python3 + Django2 + MySQL + Redis/Memcached + Redis/RabbitMQ 技术搭建。

SeeCode Audit 其最早的思路来源于 《代码自动化审计系统的建设(上)》《代码自动化审计系统的建设(下)》 文章,经过不断的打磨优化最后开发出 SeeCode Audit 系统,并进行开源。


1. 功能特点

1.1 认证与授权

  • 支持 SSO、Django authentication 等认证方式
  • 支持基于 Django 框架的 RBAC 访问控制
  • 支持基于 JWT Token 的 API 接口认证方式

1.2 项目与应用管理

  • 支持线上(GitLab)项目信息同步与管理
  • 支持项目时间轴历史记录与查看
  • 支持项目应用创建,可为同一个项目不同分支创建不同应用
  • 支持对应用的大小、开发语言、代码行数、依赖组件、组件版本的分析
  • 支持依赖组件按照条件导出功能
  • 支持对应用健康风险:危险、警告、安全的半定量评估
  • 支持离线 ZIP 包项目扫描
  • 支持扫描任务的 API 触发与手动触发方式

1.3 自定义扫描模板

  • 支持扫描模板的高度自定义,同一个引擎可包含不同的扫描策略(规则、插件)
  • 支持扫描引擎参数自定义
  • 支持扫描引擎执行超时设定
  • 支持扫描模板的版本控制

1.4 灵活的扫描规则与插件

  • 支持基于目录、文件、内容、组件等方式的自定义规则
  • 支持基于正则表达式的内容检测方式
  • 支持代码风格、坏味道、漏洞等不同类型设定
  • 支持 Python 插件形式的检测方式
  • 支持对扫描策略(规则、插件)的风险评分
  • 支持扫描策略(规则、插件)的版本控制
  • 支持项目依赖组件对已知漏洞识别能力

1.5 漏洞风险管理

  • 支持对漏洞的生命周期管理
  • 支持漏洞处理流程记录(历史操作记录)
  • 支持漏洞文件提交作者、邮箱地址的分析
  • 支持漏洞代码片段截取功能
  • 支持漏洞位置行的高亮显示功能
  • 支持漏洞关键信息的取证功能

1.6 扫描节点监控管理

  • 支持扫描节点的状态监控
  • 支持软件升级包在线打包、版本发布
  • 支持软件升级包的历史记录自动生成与历史记录查看
  • 使用 RSA 非对称加密方式,对节点间传输内容进行加密

1.7 扫描引擎特点

  • 完成 65% 的代码单元测试覆盖率,保证程序代码健壮
  • 完成 SonarScanner、RuleScanner、PluginScanner 引擎的功能测试,来保证程序正常运行
  • 提供命令行接口,并可通过命令行接口对线上项目、本地项目进行扫描
  • 支持软件升级包的自动升级与规则热加载
  • 支持扫描任务失败时的日志回传功能
  • 支持命令行下工具自检
  • 支持 Docker 部署

2. 系统设计

_images/img1.png

2.1 存储层

存储服务主要用于对扫描任务的日志、扫描结果、离线项目 zip 包、加密升级包进行存储,其形式可为 FTP、AWS 或其他云存储服务(由于测试环境有限目前只支持 FTP)。

2.2 Audit 服务端

Audit 服务端是 UI 前台系统,用于管理 SeeCode Audit 中的整体功能,其中包括 API 接口服务、项目管理、任务管理、引擎管理、节点管理、系统管理等功能。

2.3 中间件层

在生产环境下可使用 Memcached 做为缓存,使用 RabbitMQ 做为消息队列;测试与开发环境可以使用 Redis 代替以上服务。

2.4 Scan 扫描端

使用 seecode-scanner 作为扫描节点,并可水平扩展,详细参考请查看:https://seecode-scanner.readthedocs.io/en/latest/


3. 部署说明

3.1 开发/测试环境

  • Python3 + Django2
  • 数据库:MySQL
  • 中间件:Redis、FTP

Note

搭建系统前请确保 MySQL、Redis、FTP 等服务已安装并启动。

依赖安装

$ # 使用 virtualenv
$ virtualenv . && source bin/activate
$ pip isntall -r requirements/dev.txt
$ # 安装 seecode-scanner
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip

系统搭建

$ # 下载 seecode-audit 代码
$ git clone git@github.com:seecode-audit/seecode-audit.git

创建 seecode_db_ce 数据库, 执行 extras/db/seecode_db_ce_struct.sql、 extras/db/seecode_db_ce_data.sql 脚本:

$ create database seecode_db_ce default character set utf8mb4 collate utf8mb4_unicode_ci;

启动服务

运行 Web 服务,成功后访问 http://127.0.0.1:8080, 账号/密码 root/1qaz!QAZ

$ make runserver

启动 GitLab 同步服务:

$ celery -A seecode.celeryctl.celery_app beat -l info -Q gitlab

3.2 生产环境部署

  • Python3 + Django2 + CentOS 7
  • 数据库:MySQL 集群
  • 中间件:Memcached、RabbitMQ、FTP/AWS/其他云存储

Note

搭建系统前请确保 Nginx、MySQL、Memcached、RabbitMQ、FTP 等服务已安装并启动。

依赖安装

创建 seecode 账号

$ sudo useradd -m -s /bin/bash seecode && passwd seecode

切换 seecode 账号,开始搭建系统

$ # 创建部署目录
$ sudo mkdir -p /usr/local/seecode && cd /usr/local/seecode
$ # 设置部署目录权限
$ sudo chown seecode:seecode /usr/local/seecode
$ # 拉取线上代码
$ git clone git@github.com:seecode-audit/seecode-audit.git && cd seecode-audit
$ # 安装依赖
$ pip isntall -r requirements/prod.txt
$ # 安装 seecode-scanner
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip

配置系统

添加 nginx 配置

$ sudo cp extras/conf/nginx.conf /etc/nginx/conf.d/seecode.conf

添加 supervisord 配置

$ sudo cp extras/conf/supervisord.conf /etc/supervisord.conf

添加 seecode 配置

$ sudo cp extras/conf/seecode.yml /etc/seecode.yml

修改 RSA 的公钥与私钥:

$ vim seecode/libs/core/rsaencrypt.py

初始化系统

创建 seecode_db_ce 数据库, 执行 extras/db/seecode_db_ce_struct.sql、 extras/db/seecode_db_ce_data.sql 脚本:

$ create database seecode_db_ce default character set utf8mb4 collate utf8mb4_unicode_ci;

登陆系统,配置 GitLab、配置 SonarQube。

运行系统

$ supervisord -c /etc/supervisord.conf >/dev/null 2>&1 &

捐赠

  • BTC 地址:18F4VFDX2MCEXod7zjUF8NepUdAspEcJR8
  • ETH 地址:0xB3Bc55F4AAa8E87D3675B547e31d3eEbb585175c
  • HT 地址:0x952b4cd9f18126987fdbfab55e1ea72c5ae72e16

依赖服务

1. SonarQube

  • 使用 Docker 搭建

地址 https://github.com/chrismissonbrit/sonarqube,拉取镜像

$ docker pull chrismisson/sonarqube

创建容器,成功后访问 URL http://本机IP:9000,默认账号: admin/admin

$ docker run -d --name sonarqube -p 0.0.0.0:9000:9000 docker.io/chrismisson/sonarqube

2. vsftpd

2.1 安装
  • 安装 vsftpd、db4:
$ sudo yum install -y vsftpd db4
  • FTP服务模式
    • PORT(主动)模式,模式模式只要开启服务器的 21 和 20 端口
    • PASV(被动)模式,模式需要开启服务器大于 1024 所有 tcp 端口和 21 端口。

PS: 这里我们使用 PASV 的模式

2.2 配置
  • 目录规划
    • FTP 存储位置:/data/vsftpd/
    • 日志文件:/var/log/xferlog
    • 配置文件:/etc/vsftpd/vsftpd.conf
    • 账号配置:/etc/vsftpd/virtusers
  • 配置设置

创建一个虚拟宿主用户:

$ useradd virtualhost -s /sbin/nologin

编辑 /etc/vsftpd/vsftpd.conf 文件:

# 不允许匿名访问
anonymous_enable=NO

# 允许本地用户
local_enable=YES
write_enable=YES

# 设置本地用户的文件掩码
local_umask=022

# 不允许匿名上传、写入
anon_upload_enable=NO
anon_mkdir_write_enable=NO

# 日志文件
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES

# 开启被动模式
connect_from_port_20=NO
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=60000
chown_uploads=YES

#设定支持异步传输功能。
async_abor_enable=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=NO
listen=YES

# 关于虚拟用户的重要配置
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=virtualhost
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/virtualconf
allow_writeable_chroot=YES

创建日志文件与账户目录:

$ touch /var/log/vsftpd.log
$ chown virtualhost.virtualhost /var/log/vsftpd.log
$ mkdir /etc/vsftpd/virtualconf

创建虚拟用户,内容格式为一行账号一行密码,如下:

$ vim /etc/vsftpd/virtusers
seecode
P@ssw0rd!

生成虚拟用户数据文件:

$ db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

配置 vsftp 的 PAM 验证,非 64 位操作系统请使用 /lib/security/pam_userdb.so :

$ vim /etc/pam.d/vsftpd
auth    sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers

配置 FTP 用户:

$ mkdir /data/vsftpd/seecode/
$ vim /etc/vsftpd/virtualconf/seecode

local_root=/data/vsftpd/seecode
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=3000
data_connection_timeout=90
max_clients=1000
max_per_ip=100
local_max_rate=25000
  • 启动服务
$ systemctl start vsftpd.service

开发测试

此方式用于开发与测试时使用。

1. 安装

  • 使用 git 下载源代码
$ git clone git@github.com:seecode-audit/seecode-scanner.git
  • 使用 virtualenv 安装依赖
$ virtualenv . && source bin/activate
$ pip isntall -r requirements/dev.txt
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip

2. 配置

  • 配置数据库, 修改 seecode/settings/dev.py 文件

MySQL

DATABASES = {
   'default': {
     'ENGINE': 'django.db.backends.mysql',
     'NAME': 'seecode_db_ce',
     'HOST': '127.0.0.1',
     'USER': 'root',
     'PASSWORD': '',
     'PORT': '3306',
     'OPTIONS': {'charset': 'utf8mb4'}
   }
}

Sqlite3

DATABASES = {
   'default': {
     'ENGINE': 'django.db.backends.sqlite3',
     'NAME': os.path.join(BASE_DIR, 'seecode_db_ce.db'),
   }
}
  • 配置 Redis

缓存: 修改 seecode/settings/dev.py 文件

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "KEY_PREFIX": "seecode_ce",
        "LOCATION": "redis://127.0.0.1:6379/7",  # 修改
        "OPTIONS": {
            "COMPRESSOR": "django_redis.compressors.zlib.ZlibCompressor",
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "",
            "SOCKET_CONNECT_TIMEOUT": 5,  # in seconds
            "SOCKET_TIMEOUT": 5,  # in seconds
            "PICKLE_VERSION": -1  # Use the latest protocol version
        }
    }
}

服务端 Celery 队列: 修改 seecode/settings/dev.py 文件

CELERY_BROKER_URL = "redis://127.0.0.1:6379/7"

扫描端(seecode-scanner)Celery 队列: 修改 Makefile 文件

runserver:
    export SEECODE_CELERY_BROKER_URL=redis://127.0.0.1:6379/2 && \
    export SEECODE_C_FORCE_ROOT=False && \
    export DJANGO_SETTINGS_MODULE=seecode.settings.dev && python manage.py runserver 0.0.0.0:8080
  • 配置 seecode/wsgi.py 文件, ‘seecode.settings.prod’ 修改为 ‘seecode.settings.dev’。
$ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'seecode.settings.dev')
  • 配置 seecode/celeryctl.py 文件, ‘seecode.settings.prod’ 修改为 ‘seecode.settings.dev’。
$ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'seecode.settings.dev')

3. 运行

  • Web 启动
$ make runserver
 export SEECODE_CELERY_BROKER_URL=redis://127.0.0.1:6379/2 && \
         export SEECODE_C_FORCE_ROOT=False && \
         export DJANGO_SETTINGS_MODULE=seecode.settings.dev && python manage.py runserver 0.0.0.0:8080
 Watching for file changes with StatReloader
 Performing system checks...

 System check identified no issues (0 silenced).
 September 21, 2019 - 11:24:31
 Django version 2.2.5, using settings 'seecode.settings.dev'
 Starting development server at http://0.0.0.0:8080/
 Quit the server with CONTROL-C.
  • Gitlab 同步
$ celery -A seecode.celeryctl.celery_app -b -l info -Q gitlab

4. 测试

  • 执行 Gitlab 同步
$ make unit

生产环境

1. 安装

  • 下载程序

通过 https://github.com/seecode-audit/seecode-audit/releases 下载最新版本。 解压安装的 zip 包,这里安装在 /usr/local/seecode-audit/ 路径下。

$ sudo unzip seecode-audit.zip -d /usr/local/seecode-audit/
  • 安装依赖包
$ pip isntall -r requirements/dev.txt
$ pip install https://github.com/seecode-audit/seecode-scanner/archive/1.0.0.zip

2. 配置

2.1 配置 seecode.yml

编辑 /etc/seecode.yml 文件,请确认所有环境变量中都使用 DJANGO_SETTINGS_MODULE=seecode.settings.prod

mysql:
  default:
    host: 10.168.1.2
    port: 3306
    username: "seecode_db"
    password: "*****************"
    database: "seecode_db_ce"
  slave:
    host: 10.168.1.3
    port: 3306
    username: "seecode_db"
    password: "*****************"
    database: "seecode_db_ce"

redis:
  host: 10.168.1.1
  port: 6379
  db: 1
  password: "*****************"

memcached:
  host:
    172.19.26.1:11211
    172.19.26.2:11211
    172.19.26.3:11211
    172.19.26.4:11211
  username: seecode
  password: "*****************"

celery:
  celery_broker_url: ""

env:
  SEECODE_CELERY_BROKER_URL: "redis://:*****************@10.168.1.4:6379/8"
  SEECODE_C_FORCE_ROOT: False
  • 数据库

数据库默认使用 MySQL,部署方式读写分离。default 节点用于写入,slave 节点用于读取。

  • 缓存

  • redis
使用 Redis 用于缓存。
  • memcached
使用 emcached 用于缓存。
  • Celery

  • celery
该节点为中的 celery 配置,用于 seecode-audit 的 Gitlab 的队列。
  • env
用于设置 eecode Audit 的环境变量,默认设置了 seecode-scanner 使用的环境变量。
2.2 配置 Nginx

创建 /etc/nginx/conf.d/seecode.conf 文件,需要注意 server_name、static、proxy_pass 的正确设置。

server {
     listen       80 default_server;
     listen       [::]:80 default_server;
     server_name  seecode-audit.com;  # domain

     location /static {
         alias /usr/local/seecode-audit/seecode/templates/static;
     }

     location / {
         proxy_pass http://127.0.0.1:1768;
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_connect_timeout 75s;
         proxy_read_timeout 600s;

     }

     error_page 404 /404.html;
         location = /40x.html {
     }

     error_page 500 502 503 504 /50x.html;
         location = /50x.html {
     }
}
2.3 配置 gunicorn

编辑 seecode/gunicorn.conf.py 文件内容。 配置 /etc/supervisord.conf 设置, 注意 /etc/directory 与 /usr/local/bin/gunicorn 中的路径是否设置正确。

[program:gunicorn]
directory=/usr/local/seecode-audit
environment=DJANGO_SETTINGS_MODULE=seecode.settings.prod
command=/usr/local/bin/gunicorn seecode.wsgi:application -c /usr/local/seecode-audit/seecode/gunicorn.conf
.py --timeout 600
autorestart=true
2.4 配置 Celery

注意 directory 与 /usr/local/bin/celery 中的路径是否正确

[program:celery-beat]
directory=/usr/local/seecode-audit
environment=DJANGO_SETTINGS_MODULE=seecode.settings.prod
command=/usr/local/bin/celery -A seecode.celeryctl.celery_app beat -l info -Q gitlab
autorestart=true

3. 运行

确保 supervisord.conf 中的配置项与服务器配置的路径一致:

$ supervisord -c /etc/supervisord.conf >/dev/null 2>&1 &

基础数据

基础数据表是必须要创建的,保证 Seecode Audit 系统正常运行的关键。


1. 配置信息表

  • 表名称: sca_common_config
    • id : 主键
    • site : 网站地址, 如:http://seecode-audit.com
    • content : 系统配置的自定义参数,形式为 dict
    • created_at : 创建时间

该表内容的修改是通过 Web 系统中: “系统管理” -> “系统设置” 来设置。

PS: 默认表中只有一条数据,并且 ID 为 1。


2. 扫描引擎表

  • 表名称: sca_engine
    • id : 主键
    • name : 引擎名称
    • module_name : 模块名称
    • enable : 是否开启
    • url : URL
    • is_customize : 自定义引擎
    • description : 引擎描述
    • whitelist_count : 白名单规则数
    • blacklist_count : 黑名单规则数
    • config : 引擎配置
    • revision : 修订版本
    • updated_at : 更新时间
    • created_at : 创建时间

该表内容的修改是通过 Web 系统中: “引擎管理” -> “引擎列表” 来设置。

默认引擎,包含三个

  • SonarScanner
    • ID: 1
    • 名称:SonarScanner
    • 模块名称:seecode_scanner.lib.engines.sonarscanner
  • RuleScanner
    • ID: 2
    • 名称:RuleScanner
    • 模块名称:seecode_scanner.lib.engines.rulescanner
  • PluginScanner
    • ID: 3
    • 名称:PluginScanner
    • 模块名称:seecode_scanner.lib.engines.pluginscanner

3. 同步 SonarQube 规则

  • 确保 SonarScanner 引擎参数配置正确

登陆 SeeCode Audit 系统后台,点击进入 “引擎管理” - “引擎列表” - “SonarScanner” 进行编辑。

_images/engine_edit.jpg
  • 同步 SonarQube 规则操作

登陆 SeeCode Audit 系统后台,点击进入 “引擎管理” - “规则策略” 拉到底部,点击 ” Action” 按钮,单机 批量同步 Sonar 规则 菜单开始同步。

_images/sync_sonar_rule.png

登录认证


1. Django 认证

默认使用 Django 自带认证方式,可使用 manage.py 来创建一个超级管理员。

$ python manage.py createsuperuser

登录页面

_images/login.png

2. SSO 认证

SSO(单点登录, Single Sign-On),确保内部存在 SSO 服务,使用 SSO 登陆,需要设置如下两个参数:

  • ENABLE_CAS_SSO
    • 设置为 True ,开启 SSO。
  • CAS_SERVER_URL
    • 设置 CAS_SERVER_URL 的 SSO 登陆地址,如:CAS_SERVER_URL = "http://sso.example.com/"

Dashboard

_images/dashboard1.jpg

项目统计

  • 项目组数
    • 当前系统中的项目组总数,包含线上与自定义分组
  • 项目总数
    • 当前系统中的项目总数,包含线上与离线项目
  • 用户总数
    • 当前系统中的线上系统的用户,主要为 Gitlab 中的用户
  • 应用总数
    • 创建的应用总数

最近扫描

最近 15 天内的扫描任务统计分析。


本月漏洞类型分布

本月的漏洞类型分布饼形图。


项目趋势

线上项目的活动走势,分为以下两种:

  • 新项目
    • 当日创建的项目数
  • 活动项目
    • 当日提交代码的项目

项目管理

1. 项目组

1.1 项目组列表
_images/group.png
1.2 创建项目组
_images/group_add.png
1.3 查看项目组
_images/group_show.png

2. 项目

2.1 项目列表
_images/project.png
2.2 创建项目
_images/project_online.png
2.3 项目详情
_images/project_show.jpg

3. 应用

3.1 应用列表
_images/app_list.jpg
3.2 创建应用
_images/app_add.png
3.3 应用详情
_images/app_show.jpg

4. 依赖

4.1 查看组件
_images/component.jpg

5. 成员

5.1 成员列表查询
_images/members.jpg

任务管理

1. 扫描模板

1.1 模板列表
_images/scan_t_list.jpg
1.2 创建模板
_images/scan_t_add.jpg
1.3 修改模板
_images/scan_t_edit1.jpg _images/scan_t_edit2.jpg
1.4 修改模板规则
_images/scan_t_rule.jpg

2. 扫描分组

2.1 分组列表
_images/scan_g_list.jpg
2.2 创建分组
_images/scan_g_add.jpg
2.3 编辑分组
_images/scan_g_edit.jpg

3. 扫描任务

3.1 任务列表
_images/task_list.jpg
3.2 创建任务
_images/task_add.jpg
3.3 查看任务
_images/task_show1.jpg _images/task_show2.jpg _images/task_show3.jpg

4. 扫描结果

4.1 漏洞列表
_images/issue_list.jpg
4.2 漏洞查看
_images/issue_show.jpg
4.3 漏洞流程
_images/issue_edit.jpg _images/issue_edit_flow.jpg

引擎管理

1. 引擎列表

1.1 引擎列表
_images/engine_list.jpg
1.2 编辑引擎
_images/engine_edit1.jpg

2. 规则策略

2.1 规则列表
_images/rule_list.jpg
2.2 创建规则
_images/rule_add.jpg
2.2 编辑规则
_images/rule_add.jpg

3. 漏洞知识

3.1 知识列表
_images/kb_list.jpg
3.2 创建漏洞知识
_images/kb_add.jpg
3.3 知识库分类
_images/kb_cate.jpg
3.4 编辑知识库
_images/kb_cate_edit.jpg

节点管理

1. 集群列表

1.1 扫描节点
1.2 服务管理

2. 升级列表

2.1 升级包列表
_images/upgrade_list.jpg
2.2 升级历史
_images/upgrade_changelog.jpg
2.2 创建升级包
_images/upgrade_release.jpg

系统管理

1. 账户信息

1.1 分组管理
1.1.1 分组列表
_images/user_group_list.jpg
1.1.2 编辑分组
_images/user_group_edit.jpg
1.2 权限管理
1.2.1 权限列表
_images/perm_list.jpg
1.2.2 编辑权限
_images/perm_add.jpg
1.3 账户管理
1.3.1 权限列表
_images/user_list.jpg
1.3.2 编辑权限
_images/user_edit.jpg

2. 开发语言

2.1 语言列表
_images/lang.jpg
2.2 添加语言
_images/lang_edit.jpg

3. 系统设置

3.1 基本设置
_images/settings.jpg
3.2 扫描设置
_images/settings_scan.jpg
3.3 存储设置
_images/settings_upload.jpg

4. 定时任务

4.1 任务列表
_images/sched.jpg
4.2 编辑任务
_images/sched_edit.jpg

5. 系统日志

5.1 日志列表
_images/log.jpg
4.2 日志查看
_images/log_show.jpg

API 接口

1. 认证

确保 HTTP 请求中携带 Authorization 头,内容格式为:”Token *********”,其中 Token 可以通过登录系统中的个人账号中获得。

"Authorization": "Token *********"

2. 升级

2.1 查询升级信息
  • 请求
    • 方式:POST
    • URI:/api/v2/upgrade/version/
  • 响应

返回非加密内容:

{
    "code": 200,
    "data": {
        "version": "1.85.22",
        "md5": "1c0854e4c49646ebcd20ea586b8fc3f8",
        "release_time": "2019-09-20T02:54:31.205098+00:00",
        "download_path": "/home/seecode/upgrade/1.85.22.tgz",
        "download_type": "ftp"
    }
}

返回加密内容:

{
  "code": 200,
  "data": {
      "secret": "WSoZvXo7RwEGJP1YsZ+2ylcD/WusnXMIKNb96GsDjTEzsivjrWRVsQN9tcDY5j6K4d2Qz1q0k5oaMfxSvyii0Hw8A9EF5Xtz5PokJ90OZtVUQAr6OK6CPumnaq77Dflx5OPuNPCNjf2267yyHY9AXCQV6Q5x/B0JOqZl/Se7/uTQvTgXPPyroXILo8gl2ZwI1GM1LlebDC0gELZgvv0+rbOWbNSeLbX0FcLaQYDuPUNBUXte1H4QZglhr5vkvNwCQv1MhW9XdRSjkYzwZYM0mBVzR1Db2XS6RWJYJAlOOKevdcrmF+iJCrF96kJPrlqalLACyhbAt/6MlPZ35tC+Mg=="
  }
}

2. 任务

2.1 查询扫描任务
  • 请求
    • 方式:GET
    • URI:/api/v2/task/:task_id/
    • 参数:
      • task_id: [整型] 扫描任务的ID
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
  • 响应

返回内容:

{
    "code": 200,
    "data": {
        "task_id": 1862,
        "project_name": "tightMdmV2",
        "group_name": "默认扫描分组",
        "status": 1,
        "executor_ip": "192.168.1.1"
    },
    "desc": "成功!"
}

2.2 创建扫描任务
  • 请求
    • 方式:POST
    • URI:/api/v2/scan/add/
    • 参数:
      • ssh_url: [字符串] ssh 地址
      • branch: [字符串] 分支
      • app_name: [字符串] 应用名称
      • force_scan: [整型] 是否强制扫描,1 强制,0 不强制
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
{
    "ssh_url":"git@github.com:seecode-audit/vuln_java.git",
    "branch": "master",
    "app_name":"vuln_java",
    "force_scan": 0
}
  • 响应

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

2.3 更新扫描状态
  • 请求
    • 方式:POST
    • URI:/api/v2/task/:task_id/status/
    • 参数:
      • task_id: [整型] 扫描任务的ID
      • status: [整型] 状态码
      • end_time: [字符串] 结束时间
      • title: [字符串] 状态阶段
      • reason: [字符串] 原因
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
{
    "status": 1,
    "end_time":"2019-07-30 09:37:03",
    "title":"扫描失败",
    "reason":"没有找到sonar-scanner。"
}
  • 响应

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

2.4 更新统计信息
  • 请求
    • 方式:POST
    • URI:/api/v2/task/:task_id/statistic/
    • 参数:
      • task_id: [整型] 扫描任务的ID
      • size: [整型] 项目大小 KB
      • total: [整型] 代码总行数
      • language: [字符串] 项目开发语言
      • statistics: 文件统计信息
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
{
    "size": 80,
    "total": 2048,
    "language":"java",
    "statistics":[
        {
            "language": "java",
            "files": 2,
            "blank": 300,
            "comment": 200,
            "code": 100
        },
        {
            "language": "python",
            "files": 2,
            "blank": 100,
            "comment": 20,
            "code": 103
        }
    ]
}
  • 响应

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

2.5 更新依赖组件
  • 请求
    • 方式:POST
    • URI:/api/v2/task/:task_id/component/
    • 参数:
      • task_id: [整型] 扫描任务的ID
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
  • 响应
[
  {
     "name": "fastjson",
     "tag": "com.alibaba",
     "version": "1.2.58",
     "new_version": "",
     "origin": "pom.xml"
  }
]

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

2.6 更新漏洞信息
  • 请求
    • 方式:POST
    • URI:/api/v2/task/:task_id/issues/
    • 参数:
      • task_id: [整型] 扫描任务的ID
      • rule_key: [字符串] 规则 key
      • risk_id: [整型] 风险 id
      • category: [字符串] 漏洞类型
      • title: [字符串] 漏洞标标题
      • file: [字符串] 漏洞文件
      • author: [字符串] 最后提交作者
      • author_email: [字符串] 邮箱
      • hash: [字符串] 最后 commit id
      • start_line: [整型] 开始行
      • end_line: [整型] 结束行
      • report: [字符串] 报告
      • code_example: [字符串] 代码片段
      • is_false_positive: [布尔] 是否误报
      • whitelist_rule_id: [整型] 白名单 ID
      • evidence_content: [字符串] 取证内容
      • engine: [整型] 引擎 ID
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
[
  {
    "rule_key": "java:jackson-databind-cve-2019-12384",
    "risk_id": 3,
    "category": "vulnerability",
    "title": "Jackson-databind \u53cd\u5e8f\u5217\u5316\u6f0f\u6d1e (CVE-2019-12384)",
    "file": "pom.xml",
    "author": "zhangsan",
    "author_email": "zhangsan@example.com",
    "hash": "182fb49613656f833ed4c5ed059e7855269e56f2",
    "start_line": 61,
    "end_line": 62,
    "report": "https://git.example.com/app_group/app/blob/master/pom.xml#L61",
    "code_example": "\n        <jackson.version>2.9.9</jackson.version>\n        <jackson-databind.version>2.9.9.3</jackson-databind.version>\n        <dealer.lib.version>2018.08.29.1730</dealer.lib.version>\n\n",
    "is_false_positive": false,
    "whitelist_rule_id": "",
    "evidence_content": "2.9.9",
    "engine": 2
  }
]
  • 响应

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

3. 系统

3.1 日志收集
  • 请求
    • 方式:POST
    • URI:/api/v2/sys/log/
    • 参数:
      • title: [字符串] 标题
      • description: [字符串] 描述
      • stack_trace: [字符串] 堆栈信息
      • sys_type: [字符串] 类型
      • level: [字符串] 级别
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
{
    "title": "",
    "description": "",
    "stack_trace": "",
    "sys_type": "",
    "level": ""
}
  • 响应

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

3.1 扫描节点注册
  • 请求
    • 方式:POST
    • URI:/api/v2/node/host/
    • 参数:
      • hostname: [字符串] 主机名称
      • ipv4: [字符串] ipv4 地址
      • ipv6: [字符串] ipv6 地址
      • role: [字符串] 角色
      • ui_version: [字符串] UI 版本
      • client_version: [字符串] 客户端版本
    • 状态码:
      • 200: 返回成功
      • 400: 参数错误
      • 401: 无效 token
      • 404: 项目未找到
{
    "hostname": "test.local",
    "ipv4": "192.168.1.1",
    "ipv6": "",
    "role": "client",
    "ui_version": "",
    "client_version": "1.8.22"
}
  • 响应

返回内容:

{
    "code": 200,
    "desc": "成功!"
}

Changelog

1.0.0 2019-09-12

  • [Feature] #1: test
  • [Bug] #2: test