Qunar风控安全产品的探索之路
李建威。2017年7月以春招实习生的身份加入去哪儿网,毕业后一直在从事抓取与反抓取相关工作,先后负责搭建过智能打码、设备指纹以及环境检测等服务。目前主要负责反爬风控的基础安全产品建设。对各类作弊原理感兴趣。
0x01-前言
本文主要介绍反爬风控相关基础安全产品演变过程中的思考。
文章以总-分的形式讲述,主要分为三部分:(1)产品演变;(2)环境检测;(3)检测分析。
希望其中一些思考能够给大家带来启发。
懂的不多,做的太少。欢迎批评、指正。
0x02-基础安全产品
产品演变
一、问题
在19年之前Qunar的反爬虫、反作弊等场景是业务线各自为战。作为机票反爬最早期的参与者之一,在负责机票App反爬期间就有一个问题一直在困扰我,我的工作一直在不断、重复地编写识别策略,工作量的多少完全取决于爬虫量的多少,防御完全陷入被动局面。是否有办法从根本上解决这类重复性劳动问题。

二、例子
举个例子。下图中蓝色(CRITICAL)代表已识别为疑似用户。黄色(ATTACK)代表已识别为异常用户。

每一次蓝黄交替,就代表一次攻防对抗,就意味着需要进行一次策略的调整。策略例子:
(1)发现某个参数拼写错误;
(2)发现某个设备信息缺失;
(3)发现某个账号对应的IP数量过多。
类似的一次策略调整就需要投入0.5-1pd的人力进行代码编写、发布和验证。
三、思考
重复性劳动注定会使团队陷入被动忙碌且无积累的状态,如何破解这一局面?
比较幸运的是,我在刚毕业的第一年在负责智能打码平台时有研究过几大安全厂商的三代验证码,在此过程中使我具备了一定的逆向技能,让我在解决这一问题上有些新的想法和思路。
1、现象看本质
以上例子举例:
我们的问题是发现某个参数拼写错误,现象是拼写错误,但其实我们本质最应该关注的问题是为什么参数会被篡改和通过什么方式进行篡改的。

解决方法:
(1)方法一:解决现象问题。写判断策略识别拼写错误的异常请求。这种解决方案只能够解决单次问题,下次同类型问题出现还是得通过编写类似策略来解决。
(2)方法二:解决本质问题。弄清楚为什么会被篡改,用什么方式进行篡改的。进行针对性的检测就可以一次性解决类似问题。
2、提升作弊门槛

如同社会金字塔结构,作弊人群金字塔也一样,原理、工具的创造者是少数。如果能够从作弊工具和作弊原理层面去识别作弊者,就可以提升作弊门槛,从根本上解决重复且被动防御的问题。
四、解决
从上述思考的两点出发,“本质”其实就是将问题特征梳理出来,“作弊门槛”的提升方式就是找到问题背后的原理。
以反爬场景为例
我大概将爬虫特征分为四类。
1、问题特征分类一
(1)具有一定规模的数据才有价值;
(2)抓取设备出于成本考虑,需要控制设备数量。
结合以上特征点,我们需要解决的问题是:如何标记真实的设备。
2、问题特征分类二
(1)防护代码会被分析;
(2)安全数据会被篡改。
结合以上特征点,我们需要解决的问题是:如何保证数据的真实性。
3、问题特征分类三
(1)机器自动化抓取;
(2)拦截数据与模拟请求。
结合以上特征点,我们需要解决的问题是:如何更高效准确地识别异常设备环境。
4、问题特征分类四
(1)容器外模拟请求。
结合以上特征点,我们需要解决的问题是:如何识别脱离容器请求。

最后我们将需要解决的问题去孵化安全产品,通过安全产品的方式识别某一类型作弊者,这样即使出现了新的“现象”,我们也能通过最“本质”的原理将他们识别出来。
环境检测
因为这中间涉及到的点非常多,篇幅有限,我觉得可以拿比较有意思的安全产品中的环境检测来详细聊聊。
一、是什么
基于应用当前运行环境,检测设备是否存在作弊风险。
二、为什么
原因有以下两点:
(1)作弊机器一定会篡改应用运行环境;
(2)通过对作弊原理的检测,能从根本上解决作弊问题,将被动防御转换为主动防御。
三、怎么做
我总结为以下三点:
(1)作弊原理分析;
(2)作弊特征提取;
(3)特征检测服务化。
四、作弊原理分析
我把作弊分析分为两部分。分别是作弊设备分析和作弊方式分析

1、作弊设备分析
通过作弊设备分析应用外部运行环境风险。
我把作弊设备大致分为三种:真机、模拟器以及云手机。

真机-应用多开
通过修改应用名称或运行于多开容器中,使得可以在同一台设备内同时运行多个相同的应用。(常见多开应用有VirtualApp、小米分身等)。
模拟器
通过软件模拟移动设备硬件操作,使得App可以直接运⾏在PC上。(常见模拟器有腾讯模拟器、夜神模拟器等)
云手机
通过ARM服务器以及虚拟化技术,在云端虚拟的原生手机实例。(常见有百度云手机、红手指云手机等)
2、作弊方式分析
作弊方式分析应用内部被篡改的风险。我把作弊方式大致分为两种:篡改和非篡改。

重打包
重打包是指将应用反编译后,修改或添加代码后从新打包,将其安装至设备上,应用运行时就会被加载。
HOOK
当程序在执行某段代码时,控制其执行恶意代码。这种篡改就被称为HOOK。
自动化工具
基于Google/苹果发布的自动化测试框架,进行一些列如点击、滑动、键盘输入等操作。
检测分析
由于篇幅关系,不能对其中细节过多展开讲。我选择比较有意思的作弊方式中的动态篡改进行详细分析。
一、介绍
无论是Android还是iOS端,不同分层的代码都有不同的HOOK框架及其对应的原理。

二、分析
框架和原理有很多,框架以Xposed为例,HOOK原理以Inline HOOK为例来进行分析。

1、框架检测-Xposed
(1)要了解Xposed框架,需要先来学习下什么是Zygote。

Init是内核启动的第一个用户进程,zygote是由init创建的进程。zygote所对应的具体可执行程序是app-process,所对应的源文件是app-main.cpp。所有的app进程都是由zygote进程fork出来的。
(2)接下来了解一下Xposed的初始化过程

(3)Xposed代码分析
疑问1:Xposed到底修改了什么?

答案1:
a. Xposed为了在系统启动时优先加载xposed模块和hook系统资源。会将原本的ZygoteInit类替换为XposedBridge类。

b. 函数执行顺序的变化,就会在堆栈中体现出来。
疑问2:Xposed到底加载了什么?

答案2:
a. 加载核心代码libxposed_art.so。

b. 其核心代码对应的特征就必定会出现在运行内存中。
2、原理检测-INLINE HOOK
(1)Android Inline Hook框架源码

(2)Inline Hook原理分析
核心代码含义
1)LDR PC, [PC, 4] :将地址为PC + 4的连续4个字节的数据读入PC寄存器;
2)[PC, 4] :以PC寄存器为锚点,加上一个偏移量来标识绝对地址。(PC相对寻址);
3)LDR PC, hook函数地址:将hook函数地址读入PC寄存器中,实现函数跳转;
4)指令偏移量变化原因:三级流水线取值与执行之间相差2条指令,所以偏移量需要调整。
汇编指令

ARM架构下CPU三级流水线:CPU运行被拆分为三个步骤分别为取址、转义、执行,步骤可以近似理解为三个并行线程。取址与执行之间相差2条指令。例如:执行到0x00006004时,pc寄存器取值0x00006012。
(3)Inline Hook流程

了解原理之后,只需要在必经之路埋下检测点就可以达到对作弊方式进行原理性检测的目的。
3、服务化
通过场景分析问题,根据问题提出解决方案,根据方案孵化出目标安全产品。将孵化出的基础安全产品提供给上游业务风控使用。由基础安全产品提供专业能力,能够降低业务安全参与人员的门槛,上游系统能够更加聚焦于业务防护本身。

0x03-思考
(1)以攻促防。从业务安全场景出发,从作弊者角度思考问题,从数据、原理发现解决问题。不断进行攻防对抗,才能使研发人员和系统不断成长。
(2)真人化。真人化的演变过程是从协议破解到模拟器,再到真机,目前正在朝真人众包方向发展。如何定义与识别真实用户和作弊者是新的难题。
0x04-结尾
软件工程没有银弹,逆向工程永远胜利。
懂的不多,做的太少。欢迎批评、指正。
Qunar风控安全产品的探索之路的更多相关文章
- 业务安全通用解决方案——WAF数据风控
业务安全通用解决方案——WAF数据风控 作者:南浔@阿里云安全 “你们安全不要阻碍业务发展”.“这个安全策略降低用户体验,影响转化率”——这是甲方企业安全部门经常听到合作团队抱怨.但安全从业者加入公司 ...
- Hi,这有一份风控体系建设干货
互联网.移动互联网.云计算.大数据.人工智能.物联网.区块链等技术已经在人类经济生活中扮演越来越重要的角色,技术给人类带来各种便利的同时,很多企业也饱受"硬币"另一面的伤害,并且形 ...
- 5月第2周业务风控关注 | 央行:严禁未经授权认可的APP接入征信系统
本文由 网易云发布. 易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1.央行 ...
- 从EDR的火热看安全产品的发展
从EDR的火热看安全产品的发展 2021年4月8日23:13 当开始写这篇博客时,外面正是护网进行得如火如荼的时候.作为一个产品经理,在吃瓜的同时,也在思考着安全产品的发展.这几年一些看得到的变化在深 ...
- 最新榜单!消金企业TOP10,数据、风控、催收服务方TOP5
最新榜单!消金企业TOP10,数据.风控.催收服务方TOP5 布谷TIME2016-12-15 17:47:59消费 风控阅读(164)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账 ...
- 互联网云生态下DDOS安全产品的一些考虑和测试方法(一)
DDOS攻击简介 安全的三要素——“保密性”.“完整性”和“可用性”中,DOS(Denial of Service拒绝服务攻击)所针对的目标是服务的“可用性”.这种攻击方式利用目标系统的网络服务功能缺 ...
- Robolectric 探索之路
layout: post title: Roboletric探索之路,从抗拒到依赖 description: Roboletric Android Unit Testing category: blo ...
- OpenCV探索之路(二十四)图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...
- 笔记︱风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本笔记源于CDA-DSC课程,由常国珍老师主讲 ...
随机推荐
- 1011day-人口普查系统
1.Browse.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- 【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃
崩溃的信息如下: 1 OpenCV(4.1.0-dev) Error: Gpu API call (invalid configuration argument) in videoDecPostPro ...
- 集合框架-ArrayList集合存储自定义对象
1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...
- 别人都在认真听课,我埋头写Python为主播疯狂点点点点点赞!
最近有次在钉钉看直播,发现这个直播非常之精彩,于是情不自禁地想要为主播大佬连刷一波赞: 但我发现,手动连击点赞速度十分不可观.气人的是,钉钉直播不能长按刷赞!这让我很恼怒.心中满怀的激动和兴奋以及对大 ...
- 【第十四期】高德go面经
自我介绍 选一个比较熟悉的项目讲讲 筛选日志的时候,日志格式是不一样的,你们是如何处理的? 处理日志的时候如果日志量比较大会堆积吗?怎么处理的? 日志落盘到机器上,是如何采集的? 采集服务有问题的话可 ...
- 阿里云服务器sshd-D cpu占用过高
发现阿里云服务器cpu占用到达了100%,原因是被植入了挖矿程序,解决方法如下 1.使用top命令查看进程id 直接kill杀死该进程过一会就会重新启动. 2.查看该进程所在的文件目录 这个文件基本上 ...
- Maven 项目报出警告:Warning:java: source value 1.5 is obsolete and will be removed in a future release
感谢原文作者:Hxinguan 原文链接:https://www.cnblogs.com/Hxinguan/p/6132446.html 问题: 1.创建maven项目的时候,jdk版本是1.5版本, ...
- HTTP消息头(HTTP headers)-HTTP请求头与HTTP响应头
感谢大佬:https://itbilu.com/other/relate/E1T0q4EIe.html HTTP协议将传输的信息分隔为两部分:HTTP信息头.HTTP信息体.通过HTTP头信息,使客户 ...
- 对JSP中的Session 简单理解
我的理解: 简单来说,要使用服务器端的session对象,就是要有其对应的key,即sessionid,它只认识sessionid. 下面我说的cookie,url重写或者隐藏表单,都是为了将其对应的 ...
- ubuntu memcached安装与配置
转载请注明来源:https://www.cnblogs.com/hookjc/ 关于Memcache与memcachedMemcache是项目名,memcached是服务名.让很多初接触的人感觉很是莫 ...