前言
由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险:
- 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。
- 短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的用户投诉导致短信通道被关停。
- 带来经济损失,尤其是后付费客户,需要承担短信盗刷造成的大额短信费 ,造成亏损无底洞。
所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
一、 AI智能的发展给行为验证带来威胁
验证码本质上自带一层答案的语义,这原本是天然的区分人和自动程序的地方,但在今日却未必,由于AI智能及CHATGPT等大模型的发展,机器要识别也变得更加容易。
1、 目标识别框架
黑产破解者为了降低攻击成本、提高破解效率,通常会利用收集的大量验证码图片样本,打码标注、构建模型网络、训练模型、测试模型,从而得到一个可持续识别图片答案的识别。目前,黑产针对验证码图片的破解最常用的主要是分类模型和相似模型。
2、 批量下载存储验证图片,共需要大数万张图片。
3、 黑产训练出一个高准确度的识别模型后,后续破解验证码时,通过识别模型就能直接获取答案坐标。
4、 借力大模型进行升级
俗话说:道高一尺,魔高一丈,在chatgpt大模型发展的今天,行为验证的方式无论怎么变花样,被破解只是时间而已,被伤害的反而是真实用户。
二、 miniMax开放平台 PC端注册入口
简介:MiniMax是一家成立于2021年12月的大模型初创公司,致力于开发AI解决方案,MiniMax由前商汤科技副总裁、通用智能技术负责人闫俊杰创立,技术合伙人杨斌也是闫俊杰的中科院校友。公司自成立起,便持续专注于推动通用人工智能技术突破。
技术实力与产品:
1 MiniMax已自主研发出不同模态的通用大模型,包括万亿参数的MoE文本大模型、语音大模型、图像大模型以及视频大模型,是国内第一家同时拥有4个模态大模型能力的创业公司,
2 基于这些通用大模型,Minimax推出了生产力工具海螺AI、沉浸式AI内容社区星野等原生应用以及提供API服务的开放平台。
3 2024年4月17日,MiniMax正式推出abab 6.5系列模型,包含abab 6.5和abab 6.5s两个模型。
三、 安全性分析报告:
前端界面分析,miniMax开放平台未采取任何验证措施,存在严重的安全隐患,同行一般会在注册下发短信验证码时采用图形验证、行为验证方式。
四、 测试方法:
1 模拟器交互部分
private final String INDEX_URL = "https://platform.minimaxi.com/registration";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {try {RetEntity retEntity = new RetEntity();driver.get(INDEX_URL);WebElement gtElemet = ChromeDriverManager.waitElement(driver, By.xpath("//button/span[contains(text(),'重新获取')]"), 1);if (gtElemet != null) {GetImage.cookieClear(driver);}driver.get(INDEX_URL);// 输入手机号Thread.sleep(1000);WebElement phoneElement = driver.findElement(By.id("register_phone"));phoneElement.sendKeys(phone);// 点击发送验证码按钮Thread.sleep(500);WebElement sendElemet = ChromeDriverManager.waitElement(driver, By.xpath("//button/span[contains(text(),'获取验证码')]"), 10);if (sendElemet == null) {return null;}sendElemet.click();Thread.sleep(1500);gtElemet = ChromeDriverManager.waitElement(driver, By.xpath("//button/span[contains(text(),'重新获取')]"), 15);String gtInfo = (gtElemet != null) ? gtElemet.getText() : null;retEntity.setMsg(gtInfo);if (gtInfo != null && gtInfo.contains("重新获取")) {retEntity.setRet(0);} else {System.out.println("gtInfo=" + gtInfo);}return retEntity;} catch (Exception e) {System.out.println("phone=" + phone + ",e=" + e.toString());for (StackTraceElement ele : e.getStackTrace()) {System.out.println(ele.toString());}return null;} finally {GetImage.cookieClear(driver);}}
public RetEntity moveExec(WebDriver driver, boolean switchTo) {RetEntity retEntity = new RetEntity();retEntity.setRet(-1);if (switchTo) {// 获取到验证区域WebElement iframe = ChromeDriverManager.waitElement(driver, By.id("tcaptcha_iframe"), 100);if (iframe == null) {System.out.println("moveExec() tcaptcha_iframe|timeout!!!");return null;}driver.switchTo().frame(iframe);}sleep(500);// 获取带阴影的背景图String bgUrl = ChromeDriverManager.waitElement(driver, By.id("slideBg"), 500).getAttribute("src");sleep(500);// 获取带阴影的小图WebElement webSlide = ChromeDriverManager.waitElement(driver, By.id("slideBlock"), 100);String sUrl = webSlide.getAttribute("src");sleep(500);if (bgUrl == null || "".equals(bgUrl) || sUrl == null || "".equals(sUrl)) {System.out.println("moveExec() err: bgUrl=" + bgUrl + ",sUrl=" + sUrl);return retEntity;}String style = null;try {Map<String, String> outMap = openCv2.getMoveDistance("tencent", bgUrl, sUrl);String distanceStr = (outMap != null) ? outMap.get("distance") : null;String width = (outMap != null) ? outMap.get("width") : null;Double left = 38.0 * 680 / 340;// 起点距左边距离Double act = (Double.parseDouble(distanceStr) - left - Double.parseDouble(width)) * 340.0 / 680.0;Integer distance = act.intValue();System.out.println("moveExec() distance(" + distanceStr + ")=" + distance);// 获取滑动按钮if (distance == null || distance <= 0) {return retEntity;}WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.id("tcaptcha_drag_button"), 100);sleep(500);// 滑动ActionMove.move(driver, moveElemet, distance);sleep(400);// 滑动结果String gtInfo = ChromeDriverManager.waitElement(driver, By.id("statusSuccess"), 100).getText();if (gtInfo == null || "".equals(gtInfo)) {sleep(200);gtInfo = ChromeDriverManager.waitElement(driver, By.id("statusError"), 100).getText();}System.out.println("moveExec() gtInfo=" + gtInfo);retEntity.setMsg(gtInfo);if (gtInfo.contains("只用了") || gtInfo.contains("无敌了")) {retEntity.setRet(0);} else if (gtInfo.contains("再试一次") || gtInfo.contains("恍惚了") || gtInfo.contains("半路丢了")) {retEntity.setRet(-1);}return retEntity;} catch (Exception e) {System.out.println("moveExec() style=" + style + "," + e);retEntity.setMsg(e.toString());return retEntity;}}
2 测试结果输出:
五丶结语
MiniMax是一家成立于2021年12月的大模型初创公司,致力于开发AI解决方案,MiniMax由前商汤科技副总裁、通用智能技术负责人闫俊杰创立,技术合伙人杨斌也是闫俊杰的中科院校友。公司自成立起,便持续专注于推动通用人工智能技术突破。
技术实力与产品:
1 MiniMax已自主研发出不同模态的通用大模型,包括万亿参数的MoE文本大模型、语音大模型、图像大模型以及视频大模型,是国内第一家同时拥有4个模态大模型能力的创业公司,
2 基于这些通用大模型,Minimax推出了生产力工具海螺AI、沉浸式AI内容社区星野等原生应用以及提供API服务的开放平台。
32024年4月17日,MiniMax正式推出abab 6.5系列模型,包含abab 6.5和abab 6.5s两个模型。
作为AI智能的头部企业,拥有雄厚的技术实力, 采用的是通俗的滑动验证产品, 该产品稳定并且市场占有率很高, 在一定程度上提高了用户体验, 但安全性在机器学习的今天, 已经无法应对攻击了,并且正是由于该产品通俗, 所以在网上破解的文章和教学视频也是大量存在,并且经过验证滑动产品很容易被破解, 所以除了滑动验证方式, 花样百出的产品层出不穷,但本质就是牺牲用户体验来提高安全。
很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。
所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#
戳这里→康康你手机号在过多少网站注册过!!!
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?
>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》