基于领域相关语言的拒绝服务攻击描述语言设计(3)
时间:2012-01-26 13:37来源:网络(转载) 作者:祝宁 张永福 陈性元 点击:次
arg_decl: | arg_decl_1;? arg_decl_1: identifier|identifier , arg_decl_1? /*语句结构*/? block: { instr_list } | { };? instr_list: instr|instr instr_list? /*语句*/? instr: simple_instr ; |block|if_bloc
arg_decl: | arg_decl_1;?
arg_decl_1: identifier|identifier ′,′ arg_decl_1?
/*语句结构*/?
block: ′{′ instr_list ′}′ | ′{′ ′}′;?
instr_list: instr|instr instr_list?
/*语句*/?
instr: simple_instr ′;′ |block|if_block|loop;?
/*简单语句*/?
simple_instr : aff|post_pre_incr?
|func_call|ret|inc|loc|glob?
|break|continue|/*空语句*/?
/*返回*/?
ret:return expr|return;?
/*If语句*/?
if_block: if ′(′ expr ′)′ instr ?
| if ′(′ expr ′)′ instr else instr;?
/*循环语句*/?
loop: for_loop|while_loop;?
for_loop: for ′(′ aff_func ′;′ expr ′;′ aff_func ′)′ instr;?
while_loop: while ′(′ expr ′)′ instr;?
/*赋值操作*/?
aff_func: aff|post_pre_incr|func_call|/*空*/?
/*赋值语句*/?
aff:value=expr?
|value+=expr?
|value-=expr?
|value*=expr?
|value/=expr?
|value%=expr;?
/*函数调用*/?
func_call: identifier ′(′ arg_list ′)′?
arg_list:arg_list_1?
arg_list_1: arg|arg ′,′ arg_list_1?
arg: expr|identifier ′:′ expr?
string: STRING|STRING_RAW;?
/*文件包含*/?
inc:include ′(′ string ′)′?
value: identifier|array_elem;?
identifier: IDENT;?
array_elem: identifier ′[′ array_index ′]′;?
array_index: expr;?
post_pre_incr:++value?
|--value|value++|value--;?
/*表达式*/?
expr: ′(′ expr ′)′?
|expr AND expr?
|′!′ expr|expr OR expr?
|expr ′+′ expr|expr ′-′ expr?
|′-′ expr| ′~′ expr ?
|expr ′*′ expr|expr ′%′ expr?
|expr ′/′ expr|expr ′&′ expr?
|expr ′^′ expr|expr ′|′ expr ?
|expr>>expr|expr>>>expr?
|expr< |expr>! |expr=~string|expr!=string?
|expr ′<′ expr|expr ′>′ expr?
|expr==expr|expr!=expr?
|expr>=expr|expr<=expr?
|var|aff||atom;?
atom: INTEGER|STRING|STRING_RAW;?
var: var_name|array_elem|func_call;?
var_name: identifier
程序后
3 基于ANTLR的DASL解释器设计?
DASL的解释器主要完成对DASL编写的脚本代码进行扫描和分析,解释执行其中的语义动作,从而产生有效的攻击操作。解释器的设计主要包括词法分析、语法分析和语义执行三个主要功能[10-13]。?
1)词法分析。根据词法规则识别出DASL脚本源程序中符号(token),每种符号代表一类词法单词。这些词法单词可以分为:标识符、运算符、关键字、数据、特殊符号等。词法分析的本质是将字符流转换成符号流。?
2)语法分析。根据语法规则识别出符号流中的语法成分,检查所给的单词序列是否是符合DASL语法的一个句子,如果是则构造出能够正确反映该语法结构的语法树,如果不是则表明有语法错误,给出错误的性质和位置。?
3)语义执行。依据语法分析构造的语法树,对语法树进行遍历,执行语法树所描述的语义动作,对DASL脚本中使用到的原子攻击按照语法树传递的参数进行调用,实现攻击动作。?
根据DASL功能的划分和实现的要求,所设计的解释器包括:符号表、词法分析、语法分析、语义执行、出错处理等部分,其结构如图1所示。?
在解释器的实现过程中,使用语言解释器生成工具ANTLR(Another Tool for Language Recognition)[14-15]来实现。相较于BISON[16]来说,它可自动生成代码,且同使用递归下降方法生成的代码很相似,便于阅读,容易理解;同时又可直接生成C++、C#描述的源程序,即降低解释器的开发难度,又提高了解释器的开发效率。同时,当需要对DASL进行功能扩展时,又便于增补功能函数、语法修改与测试维护。?
4 实例与比较?
4.1 代码实例?
利用DASL开发的SYNFlood攻击脚本代码如下:
程序前
?
//属性描述部分?
Description {?
attackname=SYNFlood;?
attacktype=DoS;?
…}?
//建立连接——原始套接字?
soc=open_sock_raw();?
//强度控制?
While(true) {?
//构造带有SYN标志的TCP数据包?
tcp=tcp_packet_construct(sport: 7000,?
dport:80,?
//序号为随机序号?
seq:0x6839+rand(),?
ack:0,?
flags:2,?
urp:0);?
//构造IP数据包?
ip=ip_packet_construct(ip_v:4,? (责任编辑:南粤论文中心)
------分隔线----------------------------