声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
前言
本文讲解bro安装及配置http全流量数据方法,以及将数据发送至kafka,方便后期的分析及开发,bro同步数据到kafka需要安装metron-bro-plugin-kafka插件,安装方法及步骤文中都有说明。
Bro介绍
Bro是一个目前比较活跃的开源NIDS系统,现改名为zeek。在这里主要作用是获取http流量。
-
安装
安装依赖包:sudo yum install cmake make gcc gcc-c++ flex bison libpcap-devel openssl-devel python-devel swig zlib-devel
下载项目:wget -c https://xxx.com/zeek/zeek/releases/download/v3.0.1/zeek-3.0.1.tar.gz
编译:./configure && make && sudo make install
项目路径:/usr/local/zeek
添加环境变量:修改 /etc/profile 文件,在文件末尾加上如下两行代码
PATH=$PATH:/usr/local/zeek/bin
export PATH
最后执行命令 source /etc/profile 使其生效。
-
本地监听配置
此处需要修改interface为需要监听的网卡,以监听网卡中的数据。
修改/usr/local/zeek/etc/node.cfg文件中的配置,如下:
[zeek]
type=standalone
host=localhost
interface=ens32 #监听网卡
-
监控对象配置
此次需要添加或修改监听对象。
修改/usr/local/zeek/etc/network.cfg文件中的配置,如:
10.0.0.0/8 Private IP spac
-
Zeek命令
zeekctl install #安装
zeekctl start #启动
zeekctl deploy #部署
注意:修改相关文件或配置需要执行zeekcctl deploy命令
-
开机启动配置
新建/usr/lib/systemd/system/zeekctl.service,文件内容:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/zeek/bin/zeekctl start
ExecReload=/usr/local/zeek/bin/zeekctl restart
ExecStop=/usr/local/zeek/bin/zeekctl stop
ExecDeploy=/usr/local/zeek/bin/zeekctl deploy
PrivateTmp=true
[Install]
WantedBy=multi-user.target
设置开机启动systemctl enable zeekctl.service
-
发送数据配置
新建/usr/local/zeek/share/zeek/site/kafka.zeek:
文件内容:
@load /usr/local/zeek/lib/zeek/plugins/APACHE_KAFKA/scripts/Apache/Kafka/logs-to-kafka.bro
redef Kafka::topic_name = "test"; #kafka topic name
redef Kafka::tag_json = T;
redef Kafka::logs_to_send = set(Conn::LOG, HTTP::LOG, DNS::LOG, SSH::LOG); #此处可根据需要配置日志
redef Kafka::kafka_conf = table(["metadata.broker.list"] = "localhost:9092"); #此处为kafka地址
在/usr/local/zeek/share/zeek/site/local.zeek文件末尾插入:@load ./kafka
-
request_body配置
新建/usr/local/zeek/share/zeek/base/protocols/http/request.zeek文件,文件内容:
##! This script reassembles full HTTP bodies and raises an event with the
##! complete contents.
module HTTP;
export {
redef record Info += {
request_body: string &log &optional;
};
}
## Users write a handler for this event to process the current HTTP body.
event http_entity_data(c: connection , is_orig: bool , length: count , data: string ) &priority=5
{
set_state(c,is_orig);
if(is_orig)
{
c$http$request_body = data;
}
}
在__load__.zeek文件中添加:@load ./request
-
所有http_header配置
新建/usr/local/zeek/share/zeek/base/protocols/http/header-all.zeek,文件内容:
module HTTP;
export {
redef record Info += {
request_header: vector of string &log &optional;
response_header: vector of string &log &optional;
};
option log_request_header = T;
option log_response_header = T;
}
event http_header(c: connection, is_orig: bool, name: string, value: string) &priority=5
{
if ( ! c?$http )
return;
if ( is_orig )
{
if ( log_request_header )
{
if ( ! c$http?$request_header )
c$http$request_header = vector();
c$http$request_header += name;
c$http$request_header += value;
}
}
else
{
if ( log_response_header )
{
if ( ! c$http?$response_header )
c$http$response_header = vector();
c$http$response_header += name;
c$http$response_header += value;
}
}
}
在__load__.zeek文件中添加:@load ./header-all
-
response配置
新建/usr/local/zeek/share/zeek/base/protocols/http/response.zeek文件内容:
module HTTP;
export {
redef record Info += {
response_body: string &log &optional;
};
## Flag that indicates whether to hook reply bodies.
const hook_reply_bodies = T &redef;
}
## Users write a handler for this event to process the current HTTP body.
event http_begin_entity(c: connection, is_orig: bool)
{
if ( (is_orig) || (! is_orig && ! hook_reply_bodies) )
return;
c$http$response_body= "";
}
event http_entity_data(c: connection, is_orig: bool, length: count,
data: string) &priority=5
{
if ( ! c$http?$response_body)
return;
c$http$response_body += data;
}
在__load__.zeek文件中添加:@load ./response
-
手动同步命令
zeek -r xxx.trace local #提取wireshark和tcpdump日志发送给kafka。
Kakfa
主要作用:接收和消费http数据
-
安装
下载:wget -c http://mirror.bit.edu.cn/apache/kafka/2.4.0/kafka_2.13-2.4.0.tgz
安装路径:/home/scanner-dev/kafka_2.13-2.4.0
启动Zookeeper:bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
启动Kafka服务:nohup bin/kafka-server-start.sh config/server.properties &
创建topic:
使用kafka-topics.sh 创建单分区单副本的topic test
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看bro同步kafka的数据:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
-
开机启动配置
加入系统服务:
新建文件/usr/lib/systemd/system/kafka.service,文件内容:
[Unit]
Description=kafka
After=network.target remote-fs.target nss-lookup.target zookeeper.service
[Service]
Type=forking
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/" #此处需要注意修改jdk安装路径
ExecStart=/home/scanner-dev/kafka_2.13-2.4.0/bin/kafka-server-start.sh -daemon /home/scanner-dev/kafka_2.13-2.4.0/config/server.properties
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/home/scanner-dev/kafka_2.13-2.4.0/bin/kafka-server-stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
设置开机启动systemctl enable kafka.service
metron-bro-plugin-kafka插件
项目地址:https://xxx.com/apache/metron-bro-plugin-kafka 在这里主要作用是将http流量以json方式发送给kakfa。
-
安装
安装依赖:yum install librdkafka-devel
下载项目:wget -c https://xxx.com/apache/metron-bro-plugin-kafka/archive/0.3.tar.gz
编译:./configure --bro-dist=/home/scanner-dev/zeek-3.0.1 && make && sudo make install
执行命令:/usr/local/zeek/bin/zeek -N Apache::Kafka
修改:/usr/local/zeek/lib/zeek/plugins/APACHE_KAFKA/scripts/init.bro里的["metadata.broker.list"] = "localhost:9092"为kafka实际地址
数据说明
非必要和未知字段可以忽略(因为是原生打印,注释掉的话bro会报错,没去深入研究),必要字段是我们需要传输或者利用的数据字段,后期可能会有其他http头被打印出来,忽略即可,只提取request_header里的内容即可。
{
"http": {
"id.orig_h": "192.168.110.193",
"id.orig_p": 54533,
"id.resp_h": "192.168.110.211",
"id.resp_p": 8090,
"trans_depth": 1,
"method": "POST",
"host": "192.168.110.211",
"referrer": "http://192.168.110.211:8090/display/SPC/CTF",
"version": "1.1",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"origin": "http://192.168.110.211:8090",
"request_body_len": 250,
"response_body_len": 682,
"status_code": 200,
"status_msg": "OK",
"tags": [],
"orig_fuids": ["FbTLi42vdSGsVIZYwa"],
"orig_mime_types": ["text/json"],
"resp_fuids": ["Fm2ZSY1wzci1LhQ9K3"],
"resp_mime_types": ["text/json"],
"request_body": "{"r":["com.atlassian.plugins.atlassian-nps-plugin:nps-acknowledgement-flag-resources-async"],"c":[],"xc":["_super","baseurl-checker-resource","atl.confluence.plugins.pagetree-desktop","main","viewcontent","page","atl.general","atl.comments"],"xr":[]}",
"request_header": ["HOST", "192.168.110.211:8090", "CONNECTION", "keep-alive", "CONTENT-LENGTH", "250", "ACCEPT", "application/json, text/javascript, */*; q=0.01", "ORIGIN", "http://192.168.110.211:8090", "X-REQUESTED-WITH", "XMLHttpRequest", "USER-AGENT", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "CONTENT-TYPE", "application/json", "REFERER", "http://192.168.110.211:8090/display/SPC/CTF", "ACCEPT-ENCODING", "gzip, deflate", "ACCEPT-LANGUAGE", "zh-CN,zh;q=0.9", "COOKIE", "seraph.confluence=360470%3A309e271bae52b91ae630ab3721c80cd83612192c; JSESSIONID=02F99D22B5CDA2C240CA547FD9D77FD1; mywork.tab.tasks=false"],
"response_header": ["SERVER", "Apache-Coyote/1.1", "X-ASEN", "YOU MAKE ME A SAD PANDA.", "X-SERAPH-LOGINREASON", "OK", "X-AUSERNAME", "admin", "X-CONTENT-TYPE-OPTIONS", "nosniff", "CONTENT-ENCODING", "gzip", "VARY", "User-Agent", "CONTENT-TYPE", "application/json", "TRANSFER-ENCODING", "chunked", "DATE", "Thu, 19 Dec 2019 07:58:41 GMT"],
"response_body": "{"resources":[{"url":"/s/d41d8cd98f00b204e9800998ecf8427e-CDN/zh_CN/7601/d9a7d86ddd6172b1b5a38b9e600c8b90c362def3/3.1.27/_/download/batch/com.atlassian.plugins.atlassian-nps-plugin:nps-util/com.atlassian.plugins.atlassian-nps-plugin:nps-util.js","resourceType":"JAVASCRIPT","ieOnly":false},{"url":"/s/efb0c487163c166b9fe8a3357bec90cd-CDN/zh_CN/7601/d9a7d86ddd6172b1b5a38b9e600c8b90c362def3/3.1.27/_/download/batch/com.atlassian.plugins.atlassian-nps-plugin:nps-acknowledgement-flag-resources-async/com.atlassian.plugins.atlassian-nps-plugin:nps-acknowledgement-flag-resources-async.js?locale=zh-CN","resourceType":"JAVASCRIPT","ieOnly":false}],"unparsedData":{},"unparsedErrors":{}}"
}
}
字段说明
id.orig_h:原IP,非必要字段
id.orig_p:原端口,非必要字段
id.resp_h:目标IP,非必要字段
id.resp_p:目标端口,非必要字段
trans_depth:未知字段
method:请求方法,必要字段
host:请求包host,非必要字段
referrer:请求包referrer,非必要字段
version:请求包协议版本,非必要字段
user_agent:请求包user_agent,非必要字段
origin:请求包origin,非必要字段
request_body_len:请求体长度,非必要字段
response_body_len:返回体长度,非必要字段
status_code:http状态码,必要字段
status_msg:未知字段
tags:未知字段
orig_fuids:未知字段
orig_mime_types:未知字段
resp_fuids:未知字段
resp_mime_types:未知字段
request_body:请求体内容,必要字段
request_header:所有请求头,必要字段
response_header:所有返回头,必要字段
response_body:返回包内容,必要字段
招聘启事
安恒雷神众测SRC运营(实习生)
————————
【职责描述】
1. 负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2. 负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3. 参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4. 积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5. 积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。
【任职要求】
1. 责任心强,性格活泼,具备良好的人际交往能力;
2. 对网络安全感兴趣,对行业有基本了解;
3. 良好的文案写作能力和活动组织协调能力;
4. 具备美术功底、懂得设计美化。
简历投递至 [email protected]
设计师
————————
【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。
【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;
【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽
简历投递至 [email protected]
安全招聘
————————
公司:安恒信息
岗位:Web安全 安全研究员
部门:安恒战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京
工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…
【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案
【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)
【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;
岗位:安全红队武器自动化工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)
【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。
【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。
【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。
简历投递至 [email protected]
红队武器化Golang开发工程师
————————
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)
【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。
【岗位要求】
1.掌握C/C++/Java/Go/Python/JavaScript等至少一门语言作为主要开发语言;
2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉MySQL、Redis、MongoDB等主流数据库结构的设计,有独立部署调优经验;
3.了解docker,能进行简单的项目部署;
3.熟悉常见web漏洞原理,并能写出对应的利用工具;
4.熟悉TCP/IP协议的基本运作原理;
5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。
【加分项】
1.有高并发tcp服务、分布式、消息队列等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。
简历投递至 [email protected]
专注渗透测试技术
全球最新网络攻击技术
原文始发于微信公众号(白帽子):bro(zeek)http全流量数据获取及kafka数据同步
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论