ZooKeeper通過ACL修復未授權訪問漏洞


默認情況下ZooKeeper允許匿名訪問,因此在安全漏洞掃描中暴漏未授權訪問漏洞。

clipboard

一、參考資料

《ZooKeeper 筆記(5) ACL(Access Control List)訪問控制列表》

https://cloud.tencent.com/developer/article/1024452

《ZooKeeper access control using ACLs》

http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl

ZooKeeper的節點有5種操作權限:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、刪、改、查、管理權限,這5種權限簡寫為crwda(即:每個單詞的首字符縮寫)

注:這5種權限中,delete是指對子節點的刪除權限,其它4種權限指對自身節點的操作權限

ZooKeeper的身份的認證有4種方式:

world:默認方式,相當於全世界都能訪問

auth:代表已經認證通過的用戶(cli中可以通過addauth digest user:pwd 來添加當前上下文中的授權用戶)

digest:即用戶名:密碼這種方式認證,這也是業務系統中最常用的

ip:使用Ip地址認證

 

二、解決思路:

1、world方式直接排除。

2、auth和digest通過用戶名和密碼方式可以有效進行權限控制,因應用中使用duboo和zookeeper做結合,有網友說Dubbo並沒有實現認證的邏輯,實際測試發現確實無法進行注冊。

報出如下錯誤:

java.lang.IllegalStateException: Failed to register

cause: org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /dubbo/com.common.crud.IEntityDao

參考資料:

https://yq.aliyun.com/articles/284281?utm_content=m_37169

3、最后只剩下了IP限制方式,通過IP白名單對連接ZK的客戶端進行限制。

 

三、操作步驟:

因zookeeper不支持節點間權限的繼承,所以需要對關鍵節點進行權限控制。

目前只對“/”、“/dubbo”、“/zookeeper”進行限制。

<ZooKeeper_HOME>/bin/
./zkCli.sh -server ip:port
setAcl / ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa
setAcl /dubbo ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa
setAcl /zookeeper ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM