一家公司的战略部署是如何轻易被泄露的:API测试所导致的信息泄漏问题

作者:???深圳市网安计算机安全检测技术有限公司 2019/03/27 16:12:29 424次阅读 国际
文章来源:https://www.4hou.com/info/observation/16509.html

在小编我看来,要获取一家公司的战略机密,那得是很困难才是。不过最近小编看了一篇文章,对我的启发可谓是真的很大。想不到如此重要的战略部署可以在产品的体验测试变量中,被分析的明明白白。

大家都知道,A/B测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。

对于许多大中型公司来说,用户体验永远是他们最关心的事情之一,但随意改动已经完善的落地页是一件很冒险的事情,因此很多卖家会通过A/B测试进行决策。常见的是在保证其他条件一致的情况下,针对某一单一的元素进行A/B两个版本的设计,并进行测试和数据收集,最终选定数据结果更好的版本。

所以A/B测试的作用包括:

1.消除客户体验(UX)设计中不同意见的纷争,根据实际效果确定最佳方案;

2.通过对比测试,找到问题的真正原因,提高产品设计和运营水平;

3.建立数据驱动、持续不断优化的闭环过程;

4.通过A/B测试 ,降低新产品或新特性的发布风险,为产品创新提供保障;

A/B测试与一般工程测试的区别

A/B测试,用于验证用户体验、市场推广等是否正确,而一般的工程测试主要用于验证软硬件是否符合设计预期,因此A/B测试与一般的工程测试分属于不同的领域。

我会在本文中探索一些大公司实施A/B测试的方法,以及测试中是否存在潜在的信息泄露。由于许多公司都拥有定义其测试基础架构的私有API路径,且依赖前端或客户端对测试进行区分,而不是在服务器端做出这些决定。

下面我探讨了一些最受欢迎的网站如何做到这一点的,且他们的战略信息是如何被一览无余的。

Lyft(打车应用仅次于Uber)

当你在Web客户端上登录Lyft时,其中一个网络请求是https://www.lyft.com/api/experiments/configurations。对于每个正在运行的测试,以及用户的当前状态,它都会返回一个180kb的JSON对象。

一家公司的战略部署是如何轻易被泄露的:API测试所导致的信息泄漏问题

Lyft测试过程

你可以在这里看到完整的过程描述,其中要用到两个关键项:assignments以及variables。Assignments似乎是用于测试的, 每项都有一个预定义的组列表。它们分别是:

·?Control

·?Static

·?Treatment

·?Variant_#(其中#是你接收的测试变量)

此外,大量的测试以Justin或Micha作为前缀,我不确定这些是内部测试工具的名称,还是以他们的名字作为测试前缀的员工的名称。

虽然一些测试名称是难以理解的,比如exodus ETE test2: "control", MichaTntTest_e89f281d-53bb-4b2b-b1b9-f28a840bb75b: "treatment", EliuTest ),但通过仔细寻找我们还是能发现有价值的名称,比如

·?PPTacticalPriceSFOV4: 旧金山SFO机场的战术定价,他们正在将自己的定价根据不同的机场,比如SFO来进行区分,机场在它们的测试名称中非常常见。

·?PXCPaxSREarlyArrival5minWaitFromAcceptV2:值为“300s_from_accept” ,一个驱动程序在被接受之后应该等待多长时间?

·?PXCPaxCancelFrictionAcceptanceEmpathy:当取消一个行程时,看起来他们可能会改变措辞来修改用户的行为,也许会降低取消的频率。

下一个assignments似乎主要是用户配置文件上的布尔设置。目前有61种(!!)类别的变量。

这些显示了你作为乘客和司机的状态,并提供了很多关于Lyft的见解。有一些项可以检查你是否被排除在某些促销活动之外,你是否在滥用他们的系统,还有一些项可以检查你是否是Lyft的员工或管理员。

·?lastmile.enA/BleIncentiveZones :司机是去人口稠密地区,还是为特定用户服务?

·?lastmile.userLegacyMap:使用什么地图,比如谷歌地图?

·?payments.allow_amex_on_fd :fd表示first data,即支付处理器,这个选项表示他们可能允许美国运通卡通过他们的支付处理器;

·?payment.intuitAffiliateCode:对我来说,这个值是lyftplat18;也许这是intuit(一家以财务软件为主的高科技公司)的促销代码;

·?pricing.tpa:他们清楚地意识到人们在Uber和Lyft之间的每次乘车比较;

·?api.lnHasStrictEarlyCancelFee :这似乎是对那些经常在与司机配对后取消行程的人的惩罚;

·?cancel:关于“预测”的部分,其中包含关键的predictorEnA/Bled。例如,对于我的帐户,pxcPaxNoShowTa1kPredictor为0.52,pxcPaxNoShowTa1kPredictorBkn为0.66。这可能是某人没有出现的可能性?我几乎总是提前到达我预约的地方等车,所以我不确定0.52是52%还是其他测量指标。

·?enterprise.businessRewardsMapBanner:优步刚刚宣布优步奖励,也许他们正在为一个商业版本做准备,当企业客户使用他们的拼车服务时,他们也会得到奖励;·?publicapi.ridetypes.courier.features.supportsWalking:优步最近推出了“快速拼车”,让你步行一小段距离,以换取更便宜的价格,也许Lyft也在尝试同样的方法?

·?service.venues.snap_to_destination_vegas_enA/Bled:很多地方都提到了特定的位置,算是用户位置记录吗?

·?ProjectX:这是最有趣的项之一,我问了Lyft的一位朋友,显然它是最近重新设计的代号!

Lyft的结尾似乎也很少被清理或过滤,例如,这些是变量中的一些条目:

{
????"paultest":?{
????????"litetestvar":?true,
????????"foobar":?"This?is?fine",
????????"something":?{
????????????"foobar":?"This?is?fine",
????????????"deploytest":?false
????????},
????????"deploytesting":?{
????????????"deploytestfoo":?true
????????}
????}}

{
????"whatever":?{
????????"paultest33":?true,
????????"paultestagain":?false
????}}

总的来说,通过查看Lyft的测试名称,我们能够收集到很多关于他们当前战略的信息。一个有趣的测试是设置像Burp Suite这样的变量并将变量从false替换为true,反之亦然,然后看看是否可以在应用程序中解锁任何隐藏的面板。

如果你想看测试的整个项,请点

接下来我决定从移动应用程序端来拦截测试项,其中会包括更多信息,你可以在这看到以下这些最有趣的项:

·?vars.client.autonomous:看起来Lyft正在测试自动驾驶服务。例如,console_far_stops具有Lyft Level 5 HQ和Caltrain AV Stop,这似乎是旧金山Caltrain火车站的停车场。

·?vars.client中有1449个项,这并不包括162个测试项,或或者44个在holdout_variants中运行的测试。可以看出,Lyft正在进行大量测试!你可以在此处查看所有信息并进行自己的分析。

Airbnb(联系旅游和有空房出租的服务型网站)

Airbnb的iOS应用程序向https://api.airbnb.com/v2/mario_experiments?client=ios发出请求。

首先要注意的是,客户端有一个URL参数。输入ios会返回一个大约33kb大的JSON对象。如果你把它切换到android,它会回复一个44kb的对象,显然他们在Android上运行了更多的测试!

可在此处找到iOS测试的全部信息,可在此处找到Android测试的全部信息。

Airbnb使用的测试框架称为Mario,他们的每个测试都遵循类似的格式:

{
??"assigned_treatment":?"static",
??"description":?"same?translation?as?the?one?in?mario_android?group",
??"experiment_name":?null,
??"group_name":?"mario_ios",
??"locale":?null,
??"parameter_name":?"registraiton_log_in_menu",
??"type":?"multi_language",
??"value":?"Log?in",
??"version":?"v0"},

其中的每个项,都可以清清楚楚告诉我们每个测试的目的。

他们的大多数测试都围绕着推荐和支持,似乎没有任何特别指向未来方向的信息,大多数是不同的文字介绍,不同的按钮位置,和聊天支持系统的各种变化。

Airbnb还向https://api.airbnb.com/v2/client_configs发出请求,虽然这似乎不是测试,更像是一般应用程序配置,但它也包含一些有趣的测试项。

客户端配置包括:

{
??"id":?"ios.block_dates_on_preapproval",
??"launch":?true},{
??"id":?"china_fee_launched",
??"launch":?false},

这里有很多关于中国的内容,Airbnb目前的主要方向是亚洲市场的扩张。

完整的客户端配置可以在这里找到,其中有大量的测试,位于experiments_assignments类中的有923个。

应用程序的现有部分似乎有很多新版本,例如“new_quick_pay”,“new_guest_inbox”和“new_verifications_profile_completion”,其中很多还没有进入“launch”状态。

Pinterest

Pinterest目前正在一次最全面的测试活动。在初次加载应用程序时,它会向https://api.pinterest.com/v3/users/me/发出请求,它将回复完整的用户对象以及gatekeeper_experiments。

完整的测试列表在这里,目前有823个活跃测试。一些最有趣的测试如下:

·?ios_skin_tone_filter :你现在可以根据肤色过滤化妆产品!

·?ios_use_cases_board_ideas_quiz :在不同的电路板上进行测试?

·?activation_male_topic_image_replacement : 性别内容差异化测试?

一家公司的战略部署是如何轻易被泄露的:API测试所导致的信息泄漏问题

Burp Suite拦截Pinterest API调用

Reddit(社交新闻站点)

Reddit在过去的一年里发生了巨大的变化,Reddit的重新设计对公司来说是一个巨大的变化,他们的领导层似乎真的在努力将Reddit变成一个社交媒体应用。在加载该应用时,它会请求https://gateway.reddit.com/redditmobile/1/ios/config。此配置包含当前启用的所有测试,完整的回复可以在这里找到。

很多都与内容发现和reddit推荐有关,比如best_of_community_carousel和trending_users_carousel,这让他们更有信心争取用户和公司的关注。

slack(聊天群组)

Slack是聊天群组 + 大规模工具集成 + 文件整合 + 统一搜索。截至2014年底,Slack已经整合了电子邮件、短信、Google Drives、Twitter、Trello、Asana、GitHub 等65种工具和服务,可以把各种碎片化的企业沟通和协作集中到一起。

Slack有大量的测试正在进行中,加载应用程序后,它会请求3条测试路径:

·?https://slack.com/api/experiments.getEZFeatures

·?https://slack.com/api/experiments.getByUser

·?https://slack.com/api/experiments.getByVisitor

它们都遵循类似的格式,如下所示:

{
??"experiment_id":?"482395575254",
??"type":?"team",
??"group":?"treatment",
??"trigger":?"finished",
??"log_exposures":?false,
??"exposure_id":?54886002322}

其中很多都有"trigger": "finished",这可能表明测试已经结束。

一些有趣的测试项是:

·?stripe_l3_data

·?unified_autocomplete

·?ios_poseidon

·?monetization_no_flannel_login

Amazon

在启动iOS亚马逊应用程序后,它向https://msh.amazon.com/mwl/assignments/v2发出请求:这个请求会返回一个包含每个“Assignments”的大对象,完整的回复可以在这里找到。

最有趣的回复是这些:

"A9VS_AUGMENTED_REALITY_VIEW_DEEPLINK_129451":?{
??"AllocationVersion":?null,
??"MayTrigger":?false,
??"Treatment":?"T1"},

可以看出,亚马逊似乎正在投资AR(增强现实),以方便用户在购买之前使用增强现实查看中货物。

"AMAZON_PRINTS_LAUNCH_PHOTOBOOK_191331":?{
??"AllocationVersion":?"ATVPDKIKX0DER--C:1",
??"MayTrigger":?true,
??"Treatment":?"C"},

Tinder(国外的一款手机交友APP)

约会应用程序中的测试可能比大多数其他网站具有更深远的影响,不幸的是,我没有看到任何类似Tinder幕后测试的东西。

虽然我无法找到Tinder API测试路径,但我还是想在这里提一下。几个月前,Tinder取消了查看个人instagram的功能——你仍然可以看到照片,但没有与该账户或用户名相关的链接。

事实证明,他们没有更新他们的API ,他们的API仍然会回复你的匹配Instagram句柄,所以你可以找到它们。下面是一个示例配置文件:

{
??"_id":?"",
??"age_filter_max":?31,
??"age_filter_min":?18,
??"bio":?"",
??"birth_date":?"1996-02-26T23:47:24.858Z",
??"create_date":?"2018-04-12T07:07:23.169Z",
??"crm_id":?"",
??"discoverable":?true,
??"interests":?[
????"Facebook?Likes,?Redacted"
??],
??"distance_filter":?100,
??"gender":?0,
??"gender_filter":?1,
??"name":?"JonLuca",
??"photos":?[
???"Photos?Array,?Redacted"
??],
??"photos_processing":?false,
??"photo_optimizer_enabled":?true,
??"photo_optimizer_has_result":?false,
??"ping_time":?"2019-02-23T23:47:24.301Z",
??"jobs":?[
????{
??????"company":?{
????????"displayed":?true,
????????"name":?"Google"
??????},
??????"title":?{
????????"displayed":?true,
????????"name":?"Engineer"
??????}
????}
??],
??"schools":?[
????{
??????"name":?"USC",
??????"displayed":?true
????}
??],
??"phone_id":?"",
??"interested_in":?[
????1
??],
??"pos":?{
????"lat":?37.86871654555783,
????"lon":?-122.25116702766258
??},
??"places_enabled":?true,
??"autoplay_video":?"always",
??"top_picks_discoverable":?true,
??"photo_tagging_enabled":?false},{
??"username":?"",
??"profile_picture":?"",
??"media_count":?33,
??"last_fetch_time":?"2019-02-22T21:16:58.696Z",
??"completed_initial_fetch":?true,
??"photos":?[
????""
??],
??"should_reauthenticate":?false}

Facebook和Instagram

我希望我也能看到Facebook和Instagram的测试路径。不幸的是,他们实施了SSL Stapling ,任何尝试进行Burp Suite证书更换都会失败,并且不会显示任何路径。在过去,如果你手机进行了越狱,你可以覆盖管理参数并强制显示所有测试,包括切换和状态。

不幸的是,我有一部12.1.4版本的iPhone XS Max,它没有越狱。一旦越狱,我将能够使用iOS Kill Switch等工具覆盖TLS Stapling,查看所有执行SSL Stapling(Snapchat,Facebook,Instagram等)的路径。

总结

大多数公司没有混淆或最小化他们的测试名称,这导致信息泄露。这可能是未来对攻击进行攻击的一个新方向,如果一家公司正在悄悄的推出一项新功能,如果被竞争对手知道,则先发优势将荡然无存。


指导单位
广东省公安厅网络警察总队 广东省信息安全等级保护协调小组办公室