Loading... 从风控维度来说,普及了互联网的反欺诈防控的框架性认知。从落地维度来说,更多是知识理论上的概念普及,没有深入实践细节,无法统计成本-效益转化率。 可以在微信读书APP上免费学习,并且还有网友的各种专有名词科普、思考。笔记中也会把各知识点汇总、补充进来。 <!--more--> --- ## 前言 在实际项目中,我们也遇到了一些困扰:产品**POC测试**严重脱离业务场景实际需求,错误的策略部署导致产品无法正常发挥防御能力。很多问题的产生井不是因为黑产团伙的技术有多么高明,而是因为防御方不能够很好地帮助客户理解业务风险。 > **POC测试**:Proof of Concept testing,旨在验证概念或想法的可行性。POC测试通常是在早期阶段用于快速验证一个新功能、技术、设计或解决方案的有效性,并根据测试结果进行调整。可以帮助团队提前发现可能存在的问题,从而在正式开发和实施之前做出明智的决策。 业务安全的真正力量是内生的,专业的安全风控公司可以提供工具、平台和策略建议,但是只有业务方真正理解风险和防控思路,才能在与黑产的对抗中设计好业务规则、运营好安全策略,取得较好的效果。 ## 引言 互联网业务安全概述 行业的发展以合规需求、漏洞攻防技术发展为驱动力,缓冲区溢出攻击的流行推动了IPS 产品的发展,CC 攻击的兴起促使Anti-ddos产品成为企业网络安全的防护产品,SQL 注入攻击技术的普及则让WAF 产品成为安全防御体系的标配。 > **CC攻击**:Challenge Collapsar,也称为HTTP Flood攻击或压力测试攻击,指通过发送大量的请求来超载目标服务器上的应用程序。 > > 在CC攻击中,攻击者通常会利用多个系统或机器人网络(僵尸网络)向目标服务器发送大量的HTTP请求。攻击的目标是消耗服务器资源、带宽和处理能力,导致服务器过载,从而使正常用户无法访问该服务或使服务变得缓慢或不可用。CC攻击一种常见的方法是通过使用大量的IP地址和用户代理来模拟合法的请求。这使得攻击流量看起来像是正常用户的行为,使识别和过滤攻击更加困难。 > > 为了应对CC攻击,防御措施通常包括以下方面: > > 1. 流量监测和分析:实时监测网络流量,识别异常或不寻常的请求模式。 > 2. IP封堵和限制:根据IP地址或其他标识符,封堵或限制来自恶意源的请求。 > 3. 验证和身份验证:使用验证码、令牌或其他身份验证机制来区分合法用户和恶意请求。 > 4. 限制请求频率:通过实施请求限制策略,例如限制每个IP地址的访问速率或限制每个会话的请求数量。 > 5. DDS(分布式防御系统):部署分布式防御系统以分散攻击流量,并通过协调多个节点来过滤攻击流量。 > 6. CDN(内容分发网络):使用CDN服务来分发请求,减轻服务器负载并提供缓存和加速功能。 > **Anti-DDoS**:反分布式拒绝服务攻击,是一种旨在防御和减轻分布式拒绝服务攻击(DDoS)的技术或服务。 > 上述CC攻击就是DDoS攻击的一种,CC攻击专注于使用大量的HTTP请求进行攻击。DDoS攻击还包括其他类型的攻击,如UDP洪水攻击、SYN洪水攻击等,可以使用各种协议和技术来实施。防御措施与上述相同。 > **WAF**:Web Application Firewall,Web应用防火墙,是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 由于企业之间信息和数据的割裂,欺诈分子往往能顺利游走于不同平台之间。 > 大的风控团队可以与当地公安系统合作,实现数据互通,主要涉及大型诈骗、金融交易等大金额案件。 > > 经典黑产攻击事件包括:验证码破解,自动注册机换取券,与运营商签订广告服务窃取用户信息,平台自身非法窃取信息并且操控账户,改机工具,注册养号 下面是常见的风控场景举例: * **注册和登录场景的风控**:如何对抗黑产注册虚假账号、养号的行为,如何对抗黑产暴力破解账户密码,如何对抗“撞库”攻击。黑产手中掌握了大量的手机号卡、公民信息和数以亿计的已泄露的互联网账号密码,这对任何一个互联网平台都是致命的威胁。 * **营销活动风控保护**:营销活动发放的红包、游戏点券或其他奖励如何才能够不被黑产团伙“薅羊毛”。这类事件层出不穷,互联网上也常有报道。 * **APP 渠道推广保护**:推广APP 装机量投入巨额费用后,如何衡量真实效果。用户每安装激活一个APP,平台需要支付10元甚至20元,黑产通过“手机农场”虚假安装已经是广告行业顽疾。 * **交易和支付场景风控**:盗号支付如何解决、非法聚合支付如何解决、洗钱如何解决,这些合规性问题关乎支付平台和相关业务的生死。 * **接口安全保护**:短信发送接口被坏人用于制作“短信炸弹”是大家都遇到过的场景。 * **内容安全**:内容安全既包括“入”也包括“出”,“入”是检测用户发布到平台的内容是否包含“色情、反动、赌博和暴恐”等违规信息,“出”则是对抗专业爬虫大量获取网站内容信息。 > **拖库**:黑客入侵有价值的网络站点,把注册用户的资料数据库全部盗走的行为 > **洗库**:在取得大量的用户数据之后,黑客会通过一系列的技术手段和黑色产业链将有价值的用户数据变现 > **撞库**:黑客将得到的数据在其它网站上进行尝试登陆,因为很多用户喜欢使用统一的用户名密码 ## 第1章 黑产发展势态  * **垃圾注册**:在注册环节中,使用虚假、不稳定的身份信息,如虚假号码、通信小号、临时邮箱、虚假邮箱注册,或者使用脚本、注册机进行批量注册的行为,称为垃圾注册。注册完的垃圾账号,在直播视频行业中被用于关注、点赞、观看视频量、批量评论等,在电商行业被用于刷店铺访问量、关注量等。此类账号在账号命名上也有所特征,常见的有不规则英文组合、古诗词句截取等。 * **薅羊毛**:使用虚假身份信息或自动化工具参与各类营销活动的行为,营销活动包括但不限于折扣、返现、抽奖、满减等形式,并且不能给平台带来实际的活跃用户或订单交易。执行薅羊毛行为的人称为羊毛党。 * **黄牛/刷单**:在合法销售途径以外,垄断、销售限量参与权或商品,并以此牟利的中介人称为黄牛。从业务安全的视角上看,黄牛和刷单在行为上相似度极高,都发生在交易场景中,并且具有爆发性,会大量使用自动化工具。黄牛和刷单的区别在于,刷单过程中买到的产品,即使加价出售,也比商品原来的价格要低。而黄牛在倒卖的时候,价格会远高于商品原本的价格。还有区别在于价格和目标商品类目上,在刷单过程中刷手需提前确认收货好评垫付商品金额,为了控制刷单成本一般选择低价商品。但黄牛的目标多为热门稀缺的热点商品,便于后期加价出售获利。如某热门手机,某海外热门歌手演唱会门票每年必遭黄牛哄抢,单价商品倒卖价格已达上万元。在智能风控引擎中,这两种欺诈行为的表现几乎是一致的,不做详细区分。 * **众包**:由多个独立的个体共同参与完成的一项任务被称为众包。有羊头发起,众多羊毛党在线参与的薅羊毛行为称为众包薅羊毛。一个典型的案例,在某微信群中,羊头和羊毛党配合,羊头负责收集线报并同步到微信群内,一般是商品折扣或满减形式。同时,羊头在群内收购商品,羊毛党参与活动,低价购买了商品,可以直接转售给羊头,羊头支付商品成本和手工费用。羊头借此囤积了大量的低价商品,再通过其他线下渠道转售出去。所有参与此次薅羊毛行为的用户都是独立的真实用户。 * **炒信**:通过各种途径和手段进行虚假交易,快速提升商户交易量、信用等级的行为统称为炒信。 * **套利**:由商户端发起的薅羊毛行为被定义为套利。例如,在银联活动中,某家银行的活动形式是,用户到指定门店消费,消费满100元返50元,同时商户也可以获得50元奖励。活动期间出现了商家和羊毛党联合欺诈,羊毛党到店扫码支付,商家会退回支付的钱,没有发生任何实质上的交易,但是羊毛党和商家都能够获得奖励,以此骗取奖励。 * **空包**:虚假发送快递,发送空的快递或包裹。在电商场景中,订单提交后,商家将商品打包,通过快递方式发送给用户。在套利或炒信时,商家必须给平台提交物流单号完成发货动作,买家签收后钱款打入卖家账号,一笔交易才算完成。此时,如果商户选择发送空的快递,或者提交已经完成的、其他平台的快递单号,则可以节约成本。市面上也有很多打着代发快递名头的空包网站,代发一单快递的售价为0.6元~0.8元,并且可以提供真实的物流信息来规避甲方平台的风控策略。 从不同业务场景来看,注册登录场景中的风险占比是最高的,可以高达40%。因为对于绝大部分的业务流程来说,注册登录是所有后续业务的门槛。黑产必须迈过这个门槛,才能执行交易、支付等行为。因此,如果能够在注册登录场景中做好风控,把绝大部分的黑产拒之门外,在后续的其他环节中,风险就会降低很多。 通过知识图谱关联分析,我们把使用相同手机号、设备的黑产进行聚合,可以对黑产团伙进行识别和深入挖掘。在这些关联数据中,聚集成簇的就被定义为“团伙”,团伙中出现的手机号和设备就可以被视为“成员”。近10%的欺诈行为都来自家用宽带IP 地址。 > 超大规模不一定全都是黑产团伙里的人,也可能是肉鸡,或者参与众包的散户,在图网络中互相关联,全部结点都包含在内就成了一个超大规模的“团伙” > > 电信运营商为发展有线宽带业务,抢占市场份额所制定的目标,对代理商、员工的激励机制,是造成“有线宽带业务虚假繁荣”,然后进一步被黑产利用,作为代理IP资源的根本原因 电信诈骗通常通过暗网等渠道购买大量公民隐私数据,通过分析后选定欺诈目标,编写特定的剧本实施诈骗。其剧本编写的针对性非常强,往往会击中目标受害用户的心理脆弱点,所以欺诈成功率非常高。其洗钱的渠道和网络赌博团伙类似,往往会经过“水房”(在行业里指专业的洗钱渠道)出境。 > 水房”(在行业里指专业的洗钱渠道)常见的“洗钱”形式: > 1.成立空壳公司洗钱; > 2.化名存款或投资金融市场洗钱; > 3.违规转账洗钱,通过金融机构将非法资金混入合法资金; > 4.利用进出口贸易洗钱,利用高卖低买等手法向国外转移赃款; > 5.成立外资公司或利用外汇黑市跨国洗钱,洗钱后以外商身份回国投资; > 6.通过“地下钱庄”洗钱; > 7.以民间借贷形式洗钱; > 8.利用关联公司,通过关联交易洗钱; > 9.利用拍卖行、珠宝商等特定非金融机构洗钱; > 10.利用国有企业改制洗钱。低价转让出售国有企业产权,将国有资产离析后转入私人企业。 不少看似正规的互联网企业为了获得极速的成长,甚至会主动引入黑产生态的流量。 > 所以很多风控团队的生杀予夺大权都是掌握在老板和业务产品手中,只能负责风险的监测与告知,至于怎样处理,是否拦截,业务线自己定夺。能做的就是实时的精准监控,一旦合规性有问题能够立马响应。 ## 第2章 黑产武器库概述 ### 2.1 虚假号码 “**虚假号码**”是运营商真实存在的手机号,但这些手机号未经实名认证,可以用于代替他人接收验证码。虚假号码由手机卡商提供,对接到**接码平台**中,提供短信验证码代收服务,进一步被各类黑产使用。在整个黑色产业链中,手机卡商处于产业链上游,并且是整个产业链的关键节点。  装完宽带以后,我们需要使用一个设备来进行信号转换,才能在电脑或路由器上拨号。这个设备一般叫作“猫”,英文名为Modem。而**猫池**就是由多个Modem 模块组合而成的,是一种用于控制和管理SIM 卡的设备。每个模块等同于一台简单通信功能的手机,附带有SIM 卡槽、基带芯片、射频芯片、手机天线。每个Modem 模块都可以独立控制,收发短信和拨打电话。 猫池可以用AT 指令进行控制: * 电话呼叫1398888:`ATD+1398888\r\n` * 挂断电话:`ATH\r\n` * 读取短信列表:`AT+CMG\r\n`  > AT指令是一种命令语法,用于控制调制解调器、移动设备和无线模块、蓝牙设备等通信设备。 > AT指令可以通过串行接口(如RS232)或无线通信接口(如GSM、CDMA)发送到设备。使用AT指令,可以执行各种操作,包括拨打电话、发送短信、查询设备状态、配置网络参数等。 **猫池管理软件**具备了非常完整的猫池管理功能,以图形界面的方式对猫池进行操作,底层依然通过AT 指令来控制。较常见的就是“酷卡”和“嘻唰唰”。接码平台会给卡商提供“卡商端”程序,用于读取和上传猫池中的短信数据,其原理就是读取猫池管理软件中的数据库文件。 **短信验证码**本身具有随机性,一般为4~6位的数字,有效期很短。短信验证码通过短信方式发送到用户端,它是一种相对安全的通道。之所以说相对安全,是因为GSM 网络短信是不加密的,能够被无线电装置嗅探。 > GSM:Global System for Mobile Communications网络发送的文本消息,是一种广泛使用的数字移动通信标准,用于基于蜂窝网络的无线通信。GSM网络短信服务允许用户在手机之间发送和接收纯文本信息,而不需要进行语音通话。 > > 早期因为加密算法安全性漏洞与缺乏端到端加密问题,使得容易被窃听或篡改。现代移动通信标准采用了如AES加密算法、SIM卡认证和基站鉴权的访问控制以及用户身份验证、端到端加密、蜂窝数据加密、公钥和数字证书等安全性保障 部分猫池是支持语音功能的,可以将通话过程中的语音内容保存为音频文件,进一步通过其他手段把验证码识别出来,比较常见的一种手段是“人工听码”。 > 目前的技术已经完全可以支撑自动听码,可以将保存下来的音频文件调用三方API语音识别(腾讯、数美、Twilio等)甚至借助一些开源的AI识别成品,由API成本0.01/条替代人工成本0.1/条 **接码平台**是“虚假号码”的集散地。17年后接码平台基本上只扮演一个中间商人的角色,连接上游的卡商和下游黑产。接码平台不持有任何手机卡,但是会提供一个“卡商端”程序给上游卡商。上游卡商自行管理所有手机卡,而这个程序会把所有手机卡接收到的短信上传到接码平台,平台只负责短信内容的匹配、抽取、分发和结账。有些公司专门开发了一套完整的接码平台系统,包含卡商端、客户端APP 和API 接口,该系统有完整的统计和监控功能。19年的“净网行动”后,大多数接码平台在公安机关的打击下转入了地下状态。 **空号注册**是灰产与运营商的内部人员进行了合作,通过非法渠道使用空号来接收短信验证码,以单条短信0.6元的价格在黑色产业链中提供服务。 很多**流量卡**是有使用期限的,并不能像手机号一样长期使用,普通用户不会用于注册账号和验证身份。但是对于黑产来说,流量卡的时间周期已经足够使用了。 物联网逐渐兴起之后,市面上出现了一类比较便宜的流量卡,即**物联网卡**。这一类卡是运营商给物联网领域的企业使用的,用于物联网设备的通信。例如,共享单车,每一辆共享单车的电子锁内部都有一张物联网卡在工作。这些物联网卡使得每一辆单车都能够连接互联网上报车辆的位置、车锁状态等信息,同时能够接收云端的一些操作指令。 这类物联网设备对流量的需求量是很小的,平均每个月的流量控制为2M~20M。如果不使用短信来发送指令的话,那么连短信功能都不需要。运营商在提供移动物联网能力的同时,会把大部分权限开放给物联网企业。其中包括分配每张卡的套餐、设置每张卡的功能和权限。某些企业在申请到物联网能力之后,会调整流量资源,把无法消耗的流量资源分配到一批物联网卡上,然后以较低价格转卖。这些物联网卡由于其价格优势,同时部分物联网卡不需要实名登记,所以一度也成为黑产的“香饽饽”。 “老人机团伙”拥有自己开发的**手机rom系统**,这些系统基于早期的MTK 平台。他们在rom 中预植入了后门逻辑,然后通过与很多公司合作生产出各种品牌的“老人机”。这些手机只提供了电话和短信功能,他们会以较低的价格投放市场售卖,并通过一些渠道销售到很多贫困地区。 当一些老人以较低的价格买到这些手机插入手机卡后,rom 中的后门就会通过短信的方式上报对应的手机号到黑产预埋的手机号中。黑产团伙使用这些手机号注册各类网络平台账号,当验证码发到老人手机上时会被后门再次转发到黑产手中。由于rom 的后门有对应的屏蔽短信规则,使用者自己根本看不到这些短信,所以也无法觉察自己的手机号被黑产使用了,只能从运营商的短信详单里发现端倪。 这种规模的黑产手机号,一度有超过1000万的量级。互联网厂商也无法验证这些手机号为黑号。因为即使打电话过去,对面也是有人能够接听的。 > **手机ROM**:指手机上的存储器(Read-Only Memory),也称为固定存储器。它用于存储手机操作系统(如Android、iOS)和预装的应用程序。与随机存储器(RAM)不同,ROM是一种非易失性存储器,这意味着即使在手机关机时数据仍然保留。 > 在手机中,ROM分为两个主要部分:内部存储(Internal Storage)和外部存储(External Storage)。内部存储是手机内置的存储芯片,通常有固定的容量,用于安装操作系统、应用程序、用户数据等。外部存储则是指可移动的存储介质,如SD卡或USB存储设备,用于扩展手机的存储空间。 > > **MTK平台**:(MediaTek平台)是指由联发科技(MediaTek)推出的移动处理器芯片平台,在移动设备领域提供了多个处理器系列,广泛应用于智能手机、平板电脑和其他便携式设备。主要在中低端和入门级智能手机市场占有一定份额。 ### 2.2 代理IP 黑产为了突破业务平台使用的IP黑名单、操作频率限制等风控策略,常常使用**代理IP**来进行相关的攻击活动。 * **正向代理**:可以屏蔽访问者的IP,对于服务端来说,所有通过正向代理访问的用户,其IP 都是同一个。 * **反向代理**:在企业中会大量使用反向代理。我们访问了一个网站,该网站可能有上百个功能,上百万个页面,这些资源分散在数量众多的应用服务器中。用户可以访问所有的资源,但是对于用户而言,所有资源都集中在一个域名下面 > 通俗的讲,正向代理是代表客户端向目标服务器发起请求的代理,而反向代理是代表服务器接收客户端请求并将其转发到内部服务器的代理。这两种代理方式各有不同的用途和功能。  早期,黑产主要通过扫描网络上的开放代理服务器,进行相关攻击活动。随着风控技术的发展和网络上可用的开放代理越来越少,黑产也开始通过各种技术构建可控的代理集群。例如,黑产团伙通过购买运营商的资源搭建“秒拨”平台,规模大的甚至有十几万个IP 池供黑产工具随机使用。 > 一些安全厂商会公开一些免费代理作为蜜罐,观察黑产团伙使用这批代理在做哪些事。 我们曾经监控到一个非常强大的黑产组织,他们通过技术手段让网民获取违规的互联网信息,诱导网民安装相应的客户端软件。用户的电脑因此被这个工具做成网络代理节点。经过一定时间的积累,该黑产组织将数十万个家庭IP 变成他们的代理节点,通过API、Chrome 插件甚至SDK 的形式提供服务进行盈利。 > 相当于黑产劫持了正常IP来作弊,这样基于IP聚集的打击方案就失效了 ### 2.3 设备伪造工具 IP 和手机号都是运营商的资源,很多关键的风险属性和数据只有运营商才能掌握。而设备掌握在用户自己手中,互联网平台可以获取设备上的各种信息用来做风控。设备数据的维度是相当丰富的,设备类策略规则运用得当能够起到非常好的防护作用。 > 需要注意合规性问题,以及规避手机的杀毒软件 互联网业务平台通过设备上的一些信息来判断,这就是设备指纹。只要通过技术手段修改设备信息,理论上就可以绕过设备的限制,于是**改机工具**应运而生。 > 改机工具具备更改手机号、手机串号、手机型号、MAC地址、无线名称、运营商等功能。 > 可以构造**设备指纹**(根据设备硬件和软件特征创建的独特标识)检测,设备特征包括:设备型号、制造商、操作系统版本、屏幕分辨率和尺寸、浏览器信息、设备唯一标识符(如:Android的IMEI、iOS的UDID)、CPU架构、SIM卡、GPS、MAC地址、语言和地区设置、安装应用程序列表、网络提供商、电池状态,以及设备的摄像头规格、传感器支持情况、存储容量等硬件相关信息。 如果你希望在不root 的情况下同时开启多个相同的应用程序,就可以使用多开工具。多开的工具在Android 应用市场上架非常多,如LBE 平行空间、360分身大师、多开分身等。多开工具一般自带修改系统参数功能,甚至有个别多开工具还针对设备指纹厂商进行了特殊处理。 多开工具按照技术原理,大致可以分为三大类:基于virtualAPP 开源框架、基于DroidPlugin 开源框架和重打包。也有开发者将virtualAPP 和Xposed 结合,开发出一套virtualXposed 框架,能够在多开环境下灵活使用Xposed 插件。 > 目前市面上搜索得到的分身包大多都有合规性整改,灰产用的都是私下的很难挖掘。 > 较新的的多开方案包括基于容器技术的Docker、Kubernetes(两者跟灰产不太搭边);基于虚拟化技术的VirtualBox、VMware基于;基于模拟器和云服务的BlueStacks、Google Cloud Platform Android **Root** 和iOS **越狱**(jailbreak)指的是操作系统管理员的权限状态,即普通应用拥有系统管理员权限。一般利用的是操作系统提权漏洞,且版本越低成功率越高。需要说明的是,root 和越狱并不意味着设备一定是黑设备,只是可能性较高。 **Xposed** 是一款Android 操作系统常见的hook 框架,可以直接从互联网免费下载,安装前需要先root 手机。基于Xposed 框架,开发者可以非常方便地修改Android 操作系统的任意Java 代码,如自动抢红包、修改步数、消息防撤回、一键新机等。绝大部分改机工具都使用了Xposed 框架,如微X 模块、QX 模块、幸运破解器、fakegps 等。 **Cydia Substrate**(原名为MobileSubstrate)是一款iOS 操作系统常见的hook 框架,越狱时会同时安装该软件。基于CydiaSubstrate 框架的MobileHooker,开发者可以非常方便地替换iOS 操作系统的Objective-C/C/C++函数。几乎全部的改机工具都是通过CydiaSubstrate 实现的,使用量较多的有NZT、AWZ、iGrimace 等,iOS 操作系统的改机工具大部分都是要付费的。 **Frida** 是一款功能强大的轻量级hook 框架,支持Android 操作系统和iOS 操作系统。它主要提供了功能简单的Python 接口和功能丰富的JS 接口,使得hook()函数和修改ELF 等操作可以通过简单编程实现。Frida API 接口包含了主控端与目标进程的交互接口,可以用于动态调试,即时获取信息并进行修改。使用Frida 可以获取进程的信息(模块列表、线程列表、库导出函数),可以拦截指定函数和调用指定函数,可以注入代码。 如果你没有root 手机或不想写hook 代码,你也可以选择**objection**。objection 是一个基于Frida 开发的命令行工具,它可以很方便地hook Java 函数和类,并输出参数,调用栈,返回值。 Android 是开源操作系统,开发者可以自己定制rom(只读存储器)。一些不良动机的开发者,开发出可以随意修改手机操作系统参数的rom 称为“**硬改**”。这种改机方式对于开发者难度较高,但在操作系统framework 层面做了改动,APP 是完全无法检测的。从目前收集到的情报和数据分析来分析,确实有一部分群控和云真机在使用定制rom 的方式,手机自带操作系统打包出售。硬改的设备可以在本地随机生成设备参数,也可以从云端设备库动态下发其他设备的真实参数。 **脱机挂**是指把原有客户端代码逻辑使用程序模拟执行。脱机挂开发者需要先对客户端代码逻辑进行逆向和破解,然后使用自己编写的代码实现相应逻辑。脱机挂能够实现短时间的大批量请求,但制作脱机挂的门槛也是所有作弊手段中最高的。说起脱机挂,就不得不提易语言和[精易论坛](https://bbs.125.la/)。易语言是一种以中文作为程序代码的编程语言,其易上手、门槛低的特点,使之成为大多数外挂的编程语言。推出的e4a 框架可以使用易语言开发Android 应用。精易论坛是软件破解者和黑产工具的集中营,它具有各种封装好的破解库和现成工具线上担保交易。 由于改机工具对抗激烈,2019年黑产将作案手段升级为了iOS 设备**备份恢复**和**抹机恢复**。 备份恢复是对iOS 设备某一特定时期的数据进行备份,以备在需要时将设备恢复到某一时期的操作。例如,在安装某一应用程序之前先进行备份,然后使用完应用程序后进行备份还原,就会将设备还原到备份时的状态,而且一些系统的属性如idfa、idfv 等信息会发生变化。经过测试使用某助手进行备份还原的时间成本仅1分钟,并且可以批量操作。 抹机恢复就是将设备完全重置,恢复成出厂设置。在这个过程中,用户的所有数据信息都会被清理,即抹机后就是一个理论上的新设备,经过测试使用某助手抹机的时间成本在3~5分钟,并且可以批量操作。 > 可以理解为在改造成灰产手机被发现前“洗白”,或者是对收购前科不明的二手手机“翻新”。 **手机模拟器**的新技术层出不穷。一是各种 Android 模拟器获得了Windows、Linux、Mac 平台的支持,二是Android 云模拟器的兴起,三是iOS 模拟器的出现,四是在Android 手机上运行模拟器。 说起云模拟器,早期红手指和河马云手机可以在ARM 主板上同时运行多个Android 操作系统,然后通过远程控制工具实现近似于本机的用户操作,还可以实时分享给其他人观看。这种SaaS 模式可以实现成本最小化。在平台租用一台模拟器,每天的平均成本不到1元。实际测试发现,模拟器上预装好了各种游戏外挂、改机工具,操作非常流畅,玩游戏没有任何卡顿。 2019年,市场上新出现了iOS 模拟器,目前已知的有黑雷和果仁。iOS 模拟器其实是在Windows 环境中下载一个vmdk 格式的MacOS 虚拟镜像,然后在MacOS 中使用Xcode 里的iOS 模拟器。iOS 模拟器不能直接运行ipa 文件,需要经过专用工具转换。 虚拟大师(基于Anbox)可以在Android 设备上运行一个独立的Android 模拟器,模拟器可以独立地运行各种Android APP。这个模拟器并非系统本身的镜像,由于apk打包了一个ROM(包含system.img 和data.img),所以模拟器有自己独立的版本和各项属性。在Android 手机上流畅运行模拟器,对于作弊者来说非常方便。值得一提的是,模拟器已经预装好了各种作弊工具和软件。 国外还有很多专业的公司售卖付费的**定制浏览器**软件,如Antidetect和Multilogin 等工具通过修改Chrome 和Firefox 内核,自定义浏览器对象参数,达到伪造新浏览器的目的,此外还提供自动代理、群控、cookie 机器人、设备标准库等功能,可视化界面方便用户操作,功能十分强大。 selenium、plantomJS、nightmareJS、puppeteer 都是Web 应用程序的**自动化脚本**框架,它们利用浏览器驱动实现自动化操作网页,支持无界面模式(headless)。使用者通过编写简单的脚本即可操作浏览器,任意更改浏览器属性。这种作弊方式不同于协议破解和JS 引擎模拟执行,因为它是在真实浏览器环境下的操作,原有的JS 代码会被完整执行,因此更难检测。并且headless 模式在内存消耗、运行时间、CPU 占用上都有一定的优势。 在移动端也有很多自动化脚本工具,如按键精灵、触动精灵等。其原理分为两类:一类是通过Android 操作系统的辅助功能服务,不需要root;另一类是通过root 权限直接注入事件。在一般情况下,自动化脚本工具会配合群控和改机工具配套使用。 **位置伪造工具**:想要修改手机GPS 定位,可以使用改机工具修改GPS Location,也可以使用业余无线电设备发送虚假的GPS 信号。相对于Android 而言,iOS 多了一些特殊的方法,可以在不越狱的手机上修改位置信息。如图iOS 7-10的系统可以利用备份还原开启系统地图自带的Simulate Location 功能,方便地修改自己的GPS 位置。较新的iOS 版本也可以通过Xcode 的Simulate Location 功能,自定义GPX 文件实现真机的位置修改。黑产常用的某助手、location-cleaned 等工具都是利用类似原理。 plantomGPS,被称为全球最强大的iOS 免越狱地球位置修改专家,支持iOS 10-13。它最方便之处在于和U 盘一样便携,无须连接电脑。配合配套软件,可以设置起始点、规划路径、模拟步行或驾车,功能强大。 “**设备农场**”也被称为“群控系统”,是指通过技术手段远程控制大量移动设备的系统。这项技术在很多领域都有成熟的应用,如云测平台、自动化测试。黑产在自动化测试框架基础上增加了改机功能,用于批量操作真机注册、养号、机器人等。 2015年,Github 上出现了一个名为OpenSTF(Open Smartphone Test Farm)的开源项目,其运行界面如图2.20所示,它提供了一种Android 智能手机的可视化远程控制系统。设计之初是为了解决移动端APP 自动化测试的问题。APP 每次发布新版本之前需要经过大规模的真机兼容性测试。移动互联网公司会购买一些特定机型的设备用于稳定性和兼容性测试。小型的公司负担不起购买设备的费用,会使用云测平台,借助OpenSTF,通过ADB 连接到移动设备上,在提供的图形化网页对移动设备进行操作,大大缩减了APP 在各种机型上人工测试的时间和成本。 > 目前市面上已经有很多云真机平台,有如开源的Sonic、Sauce Labs、TestObject、Kobiton、Flutter云测、探探云测、火焰云测等;也有收费的如Testin Cloud、Xcloud、云测、远景云测等; 2016年,也是我国微商崛起的一年,**群控技术**在微商领域得到了很好的发展空间。一批专门开发和销售群控系统的厂商就是在这个时候出现的。一套30部Android 手机的群控系统和配套软件,市场价在2万元左右。 早期的群控系统功能围绕微信营销展开,主要为微商服务。如图2.21所示,通路云群控系统提供了模拟定位、站街、摇一摇、批量导入通讯录等功能,来大量添加微信好友,再通过朋友圈发布、消息群发等功能进行定向的消息推送。某些群控中还加入了图灵机器人,可以和用户聊天,模拟产生真实的聊天记录。此前媒体报道过的微信红包诈骗机器人也是群控系统的产物。此后,大批的互联网公司使用微信账号体系来绑定营销、投票活动,欺诈分子开始利用微信群控参加营销活动赚取毛利,群控技术也被进一步升级。 2017年,群控技术开始应用到了微信之外的领域,如娱乐类的APP,尤其是直播行业,深受群控系统的影响。在其他行业中,随着厂商对作弊工具、模拟器检测的加强,也陆续出现了使用真机群控来薅羊毛、刷单、刷点击、刷关注的作弊行为。 2018年,群控技术进入成熟期。群控系统稳定、功能完善,兼容大部分品牌、型号手机,允许开发自定义脚本,并且提供完整的API 文档。此外,群控还衍生出了一些附带的产业链,如专门面向群控设备的代理、群控设备专用的改机工具等。 市面上的安卓群控工具居多,主要为这两种:ADB是Android系统自带的工具,用于远程调试和控制Android设备。它可以安装应用、传输文件、调试和模拟操作等;UIAutomator是Android的界面查看工具,帮助脚本判断下一步操作。群控系统需要部署在服务器上,通过连接USB或网络将设备连接到服务器。操作员使用客户端程序连接到服务器,对设备进行控制。通过ADB控制Android设备不需要root权限,但某些复杂功能可能需要root或越狱。  一千台设备的群控系统可以同时注册一千个账号。配合改机工具,每台设备执行完一次脚本之后,一个新机又成为一个新的设备,继续注册新的账号。假设每个脚本的执行时间是5分钟,一天可以产生20多万个账号。假设每个账号拉新活动可以获取1元奖励,一天的收益可以超过20万元。 但是由于设备的成本问题,大部分黑产使用的群控,设备数量控制在200台以内。大部分黑产在选择群控设备时,偏向于价格低廉、性能稳定的机型,比如下述机型:小米系列:MI 4、MI 4c、MI 5;红米系列:Redmi 3、Redmi 3s、Redmi 4;华为系列:华为麦芒5、C8818。二手市场上一台小米5的价格是300元左右,而一台红米4的价格不超过200元。  随着群控设备供应商的技术升级,黑产进一步压缩群控系统的搭建成本,出现了“**箱式群控**”(以下简称“箱控”)。箱控将手机主板通过电路集成的方式集成到一个主板内进行统一供电,以实现一台箱控操作几百台手机的最终目的。毕竟一台设备的大部分部件(如外壳、屏幕、电池等)对于群控是可有可无的,只要能够运行系统群控就可以工作。 2017年,一批持有大量设备的群控中心推出了“云手机”服务。用户可以通过网页对设备进行控制,也可以编写脚本上传执行,按照设备的数量和使用时间付费。至此,群控进入SaaS 时代,黑产不需要自建群控系统,就可以租到大量的真实设备。  黑产广泛使用易语言来开发**工具集**,这种编程语言简单易学、容易上手、开发便捷,基本上可以满足各种定制化的需求。 > 尽管易语言简单易学,但结合以上因素,公司可能更倾向于使用更流行、成熟且适用范围广泛的编程语言来满足各种定制化需求: > > 1、生态系统和支持:一门编程语言的生态系统和社区支持非常重要。流行的编程语言通常有庞大的社区和丰富的资源、库以及工具支持,可以快速解决问题和获取帮助。相比之下,易语言的生态系统相对较小,会限制开发者的选择和进一步学习。 > 2、可扩展性和性能:易语言的设计初衷是为了让初学者更轻松地入门编程,但在处理大型项目和高性能需求方面可能显得不够强大。公司需要使用更灵活、强大的编程语言来满足复杂的需求。 > 3、技术人员可用性:易语言并不是被广泛教授和使用的主流编程语言,相比之下,像Java、Python和C++这样的流行语言拥有更丰富的人才市场。为了便于招聘和培养开发人员,公司可能倾向于使用更为普遍的编程语言。 > 4、维护和持续发展:公司在选择技术栈时通常会考虑长期的维护和可持续发展。一些编程语言具有长期支持和更新的承诺,并且有大型的公司或社区背后,可以提供稳定和可靠的技术支持。易语言在这方面可能相对较弱。 在业务安全领域中和黑产的对抗,很大程度上是技术和资源的对抗。 > 对抗灰产、质疑灰产、了解灰产、理解灰产、成为灰产(狗头) > > 在这一大章节中涉及到了很多技术、工具,由于该书已经很老了,很多技术、工具肯定已经被取代了,但是仍可以借助这些名词去网上挖出许多相关的(必应搜索后权重低的都进去逛逛或者各种论坛),一起吃国家饭,嘎嘎香 ## 第3章 反欺诈体系建设思路 互联网黑产攻击行为通常具有以下4个典型特点: * **团伙化**:黑产已经从单打独斗发展成了有组织的团伙,通过合理分工协同工作。 * **专业化**:黑产上下游之间分工明确,相互协作,拥有大量的作案资源(身份证、银行卡、手机号、手机设备IP 资源等),并且部分从业者具有非常高的技术水平,精通各种自动化脚本编写、逆向破解等,甚至涉及和使用机器学习技术。 * **强对抗性**:黑产熟悉主流的风控技术手段,会根据业务实际情况不断试探、挑战和绕过现有的防护体系。 * **跨行业**:黑产会在电商、广告、支付、航旅等多个平台流窜作案。 为了对抗互联网黑产猖獗的攻击、保障业务的健康发展,我们需要创建覆盖业务全流程的防控体系,形成“**终端风险识别+云端风险决策+AI**”的一体化反欺诈解决方案。 ### 3.1 动态防控理念 形成覆盖全业务流程的防控能力,建立了贯穿事前、事中、事后的动态反欺诈体系。 事前:在终端设备上,通过设备指纹体系进行设备信息采集、终端智能计算和云端的风险分析,为每一个用户的设备生成丰富的风险标签供业务决策使用。 事中:在用户操作业务过程中,通过决策引擎为每一笔交易计算风险等级。为了保证决策引擎策略的丰富度和高效率,可以通过实时计算系统做指标计算,决策引擎可以通过各类指标快速完成全局策略的计算。 事后:当欺诈案件发生时,我们会形成完整的分析结论并整理到案件库,同时对相关证据做溯源和存证,用于后续可能的司法流程。 整个防控体系建立后,还需要有相应的运营流程驱动它正常地运转和不断地进化。在系统运转的过程中,我们会通过态势感知系统为整体防控效果做监控,当业务指标发生非预期的波动时立即预警。对于防控的效果,策略运营人员会通过机器学习算法离线评估其准确性和风险覆盖率,同时结合欺诈情报从攻击者视角审视整个体系的防控能力和未能覆盖的风险点。我们期望能够通过运营驱动和红蓝对抗,形成一个动态闭环的、不断进化的体系。 ### 3.2 防控体系构建  > 设备指纹可以对标到用户画像、设备画像;决策引擎可以对标到规则引擎,对事件进行规则匹配,判定风险(命中规则)后做一些处置(验证码、引导认证)/处罚;案件库可以对标到已经处置的数据,借助大数据去分析出他们的一些风险特征点或与正常用户的差异点。 **生物探针**通过采集终端的操作行为、传感器信息等数据综合建模,通过机器学习区分出操作业务的是自然人还是自动化工具,适用于全业务场景检测是否是机器。利用生物探针的识别结果,对正常用户不会弹验证码,而对可疑用户才会发起挑战,更好的保障用户体验。 > 生物探针技术指采集用户使用手机时的传感器数据和屏幕轨迹数据的技术,如设备的按压力度、设备仰角、手指触面等,为其建立专属的行为模型,发现异常操作及时阻止。 > 智能手机有很多传感器,加速度计、陀螺仪、重力加速度计、磁场传感器计等,这些传感器能够记录用户使用手机时的数据。 > 如:加速度传感器能够记录手机的线性加速度大小,重力加速度记录手机的重力加速度;陀螺仪记录手机的角加速度。每个用户使用手机的习惯表现在用户操作手机时这些传感器的变化以及滑动屏幕时的轨迹上。 > 智能验证码的本质也是识别是否自然人。目前人机交互对抗日益强大,已经衍生出了滑块、旋转、滑动还原、旋转角度、刮刮乐、文字点选等方式,开源接入可以参考[行为验证码](https://github.com/tianaiyouqing/tianai-captcha)。但是,验证码识别平台更强大关键是人家还挺正规:[云码](https://zhuce.jfbym.com/price.html)。 > 这里的决策引擎概念很范,其实可以分为数据(内容)和规则(事件规则匹配)。 > 数据相关的用户资料审核决策可以理解为审核系统,三方机审+外包人审+内部抽量质检,里面还可以拆分为先审后发还是先发后审,机审包括了图片、语音、文本、视频截帧等。为了与三方解耦且做熔断降级以及检测兜底,除了私信场景这种实时性要求高的都建议走异步队列的方式。对于内容的后置检测可以搭载快速筛查平台,对内容、上下文内容进行词组、正则、自研算法等模型匹配。同时,可以借助ES做相似内容检测,辅助快速筛查平台挖掘异常内容。也可以做头像黑库,以及降本提效率相关的自动处罚、黑白名单等等。 > 规则相关的如登录、注册、换绑等事件,一方面可以接入数美、腾讯、永安等三方检测,借助他们的风控能力对ip、手机号、设备、评率等维度进行风险检测;另一方面可以搭载规则引擎、高危IP、异常关注等异常检测。 ## 第4章 风控核心组件设备指纹 ### 4.1 设备指纹的原理 > 设备指纹是一种用于识别和区分不同设备的技术。它可以通过收集和分析设备的硬件、软件和网络属性来生成一个唯一的标识符。设备指纹的具体原理通常包括以下几个步骤: > > 1. 收集信息:通过浏览器、操作系统或应用程序的特定API,收集设备的硬件信息(如处理器类型、内存大小、显示器分辨率等)、软件信息(如操作系统版本、浏览器版本等)和网络属性(如IP地址、用户代理字符串等)。 > 2. 提取特征:从收集到的信息中提取出与设备唯一特征相关的属性。例如,提取硬件信息中的MAC地址、CPU序列号,提取软件信息中的浏览器指纹、操作系统类型等。 > 3. 组合生成指纹:将提取到的特征组合在一起,并进行哈希运算或其他算法处理,生成一个设备指纹的唯一标识符。这个指纹通常以字符串或数字形式呈现。 > 4. 存储和比对:将生成的设备指纹存储在数据库中,用于后续的身份验证、风险评估等。当需要验证设备时,将提供的设备指纹与数据库中的指纹进行比对,以确认设备的身份。 建立一个海量互联网用户场景下可以稳定使用的设备指纹系统,并不是想象中的那么容易。在构建设备指纹系统的过程中,需要考虑到不同浏览器型号和版本兼容、Android 碎片化机型适配、黑产伪造虚假设备手段识别及用户数据合规采集等方面。 > 设备指纹系统的成本投入大,一般建议依托三方风险检测的能力去维护设备指纹,如数美、腾讯、永安等。当然自身还是要维护一份基础的设备指纹如手机设备号,与用户uuid进行关联。 ### 4.2 设备指纹的技术实现 Web 设备指纹(又被称为浏览器指纹)是由用户设备硬件信息和浏览器配置信息综合计算产生的,它通过JavaScript 脚本采集信息生成对应的设备ID。与传统的cookie 技术相比,Web 设备指纹更加稳定且对抗性更强。 由于浏览器能够采集的唯一标识设备的信息非常少,因此Web 设备指纹稳定性比移动端差很多,也比较容易被黑产绕过。常见的黑产作弊方式有**浏览器隐身模式、无头浏览器、JS 模拟执行**等。 > **浏览器隐身模式**:浏览器隐身模式是一种功能,用户可以在该模式下浏览网页而不会留下任何浏览记录。在设备指纹中,浏览器隐身模式可以避免被跟踪和识别,因为该模式禁用了许多常见的指纹收集方法,如cookies和本地存储。 > **无头浏览器**:无头浏览器是没有图形用户界面的浏览器,可以通过编程方式控制。黑产使用无头浏览器可以模拟正常用户行为,但无需展示页面,从而绕过某些反作弊机制。它们可以自动化执行各种操作,如点击、填写表单等,使其看起来像是真实用户的操作。 > **JS模拟执行**:黑产可能使用JavaScript脚本模拟各种浏览器API调用和交互行为,以欺骗设备指纹技术。这些脚本可以模拟鼠标移动、键盘输入等用户行为,使其看起来像是真实用户的操作,从而绕过一些反作弊措施。 > > 除了上述方式外,还有其他一些灰产作弊方式,如:IP代理、用户代理伪造、设备指纹篡改等 > **普通浏览器隐身模式**识别: > 1、Cookie检测:尝试在隐身模式下设置和读取Cookie,如果操作失败则可能表明用户处于隐身模式 > 2、LocalStorage/SessionStorage检测:类似于Cookie检测,尝试在隐身模式下访问LocalStorage或SessionStorage,无法正常操作则可能表示用户处于隐身模式。 > 3、IndexedDB检测:尝试在隐身模式下访问IndexedDB数据库,无法正常操作则可能表示用户处于隐身模式。 > 4、Canvas指纹识别:利用Canvas API生成一个图像,并将其转换为数据URL进行比对。在隐身模式下,Canvas API返回的数据可能是空白的或错误的。 > > 无头浏览器识别: > 1、JavaScript引擎检测:通过检测浏览器的JavaScript引擎类型来判断是否使用无头浏览器。无头浏览器通常使用Headless Chrome或PhantomJS等特定的JavaScript引擎。 > 2、用户代理字符串(User-Agent)检测:检查浏览器发送的User-Agent字符串中是否包含无头浏览器特有的标识符,如"HeadlessChrome"。 > 3、页面渲染行为检测:通过检测页面的渲染行为,如是否有图像加载、CSS样式计算等,来判断是否是无头浏览器。 > > JS模拟执行识别: > 1、鼠标移动和点击行为检测:通过监测鼠标事件的触发方式和频率,检测是否存在自动化模拟的迹象 > 2、键盘输入行为检测:监测键盘事件的触发方式和频率,检测是否存在自动化模拟的痕迹。 > 3、DOM变化检测:检测页面上DOM元素的变化,比较网页加载前后的DOM结构差异,判断是否存在JS模拟执行。 需要注意的是,设备ID 是在后端生成的。**从前端的角度考虑,无论采用多强的加固和混淆,都能够逆向还原代码。** 如果由前端生成设备ID,那么只要逆向出相关逻辑就能批量生成合法的设备ID。同理,如果将设备ID 直接返回前端,在前端做风控策略,就很容易被绕过。此外,特征与设备ID 的关系是多对一的映射,特征会碰撞但设备ID 必须满足唯一。 被动式设备指纹是指在终端设备与后台服务器建立连接的过程中,从网络报文中提取多个维度的特征集,是一种在用户无感知的情况下进行设备指纹收集的技术。 > 与主动式设备指纹相比,主动式设备指纹需要用户明确的授权或参与,而被动式设备指纹则是在用户浏览网页或使用应用程序时自动收集设备信息。目前被广泛用于:**网站风险评估、反欺诈和反作弊(如虚假注册、支付欺诈)、用户登录和身份验证(如是否注册、是否常用设备)、个性化推荐和广告定向** > > 被动式设备指纹在隐私方面也存在一些争议。因为它会在用户无感知的情况下收集设备信息,可能涉及到个人隐私的问题。 ### 4.3 代码保护 **互联网平台安全和风控是业务防御方和黑产进攻方在黑盒状态下的动态对抗博弈。** 终端风控使用的SDK 受限于其工作原理,必须嵌入业务的APP 应用或H5页面中,直接暴露在黑产眼前。黑产团伙中的技术人员通过逆向分析和修改SDK 采集的设备信息字段试探云端的防控策略,也可以制作工具针对性地伪造大量的虚假设备用于后续攻击活动。因此,风控技术人员需要对SDK 进行安全加固保护,保护其核心代码逻辑,提升黑产逆向分析的技术难度和消耗的时间成本。 代码混淆技术是一种通过改变软件的源代码结构和逻辑,使其更加复杂和难以理解的技术。**是一种增加黑产静态分析难度而牺牲运行效率的技术方案。** 它旨在增加恶意用户分析、逆向工程和代码剽窃的难度,提高软件的安全性。 对于混淆的分类,普遍以 Collberg 的理论为基础,分为**布局混淆(layout obfuscation)、数据混淆(data obfuscation)、控制混淆(control obfuscation)和预防混淆(preventive obfuscation)** 4种类型。 #### JS 代码混淆技术 **布局混淆** 原是指删除或混淆与执行无关的辅助文本信息,具体到JS 就是指源代码中的注释文本、调试信息等。布局混淆也包括采用技术手段处理代码中的常量名、变量名、函数名等标识符 1.删除无效代码:删除注释文本、调试信息、缩进和换行 2.标识符重命名:变量改为单字母、十六进制字符、蛋形结构(QO0o) 为了增加攻击者的分析难度,在同一个作用域链内要避免命名碰撞;在不同作用域链中标识符命名尽可能重复。 **数据混淆** 指对JS的数据结构以及数据值做一些混淆手段 1.数字混淆:数字进行进制转换、保持语义不变的情况下通过等价转换将算法复杂化、将数字以某种等价的公式拆分为表达式(如复杂化时间常量中的"小时x分钟x秒钟") 2.布尔混淆:将布尔值转换为非空、非null、非0等判断 3.字符串混淆:借助Mealy机(有限状态机)、字符串编码(如用 `\u0061`代表 `a`)、undefined 和null 混淆 **控制混淆** 引入不透明谓词、插入冗余代码、控制流平坦化 **预防混淆** 提高现有的反混淆技术破解代码的难度或检测现有的反混淆器中存在的问题,并针对现有的反混淆器中的漏洞设计混淆算法,增加其破解代码的难度。 #### Android/iOS SDK 加固保护 1.**变量名与函数名混淆** 通过引入 `Proguard`(Java 语言的压缩器、优化器、混淆器)混淆代码可读性 2.**字符串混淆** 利用语法树和编译器代替原先的正则替换、用LLVM 自定义字符串混淆Pas、编写gradle 插件,在编译过程中操作Dex 字节码、AES白盒加密 3.**Dex加固与抽取** Dex-Java2C 4.**LLVM转IR** 5.**代码、源代码虚拟化** 构造翻译模块、解释模块 ## 第五章 基于用户行为的生物探针     生物探针技术可以运用于登录场景(是否买卖账号、是否盗号)、小额转账免短信场景、小额免密支付场景、信用卡或借贷申请(是否恶意申请、盗卡盗刷) ## 第六章 智能验证码的前世今生 2018年中国西北大学公布的一个利用对抗生成网络识别验证码的框架。他们提出的验证码识别工具主要包括3个模块:验证码生成网络、预处理模型和最终的求解器。这里我们主要关注第一个模块,看看这个验证码生成网络是如何工作的。一个对抗生成网络由一个生成器和一个判别器组成,在这里生成器的功能是按照真实验证码图片的样子生成近似的图片,而判别器的功能则是判断输入的图片是否是生成器生成的。当生成器有超过95%的概率可以骗过判别器时,我们认为它生成的图片已经基本可以替代真实验证码图片来用于训练了。 这个方法仅仅使用了500张真实图片,就能够达到比使用200万张图片样本训练更高的准确率。对抗生成网络方法的出现基本宣告了字符验证码退出历史舞台。  **打码平台**聚集了大量想在网上赚钱的劳工。攻击者在拿到验证码的图片后,上传给打码平台,打码平台会把图片下发给这些劳工,由他们来解答,然后把正确答案返回。 打码平台把自己包装成了一个网络兼职平台。现在大家可能依然会在QQ 上收到各种招聘打码员工的广告,如“急招打字员,200元一天”这类信息。 刚开始,它还会有一个新手教程,告诉你各种类型的验证码应该如何解答。在完成这个教程之后,就可以开始接单了。他们的黑话把识别验证码称为“答题”,每一题会有相应的分数,在积累到一定的分数之后就可以去提现。打码平台制定了这一系列的规则保证打码员工的产出质量。在打码软件界面左边一栏,打码员工可以看到这一题的类型及对应的分数。晚上答题也会有积分翻倍的奖励,保证平台可以全天候运行。每张验证码会设有超时时间,以避免客户等待时间过长,这些打码员工答题速度很快。 **AI赋能** 在验证类型上我们尝试加入AI 技术。我们使用了GAN(对抗生成网络技术)来无限地生成各种色彩斑斓的鸟。验证的问题可以是“这个鸟的某个部位是什么颜色?”,这种方式不仅仅省去了维护验证码题库的成本,而且AI 技术对动物的肢体部位也无法做到很好地区分。 此外,我们引入了空间旋转验证的方式,为破解又增加了一道门槛,也带来了一些类似游戏闯关的趣味性。区别于传统验证码,空间旋转验证由于设计了需要拖动才能出现正确答案的逻辑,黑产也就无法通过直接截图的方式来获取所有的可选答案。 **轨迹模型** 大部分验证码厂商均有使用基于用户行为轨迹的生物探针技术。用户使用智能终端设备在通过验证码的过程中,产生的生物行为数据(传感器、屏幕滑动轨迹或鼠标移动数据、操作频率间隔数据等)是难以伪造和模仿的,因此,可以通过机器学习建模的方式来区别真实用户和机器。 通过数据分析可以看到人类的操作会有非常多的抖动,而且轨迹并不是直接走向下一个目标,而是会有思考时的犹豫间隔,整体操作相对无序、分散。 反观机器模拟的轨迹,在弹出验证码之后,会有一定时间的停顿,可能是在等待打码平台或自动识别工具的处理,它的间隔也不像真实人类一样流畅,同时整体操作更加有顺序、有规律。尽管脚本在模拟滑动点击时,可能也会增加一些方向上的随机抖动,但在大多数情况下,模型还是能够成功地识别出这种机器行为。 **多维度赋能** 每张图片从后端传输到前端的过程中都是经过切割打乱处理的,所以攻击者无法通过抓包的方式直接拿到最终展示给用户的图片。同时验证码也会检测用户的设备环境是否存在异常,如是不是模拟器、有没有安装作弊工具、是否是真实浏览器环境等。 除此以外,我们也为验证码加入了各种防控维度,包括IP 画像、设备画像等。通过画像数据补充,对来源的IP 和设备有清晰的了解,如它的IP 地址类型(是普通宽带还是IDC 机房)、归属地、是否是代理、设备是否有历史风险行为等。 ## 第七章 风控中枢决策引擎系统 决策引擎是整个风控体系的核心枢纽,它是面向风控运营人员设计的,以规则编辑和规则执行为主要任务的计算平台,通常还包含灰度测试、数据统计分析等功能。作为风控体系的中枢系统,决策引擎会对接终端风控系统、实时指标计算平台、风控数据画像、机器学习和模型平台等各类风控子系统,集中进行风险计算和决策。 互联网风控团队面向风控业务的规则引擎的开发,可以基于Groovy 等脚本引擎开发;也可以基于自身业务需求在开源或商业规则引擎上进行二次开发,开源的代表是Drools,商业的代表是ILOG JRules 等。 > 在规则引擎方面,Groovy的动态性和可读性使其更易于编写复杂的规则逻辑,而且它的简洁和脚本性使其更适合快速原型开发和验证。此外,Groovy可以与Java代码无缝集成,不会造成额外的复杂性。因此,Groovy是一个更适合规则引擎的语言,相对于Java可以提高工作效率和系统性能。 > > 总体来说,Scala解决的Java的类型系统不够强大,[抽象](https://www.zhihu.com/search?q=%E6%8A%BD%E8%B1%A1&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A1685642609%7D)能力不足的缺点。Kotlin解决Java语法糖不够多的缺点,Groovy解决了Java太死板的缺点,Clojure要解决和和Groovy差不多,只是靠Lisp化做得更彻底一点。 > **Kotlin**:Kotlin是一种现代化的静态类型编程语言,它旨在提高Java开发人员的生产力和开发体验。Kotlin解决了Java中的冗余代码问题,具有更简洁、更安全的语法,并引入了许多方便的功能(如空安全)来减少常见的编程错误。Kotlin与Java非常兼容,可以与Java代码无缝集成,现在也是Android应用开发的官方支持语言。 > > **Scala**:Scala是一种功能强大的静态类型编程语言,它融合了面向对象编程和函数式编程的特性。Scala在Java的基础上提供了更丰富的语言特性,如模式匹配、高阶函数、类型推断等,使得编写复杂、高性能的应用程序更加容易。Scala也与Java非常兼容,可以直接使用Java类和库。 > > **Ceylon**:Ceylon是一种现代化的静态类型编程语言,旨在提供更简单、更具可读性的语法。Ceylon解决了Java中的一些语法繁琐和冗余的问题,并引入了一些新的概念(如类型推断、代数数据类型等)来提高开发效率。Ceylon与Java兼容,可以与Java代码互操作。 > > **Clojure**:Clojure是一种动态类型的函数式编程语言,它在JVM上提供了一种简洁、可扩展的编程模型。Clojure解决了Java中的一些复杂性和冗余性,提供了更简洁、更灵活的语法和数据结构,使得编写并发和函数式程序更加容易。Clojure可以与Java代码无缝集成,可以直接调用Java类和库。 > > **Ruby (JRuby)**:Ruby是一种动态类型的脚本语言,它具有简洁、人性化的语法和强大的元编程能力。JRuby是Ruby在JVM上的实现,它使得Ruby可以与Java代码互操作并享受JVM的优势。Ruby解决了Java中的一些繁琐和冗余的问题,提供了更简洁、更灵活的语法和编程范式。 > > **Python (Jython)**:Python是一种简洁、易学的动态类型编程语言,它在JVM上的实现是Jython。Jython使得Python可以与Java代码无缝集成,并且可以利用Java的丰富生态系统。Python解决了Java中的一些语法繁琐和冗余的问题,提供了更简洁、可读性更高的语法。 > > **Groovy**:Groovy是一种动态类型的脚本语言,它在JVM上提供了与Java无缝集成的能力。Groovy解决了Java中的一些冗余代码和繁琐语法的问题,提供了更简洁、更灵活的语法和编程范式。Groovy可以直接调用Java类和库,也可以作为脚本语言使用。 > > **Javascript (Nashorn)**:Javascript是一种动态类型的脚本语言,它在JVM上的实现是Nashorn。Nashorn使得Javascript可以在JVM上运行,并且可以与Java代码无缝集成。Javascript解决了Java中不支持的一些动态编程和函数式编程的问题,提供了更灵活、更具表现力的编程风格。 ## 第八章 海量数据的实时计算指标  正常业务具有连续性和稳定性,异常事件具有波动性。 正常用户总是表现出分布离散性,而黑产总是表现出聚集性。  `PSI`:(Population Stability Index,群体稳定性指标),即风险分布情况,主要是为了衡量决策波动情况。其中AC 表示实际分布,EX 表示期望对比的分布。 > [风控模型—群体稳定性指标(PSI)深入理解应用](https://zhuanlan.zhihu.com/p/79682292) 可应用风控维度场景包括:调用量、拒绝率和拒绝变化率、人审率和人审变化率、决策结果、规则命中、字段获取率、IP段/地域分布、优惠券使用数据(需过滤节日) ## 第九章 风险态势感知系统 ### 基于无监督学习的方法 有监督学习需要给样本数据打标,而无监督学习方法可以对大量未标注的数据集,按照数据内部存在的数据特征划分为多个不同的类别。因为每一个个体的行为都比较独立,如果把平台上账号的行为进行归类,则会发现普通用户的行为比较分散,而团伙的行为会形成异常的聚集点。通过这个思路,使用无监督学习方法可以有效地发现未知的欺诈的团伙。 无监督学习方法的步骤一般包括**特征抽取、建立连通图、群组聚类**等。 通过无监督学习方法发现风险后,可以和实时决策的结果进行比对。如果无监督学习方法比实时决策的增益率高,则需要关注当天的数据,业务有被攻击的可能。 > 这块可以参照[知乎反作弊系统「悟空」架构演进](https://juejin.cn/post/6844903636561051655) : > > **第一阶段,实现基于图的分析能力** :这个阶段旨在提供一种通过网络图谱分析问题的渠道,提升运营和产品的效率,快速进行社区(设备,IP..)识别,团伙行为识别以及传播分析。帮助我们养成从图的角度去挖掘问题的习惯,并帮助我们在日常分析的过程中,总结一些经验,输出一些策略。图谱分析平台的数据基于用户的写行为,将用户,设备,IP, Objects (提问,回答..) 作为 **节点** ,具体行为作为 **边** 。当行为发生时,将用户与设备,用户与 IP, 用户与对应的 object 关联, 而每个节点的**度**就代表发生关联的数量。 图数据存储的部分我们当时调研了 Titan, Neo4j 和 TinkerPop,三者之中最终选择了 TinkerPop 作为存储框架,底层用 HBase 作为存储。TinkerPop 是 Apache 的顶级项目之一,是面向 OLTP 及 OLAP 的图计算框架,其扩展性非常之强,只要实现了 TinkerPop 定义的 API,就能作为驱动让存储支持图查询,可以减少存储额外维护和迁移的成本。目前 Tinkerpop 支持 HBase, Neo4j, OrientDB 等等。另外也通过 GraphComputer 支持使用 Spark 进行查询和计算。Gremlin 是 TinkerPop 定义的 DSL,可以灵活的用于图数据的查询。 > > **第二阶段,基于图实现社区发现的能力** :将相似的用户通过社区的形式化成一个圈子,便于日常分析和策略运用基于一个圈子去处理。我们采用了 modularity + fast-unfolding 实现了社区发现的算法,拿设备社区为例,算法的输入是设备与用户的关联,输出是每个设备节点和每个用户节点以及他们的社区号。模块度(modularity)是衡量网络划分非常常用的维度,模块度越大,意味着比期望更多的边落在了一个社区内,划分效果越好。Fast-unfolding 则是一个迭代算法,主要目标就是提升划分社区效率,使得网络划分的模块度不断增大,每次迭代都会将同一社区的节点合并,所以随着迭代的增加,计算量也在不断减少。迭代停止的条件是社区趋于稳定或者达到迭代次数上限。 > > **第三阶段,在社区的基础上,实现社区分类的能力** :能够有效地识别可疑和非可疑的社区,帮助日常分析和策略更好地打击 Spam 团伙。我们使用的是可解释性比较高的逻辑回归,使用了一系列社区相关的特征和用户相关的特征进行训练,作为运营辅助数据维度和线上策略使用,都有非常好的效果, 从 2017 年 6 月以来我们已经积累了 4w 的可疑社区和 170w 的正常社区。 ### 预警系统 > 风控层面可以对各种策略以及各种指标如调用量、违规量、处罚数等进行风险预警,可以通过同比、环比、均值、最大值、最小值、欺诈情报特定类型、无监督算法增益率/准确度。 > > 对于规则引擎或其他自动处罚维度类型,可以加一个人工复核or投毒校验,如果准确度打标则自动开启处罚反之自动关闭并推送变更。 > > 预警误报率控制在10%左右,需要考虑活动、节日等带来的影响。 数据驱动、AI 驱动的及时有效的风险态势感知系统是被动运营转主动运营,人工运营转自动化运营的必经之路。 ## 第十章 风险数据名单体系 名单数据并不单纯只是构建一份名单,需要有数据挖掘和清洗等方面的能力构建,保障名单数据的丰富性、稳定性和准确性。 > 包括用户黑白名单、设备黑白名单、IP黑白名单,也有一些用户行为的如消费黑名单、限流黑名单、处罚白名单、封号白名单等等,还可以根据uuid构建统一黑白名单,查看用户所有名单状态。同时也要定义好黑白名单的作用域是全局还是仅对当前业务场景生效、 ## 第十一章 欺诈情报体系 欺诈情报就是通过各种方式快速且精确地掌握黑产团伙在用何种资源(IP、手机号等)、何种技术手段(作弊工具、众包等)对业务进行何种攻击(薅羊毛、虚假注册等),为风控团队快速提供决策依据和止损策略。 我们对欺诈情报的定义为:黑产团伙在使用哪些资源和技术手段危害互联网业务的正常运营,包括但不限于获取“刷单”“薅羊毛”等黑产攻击事件细节、黑产新型的作弊工具及黑产使用的各类资源信息。 根据情报采集内容和方式的不同,我们把欺诈情报分为三大类:**数据情报**、**技术情报**和**事件情报** **数据情报**指的是能够沉淀手机号、IP、设备及邮箱账号等黑产名单数据的情报信息。 **技术情报**指的是针对某一种欺诈技术的详细信息,包括原理、用途、危害等。欺诈行为是否工具化是判断风险级别的一个重要因素。 情报体系捕获的某欺诈事件即将发生、正在发生或已经发生过的信息均可称为**事件情报**。事件情报可用于预警即将发生的风险事件、阻断正在发生的风险事件和事后溯源已经发生过的风险。 · 黑产团伙为什么这么做? · 黑产团伙是具体如何操作的? · 黑产团伙如何绕过已有的一些风控策略? · 黑产团伙是否使用了比较特殊的欺诈技术或欺诈手段?其原理是什么? · 黑产团伙使用了哪些资源?这些资源是从哪里获取的? · 预计有多少黑产团伙参与这次欺诈事件? · 针对同类型的欺诈行为,是否有比较好的防控建议? 在分析过程中,我们把风险相关的数据抽取出来,就成为数据情报;把技术和作弊工具有关的情报整理出来,就成为技术情报。 > 数据情报可以作为违规文本自动化分析,用于构建各种模型。也可以通过各种渠道收集薅羊毛、灰产信息的原数据进行相似内容聚合、分词、提炼出关键词进行分线预警。 > 技术情报可以作为威胁工具进行检测。  ## 第十二章 机器学习算法的使用 我们对业务进行风险分析的过程是运用统计处理、情报检索比对、专家系统分析和模式识别等诸多手段对海量业务数据进行处理的过程。通过对数据的分析处理,挖掘出异常用户行为,实现实时或事后的风险管控。因此,业务安全的风控效果在很大程度上取决于**数据分析挖掘的能力**。 在风控和反欺诈的具体业务场景中,落地机器算法的工作主要包括:**特征工程**、**模型选择**、**模型训练**、**工程化**和**业务落地**。另外,在一些场景下我们使用深度学习可以省去人工特征工程这个相对复杂的过程。 ### 特征工程 特征工程本质上是从原始数据中选择特征供算法和模型使用的一项工程活动。业内广泛流传这样一个观点:**数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。** 实际上,大部分从事算法相关工作的人都不具备足够强的算法创新能力,能充分理解业务场景、选择数据特征和算法模型进行工程化落地,已经是非常优秀的了。  **图片相似性**识别是内容安全的一个重要场景,可用于检测仿冒LOGO、检索违规图片等。在选择特征时,我们可以选择使用图片分块hash 和RGB 向量作为特征,但是仅仅使用这些维度的特征进行模型训练会发现效果一般。对机器学习算法来说,重要的不是关注图片RGB 值的各类统计,而是应该从人类理解图片的思维方式来选择特征。如果对图片处理能够有深入了解,我们将会有更多的特征可以选择,如图片的尺度不变特征(SIFT)、加速稳健特征(SURF)、场景特征(GIST)等。SIFT 和SURF 关注图片关键点的信息,GIST 则从自然度(Degree of Naturalness)、开放度(Degree of Openness)、粗糙度(Degree of Roughness)、膨胀度(Degree of Expansion)、险峻度(Degree of Ruggedness)等人类视角的方面描述图片,使用了这些特征算法效果显然会有质的提升。 > 图片相似度匹配可以用于检测杀猪盘、网骗女等头像黑库,还可以以此挖掘出相近的风险用户 在业务场景中,可以选择更多的特征。以游戏为例,我们用模型生成**用户画像**时可以选择如下特征: · 实名信息:是否实名认证、年龄、性别等。 · 账号信息;游戏昵称、注册时间。 · 设备信息:手机型号、IP 来源等。 · 活跃信息:游戏日均时长、游戏活跃天数、游戏活跃时段等。 · 消费信息:历史消费总额、历史消费次数及金额等。 · 处罚信息:封号时长、最近一次封号时间、最近一次封号的原因等。 · 举报信息:举报次数和原因、被举报次数和原因等。 · 其他信息:道具、装备、局内操作数据(如KDA 等)。 在机器学习中,描述单条数据采用的特征数量称为**维度**。从某种意义上理解,维度越高表示选择的特征越多,对数据的描述就越准确,最终算法应用的效果就越好。但是在实际的操作中并非如此,我们在业务中往往需要处理数亿条海量数据,当每一组的特征维度达到成千上万条时,算法的效率有可能大幅度降低。在生产中需要调整算法时,因为变量过多也难以快速分析调整。因此,特征维度较多的数据样本通常需要先进行**降维**处理。 传统意义的降维方法主要有**经验直觉法**和**统计分析法**。 **经验直觉法**的核心还是依赖于人的经验常识,如我们在分析一个APP 是否为作弊工具时,APP 的开发时间、APP 的大小从直觉上判断是可以剔除的冗余特征。 **统计分析法**是从统计学角度考虑的方法,包含缺失值剔除、低方差滤波、高相关滤波等方法: · **缺失值剔除**:如果某一维度数据缺失值比例大于一定的阈值,则该特征维度可以去除。因为很多条数据没有该属性特征,那就不具备可分析性了,很难用作分析结果判定。 · **低方差滤波**:某一特征维度的值信息变化非常小,很容易出现过拟合,这一类特征可以去除。 · **高相关滤波**:如果某些特征之间具有非常高的相关性,则只需要取其中一项作为特征即可。 > 1. **主成分分析(PCA)系列**:PCA 是最常用的降维算法之一。它通过线性变换将原始特征映射到新的正交特征空间,并按照方差大小排序。PCA 可以发现数据中的主要方差来源,减少数据冗余。 > 优点包括简单易实现,缺点是无法处理非线性关系。 > 2. **线性判别分析(LDA)系列**:LDA 也是一种常用的降维算法,主要用于分类任务。它通过最大化不同类别之间的距离和最小化同类别内部的距离来找到一个最佳投影方向。 > 优点是能够保留类别信息,缺点是对于非线性数据效果较差。 > 3. **局部线性嵌入(LLE)**:LLE 是一种非线性降维方法。它通过在原始高维空间中基于局部邻域进行线性逼近,将数据点映射到低维空间。 > 优点是能够保留局部数据结构,适用于非线性流形。缺点是计算复杂度较高。 > 4. **拉普拉斯特征映射**(LE):LE 通过最小化降维前后的数据之间的距离来进行降维。 > 它能够保持原始数据的全局和局部结构,适用于非线性数据。缺点是对噪声敏感。 > 5. **多维缩放(MDS)**:MDS 通过计算数据点之间的距离矩阵,并在低维空间中重新计算距离,实现降维。 > 它可以保持数据之间的距离信息,适用于处理相似度或距离数据。缺点是计算复杂度高。 > 6. **核主成分分析(Kernel PCA)**:使用核技巧将线性PCA扩展到非线性情况,可以更好地处理非线性数据。 > 7. **稀疏PCA(Sparse PCA)**:通过引入稀疏性约束,可以找到更少的重要特征,适用于高维数据。 > 8. **自编码器(Autoencoder)**:自编码器是一种无监督学习方法,通过训练一个重构原始输入的网络来获取低维表示。它能够学习数据中的有用特征,但对噪声敏感。 ### 模型选择  **决策树(Decision Tree)** 是利用树结构来做决策的机器学习模型,它具有简单、容易理解、可解释性强的优点。决策树由节点(node)和有向边(directed edge)组成。节点有两种类型:内部节点和叶子节点。内部节点表示一个特征或属性的测试条件,叶子节点表示一个分类。当构造一个决策树模型时,以它为基础进行分类是非常容易的。具体做法是从根节点开始对实例的某一特征进行测试,根据测试结构将实例分配到叶子节点;沿着该分支可能达到叶子节点或到达另一个内部节点时,那么就使用新的测试条件递归执行下去,直到抵达一个叶子节点。当到达叶子节点时,我们便得到了最终的分类结果。 决策树的缺点是容易过拟合,通常需要通过剪枝的方法进行处理。同时,决策树是从上到下构建的,树的结构非常容易受到数据的影响,数据结构会在很大程度上影响模型结果。 > 决策树可以用于帮助医生或医疗专业人员确定患者可能患有哪种疾病或病因:| > 假设一个医院收集了一些患者的医疗数据,包括患者的年龄、性别、体温、血压、症状等信息,以及他们是否患有某种疾病(如感冒、流感或鼻窦炎)的标记。利用这些数据,我们可以构建一个决策树模型来预测患者是否患有某种特定疾病。 > 首先,我们将根据不同的特征和标签进行数据分割。例如,我们可以根据年龄将数据分为三个组:年轻、中年和老年。然后,我们计算每个组内患病和不患病的比例,并选择最佳的切割点(例如,选择使得基尼系数最小的切割点)。 > 接下来,我们将重复上述过程,根据其他特征(如性别、体温、血压和症状)进一步细分数据。在每个切割节点,我们选择最佳的特征和切割点,以最大程度地减少决策树的不确定性。这个过程一直持续下去,直到满足某个停止条件(例如,达到最大深度或节点纯度达到一定阈值)。 > 最终,我们得到一个决策树模型,它可以根据患者的特征来预测他们是否患有某种疾病。例如,如果一个患者是年轻、女性、体温正常、血压正常,并且有咳嗽症状,决策树可能会预测她患有感冒。 > > 决策树的优点在于它的简单性和可解释性。医生或医疗专业人员可以通过查看决策树的分支和规则来理解模型的预测过程。此外,决策树还可以处理缺失数据和离散/连续特征,并且对异常值和噪声数据相对稳健。 > 然而,决策树也有一些限制。它倾向于过拟合训练数据,特别是当树的深度很大时。为了克服这个问题,可以使用剪枝技术,如预剪枝或后剪枝。此外,决策树在处理复杂关系和高维数据时可能效果不佳,这时可以考虑使用集成学习方法,如随机森林或梯度提升树。 **随机森林(Random Forest)** 是一种使用比较广泛的模型算法。随机森林的基本单元是决策树,通过集成学习的思想将“多棵树”集成一个“森林”。决策树生成过程中分别在行方向和列方向上添加随机过程。在行方向上构建决策树时采用放回抽样得到训练数据,在列方向上构建决策树时采用无放回随机抽样得到特征子集,并以此得到最优切分点。随机森林中的每一棵决策树之间是没有关联的,当有一个新的输入样本进入森林时,森林中的每一棵决策树分别进行投票,得票最多的那一类即成为样本归属的分类。由于采用了多个决策树的投票结果进行分类,因此避免了决策树存在的过拟合问题。 随机森林算法在异常检测方面应用的比较广泛,如在恶意代码分类检测方面的应用得到了比较好的效果。 > 假设公司想要预测在某个特定日期,用户是否会购买一定数量的商品。为了解决这个问题,你可以使用随机森林算法来构建一个模型。 > 首先,你需要收集一些与用户行为相关的数据,如用户的历史购买记录、浏览历史、访问频率等信息。这些数据将作为模型的特征。 > 接下来,你需要标记每个用户在特定日期是否进行购买,并将其作为目标变量。这样,你就有了一组有标签的数据,可以用于训练和测试模型。 > 然后,你可以使用随机森林算法来构建预测模型。随机森林由多个决策树组成,每个决策树都是基于一部分数据和特征进行训练的。这种随机性使得每个决策树都有所不同,从而减小了过拟合的风险。在训练阶段,随机森林会通过对数据的随机抽样和特征的随机选择来构建多棵决策树。每个决策树都会进行独立的预测,最后采用投票或平均值等方式来确定最终的预测结果。 > 在模型训练完成后,你可以使用该模型对新的用户数据进行预测。通过输入用户的相关特征信息,如历史购买记录、浏览历史等,模型可以给出一个概率值,表示该用户在特定日期购买商品的可能性。 > 最后,你可以根据这些预测结果进行一系列的业务决策,比如制定个性化营销策略、提供推荐商品等,以最大程度地促进用户的购买行为。 > > 总结起来,随机森林在电商领域的应用场景包括用户购买预测、个性化推荐、精准营销等。它通过组合多棵决策树的预测结果,可以提供较准确的预测和决策支持,帮助电商公司优化运营和提升用户体验。 **K-Means 模型**又称为K 均值算法,其算法思想为,先从样本集中随机选取K 个样本作为簇中心,计算所有样本与这K 个“簇中心”的距离。对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇,计算各个簇的新的“簇中心”,依次循环计算直到结果收敛。 K-Means 模型的原理简单且应用场景非常广泛,在互联网业务中常用于刻画用户画像。例如,在移动支付场景中,根据用户安全意识的不同可以使用K-Means 模型将用户细分成具有不同安全需求的群体,进而采取不同的营销和风控策略。 > 假设我们经营一家电子商务平台,希望将我们的客户划分为不同的群体,以便更好地了解他们的需求,并为他们提供个性化的推荐和服务。 > 首先,我们收集客户的相关信息,如购买历史、浏览行为、收货地址等。我们可以将这些信息转化为数值形式,例如购买金额、购买频率、访问次数等。 > 接下来,我们使用K-Means算法对这些客户进行聚类。K-Means算法的目标是将客户划分为K个互不重叠的群体,使得每个群体内的客户尽可能相似,而不同群体之间差异较大。 > 在算法开始时,我们需要选择K值,即要将客户划分为多少个群体。可以通过尝试不同的K值,并使用一些评估指标(如轮廓系数)来选择最优的K值。 > 然后,根据选定的K值,算法随机选择K个初始中心点作为群体的代表。接着,迭代地将每个客户分配到最近的中心点所代表的群体,并更新中心点的位置,直到达到收敛条件(例如中心点不再发生变化)。 > 最后,当聚类过程结束后,我们可以得到K个不同的客户群体。我们可以对每个群体进行分析,了解他们的特点和需求。例如,有一组客户可能更注重价格,另一组客户则更关注品质。这样,我们就可以为每个群体提供个性化的推荐、促销活动或服务,从而提高客户满意度和销售额。 > > 总结起来,K-Means算法在客户细分方面的实际应用场景中,可以帮助电子商务平台将客户划分为不同的群体,以便更好地了解客户需求,并为他们提供个性化的推荐和服务。 **神经网络**是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习方法。人脑中的神经网络是一个非常复杂的组织,神经网络把各个节点看作是模拟人脑的“人工神经元”,这种网络被称为“人工神经网络”(Artificial Neural Networks)。 人工神经元就是受自然神经元静息和动作电位的产生机制启发而建立的一个运算模型。神经元通过位于细胞膜或树突上的突触接收信号。当接收到的信号足够大时,神经元被激活然后通过轴突发射信号,发射的信号也许被另一个突触接收,并且可能激活别的神经元。人工神经元模型把自然神经元的复杂性进行了高度抽象的符号性概括。神经元模型基本包括多个输入,这些输入分别被不同的权值相乘,然后被一个数学函数用于计算决定是否激活神经元,同时还有一个函数计算人工神经元的输出。 人工神经网络通常都会具有输入层,隐藏层和输出层。输入层的节点数量由输入数据的维度决定,输出层的节点数量由输出类别的数量决定。 如果这个构造的神经网络只有输入层和输出层两个层次,我们就称为“单层神经网络”。单层神经网络是最基本的神经网络,所有神经元的输入向量都是同一个向量,每个神经元都会产生一个标量结果。单层神经网络的输出结果也是一个向量,其维数就是神经元的数目。输入层中的“输入单元”只负责传输数据,不进行计算。输出层中的“输出单元”则需要对前面一层的输入进行计算。 在业务场景中,单层神经网络对“线性问题”具有较好的拟合效果。如果是数据较为复杂的“非线性场景”,则需要使用多层神经网络来做拟合。  > 单层神经网络,也称为感知器,适用于简单的二分类问题。例如,假设我们有一个数据集,其中包含了一些关于患者的医疗信息(如年龄、性别、血压等),以及他们是否患有某种疾病(是/否)。我们希望通过这些特征来预测一个新患者是否会患上该疾病。 > 在这种情况下,我们可以使用一个单层神经网络来解决这个二分类问题。该网络仅包含一个神经元,该神经元接收输入特征,并根据权重和阈值来计算输出结果。通过调整权重和阈值,我们可以使得神经网络对患病与否进行准确的预测。 > > 在二分类问题上,单层神经网络仍是比决策树在特征表现能力、非线性问题处理、泛化能力、噪声数据处理上更有优势。 **卷积神经网络**(Convolutional Neural Network,CNN)是一种特殊的神经网络,在语音识别和图像识别领域有着非常广泛的应用。使用CNN 处理图片的过程,可以理解为通过多次数学卷积运算将原始图片处理为特征图进行分类的过程。 CNN 有3个特点:**局部连接**、**权值共享**和**池化**  · 局部连接 传统的深度神经网络不同层神经元的连接方式是“全连接”,每一次层的一个神经元的输入,会接受上一层每一个神经元的输出,这种方式称为“全连接神经网络”。全连接神经网络有一个缺点:权值与偏置等参数量大,导致训练收敛十分缓慢。对于图像相关的场景,数以百万的像素,训练的效率一般。而CNN 的神经元之间的连接不是全连接。 在20世纪60年代,生物学家就发现人类大脑的部分神经元只对一定方向的边缘做出回应,这说明人类对外界的认知是从局部到全局的。而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。基于此,当CNN 处理图像时会模仿人类的认知过程,每个神经元只感受局部的图像区域,然后在更高层将局部的信息综合起来就得到了全局的信息。这种处理方式意味着输入层到隐藏层的连接数量可以大量减少,大大提升了训练的效率。 · 权值共享 同层的某些神经元权重是共享的。例如,我们在处理图片时,将一个32×32的像素点,通过过滤器映射到一个28×28的隐藏层,隐藏层的每个神经元都会对应一个5×5的矩阵点。过滤器处理完该图片的所有像素点之后,会生成一个Feature Map,该Feature Map 中的所有神经元共享这25个权值。 · 池化 卷积神经网络除卷积层外,还包括池化层。池化是对信息进行抽象的过程,其主要作用是在保留关键信息的前提下压缩和简化卷积层的输入信息。特征的减少可导致参数减少,进而降低卷积网络计算的复杂度。池化包括平均池化和最大池化,图为一个抽象的池化示意图:池化层是每邻域四个像素中的最大值变为一个像素,以此进行图片简化压缩,在缩减数据量的同时保留了主要特征。  **递归神经网络**(Recursive Neural Network,RNN)是具有树状阶层结构且网络节点按其连接顺序对输入信息进行递归的人工神经网络。RNN 主要用来处理序列相关的问题:一个序列当前的输出与前面的输出具有相关性,具体表现形式为网络对前面的信息进行了记忆并应用于当前的计算。从结构上来看,隐藏层的数据不仅仅包括输入层提供的内容,同时也包括隐藏层的输出。在实践中,RNN 在NLP 领域的语句合法性检查、词性标注等方面都有非常好的应用效果。RNN 结构如图所示,包括输入层、隐藏层和输出层。隐藏层的数据不仅仅包括输入层提供的内容,同时也包括隐藏层的输出。在实践中,RNN 在NLP 领域的语句合法性检查、词性标注等方面都有非常好的应用效果。 在所有RNN 中,长短记忆网络(Long Short-Term Memory,LSTM)是目前使用较为成功的模型。LSTM 模型特殊之处在于单元状态(记忆模块)在传送过程中可以添加和移除信息。在训练的过程中,如果一些信息对它来说已经不重要,则可以通过遗忘门(Forget Gate)降低比重,甚至丢掉不需要的信息。相比普通的RNN 模型,LSTM 模型在某种程度上解决了训练过程中的梯度消失和梯度爆炸问题,因此,能够在较长的序列中有更好的表现。  > 在语言模型中,可以使用RNN来学习历史上下文的依赖关系,以生成连贯的文本。RNN通过将前面已经生成的单词或字符作为输入,结合内部记忆来预测下一个可能的单词或字符。这样的模型可以用于自动文本生成、机器翻译、问答系统、语音识别等任务。 > 举个例子,假设我们要训练一个英文文本生成模型。我们可以将大量的英语句子作为输入数据,通过RNN来学习单词之间的上下文关系。模型会通过学习到的上下文信息,预测每个位置上可能出现的单词。例如,在输入句子"Today is a beautiful"后,模型可以预测出下一个单词可能是"day"或者"morning"等。 > 通过不断迭代训练,RNN可以学习到更复杂的语言结构和规律,从而在生成文本时产生更加准确和流畅的结果。这种模型在文本生成、机器翻译、聊天机器人等自然语言处理任务中具有广泛的应用价值。 **图计算**:图(Graph)是用于表示对象之间关联关系的一种抽象数据结构,由顶点(Vertex)和边(Edge)组成,顶点表示对象、边表示对象之间的关系。在互联网业务动辄上千万甚至数亿的用户体系中,数据规模巨大且结构复杂,用传统的关系型数据来处理复杂的业务安全问题,性能和可扩展性都存在瓶颈。经过不断地探索尝试,大家发现图计算可以很好地解决这类问题。图计算可以将各不同类型的数据融合到同一个图里进行分析,让很多问题得到更加高效的处理,同时也能够得到原本独立分析难以发现的结果。目前,图计算在账号安全、黑产群体挖掘中已经有广泛的应用。 Facebook 通过定义账号行为的同步性和相似度,采用连通图的方法进行聚类从而发现欺诈账户集合,行为的同步性定义如下。 采用一个三元组表示一个动作(Action):  公式中U 是账号ID,T 是行为发生的时间戳,C 是约束对象(Constraint Object)。约束对象是根据业务自行定义的,可以是使用的资源(如IP 地址)和行为关联的对象ID,也可以是上述若干对象的组合。 如果两个账号在相同的约束对象上发生动作的时间间隔小于Tsim,则认为它们之间的行为具有同步性。度量账号之间的相似度根据Jaccard 相似度进行定义。  首先通过账号之间的相似度生成边(相似度为边的权重),然后通过相似度阈值(或者是自定义的一些规则)进行图的切割,最后采用连通图算法实现聚类:  ### 模型准备  > **TensorFlow**: > **优点**:TensorFlow是一个功能强大的深度学习框架,具有广泛的社区支持和文档资源。它提供了灵活的图计算模型,能够高效地在不同的硬件设备上运行。此外,TensorFlow还提供了许多预训练的模型和工具,使得开发人员能够快速构建和部署模型。 > **缺点**:TensorFlow的学习曲线较陡峭,相对复杂一些。其 API 设计较为低级,使用上可能需要编写更多的代码。 > > **PyTorch**: > **优点**:PyTorch 是一个基于动态图计算的深度学习框架,易于使用和学习。它提供了直观的接口和灵活的调试能力,使得开发过程更加快捷。此外,PyTorch 的社区也非常活跃,有大量的教程和示例可供参考。**缺点**:相比 TensorFlow,PyTorch 在分布式训练和部署方面的支持稍显不足。此外,由于动态图计算的特性,PyTorch 的性能在某些情况下可能会受到影响。 > > **Keras**: > **优点**:Keras 是一个高级神经网络 API,易于使用和快速上手。它提供了统一的接口来构建和训练模型,并支持多种后端引擎,包括 TensorFlow 和 Theano。Keras 还拥有丰富的预训练模型和工具,适用于快速原型设计和实验。 > **缺点**:相对于 TensorFlow 和 PyTorch,Keras 的灵活性和可定制性较弱,无法满足一些更复杂的需求。 > > **Scikit-learn**: > **优点**:Scikit-learn 是一个广泛应用于机器学习领域的 Python 库,提供了丰富的算法和工具。它简单易用,同时提供了良好的文档和示例,适合入门和快速实验。此外,Scikit-learn 还支持数据预处理、特征工程和模型评估等常用任务。 > **缺点**:Scikit-learn 主要针对传统的机器学习算法,对于深度学习和大规模数据处理方面的支持相对较弱。 模型训练完成后就可以进行工程化开发和业务落地,我们在实践的过程中有一个体会:**在反欺诈场景下其实不需要对已有的算法做很大的创新,根据业务场景需求选择合适的算法运用得当基本都能解决问题,不同团队和平台之间的核心区别在于工程实现的成本和效率。** 实现一个10亿个节点的图计算,有的平台需要上百台服务器计算一天,有的平台通过10台服务器计算1个小时就可以完成。总体而言,在业务场景落地算法工程时一定要在准确率、覆盖度和投入产出比方面综合评估,选择合适的落地方案。 在业务落地的过程中一定要注意以下几个问题: · 模块化:算法工程代码各部分不能耦合在一起,在实际使用中经常需要通过调节参数、替换模型等方式来优化模型,如果整体代码串行在一起,将会使得后续的维护和优化工作量非常大,系统可读性和扩展性都受到制约。 · 压力测试:线上服务的数据量、TPS 指标与训练环境有很大的差别,在实验环境中非常准确的业务模型有可能在生产环境中需要非常大的性能开销,所以模型上线前一定要通过压力测试评估高负载下的模型性能和效果。 · 数据监控:业务系统数据的异常变化可能导致模型的退化和污染,特别是对于具有自学习特性的系统,业务生产系统一定要对模型输入数据和模型效果做好监控。 ### 机器学习案例 > 一般流程为确定数据源,确定业务表与表字段、评估存储db大小与类型、数据打标与确定更新频率和监督模型、数据质量评估(覆盖率、准确度)与数据预处理(与业务侧确定数据值范围、长尾数据映射为其他)、模型开发 黑产团伙在相同环境下使用了比较相似的设备,通常采用一台电脑控制多个设备的模式,所以在设备行为上存在相似性,这是一个非常适合聚类算法的欺诈场景。为了防止被风控规则发现和拦截,黑产团伙会通过正常业务行为、修改设备参数(改机)等手段进行伪装潜伏和自我保护。但是因为成本原因,黑产团伙使用的网络资源往往是有限的,所以会呈现IP、Wi-Fi 环境的聚集性。而通过人工或脚本修改移动设备参数才能实现改机,通常难以覆盖全特征维度,并且在大批量操作设备时又产生了新的行为相似性。 数据流入相似计算模块,首先两两比较设备行为之间的相似性。在计算相似性时,同一对设备之间可以按照不同的维度多次**计算相似性**。再经过**剪枝**之后通过**连通图算法**可以得到紧密关联的设备网络。最后在进行**聚类**,进一步分析这批设备的更大时间跨度上的行为数据,这些设备多次在相近的时间切片、相近的网络环境上出现了大量的一致性行为,确认是黑产团伙进行“养号”行为使用的高风险群控设备。  **渠道用户聚类**:作弊渠道产生的虚假用户在行为上和正常用户可能会有差异,自动脚本批量生成的虚假用户在操作行为上可能存在相似性。因此,通过对渠道用户进行行为聚类分析,可以发现作弊渠道下的虚假用户集合。 在无线互联网领域中,拥有大量手机APP用户或能够为其他公司提供各类APP(如游戏APP)分发业务的公司被称为渠道。渠道结算的方式一般为CPA(Cost Per Action,按行动付费),CPA 有以下两种含义: · 第一种:CPA 的A 是指注册,即每有一个用户注册了游戏账号或应用账号后,CP(APP 厂商)付给渠道一些费用。 · 第二种:CPA 的A 是指联网激活,即每有一个用户联网登录了游戏或应用账号后,CP 付给渠道一些费用。在利益驱动下,CPA 渠道制造假用户,骗取CP 的推广费用,即为刷量。 黑产通过改机工具自动生成 IMEI、IMSI、MAC 地址、屏幕分辨率、机型、SIM 卡号、手机号、运营商编号或名称、手机OS 版本等各种硬件接入环境参数,伪造虚假的流量。一般通过设备指纹发现这些虚假设备,进而发现渠道下的问题设备和作弊用户。 黑产团伙越来越多地采用“人肉众包”的方式来规避风控检测。黑产团伙组织大量的互联网闲散网民参与各类“任务”实施渠道刷量攻击,在此场景下,参与的用户都是真人真实设备,设备指纹无法发现异常。 从业务角度来分析有一些容易入手的思路,如作弊渠道产生的用户其留存率是有异常的。如果一个渠道留存率产生异常,并且通过用户行为聚类处理发现该推广渠道下存在多个行为高度相似的用户集合,则大概率可以判定该渠道在推广过程中作弊了。 **用户行为刻画**:每一个访问用户都整理出一个按照时间排序的操作动作序列。这里我们借用文本的向量空间模型刻画一个用户的动作集合:每一个用户的动作集合可以看作是一篇文章,用户的每个动作(包含动作、场景和源场景,这里我们把动作ID、场景、源场景连接构成一个行为特征串)可以看作一个单词,有些动作可能会重复多次,因而可以看作一个单词的多次出现。 在文本的向量空间模型表示中,一个单词权重一般采用TF-IDF 来表示,即TF×IDF,这里TF 表示单词在文档中的出现次数,IDF 表示一个单词在整个文档变量集合中出现的文档数量。如果一个单词在当前文档中出现多次但是在整个文档变量集合中出现的文档数量很少,则该单词会更重要。两篇文档的相似度表示如下:  聚类算法:聚类是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程。由聚类所生成的簇是一组数据对象的集合,同一个簇中的对象彼此相似,与其他簇中的对象相异。 传统的聚类算法有K 均值聚类(K-Means)、密度聚类(DBSCAN)等。K 均值聚类算法需要提前设定K 的大小即结果簇的数量,渠道用户聚类场景需要找出足够相似的用户集合,数据集合中存在多少个相似的簇提前是不知道的。DBSCAN 是基于密度的聚类方法,调参相对于传统的K 均值聚类之类的聚类算法稍复杂,主要需要对距离阈值∊,邻域样本数阈值MinPts 联合调参,不同的参数组合对最后的聚类效果有较大影响。 第1步,随机取得一个元素作为第一个簇(Cluster)。 第2步,选取未处理用户集合中第一个元素作为当前的待处理元素。 第3步,计算当前待处理元素与已有各个簇的最近距离。 第4步,如果当前待处理元素与已有簇的距离足够小,则将该元素并入距离最近的簇中。否则,创建一个新的簇。 第5步,返回第2步,循环直到处理完所有用户。  第1列为簇编号,第2列为用户ID,从第3列开始每列分别为用户的行为特征和权重。从该图中可以看出,同一个簇下用户的行为高度相似。  如果当前渠道的行为相似的用户数量属性值大于或等于一定的阈值,则当前渠道使用了刷量工具。 如果当前渠道的行为相似用户的比例属性值大于或等于一定的阈值,则当前渠道使用了刷量工具。 如果当前渠道的最大簇的用户数量属性值大于或等于一定的阈值,则当前渠道使用了刷量工具。 如果当前渠道的最大簇的用户比例属性值大于或等于一定的阈值,则当前渠道使用了刷量工具。 如果当前渠道的Top5簇的用户数量属性值大于或等于一定的阈值,则当前渠道使用了刷量工具。 如果当前渠道的Top5簇的用户比例属性值大于或等于一定的阈值,则当前渠道使用了刷量工具。  ## 互联网反欺诈实战  ## 内容安全与合规 ### 文本内容安全 文本内容安全主要涉及敏感词识别、情绪识别、语义识别等。为了达到文本审核的效果一般采用**敏感词识别**和基于NLP(Natural Language Processing,自然语言处理)的AI 模型(简称**NLP AI 模型**)等多个子系统组合使用的方式。 ### 图像内容安全 尺度把握是图像分类最关键、最核心的环节。 图像分类主要需要解决样本标注、模型训练两个核心问题。模型训练之前,要进行数据增强,来提高模型的泛化能力。数据增强一般包括图像的随机裁剪、随机翻转,RGB 颜色与亮度变换等技术。随机裁剪的目标是在不同尺寸和位置上学习对象的重要特征。 ### 语音内容安全 有语义语音处理主要涉及语音的接收、编解码等。 针对短语音(60秒内)进行更细粒度切分,切分到10秒甚至5秒。因为在样本中发现有整段音频大部分正常,但是有小段的音频违规。 ### 视频内容安全 因此,视频安全算法的核心在于对多元素的拆解。以常规的直播为例,仅从直播内容来看,是由直播的图像帧、语音流和弹幕等元素检测综合起来的。对视频流的内容审核,首先是对视频进行解码,分离出图像和音频。将分离出来的图像流截帧处理,然后调用图像内容安全服务。截帧的方法有两种,一种采用间隔截帧处理,即每隔几秒截取一帧;另一种提取关键帧,通过关键帧的识别减少同一场景内的连续图像检测。 对于拆离出来的音频流可以调用语音内容安全服务进行识别。对于直播弹幕等文本则调用文本内容安全服务进行识别。最终视频的审核结果通过多项内容审核的结果进行综合决策,同时提供相应的证据进行说明。  Last modification:March 4, 2024 © Allow specification reprint Like 1 喵ฅฅ