漏洞研究:从入门到放弃
前言
如果你对通过漏洞研究获取快乐或收益感兴趣,或者如果你是初学者并且不确定如何进步,则可能很难从大量的技术信息中筛选出有用的东西。此外,还有各种老牌研究人员才知道的非技术性的东西。有很多不同的东西要学习,但没有人真正谈论你可以在旅途中采取的不同路径。这个视频将概述漏洞研究中的关键概念,然后介绍你可以去哪里了解更多信息 - 以及寻找什么。还将介绍漏洞研究的一些“心态”,包括有助于成功的技能和性格特征、许多研究人员遵循的不同成长阶段以及研究人员在此过程中可能面临的不同感受(是的,感受)。最终目标是帮助你提高职业成功的机会,这样就可以了解自己的位置、想去的地方以及为实现目标可能要做的事情。漏洞研究并不适合所有人,但在这个视频之后,也许你会更好地了解它是否适合你,以及未来会发生什么。
仅仅是一家之言。你会找到自己的方式,但希望这个可以帮助你更快的找到。
潜在的雇主:
没有人说你必须受雇于人。你可以做到just for fun(“爱好者”)
如果你选择获得工作,你可以为(没有特别的顺序):
- 你自己! - 漏洞赏金、黑市/灰市销售等
- 重视研究的咨询公司
- 安全产品公司(用于营销价值)
- 软件供应商(产品安全或响应团队)
- 常规企业(内部应用安全团队)
- 政府承包商(或政府部门)
- 学术界(重点是“纯”研究)
- CERT(分析和理解现实世界的攻击)
注意:并非所有工作都获得公众认可
需要具有的人格特质:
- 坚持不懈
- 耐心-尤其是在与人打交道时
- 勤奋
- 好奇心
- 批判性思维
- 学习意愿
- 自我激励
- 愿意独立工作
有会更好(Nice to Have)的人格特质:
- 协作
- 高度专注
- 上瘾
- 愿意分享发现或技术
- 热情
- 渴望不断进步
- 幽默感
成功的技巧:
你可以掌握其中的一些技能/特质,但请尝试一下,但我们正在尝试谈论通常会导致成功的因素
- 代码,协议,文件格式或“工作原理”
- 常见的攻击方式
- 逻辑流(例如逻辑漏洞,CSRF,authZ / authN等)
- 如何运行分析工具并评估其发现
在哪里学习?
- OWASP Top Ten
- SANS/CWE Top 25
- White papers
- Periodic electronic collections
- Videos
- Mailing lists
- Github repos
- Vendor’s bug databases
- Vuln scanners
- Intentionally-vulnerable packages
- CTFs / wargames
- Follow individual researchers
- Vulnerability databases
- Conference talks
- Classes
- Books
- Yearly White Hat Security Top 10 attacks
选择一个目标:
- 你可以深入或广泛
- 语言、漏洞类、漏洞利用技术、检测技术……
- 你所做的任何有助于知识体系的事情都是有价值的
- 即使是负面结果也很有用! (虽然很难承认)
- 有很多“容易实现的目标(low-hanging fruit)”
- 旧代码更可能有问题
- 复杂或过于复杂的系统通常已经成熟
- 大的攻击面创造了许多机会
- 软件受欢迎程度很重要
- 很少使用的软件质量较低,但对公众的影响也较小
- 具有广泛漏洞历史的流行软件通常很难
- 错误太多意味着奖励较低或认可度较低
- 可悲的是,如果不付出努力,他们就不会变得更好
- 全新或新兴技术(想想移动、物联网等)
- 供应商急于上市通常意味着安全性是之后考虑的事情
- 新发现或新出现的漏洞/攻击类别
- 每个新类别都应强制对所有产品进行全面审查
- 或者用新的变体来改进新的攻击/漏洞让其具有更强的冲击力(DOS,RCE,EOP)
- 以前未分析的代码
- 极有可能包含大量low-hanging fruit
- 一些目标在没有得到适当审计/修复的情况下变得流行
- 一些目标一直存在,但最近才连接到网络(医疗设备和汽车)
- 如果可以访问昂贵的或难以获得的产品
- 跟随其他人正在做的事情(“Pigpile”或“Bandwagon”效应-从众效应)
- 有时会冒犯最初的研究人员
- 从已发表研究的基础水平中受益
漏洞研究流程:
发现 ----> 分析 ----> 报告 ----> 修复
发现:应用各种方式发现安全漏洞
- 审计
- Fuzzing
- 人工测试
- 等等
分析:理解BUG,越多越好
- 可达性(Reachability)
- 影响
- 产品和版本
- 最小测试样例
- 可利用性
报告:与供应商(可能还有公众)交流你的研究
- 起草建议
- 通知受影响的各方
- 与供应商协调
- 一旦修复,通知更广泛的受众
修复:解决问题,通常由接收端(供应商)处理
- 修复并部署补丁
- 通知受影响的各方(测试并打补丁)
- 与研究人员协调
漏洞研究阶段的成长:
新手 ----> 主力军 ----> 专家 ----> 精英
阶段1:新手
- 发现容易找到的漏洞
- 易于实施,简单的攻击
- 仅仅一种漏洞类别
- 遗漏了更重要的漏洞
- 遗漏了这些漏洞附近的其他问题
- 每次都是发现并披露一个bug
- 仅限于高度不安全的,未经审计的软件
- 没有“从本质上解决问题的修复建议”
- 有时你的发现/分析是错误的
阶段2:主力军
- 更全面的发现-每个程序包中有多个错误
- 多种的易于理解的漏洞/攻击类别
- 认识到简单的保护机制,例如 黑名单
- 制定与供应商(或不与供应商)合作的披露政策和方法
- 不断发展的可靠的建议
- 向他人学习新技术并将其应用于自己的工作
- 确保发现是新的并参考相关的工作
阶段3:主题专家
- 在一个或多个漏洞或攻击类别中具有丰富的经验
- 对现有技术进行了新的增强
- 在会议上撰写白皮书/发表演讲
- 绕过了常见的保护机制
- 进行了更全面的根本原因分析
- 将经验应用于以前未研究过的产品类别
- 做出了引人注目的工作
- 可对任何软件包进行审计并都能有一些发现
- 拥有多种技术和方法的经验
- 能够在大多数软件包中发现bug
- 详尽,精心编写的带有所有相关信息的建议
- 很少错(在没有验证的情况下都是可信的)
阶段4:精英
- 讨厌(可能)这个术语
- 发现新的漏洞类别,发明新的攻击类别,制作新的工具
- 绕过最先进的保护机制
- 预测整个行业的发展
- “精英”仅仅是针对特定的专业来说 - 没有人知道所有事情
- 随时随地发现 - 适用于其特定专业的任何软件包中的漏洞
- 分析最受欢迎的,安全的软件
- 发现复杂的漏洞链
成长及发展
免责声明! 每个人的成长都不同,这只是一个近似值
- 不是每个人都希望成为,能成为或需要成为精英
- 马尔科姆·格拉德威尔(Malcolm Gladwell)的《异类》(Outliers)表示,要成为专家,大约需要10,000小时的专注练习
- 现在,建立一个不错的声誉可能需要3年或更长时间
漏洞研究是一个正在发展的职业/爱好
- FAILZ(失败)是不可避免的
- FEELZ是不可避免的 - 你(可能)不是机器人,感受是会存在的,你(可能)会试图寻找理由和逻辑来解释自己的感受
- hack/生活平衡是关键; 但你的平衡!=他人的平衡
- 你不必成为精英才能有所作为
感受是正常的,一般情况下:
- 感到沮丧
- 被错误冲突困住
- 被你不了解的技术障碍所击败
- 浪费时间在无法解决的有前途的理论上
- 不理解别人的建议是什么
- 放弃, 暂时或永久地寻找其他东西
- 相信你唯一的价值就是从十大供应商的软件中找到RCE
- 无法看到自己达到你所尊敬的水平
- 大胆地宣布你很棒( 邓宁-克鲁格Dunning-Kruger效应)
- 当别人都相信你的时候,你会觉得自己并不了解(也是邓宁-克鲁- 格效应)
- 让自尊心和自我成为沟通的障碍
- 当意识到自己做了错事时让披露过程充满生气
- 想到/发现了实际上是旧的新事物
- 得到你尊敬的研究人员的批评
尝试避免你的负面感受影响任何人...包括你自己
尽量锻炼你的情绪并避免过早的庆祝活动
失败也是正常的。失败并不致命。
每个人都在走自己的路,但是有些路其他人在之前已经走过了