游客发表
去年有个做社交电商的上试团队,App都打到应用商店审核那一步了,线前结果被自家一个实习生用Burp Suite扫出来一个越权漏洞——普通用户改个URL参数就能看到别人的透测订单地址和手机号。上线时间直接推迟两周。上试这种事不是线前个例。渗透测试不是透测走形式,是上试上线前最后一道能救命的闸门。
很多人以为渗透测试就是线前跑一遍自动化扫描器,等报告出来修几个高危就完事。透测真不是上试。自动化工具能覆盖的线前面大概只有30%到40%,剩下的透测全靠人手工去挖逻辑漏洞。拿电商App举例,上试优惠券并发领取、线前订单金额前端可篡改、透测积分兑换负数——这些扫描器根本测不出来,但恰恰是黑产最爱用的入口。
Android APK拿到手,先反编译看代码混淆做得怎么样。我见过一个金融类App,反编译出来硬编码的AES密钥直接躺在strings.xml里,数据库连接串也在。iOS这边看IPA包,检查有没有开启PIE、Stack Canary这些基础防护。还有一类问题特别常见:日志输出没关。开发阶段打Log方便调试,上线忘了关,用户token、手机号全打在logcat里,随便一个恶意App申请读取日志权限就能拿走。
本地存储也是重灾区。SharedPreferences里存明文密码,SQLite数据库不加密,键盘缓存没禁用。这些在渗透测试里属于必查项,但开发团队经常觉得“用户手机又不会被人拿走”。现实是,一台root过的设备或者一个备份文件就能把这些数据全抖出来。
抓包是第一步。代理一挂,看App走不走HTTPS,证书校验有没有做。不少App虽然用了HTTPS,但客户端信任所有证书,中间人攻击一打一个准。更离谱的是有的App关键接口还在走HTTP明文,登录请求直接裸奔。
API层面的测试更费时间。把App里所有能触发的请求抓下来,逐个改参数试。用户ID从1001改成1002,看能不能读到别人数据——这就是越权。把price=99.00改成price=0.01,看服务端有没有重新校验——这是支付逻辑漏洞。验证码接口不做频率限制,手机号枚举加短信轰炸,一条短信五分钱,一晚上能烧掉几万块。
还有个容易被忽略的点:旧版本API没下线。新版本App改了接口逻辑,但老接口还能用,而且没有新加的安全校验。攻击者用老版本App或者直接构造请求,就能绕过新版本的安全限制。
这块最考验渗透测试工程师的经验。比如签到功能,正常流程是每天签一次领积分。测试的时候把系统时间改到明天,再签一次,看服务端是按客户端时间判断还是按服务器时间判断。如果是前者,积分就能无限刷。
再比如密码找回。正常是回答安全问题或者验证邮箱。测试的时候看能不能跳过验证步骤直接调重置密码的接口。有的App前端做了步骤控制,但后端接口之间没有状态校验,直接调最后一步的API就能改掉任意用户密码。
还有并发问题。提现接口,同时发十个请求,看账户余额够不够扣。如果服务端没有加锁或者事务隔离没做好,就可能出现超额提现。这种漏洞在促销活动期间特别致命。
测完出一份报告,列一堆漏洞,然后呢?很多团队修完高危漏洞就急着上线,中低危的丢到一边。但实际情况是,中危漏洞组合起来往往能打出高危效果。一个信息泄露加一个越权,就能把整个用户数据库拖走。
我的建议是:上线前至少留出两周时间做渗透测试和修复复测。修复完必须回归验证,别修了一个漏洞又引入新的。最后,把渗透测试纳入版本迭代流程,每次大版本更新都跑一轮。安全这件事,上线前多花一天,上线后少赔一百万。
友情链接