Skip to content

Passets 是一套开源的被动资产识别框架。

License

Notifications You must be signed in to change notification settings

DSO-Lab/passets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python 3.x Ruby 2.5 Go 1.13.x Java 1.8 Platform linux&docker License

概述

passets 是一套由 DSO 安全实验室(DSO Security Lab)开源的被动资产识别框架,用于基于被动流量的网络资产发现。整体框架包括四大组件:

流量采集模块

提供流量采集及基本的流量过滤和处理。

数据存储模块(ELK)

采用成熟的 Elasticsearch + Logstash + Kibana 框架, 负责采集数据的基本加工、存储及索引等。

数据清洗模块

根据数据清洗插件对数据进行深度清洗、标记和重组。

数据发布模块

负责向第三方应用提供采集的资产数据。

特性

  • 从采集到数据清洗全部支持分布式架构
  • 基于流量的资产指纹识别
  • 支持多种硬件架构(x86、ARM)
  • 容器化部署,上手容易
  • 更多...

环境

软件

硬件

用户需要自行准备一台至少包含两块网卡的计算机设备。其中一个网卡用来接收交换机镜像的流量,另一个网卡则用于通过Web API向其它应用提供数据。

用户提供的计算机设备最小配置要求如下(默认保留近30天数据):

参数项 百兆网(推荐配置) 千兆网(推荐配置)
CPU 四核 八核
内存 8G 16G
存储 100G 500G

部署

依赖环境安装:

curl -fsSL https://get.docker.com/ | sh
yum -y install docker-compose
systemctl start docker
systemctl enable docker

单机快速部署

第一步:点击 这里 下载最新的部署文件包并解压缩:

curl -L https://github.com/DSO-Lab/passets/archive/master.tar.gz -o master.tar.gz
tar -zxf master.tar.gz
cd passets-master/

第二步:修改 [docker-compose] 配置文件中下列参数:

services:
    api:
    ...
      environment:
        ...
        # 配置API访问密钥,该密钥用于通过 API 获取资产数据
        SECRET=<dsolab-passets-api-secret>
    ...
    sensor:
        ...
        environment:
        # 流量镜像网卡配置
        - interface=<网卡编号>

第三步:获取最新的指纹库、IP定位数据库

获取最新的指纹库,保存到当前目录下的 rules 目录下。

# Wappalyzer 指纹库
curl -L https://github.com/AliasIO/Wappalyzer/raw/master/src/apps.json -o ./rules/apps.json

# NMAP 指纹库
curl -L https://svn.nmap.org/nmap/nmap-service-probes -o ./rules/nmap-service-probes

IP 地址数据库的更新请参阅 passets-logstash 的文档说明。

第四步:定义自己的内部IP地址

内部IP地址默认已配置为通用局域网IP地址,用户可以通过修改 docker-compose.yml 中 Logstash 容器的 INNER_IP_LIST 环境变量来自定义内部 IP 地址列表。格式为“<起始IP>-<结束IP>,IP”(单条记录支持IP范围和单个IP,多条记录用半角逗号分隔,不能有空格),配置示例如下:

version: "3"

services:
  ... ...
  
  logstash:
    ... ...
    environment:
      ... ...
      - INNER_IP_LIST=10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,169.254.0.0-169.254.255.255,127.0.0.1-127.0.0.255

第五步:创建数据、日志目录并赋权

在 docker-compose.yml 文件同级目录下创建下列目录:

mkdir -p data/elasticsearch/nodes
mkdir -p data/logstash
mkdir -p data/kibana
mkdir -p data/logs
chown -R 1000 data
# E.L.K. 默认使用 uid 为 1000的用户运行

第六步:启动应用

docker-compose up -d

启动时将首先从 Docker HUB 上下载各模块的镜像文件,然后运行,可能需要等待一段时间。等待系统启动完成后,可以通过下面的地址访问 API 接口:

http://x.x.x.x:8081/swagger-ui.html

或者通过集成的 Kibana 进行可视化查询或展示(Kibana 配置方法示例):

http://x.x.x.x:5601/

集群部署

采用集群部署时,需要根据需要创建各个模块的 docker-compose 配置文件,配置文件中需要调整的主要为环境变量和映射卷,主要配置参数请参考下表:

Elasticsearch

类型 参数名 参数说明
environment discovery.type 单节点模式时需配置为 single-node
volumes /usr/share/elasticsearch/data Elasticsearch 数据目录
volumes /usr/share/elasticsearch/logs Elasticsearch 日志目录
port 9200 对外开放的 ES 端口,仅集群模式下主节点需要配置

Logstash

类型 参数名 参数说明
environment ELASTICSEARCH_URL ES 服务器地址:端口
environment ELASTICSEARCH_INDEX ES 索引前缀,系统会自动在后面追加 “-yyyyMMdd”,不建议修改
environment INNER_IP_LIST 用于定义企业的内部IP地址,支持地址段和地址,多个以逗号分隔,不允许出现空格
volumes /usr/share/logstash/data Logstash 数据目录
volumes /usr/share/logstash/logs Logstash 日志目录

Kibana

类型 参数名 参数说明
environment ELASTICSEARCH_HOSTS ES 服务器 URL,示例:http://127.0.0.1:9200
environment I18N_LOCALE Kibana 使用的界面语言
volumes /usr/share/kibana/data Kibana 数据目录
volumes /usr/share/kibana/logs Kibana 日志目录
port 5601 对外开放的 Kibana 端口

Passets-Sensor

类型 参数名 参数说明
environment interface 流量采集网口编号,与宿主机相同,例如:eth0、ens160等
environment ip Logstash 服务器地址(只有集群模式才需要修改)
environment port Logstash 服务器接收数据的端口
environment tag 记录标识,分布式场景下用于识别数据来自哪个采集模块
environment cache 采集器缓存的已处理记录数,缓存时间120秒,先进先出
environment timeout 采集器内存回收超时时间,超过指定的时间,采集器自动回收内存
environment debug 调试模式开关,生产环境禁用,将产生大量输出

Passets-Filter

类型 参数名 参数说明
environment ELASTICSEARCH_URL ES 服务器地址:端口
environment ELASTICSEARCH_INDEX ES 索引前缀,需与Logstash配置保持一致
environment THREADS 清洗线程数,默认10,建议不超过20
environment RANGE 首次处理数据的时间提前量,单位分钟,默认15
environment BATCH_SIZE 每线程单次处理的数据条数,默认20条
environment CACHE_SIZE 清洗模块缓存的已处理记录数,默认1024
environment CACHE_TTL 清洗模块缓存的过期时间,单位秒,默认600
environment MODE 工作模式:1-主节点,0-从节点,默认为1
environment DEBUG 调试模式开关,0以上整数,生产环境禁用
volumes /opt/filter/rules/ Wappalyzer、NMAP指纹库文件
volumes /opt/filter/config/plugin.yml 清洗插件配置,控制插件的启用和关闭,可不配置此项

Passets-Api

类型 参数名 参数说明
environment ELASTICSEARCH_URL ES 服务器地址:端口
environment ELASTICSEARCH_INDEX ES 索引前缀,需与Logstash配置保持一致
environment SECRET API 认证密钥,任意不含空格的字符串,该密钥用于填充 API 模块的 X-Auth-Secret 参数,实现 API 访问认证
port 8080 对外开放的 API 端口

此处仅列出了与各模块正常运行密切相关的一些配置参数,实际配置中还有一些跟容器相关的参数需要配置,例如: network、restart、depends_on、container_name、image等,请参考 docker-compose 配置文件根据实际情况进行配置。

帮助文档

详细配置说明参见 docs 目录中的文档。

目录结构

├─ docker-compose.yml        # docker-compose 配置文件(X86_64)
├─ config                    # 配置文件
│  ├─ kibana.ndjson          # Kibana 配置文件
│  └─ plugin.yml             # 数据清洗模块配置文件
├─ docs                      # 文档
│  └─ ... ...
├─ rules                     # 指纹库
│  ├─ apps.json              # Wappalyzer 开源Web指纹库
│  └─ nmap-service-probes    # NMAP 指纹库
└─data                       # 容器数据目录,需自行创建
   ├─ elasticsearch          # Elasticsearch 数据
   ├─ logstash               # Logstash 数据
   ├─ kibana                 # Kibana 数据
   └─ logs                   # E.L.K 日志

链接

About

Passets 是一套开源的被动资产识别框架。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages