EOS BP 보안에 대한 성명

in #eos6 years ago (edited)



이 글은 Sw/eden의 Eric Björk, EOS Tribe의 Eugene Luzgin, HKEOS의 Jae Chung, EOS Rio의 Igor Lins e Silva, eosDAC의 Michael Yeates 및 @jemxpat 와 공동으로 작성되었습니다.

EOSIO 소프트웨어는 획기적이며 혁명적입니다. EOSIO는 블록 체인 응용 프로그램의 새로운 시대를 열어주고 블록 체인의 유용성, 확장성 및 거버넌스에 새로운 패러다임을 창조 할 가능성이 있습니다. 이번 릴리즈에 참여한 사람들을 포함하여 수천 명의 사람들이 이러한 잠재력이 실현 될 수 있도록 엄청난 시간과 비용을 투자했습니다. 이러한 잠재성과 가능성은 2018년 6월 2일, 3일인 메인넷 런칭 때 가장 최고조에 다를 것입니다.

그러나 EOS mainnet은 독특한 공격 대상이기도 합니다. 1년이라는 긴 시간에 걸친 ICO와 엄청난 돈의 모금, 거대한 커뮤니티의 개입, 거대한 기대를 지닌 만큼 이 시스템을 망치기를 바라는 악의적인 비방자가 있다고 가정하는 것 또한 합리적입니다. 우리는 있음직한 공격의 특성과 그런 공격에 대비할 수 있는 방어와 절차를 고려하는 것이 현명하다고 생각합니다.

EOSIO 문서에 설명 된 bootstrab 방법과 eos-bios 프로그램에 구현 된 프로세스는 심각한 취약성을 초래하여 공격자가 프로듀서 노드 또는 블록 체인 전체를 손상 시키거나 파괴 할 수 있습니다. 블록 체인에 직접 작성 된 프로듀서 네트워크에 대한 과한 정보는 프로토콜 인젝션 또는 광범위한 Volumemetric DDoS 공격에 이르기까지 모든 유형의 공격을 허용할 것입니다.

모든 시스템을 완벽하게 보호 할 수는 없지만 합리적인 방어 체계를 구축하지 않는 것은 무책임한 일입니다. 이 글에서 전하고자 하는 메시지는, 가능한 공격에 대해 자세히 설명하고 불안전한 부트 체인에 대해 테스트 된 공격을 보여준 다음 좀 더 안전한 방식으로 bootstrapping하는 방법을 제안합니다.

우리는 이것으로 인한 불편함과 고충이 발생하는 것에 대해 정말 안타깝게 생각합니다. 우리는 2개월이 넘도록 공식 및 프라이빗 텔레그램 대화방에서 문제를 설명하고 해결책을 제안하려고 노력했습니다. 제안 된 자동 스크립트 BIOS 코드가 수정되도록 권장했습니다. 결국, 보안 모델의 변경은 수용되지 않았으며 적극적으로 반대하였습니다. 우리는 그러한 블록 체인을 공격하고 손상시키는 몇 가지 정확하고 시연 가능한 방법을 발표하고 이런 위험을 완화하는 방법을 보여줄 수 밖에 없다고 생각합니다. 우리가 아무것도 하지 않는다면 EOS시스템의 실패의 위협은 더 크게 다가 올 것입니다.

우리는 이들(eos-bios)을 광범위하게 조사하고 커뮤니티와 공유하기 전에 추측이 아닌지 확인이 필요하기 때문에 이러한 우려를 더 일찍 공개하지 않았습니다. 하기의 글은 증거에 의해 뒷받침 되는 사실들로 구성되어 있습니다.

eosio의 많은 기능은 플러그인에 의해 제공됩니다. 그것들은 시스템이 블록을 생성하고, 다른 노드에 연결하는 것 등을 허용합니다. 기본 eosio 소프트웨어는 많은 플러그인을 포함합니다. 블록 프로듀싱 노드는 라이브 네트워크에서 불필요한 플러그인을 실행해서는 안됩니다. 그 중 일부는 체인이 해킹을 당할 수 있게 허용하기 때문입니다. 이러한 플러그인 중 일부는 공개적으로 액세스 할 수 있는 노드에 노출 또는 공개 되어서는 안됩니다.

우리가 주목 한 특정 플러그인은 net_api 플러그인입니다. 이 플러그인은 플러그인을 원격으로 제어하는 데 사용할 수있는 API를 제공합니다. 이 API가 공용 네트워크에 된다면, 이 네트워크에 연결할 수 있는 사람은 블록 프로듀서에게 다른 시스템과의 연결을 끊거나 다른 시스템에 연결하도록 지시 할 수 있습니다. 이것은 봇넷(botnet)과 다를 바가 없습니다. eos-bios 네트워크의 일부가 아니더라도 심지어 Mac mini도 네트워크의 모든 피어의 연결을 해제 할 수 있습니다.

라이브 네트워크에서 이 취약성을 허용하면 공격자가 체인을 올바르게 작동하지 않도록 중지하고 노드를 분할(FORK)하여 결국 체인을 중지할 수 도 있습니다. Ghostbusters 팀은 eos-bios 설계 초기에 취약점을 발견하고 이를 EOS Canada에보고했지만 변경 사항은 없었습니다. 다음이 바로 우리가 eos-bios를 통한 런칭을 지지할 수 없는 한 가지 이유입니다.

Run command:
(각 노드에 대해 다음과 같은 응답 목록을 반환합니다)
Returns you a list of responses like following for each node: Next get a list of peers only: And disconnect each peer: One could eventually force the connection to any other peer using, also increasing risks of network instability:


우리가 패닉에 빠져 보유한 모든 토큰을 버려야 할까요? 기필코 아닙니다. 우리는 네트워크를 시작하는 것과 관련된 잠재적 인 보안 위험을 조사하고 테스트 한만큼 위의 문제에 대한 솔루션을 실험하고 논의했습니다.

EOS 소프트웨어가 안전하게 검증되지 않았고 BP 노드가 민감한 생산자 프라이빗 키를 저장한다는 사실을 감안할 때 우리는 프로듀싱 노드를 보호하기 위한 추가적인 조치를 취할 필요가 있습니다. BP 노드간에 메쉬를 허용하면서 BP 노드에는 공용 인터넷 액세스를 허용하지 말아야 합니다. 따라서 우리는 오픈 소스 WireGuard 커널 기반 VPN 소프트웨어를 사용하여 지점 간 보안 터널을 통해 BP 노드간에 안전한 P2P 통신을 사용하도록 제안합니다.

각 BP 노드에는 보안 연결을 설정하는 하나 이상의 노드가 있습니다. 이러한 전체 노드는 개방형 인터넷 프로토콜에 공개되며 전체 블록 체인 네트워크에 액세스 할 수 있습니다. BP 노드는 VPN이 아닌 IP 주소를 공개 인터넷 액세스에 노출 시켜서는 안됩니다. 또한 내결함성을 위해 BP 노드는 다른 노드에 대해 여러 개의 신뢰 가능한 연결을 설정 해야 합니다.



우리는 안정적이고 탄력 있는 EOS 메인넷의 런칭과 지원에 최선을 다 하고 있습니다. 위의 사실과 보안되지 않은 eos-bios 부트 프로세스를 감안할 때, 우리 BP 커뮤니티는 전체 체인을 노출 시켜 누구에게나 공격 받을 수 있는 프로세스를 이러한 표준 런칭 프로세스로 채택하는 것을 강력히 반대 합니다.

우리는 하나의 커뮤니티로서 EOS 메인넷의 보안과 복원성이 보장 받는 것을 우리의 의무라고 생각 합니다. Eos-bios 프로세스는 EOS 블록체인 런칭과 나아가서는 EOS 토큰 홀더 전원에게 불필요한 리스크를 조성 할 것입니다. EOS 블록체인의 런칭의 실패 또는 보안 문제로 인한 부정적 보도는 EOS의 가격과 명성에 부정적 영향을 미칠 것입니다.

따라서 우리는 악의적인 제3자에게 보안취약점을 이용당하기 전에 위에 서술 된 방법을 사용하여 보안이 안 돼 있거나 불안정안 네트워크를 지적하는 것이 전체 이해관계자의 이익에 부합 된다고 믿고 있습니다. 동시에 우리는 런칭과 운영 프로세스에서 보안 개선 사항들을 도입 할 수 있도록 노력하겠습니다.

그 리스크를 감안하여 보안의 중요성은 간과되어서는 안되며 가장 중요한 고려사항이 되어야 합니다.

동기 & 우려사항

eos-bios 부트 프로세스에서 발견 된 현재의 불안정성

net plugin을 실행하는 하나의 피어 노드를 알고있는 체인을 해킹하는 법

cleos -u http://peer-host-name:port net peers 
{

   "peer": "",

   "connecting": false,

   "syncing": false,

   "last_handshake": {

     "network_version": 1206,

     "chain_id": "0000000000000000000000000000000000000000000000000000000000000000",

     "node_id": "b92b2b7d8835e46e2fed97f5eebda31faea63fd07cc40ad52f132254f22cac8e",

     "key": "EOS1111111111111111111111111111111114T1Anm",

     "time": "1527171594944050635",

     "token": "0000000000000000000000000000000000000000000000000000000000000000",

     "sig": "SIG_K1_111111111111111111111111111111111111111111111111111111111111111116uk5ne",

     "p2p_address": "reach.me.example.com:9876 - b92b2b7",

     "last_irreversible_block_num": 57,

     "last_irreversible_block_id": "000000391a9439aaa2864d9807965bc84865cdd15c4a0a3d0ae3c7e54a85a38f",

     "head_num": 300,

     "head_id": "0000012c9826a4f37db5e5c8b4790acad70c01188aee8e7b7330790937a93cdd",

     "os": "linux",

     "agent": "\"EOS Example\"",

     "generation": 2

   }

cleos -u http://peer-host-name-or-IP:port net peers | grep peers
cleos -u http://peer-host-name-or-IP:port net disconnect host:port
cleos -u http://peer-host-name-or-IP:port net connect host:port

권장 솔루션

Wireguard 프라이빗 메시 보안

  • 2개 프로듀서: 하나는 프로듀서 노드 & 하나는 예비 노드
  • 프로듀서 제어 스위치: 장애 조치 스위칭을 모니터링하고 활성화하는 설비
  • -Layer1 노드들은 VPN(WireGuard)를 통하여 기타 신뢰가능한 프로듀서 또는 풀노드와 연결 됨
  • 프로듀서 API 외에는 아무것도 설치 되지 않음으로써 접속은 프로듀서 제어 스위치로 한정 됨
  • 풀노드의 블록 재생
  • 직접적 터널(WIreGuard)로 Layer1 노드와 연결
  • 신뢰 가능한 BP와 P2P VPN(WireGuard)으로 보안된 메싱
  • History API와 Chain API만 사용. Layer3의 프록시 서버로만 한정
  • BBP들은 퍼블릭 풀노드로 거래소, 포탈, 신규 BP 등 외부 접속을 하도록 권장 함
  • HTTP 엔드포인트를 지원하는 웹 서버
  • Layer3 노드는 순수한 웹 방화벽이며 블록체인 정보는 보유하지 않음
  • Layer2 노드와 HTTP(WireGuard)로 연결 함
  • Patronoes를 사용하여 기본적인 DDoS 및 어플리케이션 레이어 공격을 방어
  • 글로벌 BP 로드밸런서(모든 트래픽은 이 단일 포인트로 향함)
  • 볼륨메틱 공격들은 ISP 레벨에서 핸들링
  • 모든 HTTPS(SSL) 트래픽을 Layer3 웹 서버로 라우팅
  • DNS로 컨피그(선택)
  • L4는 짧은 TTL로 DNS 라운드 로빈 같이 심플하게 구성

결론

  • Sw/eden
  • EOS Tribe
  • HKEOS
  • EOS Rio
  • Block Matrix
  • eosDAC
  • Eosmeso
  • AcroEOS

 

CONTACT

email [email protected]
Steemit https://steemit.com/@acroeos
Medium https://medium.com/acroeos
Twitter https://twitter.com/acroeos
Telegram https://t.me/AcroEOS
Wechat AcroEOS 

Coin Marketplace

STEEM 0.20
TRX 0.15
JST 0.030
BTC 65546.28
ETH 2666.01
USDT 1.00
SBD 2.90