天之道,利而不害;圣人之道,为而不争。
「曲则全,枉则直,洼则盈,敝则新,少则得,多则惑。」是以圣人抱一为 天下式。不自见,故明;不自是,故彰;不自伐,故有功;不自矜,故长。夫唯 不争,故天下莫能与之争。古之所谓「曲则全」者,岂虚言哉!诚全而归之。
2010年1月14日星期四
《大秦帝国》--一部脑残的魔幻传记
2009年4月12日星期日
flare编译问题
Error: 找不到类型,或者它不是编译时常数: Vector。
或者
Type was not found or was not a compile-time constant: Vector.
这是因为编译时,默认支持的Flash Player的版本是9.0.124。遇到这种错误时,需要修改flex-sdk/frameworks/flex-config.xml,将<target-player>9.0.124</target-player>改为<target-player>10.0.12</target-player>。如果使用flexbuilder,可以通过Project > Properties > Flex Compiler 设置附加编译器参数-target-player=10.0.12。
2009年3月19日星期四
picviz
Picviz是一个平行坐标绘图程序。通过简单的脚本,picviz可以轻松将各种输入数据(tcpdump、syslog、iptables logs、apache logs,等等)形象化,用户可以从中发掘有意思的东西。另外,Picviz还可以帮助用户创建、理解平行坐标图。
Picviz的目标是通过将数据图形化的方式,帮助用户快速分析问题,发现各种因素的关联关系。在安全分析领域,这个程序具备非常好的扩展能力,能够处理百万级的数据。
Picviz使用专用的语言来描述图形,类似于graphviz的图形描述语言。通过一个引擎,能够生成平行坐标图像。另外,Picviz还提供了python语言绑定,用来收集计算过的数据、原始数据,并使用python和qt4实现了一个前端程序。
2009年3月10日星期二
Bro支持的数据类型
Bro ids的策略层分析和检测组件是由一种脚本语言实现的,这种脚本语言主要面向网络连接和流量的处理,支持特定的类型。Bro数据类型系统支持18种数据类型:
- bool:二进制数据;
- count、int,和doublet:统称数字,可以进行数学、逻辑,和对比操作;
- enum:类似于C语言的枚举;
- string,、character:字符串和字符,可以进行对比和查询操作;
- pattern:定义用于模式匹配的正则表达式;
- time、interval:表示绝对时间和时间间隔;
- port:传输层的端口号;
- addr:IP地址;
- net:网络前缀;
- record:一组数据的集合(可能是不同类型),每个数据都有自己的名字;
- table:联合数组;
- set: 标量元组的集合;
- file:一个被写入的硬盘文件;
- function:能够通过一组参数调用,并且有返回值;
- event:事件处理器,事件产生后,通过一组参数进行调用。
bro脚本中的每个变量都必须是上述类型之一。对于大多数类型,有很多方式将变量指定为常量。例如,2.71828是一个双精度类型的常量,80/tcp是一个port类型的常量。
最后,Bro的变量是静态类型,意味着他们的类型是固定的,但即使这样,也可以通过重新指定变量的方式,对其类型进行转换。例如,通过以下操作,整数a能够直接被转换为双精度数字:
local a = 5;
local b = a * .2;
2009年3月9日星期一
bro的事件
什么是事件
在Bro中,事件(event)用于反应特定网络行为。而事件处理引擎是Bro的核心。事件可以针对底层的网络协议,也可以针对应用层协议。
事件处理器
事件处理器从语法上非常接近于函数,两者的不同是事件处理器没有返回值,也不能被调用。事件处理器可以采用如下方式声明:
event ( argument* )
例如:
local eh: event(attack_source: addr, severity: count)
声明了局部变量eh,eh是一个事件处理器类型,有两个参数:attack_source是地址(addr)类型;severity是计数(count)类型。
如果想声明一个有处理代码的事件处理器,语法是:
event handler ( argument ) { statement @code{}}
另外,可以把事件处理器赋值给一个相同类型的变量。
事件产生的方式
事件的产生有以下三种方式:
- 事件引擎产生
当事件引擎检测到一个定义了事件处理器的事件时,会将其放入队列中,等待事件处理器处理。一旦事件引擎处理完当前数据包,会立即调用事件处理器。
- 通过事件语句产生
例如,在策略脚本中使用:
event password_exposed(c, user, password);
事件引擎就会以参数c、user、password调用事件处理器password_exposed。注意:必须已经在调用之前,对password_exposed进行声明,而且参数也必须兼容。
- 通过调度表达式
调度表达式在将来的某个时刻启动事件表达式。例如:
schedule 5 secs { password_exposed(c, user, password) };
表示password_exposed将在5秒之后启动。
事件处理机制
强大的事件模型是bro的核心,通过bro的通讯框架,可以实现事件处理的分布操作,这也是bro入侵检测系统能够分布式部署的基础之一。
将事件检测机制与事件处理机制分离是bro的核心思想之一。事件由bro核心的分析器产生。分析器持续地进行分析操作,一旦看到相关的行为就以异步的方式 出发事件,例如,新建了一个TCP连接,或者看到了HTTP请求的URL。Bro核心的分析器能够进行广泛的协议分析,例如:TCP、UDP、FTP、 HTTP、ICMP、SMTP、RPM等。不过,为了降低CPU资源的占用,需要注意:只启用分析所需的事件触发。
一旦某个事件触发,事件处理引擎将其投递到策略层。每个Bro阶段都有相关的策略来控制器策略层的行为。这些策略对应于站点的安全策略,由Bro脚 本语言写成。这种语言是一种强类型,函数风格的语言,为网络行为分析提供了大量的数据类型。在策略层还维护着大量状态信息变量,这些变量主要是描述相关的 网络行为。每种事件,都可以定义一种或多种事件处理器进行处理,事件处理器甚至还可以触发新的事件。事件类型由名称和一系列参数组成,可以唯一识别特定的 事件。
2009年3月6日星期五
ossec的新功能--预编译规则之三:对预处理规则的评价
对预处理规则的评价
插件化是很多开源软件采取的,非常流行的扩展方式,例如:
- apache:采用动态共享对象的方式,提供扩展;利用Apache扩展工具(apxs),可以无需重新编译apache,即可加入apache插件;
- nessus:nessus自创了一种叫做nasl的脚本语言来实现差价的扩展,由于其功能的局限,这种语言较受争议;
- nmap:通过NSE(Nmap Script Engine,nmap脚本引擎)实现插件的扩展,使用目前非常流行的lua作为其寄生语言;
- snort:在snort3的代码中,也引入了lua作为扩展语言;
- bro-ids:采用了一种自定义的脚本语言,来扩展对网络流量的处理功能。
与上述开源产品相比,ossec的预处理规则显得非常粗糙,从技术上看,甚至有些画蛇添足,因为:
- ossec的xml规则编写的难度比c语言编写的预处理规则更容易掌握;
- 预处理规则只局限于检测规则,其提供的扩展能力,不见得比在xml规则中定义正则表达式更强大;
- ossec的预处理规则不具备动态编译部署的能力,加入新的预处理规则,必须重新编译ossec的源代码;
- 由于预处理规则c程序的引入,有可能会给ossec加入新的bug,反而造成ossec的不稳定;
而与上述问题相比,预处理规则只能满足对c语言的偏好,所以前景不会太乐观,除非效法nmap做改进。另外,预处理规则出现的真正原因或许是出于商业的考 虑,因为利用预处理规则,Third Brigade公司可以对某些检测功能封闭源代码,直接编译到其商业版中,不用担心技术的泄露。