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等),请确保你演示利用并将其置于组织的背景中。