這堂課很多關於網路的安全,其中有兩個報告一個是「TLS解密程式作業」、一個是「滲透測試」的報告。
許多系統時常運用到python,也聽說過虛擬機;但實際嘗試改寫編譯卻是極少數次。甚至從未親身使用過,對其操作可以說是非常生疏,一開始如未詢問其他同學,參考網上資料,想必真的會卡關很久!
而拆解封包也是一個很特別的經驗,首次的學習成果後,試著自己解說實踐看看,著手使用程式來代替口頭說明與計算,改讓計算機器來協助實際演算。過程中,或許也因還不甚熟悉,故也花費了許多時間來解讀老師所提供之基本演算法內容,得以改寫利用。
很感謝授課老師還貼心地補充放上了上課中所題及的相關內容於github平台上讓我們能隨時更新下載來觀看。和組員及同學一起共同參與討論,並查找更多資料、程式碼來參考,也進而修改出更好的方法來實作。
經學習後,基本完善了解了拆解封包的基本架構,簡單的手算或許已能熟練了;然而,程式則是仍需不斷構想、測試來演進,最難的過程始終是除錯的部分,尤其可說是初次嘗試使用虛擬機來操作,更是首次以python語法來編寫完成作業,實際運用、執行編譯的操作方式基本上一頭霧水,更別提能否順利讀取檔案來驗證了,還好有組員的相互協助,其中一方有基本相關知識,才能順利的完成這份作業。
由授課老師提供decode.py作為函式庫,並由其中找出解題頭緒。以及在github上放上解題相關的TLS格式作為提示,此程式碼運用格式進行拆解分包。
以下為程式碼解析:請詳見圖片註解。
由授課老師提供decode.py作為函式庫。
根據授課老師所提式之格式,利用資料型態─字典,作為對應型的資料型態。
讀取檔案,並利用rb讀取二進位檔案。
利用格式開始對records進行解碼。
根據ClientHello、ServerHello格式擷取cli_random和serv_random,並利用利用tls_prf 函式,從 premaster secret 算出 48 bytes 的 master secret。
48-byte master secret 會再被展開成多個 bytes,之後利用aes128cbc_decryp對 HTTPS response 做解密,最後將MAC 與 padding去除。得到答案並寫入檔案。