聊聊 Zookeeper 的 4lw 与信息安全

news2024/11/18 5:39:27

聊聊 Zookeeper 的 4lw 与信息安全

1. 4lw 与信息泄露问题概述

最近有个客户在扫描安全漏洞时,反馈 ZOOKEEPER 存在信息泄露问题,即:ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境;

大家可以通过 telnet zk-ip zk-port 和 envi 等 4lw复现该问题:

2. 4lw 与信息泄露问题分析与解决

  • 客户反馈的信息泄露问题“攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境”,在 zookeeper3.4.5-cdh6.3.2 中确实存在,但泄露的信息仅仅是系统名称和Java环境;
  • 由于我们已经配置开启了 ZOOKEEPER 的 Kerberos安全认证,攻击者在未经过 kerberos 认证的情况下是无法正常访问 ZOOKEEPER 的任何ZNODE节点的,即无法通过 zkCli.sh 正常登录并执行 set/get/ls等命令:

  • 在当前版本的zookeeper(zookeeper3.4.5-cdh6.3.2)中,为降低上述 zookeeper 的 TCP four-letter word (4lw) 引起的信息泄露的风险,可以通过配置 4lw 白名单的方式进行安全加固,比如 zookeeper.4lw.commands.whitelist=srvr (部分版本zk中该白名单参数默认只有 srvr 一个命令,笔者不知道如何配置该白名单为空);

  • 在当前版本的zookeeper(zookeeper3.4.5-cdh6.3.2)中,如果需要彻底杜绝 4lw 引起的信息泄露的风险,只能通过禁止把Zookeeper直接暴露在公网,并通过防火墙限制IP和端口的访问;

3. 4lw 与 acl

有同学建议对 zk 添加acl 访问控制,比如限制只有指定的认证用户或指定的IP才能访问 zk节点,来杜绝上述 4lw 引起的信息泄露的风险的:

  • acl能限制只有指定用户或指定IP才能登录zk并访问特定的znode,也就是说可以起到杜绝未授权访问漏洞的效果;
  • 但执行 zookeeper 4lw 命令是不需要登录zk服务器的,也是不需要经过认证的,只要对应2181端口的tcp连接是通畅的即可,所以 acl 杜绝不了 4lw 的信息泄露问题;
  • 事实上,CDH中不应该对根节点配置 ACL,比如setAcl / auth:xyz:r059lA6OcDNg:cdrwa 或 setAcl / ip:10.9.100.49:cdrwa, 此时zk的金丝雀检查,yarn的ha服务等都会因无法在根节点下创建和删除znode 而报错:

4. 4lw 与 AdminServer

zk社区后续有彻底淘汰 4lw 命令并使用 AdminServer 替代其功能的计划,Admin Server 是基于Jetty 的http服务并默认监听在8080端口,在 zookeeper3.5.0及之后版本就可以使用 AdminServer了.

  • 4lw:The Four Letter Words: ZooKeeper responds to a small set of commands, Each command is composed of four letters. You issue the commands to ZooKeeper via telnet or nc, at the client port. Three of the more interesting commands: “stat” gives some general information about the server and connected clients, while “srvr” and “cons” give extended details on server and connections respectively.
  • New in 3.5.3: Four Letter Words need to be explicitly white listed before using. Moving forward, Four Letter Words will be deprecated, please use AdminServer instead.
  • New in 3.5.3: A valid Four Letter Words command must be put in this 4lw.commands.whitelist, else ZooKeeper server will not enable the command. By default the whitelist only contains “srvr” command which zkServer.sh uses. The rest of four-letter word commands are disabled by default: attempting to use them will gain a response “… is not executed because it is not in the whitelist.” If you really need enable all four-letter word commands by default, you can use the asterisk option so you don’t have to include every command one by one in the list. As an example, this will enable all four-letter word commands:4lw.commands.whitelist=*
  • The AdminServer is an embedded Jetty server that provides an HTTP interface to the four-letter word commands. By default, the server is started on port 8080, and commands are issued by going to the URL “/commands/[command name]”, e.g., http://localhost:8080/commands/stat.
  • AdminServer is enabled by default (system property zookeeper.admin.enableServer is set to true by default), but can be disabled by either Setting the zookeeper.admin.enableServer system property to false,or by removing Jetty from the classpath.
  • Note that the TCP four-letter word interface is still available if the AdminServer is disabled.

5 相关命令与参考连接

- telnet localhost 2181
- addauth digest xxxx:r059lA6OcDNg
- setAcl / auth:cshj49:r059lA6OcDNg:cdrwa
- setAcl / ip:10.9.100.49:cdrwa
- setAcl / world:anyone:cdrwa
- curl http://localhost:8080/commands/srvr
- https://www.cnblogs.com/aongao/p/14366127.html
- https://issues.apache.org/jira/browse/ZOOKEEPER-1392
- https://zookeeper.apache.org/security.html
- http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201905-954

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 42. 连续子数组的最大和:C语言解法

剑指 Offer 42. 连续子数组的最大和 - 力扣(Leetcode) 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 实例: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: …

电子厂房照明的设计与应用

摘 要:本文基于节能视角对工业厂房的照明设计特点、高效照明装置节能产品选用及电气优化设计进行了分析探讨,具有较强的指导性和价值性,供借鉴参考。 关键词:节能;工业厂房;照明设计;特点&…

java反转字符串的方法

1、首先我们定义一个方法,用来反转字符串。用 public static void (String)方法初始化一个对象,然后使用 private static ()方法对该对象进行初始化,并检查是否有某个字符串和字符串本身相同&am…

MacBook杀毒软件CleanMyMac X4.13

CleanMyMac如何清理 Mac系统?Mac系统在使用过程中都会产生大量系统垃圾,如不需要的系统语言安装包,视频网站缓存文件,mac软件卸载残留的注册表等。 随着时间推移,mac系统垃圾就会越来越多,电脑就开始变慢变…

纳芯微携手企企通,打造全新数字化采购管理系统

近日,苏州纳芯微电子股份有限公司(以下简称:纳芯微)与企企通携手打造的数字化采购平台项目启动会顺利举行。双方相关部门领导、项目团队参加了启动会。双方一致认为本次数字化采购项目合作意义重大,希望共同携手&#…

ROS第四十三节——定位

https://download.csdn.net/download/qq_45685327/87725276 1.新建launch文件 关于launch文件的实现,在amcl功能包下的example目录已经给出了示例,可以作为参考,具体实现: roscd amcl ls examples gedit amcl_diff.launch 该目录下会列出两…

“井电双控”地下水远程计量设施-实现地下水资源合理利用

“井电双控”地下水远程计量设施(MGTR-W4122C)是针对取水计量控制系统开发智能终端产品。集预收费、流量监测、电量监测、余额提醒、欠费停机、无线传输、远程控制等多种功能于一体,并可根据项目需求选择实体IC卡和APP电子卡取水两种方式。其…

Anaconda,CUDA注意事项

2. 呜呜呜!!!用别人的环境,如果他是非GPU版本的TF,你把非GPU版本的TF卸载后安装GPU版本的TF他也装不上。。。会默认给你装非GPU版本的TF!!!大坑比!!&#xf…

手把手带你写一份优秀的开发求职简历(二)

前言 上一节我们针对简历文档名做了剖析,应该把哪些更醒目的简历属性放到文档名上。其实目的很简单,就是希望在HR手中众多的简历中,可以通过文档名字就抓住HR的需求点,让她把你的简历做为第一筛选梯队。匹配好了这一点呢&#xf…

第四章——数学知识3

高斯消元 高斯消元可以用来解方程,可以在n三次方的时间复杂度内,求多元线性方程组。 答案只有三种情况,无解,无穷多组解,唯一解 输入一个包含 n 个方程 n 个未知数的线性方程组。 方程组中的系数为实数。 求解这个方程…

从0~1落地接口自动化测试,让你不再手忙脚乱丨轻松入门

接口自动化测试入门教程地址:https://www.bilibili.com/video/BV1914y1F7Bv/? 目录:导读 前言 为什么要做接口测试 理解接口和接口测试 如何落地接口自动化测试 结语 前言 对于初学者而言,如何从零开始落地接口自动化测试是一个难点&am…

c/c++:字符串str中寻找子串substr出现的次数

c/c:字符串str中寻找子串substr出现的次数 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所知道的周边的会c的同学,可手握10多个offer,随心所欲&#xff0…

LeetCode:24. 两两交换链表中的节点

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱24. 两两交换链表中的节点 题目描述:给你一个链表&#x…

第二章 Unity界面认识

本章节我们来认识一下Unity的主界面,如下所示 Unity的主界面虽然看的内容比较多,但是结构上还是比较清晰地,所以并不乱。从上到下,从左到右依次是菜单栏,工具栏,层次面板(Hierarchy)…

Docker Compose的常用命令与docker-compose.yml脚本属性配置

Docker Compose的常用命令与配置 常见命令ps:列出所有运行容器logs:查看服务日志输出port:打印绑定的公共端口build:构建或者重新构建服务start:启动指定服务已存在的容器stop:停止已运行的服务的容器&…

Android studio 使用入门

安装 安装JDK https://www.oracle.com/java/technologies/downloads/ 新增变量JAVA_HOME,值为JDK安装根目录 在path中增加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 安装 Android studio https://developer.android.google.cn/studio/ 注意:路径尽量不要包…

区间DP (Java) 解析/模板/案例

一. 区间DP简单介绍 区间DP,是经常会用到的、解决区间问题的一种方法,经常以动态规划(dfs/记忆化搜索)的形式展现,最核心的思想就是枚举区间(枚举端点),寻找切割点,处理因…

java.util.List和java.util.Set区别

最近有个需求要求查询按照单号查询顺序,数据库是hbase,我看了之前代码没有通过查hbase进行排序,就问了前端看是否前端可以排序,答案是前端不会做排序;有2个接口其中之前的接口就是这样排序的,于是我就按个排查看不同之…

Java每日一练(20230426)

目录 1. 天际线问题 🌟🌟🌟 2. 2 的幂 🌟🌟 3. 对称二叉树 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

这可能是最全面的Redis面试八股文了

Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的&#xf…