Hello,大家好,我是民间发明家,覃健祥。我申请了 20 多项发明专利,听到这个数字,有的敌人感觉好厉害但又不明确这些创造和咱们的日常生活有什么关系,有的则问我是不是为了赞助处分申请了一堆凑数的专利,其实,我的大脑里有 100 个翻新点能够申请专利,只是申请专利的工夫和金钱老本都太高了,我只能优先申请一些商业价值大的翻新水平高的。
为了打消大家对专利的神秘感,我打算写篇文章科普一下。恰好,就在 2 月 23 日,我有件名为《基于 HMAC 算法的密钥爱护办法、安装、设施和存储介质》的专利取得了国家专利局的受理通知书,这件专利和淘宝 11 亿客户手机号被盗的惊天大案无关,我在专利中提出的破绽普遍存在于各行各业,很多受害者正在被攻打而不自知;我提出的防护计划具备十分好的通用性。
在此也请各位读者敌人多多转发,好让业界早日受害,若专利胜利获得受权,我将受权国防 / 政务 / 科研 / 教育等公共行业收费应用, 对本文流传有奉献的读者敌人也可申请收费受权(可用于商业目标)。
月黑风高夜,暗淡的房间里,弥漫着羊肉汤的膻味,一个大学生模样的年轻人端坐电脑前,几亿个手机号离奇呈现沾满指纹的电脑屏幕上,在上千公里之外的不夜城,一个个淘宝网购用户相继收到生疏的微信好友申请,继而被拉进一个微信群领优惠券购物,群主的广告账户余额一直地飞速跳动,一个完满的获取用户隐衷变现的闭环造成了。
是什么神秘的力量让中国两大互联网巨头的用户产生了神奇的交加?手机号怎么实现了这不堪设想的时空之旅?天之骄子为何逼上梁山?敬请收看本期《走近迷信》,啊不对不对,手抖打错了,敬请收看本期《了不起的小发明》,哈哈
1. 圈门锁失守,猛虎啖羊羔
说到获取几亿个手机号,人们最容易想到的伎俩之一就是爬虫抓取。在人们的常识中,爬虫属于百度谷歌才有的高科技工具。诚然,百度谷歌要收录全网上百亿的网页,还要保障肯定的实时性,技术难度的确十分大,研发费用都是以亿为单位的。
然而,抓取淘宝用户手机号的爬虫却不须要那么高的技术含量,因为淘宝有官网手机客户端,淘宝为本人的手机客户端提供了接口(即 API),API 有两大长处,使得抓取难度远远小于网页:
一是简洁性。网页不止蕴含了数据信息,还蕴含了排版信息,要把数据从网页上提取进去,须要一些简单的规定和算法。
二是稳定性,网页可能每个月都在改版,改版了,原来提取数据的规定和算法就要重写。而 API 十分稳固,通常一次定义好了之后几年都不变。
于是,通过 API 抓取淘宝用户手机号,不须要写简单的规定就能间接拿到手机号,爬虫开发一次能够用很久。
淘宝的十几亿用户在黑客眼里就是羊圈里成千上万只肥羊,接下来就是想方法冲破羊圈的门了。高价值的用户信息必然有着极高的安全等级,淘宝采纳了国内上支流的 HMAC 技术来鉴定调用接口的是官网的客户端,还是未受权的第三方爬虫。HMAC 技术的 H 代表 hash,中文翻译是哈希,是全世界银行业金融业宽泛采纳的基石技术,当下最火的区块链也是靠哈希来保证数据的可信性。
听起来淘宝的用户库是不是跟谍战大片里的银行金库的保险柜一样平安了?遗憾的是,淘宝将 HMAC 算法用到的密钥,明文放在了 HTTP COOKIE 里(前面会讲技术细节),这就好比保险柜钥匙插在了门上。圈门大开,虎入羊群,一个大学本科文化程度的人,就这样人多势众从淘宝官网的接口中盗取了 11.8 亿用户的手机号用户名等隐衷。
这正是:
蓬门今始为君开,
花径未曾缘客扫。
数只皂雕追紫燕,
一群猛虎啖羊羔。
2. 天网疏不漏,伸手必被捉
2021 年 6 月,中国裁判文书网颁布了一份裁决文书,名为《逯某、黎某进犯公民个人信息一审刑事判决书》,编号为(2021)豫 1403 刑初 78 号,这个惊天大案的假相浮出水面。详情可见腾讯的这篇报道:超 11 亿条!你的淘宝信息可能被泄露了
依据这份判决书,咱们简略回顾一下要点:
工夫线
- 案犯 2019 年 9 月开始作案
- 淘宝网风控人员在 2020 年 7 月发现,8 月报案,同月,嫌疑人被抓获
- 2021 年 6 月一审判决。
损失
- 案犯损失自在,淘宝损失商誉。
- 两名案犯别离被判处 3 年多有期徒刑,守法所得予以追缴,另处罚款数十万。
被盗用户规模
- 淘宝报案称有 3500 万(只是 2020 年 7 月 6 日至 7 月 13 日之间被风控人员监测到的数据)
- 司法机关查获认定为 11.8 亿,淘宝经抽样核实,认可这 11.8 亿数据的真实性
- 嫌疑人辩称只抓了几千万,剩下的 11 亿是别的中央下载的,法院未予驳回。
作案技术手段
- 通过手机淘宝的官网接口接口抓取,判决书中所称 mtop,即 mobile taobao open platform,手机淘宝专用的接口平台
- 不同于淘宝开放平台(TOP),手机淘宝的接口平台是淘宝公有的,只有兄弟公司和极少数合作伙伴能申请到拜访权限。淘宝报案称嫌疑人非法绕过风控机制,证实他们没有非法申请的拜访权限,揣测是通过淘宝“插在门上的钥匙”伪装成淘宝官网客户端抓取数据的
开发爬虫的法律危险
在咱们互联网行业有几句玩笑话:爬虫玩得好,牢饭吃到饱;《Python 爬虫:从入门到入狱》。
我科普的目标是进步大家的安全意识和法律意识,分享平安防护技术的同时也做点普法工作。
爬虫守法的高风险区有这些:
- 抓取大量个人隐私贩卖牟利。罪名是进犯公民个人信息,属于刑事犯罪。非法获取 / 发售 50 条个人隐私即可判刑,本案中,涉案公民信息条数超标 10 倍以上,触发情节特地重大的法条,所以刑期也达到了 3 年以上
- 爬虫拜访过于频繁造成对方服务器解体。罪名是毁坏计算机信息零碎,属于刑事犯罪,造成为 1 万人服务的零碎停机一小时即为情节严重。比方这个 CTO 和程序员双双被判刑的案子
:某公司抓取市居住证零碎致服务器解体,多个政务零碎中断服务,CTO 和程序员别离被判 3 年和 1 年刑。 - 抓取同行的数据用作商业目标。形成不正当竞争,属于民事侵权。比方中国法院网报道过的这个案子:公众点评诉百度案一审宣判 百度抵偿 323 万
领有编程手艺的敌人们,肯定要多理解法律常识,放弃技术造福社会的初心,不要科学“避风港准则”,莫伸手,伸手必被捉。
3. 蚁穴何足道,千里之堤溃
早在 2015 年,我就通过乌云破绽平台向淘宝报告了 HMAC 密钥明文放在 cookie 中的安全漏洞,但淘宝认为那个不是密钥,危害等级低。我认为这个是 app secret,淘宝认为这只是一个 token,这只是文字表述的差别,就算你把它命名为 noise,也不扭转它在程序中 100% 承当着 HMAC 算法 secret 角色的事实。
这种将明文密钥放在通信报文中的做法,相当于给了攻击者一个永恒无效的拜访权限,导致接口被攻击者用来抓数据,淘宝的技术团队认为实质上跟淘宝去抓他人的数据没有区别。具体对话过程参见我 2015 年 9 月 29 日发的这条微博
过后在阿里内网也引起过关注,但不晓得为什么,淘宝始终保持应用这个显然不平安不业余的计划,即便 11 亿消费者的隐衷被盗,也没能引起淘宝的器重,直到明天(2022 年 3 月 1 日),淘宝还在用 6 年前就被我找出过安全漏洞的计划。证据如下:
Dear Officer, the lift is running with huge safety risk.
No, there is no lift, this is only elevator.
文过饰非,终致溃堤,扼腕叹息。
4. 亡羊可补牢,为时犹未晚
提供互联网服务的敌人们,肯定要定期认定扫视本人的平安体系,平安防护计划多多益善,不是说买了一套防火墙就高枕无忧了,淘宝这个级别的公司尚且遭逢这么大的安全事故,阐明平安绝不是轻轻松松就能做好的。
心愿阿里的敌人们能帮我把这篇文章转发给阿里相干技术团队,尽早把这扇敞开了 7 年的大门关上。亡羊补牢,为时未晚。
当然了,11 亿消费者手机号这么容易被盗,谬误不止是明文密钥这一个,API 网关短少优良的限流限频和隐衷过滤性能也是重要起因。这个做起来也颇有难度,我这几年投资做了一个 API 平安网关,服务过央企,也服务过小守业公司,遇到很多技术挑战,也申请了不少专利,遍尝个中酸甜苦辣。
懂技术的读者敌人可能会感觉,把密钥基藏在 js 代码里,重复编码加密几次,再混同一下代码,不就平安了吗?其实不是的,因为浏览器运行环境和 JavaScript 语法的特殊性,网页端的 JavaScript 是解释执行的,可被重写笼罩的,JavaScript 藏不住真正的机密。我只用了一行代码,几秒钟就找出淘宝的密钥了,有了密钥,我才发现竟然就明文放在 cookie 里。下面的两张截图能够看到,我把密钥打印在控制台或者正告了。
用 kotlin 开发 的 Android 客户端可能也有相似的危险,我还没测试过,预计比网页端破解难度大一些。
基于 md5 或者 sha 系列哈希函数的签名验证机制,在互联网应用得十分宽泛,这从各大开放平台的签名算法文档就可以看进去。绝大多数的网页版,都能用一行代码几秒钟破解出密钥,无论你把密钥藏得多深。
有鉴于此,我在 2015 年创造了一种能够真正避免网页端 HMAC 密钥被盗的办法,并胜利使用在我公司的所有产品上。直到 2022 年,发现业界依然没有相似的技术,才申请了专利。这个专利的外围是爱护密钥平安,机密在于以下几点:
权力要求 1:应用衰减后的密钥
哈希算法都是摘要算法,从输出到输入存在信息衰减,无奈逆推。平时大家下载一个几百兆的软件,用于验证下载文件完整性的 hash(也叫 check sum)只有 16~32 字节,足见衰减系数有多大。
咱们能够将明文的密钥事后执行一部分衰减运算,再将衰减后的密钥放在网页端 JavaScript 代码中,在网页端 JavaScript 代码中实现一个变种的 hash 函数,使其利用衰减后的密钥计算出与规范 hash 函数兼容的后果。这样,攻击者就不能从网页端偷到真正的明文密钥了,因为,你没法偷走一个不存在的货色。
攻击者拿到衰减后的密钥,用规范的 hash 函数必然算不出正确的签名,便无奈破解 HMAC 平安机制。
这就是本专利的权力要求 1(专利法规定,权力要求 1 是基石,权力要求 2,3,4 都是基于权力要求 1 的)。
这是篇科普文,我尽量讲得通俗易懂些,具体的技术细节不开展讲,我在专利技术交底书里写了证实过程,大家有趣味看得话,评论里通知我,我前面贴上来。
权力要求 2:爱护变种 hash 函数
通过代码混同,使混同后的代码可读性大大降低,大大提高攻击者人肉浏览变种 hash 函数源码的工夫老本。
实际上,即便不混同,写得极其优雅的 md5, sha256 函数源代码也非常复杂,我感觉因爬虫被判刑的技术员,读得懂 md5 源代码的比比皆是。
此外,还能够将混同后的 hash 函数代码编译成 web assembly 二进制产物,攻击者只能反编译再浏览,难度又晋升了一个数量级。
权力要求 3:定期主动更换
写一个自动化程序,定期执行,更换密钥,以及变种 hash 函数的算法,更换的工夫距离远远小于攻击者破解的工夫,就算他们破解进去也没用了。
5. 摆下迷魂阵,请君入瓮来
在能检测到爬虫行为或者攻击行为的前提下,第一工夫用攻防技术硬扛不肯定是最佳抉择,兵者,诡道也,业内还有这么一些请君入瓮的办法:
蜜罐
检测到攻击行为后,并不提醒错误码和正告音讯,而是成心卖给漏洞,用一些假的商业价值不大的数据喂养攻击者,令其乐不思蜀,不再精进技术去攻打真正敏感的中央。
毒丸
若是公开的接口被抓取,为保障失常用户服务不受影响,辨认出非法爬虫后,在数据里埋设毒丸:给爬虫返回真假参半的数据,令其被领导或者黑产买家非难数据品质差,生意难以为继。
养猪
若对方变现模式是非法外挂,刚检测进去时,可不打草惊蛇,待对方小有所成倒退了肯定数量免费客户后,一举封杀,退款纠纷将仅使其焦头烂额。
钓鱼
若对方变现模式是售卖抓取的数据,第一工夫不封禁其抓取通道,而是收集证据,够刑事立案规范再诉诸法律。
如果大家喜爱这篇文章,除了转发之外,还能够扫描下方二维码关注咱们的微信公众号:代码狗说代码
我的共事会在那里和我一起写文章,都是信息安全 / 软件技术 / 智能硬件畛域的一些科普,通俗易懂,也有技术含量,欢送大家来交换。