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

APISEC安全平台

2.对接Kafka流量消息,做吞吐量优化参数调优。
1.Kafka流量消息,做吞吐量优化参数调优。
生产端
RecordAccumulator(阿q米leite)生产内存池由32m变64m。
batch.size,默认16k。配合linger.ms 10ms ,就是16k一批次发送,最多延迟10ms。
配合linger.ms默认0ms,不进行延迟,即来一条发一条。
默认-1 等待所有的主从节点全部落盘,才去应答。
0 不需要任何落盘应答,直接确认。
1 主节点落盘就直接确认应答。
broker 采用0 1 -1 的应答策略,使用了0。
消费端
fetch.min.bytes 默认1B 设置为 128KB
fetch.max.wait.ms 默认500ms
Max.poll.records 最大拉取批次条数,默认500条,设置为1000条。

3.对接ClickHouse源数据插入,从流量中做源数据抽取,通过内存表高效写入ClickHouse,定义分区策略高效查询数据,定义物化视图聚合计算结果表。

批量写内存表,之后进入mergetree表,将流量按照apiid进行分区,按照createtime进行order排序,我们业务上经常需要根据某个api进行流量查询,先锁定分区块,在进行查询,同时定义好物化视图的结果表,比如按照没分钟每个api的请求流量体大小,去获取到结果表。

4.对接Tdengine数据库的应用研究,将流量数据批量插入Tdengine,定义TagIndex,配合时间窗口流式计算和Python的Sql脚本的做流量分析。

因为ClickHouse的物化视图不好用,Tdengine时序列式数据库更加适合我们这种需要按照时间去分析流量的场景,所以后续将流量数据,按照projectid 和apiid 进行tag分区,同时创建流水窗口计算函数,按照没分钟每个api的请求流量体大小,去获取到结果表。

Python的Sql脚本的做流量分析,查询td和clickHouse,直接在服务上运行脚本,获取敏感词,漏洞,热点api、错误响应状态之类的top 几。

5.自研异常检测算法,如核密度估计(KDE)机器学习基线绘制算法,将访问趋势符合正态分布的API当日访问基线与学习历史基线做对比。格拉布斯(Grubbs)异常检测算法,根据IP日访问次数做异常排查。余弦相似度(Cosine Similarity)算法,识别相似访问的API路径,做路径试探检测。翻页异常检测,识别源IP是否进行了类似爬虫爬取。

基线学习,对于已知服务正太分布规则的api,选定时间范围,绘制出历史的基线,就是一天当中各个秒的访问次数出现的概率。和当前日基线进行对比,查看是否有特别的异常偏离。

格拉布斯(Grubbs)异常检测算法,根据IP日访问次数做异常排查,会计学的异常值剔除算法,去按照每天的访问次数量,剔除异常的数值。
格拉布斯算法基于正态分布的前提,通过计算每个测量值与数据集均值的残差,并与预设的临界值进行比较,从而判断该测量值是否为异常值。

1.计算均值 x_bar
2.计算标准差 s = sqrt[(Σ(xi - x_bar)^2) / (n - 1)]
3.格拉布斯统计量
Gi = abs(xi - x_bar) / (s * sqrt(1 - (1/n)))
4.确定格拉布斯临界值:n=10和α=0.05,临界值G_crit大约是2.2左右。
5.数据点10.0的Gi值将远大于G_crit,因此被判断为异常值。

余弦相似度(Cosine Similarity)算法,相似访问的API路径,做路径试探检测。
cos(θ) = (A·B) / (||A|| ||B||) 1(不相似)到+1(非常相似)
API1:/api/group/v1/2/ip
API2:/api/group/v1/3/pro
②选定向量维度。将两API的子目录名称相加且去重,得到目录名称集合M={api, group, v1, 2, 3, ip, pro},记M的数组大小为s。
③构造向量。构造s维向量,各个维度取值等于M各个元素在API中出现的次数,如api在API1中出现1次,则取值为1,依次法构成向量A=(1,1,1,1,0,1,0),B=(1,1,1,0,1,0,1)。

翻页异常检测,识别源IP是否进行了类似爬虫爬取。

识别api中的翻页遍历的标识,如页号的标识、页码大小的标识。

url成对出现 要么在 reqbody 成对出现, 并且每个应用的分页标识相同,并且都是数字,并且必须包含过1,2。
这样去写代码识别出来。
之后就进来的流量,查看是否是识别出翻页参数的应用,并且根据翻页参数的组合,记录每个ip对每个api的访问组合数,大于30则触发报警。

6.编写静态探针Java-Agent,使用Byte-Buddy字节码增强技术,识别代理Jar包内业务方法的敏感词或直接对SkyWalking做源码修改后进行商用。

配置扫描包路径,之后选择业务分类,启动参数传进去
内置了一个12M的敏感词、还有一系列相关的正则,选择业务分类会按需开启对应的匹配,用字节码技术,匹配出敏感词,skywalking的话,直接打到控制台日志上,普通代理直接 打log。

7.编写定时任务,将流量数据发送至Zap做漏洞检测,结合漏洞PayLoad做国产软件漏洞检测。

Zap就是开源的扫描工具,我们把api访问路径给它,他会自己在路径或者请求体去组装攻击数据,直接发起调用,调用包含的应用,查看响应是否存在漏洞。
漏洞PayLoad做国产软件漏洞检测,我们的网络安全专家已经预置好了国产软件全部的,常见的PayLoad攻击脚本,curl 带着这些PayLoadbody过去,若出现响应带有admin字样,则存在get shell 风险。

8.新老版本迭代,使用DataX做离线数据同步至Tdengine。ck数据送到td,编写配置文件,主要解决ts时间序列问题,使用了mysql的随机时间函数加上我们流量的创建时间秒,一直随机到纳秒。

9.前端全查询接口优化,从代码、Sql和缓存进行优化,配合异步缓存使得接口响应在毫秒级别。
中泰证券,数据量极其大,做了假的异步缓存。

10.客户现场线上问题解决,使用Arthas排查运行Jar线程和内存的异常情况,支持实施部署。

有时候会特别卡,有时候又不卡了。

shell连上客户的 centos,发现cpu确实会每隔大概1分钟,有一瞬间的飙升至90%,使用Arthas 进行持续监控,在cpu达到90时,一瞬间,执行 Thread -n 10 ,打印出当前消耗cpu资源最高的线程的堆栈,发现是一个敏感词的正则匹配的方法堆栈信息。
我检查了代码,代码距离上次修改很久了,测了好几个客户按照道理稳定的功能,我们是累计到200条流量,进行一批次的敏感词正则判断,看了 Pattern pattern = Pattern.compile(regex); 来一条流量就去创建重新创建一个这样的对象,完全不需要,一个正则是固定的,可以重复使用,这是个优化点。但仔细想想这也不会导致cpu,吃紧。
最后发现,去实施的同事,照着操作手册,忘记配置了一步,就是按照当前行业,选择对应的敏感词大类,造成了全量的敏感词规则的匹配,总共有3000多个,造成了一批次匹配时,cpu瞬时彪高。刚需加载了江西电力行业的敏感词也就180多个,就好了。

// 定义要匹配的字符串  
String input = "Hello, I have 123 apples and 456 oranges.";  // 定义正则表达式,这里用于匹配数字  
String regex = "\\d+";  // 编译正则表达式  
Pattern pattern = Pattern.compile(regex);  // 创建 Matcher 对象来执行匹配操作  
Matcher matcher = pattern.matcher(input);  // 查找所有匹配项并打印它们  
while (matcher.find()) {  System.out.println("Found value: " + matcher.group());  
} 
http://www.dtcms.com/a/269971.html

相关文章:

  • 嵌入式学习笔记-MCU阶段-DAY01
  • WPF之命令
  • 使用elasticdump高效备份与恢复Elasticsearch数据
  • WebSocket详细教程 - SpringBoot实战指南
  • EPLAN 电气制图(四):EPLAN 总电源电路设计知识详解
  • mit6.5840-lab3-3D-SnapShot-25Summer
  • 常见前端开发问题的解决办法
  • 深度学习——神经网络1
  • JK触发器Multisim电路仿真——硬件工程师笔记
  • HMI安全设计规范:ISO 26262合规的功能安全实现路径
  • python2.7/lib-dynload/_ssl.so: undefined symbol: sk_pop_free
  • 查询依赖冲突工具maven Helper
  • 常见的网络攻击方式及防御措施
  • 人工智能与人工智障———仙盟创梦IDE
  • Go HTTP 调用(上)
  • LeetCode 1248.统计优美子数组
  • cocos2dx3.x项目升级到xcode15以上的iconv与duplicate symbols报错问题
  • 云原生时代的日志管理:ELK、Loki、Fluentd 如何选型?
  • C++11 算法详解:std::copy_if 与 std::copy_n
  • UVC(USB Video Class,USB 视频类)协议
  • 代码详细注释:ARM-Linux字符设备驱动开发案例:LCD汉字输出改进建议开发板断电重启还能显示汉字,显示汉字位置自定义
  • 高版本的MacOS如何降级?
  • 数据库|达梦DM数据库配置实例步骤
  • npm 包 scheduler 介绍
  • 黑马点评系列问题之P37商户点评缓存作业,用了string和list两种方法,可以直接复制粘贴
  • K8s-配置管理
  • 【web安全】SQLMap 参数深度解析:--risk 与 --level 详解
  • linux网络编程之IO多路复用模型
  • 车载以太网-TC8测试-UT(Upper Tester)
  • Redis 缓存进阶篇,缓存真实数据和缓存文件指针最佳实现?如何选择?