代码审计HBase未授权访问?别慌,我踩过的坑都在这儿了!
哎,说到这个HBase未授权访问,我可真是有一肚子话想说!前两天刚帮一个朋友排查了个安全漏洞,那场面,啧啧啧,简直跟谍战片似的。代码审计这东西,不深入不知道,一深入吓一跳,HBase的未授权访问问题,简直就是藏在暗处的定时炸弹啊!
初见HBase,我天真了
还记得我第一次接触HBase的时候,心里想着:“这不就是个分布式数据库嘛,能有多难?”结果呢?现实直接给我上了一课!那天做代码审计,我习惯性地打开HBase的配置目录,好家伙,hbase-site.xml里居然没设置hbase.rest.csrf.enabled,这不就等于把大门敞开了吗?
当时我就一个激灵,这要是被有心人碰上了,整库的数据那不是想删就删?HBase未授权访问这事儿,真不是开玩笑的,你知道吗,HBase默认的REST API端口是8080,如果没做访问控制,任何人只要知道IP和端口,就能直接操作你的数据——删表、改数据、甚至获取所有表结构,就像在自己家后花园散步一样随意!
代码审计,从入门到“入土”
说真的,代码审计HBase这块,我一开始也走了不少弯路,有一次,我盯着个HBASE的代码看了整整一下午,愣是没发现Kerberos认证没配置,后来还是用工具扫描才发现的,那叫一个尴尬啊!
代码审计HBase未授权访问,核心要看这几个地方:
- 认证机制:有没有开启Kerberos?还是用的Simple认证?
- 授权控制:HBase的ACL权限表配置了吗?
- 网络隔离:HBase的RPC端口,是不是暴露在公网上了?
哎呀,说到这个网络隔离,我上次就栽在上面了,当时审计的HBase集群,只配置了防火墙规则,以为万无一失了,结果你猜怎么着?内部网络有个跳板机,被攻击者拿下了,直接通过内网横跳摸到了HBase的16010端口,我那个暴脾气啊,真是防不胜防!
深挖HBase未授权访问的“七十二变”
做了这么多代码审计,我总结出HBase未授权访问最常见的几种表现方式:
第一种:REST API裸奔
Apache HBase的RESTServer,如果不设置hbase.rest.csrf.enabled和hbase.rest.support.proxyuser,那基本就是一个无遮无拦的状态,攻击者可以直接调用/status/cluster接口搞侦察,甚至通过/version接口获取版本信息,然后针对漏洞库匹配攻击方案。
第二种:Thrift接口敞开后门
Thrift网关比REST API还危险,因为它支持完整的Java API操作,我审计过一个项目,Thrift直接绑定在0.0.0上,连个ACL过滤都没有,这时候只要用Python的happybase库,几行代码就能连上去读取数据。
第三种:协处理器伪造
这个厉害了!HBase的协处理器机制本来是用来扩展功能的,但如果开启了hbase.coprocessor.user.region.classes,攻击者就能上传恶意的JAR包,直接执行任意代码!我接触过一个案例,攻击者就是通过这个把整个集群的数据都加密了,然后勒索!你说气不气人?
我的实战复盘:一次惊心动魄的修复
上个月,我给一家金融公司做代码审计,正好遇到HBase未授权问题,当时的情况是这样的:他们的HBase集群版本是1.4.9,比较老,而且用的是SimpleAuthentication,最搞笑的是,代码审计报告都指出了问题,运维团队还觉得“内网没事,不会有人攻击”。
结果呢?没过两周,就被监管平台扫到了异常流量,HBase的RegionServer CPU飙升到了99%!一查日志,好家伙,有人用scan ''命令在扫全表数据!幸亏发现得及时,否则就是一场灾难啊!
那次的修复方案,我提供了一套组合拳:
- 开启Kerberos双因子认证(这个必须做)
- 设置
hbase.security.authorization=true - 用
grant命令给特定用户分配权限 - 在VPC网络里用安全组限制访问源
代码审计HBase未授权,我的一些“骚操作”
写了这么多,我也想分享点干货,做代码审计HBase未授权访问的时候,有几个小技巧:
第一个小技巧:翻历史配置
HBase有个/etc/hbase/hbase-policy.xml文件,这里定义了各种权限策略,很多团队初始安装时能用,但后来升级忘了更新,我审计时就遇到过,明明Kerberos都开了,但hbase-policy.xml里还是旧的通配符,等于没设置权限!翻配置时要特别留意这个。
第二个小技巧:看日志怀疑一切
HBase的Master日志和RegionServer日志里,会记录所有提交的请求,当审计代码时,可以重点搜一下“获取表metadata”的请求日志——如果有非本机的IP频繁请求describeTable操作,那极大概率是未授权访问在侦察。
第三个小技巧:用工具自动化验证
我常用hbase shell来快速验证权限问题:
whoami list scan 'system:meta'
如果这些操作不需要任何认证就能执行,那就说明问题存在,但注意!这只能作为初步判断,真正的代码审计需要更深入。
结语与“安全人”的忠告
哎,说了这么多,其实我想表达的是:代码审计HBase未授权访问,真不是一蹴而就的事情,需要你深入理解HBase的运行机制,还要时刻保持警惕。
安全这条路,又难又长,但总得有人走不是吗?你要是也遇到类似的HBase安全问题,或者想系统学习安全知识,欢迎加我QQ:11856639,咱们一起交流,一起避坑!嘿嘿,我这人没别的,就是爱分享实战经验!

网络安全无小事,HBase未授权访问看起来是个小漏洞,但一旦被利用,那就是数据资产的灭顶之灾!别等到出了事再去后悔莫及,平时多花点时间做代码审计,总比事后补救来得好啊!

