2023년 11월, BlockSec의 CEO인 저우 야진(Zhou Yajin) 교수는 DRK Lab이 주최한 제1회 Web3 학자 서밋에 초청받아 참석했습니다. 컨퍼런스에서 저우 교수는 EVM(이더리움 가상 머신)의 취약점 탐지 분야에서 BlockSec의 연구 성과와 업적을 공유했습니다. 또한 EVM 호환 체인의 보안을 보장하기 위해 특별히 설계된 BlockSec의 자동화된 차등 퍼징(differential fuzzing) 도구를 소개했습니다. 이 글은 해당 발표 내용을 요약한 것입니다.
소개
Defillama의 데이터 통계에 따르면, 현재 238개의 L1 및 L2 퍼블릭 체인이 존재하며, 그 중 144개가 EVM 호환 체인입니다. 그러나 한 가지 의문이 생깁니다: 이러한 EVM 호환 체인들은 구현 과정에서 보안 문제가 없을까요? 저희의 연구 결과, 답은 '그렇지 않다'는 것입니다. 이러한 우려에 대응하기 위해 BlockSec은 자동화된 차등 퍼징 보안 도구를 출시했습니다. EVM 호환 체인의 이면에 숨겨진 진실을 탐구하는 여정에 함께해 주세요.
가상 머신의 취약점

이더리움 가상 머신(EVM)을 예로 들면, 가상 ROM, 프로그램 카운터, 스택, 메모리, 월드 스테이트(영구적)를 포함하는 스택 기반 아키텍처를 채택하고 있습니다.
가상 머신은 스마트 컨트랙트의 컴파일된 바이너리 코드를 해석하고 실행하는 엔진 역할을 합니다. 많은 블록체인 플랫폼의 핵심 구성 요소는 가상 머신이며, 이더리움 가상 머신(EVM)이 특히 주목할 만합니다. 따라서 가상 머신은 스마트 컨트랙트 실행, 트랜잭션 처리, 그리고 블록체인의 무결성 보장에 있어 핵심적인 역할을 담당합니다.
우리는 EVM 자체도 프로그래머가 작성한 소프트웨어 프로그램이라는 것을 알고 있습니다. 그렇다면 EVM에 문제가 없다고 어떻게 보장할 수 있을까요? 결국, 인간이 작성한 코드에는 버그가 발생할 수 있습니다.
그리고 EVM에 버그가 발생하면, 블록체인 생태계에 치명적인 결과를 초래할 것입니다. 실제로 EVM은 과거에 많은 심각한 취약점을 겪어왔습니다.
예를 들어, 2020년에는 사전 컴파일된 컨트랙트로 인한 취약점 사고(CVE-2020-26241)가 발생했습니다 [1]. Geth의 dataCopy 사전 컴파일 컨트랙트(0x00...04에 위치)는 호출 시 얕은 복사(shallow copy)를 수행하여, 대량의 데이터를 복사할 때 완전한 데이터 대신 포인터만 복사했습니다. 이로 인해 악의적인 스마트 컨트랙트가 수정되어서는 안 되는 데이터를 수정할 수 있었고, 서로 다른 버전의 가상 머신이 동일한 스마트 컨트랙트를 실행할 때 데이터 불일치가 발생했습니다. 또 다른 사례는 2021년에 발생했는데, 일부 EVM 호환 체인이 이더리움과 함께 업그레이드되지 않았습니다. 이전 버전의 Geth에는 사전 컴파일 컨트랙트 호출에서 입력 및 출력 데이터의 메모리 영역이 겹치는 취약점(CVE-2021-39137)이 존재했습니다 [2]. 공격자들은 이 취약점을 악용하여 체인 포크를 발생시켰습니다.
BlockSec의 대응책
EVM의 취약점을 어떻게 신속하게 발견할 수 있을까요? 어떤 어려움이 있을까요?
-
첫째, 가상 머신의 복잡한 설계로 인해 그 운영 로직을 완전히 이해할 수 있는 도구를 찾기가 어렵습니다. 각 전문 분야는 전문화가 필요하며, 많은 개발자들이 그 운영 로직을 이해하고 효과적인 예방 조치를 취하기 위해 충분한 노력을 기울이지 못할 수 있습니다.
-
또한, 많은 L1/L2 신규 퍼블릭 체인들이 EVM 가상 머신을 커스터마이징하고 있으며, 이는 잠재적으로 새로운 보안 문제를 야기할 수 있습니다.
분명히, EVM 가상 머신의 이러한 문제들을 식별하기 위해 수동 감사에만 의존하는 것은 어렵습니다.
상황에 맞게 적응하고 대응하세요! 이러한 과제들을 고려하여, BlockSec은 이러한 문제들을 정면으로 해결하기 위한 자동화 시스템을 개발했습니다!
차등 퍼징(Differential Fuzzing)
BlockSec에서 저희 전문가 팀은 차등 퍼징이라고 알려진 영리한 접근 방식을 활용했습니다. 서로 다른 버전의 가상 머신에서 동일한 테스트 케이스를 실행하고 출력 결과를 비교함으로써, 잠재적인 취약점과 불일치를 발견할 수 있습니다. 이 방법을 통해 기존 테스트 방법으로는 간과할 수 있는 미묘한 차이를 효과적으로 식별하여 시스템 전반의 보안을 강화할 수 있습니다.

기본 작동 원리:
차등 퍼징을 수행하기 위해서는 테스트 케이스로 동일한 입력을 준비해야 합니다. 이러한 테스트 케이스는 차등 퍼징 엔진에 입력됩니다. 서로 다른 버전의 가상 머신에서 동일한 테스트 케이스를 실행한 출력 결과를 비교함으로써 잠재적인 문제를 식별할 수 있습니다.
구체적인 구현 단계:
차등 퍼징을 위한 테스트 케이스는 트랜잭션 메타데이터와 사전 상태(pre-state)의 두 부분으로 구성되어야 합니다. 그렇다면 이러한 트랜잭션을 어떻게 생성할까요? 이 문제를 해결하기 위한 두 가지 접근 방식이 있습니다.
- 과거 트랜잭션 재사용: 블록체인에서 발생한 과거 트랜잭션을 가져와 차등 퍼징 엔진에서 서로 다른 버전의 가상 머신으로 실행할 수 있습니다. 그러나 이 방법에만 의존하는 것은 한계가 있습니다. 과거 트랜잭션은 너무 '일반적'인 경향이 있는 반면, 보안 테스트는 코너 케이스, 즉 예외적인 시나리오를 발견해야 합니다. 그래서 두 번째 접근 방식을 고안했습니다.
- 커버리지 기반 퍼징: 일반적이지 않은 바이트코드와 과거에 없던 트랜잭션을 처음부터 생성한 다음, 트랜잭션과 스마트 컨트랙트 코드를 변이(mutate)시켜 가상 머신에 입력합니다. 다양한 차원에서 테스트 케이스의 유효성과 포괄성을 보장합니다.
이러한 트랜잭션이 생성되면 차등 퍼징 엔진에 입력되고, 결과를 비교합니다.
결과 비교는 단순한 수치 비교가 아니라 가상 머신의 영구 및 비영구 스토리지 모두에서 데이터 일관성을 종합적으로 고려합니다. 이 글에서는 더 이상 자세히 설명하지 않겠습니다.
사례 연구

차등 퍼징을 통해 Aurora VM에서 발견한 가상 머신 취약점 사례를 공유하고자 합니다. 구체적으로, ModExp 사전 컴파일 스마트 컨트랙트의 문제와 관련이 있습니다.
숫자 x를 y제곱한 모듈러 지수를 계산할 때, 이 연산에는 컴퓨팅 자원이 필요하다는 것을 알고 있습니다. 올바른 구현에서 가스 계산은 모듈러 지수 연산이 여러 번의 반복을 수반하므로 반복 횟수를 고려합니다. 그러나 가스 계산에서 문제가 발생할 수 있는 특정 시나리오가 있습니다: 지수 y가 0인 경우, 즉 0제곱 연산을 나타낼 때입니다. 이 경우 반복 횟수가 0이 되어 가스 값이 극도로 작아집니다. 하지만 실제로는 계산에 여전히 자원이 필요합니다.
결론
현재 BlockSec이 출시한 차등 퍼징 도구는 rbpf, ubpf, Aurora-engine, neon-evm, Moonbeam, revm, EvmOS, fevm, Polygon-zkevm 등 다양한 블록체인 가상 머신 환경에서의 실행을 지원하며, 지속적으로 확장되고 있습니다.
이 도구를 통해 14개의 새로운 취약점을 발견하고, 2개의 CVE(CVE-2021–46102와 CVE-2022–23066)를 신청했으며, 130만 달러 이상의 버그 바운티를 수령했습니다.
현재 BlockSec이 제공하는 종합적인 EVM 체인 보안 솔루션(감사 서비스 + 차등 퍼징 도구)은 EOS와 FileCoin으로부터 인정받아 채택되었으며, 이들 생태계의 보안과 건전한 발전에 기여할 것입니다.
참고 문헌
[1] 0x4 사전 컴파일의 얕은 복사로 인한 EVM 메모리 손상 가능성
[2] datacopy를 통한 RETURNDATA 손상
BlockSec 소개
BlockSec 은 2021년 세계적으로 著名한 보안 전문가 그룹이 설립한 선구적인 블록체인 보안 회사입니다. 이 회사는 대중적 도입을 촉진하기 위해 신흥 Web3 세계의 보안성과 사용성을 향상시키는 데 전념하고 있습니다. 이를 위해 BlockSec은 스마트 컨트랙트 및 EVM 체인 보안 감사 서비스, 위협을 사전에 차단하는 보안 개발 플랫폼 Phalcon, 자금 추적 및 조사를 위한 MetaSleuth 플랫폼, 그리고 크립토 세계를 효율적으로 탐색하는 Web3 빌더를 위한 MetaDock 확장 프로그램을 제공합니다.
현재까지 MetaMask, Uniswap Foundation, Compound, Forta, PancakeSwap 등 300개 이상의 저명한 고객사에 서비스를 제공했으며, Matrix Partners, Vitalbridge Capital, Fenbushi Capital 등 著名한 투자자들로부터 두 차례의 투자 라운드를 통해 수천만 달러를 유치했습니다.
✉️비즈니스 문의:[email protected]
BlockSec 트위터 계정: https://twitter.com/BlockSecTeam
Phalcon 트위터 계정: https://twitter.com/Phalcon_xyz



