bro(zeek)http全流量数据获取及kafka数据同步

admin 2022年6月7日23:16:52安全闲碎评论7 views11485字阅读38分17秒阅读模式

No.1

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


No.2

前言

本文讲解bro安装及配置http全流量数据方法,以及将数据发送至kafka,方便后期的分析及开发,bro同步数据到kafka需要安装metron-bro-plugin-kafka插件,安装方法及步骤文中都有说明。


No.3

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


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。

bro(zeek)http全流量数据获取及kafka数据同步


No.4

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

bro(zeek)http全流量数据获取及kafka数据同步


  • 开机启动配置

加入系统服务:
新建文件/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


No.5

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实际地址


No.6

数据说明

非必要和未知字段可以忽略(因为是原生打印,注释掉的话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":{}}"
    }
}


No.7

字段说明

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:返回包内容,必要字段


No.8

招聘启事

安恒雷神众测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数据同步

专注渗透测试技术

全球最新网络攻击技术

END

bro(zeek)http全流量数据获取及kafka数据同步

原文始发于微信公众号(白帽子):bro(zeek)http全流量数据获取及kafka数据同步

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月7日23:16:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  bro(zeek)http全流量数据获取及kafka数据同步 http://cn-sec.com/archives/1093164.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: