设备指纹与反诈欺
作者: 徐祥智 /Tony
这篇文章主要讨论设备指纹的采集方式与黑客可能会采与的手段,
- 为什么要采集设备指纹?
- 如何采集设备指纹?
- 可以用来辨识设备的设备指纹有哪些特征?
- 这些设备指纹可靠性如何?
- 哪些设备指纹会让黑客仿冒有较高的难度?
- 设备指纹与网络隐私?
- 黑客用的设备有哪些特征?
为什么要采集设备指纹?
服务端要识别使用者是否合法用户, 基本的方式为密码认证或是双因子认证 (手机简讯码),
但是, 如果可以再加上设备指纹的识别, 相当于多一道识别该用户与设备是否为合法用户, 帮助我们回答下列问题:
- 该设备是否为使用者注册或是常用设备?
- 该设备特征是否与之前已知诈骗相似?
- 该设备每次使用服务时有哪些特征? (交易时间, 次数, 浏览服务, 地理位置等)
- 相同的设备被不同使用者使用?
- 相同的设备出现在两个距离遥远的 IP 位址?
透过这些特征可以让我们知道, 是否有异常设备, 异常行为进而告警或是通知使用者
有些前提:
- 设备指纹的采集并非用来取代原有认证方式, 手机简讯码或是密码
- 假设一般正常使用者不会常常或是刻意修改伪装设备资讯
- 设备指纹有可能因为隐私保护法的关系无法取得
黑客的攻擊手法
- 密码暴力破解
- 黑客猜測性的模擬幾種設備, 并且利用已经取得的外泄密码尝试攻击
- 设备仿冒 + 会话劫持
Am I Unique?
要怎么识别我的浏览器是否独特呢?
比知名的网站服务有:
这些网站服务取得浏览器的特征来决定你的浏览器是否独特?
AmIunique研究报告 https://hal.inria.fr/hal-01285470v2/document
首先讨论准确率与误判率的问题
- 场景1: 正常使用者升级浏览器, 这种情况会导致设备指纹的更新, 或是被误认为新的设备 ==> 通知使用者并且确认
- 场景2: 黑客透过改变自我环境 (例如 http://fraudfox.net/) 伪造跟正常使用者相同的设备指纹 ==> 帐号被盗用
笔者认为, 设备指纹采机的方式不完全是人体指纹的概念, 要求一定是独特而且全球唯一
设备指纹主要为辅助判断是否有潜在诈欺风险
上述场景1: 正常使用情况下设备指纹改变, 可以通知或是与使用者确认, 但是要注意的是太频繁的通知反而是困脑,
场景2: 黑客仿冒设备指纹并且盗用帐号的情况, 这是比较严重也是我们要极力避免的问题
帐号被盗用的场景细分为 “设备被仿冒” + “帐号被盗用”
单纯的帐号被盗用可参考 “帐号盗用” 的思路侦测
如何避免设备指纹被仿冒?
设备指纹仿冒?
要回答这问题, 要回到设备指纹的采集, 设备指纹特征采集多达 29种
我们希望可以辨识出该设备, 同时又不希望因为使用者正常变更而导致常告警
在说明设备指纹之前, 要厘清的是没有不可以仿冒的设备指纹, 只是哪些设备指纹是会比较难以仿冒?
以下列举几种比较难以仿冒的设备指纹
- Evercookies https://github.com/samyk/evercookie
严格来说这不是设备指纹, 它是在户用端”各地方”产生 Cookie 的方式, 只要有一个地方 Cookie 被删除, 其他地方的Cookie还在的话还可以识别
- IP Address
IP Address 可以仿冒, 但是由于用户端与后端服务需要通讯沟通, 因此该仿冒的难度也会提高
另外, 由 IP Address 可以查出该 ISP 与地域关系, 这些额外资讯有助于我们判别该 IP Address 是否异常
- TCP TimeStampe
TCP 封包可以仿冒传送, 但是也因为用户端与后端服务需要沟通, 該 TCP timeStamp仿冒难度提高
- 使用者注册时为该设备定义昵称
由于设备昵称仅在注册时传送, 储存于服务器端, 黑客即使模拟客户端也很难得知原始注册的设备昵称
- TLS ClientHello
设备指纹有可能因为个人隐私保护的关系, 使用者选择不传送,
这种情况下, 可以透过 TLS clientHello 于网络连结时, 针对 TLS ClientHello 的封包内容加以解析判断
相关的研究与开源工具参考: https://github.com/LeeBrotherston/tls-fingerprinting
PS. Cisco 的加密封包病毒扫描技术也是利用类似原理, 分辨出用户端为一般浏览器还是 OpenSSL 的程序连接
设备指纹的种类
大致可以分为四大类
- 浏览器相关指纹
- 设备相关指纹
- 插件相关指纹
- 网络相关指纹
浏览器相关
这类主要透过浏览器 JavaScript的执行取得相关资讯, 但可能因为隐私保护法的关系无法取得
开源方案例如: https://github.com/Valve/fingerprintjs2
- UserAgent
- Language
- Color Depth
- Screen Resolution
- Timezone
- Has session storage or not
- Has local storage or not
- Has indexed DB
- Has IE specific ‘AddBehavior’
- Has open DB
- CPU class
- Platform
- DoNotTrack or not
- …..
另外可参考 Evercookies 的方式 https://github.com/samyk/evercookie
EverCookies 的方式为在浏览器端许多细微的地方储存Cookie 透过这些储存的资讯来辨别用户端
自動化機器填入帳號密碼有一個特徵, 就是密码栏位不是透过键盘输入
因此可以监听 keydown, keypress等事件来得知该密码栏位是否为键盘输入, 当然这方式也有可能被 Selenium自动化输入破解
设备相关指纹
这类与硬件相关的指纹相对比较不会变动, 但是也会因为隐私保护法或是权限的关系无法取得
- Mobile sensor
- 透过JavaScript 监听WheelEvent可以知道是用者是否使用滑鼠滚轮, 这也是可以辨别机器操作还是人操作的其中一个因素 (但是卻不是絕對)
- 对于萤幕滚动来说, 一般来说滑鼠滚轮操作的移动增量有固定性, 如果是 Pad移动的增量比较没有固定性
- 透过WebGL API对于Video RAM 侦测
- HTML5 AudioContext API 获取對於設備 Audio 处理方式
浏览器插件
主要指的是Java, Flash, and Silverlight等插件, 取得这类的资讯也会因为隐私保护无法取得
网络相关
这类的资讯相对来说比较不会受到隐私保护或是权限影响而无法取得, 缺点是由于网络环境变动, 部分资讯可能会随时间改变
- IP Address, 取得IP地址之后可以进一步透过 WhoIS 查询Autonomous System (AS)相关的ISP厂商与地理位置
- 由于IP address可能动态会改变, 因此必须额外WhoIS该ISP厂商与地理位置资讯辅助
- 地理位置:取得方式可以透过javaScript navigator.geolocation, 但是会受到装置是否开启GPS而定, 因此比较好的方式还是透过 IP
- TCP Stack: TCP封包過程中有些可以用來當作指紋, 例如 Window Size, MTU, 等
- HTTP header, 或是每次建立 TLS Hello header
- TLS Hello header 也可以看出用户端是浏览器访问还是利用程序 OpenSSL的访问
- TCP timestamps: 这是一种比较有效可以避免被仿冒的方式, 主要透过 TCP timestamps 与服务器时间差来判别
诈欺场景 – 帐号被盗用
帐号被盗用后, 会有哪些特征? (我们假设只有帐号被盗用, 而非手机被窃取或是电脑被入侵的情况下)
透过设备指纹的采集, 当某帐号被盗用透过其他设备登入时候, 会有下列特征,
- 新的作业系统
- 新的手机型号
- 新的 IP 位置地址
- 寄送地址与原注册地址或是之前常用寄送地址差异
- 新的地理位置
- 新的 ISP 网络接入
服务滥用的帐号
当有服务被滥用, 洗单, 刷活动时, 会有下列特征 (不限于)
- 交易的支付方式与信息与以往有所不同
- Email Domain与 Email TLD异常, 或是为黑名单之一
- 收件地址/IP地址/付费地址: 距离差距太大
- 收件地址每次的邮递区号都不同
- 使用相同浏览器(设备指纹) , 相同 IP, 但是不同帐号
- 手机连号(相差 100 内) 或是 随机Email 使用者名称帐号 或是 使用者名称帐号为连号机器产生的相关交易
- 相同 IP 或是来源接近 IP 利用同一促销代码产生大量交易
- 该帐号浏览服务历史行为与帐号创建时间, 例如: 该帐号创建时间短, 而唯一交易为特定促销交易, 或是浏览服务只为促销活动
黑客设备指纹特征
根据設備指紋雲服務公司 simility 的研究, 黑客的设备指纹有下列特征:
其中笔者认为 “Do Not Track”回传值为Null 最为可疑,
- 32-bit OS 执行在 64 处理器
- cookies 信息为空
- “Do Not Track” 值为 NULL
- 瀏覽器歷史訊息清空
- 多半为 Windows 用户端
- 没有安装许多的插件
- 不使用浏览器的隐私模式
來源參考
笔者建议
由於設備指紋都需要在客戶端透過 JavaScript 或是手機端SDK取得設備相關數據
无论什么方式都可以被黑客反解译得知该设备指纹的逻辑, “设备指纹”判断整体帐号交易风险异常因素之一但非绝对
其他还需要商业逻辑的配合:
- Email 注册帐户是否为机器生成, 是否有乱数或是连续号码相似, 透过机器产生的大量帐号
- 手机号是否为诈骗号, 或是连续号 (<> 100 ) 内
- 帐户是否为僵尸号, 超过六各月没有任何活动纪录
- 是否已经绑定手机号码
- 网络相关资讯 (IP, ISP 接入)
- 地理位置资讯 , 付费地址, 登记地址 , IP 侦测所在地理位置差距很远
- 同一设备登陆请求一分钟内超过三十次
- 同一设备登陆的帐户数量超过两个
- 短时间一分钟内易地距离超过500KM登陆行为
- 设备登入与常用设备登入有所不同
- 注册使用临时邮箱服务
- 闲置时间交易 (凌晨 0000-0500)
- 交易量与数额异常增加
- 交易类型, 人均交易, 次均交易 , 当日限额 , 当日手机连号交易
當上述現象發生時, 是否表示诈骗? 也不是, 但是至少可以让我们进一步告警或是请使用者进行手机简讯验证
或是询问一个使用者之前使用上经验的问题, 例如之前支付方式都是使用微信, 支付宝
另外, 透过申请人所提交的注册资讯的关连分析, 将这些资讯画成关连图, 也可以提供一些线索
- 申请人 1, 申请人 2, 申请人 3….
- 电话 1 ….电话 2…
- 公司 1….
- 设备指纹 ID
透握这些关系的连结可以组成关系图, 有些异常的场景如下
- 同一或是类似设备指纹但是却被许多电话注册使用
- 同一申请人但是有超过五个以上设备.
- 許多申請人共用同一電話
- 許多電話同一申請人使用
- 相同的公司但是不同申請人所填寫的公司電話卻不相同
其他參考
- http://www.google.ch/patents/US8151327
- amiunique.org/fp 研究报告 https://hal.inria.fr/hal-01285470v2/document
- http://fraudfox.net/
- Website: http://uniquemachine.org
- Paper: https://drive.google.com/file/d/0B4s900Byvv1ibW5uc1NiU2g3R3c/view
http://people.scs.carleton.ca/~paulv/papers/acsac2016-device-fingerprinting.pdf