suricata-4.1.4(二)基于lua脚本实现IP地址及端口号的白名单检测

实验说明

  1. 提前准备好测试用pcap文件,存放在/root/area2pcap目录下
[root@localhost area2pcap]# pwd
/root/area2pcap
[root@localhost area2pcap]# ls
train_area2_00000_20210104202426.pcap  train_area2_00076_20210104205411.pcap  train_area2_00152_20210104210529.pcap
train_area2_00001_20210104202441.pcap  train_area2_00077_20210104205419.pcap  train_area2_00153_20210104210536.pcap
train_area2_00002_20210104202459.pcap  train_area2_00078_20210104205428.pcap  train_area2_00154_20210104210542.pcap
train_area2_00003_20210104202522.pcap  train_area2_00079_20210104205436.pcap  train_area2_00155_20210104210549.pcap
train_area2_00004_20210104202549.pcap  train_area2_00080_20210104205444.pcap  train_area2_00156_20210104210557.pcap
train_area2_00005_20210104202619.pcap  train_area2_00081_20210104205451.pcap  train_area2_00157_20210104210605.pcap
train_area2_00006_20210104202649.pcap  train_area2_00082_20210104205457.pcap  train_area2_00158_20210104210614.pcap
train_area2_00007_20210104202714.pcap  train_area2_00083_20210104205504.pcap  train_area2_00159_20210104210623.pcap
train_area2_00008_20210104202748.pcap  train_area2_00084_20210104205514.pcap  train_area2_00160_20210104210632.pcap
train_area2_00009_20210104202815.pcap  train_area2_00085_20210104205523.pcap  train_area2_00161_20210104210640.pcap
train_area2_00010_20210104202903.pcap  train_area2_00086_20210104205534.pcap  train_area2_00162_20210104210647.pcap
train_area2_00011_20210104203043.pcap  train_area2_00087_20210104205547.pcap  train_area2_00163_20210104210653.pcap
train_area2_00012_20210104203219.pcap  train_area2_00088_20210104205601.pcap  train_area2_00164_20210104210659.pcap
  1. 这些pcap文件记录了某集群内部terminal之间的tcp连接数据,每个terminal都有固定的服务端口,terminal的IP地址以及port组成一个白名单。
  2. 但是上述pcap文件中混杂了很多外部IP地址的访问行为,实验目的在于,通过suricata将这些白名单以外的IP以及port过滤出来。具体来说,需要过滤出三类信息:
    • 试图访问内部terminal的白名单外IP(源IP不在白名单内,目的IP却在白名单内)
    • 内部terminal试图访问的白名单外IP(源IP在白名单内,目的IP却不在白名单内)
    • 内部terminal上有哪些端口本不该被访问,却被访问了

环境准备

  1. 已安装suricata,支持lua脚本扩展,本次实验中suricata安装在/home/nsa/suricata/目录下
[root@localhost scripts]# cd /home/nsa/suricata/
[root@localhost suricata]# ll
total 4176
-rw-r--r--   1 root root 4269492 Feb 27 10:25 eve.json
drwxr-xr-x.  2 root root      22 Feb 17 22:45 log
drwxr-xr-x. 15 root root    4096 Feb 17 22:45 suricata-4.1.4
[root@localhost suricata]# pwd
/home/nsa/suricata
[root@localhost suricata]# ls suricata-4.1.4/
aclocal.m4             COPYING      Makefile.in
ChangeLog              depcomp      missing
classification.config  doc          python
compile                ebpf         qa
config.guess           etc          reference.config
config.h               install-sh   rules
config.h.in            libhtp       rust
config.log             libtool      src
config.rpath           LICENSE      stamp-h1
config.status          ltmain.sh    suricata-update
config.sub             lua          suricata.yaml
configure              m4           suricata.yaml.in
configure.ac           Makefile     threshold.config
contrib                Makefile.am
  1. /etc/suricata目录下,存放了suricata.yaml配置文件,以及lua-output文件夹(该文件夹需要手动创建)
[root@localhost ~]# cd /etc/suricata/
[root@localhost suricata]# ll
total 80
drwxr-xr-x. 2 root root    25 Feb 25 17:15 lua-output
-rw-r--r--  1 root root 74745 Feb 26 15:52 suricata.yaml
-rw-r--r--. 1 root root  1644 Feb 17 14:13 threshold.config
  1. suricata.yaml中,修改部分配置,如下所示
classification-file: /var/lib/suricata/update/cache/rules/classification.config
reference-config-file: /var/lib/suricata/update/cache/rules/reference.config
default-log-dir: /home/nsa/suricata
#记录suricata检测结果的eve.json文件存放在上述目录中
default-rule-path: /var/lib/suricata/update/cache/rules
rule-files:
- custom.rules
#自定义规则文件custom.rules,存放在default-rule-path目录下
#classification.config文件,也存放在default-rule-path目录下
- lua:
      enabled: yes
  1. 提前准备好实验用pcap文件
  2. 手动创建目录/var/lib/suricata/update/cache/rules/scripts,并准备terminal IP地址及端口的白名单,将其json文件形式存放在刚刚创建的目录下(terminal.json)。
[root@localhost scripts]# pwd
/var/lib/suricata/update/cache/rules/scripts
[root@localhost scripts]# ll
total 20
-rw-r--r-- 1 root root 508 Feb 25 21:13 abnormal_dst_ip.lua
-rw-r--r-- 1 root root 707 Feb 25 21:00 abnormal_port.lua
-rw-r--r-- 1 root root 508 Feb 25 21:10 abnormal_src_ip.lua
-rw-r--r-- 1 root root  79 Feb 25 18:05 server.json
-rw-r--r-- 1 root root 124 Feb 25 21:04 terminal.json
[root@localhost scripts]# cat terminal.json 
{"ip":"10.79.10.87","port":[]}
{"ip":"10.79.59.247","port":[]}
{"ip":"10.79.39.8","port":[]}
{"ip":"10.79.39.9","port":[]}

编写自定义规则

#以第一类信息为样例进行说明,也即试图访问内部terminal的白名单外IP(源IP不在白名单内,目的IP却在白名单内)
cd /var/lib/suricata/update/cache/rules/
vi custom.rules
#编辑内容如下
alert tcp any any -> $HOME_NET any (msg:"Suspicious external IP trying to access internal service terminal"; lua:scripts/abnormal_src_ip.lua; sid:20210225; rev:1; classtype:src-ip-violation;)
#在自定义的规则中,lua:scripts/*.lua的方式嵌入自定义的lua脚本

修改classification文件

[root@localhost rules]# pwd
/var/lib/suricata/update/cache/rules
[root@localhost rules]# vi classification.config 
#在该文件最后追加一行,内容如下
config classification: src-ip-violation, IP_VIOLATION,1

编写自定义脚本

[root@localhost scripts]# pwd
/var/lib/suricata/update/cache/rules/scripts
[root@localhost scripts]# vi abnormal_src_ip.lua 
#编辑内容如下
function init(args)
  local needs = {}
  needs["packet"] = tostring(true)
  return needs
end

function match(args)
  ipver, srcip, dstip, proto, sp, dp = SCPacketTuple()
  local cjson = require("cjson")
  local file = io.open("/var/lib/suricata/update/cache/rules/scripts/terminal.json")
  for line in file:lines()
  do
    local line_json = cjson.decode(line)
    terminal_ip = line_json.ip
    --terminal_port = line_json.port
    if srcip == terminal_ip then return 0 end
  end
  return 1
end

return 0

运行suricata

suricata -c /etc/suricata/suricata.yaml -r area2pcap/*.pcap
#上述指令运行完毕之后,查看eve.json文件,判断是否实现过滤
tail -F /home/nsa/suricata/eve.json
#eve.json文件内容如下:
{"timestamp":"2021-01-04T20:24:41.500337+0800","flow_id":981015779183716,"pcap_cnt":993,"event_type":"alert","src_ip":"10.79.83.55","src_port":9001,"dest_ip":"10.79.69.9","dest_port":36773,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":20210225,"rev":1,"signature":"Suspicious external IP trying to access internal service terminal","category":"IP_VIOLATION","severity":1},"flow":{"pkts_toserver":1,"pkts_toclient":1,"bytes_toserver":74,"bytes_toclient":74,"start":"2021-01-04T20:24:41.494692+0800"},"payload":"","payload_printable":"","stream":0,"packet":"hFsSS6QOZNgU3LtCCABFAAA8AABAADsGkt4KT1M3Ck9FCSMpj6WjLt78HEL\/iqASFqCRlwAAAgQFtAEBCAoAcp+NeD+M3AEDAwA=","packet_info":{"linktype":1}}
# 观察上述检测结果 
#"signature":"Suspicious external IP trying to access internal service terminal"
#"category":"IP_VIOLATION",说明检测到了,试图访问内部terminal的白名单外IP
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容