|
|
个人防火墙软件 虽然称为个人防火墙,但这类软件提供了两个主要的功能。
·端口阻塞
·连接追踪
你还可以拒绝特定的IP地址。这些程序并不是真的防火墙。而且,大多数的个人防火墙软件并不适合做服务器的安全解决方案。
流行的软件
流行的防火墙软件包括:
·Network Ice's Black Ice和Black Ice Defender
·McAffee's ConSeal
·Zone Labs'Zone Alarm
虽然大多数的个人防火墙产品是针对客户端系统的,但NetworkIce同样也适合对高性能的产品提供支持。它们是ICEcap和BlackIce。后者是主机级的入侵监测软件的代表。
IPSec和加密
许多公司越来越重视内部的攻击。为了解决这种问题,你可以建议应用IPSec和个人加密。PGP程序是简单地应用IPSec来帮助建立有效的局域网和广域网级别的VPN解决方案的实例。
个人加密产品包括象BestCrypt这样的程序。这些软件有助于公司确保文件,目录甚至是整个硬盘的保密性。这些操作系统的附件可以帮助确保数据的机密。
加密和安全策略的一致性
其实,有些公司不希望使用个人加密,因为不希望员工加密的文件连管理者和IT人员也解不开。因此,如果你建议了这种解决方案,你需要准备建立Key escrow系统来统一管理加密和解密。
审计可以建立在多种级别上。例如,如果你在Windows Primary Domain Controller(PDC)实施了审计,则该策略将应用于整个域。审计还可以发生在操作系统级别。例如,你可以象前面课程中所学的审计登录失败和系统关闭。最后,你可以在资源级别实施审计,这些资源包括文件和目录。
修补系统漏洞
审计人员的工作就是发现系统漏洞并修补它们。操作系统的hot fixes和service packs是修补系统漏洞的主要手段。你可以升级TCP/IP堆栈,或者,甚至应用Ipv6。
NT中的TCP序列
知道Service Pack5出现之前,windowsNT使用的TCP序列机制是很容易被预测的。虽然序列号可以从随机的数值开始,但是随后接收的包会在序列上加一。攻击者通常会利用这种可以预测的序列数,因为这允许他们进行劫持攻击。虽然由SP5提供的序列机制也没有像Linux和UNIX操作系统中的复杂,但仍然建议安装最新的Service Pack 6a版本。
Ipv6
虽然Ipv6无法实施在每种场合,但它迅速成为一种选择。IPv6使用了加密和验证机制,现在主流的操作系统如WindowsNT,Linux 6.1和Solaris都支持IPv6。在本书写作的时候,选择IPv6作为唯一的协议会限制访问Internet,但是在某些情况下,对隔离的局域网使用IPv6会达到更高的安全效果。
IPv6提供了下列的安全特性:
·加强的验证机制(通过验证扩展头)减小了被spoofing和hijacking攻击的可能性。
·数据加密(通过Encrypted Security Payload扩展头)减小了被嗅探攻击的可能性。
想获得关于IPv6的更多信息,请访问http://www.ipv6.org。这个站点包含了最新的有关IPv6发展的信息,所有与协议相关的RFC文件,和所有支持IPv6的操作系统和程序。
升级和替代服务
通常你需要升级和替代已经存在的服务。在进行更改时,请考虑下列的步骤:
·研究新的产品。问问自己它是否适合你的网络和商业情况。
·确定需要多少时间来实施这些变化。
·在把它们应用到产品之前彻底地进行测试。
·要考虑到这些升级和替代会影响其它服务。大多数的网络主机之间是相互影响的。这些新的服务会引起这些问题吗?
·确定是否需要对最终用户进行培训。
Secure Shell(SSH)
Telnet,rlogin和rsh非常有用。它们允许你远程操作服务器就象在本地工作一样。Rexec程序允许你不用提供密码就可以从远程在服务器上运行命令。然而,这些服务都是以明文的方式传输信息。Secure Shell(SSH)是最常见的替代这些服务的方法。在本文写作时,SSH2是最新的版本。
SSH提供的安全服务
SSH提供两项基本的服务:
·数据保密:由于服务器首先发送它的公钥给客户端,所以数据通道是加密的。然后客户端使用服务器的公钥对所有信息加密。当服务器收到加密的信息后,使用自己的私钥对信息进行解密。
·验证:使用上面谈到的公钥,两个用户交换彼此的公钥然后使用公钥进行验证。这种机制的好处是在网络上不会传输用户名和密码的信息。
你需要理解SSH首先加密了数据通道,然后运行各种各样的验证方法。缺省情况下,Secure Shell使用22端口,允许你使用公钥进行加密。SSH2使用DSA数字签名算法,这种算法与RSA公钥加密相似,但是没有专利。当然,SSH2可以使用RSA算法。
在SSH中的加密和验证
加密的过程从服务器自动把公钥发送给客户端开始。然后客户端使用公钥加密信息,服务器用自己的私钥对信息解密。随后系统间的所有传输都要加密。
验证
缺省情况下,SSH会首先尝试用公钥进行验证。这些公钥存储在每个用户的$HOME/.ssh2目录下。例如,如果在你的Red Hat Linux 6.1操作系统下有一个名叫james的用户。则所有的密钥(包括james的公钥和私钥)都存储在、home/james/.ssh2目录下。请注意这是个隐藏目录。
如果这些密钥或识别和验证的文件并不存在,则SSH将使用标准的存放在/etc/passwd和/etc/shadow数据库中的用户名和密码。这种方式的缺点是在网络中传输了用户名和密码。虽然密码信息是加密的,但是在公网上传送密码肯定是不安全的。
SSH2内容
最初SSH是被发展来使UNIX系统之间的连接更安全的。然而,许多Windows的客户端允许你在连接UNIX操作系统时使用SSH。下表提供了UNIX和NT SSH2的有关内容
内容 | 描述 | | /usr/local/bin/ssh2 | Linux SSH2客户端 | | SSH Secure Shell客户端 | 许多的Windows 下SSH客户端之一。F-Secure支持Windows和Macintosh系统 | | /usr/local/bin/ssh-keygen2 | 为每个用户生成密钥对 | | /usr/local/bin/scp2 | 客户端允许你使用由SSH加密的通道来远程执行命令 | | /usr/local/sbin/sshd2 | SSH2守护进程 | | /usr/local/bin/ssh-agent2 | 允许你将公钥存储在内存中。只要你已经建立了信任关系,则登录时不需要密码。 | | /usr/local/bin/sftp-server2 | 运行sshd2的secure FTP服务器。某些Windows客户端可以使用secure FTP服务器 | | /usr/local/bin/sftp2 | Secure FTP客户端 |
你可以从各种途径获得SSH,包括www.ssh.org,www.ssh.com,和 rufus.w3.org 。要获得更多有关SSH2的信息,你可以阅读随文档附带的README文件,或者阅读FAQ(http://www.ssh.org/faq.html)你可以从各种RPM站点获得各种版本的SSH(例如rufus.w3.org 和www.datafellows.com)。
在使用客户端/服务器产品时,你必须首先配置服务器和客户端彼此通信。要做到这一点,需用安装和建立信任关系。在Linux下,安装服务器的同时也安装了客户端。然后,你可以生成和交换公钥。服务器的配置过程包括生成公钥和私钥。这些密钥会自动在SSH握手阶段进行传输。你必须输入下列命令来启动SSH2服务:
/usr/local/sbin/sshd2
你可以编辑/etc/rc.local文件使ssh2d每次都自动启动。对于Red Hat Linux操作系统,你只需要在该文件最后加上/usr/local/sbin/sshd2一行即可。
使用SSH登录
使用SSH登录,你需用使用下列命令格式:
/usr/local/bin/ssh2 –l username hostname
例如,使用用户名test登录系统noyas,你需用键入下列命令
/usr/local/bin/ssh2 –l test noyas
与SSH1兼容
如果你有已经运行SSH1的系统,则按照文件名是SSH2.QUICKSTART的指导来操作就行了。按照下列步骤进行将保证你的SSH1客户端可以使用SSH2。
SSH和验证:建立用户之间的信任关系
交换公钥的方法是最安全的SSH验证手段。在SSHfuwuq可以使用公钥加密进行验证之前,每个用户必须正确地建立信任关系。通常,这意味着每个用户必须交换公钥。下列是建立允许验证的密钥对的过程。这个过程假设两个用户希望使用公钥验证的SSH验证方式。请记住,SSH服务器自动加密数据通道。客户端只提供公钥进行验证。每个用户需要按照下面的过程进行设置。
1、使用/usr/local/bin/ssh-keygen2程序生成密钥对。象上面谈到的,Ssh-keygen2程序自动在每个用户主目录下的.ssh2目录中生成密钥对。
2、改变目录到你的主目录下的.ssh2目录中。然后重命名公钥和私钥文件。如果你使用标准的1024位加密,该文件缺省的名称是id_dsa_1024_a和id_dsa_1024_a.pub。你可以自由地分发结尾是.pub的文件,然而,不是以.pub结尾的文件必须保密。其实,你应当确保该文件只能被你读取。你还应当重命名这些文件并跟踪它们。例如,如果你的用户名是test,并且系统名为noyas的话,你可以将他的公钥和私钥分别重命名为test.noyas和test.noyas.pub
3、然后建立名为identification和authorization的两个文件。文件Identification内有你自己的私钥的名称,文件authorization内有你允许进入你的系统的所有用户的公钥的名称。你可以在该文件中输入任何你想输入的公钥名称。
4、在文件identification中输入私钥的名称。正确的格式是:Idkey test.noyas
5、同伴之间交换公钥。请记住,私钥要自己保管好。
6、在你收到其他人的公钥后,请确保把这些文件存放在.ssh2目录下。然后,你必须在文件authorization中输入同伴的公钥名称。语法是:Key keyname.pub。每一项占一行。如果你在文件authorization中输入Sandi和Jacob的公钥,你的文件authorization将如下所示:
key sandi.pub
key jacob.pub
7、一旦你和至少一个同伴进行完以上的步骤,则用户间便可以使用公钥加密来进行SSH2验证了。
技术提示:为了使这些步骤能够正常工作,必须运行sshd2的守护进程。请记住,sshd2守护进程通过自动传送公钥到所有申请的客户端来进行加密。每个用户负责建立彼此的信任关系来进行验证。你还应该保证DNS能够正常提供解析工作。
SSH 3.0 远程登录漏洞
受影响的系统:
SSH Secure Shell 3.0.0、
Red Hat Linux 6.1
Red Hat Linux 6.2
Red Hat Linux 7.0
Red Hat Linux 7.1
Sun Solaris 2.6
Sun Solaris 2.7
Sun Solaris 8
HP-UX 10.20
HP-UX 11.00
Caldera Linux 2.4
Suse Linux 6.4
Suse Linux 7.0
不受影响系统:
SSH Secure Shell 3.0.1、SSH Secure Shell 2.x、SSH Secure Shell 1.2.x
SSH Secure Shell 3.0.0存在一个远程安全漏洞。如果某个帐号的口令域中只包含两个或者更少的字符,远程攻击者就可以使用任何口令包括空口令登录进入这些帐号。很多Unix系统有一些缺省的锁定帐号。例如Solaris,很多管理帐号"lp","adm","bin"等。在/etc/shadow文件中的口令域为"NP"。在一些Linux系统中,一些锁定帐号的口令域为"!!"。如果这些系统正在使用SSH 3.0.0,那么攻击者就可能远程登录进入系统。潜在地可能获取root权限。
测试程序:
--------------------------------------------------------------------------------
[root@shiva /root]# cat /etc/shadow | grep "postgres"
postgres:!!:11515:0:99999:7:::
[root@shiva /root]# ssh -l postgres localhost
postgres's password:
Authentication successful.
Last login: Sat Jul 21 2001 09:09:21 -0700 from localhost
bash$ logout
Connection to localhost closed.
--------------------------------------------------------------------------------
临时解决方法:
1. 禁止使用口令认证,使用公钥认证方式
2. 只允许口令长度超过2个字符的用户登录,这可以通过在/etc/ssh2/sshd2_config中设置
AllowUsers, AllowGroups, DenyUsers, 和DenyGroups关键字实现
3. 为每个锁定帐号分配一个足够强度的口令
4. 换用ssh 2.x
网络安全之审计结果(二) 来源:万能时空 个人防火墙软件
虽然称为个人防火墙,但这类软件提供了两个主要的功能。
·端口阻塞
·连接追踪
你还可以拒绝特定的IP地址。这些程序并不是真的防火墙。而且,大多数的个人防火墙软件并不适合做服务器的安全解决方案。
流行的软件
流行的防火墙软件包括:
·Network Ice's Black Ice和Black Ice Defender
·McAffee's ConSeal
·Zone Labs'Zone Alarm
虽然大多数的个人防火墙产品是针对客户端系统的,但NetworkIce同样也适合对高性能的产品提供支持。它们是ICEcap和BlackIce。后者是主机级的入侵监测软件的代表。
IPSec和加密
许多公司越来越重视内部的攻击。为了解决这种问题,你可以建议应用IPSec和个人加密。PGP程序是简单地应用IPSec来帮助建立有效的局域网和广域网级别的VPN解决方案的实例。
个人加密产品包括象BestCrypt这样的程序。这些软件有助于公司确保文件,目录甚至是整个硬盘的保密性。这些操作系统的附件可以帮助确保数据的机密。
加密和安全策略的一致性
其实,有些公司不希望使用个人加密,因为不希望员工加密的文件连管理者和IT人员也解不开。因此,如果你建议了这种解决方案,你需要准备建立Key escrow系统来统一管理加密和解密。
审计可以建立在多种级别上。例如,如果你在Windows Primary Domain Controller(PDC)实施了审计,则该策略将应用于整个域。审计还可以发生在操作系统级别。例如,你可以象前面课程中所学的审计登录失败和系统关闭。最后,你可以在资源级别实施审计,这些资源包括文件和目录。
修补系统漏洞
审计人员的工作就是发现系统漏洞并修补它们。操作系统的hot fixes和service packs是修补系统漏洞的主要手段。你可以升级TCP/IP堆栈,或者,甚至应用Ipv6。
NT中的TCP序列
知道Service Pack5出现之前,windowsNT使用的TCP序列机制是很容易被预测的。虽然序列号可以从随机的数值开始,但是随后接收的包会在序列上加一。攻击者通常会利用这种可以预测的序列数,因为这允许他们进行劫持攻击。虽然由SP5提供的序列机制也没有像Linux和UNIX操作系统中的复杂,但仍然建议安装最新的Service Pack 6a版本。
Ipv6
虽然Ipv6无法实施在每种场合,但它迅速成为一种选择。IPv6使用了加密和验证机制,现在主流的操作系统如WindowsNT,Linux 6.1和Solaris都支持IPv6。在本书写作的时候,选择IPv6作为唯一的协议会限制访问Internet,但是在某些情况下,对隔离的局域网使用IPv6会达到更高的安全效果。
IPv6提供了下列的安全特性:
·加强的验证机制(通过验证扩展头)减小了被spoofing和hijacking攻击的可能性。
·数据加密(通过Encrypted Security Payload扩展头)减小了被嗅探攻击的可能性。
想获得关于IPv6的更多信息,请访问http://www.ipv6.org。这个站点包含了最新的有关IPv6发展的信息,所有与协议相关的RFC文件,和所有支持IPv6的操作系统和程序。
升级和替代服务
通常你需要升级和替代已经存在的服务。在进行更改时,请考虑下列的步骤:
·研究新的产品。问问自己它是否适合你的网络和商业情况。
·确定需要多少时间来实施这些变化。
·在把它们应用到产品之前彻底地进行测试。
·要考虑到这些升级和替代会影响其它服务。大多数的网络主机之间是相互影响的。这些新的服务会引起这些问题吗?
·确定是否需要对最终用户进行培训。
Secure Shell(SSH)
Telnet,rlogin和rsh非常有用。它们允许你远程操作服务器就象在本地工作一样。Rexec程序允许你不用提供密码就可以从远程在服务器上运行命令。然而,这些服务都是以明文的方式传输信息。Secure Shell(SSH)是最常见的替代这些服务的方法。在本文写作时,SSH2是最新的版本。
SSH提供的安全服务
SSH提供两项基本的服务:
·数据保密:由于服务器首先发送它的公钥给客户端,所以数据通道是加密的。然后客户端使用服务器的公钥对所有信息加密。当服务器收到加密的信息后,使用自己的私钥对信息进行解密。
·验证:使用上面谈到的公钥,两个用户交换彼此的公钥然后使用公钥进行验证。这种机制的好处是在网络上不会传输用户名和密码的信息。
你需要理解SSH首先加密了数据通道,然后运行各种各样的验证方法。缺省情况下,Secure Shell使用22端口,允许你使用公钥进行加密。SSH2使用DSA数字签名算法,这种算法与RSA公钥加密相似,但是没有专利。当然,SSH2可以使用RSA算法。
在SSH中的加密和验证
加密的过程从服务器自动把公钥发送给客户端开始。然后客户端使用公钥加密信息,服务器用自己的私钥对信息解密。随后系统间的所有传输都要加密。
验证
缺省情况下,SSH会首先尝试用公钥进行验证。这些公钥存储在每个用户的$HOME/.ssh2目录下。例如,如果在你的Red Hat Linux 6.1操作系统下有一个名叫james的用户。则所有的密钥(包括james的公钥和私钥)都存储在、home/james/.ssh2目录下。请注意这是个隐藏目录。
如果这些密钥或识别和验证的文件并不存在,则SSH将使用标准的存放在/etc/passwd和/etc/shadow数据库中的用户名和密码。这种方式的缺点是在网络中传输了用户名和密码。虽然密码信息是加密的,但是在公网上传送密码肯定是不安全的。
SSH2内容
最初SSH是被发展来使UNIX系统之间的连接更安全的。然而,许多Windows的客户端允许你在连接UNIX操作系统时使用SSH。下表提供了UNIX和NT SSH2的有关内容
内容 | 描述 | | /usr/local/bin/ssh2 | Linux SSH2客户端 | | SSH Secure Shell客户端 | 许多的Windows 下SSH客户端之一。F-Secure支持Windows和Macintosh系统 | | /usr/local/bin/ssh-keygen2 | 为每个用户生成密钥对 | | /usr/local/bin/scp2 | 客户端允许你使用由SSH加密的通道来远程执行命令 | | /usr/local/sbin/sshd2 | SSH2守护进程 | | /usr/local/bin/ssh-agent2 | 允许你将公钥存储在内存中。只要你已经建立了信任关系,则登录时不需要密码。 | | /usr/local/bin/sftp-server2 | 运行sshd2的secure FTP服务器。某些Windows客户端可以使用secure FTP服务器 | | /usr/local/bin/sftp2 | Secure FTP客户端 |
你可以从各种途径获得SSH,包括www.ssh.org,www.ssh.com,和 rufus.w3.org 。要获得更多有关SSH2的信息,你可以阅读随文档附带的README文件,或者阅读FAQ(http://www.ssh.org/faq.html)你可以从各种RPM站点获得各种版本的SSH(例如rufus.w3.org 和www.datafellows.com)。
在使用客户端/服务器产品时,你必须首先配置服务器和客户端彼此通信。要做到这一点,需用安装和建立信任关系。在Linux下,安装服务器的同时也安装了客户端。然后,你可以生成和交换公钥。服务器的配置过程包括生成公钥和私钥。这些密钥会自动在SSH握手阶段进行传输。你必须输入下列命令来启动SSH2服务:
/usr/local/sbin/sshd2
你可以编辑/etc/rc.local文件使ssh2d每次都自动启动。对于Red Hat Linux操作系统,你只需要在该文件最后加上/usr/local/sbin/sshd2一行即可。
使用SSH登录
使用SSH登录,你需用使用下列命令格式:
/usr/local/bin/ssh2 –l username hostname
例如,使用用户名test登录系统noyas,你需用键入下列命令
/usr/local/bin/ssh2 –l test noyas
与SSH1兼容
如果你有已经运行SSH1的系统,则按照文件名是SSH2.QUICKSTART的指导来操作就行了。按照下列步骤进行将保证你的SSH1客户端可以使用SSH2。
SSH和验证:建立用户之间的信任关系
交换公钥的方法是最安全的SSH验证手段。在SSHfuwuq可以使用公钥加密进行验证之前,每个用户必须正确地建立信任关系。通常,这意味着每个用户必须交换公钥。下列是建立允许验证的密钥对的过程。这个过程假设两个用户希望使用公钥验证的SSH验证方式。请记住,SSH服务器自动加密数据通道。客户端只提供公钥进行验证。每个用户需要按照下面的过程进行设置。
1、使用/usr/local/bin/ssh-keygen2程序生成密钥对。象上面谈到的,Ssh-keygen2程序自动在每个用户主目录下的.ssh2目录中生成密钥对。
2、改变目录到你的主目录下的.ssh2目录中。然后重命名公钥和私钥文件。如果你使用标准的1024位加密,该文件缺省的名称是id_dsa_1024_a和id_dsa_1024_a.pub。你可以自由地分发结尾是.pub的文件,然而,不是以.pub结尾的文件必须保密。其实,你应当确保该文件只能被你读取。你还应当重命名这些文件并跟踪它们。例如,如果你的用户名是test,并且系统名为noyas的话,你可以将他的公钥和私钥分别重命名为test.noyas和test.noyas.pub
3、然后建立名为identification和authorization的两个文件。文件Identification内有你自己的私钥的名称,文件authorization内有你允许进入你的系统的所有用户的公钥的名称。你可以在该文件中输入任何你想输入的公钥名称。
4、在文件identification中输入私钥的名称。正确的格式是:Idkey test.noyas
5、同伴之间交换公钥。请记住,私钥要自己保管好。
6、在你收到其他人的公钥后,请确保把这些文件存放在.ssh2目录下。然后,你必须在文件authorization中输入同伴的公钥名称。语法是:Key keyname.pub。每一项占一行。如果你在文件authorization中输入Sandi和Jacob的公钥,你的文件authorization将如下所示:
key sandi.pub
key jacob.pub
7、一旦你和至少一个同伴进行完以上的步骤,则用户间便可以使用公钥加密来进行SSH2验证了。
技术提示:为了使这些步骤能够正常工作,必须运行sshd2的守护进程。请记住,sshd2守护进程通过自动传送公钥到所有申请的客户端来进行加密。每个用户负责建立彼此的信任关系来进行验证。你还应该保证DNS能够正常提供解析工作。
SSH 3.0 远程登录漏洞
受影响的系统:
SSH Secure Shell 3.0.0、
Red Hat Linux 6.1
Red Hat Linux 6.2
Red Hat Linux 7.0
Red Hat Linux 7.1
Sun Solaris 2.6
Sun Solaris 2.7
Sun Solaris 8
HP-UX 10.20
HP-UX 11.00
Caldera Linux 2.4
Suse Linux 6.4
Suse Linux 7.0
不受影响系统:
SSH Secure Shell 3.0.1、SSH Secure Shell 2.x、SSH Secure Shell 1.2.x
SSH Secure Shell 3.0.0存在一个远程安全漏洞。如果某个帐号的口令域中只包含两个或者更少的字符,远程攻击者就可以使用任何口令包括空口令登录进入这些帐号。很多Unix系统有一些缺省的锁定帐号。例如Solaris,很多管理帐号"lp","adm","bin"等。在/etc/shadow文件中的口令域为"NP"。在一些Linux系统中,一些锁定帐号的口令域为"!!"。如果这些系统正在使用SSH 3.0.0,那么攻击者就可能远程登录进入系统。潜在地可能获取root权限。
测试程序:
--------------------------------------------------------------------------------
[root@shiva /root]# cat /etc/shadow | grep "postgres"
postgres:!!:11515:0:99999:7:::
[root@shiva /root]# ssh -l postgres localhost
postgres's password:
Authentication successful.
Last login: Sat Jul 21 2001 09:09:21 -0700 from localhost
bash$ logout
Connection to localhost closed.
--------------------------------------------------------------------------------
临时解决方法:
1. 禁止使用口令认证,使用公钥认证方式
2. 只允许口令长度超过2个字符的用户登录,这可以通过在/etc/ssh2/sshd2_config中设置
AllowUsers, AllowGroups, DenyUsers, 和DenyGroups关键字实现
3. 为每个锁定帐号分配一个足够强度的口令
4. 换用ssh 2.x |
|