「Windows逆向工程师」学习技能【转】

2016-09-13 coolsmurfs SecWiki

大多数安全从业者对「Web安全工程师」比较熟悉,但是对「Windows逆向工程师」这个职业却了解甚少,总体归纳起来可能主要有如下几点:需要的系统底层技能较多,自学学习难度系数比较大,并且往往在入门后无法深入研究下去。本文将在coolsmurfs大牛的引领下让大家轻松掌握「Windows逆向工程师」的学习思路和整体进阶路线。
职位描述:
  1. 参与漏洞挖掘、分析和利用技术研究;
  2. 分析当月高危漏洞原理和利用技巧,撰写相关技术总结文档;
  3. 挖掘浏览器、Office、Adobe Reader、flash等客户端软件以及网络协议常见漏洞;
  4. 研发相应的漏洞挖掘和分析的一体化框架平台;
  5. 恶意程序分析以及其他程序内部实现逻辑分析;
  6. 对公司其他部门提供技术支持。
  7. written by: coolsmurfs
职位要求:
  1. 熟悉x86/x64系列汇编语言、C/C++语言,能熟练读懂汇编代码;
  2. 有较好的逆向功底,熟练使用IDA、Windbg、Ollydbg、Immunity Debugger、Bindiff等分析工具以及Metasploit等渗透测试工具;
  3. 至少掌握一门编程语言,包括C/C++/Python/Ruby/Perl/JavaScript;
  4. 熟悉浏览器、Office、Adobe以及Flash等软件内部工作原理以及相应软件漏洞分析与利用技术优先;
  5. 熟悉操作系统的相关安全机制,掌握绕过漏洞缓解措施的基本方法;
  6. 熟悉windows系统安全,掌握windows核心编程优先;
  7. 熟悉漏洞挖掘和分析相关技术、工具以及平台,如Fuzzing测试,补丁比较、符号执行技术等。
  8. 能够流畅的阅读漏洞方面的英文资料,具备较强的漏洞学习和理解能力;
  9. 熟悉技术文档的写作、PPT制作、具备基本的工作汇报能力;
  10. 学习能力强、富有团队精神、有责任心和进取能力;
  11. written by: coolsmurfs
学习路线:

漏洞相关概念
熟悉基本概念和原理(二进制漏洞基本原理、漏洞类型、漏洞利用方法、常见漏洞挖掘、shellcode编写)。

  1. 通过关键字(栈溢出、堆溢出、整数溢出、UAF、double-free、shellcode)进行Google/SecWiki等了解基本概念;
  2. 阅读《Q版本缓冲区溢出》《0day漏洞挖掘》等书籍,学习二进制漏洞形成的基本原理和基本的利用方法,并进行实践操作;
  3. 学习《加密与解密》中部分章节,熟悉Windows系统的重要数据结构、函数传参方法以及PE文件结构等基础知识。
  4. written by: coolsmurfs

熟悉相关的工具和平台使用
熟悉IDA、WinDbg、Ollydbg、Immunity Debugger、Bindiff,Metasploit等常见的漏洞分析调试和集成平台使用;

  1. 了解这些工具的使用背景和用途,可以通过Google/SecWiki等搜索了解。
  2. 下载安装相应的工具和搭建相应的平台。
  3. 学习这些工具的功能和基本使用方法,收集有用的工具插件(如mona、idapython)。教程可以通过Google或者SecWiki上搜索。
  4. 学习常见工具的插件和脚步编写方法,如WinDbg插件编写、IDC和IDApython脚步编写、od脚本编写,具体可以Google相关教程。
  5. 熟悉Metasploit渗透工具的使用,重点熟悉漏洞模块选择、查看、配置利用以及shellcode导出配置等功能,并利用Metasploit进行实践。具体教程可以Google:如Metasploit教程
  6. 待基本工具都熟悉后将相关工具做成一个工具箱。
  7. written by: coolsmurfs

漏洞样本分析
掌握基本的漏洞原理和利用思路后开始分析分析各种类型的漏洞并撰写分析报告。

  1. 通过搜索引擎各大漏洞披露平台(exploit-dbCVEbinvul等)搜集历年爆出来的比较经典的各种类型的二进制漏洞进行整理归类,并同时搜集相应的漏洞分析教程。
  2. 根据漏洞描述搭建相应的漏洞调试分析环境,利用Metasploit生成样本来进行漏洞重现,并根据漏洞分析报告自己调试分析
  3. 待调试分析完成并掌握了漏洞触发的原因和相应的利用方法后,认真总结,并撰写自己的调试分析报告。
  4. 根据Metasploit中生成样本的ruby源码和调试过程的分析,自己尝试编写漏洞poc并进行验证。
  5. 各个类型的漏洞分析3-5个,总结各种类型的漏洞的形成机理并及时进行归纳总结。
  6. written by: coolsmurfs

高级漏洞利用技术
学习掌握现在的主流高级漏洞利用技术,了解操作系统以及编译器的各种漏洞利用缓解和保护措施以及相应的绕过方法。

  1. 了解现在操作系统以及编译器的漏洞利用缓解和保护措施,如GS、DEP、ALSR、CFI等。
  2. 学习掌握针对这些缓解保护措施的基本方法,如SEH利用、堆喷射、ROP导向编程等。
  3. 学习掌握一些针对特定应用程序的高级利用技术:如IE脚步引擎高级利用技术office漏洞利用绕过ALSRoffice漏洞利用堆喷射Flash高级漏洞利用技术
  4. 通过一些在线扫描网站平台如malwrVirusTotalwidespread kits等搜集一些在真实环境中使用的样本(推荐通过阅读一些安全公司的分析报告并获取相关样本的MD5值然后搜索下载),分析这些在野外使用的样本中的各种高级漏洞利用技术并进行总结。
  5. 关注一些安全峰会的分享议题(如BlackHat等),对其中涉及到漏洞利用的高级技术进行学习和研究。
  6. written by: coolsmurfs

 

漏洞挖掘平台使用

掌握主流的漏洞挖掘方法Fuzz测试以及各个Fuzz测试平台的使用。

  1. 熟悉Fuzz测试的基本原理,了解主流的Fuzz测试平台,如Peach-fuzz,AFL等。
  2. 搭建Peach-fuzz测试框架,熟悉Peach-fuzz的使用范围,熟悉Peach-Fuzz的各个模块的基本工作原理,掌握Peach-pit语法规则
  3. 阅读peach-pit的模板,以简单的文档格式为基础,参照编写相应的Peach-pit文件并对目标软件进行Fuzz测试。
  4. 了解AFL的基本工作原理,掌握AFL的基本使用方法,下载安装Windows平台的winafl,熟悉其使用,并利用其对Windows平台下的非开源软件进行Fuzz测试。
  5. 在熟练使用以上Fuzz测试平台的基础上,阅读工具源码,对其工作原理进行更深层次的了解,并在此基础上根据自己需要开发定制化的工具。
  6. 熟悉掌握其他Fuzz测试框架或者平台。
  7. written by: coolsmurfs

关注安全动态、安全社区与安全会议
关注相关的安全社区和安全大牛,掌握行业最新的安全资讯和安全发展动态。

  1. 收集国内外与安全相关的站点并及时整理制作浏览器书签,每天定期抽时间查看,了解行业的最新动态和新时间。如(SecWiki-安全维基Freebuf看雪论坛Binvul二进制安全吾爱破解;
  2. 收集整理常见的漏洞披露平台制作成浏览器书签,如exploit-dbCVEProtekresearchlab,及时关注最新漏洞,对于感兴趣的或者重要的漏洞都去实际分析调试一下。
  3. 通过Weibo、微信等平台关注国内一些安全大牛的博客或者一些知名的安全公账号,及时了解安全达人的最新分享以及安全研究进展。
  4. 通过Twitter关注一些国外的安全界著名人士,,很多国外研究者都会定期在Twitter上发布其最新的研究成果,随时跟踪便可以了解国外的最新研究方向和研究现状。
  5. 关注一些重要的安全峰会,如BlackHat、RSA等,收集相关感兴趣的议题,对其中相关的议题进行学习研究。
  6. written by: coolsmurfs

脚步编程和符号执行框架学习

选择脚步语言Python、Perl、JavaScript中的一种,对语法进行熟悉,对常见库进行学习,推荐学习Python,Python库比较完善,可以大大提高工作效率。

  1. 搭建相应的开发环境,根据自己的喜好选择相应的IDE,推荐Sublime等。
  2. 选择一本合适的教程学习Python基础语法,如《Python核心编程》。
  3. Python的基本语法学习完后,可以针对性的学习一些Python应用于逆向工程的库,推荐学习《Python灰帽子》里面介绍了常见的用于逆向工程的Python库以及Python应用于immunity debugger和IDApython等方面的应用,利用这些库可以开发很多自动化的分析工具,节省分析时间。
  4. 学习一些动态插桩分析工具,如intel开发的pin,并利用pin插桩平台可以开发一些污点追踪分析的工具,同时可以在github上搜索与pin有关的项目,加入并学习。
  5. 学习一些符号执行框架或者平台,符号执行在程序分析和漏洞挖掘上被认为是最有潜力的研究方向,符号执行已经有成熟的框架被用于程序程序分析、自动化漏洞挖掘与利用。推荐学习平台:s2ekleeangr
  6. 搜集一些与符号执行相关的学术论文,进行学习。
  7. written by: coolsmurfs

漏洞自动化分析与挖掘安全工具的开发
随着人工智能的发展,安全领域的研究也将向着以机器代替人的方向发展,在今年举办的CGC挑战赛中,其主题”THE WORLD’S FIRST ALL-MACHINE HACKING TOURNAMENT”就体现了由机器来代替人进行网络攻防对抗的理念,开发自动化的工具也将是下一步进一步发展方向。

  1. 在对各种漏洞类型成因有深入的研究和了解后,逐步对各个类型的漏洞建立相应的漏洞模型。
  2. 综合利用符号执行以及机器学习等方法,结合建立的漏洞模型,开发相应的自动化漏洞挖掘原型系统,在人工尽量参与少的情况下自动化进行漏洞挖掘。
  3. 深入分析漏洞触发的原因以及漏洞条件,结合符号执行的方法,建立一套针对漏洞自动化分析的平台,能够支持挖掘系统产出的异常样本进行可利用性评估以及利用生成等高级功能。
  4. 深入分析漏洞利用的过程以及利用技巧,建立相应的攻击检测模型,并开发相应的检测系统,能够针对各种类型的漏洞攻击进行检测并报警。
  5. written by: coolsmurfs
此条目发表在资源收集分类目录。将固定链接加入收藏夹。