对APT34泄露工具的分析——Jason
0x00 前言
Jason是由Lab Dookhtegan在2019年6月3日泄露的另一款工具,用于Exchange账户的暴力破解
然而,泄露的这款工具虽然包括源码,但存在一些bug,无法正常使用
本文不会分析Jason和APT34之间的关联,仅在技术研究的角度,修复Jason的bug,恢复Jason的功能,分析使用的技术,同其他开源工具做横向比较
注:
之前关于APT34的分析文章:
《对APT34泄露工具的分析——PoisonFrog和Glimpse》
《对APT34泄露工具的分析——HighShell和HyperShell》
0x01 简介
本文将要介绍以下内容:
- Jason的开源资料
- 修复Jason的bug
- 实际测试Jason
- 同其他开源工具的横向比较
0x02 Jason的开源资料
Jason最早泄露于Telegram的频道:https://t.me/lab_dookhtegana
p3pperp0tts将其上传至Github,地址如下:
https://github.com/p3pperp0tts/APT34/tree/master/Jason
文件夹decompiled_code内为Jason的源码
Jason采用EWS Managed API来实现对Exchange资源的访问
注:
关于EWS Managed API的使用细节可参考之前的文章《Exchange Web Service(EWS)开发指南》
经过简单的修复,我在VS2015下能够编译成功
但在测试环境中,Jason无法识别正确的邮箱用户名和口令,所有测试结果均失败
0x03 修复Jason的bug
编译环境: VS2015
为了恢复正常功能,源代码需要修改以下4个位置
1.添加Microsoft.Exchange.WebServices.dll的引用
我这里是将Microsoft.Exchange.WebServices.dll放在工程的同级目录下,并做了引用
2.证书信任策略的bug修正
位置:Form1.cs
原代码:
ServicePointManager.ServerCertificateValidationCallback = ((object <p0>, X509Certificate <p1>, X509Chain <p2>, SslPolicyErrors <p3>) => true);
修改后的代码:
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; };
3.变量赋值的bug修正
位置:Form1.cs
(1)共有两个位置
原代码:
MainConfig.AppLocation + "out.txt";
修改后的代码:
MainConfig.AppLocation = MainConfig.AppLocation + "out.txt";
(2)共有两个位置
原代码:
MainConfig.UsernameStart + userClass.Username + MainConfig.UsernameEnd;
修改后的代码:
userClass.Username = MainConfig.UsernameStart + userClass.Username + MainConfig.UsernameEnd;
4.EWS和OAB的判断有问题
经过测试,变量MainConfig.Method的值始终为空
需要修正MainConfig.Method无法取值的bug
位置:Form1.cs
原代码:
MainConfig.Method = this.cmbMethod.SelectedText;
修改后的代码:
MainConfig.Method = (string)this.cmbMethod.SelectedItem;
实现完整功能的工程我已上传至github,地址如下:
https://github.com/3gstudent/APT34-Jason
0x04 实际测试Jason
编译成功后生成文件Jason.exe
在同级目录需要文件Microsoft.Exchange.WebServices.dll,程序才可以正常运行
程序启动后,需要设置的配置如下:
1.Exchange Address
输入Exchange服务器的URL
在我的测试环境下,Exchange Address为:https://192.168.206.17
2.Exchange Version
选择对应的版本
此处选择低版本能够适用于高版本的Exchange服务器
3.BF Method
三个选项:
- EWS(Exchange Web Service)
- OAB(Offline Address Book)
- Full
通常选择EWS
4.Username File
用户名的字典文件
格式可参考PassSample.txt中提示的格式
我的测试环境下,我用的格式示例为:
test1@test.com admin@test.com
5.Password File
口令字典文件
6.Number of Threads
设置扫描线程个数
7.Generate Pass
点击后显示暴力破解使用的字典
8.Generate Pass Per
点击后生成文件夹PasswordPerUser,文件夹中生成以每个用户名命名的txt文件,内容为口令字典
9.Add to Username Start
产生新的用户,将输入的字符加在用户名前面
测试环境下建议不设置
10.Add to Username End
产生新的用户,将输入的字符加在用户名后面
测试环境下建议不设置
我的测试环境下,配置如下图
暴力破解成功后,生成日志文件out-year-month-day-hour-minute-second.txt,保存用户名和对应的口令
0x05 同其他开源工具的横向比较
1.Jason
- C#实现
- 对Exchange进行暴力破解的位置:
- https://url/ews/exchange.asmx
- https://url/oab
- 支持多线程
- 界面操作
2.MailSniper
- https://github.com/dafthack/MailSniper
- Powershell实现
- 对Exchange进行暴力破解的位置:
- https://url/ews/exchange.asmx
- https://url/owa
- 支持多线程
- 命令行操作
3.Ruler
- https://github.com/sensepost/ruler
- Go实现
- 对Exchange进行暴力破解的位置:
- https://url/autodiscover/autodiscover.xml
- 不支持多线程
- 命令行操作
对于Exchange账户的暴力破解,在原理上大同小异,都是访问Exchange的Web资源,如果返回401表示验证失败,如果获得预期结果代表用户口令正确
对于Jason,同MailSniper和Ruler相比,原理和功能基本相同,个人认为该工具不存在被大规模滥用的隐患,也不会导致恶意软件技术的升级
0x06 小结
本文介绍了如何修复Jason的bug,分析其中的技术,同其他开源工具做了横向比较,得出最终结论:个人认为该工具不存在被大规模滥用的隐患,也不会导致恶意软件技术的升级