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的規範來,當然,這都是後話了^__^假裝自己以後有心思折騰這個。

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