--- title: 크로스 체인 브릿지 해킹 - Solana 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> ### 크로스 체인 브릿지 해킹 - Solana 브릿지란? [1][2] --- - 브릿지란 서로 다른 네트워크 간 토큰 전송을 용이하게 하기 위한 솔루션이다. 예를 들어, 이더리움 네트워크 상에서 비트코인은 사용하는 것은 기술적으로 불가능하다. 하지만, 비트코인 네트워크에 BTC 를 lock 해놓고, 이더리움 상에 wrapped 비트코인 (대용물) 을 발행하는 것은 가능하다. 그렇게 되면 이더리움 상에서 비트코인을 사용하는 것과 같은 효과를 얻을 수 있기 때문에 브릿지는 블록체인의 확장성을 증가시키고, 유동성을 높이는데 유용하게 쓰일 수 있다. - 참고로, 가장 큰 브릿지를 알아보는 방법은 TVL (Total Value Locked) 을 통해서 볼 수 있는데, Dune Analytics 에 따르면 아발란체 브릿지가 이더리움 브릿지 중에서는 가장 크고, 그 다음은 폴리곤과 팬텀이라고 한다. 브릿지의 사용과 보안 --- - 브릿지의 사용할 때는 훨씬 더 높은 수준의 보안 위험성이 존재한다. 보안의 취약점은 주로 브릿지의 검증자에서 나온다. 브릿지 또한 여러 노드가 구성되어 한쪽 블록체인의 암호화폐를 lock 하고 다른 쪽 블록체인의 암호화폐를 mint 하는 과정을 검증하는데, 각각의 블록체인이 갖고 있는 검증 노드 수보다는 적을 수 있기 때문에 보안의 취약성은 존재한다. - 특히, 비탈릭 부테린이 제기한 Layer1 네트워크 간 브릿지의 위험성을 강조한 바가 있다. Layer1 과 Layer2 네트워크 간 브릿지의 보안 위험성은 그보다는 덜한 편이라고 한다. - https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/?s=09 - https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/ 솔라나-이더리움 브릿지, 웜홀 해킹 사건 [3][4] --- - 이 사건은 대표적인 Layer1 네트워크 간 브릿지의 보안 위험성을 보여주는 사건이다. 일반적으로 솔라나에서 이더리움을 사용하기 위해서는 실제 이더리움을 lock 하고 wrapped 이더리움을 솔라나 네트워크에 발행을 해야한다. 하지만, 이 사건에서는 실제로 80k 의 이더리움이 lock 되지 않았지만 그에 상응하는 Wrapped 이더리움이 솔라나 네트워크에서 발행되었다. 웜홀 검증자들이 정상적으로 검증한 것이라서 더 충격이었다. - 어떻게 하면 이런 비정상적인 행위에 검증자들이 동의를 했을까? 브릿지의 검증자 (guardians) 들이 동작하는 방식은 다음과 같다. - 1. 검증자들이 각자 signature 를 생성한다. - 2. 이들의 Signature 를 모아서 Signature set 을 만든다 - 3. 이 때, 검증자들의 유효성을 점검하는데, 유효한 검증자의 signature 만 받는다 4) 승인이 되면 wrapped 이더리움을 정상적으로 발행한다. - 문제는 소스코드의 버그에 있었는데 3) 검증자들의 유효성 검증을 위해서 사용한 함수 (verify_signatures) 가 실제로는 검증하지 않았던 것이다. Verify_signatures 함수는 input data 에서 온 instruction 을 뱉어내는 load_instruction_at 함수를 사용했는데, 이 함수는 input 이 sysvar program account 인지 확인하지 않았다. - 따라서, 해커는 fake instruction sysvar account 를 fake data 를 갖고 수행했고, (signature 들이 이전 valid trasnfered token 에서 spoof 되었다) 그 결과 signuature_set 전부가 true 로 표시되었고, 모든 signature 가 valid 하다고 잘못 판단한 것이다. - 위의 버그때문에 post_vaa 함수를 정상적으로 수행할 수 있었고, (위의 verify_signature 를 정상적으로 통과했으므로) 결국 wrapped ETH 를 정상적으로 발행할 수 있었다. 참고자료 --- [1] https://www.coindesk.com/learn/what-are-blockchain-bridges-and-how-do-they-work/ [2] https://ethereum.org/en/bridges/ [3] https://research.kudelskisecurity.com/2022/02/03/quick-analysis-of-the-wormhole-attack/ [4] https://twitter.com/kelvinfichter/status/1489041221947375616