蒸米,白小龙 @ 阿里安全研究

0x00 什么是薅羊毛

薅羊毛,简单来讲就是通过刷活动来获取奖励。举例来说:某公司搞推广活动,介绍一个新用户奖励10元,如果真的去介绍是很困难的,所以羊毛党要做的就是自己注册很多账号,并邀请自己的账号来获取奖励。又或者刷注册、刷点击等等,都算薅羊毛项目之一。

大量的羊毛党为了红包注册了大量的账号,这下平台开心了,因为后台看到用户数量有了明显增长。但这其实是自欺欺人,因为当平台觉得时候差不多了,停止了活动,那么羊毛党们自然也会停止新账号的注册,曾经注册的那些账号自然也会成为一堆再也不会登陆的数据而已。

简单总结一下羊毛党的危害:

1、运营成本高,推广费用在短时间都被羊毛党薅干,导致资损。

2、本来推广的费用是给正常用户的一些福利,结果被羊毛党薅走,影响正常用户的体验和一些网站活动的口碑。

3、对服务器带来一定的压力,严重的话会导致服务器宕机,影响活动的正常进行。

0x01基础对抗

平台被薅了以后,终于发现情况不对。原来推广的钱根本没有送到用户手中,而是被少数羊毛党给薅走了而已。平台于是开始想应对策略。目前最流行的防护措施就是:一机一号一券。也就是说一台手机只能注册一个账号才能领到一个红包(优惠券)。

这个防护措施看起来很美,但实际上手机卡如果只是用来接收验证短信的话,基本上没有什么成本(零月费,一个身份证可以开10+个卡)。配合短信猫可以轻松解决手机验证的问题。

那接下来的问题就是解决机器检验问题了。最开始平台使用的方法是获取用户手机的IMEI,因为IMEI码就像是手机的身份证一样,每台手机有且仅有唯一一个IMEI码,对于平台来说只要记录了这个IMEI码,就意味着达成了“一机一号一券”的门槛限制。但是事情远远没有想象中的那么简单。

0x02中级对抗

既然平台对机器进行了限制,那么羊毛党有三个选择:1. 真的买一堆机器。2. 使用虚拟机。3. 用改机神器,让一台机器化身千万台机器。

对于土豪玩家来说,买一堆真机构造牧场,然后用脚本进行薅羊毛或者刷单也是没有问题的。当然就算是这样我们依然可以通过一些用户行为来判断出来这种有问题的流量,不过因为本篇主要讨论的是改机神器,关于牧场对抗会在以后的文章中继续讨论。

对于虚拟机的对抗相对来说要容易一些,因为虚拟机相对真机来说总有一些特征是很难伪造的,比如一些汇编指令在虚拟机中执行后的特征会发生改变等等,随后我们还要发一篇关于虚拟机的文章来讨论这个内容。

接下来就开始讨论本文的重点,改机神器。

0x03 改机神器

在Android和iOS平台上都有大量的改机神器,他们的基本原理是都是在root(越狱)的基础上,对app获取系统和设备信息的API进行了hook,然后将内容替换为伪造的系统和设备信息。接下来我们分别讨论一下Android和iOS上获取系统和设备信息的情况:

(1). Android

Android系统相对iOS来说更加开放,系统本身是开源的(但手机厂商可能会做一些修改并且不开放修改后源码)。因此无论是什么Android版本,使用google的亲儿子系列(比如Nexus)的手机,root都不是问题。更重要的是,Android手机并没有强制升级一说,任何版本都可以刷机,因此很多手机都停留在老版本。比如下面就是最新统计的版本分布状况,基本上都是Android 6.0和5.1的设备(最新版本是9.0 Pie):

相对iOS设备来说,Android设备更加廉价,因此会更受到羊毛党的青睐。因此,如果我们的app跑在了Android上,基本上就很难信任周围的环境了。

前面提到了平台会用app获取手机的IMEI,水平高一些平台也会去尝试获取Android ID,wifi的mac地址,蓝牙的mac地址等硬件相关的序列号作为设备的唯一标识符。然而,这些属性在改机神器面前基本上就是浮云。比如我们这款叫XX抹机神器的app:

首先,改机神器可以创建n个沙箱环境,随后沙箱中的各种属性都可以随机或者根据羊毛党的定制生成、不光是之前提到IMEI,Android ID,wifi mac和蓝牙mac,甚至连虚拟机的内存大小,运营商信息,开机时间,是否root等都可以根据需求进行制定。

那么软件具体是怎么实现的呢? 通过分析源码和动态调试,我们可以看到改机神器会对java层hook,native层hook,替换系统配置文件,以及屏蔽文件:

比如想要获取Android的mac地址,网上有很多公开的方法:

但很可惜的是,没有一种公开的方法能够对抗改机神器。甚至在Android 6.0及以上,google为了用户的隐私都屏蔽了获取mac的接口,继续调用的话只会返回02:00:00:00:00:00:

(2). iOS

相对Android来说,iOS是闭源的,因此设备型号就没有Android那么五花八门了,也没有那么多的适配问题。再加上强制升级的原因,大多数iOS设备都处于最新版本:

虽然越狱设备比较稀有,但是在iOS上做设备伪造要简单的多。这是为什么呢?原因是苹果对于用户隐私的保护非常重视,所以在app store上上架的app都不敢调用太多的private api来获取用户信息,其次苹果认为那些可以作为设备唯一id的硬件相关的序列号都属于漏洞,如果被苹果发现,会在第一时间被修复掉。因此,平台除了要对抗改机神器以外还要对抗苹果公司的系统。比如mac地址的获取在不同的iOS版本中都有不同的获取方法,苹果也一直在修复这些方法。

和android一样,iOS上同样也有很多改机神器。比如下面这款叫hdfaker3的软件,就可以对机器的各种属性进行修改:

这些软件功能强大,使用也非常方便,只要轻松一点,或者使用脚本,就可以秒变新机。而苹果官方提供的API(比如广告ID),用户可以选择重置,也可以选择设置为空,对于羊毛党来说就更简单了,可以把其设置为任意数值。所以依靠这种大众周知的方法来当设备指纹是非常不靠谱的做法:

0x04 对抗改机神器的思路

那么如何与改机神器进行对抗,并且可以识别出设备的唯一编号(设备指纹)呢? 这里直接说重点:

1. 改机神器会hook大量的信息获取API,但依然会漏掉一些可以对机器进行唯一标示的API函数,因此我们可以寻找这样的API函数并使其成为设备唯一标识符的参考。

2. 虽然改机神器hook了一些关键的API,但是依然有办法绕过这些hook,并获取到真实的数据,这里会涉及到一些内存和汇编的对抗技术。

3. 就算是改机神器伪造了机器的数据,但是通过云端的一些算法,依然可以识别出这些伪造的设备。如果再配合上环境指纹和行为信息的话,即使是全部数据都是伪造的,依然可以有方法识别出来羊毛党的流量。

如果你有相关的研究的话,欢迎与我联系和讨论,谢谢。

声明:本文来自蒸米spark,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。