0%

bgpd和bird程序分析

1. BGP协议规则提取

可以从RFC文档中提取,搜索关键词(MUST、MUST NOT、REQUIRED、SHALL、SHOULD、RECOMMAND、MAY、OPTIONAL),查看关键的描述信息。

image-20201123011933414

上面的例子就是对Path Atrribute中的Attribute Flags的设置规则的描述。

提取了相应的协议规则就需要到二进制程序中去寻找对应的部分,但这部分现阶段还是比较困难的,尤其是在二进制程序没有符号表的情况下。

2. Bird程序:

实际上协议规则的提取还是比较抽象的,到二进制程序中来分析又是另外一回事了,常见的是根据二进制程序中的字符串信息来定位规则实现的部分。

例如:

1)对IBGP和EBGP的判断,以及响应的ASN号的要求:

image-20201123012525214

2)对AS number号的检查:

image-20201123013111395

备注:一般字符串都是输出的调试信息,所以其调用的函数大致是一个printf类函数,可以将这个函数重命名,然后交叉引用查看整体程序的引用情况。

image-20201123013240120

3. Bgpd程序:

Bgpd程序是Frrouting中实现BGP协议部分的程序,导入IDA后的Imports表中有很多Frr的外部函数,单独查看这个二进制文件是没法看到这些函数的具体实现的。

1)对Receive Length的检查:

image-20201123020352475

image-20201123020444709

2)对CapabilityCode的检查:

image-20201123021159932

RFC 2842中对CapabilityCode的描述:

image-20201123021334758