「慢霧出品」EOS超級節點安全執行指南

「慢霧出品」EOS超級節點安全執行指南

原文鏈接:

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. 威脅情報
  • 致謝

架構核心目標

  1. 保護出塊服務器正常通信與運行
  2. 增強初始主網整體抗攻擊能力
  3. 保護節點安全

面臨的主要問題

  1. 對初始狀態主網進行 DDoS
  2. RPC 功能濫用
  3. 通信故障

架構核心設計

  1. BP 服務器隔離
  2. 多跳轉節點(小節點流量轉發,大節點高防護)
  3. 多鏈路高可用

核心防禦

  1. 默認關閉 RPC。必須打開時,混淆端口,並架設高防等保護
  2. BP 通信多鏈路設計
  • BP 服務器不在公網上暴露,通過跳板服務器(跳板服務器數量要大)進行通信;
  • 在外網公佈的跳板服務器大面積癱瘓時,通過私有網絡(1.私有秘密節點 2.私有 VPN 鏈路)來同步區塊
  1. 防止全網掃描定位高防後的服務器,修改同步端口 9876(同理 RPC 的 8888)至全網最大存活數量的端口 80、443 或 22,這樣可以有效抬高攻擊者定位成本。

推薦總架構

「慢霧出品」EOS超級節點安全執行指南

架構說明:

為了應對可能的 DDoS 攻擊,節點應準備多條鏈路,在攻擊到來後,可以隨時通過備用鏈路進行通信,確保主網順利啟動,並持續出塊。

首先,每個節點應至少準備 2 個公開 full node、2 個私密 full node,公開 full node 的 IP 可以對外公開,以供 Dapp 和主網正常通信。另 2 個私密 full node 的 IP 只告知被選中的其他超級節點,不對外公開,以避免同時遭遇 DDoS 攻擊。

假如私密 full node 的 IP 也被攻擊者獲知(例如掃描全網所有 IPv4 地址)並遭遇 DDoS 攻擊導致節點間無法正常通信,此時可通過 VPN 加密鏈路連接到虛擬內網,確保 21 個超級節點之間不間斷的正常通信。

架構各部分設計說明

1. 公開節點(對外公開在社區節點列表裡)

「慢霧出品」EOS超級節點安全執行指南

在沒有攻擊情況下,外圍節點通過對外公佈的公開節點進行通信。

2. 私密節點(只對其他可信BP節點私密分享的通信節點)

「慢霧出品」EOS超級節點安全執行指南

當攻擊者通過公開的節點列表攻擊公開節點造成公開節點不可用時,則可通過私密節點進行通信。(私密節點可被全網掃描發現,所以並不是完全安全)

3. VPN 加密節點(各可信節點間最後的秘密的通信信道)

「慢霧出品」EOS超級節點安全執行指南

當公網節點都被發現,並且攻擊者進行攻擊導致對公網 full node 服務器全部阻塞,最後則由私有 VPN 網絡在隔離的虛擬內網內進行通信,保證最基礎的出塊正常。

4. RPC API 節點

「慢霧出品」EOS超級節點安全執行指南

查詢用 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/

「慢霧出品」EOS超級節點安全執行指南

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 =


分享到:


相關文章: