软件Hack之魅(2)——从修正开源软件Bug做起

是软件就不可能没有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中被支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值