当前位置: 首页 > news >正文

开源Scout攻击检测工具

开源Scout攻击检测工具

1 概述

Scout是一个攻击检测工具,它在受到如CC、压测工具、syn flood、udp flood等拒绝服务攻击时,能进实时检测和告警。同时支持配置防火墙的封锁,也可以通过调用脚本做一些其它的处理。本工具实际上在原来Dshield工具上重构而来的,但实现的方式与原来完全不一样。本次方案是以调用libcap数据包捕获的开源函数库来收集,经过适配器的所有数据,然后将数据进行实时分析。
本工具集成了一个用于缓存数据的软件(目前是mongodb),你不用额外去安装它,工具里已经打包集成了,直接通过工具命令来启动就行。
按照原来的架构规划,Scout是一个分布式的预警平台,由于时间精力原因,目前只做了一个单机试版本。后面有精力会重写成分布架构,独立开发一个中央管理后台,来管理所有在主机上跑的Scout客户端。可以通过中央后台分发策略文件,支持线上配置、线上查询分析数据、控制Scout客户端、集中告警等。
//架构图: //

PS:本次仅实现了Scout客户端部分。
2 运行环境

  • 支持 Centos6、Centos7
  • 支持 Ubuntu14.04、Ubuntu16.04 (新增)
  • 添加 grafana 展示插件 (新增)
  • 使用root特权运行
  • 注意下载对应的版本

    3 安装Scout

PS:由于github上传最大限制25M,在上面bin目录中缺少cacheServer可执行文件,直接clone上面代码没法运行。
1)解压到指定目录

  • Centos6/7:
wget https://github.com/ywjt/Scout/releases/download/v0.1.0-alpha/Scout_v0.1.0-alpha.tar.gz tar zxvf Scout_v0.1.0-alpha.tar.gz -C /usr/local/
  • Ubuntu14.04/16.04:
https://github.com/ywjt/Scout/releases/download/v0.1.0-alpha_ubuntu/Scout_v0.1.0-alpha_ubuntu.tar.gz tar zxvf Scout_v0.1.0-alpha_ubuntu.tar.gz -C /usr/local/

2)设置软连接

ln -s /usr/local/scout/conf /etc/scout.d ln -s /usr/local/scout/bin/* /usr/local/bin/

如果是 Centos7:

ln -s /usr/lib64/libsasl2.so.3.0.0 /usr/lib64/libsasl2.so.2

3)初始化缓存目录

Scoutd init

这一步在新安装时要做,还有如果全局配置文件里改变了storage/_type缓存类型,也需要重新初始化。重新初始化会清除缓存数据。修改/etc/scout.d/scoutd.conf 的 listen/_ip =“”,然后可以启动了。
4)启动Scout

Scoutd start Scoutd version

PS:确保你的系统已安装iptables 防火墙,本工具默认使用iptables,否则无法实现封禁操作。当然你也可以在策略文件中关闭它。如果是Ubuntu请额外安装支持iptables,然后把UFW关闭。
5)可以查看运行状态

Scoutd status Scoutd dstat

6)可以监听日志输出

Scoutd watch

7)其它使用帮助

Scoutd help Usage: Scoutd Options: init creating and initializing a new cache partition. start start all service. stop stop main proccess, cacheserver keep running. restart restart main proccess, cacheserver keep running. reload same as restart. forcestop stop all service, include cacheserver and main proccess. reservice restart cacheserver and main proccess. status show main proccess run infomation. dstat show generating system resource statistics. view check block/unblock infomation. watch same as tailf, watching log output. help show this usage information. version show version information.

4 配置Scout

配置文件有两种:
全局启动配置:scoutd.conf 预警策略配置:支持yaml、json格式,语法不能有错,暂时没有做过多的语法校验。已内置了3个策略模板。路径:/etc/scout.d/
全局配置说明:

#日志输出等级,选项:DEBUG,INFO,WARNING,ERROR,CRITICAL log_level = "INFO" #本机监听,填写本机所有通信IP,不要填0.0.0.0 listen_ip = "10.10.0.4,114.114.114.114" # 信任IP列表,支持CIRD格式 trust_ip = "10.10.10.0/24,172.16.0.0/16" # 监听适配器,如果是多网口,请填写'any',否则填'eth0|eth1|em0|em1...' motr_interface = "eth0" # 监听端口,可以多个 如: "443,80,8080" motr_port = "80,443,53" # 捕获数据包的最大字节数, 相当于buffer_timeout时间内的缓冲区 max_bytes = 65536 # 定义适配器是否必须进入混杂模式 # 关于混杂模式,如果启用则会把任何流过网口的数据都会捕获,这样会产生很多杂乱的数据 # 要精准捕获由外网流入的数据, 建议设为 False promiscuous = False # 缓冲区超时时间,单位是毫秒,一般设1000ms即可 # 当捕获程序在设定的超时周期内返回一次数据集 buffer_timeout = 1000 # 自动删除缓存记录的存活时间,单位秒 # 默认: 86400 (1 days) expire_after_seconds = 86400 # 缓存数据的方式,可选:'Memory' 或 'Disk' # Memory 内存方式,若服务关闭数据会被重置,检测效率高,准确性高 # Disk 磁盘方式,数据会被持久化,检测效率低,需要通过提高策略阀值达到预警 # 不支持动态切换,如果首次启动后,切换缓存方式,需要重新初始化缓存服务,执行 Scoutd init storage_type = 'Memory' # 限制内存使用大小,最小1G # 不配置默认为可用系统内存的一半,配置不能有小数点 storage_size = 1

策略配置说明:

Bolt Fields

上述列出的Field可以用于策略文件的编写,要怎么实现查询想要的数据,就需要自行构造了。策略文件的filter模块始终都是以类似SQL的聚合查询语法来执行。

SELECT count({Field}) AS total , {Field} FROM TCP WHERE (time >= 1573110114 AND time <= 1573110144) AND ... GROUP BY {Field} HAVING count({Field}) > 100

策略文件例子

name: "CC attack check" #策略名称 desc: "" #简单描述一下 ctime: "Thu Oct 24 17:48:11 CST 2019" #创建时间 # 缓存表,目前只有TCP、UDP两个表,实际上是指定分析的数据源 bolt: "TCP" # 过滤器,类似于SQL查询 # ''' # SELECT count(src) AS total , src # FROM TCP # WHERE dport IN (80, 443) # AND (time >= 1573110114 AND time <= 1573110144) # AND src NOT IN ('127.0.0.1', '10.10.0.4', '114.114.114.114') # GROUP BY src # HAVING count(src) > 100 # ''' # 返回:{u'total': 121, u'_id': u'115.115.115.115'} # filter: timeDelta: 30 #时间区间, Seconds. trustIps: #排除src白名单,列表 - 127.0.0.1 - 10.10.0.4 - 114.114.114.114 motrPort: #过滤端口,列表 - 80 - 443 motrProto: "TCP" #过滤协议,TCP或UDP(暂时没有区分更细的协议名,如http、https、ssh、ftp、dns等) flags: "" #TCP握手的状态 (常见syn、ack、psh、fin) noOfConnections: 100 #聚合的阀值,结合noOfCondition|returnFiled,如group by src having count(src) $gte 1000 noOfCondition: "$gte" #聚合阀值条件, 如$ge/$gt/$gte/$lt/$lte returnFiled: "src" #聚合的字段名, blot表里必须存在 # 执行模块 block: action: true #是否封禁 expire: 300 #封禁时间,Seconds. iptables: true #默认是用防火墙封禁,如果自定义脚本,这里设为false,如果为true,blkcmd/ubkcmd则为空,否则填了也不会生效 blkcmd: "" #锁定时执行,传参为 returnFiled 列表值(你可以用脚本来扩展,注意执行权限) ubkcmd: "" #解锁时执行,传参为 returnFiled 列表值(你可以用脚本来扩展,注意执行权限) # 通知模块 notice: send: true #是否发送 email: - 350311204@qq.com #接收人邮箱,列表

5 安装grafana插件(可选)

参考文档:https://github.com/ywjt/Scout/tree/master/plugin
下载直接运行 Scout/_plugin 即可,建议放到 Scout目录里。

wget https://github.com/ywjt/Scout/releases/download/v0.1.0-alpha_plugin/Scout_plugin_for_grfana_server.tar.gz mkdir /usr/local/scout/plugin tar zxvf Scout_plugin_for_grfana_server.tar.gz -C /usr/local/scout/ ln -s /usr/local/scout/plugin/Scout_plugin /usr/local/bin/ nohup /usr/local/bin/Scout_plugin > /var/log/scout/scout_pulgin.log &

安装 grafana server 6.4.4

  • Ubuntu & Debian
wget https://dl.grafana.com/oss/release/grafana_6.4.4_amd64.deb sudo dpkg -i grafana_6.4.4_amd64.deb
  • Redhat & Centos
wget https://dl.grafana.com/oss/release/grafana-6.4.4-1.x86_64.rpm sudo yum localinstall grafana-6.4.4-1.x86_64.rpm

启动 grafana server

service grafana-server start

打开Web界面 http://IP:3000/ 帐号 admin 密码 admin
导入模板

  • 安装 grafana-simple-json-datasource 插件
sudo grafana-cli plugins install grafana-simple-json-datasource sudo service grafana-server restart

后台配置 simple-json
1、添加datasource

2、选择JSON引擎

3、配置JSON引擎接口
这里只需要把URL填入 http://localhost:6667 即可。插件仅允许本地通信,6667端口为固定不可改。

4. 导入JSON模板

Scout_plugin_for_grafana_server.jso


即可看到高大上的WEB UI。如果你熟悉 Grafana,还可以调整一下UI布局,满足个人审美!
关联Grafana的使用,我们早前也有一篇教程《10分钟打造炫酷的监控大屏》。
6 模拟测试

下面使用hping3 工具发起攻击测试,工具自行安装。hping3是一个很全面的网络压测工具。
发起80端口syn半连接请求

hping3 -I eth0 -S 目标IP -p 80 --faster

发起53端口udp flood

hping3 -2 -I eth0 -S 目标IP -p 53 --faster 监听Scout输出

监听Scout输出

[root@host-10-10-0-4 ~]# Scoutd watch logging output ...... 2019-11-07 16:11:27 __init__.py[line:1601] WARNING [LOCK] syn has been blocked, It has 606 packets transmitted to server. 2019-11-07 16:11:28 __init__.py[line:1585] ERROR [MAIL] Send mail failed to: [Errno -2] Name or service not known 2019-11-07 16:11:29 __init__.py[line:1601] WARNING [syn.yaml] {u'total': 606, u'_id': u'syn', 'block': 1} 2019-11-07 16:11:30 __init__.py[line:1601] WARNING [LOCK] 117.*.*.22 has been blocked, It has 861 packets transmitted to server. 2019-11-07 16:11:32 __init__.py[line:1585] ERROR [MAIL] Send mail failed to: [Errno -2] Name or service not known 2019-11-07 16:11:32 __init__.py[line:1601] WARNING [tcp.yaml] {u'total': 861, u'_id': u'117.*.*.22'} 2019-11-07 16:11:36 __init__.py[line:1601] WARNING [LOCK] 117.*.*.25 has been blocked, It has 904 packets transmitted to server. 2019-11-07 16:11:38 __init__.py[line:1585] ERROR [MAIL] Send mail failed to: [Errno -2] Name or service not known 2019-11-07 16:11:39 __init__.py[line:1601] WARNING [udp.yaml] {u'total': 904, u'_id': u'117.*.*.25'} 2019-11-07 16:11:39 __init__.py[line:1601] WARNING [syn.yaml] {u'total': 1765, u'_id': u'syn', 'block': 1} 2019-11-07 16:11:40 __init__.py[line:1601] WARNING [tcp.yaml] {u'total': 1817, u'_id': u'117.*.*.22'} 2019-11-07 16:11:43 __init__.py[line:1601] WARNING [udp.yaml] {u'total': 1806, u'_id': u'117.*.*.25'}

可以发现所有策略文件都被执行了,并达到预警阀值。再查看封锁记录。

[root@host-10-10-0-4 ~]# Scoutd view +------------+----------+-------+------------------------------------------------------------+---------------------+ | _ID | ConfName | Total | Command | Time | +------------+----------+-------+------------------------------------------------------------+---------------------+ | syn | syn | 371 | /opt/notice.sh {u'total': 371, u'_id': u'syn', 'block': 1} | 2019-11-07 16:12:06 | | 117.*.*.22 | tcp | 371 | /sbin/iptables -I INPUT -s 117.*.*.22 -j DROP | 2019-11-07 16:12:06 | | 117.*.*.25 | udp | 604 | /sbin/iptables -I INPUT -s 117.*.*.25 -j DROP | 2019-11-07 16:12:09 | +------------+----------+-------+------------------------------------------------------------+---------------------+

目前Scout的性能还不算很高,如果有大量持续的攻击,CPU占用率稍有些高的,一旦攻击停止占用率就会马上降下来。

[root@host-10-10-0-4 ~]# Scoutd dstat +---------------------+------+------+-------+------+--------------+-----------+-----------+ | Time | 1min | 5min | 15min | %CPU | MemFree(MiB) | Recv(MiB) | Send(MiB) | +---------------------+------+------+-------+------+--------------+-----------+-----------+ | 2019-11-07 16:29:33 | 0.00 | 0.04 | 0.05 | 0.5 | 4307 | 0.002 | 0.002 | | 2019-11-07 16:30:36 | 0.00 | 0.03 | 0.05 | 0.5 | 4258 | 0.000 | 0.000 | | 2019-11-07 16:31:40 | 0.77 | 0.21 | 0.11 | 43.9 | 4291 | 3.754 | 0.001 | | 2019-11-07 16:32:43 | 0.67 | 0.33 | 0.16 | 0.2 | 4300 | 0.000 | 0.000 | +---------------------+------+------+-------+------+--------------+-----------+-----------+

7 About

Scout无法代替商用的防攻击系统,它仅作为一个分析告警和引导防御的方案。在这个框架之上你可以捣蛋很多东西。(当你部署运行后,你会发现每天很多来自不同国家的IP,在扫描你的机器)
Github项目: https://github.com/ywjt/Scout

参考链接 :
运维军团开源Scout攻击检测工具 : https://mp.weixin.qq.com/s/BJ9aocwZT7VPWDS8UYGsdw

《网络安全从零到精通全套学习大礼包》

96节从入门到精通的全套视频教程免费领取

如果你也想通过学网络安全技术去帮助就业和转行,我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。

网络安全学习路线图

想要学习 网络安全,作为新手一定要先按照路线图学习方向不对,努力白费。对于从来没有接触过网络安全的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线,大家跟着这个路线图学习准没错。

配套实战项目/源码

所有视频教程所涉及的实战项目和项目源码

学习电子书籍

学习网络安全必看的书籍和文章的PDF,市面上网络安全书籍确实太多了,这些是我精选出来的

面试真题/经验

以上资料如何领取?

多了,这些是我精选出来的

面试真题/经验

以上资料如何领取?

文章来自网上,侵权请联系博主

http://www.jsqmd.com/news/515695/

相关文章:

  • fifofast:超轻量环形缓冲区宏实现与嵌入式实时优化
  • ELF 1S嵌入式Linux教学平台:从启动流程到WiFi驱动实战
  • AHT20温湿度传感器驱动开发与Qwiic集成指南
  • DAMOYOLO-S惊艳表现:逆光剪影图中对人形轮廓与动作意图的初步判别
  • 英语单词五子棋游戏
  • Lychee Rerank MM详细步骤:重排序结果后处理——多样性重排(MMR)集成
  • Stable Diffusion v1.5 Archive 实测:开箱即用,快速生成高质量AI图片
  • OmenSuperHub:暗影精灵终极控制神器完整使用指南
  • Qwen3.5-9B部署教程:支持HTTP/2+gRPC双协议的高性能服务封装
  • PostgreSQL的UPSERT操作全指南:从CONFLICT约束到高效数据更新
  • 手把手教学:基于PyTorch 2.9镜像,5分钟搞定云端Jupyter开发环境
  • ACM1602NI LCD I²C驱动库详解:嵌入式文本显示解决方案
  • Gazebo新手避坑:从黄黑格子到纯黑地面的完整SDF配置指南
  • Arduino BMI270+BMM150融合驱动库深度解析
  • DeOldify图像上色服务API接口详解:Python客户端调用全指南
  • 嵌入式系统常用数据结构选型与优化实践
  • Qwen3-14B-Int4-AWQ智能体(Agent)开发入门:技能创建与任务规划
  • Unity嵌入式单元测试框架原理与实战
  • 立知多模态重排序模型部署教程:WSL2环境下Windows本地快速体验
  • AI三大流派:符号、连接与行为主义的演进、挑战与协同
  • FPGA选型纠结?从国产V7-690T核心板看高密度信号处理项目的硬件选型要点
  • 嵌入式MCU选型十步法:系统级工程决策指南
  • 此电脑网络位置异常的AD域排错指南的技术文章大纲
  • Nano-Banana实战教程:生成带中英文双语标注的产品结构分解图
  • Nanbeige 4.1-3B惊艳效果展示:粒子特效——发送消息时的金色像素碎屑动画
  • Cosmos-Reason1-7B惊艳输出:视频理解结果附带牛顿定律引用依据
  • HeyGem单个处理模式体验:5分钟制作你的第一个数字人视频
  • 嵌入式代码注释的工程价值与实践规范
  • ollama-QwQ-32B批量处理:OpenClaw自动化生成产品描述
  • ReadyMail:Arduino嵌入式异步RFC合规邮件库