首页 > 其他分享 >课程设计报告

课程设计报告

时间:2023-12-17 15:33:43浏览次数:35  
标签:TLS 协议 课程设计 pkt 报告 buffer cols local

一、设计方案及可行性分析

该代码是一个用于解析 TLS(Transport Layer Security)协议的 Lua 插件,可以作为 Wireshark 的一个解析器。通过解析不同类型的 TLS 协议记录,包括 Change Cipher Spec 协议、Alert 协议、Handshake 协议和 Record 协议,为每个记录设置相应的协议类型。这个插件主要用于网络数据包的分析和监控,可以增加 Wireshark 对于 TLS 协议的解析能力。

二、详细设计思路

1.系统体系结构,技术选择
该插件基于 Lua 语言编写,作为 Wireshark 的 Lua 插件,用于解析 TLS 协议记录。Wireshark 是一个广泛使用的网络协议分析工具,而Lua作为一种脚本语言,能够很好地扩展Wireshark的功能。基于Wireshark的插件机制,Lua语言被用来实现对TLS协议记录的解析。
2.说明程序中用到的关键数据类型的定义,绘制关键程序的流程图,以及各子模块间 的调用关系图

MyProtocol
- dissectChangeCipherSpec()
- dissectAlert()
- dissectHandshake()
- dissectRecord()
- MyProtocol.dissector()
  1. 面向对象技术可以用UML建模
MyProtocol
+ dissectChangeCipherSpec(buffer, pkt)
+ dissectAlert(buffer, pkt)
+ dissectHandshake(buffer, pkt, tree)
+ dissectRecord(buffer, pkt)
+ MyProtocol.dissector(buffer, pkt, tree)
  1. 列出测试目的、测试内容、测试结果,并对结果进行分析
    测试目的:验证插件对于不同类型的TLS协议记录的解析准确性。
    测试内容:输入不同类型的TLS协议记录数据包,检查插件解析出的协议类型和信息是否准确。
    测试结果分析:分析每种类型的TLS协议记录数据包解析的结果,确认是否满足预期,并进行结果分析。

三、设计特色

该插件通过解析不同类型的 TLS 协议记录,提供了对 Change Cipher Spec、Alert、Handshake 和 Record 协议的解析。主要设计特色包括提供准确的协议解析结果,能够帮助网络管理员或安全分析人员更好地理解和分析 TLS 协议相关的数据包。

四、源代码及注释

local my_protocol = Proto("MyProtocol", "My Protocol")

-- 子函数:处理TLS Change Cipher Spec Protocol
local function dissectChangeCipherSpec(buffer, pkt)
    pkt.cols.protocol:set("TLS-Change Cipher Spec")
end

-- 子函数:处理TLS Alert Protocol
local function dissectAlert(buffer, pkt)
    local level = buffer(5, 1):uint()
    local description = buffer(6, 1):uint()
    
    pkt.cols.protocol:set("TLS-Alert")
        
    if level == 0x01 then
        pkt.cols.info:set("Level: Warning")
        if description == 0x0A then
            pkt.cols.info:append(" - Description: Unexpected Message")
        end
    elseif level == 0x02 then
        pkt.cols.info:set("Level: Fatal")
        if description == 0x46 then
            pkt.cols.info:append(" - Description: Protocol Version")
        end
    else
        pkt.cols.info:set("Encrypted Alert")
    end
end
   

local function dissectHandshake(buffer, pkt, tree)
    local handshakeType = buffer(5, 1):uint()

    pkt.cols.protocol:set("TLS-Handshake")
    if handshakeType == 0x01 then
        pkt.cols.info:set("Client Hello")
    elseif handshakeType == 0x02 then
        pkt.cols.info:set("Server Hello")
        local isCertificate = buffer(0x5c, 1):uint()
        if isCertificate == 0x0b then
            pkt.cols.info:append(" - Certificate")
        end

        -- 读取加密算法和临时密钥
        local cipherSuite = buffer(76, 2):uint()
        local keyExchange = buffer(15, 28):bytes()   -- 偏移调整
        local keyExchangeString = tostring(keyExchange)

        -- 打印加密算法和临时密钥到解析树中
        local treeItem = tree:add(my_protocol, buffer(), "Encryption Algorithm and Temporary Key")

        if cipherSuite == 0x003c then
            treeItem:add("RSA Authentication Algorithm:", "RSA Authentication Algorithm Used")
            treeItem:add("AES Encryption Algorithm:", "AES Encryption Algorithm Used")
            treeItem:add("SHA-256 Integrity Protection Algorithm:", "SHA-256 Integrity Protection Algorithm Used")
            treeItem:add("Key Exchange:", keyExchangeString)
        end
    elseif handshakeType == 0x10 then
        pkt.cols.info:set("Key Exchange")
        local isChangeCipherSpec = buffer(0x010b, 1):uint()
        if isChangeCipherSpec == 0x14 then
            pkt.cols.info:append(" - Change Cipher Spec")
        end
    end
end



-- 子函数:处理TLS Record Protocol
local function dissectRecord(buffer, pkt)
    pkt.cols.protocol:set("TLS-Record Data")
end

-- 主函数
function my_protocol.dissector(buffer, pkt, tree)
    local typer = buffer(0, 1):uint()

    if typer == 0x14 then
        dissectChangeCipherSpec(buffer, pkt)
    elseif typer == 0x15 then
        dissectAlert(buffer, pkt)
    elseif typer == 0x16 then
        dissectHandshake(buffer, pkt, tree)
    elseif typer == 0x17 then
        dissectRecord(buffer, pkt)
    end
end

-- 注册端口
local tcp_table = DissectorTable.get("tcp.port")
tcp_table:add(443, my_protocol)

五、个人报告

  1. 小组贡献排序及依据(每个人的工作量):
    20211410周意凯:项目规划、主体代码编写
    20211421文鑫河:代码完善、调试程序、收集实验成果
    20211417黄琪凯:资料搜索整理、实验报告撰写、总结实验经验
  2. 个人报告(20211421文鑫河):
    1)、列出自己的贡献
    代码完善
    调试程序
    收集实验成果
    2)、列出设计中遇到的问题及解决方法
    问题:对wireshark抓包分析不熟练,不理解为什么TLS数据偏移量直接从0开始,忽略前面的TCP和IP头
    解决办法:上网查找资料,加上询问gpt学习,如果TLS考虑了底层协议头的偏移,可能会增加实现的复杂性,并引入潜在的安全风险。通过从0开始的偏移,TLS可以更简洁地处理数据。通过不依赖于底层协议头的偏移,TLS可以更灵活地与不同的网络协议栈集成。
    问题:不清楚相关加密算法在TLS协议数据中的体现
    解决办法:通过查阅相关资料,可以得知加密算法说明在TLS中占两个字节,如Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
    3)、列出调试过程中遇到的主要问题,并说明解决方法;
    问题:从TLS数据中提取的字节无法正常进行比较
    解决办法:询问GPT得知,需将提取到的数据转化为uint无符号类型才可以进行比较
    问题:提取到的临时密钥数据显示为乱码
    解决办法:询问GPT错误情况得知,临时密钥字节数相对较多,需转化为string类型即可正常显示
    4)、设计体会及收获
    通过这次课程设计,我首先对lua语言有了一定了解。Lua语言确实相对来说比较简单,只需要阅读几篇文章就可以上手编写。通过对lua与wireshark的综合学习,我学会了使用lua提取wireshark数据包中的特定字节信息并进行转化,还可以随意修改wireshark中的protocol、info以及tree中的相关内容。其次,我还对TLS协议以及加密算法有了一些了解。我知道了TLS协议包含的四种子协议:告警协议,握手协议,密钥规格变更协议,记录层协议。同时对相关加密算法在TLS中的字节体现有了认识,如本次课设中的Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c),还有其他诸如临时密钥,证书等TLS数据中的内容。但是这次课设一开始并不顺利,起初没有弄明白具体要做啥,在D1解析数据中疯狂寻找证书信息,但D1里面并没有TLS/SSL协议。后面弄清楚了目的,编写代码就非常简单了,只需要提取数据,进行比对,然后更改信息就行了。
    总得来说,通过这次课设,我学到了很多课外的但是专业相关的知识,这对我以后的信息安全工作有一定的助力。
    5)、参考资料
    https://blog.csdn.net/ryanzzzzz/article/details/129934536
    https://baijiahao.baidu.com/s?id=1758641807495130037&wfr=spider&for=pc&searchword=ssl tls协议的记录层字段
    https://blog.csdn.net/thlzjfefe/article/details/133041339?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170182462516800222886460%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=170182462516800222886460&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-133041339-null-null.142v96pc_search_result_base3&utm_term=wireshark%E6%AF%8F%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8C%85%E5%88%86%E6%9E%90TLS%2FSSL%E5%8D%8F%E8%AE%AE%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187

标签:TLS,协议,课程设计,pkt,报告,buffer,cols,local
From: https://www.cnblogs.com/wenxinhe/p/17909136.html

相关文章

  • 课程设计wireshark报告个人
    IS课程设计-个人报告个人报告1.小组贡献排序及依据(每个人的工作量):张顺扬(37%):针对GMT0024以及相关网站提供的五个协议相关数据资料编写lua代码并进行不断调试。肖权城(33%):前期进行相关资料检索,提供了大量包括协议逻辑分析功能的网站和数据资料对后期代码编写带来了有力支撑。......
  • 课程设计——个人报告
    个人报告(20211315邹雪梅):a)列出自己的贡献代码运行报错修改,越界检查等辅助部分的编写,插件运行测试,参与插件设计,小组报告中负责:二、3列出测试目的、测试内容、测试结果,并对结果进行分析,三、设计特色部分的撰写。b)列出设计中遇到的问题及解决方法问题1:协议字段解析错误解决......
  • numpy、scipy、pandas、matplotlib的读书报告
    一、基本函数的用法numpynumpy是Python中用于进行科学计算的基础模块,它提供了高效的多维数组对象ndarray,以及相关的数学运算和线性代数函数。numpy的主要功能有:创建和操作多维数组,如使用np.array(),np.arange(),np.zeros(),np.ones(),np.reshape()等函数。对数组进行索引和切片,如......
  • 个人报告20211303
    个人报告(20211303李天赐):a)列出自己的贡献:小组整体工作的推进和程序设计思路的确立,完成了前期代码结构搭建和初步撰写。b)列出设计中遇到的问题及解决方法(1)思路问题:--问题描述:在我们最开始设计程序的时候,先打算拿TLS协议中的三次握手协议的过程来练手,通过显示handshake这个信息......
  • 课设报告
    北京电子科技学院《信息安全工程技术应用》课程设计报告基于lua的wireshark插件开发小组成员姓名:20211410周意凯20211417黄琪凯20211421文鑫河指导教师:娄嘉鹏提交时间:2023年12月10日一、设计方案及可行性分析该代码是一个用于解析TLS(TransportLayerSecurity)协议......
  • IS课程设计-个人报告
    个人报告1.小组贡献排序及依据(每个人的工作量):张顺扬(37%):针对GMT0024以及相关网站提供的五个协议相关数据资料编写lua代码并进行不断调试。肖权城(33%):前期进行相关资料检索,提供了大量包括协议逻辑分析功能的网站和数据资料对后期代码编写带来了有力支撑。徐元琦(30%):对代码进行修......
  • 课程设计个人报告
    基于Wireshark插件的国密标准检测工具的设计与实现个人贡献:程序框架设计及主要代码编写设计中遇到的问题及解决方法:协议字段提取问题:问题描述:在解析记录层时,出现协议字段提取错误的问题,导致无法准确识别TLS记录的内容类型。解决方法:使用正确的偏移量和长度来提取协议字段......
  • gamble 题解报告
    #Galble题解简要题意:  给定一个数$n$AB两人赌博,每次你作为第三者下注任意整数$x$元,A赢则获得$x$元,否则亏损$x$元。任何一个人赢$n$次立刻结束游戏。你需要每次基于现在的情况,计算下的赌注,以使得在整个赌博的全过程,如果A胜利则获得$2^{2n-1}$元,否则亏损这么......
  • jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱
    前言个人其实一直的不太喜欢用邮箱发送报告,测试报告用邮件通知这都是五六年前的事情了,但有部分小伙伴依然执着于发邮件报告通知。这里整理了下发邮箱通知的教程。配置你的邮箱配置邮箱这一步最繁琐,由于每个人使用的邮箱不一样,配置也是不一样的,没有固定的答案。这就导致很多人......
  • 【专题】2022年中国跨境电商行业研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32044近年来,我国的跨境电子商务发展迅速,在过去五年中,其贸易额增长率达到了16.2%,已经成为稳定对外贸易的一支重要力量。阅读原文,获取专题报告合集全文,解锁文末52份跨境电商行业相关报告。一方面,随着跨境电子商务的发展,跨境电子商务的监管政策得到了......