TestSSL.sh – 大规模评估SSL/TLS配置
David Fletcher //
你是否曾在Nessus扫描结果中看到类似下面的输出?最近我在一次任务中就遇到了这种情况。我不禁思考,该如何验证所有这些SSL/TLS的发现。
幸运的是,一位同事建议我试试testssl.sh。这个工具显著加快了进程,而且我发现可以利用其输出做一些非常棒的事情。
在深入大规模测试之前,我们应先熟悉这个工具及其输出。如你所猜,testssl.sh是一个shell脚本,用于探查SSL和TLS配置,提供关于服务支持的协议和密码套件的全面信息。
该工具可在GitHub上找到:https://github.com/drwetter/testssl.sh。它有许多选项可用于对服务运行非常具体的测试(特定协议、密码套件、漏洞等)。然而,由于发现众多,且单个主机可能匹配多个发现,我们将选择运行所有测试(无参数)。这在报告方面提供了很大的灵活性。值得注意的是,testssl.sh也可以评估非HTTP服务。本文仅关注HTTP服务。
在终端中对单个主机运行testssl时,输出在终端中颜色化,看起来非常不错。但这有些限制,因为它迫使测试者截屏,而不是向客户提供实际的报告输出。
testssl.sh输出的终端颜色是ANSI转义码。因此,终端控制序列与输出文本混合在一起。这可能带来麻烦,但恰巧有一个名为aha(ANSI HTML适配器)的Linux工具,可以将testssl.sh生成的输出转换为HTML页面,如下所示。
我发现通过aha管道输出testssl.sh有几个缺点。首先,testssl.sh在枚举SSLv3支持的密码时有时会挂起。如果发生这种情况,我们必须中断命令(CTRL-C),这会终止评估和报告。我还发现aha有时会遇到管道破裂错误并挂起等待输入。再次,报告和评估都因此失败。
由于这两个原因,大规模测试的最佳策略涉及以下两个步骤。首先,在一个for循环中运行testssl.sh,从文件中读取测试主机的IP地址,并限制进程的运行时间。如果你真的想加快速度,可以使用xargs使整个过程多线程化。接下来,捕获testssl.sh的原始输出,并在所有原始输出生成后使用aha处理。这样做可以让你构建专注于特定发现细节的自定义报告。原始输出将包含完整细节。这意味着你可以运行testssl.sh一次,并为列出的每个单独发现创建自定义报告。
让我们逐步了解这个过程。首先,你需要从Nessus结果中获取目标IP地址。一个很好的方法是使用EyeWitness。这个工具以协助快速分类Nessus扫描结果而闻名。EyeWitness将消耗一个.nessus文件,并生成一个HTML报告,其中包含报告中找到的所有Web服务器(或RDP/VNC)的屏幕截图。我们感兴趣的选项是“–createtargets”开关。它接受Nessus文件,并在输出文本文件中创建一个URL列表。
生成目标列表后,可以构建for循环开始扫描。以下语法将遍历目标文件中的每个URL(Nessus配置为不解析名称)。
|
|
每个主机将以20秒的超时进行扫描,输出将管道到一个文本文件中,命名约定为<IP地址>:<端口>.txt。使用timeout命令可以避免密码枚举挂起的问题。由于我们输出到文本文件,也不会遇到aha的管道破裂问题。注意,超时值应根据你工作的环境进行调整,以确保捕获testssl.sh的所有输出。
扫描完成后,我们可以使用输出文件创建针对特定发现定制的报告。例如,下面使用cat和egrep命令从扫描创建的文本文件中收集所有SSLv2结果。该命令产生的输出也可以通过aha管道生成特定于此发现的HTML报告。
下面是一个HTML报告的示例。
所以,去获取一份testssl.sh,让你的想象力自由驰骋。这个工具生成的输出非常容易解析成专注于需要解决的特定问题的报告。
别忘了验证不止于此。如果你发现某些东西是可利用的(如heartbleed、shellshock等),确保演示利用并将其置于组织的背景中。
准备好了解更多?
通过Antisyphon的实惠课程提升你的技能!
付费转发你能支付的培训
提供实时/虚拟和点播