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

作者:   深圳市网安计算机安全检测技术有限公司 2019/03/27 16:12:29 347次阅读 国际
文章来源: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": "<id>",
  "age_filter_max": 31,
  "age_filter_min": 18,
  "bio": "<bio>",
  "birth_date": "1996-02-26T23:47:24.858Z",
  "create_date": "2018-04-12T07:07:23.169Z",
  "crm_id": "<redacted>",
  "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": "<redacted>",
  "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": "<my instagram username, redacted>",
  "profile_picture": "<url to profile pic>",
  "media_count": 33,
  "last_fetch_time": "2019-02-22T21:16:58.696Z",
  "completed_initial_fetch": true,
  "photos": [
    "<photos array, redacted>"
  ],
  "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等)的路径。

总结

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


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