1. BGP协议规则提取
可以从RFC文档中提取,搜索关键词(MUST、MUST NOT、REQUIRED、SHALL、SHOULD、RECOMMAND、MAY、OPTIONAL),查看关键的描述信息。
上面的例子就是对Path Atrribute中的Attribute Flags的设置规则的描述。
提取了相应的协议规则就需要到二进制程序中去寻找对应的部分,但这部分现阶段还是比较困难的,尤其是在二进制程序没有符号表的情况下。
2. Bird程序:
实际上协议规则的提取还是比较抽象的,到二进制程序中来分析又是另外一回事了,常见的是根据二进制程序中的字符串信息来定位规则实现的部分。
例如:
1)对IBGP和EBGP的判断,以及响应的ASN号的要求:
2)对AS number号的检查:
备注:一般字符串都是输出的调试信息,所以其调用的函数大致是一个printf类函数,可以将这个函数重命名,然后交叉引用查看整体程序的引用情况。
3. Bgpd程序:
Bgpd程序是Frrouting中实现BGP协议部分的程序,导入IDA后的Imports表中有很多Frr的外部函数,单独查看这个二进制文件是没法看到这些函数的具体实现的。
1)对Receive Length的检查:
2)对CapabilityCode的检查:
RFC 2842中对CapabilityCode的描述: