学习
实践
活动
工具
TVP
写文章
专栏首页天存信息的专栏WEB安全新玩法 [11] 防范批量注册
原创

WEB安全新玩法 [11] 防范批量注册

网站的攻击者通过批量注册用户,能够实施大规模非法操作,如抢优惠券、恶意刷单等。这给服务商造成了直接的经济损失,而大量的垃圾用户也会占用系统资源,增加系统运行压力。防范批量注册需要针对系统特点,多管齐下综合应对,iFlow 业务安全加固平台可以提供各种防范批量注册的技术实现方式。


以某电商网站为例,其用户注册功能存在被攻击者利用的可能。在此将模拟攻击者批量注册的行为,并利用 iFlow 使用多种手段来防范攻击。

攻击示例

攻击者编写 RegistTest.py 脚本进行攻击,脚本使用 WebDriver 驱动浏览器模拟正常用户的注册操作。

图1

攻击者事先准备好待注册的用户/口令文件。脚本执行时循环进行如下操作:逐行读取用户/口令文件中的信息→访问注册页面→使用第三方软件识别验证码→将用户信息注册提交。

图2

脚本运行完毕后,可以看到大量用户被注册,均来自于攻击者准备的用户文件。

图3

手段一 频度限制

使用 iFlow 可以简便地实现在规定时间内限制同一访问主体 (IP 或设备) 的用户注册次数,也可以在规定时间内限制网站整体的用户注册次数。

代码实现以下条件:

  • 同一设备在 30 分钟内用户注册超过 3 次,则阻止此设备访问 10 分钟;
  • 同一 IP 在 60 分钟内用户注册超过 10 次,则阻止此 IP 访问 20 分钟;
  • 网站整体在 120 分钟内用户注册超过 100 次,则暂停整个系统注册操作 30 分钟。
{
	"if": [
		"REQUEST_FILENAME == '/shop/index.php'",
		"@ARGS.s == '/index/user/reg.html'"
	],
	"then": [
        "DEVICE.reg_num@1800=DEVICE.reg_num+1",
		"REAL_IP.reg_num@3600=REAL_IP.reg_num+1",
        "GLOBAL.reg_num@7200=GLOBAL.reg_num+1",
        {
        	"if": "DEVICE.reg_num>3",
            "then": [
                "DEVICE.reg_num=null",
                "block('DEVICE',10*60,'deny')"
            ]
        },
        {
        	"if": "REAL_IP.reg_num>10",
            "then": [
                "REAL_IP.reg_num=null",
            	"block('REAL_IP',20*60,'deny')"   
            ]
        },
        {
        	"if": "GLOBAL.reg_num>100",
        	"then": [
        		"GLOBAL.reg_num=null",
        		"GLOBAL.reg_blocking@1800=true"
        	]
        },
		{
            "if": "GLOBAL.reg_blocking",
            "then": "verdict('deny')"
        }
	]
}

手段二 页面关联

正常用户填写注册信息是需要花费一段时间的,而自动化攻击获取注册页面和提交注册信息的时间往往很短。使用 iFlow 可以有效判断这种差异,进而区分正常用户和自动化脚本。

代码实现以下条件:

  • 提交注册 (reg.html) 之前 120 秒内必须访问过注册页面 (reginfo.html);
  • 访问注册页面 (reginfo.html) 后,必须超过 5 秒才能提交注册 (reg.html)。
[
	{
		"if": [
			"REQUEST_FILENAME == '/shop/index.php'",
			"@ARGS.s == '/index/user/reginfo.html'"
		],
		"then": [
			"SESSION.had_access_reginfo_page_flag@120=1",
			"SESSION.time_between_reginfo_and_reg@5=1"
		]
    },
	{
		"if": [
			"REQUEST_FILENAME == '/shop/index.php'",
			"@ARGS.s == '/index/user/reg.html'"
		],
		"then": {
			"if": "!SESSION.had_access_reginfo_page_flag",
			"then": {
				"action": "deny",
                "log": "reginfo.html must access firstly!"
			},
			"else": {
				"if": "!SESSION.time_between_reginfo_and_reg",
				"then": "SESSION.had_access_reginfo_page_flag=null",
				"else": {
					"action": "deny",
                    "log": "The time between reginfo.html and reg.html is too short!"
				}
			}
		}
	}
]

手段三 客户端识别

正常用户使用浏览器访问网站,攻击者则使用工具模拟浏览器或驱动浏览器引擎来访问网站。我们使用 iFlow 在响应中主动插入和运行前端代码来获取客户端的特征。

代码实现以下条件:

  • 访问注册页面 (reginfo.html) 时,iFlow 在响应报文中加入 js 代码段,这段代码判断客户端是否为 WebDriver,并将结果发送到 iFlow 检查点 (checker.dummy);
  • 访问 iFlow 检查点 (checker.dummy) 时,iFlow 获得判断结果,如果是 WebDriver 则阻止该 IP 的访问 10 小时。
[
	{
		"if": [
			"REQUEST_FILENAME == '/shop/index.php'",
			"@ARGS.s == '/index/user/reginfo.html'"
		],
		"then": {
			"directive": "alterResponseBody",
			"op": "string",
			"target": "var __user_id__ = 0;",
			"substitute": "var __user_id__ = 0; var httpRequest = new XMLHttpRequest(); httpRequest.open('GET', '/iflow/checker.dummy?ret='+window.navigator.webdriver); httpRequest.send(); "
		}
    },
    {
        "if": [
            "REQUEST_FILENAME == '/iflow/checker.dummy'",
            "@ARGS.ret != 'false'"
        ],
        "then": [
            "verdict('deny', 'Client is webdriver!')",
            "block('REAL_IP', 3600*10, 'deny', REAL_IP.__id..' in blocking')"
        ]
    }
]

手段四 一次性令牌

利用 iFlow 可以给流程加入一次性限时令牌。具体到本例中,访问注册页面时用户获得一个一次性令牌,提交注册时这个令牌被消费掉,缺少令牌则不能进行提交注册。这一手段可以防范重放攻击。

图4

代码实现以下条件:

  • 访问注册页面 (reginfo.html) 时,iFlow 在响应报文中加入 js 代码段,在参数中加入一次性令牌;
  • 提交注册 (reg.html) 时,iFlow 检查一次性令牌的真实性并予以销毁,即令牌不能被重复使用。
[
	{
		"if": [
			"REQUEST_FILENAME == '/shop/index.php'",
			"@ARGS.s == '/index/user/reginfo.html'"
		],
		"then": [
			"TX.tmp_ulh=md5(random())",
			"SESSION.reginfo_ulh@300=SESSION.reginfo_ulh..','.. TX.tmp_ulh",
			{
				"directive": "alterResponseBody",
				"op": "string",
				"target": "/index/user/reg.html", 
				"substitute": "/index/user/reg.html&ulh=${TX.tmp_ulh}"
			}
		]
	},
	{
		"if": [
			"REQUEST_METHOD == 'POST'",
			"REQUEST_FILENAME == '/shopxo-1.6.0/index.php'",
			"@ARGS.s == '/index/user/reg.html'"
		],
		"then": {
			"if": "notNull(SESSION.reginfo_ulh)",
			"then": [
                "SESSION.reginfo_ulh = null",
                {
					"if": "!contain(SESSION.reginfo_ulh, @ARGS.ulh)",
					"then": {
						"action": "deny",
						"log": "${SESSION.reginfo_ulh} not contain ${@ARGS.ulh}!"
					},
					"else": {
						"directive": "alterArgGet",
						"op": "unset",
						"name": "ulh"
					}
				}
            ],
			"else": {
				"action": "deny",
				"log": "${SESSION.reginfo_ulh} is not exist!"
            }
		}
    }
]

总结

针对目标电商网站的批量注册漏洞,我们使用了频度限制、页面关联、客户端识别、一次性令牌这四种手段进行防护。事实上,使用 iFlow 还可以写出其他防护手段,如参数聚合、动态混淆等。通过上述手段,使用者能够很大程度缓解攻击者的批量注册行为。

我们在上述例子中看到:在 Web 服务器前部署 iFlow 业务安全加固平台,它有能力拦截、计算和修改双向 HTTP 报文并具备存储能力,可以成为 Web 应用的虚拟补丁。(张戈 | 天存信息)

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • WEB安全新玩法 [2] 防范前端验证绕过

    用户登录,几乎是所有 Web 应用所必须的环节。Web 应用通常会加入一些验证手段,以防止攻击者使用机器人自动登录,如要求用户输入图形验证码、拖动滑动条等。但是...

    天存信息
  • WEB安全新玩法 [10] 防范竞争条件支付漏洞

    服务器端业务逻辑,特别是涉及数据库读写时,存在着关键步骤的时序问题,如果设计或代码编写不当就可能存在竞争条件漏洞。攻击者可以利用多线程并发技术,在数据库的余额字...

    天存信息
  • WEB安全新玩法 [6] 防范图形验证码重复使用

    在完成关键业务操作时,要求用户输入图形验证码是防范自动化攻击的一种措施。为安全起见,即使针对同一用户,在重新输入信息时也应该更新图形验证码。iFlow 业务安全...

    天存信息
  • WEB安全新玩法 [5] 防范水平越权之查看他人订单信息

    水平越权是指系统中的用户在未经授权的情况下,查看到另一个同级别用户所拥有的资源。水平越权会导致信息泄露,其产生原因是软件业务设计或编码上的缺陷。iFlow 业务...

    天存信息
  • 从《乱世王者》看腾讯SLG手游如何搭建完整安全服务

    原文链接:https://wetest.qq.com/lab/view/453.html

    WeTest质量开放平台团队
  • 第十一期 | 你抢不到的优惠券

    第十一期 | 你抢不到的优惠券,背后“元凶”竟是垃圾注册?顶象防御云业务安全情报中心发现,某电商平台注册场景出现大批量异常注册。黑产通过批量注册获得大量平台账号...

    顶象技术
  • Struts2 S2-049 拒绝服务漏洞分析报告

    安全通告 尊敬的客户: 2017年7月11日,Struts2官方公布最新的Struts2漏洞公告-编号S2-049。该漏洞公告中说明:在一定条件下该漏洞可造成拒...

    安恒信息
  • 从《乱世王者》看腾讯SLG手游如何搭建完整安全服务

    WeTest 导读 《乱世王者》是由腾讯旗下天美工作室群自主研发的一款战争策略手游,在经历了2015年-2017年的SLG品类手游的爆发之势下,于2017年11...

    WeTest质量开放平台团队
  • 群晖NAS上搭建huginn

    群晖的 Docker 是 Docker GUI 中对一般用户体验最好的。简直无敌。

    huginn 中文网
  • 渗透测试之信息搜集思路及技巧

    信息搜集对于后续的渗透测试至关重要,信息的完整性决定着能否挖掘出网站漏洞,本篇文章将从几个方面讲解信息搜集的思路及技巧和具体的防范方法。

    C4rpeDime
  • 安恒杯丨你一定不知道的安恒杯新姿势

    经过了一周年的洗礼,安恒杯也逐渐明确了自己的定位:论规模,我们尚且不如国内几大知名赛事,毕竟是小(kui)本生意;论质量,我们也还有许多需要改善的地方。但我们还...

    安恒网络空间安全讲武堂
  • 黑客攻击币安API完全调查:我们发现了比价值96比特币的SYS更有意思的信息

    在 7 月 4 号的币安 API 被攻击本该是一件大事,当天,有 11 个名为 SYS 的 Token 在币安交易所内以 450 万人民币(96 个比特币)的价...

    区块链大本营
  • 小程序助力开发智能家居生态合作新模式

    智能家居是在互联网影响之下物联化的体现。智能手机市场日益饱和的当下,智能家居行业成为许多厂商新业绩的掘金池,涌入的厂商众多,也导致互相竞争激烈,加之各家生态壁垒...

    二山山记
  • PerfDog发布全新指标,为游戏量身打造

    近日,移动性能测试工具Perfdog正式发布了V7.1版,迎来了“2022年的首次重大版本更新”,针对游戏性能评估创新发布全新指标稳帧指数Smooth、微小卡顿...

    WeTest质量开放平台团队
  • 怎样靠小程序助力智能家居生态新模式

    我国智能家居市场正在蓬勃发展。根据 CSHIA《2020中国智能家居生态发展白皮书》数据显示,2019年底中国已成为全球最大的物联网市场,全球15亿台蜂窝网络连...

    pak

扫码关注腾讯云开发者

领取腾讯云代金券