快捷搜索:  2307  创意文化园  as  1983  1861  1962  2135  1842

收购usdt(www.caibao.it):通过逆向剖析挖掘Facebook Gameroom中的安全漏洞

USDT官网

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

去年年底,我受邀加入了Facebook的Bountycon流动,这是一个受邀者才气加入的应用平安集会,其中有一个现场黑客环节。虽然参与者可以提交任何Facebook产物内的破绽,但Facebook约请我们关注Facebook游戏。由于之前测试过Facebook的产物,以是我知道这将是一个高难度的挑战。这些年来,他们的平安控制已经越来越严酷——纵然像跨站剧本攻击这样的简朴破绽也很难找到,这也是为什么他们肯为这些破绽支出异常高的赏金的缘故原由。因此,顶级白帽黑客往往会从第三方软件的角度来挖掘Facebook的平安破绽,好比Orange Tsai著名的MobileIron MDM破绽。

鉴于我的时间有限(由于某些缘故原由,我迟到了),以是,我决议不举行周全的破绽研究,而专注于对Facebook Gaming的接见控制举行简朴的平安审计。然而,正如人们所期望的那样,移动和网页应用的平安性都很好。经由一番折腾,我发现了Facebook Gameroom程序,它是一个用于玩Facebook游戏的Windows内陆客户端。于是,我就踏上了将攻势攻击性逆向剖析应用于内陆桌面应用程序的启蒙之旅。

关于Facebook Gameroom

您是不是还没听说过Facebook Gameroom——这很正常,我之前也没听说过。实际上,Gameroom公布于2016年11月,被誉为Steam的强劲对手,支持Unity、Flash和最近的HTML5游戏。然而,近年来,随着流媒体的崛起,Facebook已经将注意力转向其移动和网络平台。事实上,Gameroom计划在今年6月退役。幸运的是,在我挖到其中的平安破绽时,它还没有退出市场。

我注意到的第一件事是,安装Gameroom时,无需提升任何的权限。它似乎是一个分步安装的程序:首先,通过一个小型安装程序从网络上下载分外的文件,也就是说,它的安装程序不是一体式的。事实上,我很快就找到了安装目录,即C:Users< USERNAME >AppDataLocalFacebookGames由于大多数用户级应用程序都位于该C:Users< USERNAME >AppData文件夹中,因此我很快在处找到了安装目录。该文件夹包罗许多.dll文件以及几个可执行文件。一些事情对我很主要:

1. Gameroom自带的7zip可执行文件(7z.exe和7z.dll),可能已经由时,而且很容易受到攻击。

2. Gameroom将用户会话数据存储在Cookies SQLite数据库中,这对攻击者来说是一个异常有吸引力的目的。

3. Gameroom包罗了CefSharp库(CefSharp.dll),经由进一步研究,发现这是一个用于C,的嵌入式Chromium浏览器。

第三点解释,Gameroom是用.NET框架编写的。我们知道,.NET框架可以将程序被编译成通用中心语言(CIL)代码,而不是机械代码,也就是说,这些代码可以在通用语言运行时应用程序虚拟机中运行。这样做有许多利益,好比可以提高.NET应用程序的互操作性和可移植性。然而,由于这些应用程序被编译为CIL而不是纯机械代码,因此,将这些应用程序反编译回靠近源码的历程也要容易得多。

对于.NET程序集,DNSpy是事实上的尺度。逆向工程师可以用DNSpy轻松地调试和剖析.NET应用程序,包罗对它们举行实时修改。于是,我把FacebookGameroom.exe拖拽到DNSpy中,最先举行剖析。

挖掘含有破绽的函数

首先,我们最先查找易受攻击的函数,如不平安的反序列化函数等。限于篇幅,这里就纰谬反序列化攻击举行详细先容了,简朴来说,这涉及到将数据类型转换为易于传输的花样,然后再转换回来,若是处置欠妥,这可能会导致严重的破绽。例如,微软就曾忠告不要使用BinaryFormatter,由于BinaryFormatter是不平安的,也不能使其平安。

不幸的是,在我搜索“Deserialize”字符串时,BinaryFormatter竟然冒了出来。

然而,我还需要找到易受攻击的代码路径。为此,我右击搜索效果,选择“Analyze”,然后沿着“Used By”链找到了Gameroom使用BinaryFormatter.Deserialize的地方。

最终,这让我找到了System.Configuration.ApplicationSettingsBase.GetPreviousVersion(string)和System.Configuration.ApplicationSettingsBase.GetPropertyValue(string)函数。Gameroom在启动时使用了反序列化函数来检索其应用程序的相关设置——但这些设置是从哪里来的呢?通过考察安装文件夹,我发现了fbgames.settings,这是一个序列化的blob。因此,若是我在这个文件中注入一个恶意的反序列化payload,就可以获得代码执行权限。不外,在此之前,我还需要找到一个反序列化的gadget。凭据已知的反序列化gadget列表,我展开了进一步的搜索,发现Gameroom使用的是WindowsIdentity类。

在此基础上,我研究出了一个代码执行破绽的观点验证历程:

1. 使用ysoserial反序列化攻击工具,通过下令ysoserial.exe -f BinaryFormatter -g WindowsIdentity -o raw -c "calc" -t > fbgames.settings天生了响应的代码执行payload。

2. 接下来,我将fbgames.settings复制到C:Users< YOUR USERNAME >AppDataLocalFacebook并替换原来的文件。由于它位于用户目录中,因此无需管理员权限。

,

Usdt第三方支付平台

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

3. 最后,打开Facebook Gameroom,计算器就弹了出来! 

虽然获得代码执行权限是件异常令人兴奋的事情,但在与Facebook团队进一步讨论后,我们一致以为这不相符他们的威胁模子。由于Gameroom是作为用户级应用执行的,以是没有机遇升级权限。此外,由于笼罩文件需要某种程度的接见权限(例如,需要通过审批才气被公然列出的恶意Facebook游戏),以是没有可行的远程攻击载体。

在内陆应用程序组成的差别威胁环境中,我学到了一个主要的教训——在深入研究代码级破绽之前,最好先寻找可行的远程攻击载体。

计划探索路径

您是否有点击邮件中的链接就神奇地启动了Zoom的履历?这背后到底发生了什么?实在很简朴,这只是使用了一个自界说的URI方案,它允许你像网络上的其他链接一样打开应用程序。例如,Zoom注册了zoommtg: URI方案,来剖析像下面这样的链接:  zoommtg:zoom.us/join?confno=123456789&pwd=xxxx&zc=0&browser=chrome&uname=Betty。

同样,我注意到Gameroom使用了自界说URI方案,以便可以在单击Web浏览器中的链接后自动打开Gameroom。搜索完代码后,我发现Gameroom会通过FacebookGamesProgram.cs来检查fbgames:URI方案:

private static void OnInstanceAlreadyRunning()
{
    Uri uri = ArgumentHelper.GetLaunchScheme() ?? new Uri("fbgames://");
    if (SchemeHelper.GetSchemeType(uri) == SchemeHelper.SchemeType.WindowsStartup)
    {
        return;
    }
    NativeHelpers.BroadcastArcadeScheme(uri);
}

纵然Gameroom已经用fbgames://URI打开,它照样会继续通过SchemeHelper类对其举行剖析:

public static SchemeHelper.SchemeType GetSchemeType(Uri uri)
{
if (uri == (Uri) null)
return SchemeHelper.SchemeType.None;
string host = uri.Host;
if (host == "gameid")
return SchemeHelper.SchemeType.Game;
if (host == "launch_local")
return SchemeHelper.SchemeType.LaunchLocal;
return host == "windows_startup" ? SchemeHelper.SchemeType.WindowsStartup : SchemeHelper.SchemeType.None;
}
 
public static string GetGameSchemeId(Uri uri)
{
if (SchemeHelper.GetSchemeType(uri) != SchemeHelper.SchemeType.Game)
return (string) null;
string str = uri.AbsolutePath.Substring(1);
int num = str.IndexOf('/');
int length = num == -1 ? str.Length : num;
return str.Substring(0, length);
}

若是URI含有gameid主机,它将用SchemeHelper.SchemeType.Game.Game来举行剖析。若是它使用的是launch_local主机,则会用 SchemeHelper.SchemeType.LaunchLocal来举行剖析。于是,我从最有希望的launch_local路径最先,追踪到了FacebookGames.SchemeHelper.GenLocalLaunchFile(Uri):

public static async Task
{
    string result;
    if (SchemeHelper.GetSchemeType(uri) != SchemeHelper.SchemeType.LaunchLocal || uri.LocalPath.Length <= 1)
    {
        result = null;
    }
    else if (!(await new XGameroomCanUserUseLocalLaunchController().GenResponse()).CanUse)
    {
        result = null;
    }
    else
    {
        string text = uri.LocalPath.Substring(1);
        result = ((MessageBox.Show(string.Format("Are you sure you want to run filen"{0}"?", text), "Confirm File Launch", MessageBoxButtons.YesNo) == DialogResult.Yes) ? text : null);
    }
    return result;
}

遗憾的是,纵然我可以通过像fbgames://launch_local/C:/evilapp.exe这样的URI来启动系统中的任何随便文件(正如Facebook所纪录的那样),但仍然会被确认对话框所阻止。我试图用花样字符串和非尺度输入绕过这个对话框,但并没有得手。

于是,我将眼光转向gameid路径,该路径会凭据URI中的游戏ID打开Facebook URL。例如,若是您想在Gameroom中启动Words With Friends,可以在浏览器中接见fbgame://gameid/168378113211268,这时Gameroom就会在内陆应用窗口中打开https://apps.facebook.com/168378113211268。

然而,我发现GetGameSchemeId会从URI中提取ID,并将其添加到app.facebook.com URL中,然则,它并没有验证slug是否为有用的ID。因此,攻击者可以将内陆应用程序窗口重定向到Facebook上的任何其他页面。

public static string GetGameSchemeId(Uri uri)
{
if (SchemeHelper.GetSchemeType(uri) != SchemeHelper.SchemeType.Game)
return (string) null;
string str = uri.AbsolutePath.Substring(1);
int num = str.IndexOf('/');
int length = num == -1 ? str.Length : num;
return str.Substring(0, length);
}

例如,fbgame://gameid/evilPage会把Gameroom窗口重定向到https://apps.facebook.com/evilPage。

然则,我怎么才气在Gameroom中重定向到攻击者控制的代码呢?这里有多种方式,其中包罗滥用app.facebook.com上的开放式重定向破绽。不幸的是,那时我手头一个这样的破绽也没有。另一种方式是重定向到允许将自界说代码嵌入iframe的Facebook页面或广告。

这时,我遇到了一个障碍。我需要重新修改GetGameSchemeId的代码,由于它只取URI路径中的第一个slug,以是fbgame://gameid/evilPage/app/123456会将原生应用窗口指导到https://apps.facebook.com/evilPage,并会抛弃/app/123456。

幸运的是,我还可以借助于其他的代码gadget。另外,在Gameroom中使用的Chrome浏览器版简直有点陈旧:63.0.3239.132——而那时的版本是86.0.4240.75。因此,它并不支持新版本的Facebook Pages。经典的Facebook Pages版本会接受一个sk参数,这样,https://apps.facebook.com/evilPage?sk=app_123456就会天生一个自界说标签页,其中攻击者控制的代码位于https://apps.facebook.com/evilPage/app/123456!

然则,怎样才气在我们的自界说方案中注入分外的查询参数呢?别忘了,Gameroom会抛弃第一个URL slug之后的所有内容,包罗查询参数。果真是这样吗?回首FacebookGames/SchemeHelper.cs,我发现了GetCanvasParamsFromQuery:

public static IDictionary
{
if (uri == (Uri) null)
return (IDictionary
string stringToUnescape;
if (!UriHelper.GetUrlParamsFromQuery(uri.ToString()).TryGetValue("canvas_params", out stringToUnescape))
return (IDictionary
string str = Uri.UnescapeDataString(stringToUnescape);
try
{
return JsonConvert.DeserializeObject<IDictionary
}
catch
{
return (IDictionary< string, string >) null;
}
}

在通报自界说URI之前,GetCanvasParamsFromQuery会寻找查询参数canvas_params,并将其序列化为JSON字典,并将其转换为新的URL,并用作查询参数。

这让我想到了最终的payload方案——fbgames://gameid/evilPage?canvas_params={"sk": "app_123456"}将被Gameroom剖析成内陆应用浏览器窗口中的https://apps.facebook.com/evilPage/app/123456,然后执行我的自界说的JavaScript代码。

如前所述,原生应用的威胁环境与Web应用有很大区别。通过将嵌入式Chrome原生窗口重定向到攻击者控制的Javascript代码,攻击者可以继续在3年前的嵌入式Chromium浏览器上执行已知的破绽。虽然完整的破绽行使代码尚未公然公布,但我仍然可以行使CVE-2018-6056的观点验证代码,通过类型混淆破绽使Chrome引擎溃逃。

另外,攻击者可以建立本质上是正当的原生MessageBoxes的弹出框来执行钓鱼攻击,或者实验读取缓存的凭证文件。幸运的是,与集成Node.JS APIs的Electron应用程序差别,CefSharp限制了API的接见。然而,它仍然容易受到Chromium和第三方库破绽的影响。

小结

Facebook将本文先容的平安破绽评为高危,并随即修复了该破绽。同时,我借此荣升Bountycon排行榜的前十名。虽然Gameroom即将退出市场,但它仍然给我留下了攻击性逆向剖析的美妙回忆(和实践机遇)。对于应用逆向工程的新手来说,Electron、CefSharp和其他基于浏览器的框架是一个很好的练手工具,可以用于测试跨站剧本攻击和开放式重定向等类Web破绽,同时,还可以行使桌面应用特有的代码执行手段。

本文翻译自:https://spaceraccoon.dev/applying-offensive-reverse-engineering-to-facebook-gameroom:
发表评论
sunbet声明:该文看法仅代表作者自己,与本平台无关。请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

您可能还会对下面的文章感兴趣: