原文鏈接:
https://github.com/slowmist/eos-bp-nodes-security-checklist/blob/master/README.md
by 慢霧安全團隊 & Joinsec Team
感謝 IMEOS.ONE, EOS Asia, EOS Store 傾力相助
目錄
- 架構核心目標
- 面臨的主要問題
- 架構核心設計
- 核心防禦
- 推薦總架構
- 1. 公開節點(對外公開在社區節點列表裡)
- 2. 私密節點(只對其他可信BP節點私密分享的通信節點)
- 3. VPN 加密節點(各可信節點間最後的秘密的通信信道)
- 4. RPC API 節點
- 架構各部分設計說明
- 安全加固方案
- 3.1 網絡架構
- 3.2 雲服務商
- 3.3 DDoS 防禦
- 2.1 生成 Active 多籤密鑰
- 2.2 開啟日誌記錄
- 2.3 Docker 默認參數優化
- 2.4 max-clients參數優化
- 2.5 非 root 啟動 nodeos
- 1.1 屏蔽 RPC
- 1.2 開啟 SSL
- 1.3 禁用 wallet_plugin 和 wallet_api_plugin
- 1.4 禁用producer_api_plugin
- 1. RPC 安全
- 2. 配置安全
- 3. 網絡安全
- 4. 主機安全
- 5. 威脅情報
- 致謝
架構核心目標
- 保護出塊服務器正常通信與運行
- 增強初始主網整體抗攻擊能力
- 保護節點安全
面臨的主要問題
- 對初始狀態主網進行 DDoS
- RPC 功能濫用
- 通信故障
架構核心設計
- BP 服務器隔離
- 多跳轉節點(小節點流量轉發,大節點高防護)
- 多鏈路高可用
核心防禦
- 默認關閉 RPC。必須打開時,混淆端口,並架設高防等保護
- BP 通信多鏈路設計
- BP 服務器不在公網上暴露,通過跳板服務器(跳板服務器數量要大)進行通信;
- 在外網公佈的跳板服務器大面積癱瘓時,通過私有網絡(1.私有秘密節點 2.私有 VPN 鏈路)來同步區塊
- 防止全網掃描定位高防後的服務器,修改同步端口 9876(同理 RPC 的 8888)至全網最大存活數量的端口 80、443 或 22,這樣可以有效抬高攻擊者定位成本。
推薦總架構
架構說明:
為了應對可能的 DDoS 攻擊,節點應準備多條鏈路,在攻擊到來後,可以隨時通過備用鏈路進行通信,確保主網順利啟動,並持續出塊。
首先,每個節點應至少準備 2 個公開 full node、2 個私密 full node,公開 full node 的 IP 可以對外公開,以供 Dapp 和主網正常通信。另 2 個私密 full node 的 IP 只告知被選中的其他超級節點,不對外公開,以避免同時遭遇 DDoS 攻擊。
假如私密 full node 的 IP 也被攻擊者獲知(例如掃描全網所有 IPv4 地址)並遭遇 DDoS 攻擊導致節點間無法正常通信,此時可通過 VPN 加密鏈路連接到虛擬內網,確保 21 個超級節點之間不間斷的正常通信。
架構各部分設計說明
1. 公開節點(對外公開在社區節點列表裡)
在沒有攻擊情況下,外圍節點通過對外公佈的公開節點進行通信。
2. 私密節點(只對其他可信BP節點私密分享的通信節點)
當攻擊者通過公開的節點列表攻擊公開節點造成公開節點不可用時,則可通過私密節點進行通信。(私密節點可被全網掃描發現,所以並不是完全安全)
3. VPN 加密節點(各可信節點間最後的秘密的通信信道)
當公網節點都被發現,並且攻擊者進行攻擊導致對公網 full node 服務器全部阻塞,最後則由私有 VPN 網絡在隔離的虛擬內網內進行通信,保證最基礎的出塊正常。
4. RPC API 節點
查詢用 RPC 所在 full node 與 BP 完全隔離並架設防禦,保證外網對 RPC 的攻擊不能影響到 BP。
安全加固方案
1. RPC 安全
1.1 屏蔽 RPC
如無必要,建議禁止 RPC 對外訪問,config.ini配置內容如下:
- 配置為空值http-server-address =
- 註釋https-server-address
1.2 開啟 SSL
如果確實需要對外提供 RPC 服務,建議禁用 HTTP 協議,使用 HTTPS,config.ini配置內容如下:
- 註釋http-server-address,或者配置為127.0.0.1:8888
- 配置https-server-address為0.0.0.0:443
- 配置https-certificate-chain-file 和 https-private-key-file 為證書鏈文件路徑和私鑰文件路徑,注意兩個文件格式必須為 PEM
- 配置證書鏈文件和私鑰文件權限為 600
1.3 禁用 wallet_plugin 和 wallet_api_plugin
在對外提供 RPC 服務的場景下,一定不要加載 wallet_plugin 和 wallet_api_plugin。如果加載了wallet_plugin 和 wallet_api_plugin,攻擊者就可以通過 RPC API /v1/wallet/list_keys 獲取已解鎖賬戶的私鑰。此外,攻擊者還可以惡意循環調用/v1/wallet/lock_all使節點上的賬戶無法解鎖。
1.4 禁用producer_api_plugin
在對外提供 RPC 服務的場景下,一定不要加載 producer_api_plugin。如果加載了producer_api_plugin,攻擊者就可以通過 RPC API /v1/producer/pause 遠程控制節點停止生產。
2. 配置安全
2.1 生成 Active 多籤密鑰
由於超級節點賬戶的公私鑰明文配置在config.ini中,存在較大的風險,建議對這個賬戶生成 Active 多籤,提高資產轉出門檻。舉例如下:
授予 shrimp2 和 shrimp3 擁有 shrimp1 的權限cleos set account permission shrimp1 active '{"threshold":2,"keys":[{"key":"EOS6tjMy84SYqQEUcUXQeMLmeBo99aakJCbieu2TSMk2Agn6nTwmX","weight":2}],"accounts":[{"permission":{"actor":"shrimp2","permission":"active"},"weight":1},{"permission":{"actor":"shrimp3","permission":"active"},"weight":1}],"waits":[]}' owner
2.2 開啟日誌記錄
在配置文件中配置logconf參數,記錄必要的 RPC 請求日誌。
2.3 Docker 默認參數優化
官方倉庫https://github.com/EOSIO/eos/blob/master/Docker/config.ini中的配置過於寬泛,加載了wallet_api_plugin等插件,存在較大風險(官方已優化),建議在docker build之前修改配置。
2.4 max-clients參數優化
在配置文件中配置max-clients = 0 提升 P2P 端口併發連接數為無限制,同時優化ulimit系統參數和內核參數,增強惡意連接攻擊承受能力。
官方在 這個提交中修復了P2P單節點惡意連接的問題,並新增了默認配置max_nodes_per_host = 1。所以max-clients不需要設置為0,可以根據節點性能酌情配置。
2.5 非 root 啟動 nodeos
建議編譯完成後,創建普通用戶賬號,並使用該賬號啟動 nodeos,避免使用 root,降低風險。
2.6 監聽隨機端口
- p2p-listen-endpoint = ip:
- http-server-address = ip:
每次啟動會隨機監聽一個端口,如果是對外服務的,建議採用 主機安全 中的配置方法
3. 網絡安全
3.1 網絡架構
為應對可能的 DDoS 攻擊導致節點主網絡阻塞的問題,建議提前配置備份網絡,例如私密 VPN 網絡。具體可參考 EOS Asia 的架構圖:https://www.eosasia.one/
3.2 雲服務商
經慢霧安全團隊測試,Google Cloud、AWS 及 UCloud 等具有更好的抗 DDoS 攻擊的性能,並且在 DDoS 攻擊過後服務商不會臨時封鎖服務器,可以極為快速的恢復網絡訪問,推薦超級節點使用。(請謹慎選擇雲服務商,許多雲服務商在遭遇 DDoS 等攻擊時會直接關閉服務器)
3.3 DDoS 防禦
為應對可能發生的 DDoS 攻擊,建議超級節點提前配置 Cloudflare、AWS Shield 等 DDoS 高防服務。
4. 主機安全
- 防止全網掃描定位高防後的服務器,修改同步端口 9876 (同理 RPC 的 8888)至全網最大存活數量的端口 80、443 或 22,這樣可以有效抬高攻擊者定位成本。
- 關閉不相關的其他服務端口,並在 AWS 或 Google Cloud 上定製嚴格的安全規則。
- 更改 SSH 默認的 22 端口,配置 SSH 只允許用 key (並對 key 加密)登錄,禁止密碼登錄,並限制訪問 SSH 端口的 IP 只能為我方運維 IP。
- 在預算充足的情況下,推薦部署優秀的 HIDS(或者強烈建議參考開源的 OSSEC 相關做法),及時應對服務器被入侵。
5. 威脅情報
- 強烈建議做好相關重要日誌的採集、儲存與分析工作,這些日誌包括:RPC 與 P2P 端口的完整通信日誌、主機的系統日誌、節點相關程序的運行日誌等。儲存與分析工作可以選擇自建類似 ELK(ElasticSearch, Logstash, Kibana) 這樣的開源方案,也可以購買優秀的商業平臺。
- 如果使用了成熟的雲服務商,他們的控制檯有不少威脅情報相關模塊可重點參考,以及時發現異常。
- 當節點出現重大漏洞或相關攻擊情報,第一時間啟動應急預案,包括災備策略與升級策略。
- 社區情報互通有無。
致謝
在此非常感謝
- HelloEOS
- EOS Asia
- EOSBIXIN
- EOS Pacific
- UnlimitedEOS
- EOS Cannon
- EOSpace
- Blockgenic
- EOSeco
- EOSLaoMao
- OneChain
等社區節點參與到節點安全測試中,為社區安全積累了寶貴的數據。
= END =
閱讀更多 IMEOS 的文章