idc全球网络安全支出指南(NSA的网络安全报告之网络基础设施安全指南)
idc全球网络安全支出指南(NSA的网络安全报告之网络基础设施安全指南)注意:这些命令还可能禁用默认情况下在线路上启用的其他服务,包括SSH。有关如何启用SSH的详细信息,请参阅7.11.1配置SSH以进行远程管理。根据设备的不同,可能还需要将类似的配置应用于其他线路。如果特定设备上不存在VTY第5行到第15行,则无需执行这些命令。NSA建议使用加密服务来保护网络通信并禁用所有明文管理服务(例如,Telnet,HTTP,FTP,SNMP1/2c)。这确保了捕获网络流量的对手无法轻易获得敏感信息。有关如何启用加密服务的详细信息,请参阅7.11配置远程网络管理服务。如果设备不支持加密协议,请将管理系统直接连接到控制台或管理端口,或建立专用的带外管理网络以降低对手捕获明文协议的能力。使用以下配置命令禁用Telnet服务:line vty 0 4 transport input noneline vty 5 15 transport input none
7.远程管理和网络服务
管理员可以通过各种服务远程管理网络设备。一些常见的网络服务包括SSH、超文本传输协议(HTTP)、SNMP和文件传输协议(FTP)。这些服务对管理员很有用,但它们也是攻击者利用和获取对设备的特权级别访问权限的目标。它们都必须正确配置,以降低妥协的可能性。
7.1禁用明文管理服务
明文协议通过网络“以明文形式”(即未加密)传递流量,并且是在广泛使用加密之前设计的。因此,使用这些协议远程管理关键设备可能会导致信息泄露,从而可能对设备和网络安全产生不利影响。攻击者可以通过常见的信息检索技术(例如,网络分析器或数据包捕获实用程序)收集用户名、密码、配置信息和其他敏感数据,从而危害设备或服务。
NSA建议使用加密服务来保护网络通信并禁用所有明文管理服务(例如,Telnet,HTTP,FTP,SNMP1/2c)。这确保了捕获网络流量的对手无法轻易获得敏感信息。有关如何启用加密服务的详细信息,请参阅7.11配置远程网络管理服务。
如果设备不支持加密协议,请将管理系统直接连接到控制台或管理端口,或建立专用的带外管理网络以降低对手捕获明文协议的能力。使用以下配置命令禁用Telnet服务:
line vty 0 4 transport input noneline vty 5 15 transport input none
根据设备的不同,可能还需要将类似的配置应用于其他线路。如果特定设备上不存在VTY第5行到第15行,则无需执行这些命令。
注意:这些命令还可能禁用默认情况下在线路上启用的其他服务,包括SSH。有关如何启用SSH的详细信息,请参阅7.11.1配置SSH以进行远程管理。
使用以下配置命令禁用HTTP服务:
no ip http server
有关如何启用安全HTTP服务的详细信息,请参阅7.11.2配置HTTP以进行远程管理。
通过使用以下配置命令删除任何已配置的团体字符串,禁用版本1和2c的SNMP和SNMP陷阱服务:
no snmp-server community<COMMUNITY_STRING>
no snmp-server host<HOSTNAME_OR_IP_ADDRESS> <COMMUNITY_STRING>
有关如何启用SNMP版本3的详细信息,请参阅7.11.3配置SNMP以进行远程管理。
使用以下配置命令删除任何行,禁用普通文件传输协议(TFTP):
no tftp-server<FILENAME>
FTP服务通常不作为侦听服务启用,但该协议可以用作客户端。使用以下配置命令删除FTP凭据:
no ip ftp username no ip ftp password
7.2确保足够的加密强度
某些加密服务要求生成公钥和私钥对,以便客户端可以连接到服务器并对其进行身份验证。此外,加密连接的客户端和服务器可以为每个唯一连接共同建立一个私有会话密钥。使用弱算法或少量位的加密连接使攻击者更容易破解私有会话密钥并解密在唯一连接期间传输的所有数据。
有关哪些算法和密码经国家安全局批准的国家安全系统(NSS)的指导,请参阅CNSSP 15。CNSSP 15要求在IETF文档草案中进行了解释:用于Internet协议安全(IPsec)的商业国家安全算法套件加密(IPsec)、用于TLS和DTLS 1.2和1.3的商业国家安全算法(CNSA)套件配置文件,以及用于安全外壳(SSH)的商业国家安全算法(CNSA)套件加密,https://datatracker.ietf.org/doc/draft-gajcowski-cnsa-ssh-profile/.
有关非NSS美国政府系统的相关要求和指南,请参阅NIST SP 800-52修订版2附录F。
这些文档包含最新推荐的加密参数。
NSA建议将3072位或更高位用于非对称(公钥和私钥)密钥生成,384位用于椭圆曲线加密(ECC)密钥,256位用于对称加密密钥。某些系统可能不支持3072位,因此可能需要改用4096位。对于密钥大小较小的任何设备,请重新生成新的密钥对,并将加密协议配置为仅使用批准的算法。较大的密钥大小可能会增加连接到服务的时间(由于额外的计算),但在大多数设备上可以忽略不计。有关配置加密服务的详细信息,请参阅7.11配置远程网络管理服务。
7.3利用安全协议
一些常见的管理服务实现的协议在实现和信息交换方面存在缺陷,这些漏洞可能被攻击者利用。某些协议(如SSH)可以配置为向后兼容,并接受较旧的不安全协议以及较新的协议。较旧的协议受中间人技术的约束,这些技术可能迫使客户端和服务器协商较弱的算法,可能没有用户意识。
NSA建议确保管理服务使用最新版本的协议,并充分启用适当的安全设置。SSH版本2是远程访问设备的首选方法。应将加密的HTTP服务器配置为仅接受传输层安全性(TLS)版本1.2或更高版本。有关将服务限制为特定版本的协议的详细信息,请参阅7.11配置远程网络管理服务。
7.4限制对服务的访问
如果允许大量设备连接到管理服务,则它们更容易被利用。NSA建议将ACL配置为仅允许管理系统连接到设备以进行远程管理。无法支持ACL的设备应放置在单独的网络管理网段(例如VLAN)上。
创建后,应将ACL应用于该VLAN或入口路由器,以限制对此网段的访问。可能需要在关键网段前面实施单独的防火墙,以限制哪些系统可以连接到该VLAN。请考虑使用具有保留IP地址的动态主机配置协议(DHCP),或为管理系统分配具有静态IP地址,以便更轻松地定义ACL并限制对管理服务的管理访问。
大多数管理服务只接受标准ACL。可以使用permit关键字在附加行上列出多个设备或网络。即使每个ACL在最后都有一个隐含的拒绝语句,但最佳做法是显式包含它,以便记录被拒绝的尝试。创建标准ACL以仅允许管理员使用以下配置命令使用的IP地址:
access-list<ACL#>permit<NETWORK><WILDCARD_MASK>log access-list<ACL#> deny any log
有关如何将ACL应用于特定管理服务的详细信息,请参阅7.11配置远程网络管理服务。
NSA还建议从配置中删除未使用的ACL,以减少有关是否正确应用它们的混淆。验证未应用标准ACL后,使用以下配置命令将其删除:
no access-list<ACL#>
7.5设置可接受的超时期限
为空闲连接设置超时期限允许会话在规定的非活动时间后关闭。如果未设置超时期限或设置得太长,则空闲连接可能会无限期地继续,如果设备上设置了有限的同时连接,甚至会导致DoS。DoS将一直持续到达到空闲超时期限为止,如果禁用了空闲超时,则该超时期限可能是无限期的。较长的超时期限为攻击者提供了更多的时间在会话处于空闲状态时劫持会话。
NSA建议在所有远程设备上将管理连接的会话超时设置为五分钟或更短时间(例如,VTY线路、SSH、控制台和辅助端口上的执行超时)。请勿将超时期限设置为零,因为大多数设备将使用此设置禁用超时功能。有关限制特定管理服务的会话超时的详细信息,请参阅7.11配置远程网络管理服务。
7.6启用传输控制协议(TCP)保持活动状态
从设备发送和接收的TCP保持活动状态消息允许它在给定时间范围内未发生任何活动时评估连接状态。这些消息可用于检测连接中的意外丢失,并减轻潜在的网络危害。在某些设备上,缺少TCP保持活动状态服务会导致已建立的TCP连接在一端意外丢失连接后保持打开状态,从而使会话容易受到劫持。此外,甚至可能不需要身份验证,特别是对于未加密的连接,并且攻击者可以简单地恢复会话,从而可能获得特权级别访问权限。
NSA建议使用以下配置命令为所有TCP连接的入站和出站消息启用TCP保持活动状态设置:
service tcp-keepalives-in service tcp-keepalives-out
请注意,某些设备不支持TCP保持活动状态消息的配置。
7.7禁用出站连接
通过管理端口对设备进行身份验证后,用户通常能够通过支持的协议(例如,Telnet和SSH)远程连接到网络上的其他系统。如果攻击者能够破坏设备或使用管理员账户获得用户级访问权限,则此出站连接可能用于通过网络前进。正确检查设备配置并利用ACL可以防止未经授权的系统访问网络资源。
通过管理端口对设备进行身份验证后,用户通常能够通过支持的协议(例如,Telnet和SSH)远程连接到网络上的其他系统。如果攻击者能够破坏设备或使用管理员账户获得用户级访问权限,则此出站连接可能用于通过网络前进。
正确检查设备配置并利用ACL可以防止未经授权的系统访问网络资源。
line con 0transport output noneline vty 0 4 transport output noneline vty 5 15 transport output none
根据设备的不同,可能还需要将类似的配置应用于其他线路。如果特定设备上不存在VTY第5行到第15行,则无需执行这些命令。请务必注意,必须在控制台线路上显式禁用此功能。
如果需要出站连接才能将文件复制到设备或从设备复制文件以进行维护或完整性验证,请将其限制为仅SSH,并限制可通过出站ACL访问的设备数量;任务完成后,恢复为上述配置。
8删除SNMP读写社区字符串
SNMP版本1或2c读写社区字符串类似于密码,可用于访问或修改设备配置和操作系统文件。这些操作通常不能使用只读社区字符串完成。由于SNMP读写社区字符串以明文形式发送,因此攻击者可以利用它们来完全控制网络设备。
NSA建议删除所有SNMP读写社区字符串,并通过加密和身份验证升级到SNMP版本3。如果远程管理需要版本1或2c SNMP读写社区字符串并且无法删除,则建议读写社区字符串与其他社区字符串明显不同,以防止攻击者在获得只读社区字符串时猜测读写社区字符串。
所有版本1和2c SNMP社区字符串都可以使用以下exec命令列出:show running-config | include snmp-server community
注意:读写社区字符串将包含RW关键字,而只读社区字符串将包含RO关键字。
使用以下配置命令禁用SNMP读写团体字符串:
no snmp-server community<COMMUNITY_STRING>
9禁用不必要的网络服务
在设备的初始安装期间,默认情况下会启用多个TCP和UDP服务,即使提供的功能对于正常操作是不必要的。
这些服务可能会降低网络的安全级别,为对手提供额外的接入点来利用设备,并使其容易受到未经授权的监控,信息收集和破坏。
例如,Cisco智能安装通常是不必要的,但是当启用时,未经身份验证的远程对手可以使用此服务来获取设备的配置文件、上传新的配置或操作系统映像文件,或者强制重新启动。这在思科的安全公告cisco-sa-20170214-smi中已被记录为对该协议的滥用,但安全社区已经观察到并承认这个问题是攻击者利用的严重漏洞来获取互联网上的配置文件。
NSA建议在每台设备上禁用所有不必要的服务。如果服务是必需的,并且可以支持密码和ACL,请根据NSA的强密码指南创建密码(请参阅5.5创建强密码),并应用ACL以仅允许所需的系统连接到服务。如果设备不支持ACL,则可以将其移动到单独的VLAN,并且可以将ACL应用于VLAN。
NSA还建议使用以下配置命令在所有设备上立即禁用Cisco智能安装服务:
no vstack
尽管此服务是为交换机设计的,但路由器也可以配置为思科智能安装控制器。因此,应在所有设备上显式禁用它,尤其是在首次配置它们时。
使用以下配置命令禁用其他不必要的TCP和UDP服务:
no service tcp-small-servers no service udp-small-servers no service finger
10禁用特定接口上的发现协议
思科发现协议(CDP)和链路层发现协议(LLDP)是广播协议,它们定期将网络拓扑和设备信息通告到支持该协议并侦听数据包的相邻设备。默认情况下,此功能处于启用状态,对于管理员获取有关网络的信息非常有用,但对于可以被动收集网络配置信息的对手来说,此功能也非常有用。能够部署嗅探器的对手可以收集设备型号、操作系统版本、VLAN信息以及物理和逻辑地址,从而获得有价值的信息以利用网络上的系统。
NSA建议在能够使用这些服务的所有设备上禁用CDP和LLDP。如果正确的网络通信(例如,某些Cisco IP 语音 (VoIP) 电话)需要服务,则仅在需要该协议的设备之间的点对点链路上或在启用语音的端口上启用该服务。
可以使用以下配置命令全局禁用CDP和LLDP:
no cdp run no lldp run
如果特定接口上需要CDP,则必须全局启用CDP,但在所有其他接口上禁用CDP,如以下单个接口的配置命令所示:
interface<INTERFACE>
no cdp enable
11配置远程网络管理服务
本节介绍如何正确启用常见的远程网络管理服务。
11.1配置SSH以进行远程管理
使用以下配置命令允许入站SSH连接:
line vty 0 4 transport input ssh
line vty 5 15 transport input ssh
注意:默认情况下,这可能会禁用线路上启用的其他服务,例如Telnet。如果特定设备上不存在VTY第5行到第15行,则无需执行这些命令。根据设备的不同,可能还需要将类似的配置应用于其他线路。
可以使用以下exec命令确认允许的输入传输:
show line<LINE> <LINE_NUMBER>
禁用SSH版本1连接,并且仅允许使用以下配置命令的协议版本2:
ip ssh version 2
使用以下配置命令为SSH生成新的非对称Rivest-Shamir-Adleman(RSA)密钥对:
crypto key generate rsa modulus 3072
注意:此命令将覆盖现有的RSA密钥对。
使用以下配置命令为SSH生成新的非对称ECC密钥对:
crypto key generate ec keysize 384
注意:此命令将覆盖现有的ECC密钥对。
使用以下配置命令将最小Diffie-Hellman密钥大小设置为4096位:
ip ssh dh min 4096
注意:某些设备不支持Diffie-Hellman密钥大小的3072位,因此建议使用4096位。
可以使用以下配置命令指定SSH协议接受的加密、密钥交换(KEX)和消息身份验证代码算法(以包括首选顺序):
ip ssh server algorithm encryption<ALGORITHM>[<ALGORITHM> ...] ip ssh server algorithm kex <ALGORITHM> [<ALGORITHM> ...]
ip ssh server algorithm mac<ALGORITHM>[<ALGORITHM> ]
有关可接受算法的更多信息,请参阅CNSSP 15。CNSSP 15 要求在 IETF 关于安全外壳(SSH)的商业国家安全算法(CNSA)套件加密的草案文档中进行了解释。https://datatracker.ietf.org/doc/draft-gajcowski-cnsa-ssh-profile/
可以使用以下exec命令确认SSH服务的配置:
show ip ssh
应用标准 ACL 以仅允许管理员使用以下配置命令使用的 IP 地址:
line vty 0 4
access-class<ACL#> in
line vty 5 15
access-class<ACL#>in
如果特定设备上不存在VTY第5行到第15行,则无需执行这些命令。请注意,如果在线路上启用了此ACL,则此ACL也适用于Telnet。根据设备的不同,可能还需要将类似的配置应用于其他线路。有关创建标准ACL的详细信息,请参阅7.4限制对服务的访问。
使用以下配置命令将会话过期时间设置为 5 分钟或更短时间:
line con 0
exec-timeout 5 0
line vty 0 4
exec-timeout 5 0
line vty 5 15
exec-timeout 5 0
如果特定设备上不存在VTY第5行到第15行,则无需执行这些命令。
注意:如果在线路上启用了Telnet,这也将适用于Telnet。根据设备的不同,可能还需要将类似的配置应用于其他线路。
11.2 为远程管理配置HTTP
如果HTTP用于管理目的,请使用以下配置命令启用基于TLS的HTTP:
ip http secure-server
仅使用以下配置命令接受 TLS 版本 1.2:
ip http tls-version TLSv1.2
可以使用以下配置命令指定加密 HTTP 服务接受的密码套件(以包括首选顺序):
ip http secure-ciphersuite<CIPHERSUITE> [<CIPHERSUITE> ]
有关可接受算法的更多信息,请参阅 CNSSP 15。CNSSP 15 要求在 IETF 关于TLS和DTLS 1.2 和 1.3 的商业国家安全算法(CNSA)套件配置文件文档草案中进行了说明。
应用标准 ACL 以仅允许管理员使用以下配置命令使用的 IP 地址:
ip http access-class<ACL#>
注意:如果启用了明文 HTTP 服务,则此 ACL 也将应用于明文 HTTP 服务。有关创建标准ACL 的详细信息,请参阅 7.4限制对服务的访问。
HTTP 服务器连接的默认空闲超时为 180 秒(三分钟),因此无需更改此值。
11.3配置 SNMP以进行远程管理
如果使用 SNMP 进行管理,请使用以下配置命令启用具有身份验证和隐私(加密)功能的 SNMP 版本 3:
snmp-server group<SNMPv3_GROUP> v3 priv access <ACL#>
snmp-server user<USER> <SNMPv3_GROUP> v3 auth sha <AUTH_PASSWORD>priv aes
256<PRIV_PASSWORD>access <ACL#>
首先,必须定义一个组,其中priv 关键字等效于 authPriv(身份验证和隐私)。必须定义一个或多个用户并将其分配给组。除了身份验证和加密参数之外,还必须为每个用户提供两个不同的密码,一个用于身份验证,一个用于隐私。AES-192 和 AES-256 的互操作性问题已发现,因此可能需要使用 AES-128 进行加密,而不是使用 AES-256 和 aes 128 关键字。如上所示,ACL 可以应用于组和每个用户,方法是在每个命令的末尾使用 access 关键字将其指定为单独的选项。
可以使用以下 shell 命令从 Linux 系统测试上述 SNMP 配置:
snmpget -v 3 -u<USER>-a sha -l authPriv -A '<AUTH_PASSWORD>' -x AES \
-X '<PRIV_PASSWORD>'<IP_ADDRESS>1.3.6.1.2.1.1.5.0