tnc-fhh开源代码之IMCV测试

距离上一次接触tnc-fhh这个开源项目已经过去了一年。最近在看相关论文时无意瞄了眼这个项目的官方文档,就在闲暇(假装很忙^\\^)又重新读了遍官方文档,并跑了跑项目里模拟的IMCV对,这里做个总结。

总体描述:

官方文档位于一级目录下doc/tncfhh.pdf,其中提到tncsim可以在无NAA和NAR的情况下模拟TNCS和TNCC,用来测试IMCV对。tncsim每次加载完IMC和IMV模块后,由IMC模块发起一个TNC握手。加载的模块由/etc/tnc/tncsim_config配置(安装后),在tnc-fhh项目中实现的imcv都分配了特定的消息类型:

  • vendorId-------0x0080ab
  • example-----0xfe       dummy----0x31      clamav----0x41      platid----0x33     attestation----0x34      hostscanner----0x30

每个imcv在启动的时候都会读日志配置文件log4cxx.properties的内容,其实没有这个文件这些imcv都写了默认的日志配置,这里晒个自己配的日志文件,毕竟少一个启动warning是好事。:

#设置rootlogger为DEBUG级别,使用了fa一个Appender
log4j.rootLogger=DEBUG,fa
#对Appenderfa进行设置:
#这是一个控制台的Appender,
log4j.appender.fa=org.apache.log4j.ConsoleAppender
log4j.appender.fa.Threshold=DEBUG
#输出方式(Target)为标准输出,
log4j.appender.fa.Target=System.out
#输出格式(layout)为PatternLayout
log4j.appender.fa.layout=org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern=[%-5p] %d %l : %m%n

需要注意的是日志的级别应设为DEBUG,但不该更高,否则会丢失运行信息,在log4cxx中,日志优先级为:FATAL >> ERROR >> WARN >> INFO >> DEBUG >> TRACE。

(一)example imcv:

这对imcv只是简单的发送helloworld报文。输出的第一部分截图如下:

发现tncsim先启动S端后启动C端,然后C端就发起了一次TNC握手,终端输出了报文的抓包内容,并且还输出了这些报文的xml格式。其中的关键数据是base64编码的,用解码器解码可得到内容。这里用明文形式表示了其传递的过程:

其中,BatchId为包序号,recipient为接收方。

C                                                                                                      S

 |---->(Example message from ExampleIMC)                                   |  

 |                               (Example message from ExampleIMV)<--------|

 |---->(Another example message from ExampleIMC.)                      |

 |                                                                                    (allow)<-------|

是不是感觉很扯,没错,我也觉得很扯。很古怪的ACL,但毕竟作者在文档里说了这个例子的目的是教你开发IMCV对。

(二)dummy imcv:

接下来是第二个imcv的测试,测试流程如上,协议过程如下:

 

C                                                                                                   S

 |---->(DummyIMC message 0, action = isolate)                            |  

 |                                                                             (isolate)<--------|

好吧,这个更扯淡的ACL。官方文档给出的说法是/etc/tnc/dummyimc.file里的内容将会被IMC发送给IMV,其中仅有allow, isolate, none三个选择,再由IMV给出回应。

 

(三)hostscanner imcv:

再来一个imcv对的测试,这回的看名字就知道是在按port做的ACL,应该会有意思,协议流程如下:

C                                                                                                     S

 |---->(HostScannerIMC active)                                                        |  

 |                                              (TCP20,21,22...UDP631)<--------|

 |---->(TCP20=close...UDP631=open)                                              |

 |                                                                                   (allow)<-------|

(四)platid imcv:

这个imcv一开始总是会出段错误,我用gdb跟踪发现报错发生在log4cxx的一个宏里,好奇葩!在网上找了半天发现该项目的github里有人也问过这问题。后来他通过注解掉对log4cxx的调用做了折中处理。这里说明一下,在一级目录/imcv/plaid/imv/src下的FileCertManager.cpp里注解掉构造函数和虚构函数内容,然后重新make && make install。

          FileCertManager::FileCertManager(const char *certfile)
          {
          //    LOG4CXX_TRACE(logger, "FileCertManager()");
          //    loadCertsFromFile(certfile);
          }
          FileCertManager::~FileCertManager()
          {
          //    LOG4CXX_TRACE(logger, "~FileCertManger");
          }

关于platid与clamav这两个imcv的协议内容,可以参考官方文档,因为报文被RSA加密所以这里不写过程了。

最后

有时间了可以按照官方文档开发一个attestation的imcv,协议流程就按TCG的规范来,当然,这都是后话了^__^假装自己以后有心思折腾这个。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章