Skip to content
This repository was archived by the owner on Jul 10, 2025. It is now read-only.

Commit 1eaf13b

Browse files
committed
rules: insert header elements into Rule object
- proto - source_addr - source_port - dest_addr - dest_port
1 parent d2988a4 commit 1eaf13b

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

idstools/rule.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,12 @@ class Rule(dict):
6767
disabled (commented)
6868
- **action**: The action of the rule (alert, pass, etc) as a
6969
string
70+
- **proto**: The protocol string of the rule.
71+
- **source_addr**: The source address string of the rule.
72+
- **source_port**: The source ports string of the rule.
7073
- **direction**: The direction string of the rule.
74+
- **dest_addr**: The destination address string of the rule.
75+
- **dest_port**: The destination ports string of the rule.
7176
- **gid**: The gid of the rule as an integer
7277
- **sid**: The sid of the rule as an integer
7378
- **rev**: The revision of the rule as an integer
@@ -84,12 +89,16 @@ class Rule(dict):
8489
:param group: Optional parameter to set the group (filename) of the rule
8590
8691
"""
87-
8892
def __init__(self, enabled=None, action=None, group=None):
8993
dict.__init__(self)
9094
self["enabled"] = enabled
9195
self["action"] = action
96+
self["proto"] = None
97+
self["source_addr"] = None
98+
self["source_port"] = None
9299
self["direction"] = None
100+
self["dest_addr"] = None
101+
self["dest_port"] = None
93102
self["group"] = group
94103
self["gid"] = 1
95104
self["sid"] = None
@@ -216,7 +225,12 @@ def parse(buf, group=None):
216225
# If a decoder rule, the header will be one word.
217226
if len(header.split(" ")) == 1:
218227
action = header
228+
proto = None
229+
source_addr = None
230+
source_port = None
219231
direction = None
232+
dest_addr = None
233+
dest_port = None
220234
else:
221235
states = ["action",
222236
"proto",
@@ -269,8 +283,13 @@ def parse(buf, group=None):
269283
return None
270284

271285
rule = Rule(enabled=enabled, action=action, group=group)
272-
rule["direction"] = direction
273286
rule["header"] = header
287+
rule["proto"] = proto
288+
rule["source_addr"] = source_addr
289+
rule["source_port"] = source_port
290+
rule["direction"] = direction
291+
rule["dest_addr"] = dest_addr
292+
rule["dest_port"] = dest_port
274293

275294
options = m.group("options")
276295

tests/test_rule.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ def test_parse1(self):
4040
rule = idstools.rule.parse("""alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"ET CURRENT_EVENTS Request to .in FakeAV Campaign June 19 2012 exe or zip"; flow:established,to_server; content:"setup."; fast_pattern:only; http_uri; content:".in|0d 0a|"; flowbits:isset,somebit; flowbits:unset,otherbit; http_header; pcre:"/\/[a-f0-9]{16}\/([a-z0-9]{1,3}\/)?setup\.(exe|zip)$/U"; pcre:"/^Host\x3a\s.+\.in\r?$/Hmi"; metadata:stage,hostile_download; reference:url,isc.sans.edu/diary/+Vulnerabilityqueerprocessbrittleness/13501; classtype:trojan-activity; sid:2014929; rev:1;)""")
4141
self.assertEqual(rule.enabled, True)
4242
self.assertEqual(rule.action, "alert")
43+
self.assertEquals(rule.proto, "tcp")
44+
self.assertEquals(rule.proto, "tcp")
45+
self.assertEquals(rule.source_addr, "$HOME_NET")
46+
self.assertEquals(rule.source_port, "any")
4347
self.assertEqual(rule.direction, "->")
48+
self.assertEquals(rule.dest_addr, "$EXTERNAL_NET")
49+
self.assertEquals(rule.dest_port, "$HTTP_PORTS")
4450
self.assertEqual(rule.sid, 2014929)
4551
self.assertEqual(rule.rev, 1)
4652
self.assertEqual(rule.msg, "ET CURRENT_EVENTS Request to .in FakeAV Campaign June 19 2012 exe or zip")

0 commit comments

Comments
 (0)