是软件就不可能没有Bug,开源软件亦是如此,开源软件的使用过程中总不可避免的会碰到问题。商用软件出了问题自然有商用公司为
我们解决,无需我们的操心,但开源软件并不具备这样的先天条件,如何?
开源的精神就是共同参与,此时又需要我们的Hack精神,将臭虫逐一捉出,真正去体会参与开源的乐趣,真正实现开源的精髓:人人
为我、我为人人。以我使用的JRadius开源工具为例,简要叙述一下自己的经验和心得。
由于最近一个项目中需要JRadius来测试Radius Server的EAP-TLS认证方式,在使用过程中发现JRadius发送的认证请求总是被拒绝,
通过初步分析判定是JRadius的Bug导致。而EAP-TLS是所有Radius认证协议中最为复杂的一个,它需要客户端和服务器端证书的双向认
证,证书在传递过程中要分为多个Fragement来传输。经过仔细研读RFC2716和FreeRadius的代码,最终判定这个Bug就是在多个
Fragment下TLS Message Length的Bug,按照RFC定义应该是整个TLS Message(包括多个Fragment)的长度,而JRadius的源码,其开发
人员对这个理解有误,认为是每个Fragement的单独长度。RFC的定义如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Flags | TLS Message Length
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TLS Message Length | TLS Data...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Length Definition:
The Length field is two octets and indicates the length of the EAP
packet including the Code, Identifir, Length, Type, and TLS data
fields.
确定问题后对其源代码进行改造,增加如下内容:
......
} else { //Added by Memphis.Wu 2007-07-25
Response[1] = (byte) (fragmentTotalLength >> 24 & 0xFF);
Response[2] = (byte) (fragmentTotalLength >> 16 & 0xFF);
Response[3] = (byte) (fragmentTotalLength >> 8 & 0xFF);
Response[4] = (byte) (fragmentTotalLength & 0xFF);
}
......
至此,修改完毕,测试顺利通过,随即提交该Bug的修改方案给开源组织,至此充分感受了开源的无穷乐趣。
备注:
*JRadius是一款开源的、基于Java的包含客户端和服务器端的Radius协议框架程序,其客户端可以用来模拟各类Radius认证和计费请
求,因此可以使用JRadius做为Radius Simulator来对Radius Server进行测试。它所能提供的认证方式有:PAP、CHAP、MSCHAP、EAP
-MD5、EAP-TLS、EAP-TTLS等。
*EAP-TLS是IETF的一个开放标准,并且在无线厂商之间得到很好的支持。它能够提供很好的安全保证。因为TLS被认为是SSL的继承者
。它使用PKI来保护Radius认证服务器的通信,这是很难完成的任务。所以即使EAP-TLS良好的安全,用户端在认证时的负载成为它的
致命伤。 EAP-TLS是无线局域网扩展认证协议的原始版本,虽然它因为配置困难而很少被使用,但它仍被认为是最安全的EAP标准之一
,而且广泛地被无线局域网硬件和软件制造厂商,包括微软所支持。要求用户方给出证书,虽然不是很流行,则是EAP-TLS在认证方
面的长处,而且即方便又安全。一个脆弱的密码不会导致入侵基于EAP-TLS的系统,因为攻击者仍然需要客户端的证书。当客户端的
证书是储存在智能卡中时,EAP-TLS提供了最安全的认证解决方案,因为如果不窃取智能卡时无法得到客户端证书的。如果将智能卡
偷窃的话则会立刻引起注意并且更换新卡。到2005年四月,EAP-TLS是唯一厂商需要保证的WPA和WPA2的EAP类型。在微软,Cisco,
Apple和Linux中都有实现客户端和服务器端的源代码。EAP-TLS在MAC OS 10.3(包括10.3以上), Windows 2000 SP4, Windows XP,
Windows Mobile 2003(包括2003以上),和Windows CE 4.2中被支持。
软件Hack之魅(2)——从修正开源软件Bug做起
最新推荐文章于 2024-07-12 16:26:30 发布