--- title: 사이드 체인 해킹 - Axie Infinity tags: security description: --- <style> html, body, .ui-content { background-color: #333; color: #ddd; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> 사이드 체인 - Axie Infinity === 사이드 체인이란 [1][2] --- - 부모 네트워크 (메인 네트워크) 옆에서 병렬적이고 독립적으로 작동하는 하위 체인을 의미한다. 사이드 체인은 부모 네트워크와 관계없이 네트워크 자체 합의 알고리즘을 따르고, 노드도 독립된 노드로 구성하기 때문에 메인 네트워크의 보안 수준이 아예 다른 것이라고 볼 수 있다. - 사이드 체인의 등장 배경은 기존의 메인 네트워크의 처리량이 급증함에 따라서 TPS (Transaction Per Second) 는 낮아지고, 수수료는 높아지는 문제점을 해결하기 위한 확장성 있는 솔루션의 필요에 의해 생겼다. - 사이드 체인의 동작 원리는 메인 네트워크에 있는 자산 (asset) 을 사이드 체인으로 옮겨 트랜잭션을 처리하도록 한다. 처리된 트랜잭션 중 중요한 정보만 메인 네트워크에 저장함으로써 핵심 데이터에 대해서는 메인 네트워크의 보안을 유지하면서 속도는 높일 수있는 효과를 얻었다. - 하지만, 서로 다른 메인 체인과 사이드 체인을 연결 하기 위해서 브릿지의 개념이 등장한다. 브릿지의 기본적인 동작 원리는 메인 네트워크 상에 있는 자산을 동결 (freeze) 하고, 그에 대응하는 암호화폐 (대응물: counterpart)를 사이드 체인에서 발행한다. 그리고 새로 발행한 자산의 transaction 을 사이드체인에서 처리한다. 해킹 과정 [3] --- - 사이드 체인은 보통 메인 네트워크보다 적은 수의 노드와 PoS, DPoS, BFT 계열의 알고리즘을 사용하기 때문에, TPS가 높지만 그만큼 보안 취약점은 존재한다. - 로닌 네트워크는 Axie DAO 에서 운영하는 이더리움 기반의 사이드 체인으로, Axie Infinity의 자산 (Asset) 을 보관하는데 사용했다. - 어느 날, Axie Infinity의 한 사용자가 자신의 자산이 출금되지 않는다고 보고를 하자, Axie 측은 그제서야 상황을 파악했다고 한다. - 로닌 네트워크를 검증하는 검증 노드는 총 9개 였는데, 이 중 4개가 Sky Mavis 사의 소유였다. 즉, 하나의 회사가 다수의 키를 보관하고 있었고, 하나이 회사가 절반에 가까운 키를 보관하는 것도 문제였지만, 이 키들을 하나의 중앙 서버에서 갖고 있었다는 것이 더 큰 문제였다. - 해커들은 4개의 키를 얻기 위해서 이 회사의 중앙서버만 해킹하면 됐었고, 이렇게 되면 하나의 노드만 추가로 해킹하면 되었다. 그러면 나머지 하나의 키는 어떻게 얻었을까? - 2021년 11월 다른 Axie DAO validator 들은 Sky Mavis 에 그들의 signature 를 빌려주는 일이 있었다.d 이는 증가하는 트래픽에 따라서 User Load를 줄이기 위한 일시적인 조치였다. - 빌린 signature 로 Sky Mavis 는 사용자와 네트워크 로드를 해결했고, 한 달 후에는 이 signature 를 반납했다. 하지만, signature 를 갖고 있는 Sky Mavis 측은 signature 를 삭제하지 않고 그들의 시스템에 그대로 남겨두었다. 따라서 해커는 나머지 5개의 signature 를 해킹할 수 있었고, 해커는 손쉽게 얻을 수 있었다. - 이렇게 검증 노드들의 키를 쉽게 얻어 로닌 네트워크에 묶여있던 사용자의 자산을 아주 손쉽게 빼낼 수 있었다. 추후 조치 --- - 추후 이뤄진 조치로 Sky Mavis 측은 9개 중 8개의 노드가 signature 를 해야지 검증을 할 수 있도록 Threshold를 높였고, 이 후 5개의 노드도 추가했다고 한다. 결론 --- - 이번 해킹 사건은 사이드 체인 보안 관리의 허술함이 가장 큰 원인이었다. Sky Mavis 측이 로닌 네트워크를 관리할 때, 해킹을 방지할 수 있는 기회는 많았다. 절반 가까이 되는 키를 중앙 서버에 방치시키지 않았다면, 더 많은 수의 검증 노드를 배치시켰다면, 이전에 서명한 signature 를 정상적으로 삭제하고 반납을 했다면, 하나의 회사가 키를 독점하지 않도록 조치를 취했다면 해킹 피해는 없었을지도 모른다. 이번 사건은 기술적인 문제이나 해커의 치밀한 계획보다는 금고 열쇠를 방치해놓은 회사의 안일한 보안 의식때문에 벌어진 사건이라고 볼 수 있다. 참고자료 --- [1] http://wiki.hash.kr/index.php/%EC%82%AC%EC%9D%B4%EB%93%9C%EC%B2%B4%EC%9D%B8 [2] https://taxbit.com/blog/defi%E2%80%99s-largest-attack-what-happened-to-axie-infinity%E2%80%99s-ronin-network [3] https://roninblockchain.substack.com/p/community-alert-ronin-validators?s=w