如何写出出色的渗透测试报告
报告是渗透测试中一个不太受欢迎的话题。人们很难有灵感去撰写关于他们参与的技术细节。在某些情况下,测试人员只浅尝辄止,仅识别测试的成功部分。在其他情况下,测试人员只是 regurgitate 某些扫描工具的输出,将结果称为最终报告。
然而,有时你会发现一个测试人员创作出一件艺术品。它涵盖了成功的利用、未奏效的部分,以组织能够理解的方式识别漏洞的影响,推荐纠正措施,并以讲述故事的方式呈现,使得组织可以从报告本身重现结果或直接重新测试。正是这种类型的报告,我们在 BHIS 为每次参与都努力创作。
接下来的几段将解释我认为良好报告的最重要方面。我按我认为对客户提供价值最关键的顺序排列它们。那么,让我们开始吧……
1. 科学方法
所有步骤对我们的成功都至关重要,因为它们 feed into 最后一步——分享。
大多数人会熟悉科学方法概述的步骤:提问、假设、实验、观察和记录、分析,以及分享结果。这种方法的应用在工程学校中被灌输给我,因为我被迫以这种风格撰写实验报告,至少每周一次,持续四年。在报告渗透测试时,我们可以将这种方法应用于我们在环境中发现的每个漏洞。让我们分解每个步骤:
- 提问 – 我们的许多问题通常由漏洞扫描器 upfront 提出。然而,我们应该准备好一旦处理了扫描结果后提出额外问题。问题如“网络上不太常见的监听端口是什么?”、“我可以在哪里使用默认凭据?”或“当……时会发生什么?”
- 假设 – 通常,这一步涉及解释扫描结果或我们正在交互的应用程序或服务的响应。这可以包括选择我们相信可能对特定服务或主机成功的工具或技术。
- 实验 – 这是执行我们在假设步骤中识别的实际利用或工具。
- 观察和记录 – 这里我们记录我们的利用努力的结果。
- 分析 – 它奏效了吗,失败了吗,为什么?我们可以从中学到什么?此时,我们可能会改变我们的假设或识别不同的方法或工具进行实验。
- 分享 – 这里我们记录过程的结果。
分享是工程学科中最强调的步骤。如果结果不能独立验证,实验就毫无意义。可重复性是我们测试中 strive for 的,关键元素是我们的客户可以独立验证我们的结果。
2. 讲述故事
你调查的每个漏洞都应该有一个故事 attached to it。你应该尝试为你调查的每个漏洞回答以下问题:
- 什么吸引你到这个元素(漏洞扫描结果、未识别的监听服务、不常见的开放端口)?
- 漏洞是什么?
- 它对组织有什么影响?
- 你尝试利用它了吗?
- 构建利用有多难?
- 利用尝试的结果是什么?
- 能否获得进一步利用?
- 组织可以做什么来修复问题?
- 组织可以做什么来缓解问题?
报告通常有全面覆盖和简洁性的竞争优先级。然而,你的报告应该包括失败利用尝试的细节,就像成功的一样。这向目标组织展示防御在哪里奏效,并帮助他们理解你执行测试的方法。
3. 实时撰写
而不是收集工件并在测试完成后组装故事,你应该尝试在测试过程中撰写报告的方法论部分。这允许你记录你的行动、截取屏幕截图,并以意识流的方式识别潜在发现。你测试活动的这个账户不需要完美。然而,它在完成你的报告方面大有帮助,因为它只需要少量抛光和对其中识别的任何发现的完整撰写。
4. 组织
有几种方法处理报告内的组织,没有一种是错误的。最简单的可能是按时间顺序。通过在测试时记录,你确保所有相关细节都被捕获,并且你的测试不需要完成两次。由于大多数扫描工具按相对风险评级记录漏洞,时间顺序很可能也与风险评级顺序一致。这确保最重要的材料在你方法论部分的开头。
然而,添加内容到部分可能明智,因为它们 make sense。许多高风险漏洞将在探索漏洞扫描时在“信息性”发现中识别。将这些信息移动到报告的开头可能最合理。此外,将类似漏洞分组在一起可能合适。例如,TLS、SSH 和 RDP 服务中的错误配置有类似影响,因此将它们保持在报告的同一区域是有意义的。
5. 插图
确保包括许多说明性的屏幕截图,展示你正在调查的条件、用于利用的工具,以及利用的结果。在每个屏幕截图中,你还应该放大兴趣点,并有指示器突出显示行动。如果你的观众无法弄清楚它试图传达什么,屏幕截图就没有帮助。然而,一个经过深思熟虑的情况图像在帮助重现结果和强调活动影响方面大有帮助。
当你将这些插图放在一起时,注意你正在显示的信息。在许多情况下,驱动业务影响的测试元素本质上是敏感的。有些可能模糊,如密码哈希,但其他更直接,如个人可识别信息或受保护的健康信息。作为渗透测试人员,我们永远不知道我们的报告可能最终在哪里,在谁的手中,或阅读个人的动机。因此,我们必须绝对确保图形被 properly redacted。
6. 语态和时态
尽可能,报告应该使用过去时。由于渗透测试是时间点评估,适当识别测试时环境中存在的漏洞。这有助于提醒读者,环境中可能发生了影响报告中识别的漏洞的变化。这些变化可能导致环境整体状况的退化或改进。
第三人称是官方技术和工程写作中几乎 universal 的要求。渗透测试报告也不例外。因此,你应该避免使用第一和第二人称代词,如 I、we 和 you。相反,用第三人称名词和代词替换它们,如“测试人员”、“测试员”、he、she、him、her 和 it。
主动语态与被动语态在科学界有一个长期存在的 flame war,类似于“vi 与 emacs”。有些人认为主动语态更简洁和清晰。其他人指出被动语态有助于避免第一人称代词并强调所完成的事情。就像你最喜欢的编辑器问题一样,这是一个个人选择,由你决定。关于这个主题的完整处理可以在以下 URL 找到: https://cgi.duke.edu/web/sciwriting/index.php?action=passive_voice
无论你的选择是什么,只需确保在你的写作中 consistently 使用它。
7. 一致性
许多渗透测试报告最终不是由单个人撰写的。通常,就像渗透测试本身一样,报告由测试团队的几个成员撰写的单独子元素组成。因此,单个编辑应该审查报告的整体,以确保所有单独部分以一致的方式应用相同的时态、语态和风格。否则,报告在客户阅读时会感觉 fragmented。单独部分不必是彼此的完美镜像,但它们应该 strive to avoid 相互冲突的 wild contrasts。
8. 语法和拼写
语法和拼写可能似乎有点 nit picky。然而,我们在一个强调注意细节的领域操作。因此,我们应该在我们的报告中展示同样的注意细节。拼写检查器在几乎所有应用程序中 ubiquitous,所以拼写错误的单词 rarely forgiven。一些你应该总是仔细寻找的事情是:
- 误用单词 – 一个正确拼写但给定上下文有错误含义的单词。
- 缩略词 – 除非你必须,否则不要使用它们,但如果你使用,确保你使用正确的——your 和 you’re 不是同一件事。
- 首字母缩略词 – 确保在报告中首次使用前扩展它们。
- 数字 – 根据大小或值 consistently 使用数字或拼出值。
我经常使用的一种技巧是旧的倒读技巧。当你读你写的句子时,你会倾向于应用你 intended 的含义并跳过单词。通过倒读,你避免应用你自己的上下文,并专注于页面上的单词。
9. 争取反馈!!!
在你读完你的报告并对内容满意后,把它给你团队中的其他人。确保它被审查技术准确性和 adherence to 你的报告标准(语态、时态、人称、语法和拼写)。
在 BHIS,我们采用一个两层级审查过程, mirror 这个推荐。在测试员对他们的 offering 满意后,它被发送进行同行评审以确定技术准确性。报告被返回给原始测试员进行编辑。一些被 incorporated,其他 discarded。我们将决定留给原始作者。
在初始编辑轮完成后,测试员将报告转发给我们自己的语法警察。他们确保一个真实的人(相对于技术爱好者测试员)可以阅读和理解报告的内容。原始作者再次接受或拒绝更改,然后交付给客户。这个过程有助于确保我们的报告是顶级的。
结论
确保我们的客户能够掌握我们渗透测试报告中说明的概念是我们的责任。应用上述概述的技术可以帮助确保我们理解并满足那个责任。我们的报告通常是测试完成后唯一剩余的工件。它们向我们测试的组织说明业务价值。通过通过全面和准确的报告区分自己,我们可以让企业回来服务。
如果你对优秀的写作参考感兴趣,查看“The Tongue and Quill”。它是一个非常全面的写作风格指南,由美国空军出版。自 1993 年以来,我书架上有一份副本,我经常参考它。PDF 文件可在以下位置获得: http://static.e-publishing.af.mil/production/1/saf_cio_a6/publication/afh33-337/afh33-337.pdf