Author:zumikua Updated at:2013-11-06 12:56:46 UTC
zdcclient作为从09年开始服役的一个非官方认证客户端到现在还能够完成基本的认证功能实属不易,感谢神州数码公司的不思进取让我们能够在与官方、闭源的认证客户端对抗的拉锯战中获得暂时的喘息之机。
感谢pentie大神开源出来的zdcclient,感谢他为我们带来的深入浅出的[教程](http://apt-blog.net/tag/8021x)。
本文所述内容仅在武汉大学文理学部的网络环境中获得过测试。
zdcclient现在因协议的更新已经不能胜任本地的校园网环境了,在成功认证的两到三分钟后便会失去网络响应。在观察zdcclient的log后可以发现,zdclient经常会截获到Unknown的包,其eap_type位的数据为0xfa。后根据原版客户端的抓包发现,该0xfa包即为改进后的REQUEST_IDENTITY_KEEP_ALIVE包,其中附带了4字节的数据(attach_key)。因zdcclient中并未有对此包的相应代码,所以无法回传对应的保鲜报文,导致在认证后因长时间没有回传保险报文而被强制断线。
在了解问题的症结后我们开始着手研究RESPONSE_IDENTITY_KEEP_ALIVE报文的具体格式。经过推理与验证,发现其是由原版RESPONSE_IDENTITY_KEEP_ALIVE修改而来。其中EAP通信id与REQUEST中的id相同(在测试中按顺序递增),EAP协商类型为0xfa。而其中原本应该是用户名ASCII字符串的地方则变为了md5(用户名ASCII+REQUEST中提供的attach_key)。最后在EAPOL的尾部的DCBA信息体中没有了占据13字节的客户端版本信息, 只剩33字节。
由此我们便可以构造出对应的保鲜报文,具体还请参考程序。
git:https://gitcafe.com/ZumiKua/zdcclient4whu/
参考资料:
http://apt-blog.net/details_about_802_1x_in_campus_authentication_1
http://apt-blog.net/eap_explaination_2
Author:zumikua Updated at:2014-02-25 09:24:25 UTC
最近投奔了ArchLinux的怀抱,wiki这种东西真是美好啊,尤其是对于我这种一点也不相信社区的人来说(等下wiki不也是社区写的么)。
说实在的我个人认为与其多少大牛蹲在一个论坛里每天帮新手回答问题不如写一篇像archlinux的那个beginners' Guide来的更方便。毕竟大牛是有限的,而问题是无穷的,把有限的大牛投入到无限的问题中去,大牛们都不是雷锋,或者说他们不能永远是雷锋。而且还有像我这样的急性子完全没耐心去社区等大牛回复的人存在。
能搞定ArchLinux的安装的确让人受益匪浅,比如我为了安archlinux就把zdcclient断线问题解决了……同时还附带学会了怎么用fdisk分区以及linux的“一切皆文件”的哲学。我个人觉得比那些安装比windows还方便的某些发行版好太多。
说起来zdcclient的修复也很有意思,本来因为游戏玩腻了想去Ubuntu研究一下到底是哪里出了问题,结果手贱去更新了那五百多个包,再然后就没有然后了,unity崩溃,重启后登陆只能对着一片白屏幕,正好我本来就因为ubuntu的软件源各种坑爹而蛋痛,这次索性就换了archlinux。
然后在windows下用wireshark抓包,大概搞清楚包结构之后checkout下来zdcclient的源码然后开始在windows下修改。修改完了再放到archlinux里编译。(这时候我还没装图形界面)某种意义上来说还真是大胆,在archlinux里没法抓包(tcpdump很难用啊),一旦逻辑上出错很难改,那样的话还得回到windows下面……不过我运气很好,一次就通过了(除去一些语法错误以及低级逻辑错误以外)。说起来编译完以后一下就成功运行这种感觉好像从我开始学OI到最近学ACM(虽然半途而废了)还是第一次。C语言我还是能写一点的嘛。
说起来在抓包的过程中发现ruby干这种事情不是一般的方便啊,标准库自带md5,数据可以用数组pack,下次有心情写个ruby版的zdcclient好了。
说起来改写zdcclient才用了不到半天的时间,但是自从zdcclient停止更新到现在快4年的时间没有一个人修复这个问题(或者说修复了没外传?),虽然也有我们应该算是第一届住进桂园(武大只有桂园是神州数码验证)的计院学生的原因,但是四年没有一个人遇到这个问题还真是让人觉得不可思议啊,这里可是大学,而且还是所“985大学”欸?连上网客户端都得让一个外校的大牛(Pentie大牛,他的文章在改写zdcclient方面给了我非常大的帮助)写?真的没问题么?
----
Update
其实是有修复的,在fork到了github上的那个版本已经修复了这个问题……当初的我怎么就那么傻逼没想到去试试这个比较新的版本呢……