网络协议逆向分析

转自知乎低调回答,若对原作者造成损失,请联系本人。

0. 写在回答的前言   

0~a. 为什么匿名? 第一,大神在前,小可不敢僭越。同时小可从来是看知乎,不说话的,难得看到有同行,因此匿名了。虽然我明白您已经大四,题目已经提出半年多了,我想您应该解决了您的问题了。但是我还是匿名了。这份回答就当写给从事协议逆向的同行者,一起交流和讨论吧! 第二,学术评价或推荐事物,不可避免地会对一些价值观或学术观点进行评估和辩论。为避免太多学术的争名夺利或辩论不平,省去许多麻烦,故而匿名。 第三,看到贵题明确指出是基于数据流量的,所以才回答了。我看到评论中有人回答了一些基于指令分析的方法,我表示叶良辰不服,例如Dispatcher和Polyglot至少就是指令分析类,即需要通过反编译或探针污点分析产生协议的客户端的代码进行,来分析协议规格。AutoProbe也属于其中一类方法。 第四,本回答不能保证正确性,希望抛砖引玉,见贤思齐。  

 0~b. 为什么我能回答这个问题? 本人从事基于网络轨迹或数据流量的协议逆向技术,已有数年。学术期刊发表和项目验收等工作已经进行数载,诚惶诚恐,不敢说言之有物,只能说一起学习交流和讨论,唯有跟随前辈和宗师级人物,才有可能进步。所以曾在twitter上,在国内院校中,拜访多名行内著名教授,进行短暂交流,对于协议逆向工程的认识,我还比较浅薄,希望能够抛砖引玉,至少令入门的朋友少走弯路。 (请注意,为了表达敬重先贤,不敢自我卖弄研究,所以本文内没有我的任何研究,所以我不是本文里出现的任何学者,我也不隶属本文里出现的任何研究学院或机构单位。)   

 0~c. 我怎么回答这个问题? 回答思路从三个方面进行,一是当前协议逆向技术的从事人员或同行有哪些;二是当前协议逆向技术的发展状态处于怎样的境况;三是当前协议逆向技术的有效入门读物有哪些;四是一些入门时可能存在的神奇坑,需要避免。(T.T人生除了熬夜的苟且,还有谢顶、记忆力衰退的际遇。没错,是四个方面........)  

0~d.阅读本回答的注意事项 本人重点讨论基于网络轨迹的协议逆向技术,即分析的数据流量包等,而不是代码或反编译类的方面。同时注意,本人有时引用学术类用语,对于程咬金式的讨论词汇或某些朋友自己起的称谓名词,对于一般工程人员而言,无伤大雅,不必计较;对于学术科技研究者而言,希望能够秉承学术研究的严谨,养成好习惯。如果引起误会或不快,请您谅解。小可晚辈后生,向各位学习。  

0~e.警告 如果在网络上,发现除本人授权外的转载,将通过研究单位递交律师函,请勿侵权。 同时警告进行学术研究的朋友,请勿抄袭本文的学术观点(请注意引用和抄袭的区别),尤其是请勿抄袭技术现状的相关文字。其中很重要的原因是部分观点已经发表过在SCI期刊或学位论文上了,只是2016年5月之前都没有刊出。如果直接抄袭的,早晚会影响自己的学术名气。 这里不妨举个例子吧,河北军械工程学院的某位学者在协议逆向领域也有一些名气,发表过题目包含“随机性检测”或“加密数据盲识别”的若干文献研究,但是因为一稿多刊和抄袭嫌疑,有学术不端的记录了。已经被某期刊社公告广播了。这里赞扬这一期刊社的效率,同时,不得不鄙视一下另一期刊,计算机科学,在遇到这一问题上,完全没有反应和动作。难道在美国这算学术不端,在中国就不算学术不端吗?号称计算机领域的一类,简直是丢人。(怎么?如果计算机科学的编辑社看到本条消息,有本事你也把这个学术不端的学者处理一下? 然后,我向您道歉,删本段。) 如果您曾读到过类似的观点,您可以直接引用期刊论文。直接抄袭本回答,恐怕有违世道人心吧。

   ============================我是万恶的分割线====================================================================================

1.  当前著名团队和同行学者 排名不分先后,名单是不完备的,是缺失的,如有冒昧遗漏,敬请指正。小可不才,请前辈和同行见谅。请注意,下面的信息是截止到2015年12月的。本回答不能保证信息的时效性。  

国际: (1) Marshall A. Beddoe 美 (2) Cui Weidong 美(华) (3) Juan Caballero 西班牙 (4) Georges Bossert 法 (5) Antonio Trifilo 瑞士 (6) Tammo Krueger 德 (7) João Antunes 葡萄牙 不完全列举,请见谅

国内: (1) 中山大学:余顺争教授,罗建桢博士,王变琴高工,黎敏博士,肖明明博士等 (2) 南京解放军理工大学:吴礼发教授,洪征副教授,朱磊教授,潘璠博士,杜有翔硕士等 (3) 华中科技大学:李伟明教授,张爱芳老师,高翠霞老师等 (4) 中国科学院:云晓春教授,王一鹏博士、张卓研究员等 (5) 北京邮电大学:张钊博士,何炼博士,温巧燕教授,朱宇硕士等 (6) 北京的其他研究机构(包括卫星测控中心等):侯重远博士等 (7) 成都方面(包括电子科技大学和四川核物理研究院等):宋疆,张春瑞,岳旸,孟凡治,王勇,张楠,郑杰,苏彬彬等 不完全列举,请见谅  

2. 协议逆向技术概念及现状 

2~a. 什么是协议逆向技术?您确定您需要协议逆向技术吗? 协议逆向工程或协议逆向技术一词,是正规正式的学术用语,英译Protocol Reverse Engineering或Network Protocol Reverse Engineering,在部分研究(参见Antonio Trifilo 瑞士的学术论文)中简称为NPRE。  我见到过许多工程人员声称使用的协议逆向技术,但是实际仅与学术领域中的协议逆向技术打打擦边球。原因是:协议逆向工程是指在不依赖于协议描述的情况下,通过对协议实体的网络输入/输出、系统行为和指令执行流程进行监控和分析,提取协议文法、语法和语义的自动化过程。(参见潘璠博士等《协议逆向工程研究进展》)  上述概念显然给出了协议逆向工程技术的几个内涵特点: 

(1)逆向过程中无先验性,即不掌握协议规格;(2)技术方法或技术算法要求接近或逼近自动化程度; (3)分析对象有两种,一种是程序或软件的指令序列,另一种是网络轨迹的网络数据包或数据流; (4)分析目的包含字段格式,字段语义和协议状态机。  部分技术人员从事的相关协议分析,如果没有基本覆盖到上述特点,尤其是第一和第二点,可能仅仅是与协议逆向工程技术这门学科打了个擦边球。没有贬低的意思,反而是一种尊敬。我想表达的一层意思是,协议逆向工程技术不是想象中那么实用,因此在实际推广上,有时候遇到现实的种种问题,难以落实到具体实处。所以,如果部分技术人员在现实过程中能够解决协议逆向的问题,那么往往就没有使用到学术研究里的方法,因此压根就不需要象牙塔式或空中楼阁式的学术研究方法,就能解决当前实际问题。  因此,我有一个问题,如果您或后来想要参与协议逆向技术研究的朋友们,你们确定您需要协议逆向技术吗?明确自己的需求和技术门槛,这样才能解决自己的问题,没有必要为了协议分析,而使用协议逆向工程技术。因为协议分析领域包含协议逆向工程技术,其中还存在别的一些技术分支。如流量分类及识别技术,注意到深度包检测(Deep Packet Inspection, DPI)技术也是流量分类及识别技术的一个技术分支。所以从事协议逆向分析工作,除了协议逆向外,还有别的手段等等,不一定局限单一手段,对于技术方法,可以集百家所长,解决自己的实际问题。  

 2~b. 什么是私有协议或未知协议? 私有协议是指协议规格不公开的协议。有的文献会称作“未知协议”,“未明协议”,“不公开协议”,“自定义协议”。  从民用上看,如QQ协议,Skype协议等社交网络协议,还包含一些商业用途的通信协议,如各公司的Webmail协议,各工业系统的工控协议,都不尽相同。  从军事上看,所有军事用途的协议,都不会公开示人。例如卫星通信协议,军事通信的无线网络通信协议。  协议逆向工程技术有很多用途,用于网络流量管理,只是其中的用途之一。从网络管理角度出发,总不希望网络协议通信传输过程中存在不可控的因素吧,因为私有协议不公开规格,管理者即使嗅探到,缺乏规格,无法解析和控制。  注意,有的学术同行或朋友们会说:有些私有协议是加密的,加密的也能用这个技术做吗?实事求是地讲,不论是基于网络轨迹,还是基于指令分析的协议逆向技术,在面临这个问题时,都有些心有余力不足。原因是:如果说这些方法不能解析,但是有些学术论文解析了加密协议,例如指令分析的相关论文。几乎没有基于网络轨迹的技术手段可以解析,因为往往依赖密码学的数学问题;如果说这些方法可以解析,但没有一种方法是从密码学的数学问题入手,都是从常常使用加密的种类,逐一进行反解密的,严格意义上都是一种你来我往的此消彼长式的思路。  然而,请各位学术同行和朋友们注意面对加密的私有协议逆向问题,是当前学术领域的极难问题之一。这一问题没有被解决有两个问题:(1)往往涉及到密码学问题,一般由指令分析方法,可以得到较好的效果。但是指令分析要求接触到产生协议的客户端,所以这是局限性;(2)私有协议的出现往往在非紧急的民用或军用需求,真正地在时间紧急,需求紧张的时空域上,私有协议的使用往往是不加密的(这一论断是我个人,在见过大量实际场景下,得到的经验规律。某次,在某一场景下,某一个月内,专门抓取非公开协议,遇到能识别的就扔一边。观察到存在未加密的私有协议有30%~40%比例,我们使用公开的规格一一尝试,都无法识别。但是确实不是加密的,因为后来解出规格了,发现没有加密:-》)。这反映了,在某些需求下,私有协议的加密和解密会给通信效率带来障碍,有人会说那通过硬件底层进行加密,或许会既满足通信效率,又能保障私有协议加密。我同意这样的观点,协议逆向技术总会有局限性。天下没有任何一种方法是天下无敌的,我们接受这样的局限性,我们处于这个时代,我们守在这个时代,我们走在这个时代,做好目前能够解决的问题,做好让当前协议逆向技术变好的工作,这就足够了。至于那些还难以解决的局限性,就交给后来人吧。这一代的烛火和生命就尽力了,贡献到这儿了,期待有人继续前行~  

2~c. 协议逆向技术分支,技术目标和技术手段等 在正式的学术研究中,协议逆向技术主要分为两类:基于网络轨迹的协议逆向技术 和 基于指令代码的协议逆向技术。前者有时被称为报文序列分析,后者有时被称为指令序列分析。  前者的技术分支的一般学术正式用语比较统一,英译Based on network trace,没有什么太大异议。  后者的技术分支的一般学术用语比较多,大部分英译Based on execution trace,有的英译Program-based,也有的英译traint data analysis,还有的英译为Binary analysis。(请注意这里的binary analysis会与网络轨迹中的二进制协议逆向问题的英译混淆,所以注意学术用词。)  通过数十年的发展,学者发现协议逆向技术的技术目标只有三个: 字段格式位置 字段语义属性 协议状态转移。 这三项分别对应著名的协议设计的三要素,即协议语法、语义和时序。(参见张钊等人的《协议规范挖掘综述》)  上述内容反映了逆向方作为协议攻击和测试者,需要了解协议设计正向方的思路,才能实现协议逆向工作,用我本科专业的导师话讲,那就是《道德经》中的“反者道之动,弱者道之用“。这句话反映了在协议逆向过程中,往往会暗合协议设计者的思绪,具有主观色彩的哲学规律。(请注意,这里不是瞎扯淡。目前发表在2016年的相关期刊上,有相关的模型讨论。)这里举个例子,当观察到协议控制头总是填充0xFF,作为协议逆向方会不由自主地想到可能是同步头或类型填充。为什么会这么想?原因是大家根据协议设计的正向思路去猜测的。  根据上述论述,反映了基于网络轨迹的协议逆向工程的一个巨大缺陷,那就是伟人说的:从没有无缘无故的爱,也没有无缘无故的恨。~(>_<)~我写错啦,正确的是,这个巨大缺陷出现在绝多数从事网络轨迹的学术研究中,因为没有任何一条严格的证明,表明协议字段格式的提取符合某一数学模型,符合某一判决准则,符合某一提取规则。因为大多数的研究者都是按照经验规律或哲学规律做的,总是实验角度验证,而无法从数学模型上证明。-w- 我这么说,会不会遭雷劈。  上面这句话的意思,我再解释一下:例如信号与系统分析中,往往可以在理论上,能够推导克拉美罗下界;可是,协议逆向中存在克拉美罗下界吗?有人会说,协议逆向是网络层的东西,是计算机网络领域的东西,又不是信号与系统。可是诸位想想,一旦证明了协议逆向做的最优秀的克洛美罗界,那将为协议逆向提供理论上界,告诉大家怎么做实验,都不会优于这条界。(T.T目前鄙人推导了一个比较Low的数学模型,证明了协议逆向永远不能求解正确的字段位置,只能不断拟合。P.S.前面是句废话,这篇论文可能要5年后才能出现吧。一声叹息,身不由己。)  再例如,张卓研究员发表的《Toward Unsupervised Protocol Word Extraction》,其中使用信息熵作为字段边界的判决属性,但是这篇文章没有提供证明和依据,为什么熵变化波动最为剧烈的那个瞬间,就是字段边界点。大家都肯定会说,因为blablabla.....可是,有数学模型证明么?然而,这篇文章是鄙人最喜爱的文章,因为这篇文章首次注意到非线性系统的无监督方法,是解决协议逆向的一大主要方法集之一,这篇文章通过网络数据的仿真,最后从工程规律和数据实验的角度,从实践的角度,这篇文章证明了这样做是可行的。还有很多依据,如Discoverer方案引入FD特殊标识,利用同一偏移的字节区域出现有限个值域变化,就认为是特别的字段。What??? 这样也可以??d到最后,没有办法,一做实验,基本都对。这说明从实验角度最后证明了,这样的哲学主观色彩的规则设计,就是基本正确的,完全符合文本协议的解析特点,所以跪服我们这个领域的先驱,Cui Weidong先生,他的这个成果也发表在非常有名的16th USENIX著名高水平会议上。  最后谈谈协议逆向的技术手段,由于本人知识水平有限,这里只讨论基于网络轨迹的协议逆向技术,且针对字段格式提取方面的。最早由手工推导,到后面发表一系列人工规则和经验定律,直至今日,有人提出非常严格的数学模型证明(没错,就是中山大学的余顺争教授,黎敏博士提出的隐半马尔科夫模型,非常漂亮的数学严格证明。本人跪服至今,窃以为其是国内的领军开山宗师。)技术手段的发展则相应地,产生如下的变化:  拼凑规则或各类技术算法 -> 有目的地拼凑规则或各类技术算法 -> 针对性地提出模型拟合  例如,2003年Tridgell研究的著名的SAMBA项目,逆向分析了Windows的文件共享协议,目的是将这个协议重放至其他操作平台,实现跨平台的目的。一举弄了10多年,也就是说2003年才彻底完成。期间的方法,既有指令代码分析,也有用嗅探器逐字节去观察。(参见Trigdell的项目主页 How SAMBA was wriiten)  2004年Beodde和2007年Cui Weidong分别提出序列比对引入到协议逆向 和 Discoverer方法,事实上Cui Weidong在提出Discoverer之前就提出Roleplayer方法,这一系列方法都是有目的地利用规则,去定界字段边界。  2013年黎敏,余顺争等人利用数学模型,成功地拟合了协议逆向的字段格式提取过程,有了理论指导和统计分布的实验依据,绝对很赞。  

2~d. 基于网络轨迹的协议逆向技术发展简史 第一,受限于本人的学识,这里仅讨论协议逆向中的网络轨迹分支,并且重点是字段格式提取,可能会附带一些状态机和语义研究。原因是,指令序列往往出现在计算机的反编译学科中,所以差异性较大,我本人不从事,所以没有调查和发言权。  第二,切合题主的问题,题主的问题中主要关注数据流量方面的协议逆向,所以我就专门讲述这方面的简史。  第三,同时在基于网络轨迹的协议逆向技术中,字段格式提取是比较重要的一个目标,往往完成这个目标,其他两个目标可以做的势如破竹,迎刃而解。(同样的道理,如果字段格式提取非常难解决,所以大家都会规避这个技术目标,退而求其次,在不利用字段格式的基础上,做语义推断和状态机分析。)  国际发展  1967年,在阿帕网(互联网前身)诞生之际,具有网络通信意义的协议(Protocol)一词首次出现在英国实验室的备忘录上(参见吴礼发教授专著《网络协议工程》)。  1994年,90年代之际,Tarnay K,在发表协议通信过程中,可能存在一些问题或漏洞,提出对协议进行测试。于是提出了自动化协议分析工程这一概念和实践论述。  2003年,Tridgell完成了CIFS/SMB文件共享协议的逆向分析工作,将其移植到其他操作平台,后来延伸出SAMBA项目或系统,期间花费了至少10年,才完成这一工作。这表明,协议逆向工程技术是要求不掌握协议规格,且依赖手工推导,是耗费人工时间和精力的。部分工程人员声称逆向分析RFID协议,但是都是参照了MF1等协议规格来逆向的,所以跟真正的协议逆向工作不同。  2004年Mcafee公司的Beddoe,发表了协议信息学项目(Protocol Informatics Project),简称PI项目或PI方案。首次提出自动化算法,分析协议的字段位置,唯一美中不足地是没能提供收官字段格式边界的判决准则,即缺少最后的融合步骤。尽管如此,这篇学术研究,是开协议逆向之先河,首次注意到生物信息学中的多序列比对算法,可以引入到协议逆向技术中,注意到可以利用字段域的变化域和固定域特点,来区分字段位置,并且算法是自动化的,大大降低了人工工作,并且有了为协议逆向技术提供了理论指导思想。PI项目和多序列比对算法这一指导思想,影响深远,直至今日。(毫不夸张地,每年都有针对这一算法做改进,做借鉴的学术论文,可以说是流芳百世。所以显然是协议逆向技术的入门经典读物)  2005年,Leita在针对蜜罐问题里,较早地提出了协议状态机问题,引出了ScriptGen技术方案,即当黑客或非法网络行为入侵蜜罐时,有时是自定义的一些通信操作,如何伪装响应这些非法自定义的通信协议,需要为蜜罐设计一定的协议逆向方法,尤其是如何真实地欺骗黑客,使其不发觉是个蜜罐,这关乎到协议状态机的问题。  2005年,Cui Weidong发表RolePlayer方法,仍然是借鉴了多序列比对算法,确定协议字段的变化域和固定域,这一研究算作是较早地探索,但是并不成熟,因为可读性和价值性并不如PI项目。  然而,没想到,2007年,Cui Weidong惊为天人地发表Discoverer方法,这一方法的出现是石破天惊的,是开山之作,所以成为协议逆向技术的入门经典读物。Discoverer注意到文本协议中常常使用ASCII等定界符,利用空格和非字母等定界符,来区分字段位置。这一招可能令人感到平平,不过在2007年屈指可数的研究文献下,能够有这样的思路,可以说是非常新颖。同时,这一招还不是最令人感到石破天惊的,最为漂亮的一招是提出特殊标识鉴定方法,在同一位置偏移上,如果值域填充是有限个,则被认为是有意义的字段。如果值域填充的变化种类占整个数据超过一定阈值,被认为是经常变化的,则予以跳过。这一规则的制定充分反映了前文所述的哲学规律,利用了控制字段或命令字段,填充往往依赖控制集,数据字段往往依赖于业务数据或通信数据的动态变化。  2007年Maxim Shevertalov发表PEXT方案,这个方案的目的是为了解析协议状态机问题。是早期研究协议状态机的研究,较早地注意到会话流对协议状态机的状态标注的问题,同时引入聚类进行状态标记,启发了后面的研究,引发了后续用聚类参与到状态分类的许多思路。这是从事协议状态机分析的入门经典读物。  2008年美国空军技术学院,DeYoung发表学位论文,系统地引入自动机理论,提出借鉴模式识别中的文法规则去描述协议运转,讨论协议状态机问题,提供了详细的理论细节。很佩服,在当时匮乏的文献研究下,作出这么重大的理论性突破。同时注意到,这是美军军校,看看人家这水平,可见美军当时就已经开始涉猎协议逆向问题。而国内的起步真正是从2010年前后才开始研究。  2009年,Trfillo等人首次注意到Discoverer方案的局限性,发现协议中出了文本类字段,还有二进制字段,并且二进制字段是出现在逆向工作中频率较高的一种逆向对象,包括非公开字符集,加密型等等。该学者首次提出利用统计模型的方差分析,来确定二进制字段的特征(Binary Feature Selector, BFS)。该学者较早地提出二进制字段的分析问题,但是仅给出了研究思路,没有给出相关的实验讨论。因此成为了遗留问题,这一遗留便是5,6年没有人再研究二进制问题,这一问题也是我本人一直重点研究的问题。  2010年,又冒出位大神Tammo Krueger。在没有管字段格式提取的基础上,Tammo Krueger发表了ASAP方法,发现非线性系统方法中一类主成分分析方法,即SVD分解。利用SVD这一排冗降维的特性,尝试去除掉无关的字段属性,保留感兴趣的字段属性,尤其是语义属性,所以这一研究主要面向字段语义。  2010年Bossert等人发表 Netzob开源项目,旨在丰富 PI项目的功能,形成包含格式提取、状态机推断在内的协议逆向过程。该开源项目是跨平台的,既有windows版本,也有unix和mac版本,能够逆向分析ASN.1类型的字段结构。可以说这位老师将协议逆向技术转化为一个成熟的平台系统,是非常令人赞叹的举动,这表明协议逆向的实践推广不是高高在上,至少由这位学者达成了。曾与这位前辈交流,发现这位学者将理论算法转化为一种产品级的软件,是与背后的实力分不开的。在2014年这位学者又发表了基于语义信息辅助的字段提取方法。目前Netzob在国内的名气不是很大,在国内Freebuf,开源中国上的宣传,实际上还不够清楚这个Netzob工具的实际用途,且目前没有国内的Netzob手册中文译版,国内的电子博客的相关使用说明极其稀少。  2011年João Antunes发表ReverX,研究的题目明确指出就是基于网络轨迹的,其技术目标是为了协议状态机。我个人觉得,如果从事协议状态机,这篇也应该是必读入门读物。  当然,2005年至2011年之间,涌现出非常多的指令分析文献研究。尽管本节不重点讨论,但是为了表达为先贤的敬佩,不得不提及几个前辈。2008年,Cui Weidong发表了Tupni方案,是指令序列分析方法,两个分支通吃。2009年 Zhi Wang,Cui Weidong等人发表ReFormat方案,用于逆向分析加密的数据流量,当然也是指令分析(execution monitor)方法。Juan Caballero在指令分析上,发表了Polyglot方案,Dispatcher方案等。某位网友从双向性,单向性去分类方法也是一种研究的好思想,不过鄙人觉得既然已经很多宗师前辈发表的论文,都将协议逆向工作划分为两分支,三目标,我想这些先贤们肯定见识更高吧。  国内发展  现在可以谈谈国内了。请注意,下面多强调的是字段格式提取方面的研究。像中山大学等传统强队对每一个技术目标,都做过研究。由于我个人不太擅长其他方面,所以不敢随意简述。  2011年王一鹏等人发表Biprominer方案,明确指出提取二进制字段特征,是较早注意二进制协议逆向问题的学者,这位学者非常厉害,他发表过包含Biprominer在内的若干不同的协议逆向方法,其篇篇方法都是精品,其博士学位论文更是精彩绝伦。  2011年,华中科技大学的李伟明教授针对模糊自动化测试,提出引入协议逆向工程技术方法,测试协议的字段域。  2011年,华中科技大学的张黎硕士,发表了基于 Net-trace的网络协议逆向工程方法研究,主要核心思路是继承发展多序列比对算法。值得一提的是,该前辈注意到二进制协议问题,但是没有成功解决,也没有专门验证。  类似的研究,还有2012年潘璠等人提出的基于递归聚类的报文结构提取方法,实际为Discoverer的思想,引入到国内。当然,不是完全沿用,他们做了算法的修改。  2012年杜有翔,潘璠等人提出基于语义辅助的协议逆向方法,该研究主要强调的是实用性,所以在算法时空复杂度和自动化程度上做了算法改进。  2012年张钊等人发表基于长度语义约束的报文格式挖掘方法,较早地注意到报文长度等外部特征,可以挖掘协议格式。2013年何炼等人设计一种序列比对算法,针对TLV结构的字段格式,实现字段位置的推断。  2012年,罗建桢、余顺争等人发表基于位置的协议逆向方法,(呼~终于谈到了中山大学的余顺争教授团队,令人敬佩的国内先驱者),该算法利用字段边界的频繁性这一经验规律,实现了频繁项特征拟合字段边界的过程,令人拍案叫绝。  2013年,黎敏、余顺争等人发表隐半马尔科夫模型,率先地提出严格数学统计模型,构造了Hidden Semi-Markov Model(HSMM)模型,首次回答了协议逆向生成模型的科学问题,令人神往。可以认为是协议逆向近期发展方法的必读读物。值得一提的是,余顺争教授本人专门针对隐半马尔科夫模型,讨论纯数学问题,撰写过一篇水平相当高的学术论文,前几年发表于人工智能期刊上,仅仅参考文献数量就接近百篇,作者也仅他本人,说明是余教授本人推导设计的数学模型,作为这么年长和老资历的学术前辈和宗师,令人佩服。   2013年,王一鹏等人发表面向非加密网络数据流的协议规范推断关键技术研究(博士学位论文),在这篇论文内,充分展示了协议识别、协议格式提取和状态机推断三个技术目标的完备体系工作,堪称是精妙绝伦。每一个目标上,他都设计了对应的子方法,发表在高水平会议和刊物上,不得不佩服他的工作,个个是精品。值得一提,他在利用LDA模型和蒙特卡洛拟合时的逆向思路跟我本人撞在一起,尽管我分析的算法与之细节不同,但是我由于自身水平,没能发表这一方面的论文,一是方法相似,他在前发表;二是我没能推导出来,真是遗憾,未能追随前辈。  2014年,张卓等人发表基于信息熵的字段边界提取方法,通过设计边界内部的信息熵和边界外部的信息熵,借此挖掘信息熵的波动变化,实现边界确定。思路非常令人敬佩,赞叹。  2014年后的不谈了。  引发了一个新技术分支——面向协议逆向工程的协议识别与分类技术  有人注意到协议逆向工作如果要开展,一定事先需要对未知协议进行分类,从而引发了一个新的技术分支,即面向协议逆向工程的协议识别与分类技术。这一技术与传统的流量分类或识别方法不同,原因是这个新的技术分支,要求协议是私有协议,所以无法进行有监督或半监督的方法研究,只能是无监督的。所以难度非常高。目前近三年内,忽然涌现出大量的这一方面的论文,目的就是在不掌握协议规格的情形,对混合未明流量进行分类。这一工作目前有几个研究团队在做,例如中山大学的罗建桢博士,发表了较多高水平的相关研究的期刊论文。再例如刘渊、张春瑞等人发表网络数据的协议逆向工程研究进展,专门讨论这一新兴议题。  本人简单表达一下自己的观点,在传统流量识别或分类问题中,总是在回答不同协议被分类的问题。而现在在未明协议的混合特点下,除了不同协议被分类问题外,还要回答同一协议内的不同格式报文分类,以及同一格式报文的不同属性分类。三个问题,逐级难度上升,颗粒度逐步变细。   

3. 当前协议逆向技术入门的读物 

(0) 综述类文献 2011年,潘璠、吴礼发,洪征等人,《协议逆向工程研究进展》 (题外话,感谢这篇文章,没有这篇文章,不会有我今天的若干研究,这篇文章是我的启蒙读物。古人云:见贤思齐。曾和洪征老师交流过,深感荣幸,盼望有一天能程门立雪,相见求教。)   2011 年 Li Xiangdong 等人发表协议逆向工程技术进展综述,这篇英文文章简要发表协议逆向工程技术进展综述,主要贡献是做了一些技术分类。  2013年张钊等人发表协议规范挖掘研究综述,较早地论述协议三要素和协议逆向的关系,重点梳理了状态机推断的被动推断和主动推断工作。  2015年徐正国等人发表未知网络协议逆向分析综述,尽管文章发表的期刊质量不高,但是思路和观点比较好,值得一看。  2015年吴礼发等人发表协议状态机推断综述,重点针对状态机的推断相关研究进行梳理。  2015年刘渊等人发表基于网络数据的协议逆向工程研究进展,注意到了与协议逆向相关的新技术问题。强调了传统流量分类和协议逆向问题中的流量分类问题是不同的。  2015年 John Narayan 等人发表协议逆向工程具综述,从基于网络轨迹和指令序列的字段格式提取、状态机推断综述及两者融合等 方面,通过逻辑图表等关系内容,详细整理了各方法的算法细节。(作为研究生的英文入门读物,堪称完美~~~~既能锻炼和学习英文,都能学习到协议逆向的知识。该英文文章页数还多,接近30页,可以说是完备性比较高的综述了。)  通过2015年的综述研究,表明当前学者没有打算继续研究协议逆向的字段格式的意图。完全引领着,走向了另外的技术目标。这反映了字段格式提取比较难,因为这个字段格式远远没有做完,还存在很多问题,因为实在太难,所以估计也没人愿意研究。(这段文字是我的胡乱猜测,就当个笑料看看吧。)  

(1) Protocol Informatics Projec,字段格式提取,Beddoe 《Network Protocol Analysis using Bioinformatics Algorithms》  

(2) Discoverer,字段格式提取,Cui Weidong 《Discoverer Automatic protocol reverse engineering from network traces》  

(3) PEXT,状态机推断,Maxim Shevertalov 《A Reverse Engineering Tool for Extracting Protocols of Networked Applications》  

(4) AutoReEngine,字段格式提取和状态机推断,罗建桢 余顺争 《 Position-based automatic reverse engineering of network protocols》  

(5) 王一鹏 《面向非加密网络数据流的协议规范推断关键技术研究》 注:这篇博士论文由三篇小论文构成,三篇小论文都可以根据这篇大论文找出来,好好研读,受用无穷。我从中学习到了很多。  

(6) 黎敏 余顺争 《抗噪的未知应用层协议报文格式最佳分段方法》  注:当然还有很多可以去读的文章,这里就不一一展示了。我觉得入门的话,多读综述文献,然后从综述文献中选取自己感兴趣的研究点,再去精读精选吧。本节推荐是个人的习惯,不具有评价效力。  

(7) 图书教材 《网络协议工程》 吴礼发著,2011年,电子工业出版社  《模糊测试强制性安全漏洞发掘》Michael Sutton Adam Greene[美],2009年,机械工业出版社  《网络协议逆向分析及应用》,2016年1月,国防工业出版社(这本书其实非常适合入门,不过截止到5月,本回答撰写的当前时刻,我早已下了订单,却仍然没有到货买到.....我想一时之间,洛阳纸贵也是可以理解的。) (P.S. 5月5日白天刚写完这个回答,结果到了晚上,忽然快递到了,等了好久好久,居然就收到了书。紧接着,然后一个晚上都在读这本书,受益匪浅,大概和主要地看了第四章、第七章。发展了十余年,终于出现了这本书,可见协议逆向技术发展的好慢好慢,统计一下近十年以内的学术论文文献,也就大约百篇。我们需要注意到这百篇分为两分支和三技术目标,也就是在一个紧密的专业研究中,平均每年也有不到10篇,这是非常艰难的时刻。这个时候可以脑补一下美剧或电影里this is a tough time. 这本书作为国内第一本协议逆向工程技术的专业级图书,意义是非常大的。)  (P.P.S 5月15日,我的朋友也购买了这本教材,结果听出版社说,很快就会断货,并且不打算再刊印。看来协议逆向技术果然是个小众研究方向,嗯,余音已成绝响,所以.....我又买了两本!哈哈,留作赠予同行朋友和学术收藏之纪念。)  

4. 当前协议逆向技术的字段格式提取的神坑 我本人比较擅长字段格式提取技术,所以不敢妄言其他方面的技术目标,只能谈谈这个技术目标的神坑。 - 哦,神坑很多,您想讨论哪一个? - 哦,这个神坑?好的,让我们一起讨论讨论,可能说上三天都说不完~ 好吧,脑补一下。我就讨论几个需要避免弯路的地方。  

正确要点1:先读综述,再精选和精读与自己研究点相关的具体方法的文章。 这是一个避免弯路的方法,不要做到最后,发现做不粗来。(老师你过来,放学别跑,操场上见,让我们师生谈谈心~^o^)  

正确要点2:选好编程语言。 我一般在做协议逆向时用的是是Python,偶尔会用C,Matlab,Java辅助一下。 请注意我不是建议你选类似的编程语言。我认为你需要选择与自己课题适应度比较好的。 有一点,我觉得是比较推荐的。那就是我觉得掌握多门编程语言,是不可避免的。Python和Java最后学会一个。有一些经典的协议逆向工具都是Python写的。例如,PI项目,Netzob工具。当然也有一些是C写的。 (这也是为什么会导致我走向Python这条不归路的。哈哈,吓到你了。∩_∩不用紧张,多学几种编程语言,不吃亏!技多不压身!)  

正确要点3:做理论和实践时,永远记得协议逆向要求不掌握先验规格。  很多研究做出来,前提假设都是利用协议规格里面的特色东西,所以某种意义上,这些研究都是无益的。有些协议逆向工程中的流量分类实验,仅仅做二分类或依赖选取协议的特色特征做分类特征,不具有通用推广性。甚至部分研究在进行协议逆向工作时,不慎带入了协议规格,导致实验就是错的。当然,如果您想由易到难,上述的步骤也是可以考虑。没有无缘无故的爱,也没有无缘无故的恨。  

正确要点4:有些老师会提出这样的疑惑。  有些老师会提出这样的疑惑,诶?你们做的不是协议逆向吗?请问逆向过什么私有协议? 神马?你们仿真数据是SMB,HTTP,FTP?那不是公开协议吗? 【这些个老师都是神逻辑!拜服!不管你们遇没遇到过,反正我是遇到过。∩_∩但是我不怕,因为我逆向过真正的私有协议,所以我不会公开成果的。】 哈哈,对于无法像我这么回答的朋友或研究者,只需要一条理由回答就行了,那就是:科学研究允许仿真实验,所谓仿真实验,只要在协议逆向实验测试过程中,不引入先验就行了。实验结束后,再核对算法性能结果,也是一种科学探索的验证方法。   

正确要点5:一些可能产生高水平文章的研究点。 如果阅读的人是一个学术研究者,尤其是硕士级别以上,还从事网络轨迹的协议逆向技术,那么本要点是个大招。目前基于网络轨迹的协议逆向技术,在未来三年内可以发表的研究点,有:  a.二进制私有协议的字段格式提取方法,多研究一些。 解释:因为二进制协议没有ASCII,所以协议序列透明,比传统方法难做一点。同时注意二进制协议既有非加密的,也有加密的。建议先解决非加密的,因为通过网络轨迹的思路,去解决加密的实在是太难。对于二进制协议逆向问题,截止2016年5月,当前学术论文还比较少。  b.二进制私有协议的字段格式提取完整过程的数学模型,多研究一些。 解释:因为当前协议逆向技术除了黎敏博士的那个数学模型,覆盖了整个过程。还没看到有哪个严谨的数学模型提供理论思想。截止2016年5月,完备的数学模型还没有出现第二个。当然或许也需要博士或数学家的功底水平。(开玩笑,你以为黎敏博士,余顺争教授的模型怎么来的....那个HSMM模型,余教授专门写了一篇引用文献就有100多篇的专题论文,发表在影响因子惊人的SCI神刊上,是余教授自己设计的。令人跪服,长跪不起......想了想自己的导师,对不起,光看到引用文献就有100多篇的小论文,我就没有勇气看下去这篇英文专题论文了....._(:з」∠)_)  c.二进制私有协议的状态机推断的状态标注问题 状态机推断往往包含两步,一是状态机标注构建,二是化简状态机。后者往往依赖于个人的数学功底,如果没有太大信心。建议可以从事前者。  d.二进制私有协议的协议逆向中的协议分类问题 有些学者认为这个流量分类是协议逆向以外的工作,但实际上这份工作也可以是协议逆向的内部工作。原因是协议状态机中有一项状态标注工作,往往需要对报文进行状态分类。传统的协议状态机往往依赖会话流信息,没有考虑过离散报文序列,所以以此作为突破口,发表高水平的论文是极有可能的。  老实说,前面两个鄙人已经发表了一些粗浅的工作,今年下半年打算继续发表一些新的算法方法。 后面两个鄙人的团队不太擅长,目前正在研究,打算今年下半年发表一些简单的原型思路。  

5. 评论观点的杂谈 感谢  @王秉德  的观点评论交流 没错,协议逆向是同志仍需努力的阶段,当然了我说的是学术研究上,且在工程实践上也会出现这样的阶段。  协议逆向技术广泛地用在各处工程上,常见于各类信息安全论坛或消息中,例如飞秋协议被逆向,具体细节为某某某。腾讯QQ协议被逆向,具体细节为某某某(@.@哈哈,大公司的协议要是被逆向了,帖子一般都会被公关掉)。  这说明协议逆向技术的经验或知识技巧是出现我们的世界中的,也是不断发展的。  但是为什么说同志仍需努力,因为这句话是针对学术研究者说的,当然工程实践者也可以一同如此。原因是,具体的针对的工作往往依 赖于实际环境,这些经验规律不好掌握,所以每一种协议的逆向经验或逆向环节可能无法推广到其他。  例如,某一类工控协议的逆向成功,这样的经验不一定能用在无线链路系统中,因为很多经验不能套用。作为学术研究者,需要找到这些不同环境的共同点,对于学术研究而言,往往注重的是关键问题,即科学问题,就是换了什么环境,我们总能通过数学建模、机器学习等方法还原,期待这样那样的自动化算法。  于是,协议逆向出现了种种矛盾,具体协议对象在逆向中又往往有差异性, 科学研究又强调普适性,所以协议逆向在矛盾的螺旋中前行。当前这一技术发展了已有10年,但是文献不过百,具体技术目标方面的论文更是屈指可数,可见工程 规律和学术研究是两回事,两者同等重要。  目前,工程规律的部分研究员也开始注意到协议逆向的工作延续性和技术有效性如果想变得寿命长,就需要不断探索科学 问题。这里可以举个前辈的例子,360独角兽团队逆向分析GPS协议,这一工作非常了不起,登上了2015 Black Hat大会,相关议题还登上2015 Defcon大会,都是著名顶级的技术交流会议。其部分逆向的工作环节使用了基于网络轨迹的协议逆向技术,尽管他们做的工作上,描述的说法和观点没有从协议逆向的学术观点上走,但是不妨碍他们做出了精彩的工作。  由此,小可从基于网络轨迹的学术思路谈谈,独角兽逆向GPS协议的技术目标基本覆盖完整了协议逆向技术的所有目标,即覆盖了字段格式,字段语义和协议状态机问题。例如,他们想要搞清楚某些卫星的GPS协议接口或专有接口协议的字段组合,使用相关信号采集实体或虚拟设备,予以波形采集或分析。对于GPS协议伪造经纬位置等,利用字段语义的欺骗性,当然他们有时也需要参考公开的GPS协议规范。对于协议状态机,他们需要利用时隙或信号功率放大等思路,欺骗协议通信的运转状态。都是非常令人敬佩叫绝的工作。  这支团队就是我所说的,不局限于工程实践,还在学术研究上探索工作的推广性,还分析了北斗的GPS,将方法推广到其他卫星的GPS变种协议上,甚至是部分无线链路上。(参见《无线电安全攻防大揭秘》)这反映了他们也注意到类似的方法恐怕也不容易重现,所以需要将方法推广,使普适性更好。这样的例子也说明有一些GPS的变种协议或无线航空协议,他们使用的方法也可能失效。对于工程而言,是非常好的经验积累。对于学术学科来说,这样经验和问题如果不进行提炼和抽象,就会被分散了,没有成体系的东西,至今除中山大学的数学模型外,没人再提出第二个,原因不仅在学术研究的抽象提炼,需要大量的工作,人少且数学推导多,而且在于难,通用化推广化,要求一个研究者对于各项知识的功底是全能的。上述种种矛盾和被动都是当前协议逆向停滞不前的一个因素(之一)。所以协议逆向尚未通用化,同志仍需努力。  感谢  @张Camel  观点评论交流 问题描述:从我个人的角度来考虑,如果我们不过分关心协议细节,而仅从DPI的角度出发,只需要提取协议的1-N个关键字符特征,是不是会大幅度降低协议逆向的难度那?而更有可能将其自动化?  先表达一下个人观点,我基本同意您的评论。即我也比较认同DPI技术可以降低协议逆向难度,有可能使自动化进程提升。请注意,我唯一保留一点疑义(不是异议,是疑义,即我和您的观点基本一致,但是存在一些疑惑),即“大幅度”一词可以商榷,当然了,这无伤大雅。我从两个方面讨论为什么会存在这个疑义。(因为本文的回答初衷只是推荐入门读物,不太想讨论过多的技术算法细节)。  

1. 明确DPI技术不是协议逆向技术,协议逆向是四个字的专有技术名称,与一般聊天背景所提及的协议逆向不同。   首先,DPI技术目标是对不同或未知协议进行同一应用类型的协议分类,协议逆向技术目标已经写在前文,主要有字段位置划分,语义推断和状态机推演。请注意,提取协议的关键字符特征,不能等价于协议逆向问题中的字段位置。这一问题早在2012年的学术论文中得到了讨论,在我们团队即将发表的学术论文中也进行了论证(因为前文提及了,我不在这里讨论我的学术研究,所以抱歉)。   根据上述讨论,结论就是:协议分类技术的目的是提取协议的差异特征,借此来剥离不同的协议。然而,这些提取用于协议分类的特征,不完全等价于字段格式。   然后,DPI技术可以帮助协议逆向吗?当然可以帮助了,但是能力有限,原因是这里存在一个逻辑悖论。那就是DPI技术的目的是提取协议分类特征,如果技术使用者通过研发、发明和提高DPI技术,达到了协议逆向技术的目标,那这个DPI技术就是协议逆向技术了,也不属于DPI技术了,因此协议逆向技术比DPI技术要难。   在实际工程中,协议逆向技术往往和DPI技术的思路会走一段共同的道路,但是最终都会分道扬镳。这表明DPI技术会对协议逆向有所帮助,但帮助的幅度可能没有想象的那么大。因为DPI技术的所需要的协议分类特征没有协议逆向技术所需要的目标特征精确,当提取协议分类的特征完毕后,往往就需要进行字段定界,而克服字段定界这一问题,基本来说跟协议分类领域没有什么关系,所需要的技术手段比较学术化。例如,2012年罗建桢等人提出position-based的方法,就表明,仅仅依靠机器学习算法和协议分类算法,是不能用于协议逆向的。正是因为罗建桢等人引入位置方差分布,才有效地确定了字段边界位置。同时,我们也注意到该作者借鉴了协议分类思想。所以这篇文章中协议分类的技术储备对协议逆向是大幅度的。:-)这个例子论据符合您的观点,不过我可以找一些论文,完全不使用协议分类的技术,纯数学或纯非机器学习算法,依然可以完成协议逆向。当然了,这无伤大雅。   最后,我与您的观点基本一致。  请注意,就目前(2015年前后)国际国内前沿技术而言,协议逆向技术一般不怎么和流量分类技术结合,因为两者的技术目标不同啊,流量分类仅仅是用于分类,协议逆向是要定界出字段啊,后者需要更加精细的特征。   这样的技术关系,可以举个不恰当例子,有点像做显微镜实验,有时候靠肉眼就能区分不同的生物材料,但是有时候肉眼区分不开的时候,就需要显微镜了。   协议分类有点像,需要区分不同的肉,区分只要差异就好,色泽,纹理等。(区分性模型)  协议逆向有点像,需要辨别不同的肉,辨别需要分析各自的分子组成。(生成性模型,值得一提,黎敏等人的隐半马尔科夫模型正是生成模型一种,故一石击破水中天,成为协议逆向的经典读物。其核心理念基本透过协议逆向现象,直抓本质。)   生成模型有时可以用于区分模型,但是区分模型不能代替生成模型。   当前协议分类停留在”肉眼“阶段,为什么呢?因为学术研究发现”肉眼“就够了,不需要用别的。而朋友您之所以说机器学习算法效果不太好,这并不矛盾。原因是,您做实验的前提和流量分类的学术问题前提不同,您的实验包含了未知或私有协议,流量分类的学术问题一般是有监督或半监督问题。您的实验被流量分类的学术问题涵盖后,成为了无监督问题,即2015年新发展出来的混合未知协议流量分类问题,这个比较难,也比较新颖。   

2. 为什么协议分类的特征提取过程和协议逆向的特征提取过程不同。   首先,可以阅读Discoverer论文,其中很清晰地说明了当前协议分类方法仍然停留于文本或关键字符的原因,因为分析带有关键字符和文本字段的协议,这项工作比较简单。没错,我没有写错。这一问题我在前文已经提及,当前加密协议和私有协议的出现,往往呈现二进制特点,即你不知道里面有没有字符编码(ASCII),这样的困难会呈现三个方面特点。这样的困难是真实广泛存在于实际问题中的,这与早期2007年至2010年学术论文的理想化背景,是截然不同的。  第一,未知协议不存在字符编码,仅有二进制序列。这样的协议有很多,自己随便找。  第二,未知协议存在字符编码,但是不是ASCII,例如可能是独立字符编码,其他字符编码等,如果事先这个协议是私有协议,真的很难猜测。如果事先这是一个私有协议,根本无法猜测独立字符编码,如不同HDLC的扩展变化的私有协议,它们使用独立的字符编码。再如AIS(船载船舶通信)协议,也是使用独立字符编码,请注意尽管AIS协议规范是公开的,但是在第66号报文后是自定义协议,部分商用船会使用66号以后的自定义报文协议,那些报文可不是公开协议。  第三,即便你猜出来是某个字符编码,协议其他部分仍然存在不属于字符编码的协议序列。  因此理想化的协议通体都是字符编码的,恐怕HTTP,SMB,FTP报文,用这些协议去做实验,已经不能说服当前国际国内的学术泰斗了吧。因为这些协议报文环境太理想。  然后,说一下为什么协议分类的提取特征和协议逆向的提取特征不一样。对于协议逆向而言,重视的是字段位置,而协议分类技术的发展还没有与位置相结合。请注意,不是简单地把字段的位置信息加入那么简单。  这说明,相比而言,协议分类的技术目标和所需要的手段特征较为粗略,协议逆向的则较为精细。精细的特征可以用于粗略的区分,但是粗略的特征不能用于精细的目的。所以有两种方式解决,要么将粗略的特征加工,加工后,变得精细。这一思路在罗建桢等人的position-based,张卓等人的论文上有所体现。要么直接寻找精细的特征,不去找分类的特征,这一思路可以参看黎敏等人的论文,前文均有所述。  最后,协议分类技术可以和协议逆向很好地结合,也是一种研究思路。   6. 写在最后 感谢我的恩师指点我,如果不是恩师指点,我可能完全在协议逆向技术研究上做不下去。直到今天,还在庆幸,选对了导师,感激~~~吴军博士在撰写《大学之路》的时候,也说过,好的导师胜过好的专业。  没关系,反正国内学术研究做协议逆向的人比较少,也不会看到这条题目和回答~~~~  我太高兴啦,因为我发表的成果足够让我通过考核啦~所以希望每一个从事协议逆向的学术朋友被温柔对待,因为这个领域实在是他妈的太难了。(对不起,=ω=爆粗口了)要是被学术要求卡住了,那真是个悲剧。  对于未来从事协议逆向的可能性,我既兴奋,又恐慌。因为这个领域实在是.......  如果您也是基于网络轨迹的协议逆向技术研究者,可以一起联系沟通和学习,尤其是需要向当前国内两大强队 中山大学 和 解放军理工大学 学习。

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值