简化snort签名工作的模块

snortsig的Python项目详细描述


Build Status使用 后端的pyparsing。你可以分析来自多个文件的签名, 或者只是通过一根绳子。解析后,可以使用search()方法 检索具有特定属性的签名。

已知错误

  • snortsig目前不能很好地处理逃逸的分号。
  • snortsig目前不能很好地处理引号内的双引号 领域。
  • snortsig无法将签名写回字符串或文件。

示例

从下载的签名副本中获取启用和禁用签名的计数 VRT社区规则集:

In [1]: ss=snortsig.SnortSig()

In [2]: ss.fromFile("community.rules")

In [3]: len(ss.search("0",attribute='disabled'))
Out[3]: 495

In [4]: len(ss.search("1",attribute='disabled'))
Out[4]: 2507

In [5]: len(ss.search("", exact=False))
Out[5]: 3002

哪些签名是不可分割的?

In [11]: ss.unparsed()
Out[11]:
['# alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"SERVER-IIS Al
ternate Data streams ASP file access attempt"; flow:to_server,established; conte
nt:".asp|3A 3A 24|DATA"; nocase; http_uri; metadata:ruleset community, service h
ttp; reference:bugtraq,149; reference:cve,1999-0278; reference:nessus,10362; ref
erence:url,support.microsoft.com/default.aspx?scid=kb\\;EN-US\\;q188806; classty
pe:web-application-attack; sid:975; rev:26;)',
 '']

在所有启用的签名中,哪些类类型最常见?

In [1]: enabled = ss.search("0",attribute='disabled')

In [2]: collections.Counter([e['options']['classtype'][0] for e in enabled])
Out[2]: Counter({'trojan-activity': 451, 'attempted-recon': 27, 'misc-activity'
: 10, 'attempted-admin': 4, 'bad-unknown': 1, 'network-scan': 1, 'unsuccessful-u
ser': 1})

在所有禁用的签名中,哪些类类型最常见?

In [1]: disabled = ss.search("1",attribute='disabled')

In [2]: collections.Counter([e['options']['classtype'][0] for e in disabled])
Out[2]: Counter({'web-application-activity': 479, 'attempted-user': 343, 'attem
pted-recon': 332, 'web-application-attack': 267, 'attempted-admin': 220, 'misc-a
ctivity': 164, 'trojan-activity': 155, 'protocol-command-decode': 112, 'misc-att
ack': 101, 'rpc-portmap-decode': 83, 'attempted-dos': 60, 'policy-violation': 52
, 'bad-unknown': 44, 'shellcode-detect': 26, 'suspicious-login': 16, 'successful
-admin': 9, 'unsuccessful-user': 9, 'network-scan': 6, 'suspicious-filename-dete
ct': 6, 'default-login-attempt': 6, 'system-call-detect': 5, 'successful-recon-l
imited': 4, 'unknown': 2, 'denial-of-service': 2, 'string-detect': 2, 'successfu
l-user': 1, 'non-standard-protocol': 1})

有多少签名使用“itype”属性?

In [1]: len(ss.search("",attribute='itype',exact=False))
Out[1]: 123

如何使用

安装

pip install snortsig

导入

import snortsig

实例化

ss=snortsig.SnortSig()
ss.fromFile("community.rules")
ss.fromFile("emerging-all.rules")
ss.fromString('alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"MALWARE-CNC Sality logo.gif URLs"; flow:to_server,established; content:"/logo.gif?"; fast_pattern:only; http_uri; pcre:"/\x2Flogo\.gif\x3F[0-9a-f]{5,7}=\d{5,7}/Ui"; metadata:policy balanced-ips drop, policy security-ips drop, ruleset community, service http; reference:url,www.microsoft.com/security/portal/Threat/Encyclopedia/Entry.aspx?name=Virus%3aWin32%2fSality.AT; classtype:trojan-activity; sid:24255; rev:3;)')

fromstring(字符串)

分析提供的字符串并提取snort签名

fromfile(文件)

读取提供的文件并将其馈送到fromstring()

getAll()

将所有解析的签名作为签名指令列表返回。

搜索(term,attribute=none,exact=false)

搜索所有导入的签名并返回与 作为签名指令列表进行查询。*术语是要匹配的字符串。* 属性是要搜索的选项或标题的名称。如果属性是 无,搜索所有选项和标题。*精确控制匹配类型, 精确或子串。

例如,使用pcre选项返回所有签名:

search("",attribute="pcre",exact=False)

未解析()

将解析失败的所有签名作为字符串列表返回

使用个人签名

与其创建一个对象来封装单个snort签名,不如 把签名塞进口述里。整个概念应该是 如果您理解snort签名语法,那么很容易理解,但是 是一些不明显的部分:

  • “disabled”键表示存在(1)或不存在(0) 导入时签名前的哈希标记。
  • options键保存所有规则选项。
  • 对于采用修饰符的有效载荷检测选项,修饰符是 按应用选项分组
  • 订单保留
  • 所有值都是列表。其中选项有多个值(或 一个选项有多个实例),列表可以嵌套。 如果选项具有简单的字符串值,则顶级列表包含 一根弦。这样做是为了在 访问数据。

示例签名dict:

{'action': ['alert'],
  'direction': ['->'],
  'disabled': ['1'],
  'dst': ['$SMTP_SERVERS'],
  'dst_port': ['25'],
  'options': {'classtype': ['attempted-admin'],
   'content': ['|EB|E|EB| [|FC|3|C9 B1 82 8B F3 80|+',
    ['fast_pattern', 'only']],
   'flow': ['to_server', 'established'],
   'metadata': [['ruleset', 'community'], ['service', 'smtp']],
   'msg': ['SERVER-MAIL x86 windows MailMax overflow'],
   'reference': [['bugtraq', '2312'], ['cve', '1999-0404']],
   'rev': ['13'],
   'sid': ['310']},
  'protocol': ['tcp'],
  'src': ['$EXTERNAL_NET'],
  'src_port': ['any']}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java迭代图形框架聚合达到内存限制的消息   反编译和开发人员向Android应用程序提供java安全密钥   活页夹中的java Vaadin上传组件,例如Crud编辑器   java如何定义0090当我有了每个字符   带有AOP的java截取私有注释方法   在Java中暂停并恢复动画(thread.sleep)   java在JavaFX中从不同的控制器向TableView添加行   java如何通过Spring使用脚本初始化inmemory HSQLDB   windows找到了绝对的java。通过编程从java代码获取exe路径   Java同步、信号量和队列的多线程性能   java异步任务回调未调用   java在迷宫中用坐标寻找最短路径   Java:并行处理数组,查找发生异常的位置   java我无法理解我收到的错误   如何调用。bat文件,并使用java中的ProcessBuilder发送字符串   java在mysql数据库中插入日期   将ArrayList的内容显示为格式正确的JSON for Java REST API   java@OneToMany注释SQLSyntaxErrorException:ORA000904无效标识符