Polygon zkEVM의 치명적인 취약점 발견 및 수정하기

이 기사는 기계로 번역되었습니다
원문 표시

폴리곤 zkEVM은 오프체인 트랜잭션 처리와 영지식 증명 사용을 통해 이더리움의 확장성을 향상시키기 위해 설계된 레이어 2 솔루션입니다. zkProver 구성 요소 내에 있는 이 취약점은 네트워크가 증명 위조 공격에 취약해져 블록체인의 레이어 1과 레이어 2 모두에서 자금의 무결성과 보안에 상당한 위협이 될 수 있는 중대한 보안 허점을 발생시켰습니다.

취약점을 확인한 후, 베리체인과 폴리곤 팀은 협력하여 수정 사항을 개발했고, 2023년 12월에 검토를 거쳐 메인넷에 구현했습니다.

발견

이 취약점은 영지식 가상 머신(zkVM)에 대한 보안 연구 중에 베리체인이 발견했습니다. 공격자가 위조 증명을 생성하고 네트워크 내에서 상태 변경을 조작할 수 있는 이 버그를 성공적으로 재현한 후, 이 발견은 Immunefi 버그 바운티 플랫폼을 통해 신속하게 보고되었습니다. 문제의 심각성을 인지한 Immunefi는 Polygon zkEVM 팀에 문제를 에스컬레이션했습니다. 두 팀은 버그의 특성에 대해 논의했고, 그 결과 버그의 심각성이 인정되었습니다. 이 익스플로잇은 zkEVM 팀이 운영하는 중앙 집중식 모듈인 신뢰할 수 있는 애그리게이터의 악의에 의존했기 때문에 악용될 확률이 낮았습니다.

배경

영지식 롤업으로 알려진 레이어 2 솔루션인 폴리곤 zkEVM은 트랜잭션을 오프체인에서 처리하고 영지식 증명으로 상태 전환을 검증하여 이더리움의 확장성을 향상하도록 설계되었습니다. 영지식 증명을 이더리움 가상 머신(EVM)을 모방하도록 설계된 가상 머신과 통합하여 기존 이더리움 툴링 및 스마트 콘트랙트와의 호환성을 보장합니다.

취약점

Polygon zkEVM의 핵심 기능은 영지식 증명을 통해 트랜잭션의 유효성을 검사하는 zkProver 모듈에 고정되어 있습니다. zkProver는 정교한 수학적 계산을 수행하여 정확성 증명을 생성하여 트랜잭션을 검증한 다음 기본 레이어 1의 스마트 컨트랙트에 의해 검증합니다. 이러한 증명은 트랜잭션 유효성을 보장하는 동시에 더 효율적이고 비용이 적게 드는 실행 환경을 제공하는 데 매우 중요합니다. 검증된 증명은 네트워크의 상태 변경으로 이어지므로, 신뢰할 수 있는 어그리게이터가 증명을 위조할 수 있다면 악의적으로 네트워크 상태를 변경할 수 있으며, 이는 잠재적으로 자금 손실이나 네트워크 전반의 자산 동결로 이어질 수 있습니다.

이 취약점은 공격자가 네트워크의 상태를 조작할 수 있도록 하는 zkProver의 복잡한 재귀적 증명 생성 과정의 취약성에서 비롯됩니다. 저희는 모든 조건에서 작동하는 중요한 증명 위조 공격을 통해 이를 입증했습니다. 시스템의 영지식 특성으로 인해 위조된 증명을 생성하는 방법론은 숨겨져 있습니다.

zkEVM의 증명자는 기본 백엔드 프로토콜로 eSTARK (STARK의 확장 버전)를 사용합니다. 레이어 1에서 증명 검증의 가스 비용을 줄이기 위해 zkEVM은 재귀적 증명 기술을 사용합니다. 마지막 재귀 단계에서는 일정한 증명 크기와 검증 시간을 달성하기 위해 STARK를 SNARK로 변환합니다. 그러나 STARK와 SNARK가 작동하는 필드 사이에는 호환되지 않는 부분이 있습니다. STARK는 효율적인 산술 연산을 위해 p =264 -232 + 1인 Fp^3의 요소로 작업합니다. 반면, SNARK는 Fq 요소와 함께 작동하며, 여기서 q는 페어링 친화적인 타원 곡선 그룹으로 묶여 있고, 우리의 경우 254비트 길이입니다. 이러한 비호환성으로 인해 잠재적인 보안 문제가 발생합니다.

첫 번째 약점은 머클 뿌리(다항식에 대한 FRI 기반 약속)의 계산과 관련이 있습니다. 트리의 잎은 여러 Fq 요소의 해시입니다. Fp^3 (약 192비트 엔트로피) ∈ (x, y, z) 원소는 Fq (약 254비트 엔트로피) 원소로 고유하게 표현할 수 있으므로 해싱하기 전에 맵을 통해 Fp^3의 각 요소를 Fq의 요소로 변환하는 것이 합리적입니다: (x, y, z) ∈ x +264y+2128z로변환하여 일부 회로 제약을 절약할 수 있습니다. 그러나 이 프로세스는 x, y, z와 관련된 값이 각각 64비트로 제한되지 않으므로 잠재적으로 Fq의 모든 원소가 될 수 있습니다.

두 번째 약점은 세 개의 Fp^3 원소 a, b, c에 대해 곱하기-더하기 연산을 수행하여 Fp^3의 원소 (a*b + c) 를 반환하는 산술 게이트에서 발생합니다. 모듈로 환원을 수행하기 전에 a ∗ b의 길이가 약 128비트임을 감안하면 결과적으로 세 번째 피연산자인 c에 필요 이상으로 많은 공간이 할당됩니다.

zkEVM 증명자의 백엔드에 있는 이러한 수학적 취약점은 시스템을 손상시키기에 충분합니다.

영향 및 시사점

이 취약점은 신뢰할 수 있는 집계자가 특정 계산에 대해 유효한 증명을 만들 수 있도록 하는 등 상당한 잠재적 영향을 미쳤습니다. 이 위반은 네트워크 내에서 무단 수정으로 이어져 궁극적으로 레이어 2 네트워크의 자금 손실로 이어질 수 있으며, 잠재적으로 레이어 1 예치금에도 영향을 미칠 수 있습니다.

저희 팀의 개념 증명(PoC)은 이더리움 메인넷의 포크 ID 4 반복과 테스트넷의 포크 ID 5 반복에 대한 위조 증명 생성의 가능성을 입증했습니다. 참고로 Polygon zkEVM의 최신 메인넷 반복은 포크 ID 8입니다.

관련 절차는 다음과 같습니다:

  • 유효하지 않은 증명 생성: 이더리움 메인넷의 블록 높이 18066976 및 18026062 에서 포크 ID 4 zkEVM을 검증하기 위해 위조 증명 두 개를 생성했고, Goerli 테스트넷의 블록 높이 9679280에서 포크 ID 5 zkEVM을 검증하기 위해 위조 증명 하나를 생성했습니다.

  • 실행 프로세스: 저희는 특정 스크립트를 활용하여 정확한 입력을 통해 이를 컴파일하고 실행하여 가짜 증명을 생성하고 검증했습니다. 이 프로세스는 zkEVM의 중요한 상태 매개변수(StateRoot 및 LocalExitRoot)를 미리 정해진 값으로 변경하여 네트워크의 상태를 수정했습니다.

  • 관찰: 실행 전에 네트워크의 상태 루트를 확인하고 기록했으며, 이는 합법적인 것이었습니다. 실행 후에는 상태 루트가 변경되어 조작에 성공했음을 나타냅니다.

이 증명을 통해 zkEVM의 StateRoot와 LocalExitRoot가 0x0(또는 미리 정해진 값)으로 무효화되어 잔액과 예치금을 포함한 네트워크의 상태가 사실상 지워졌습니다.

해결 방법

베리체인의 공개 이후, 폴리곤 zkEVM 팀은 취약점의 역학 관계와 영향을 완전히 파악하기 위해 철저한 검토를 진행했습니다. 다음은 베리체인 팀이 검증한 필스타크에 대한 조정 사항을 요약한 것입니다:

  • GL 값 제약: 리커시브F 검증기 회로에 대한 모든 입력이 2^64 미만인지 확인하기 위한 제약 조건을 추가했습니다. 이는 StarkVerifier Bn128 템플릿에 통합되었습니다.

  • GL 연산: BN128 필드 내 덧셈과 뺄셈을 위한 새로운 템플릿인 GLSub(및 GLCSub), GLAdd(및GLCAdd)를 도입했습니다. 또한 곱셈과 덧셈 연산을 분리하여 쿼리 또는 평가 검증에 GLCMulAdd를 사용하지 않도록 했습니다.

  • GL 연산 태그: BN128 필드에서 GL 연산 중 보다 정밀한 제약 조건 적용을 위해 재귀F 검증기 회로에 새로운 태그가 추가되었습니다. 최대값} 태그는 p - 1로 설정된 가능한 최대 신호 값을 나타내며, p = 0xFFFFFF00000001입니다.

  • 테스트 중입니다: 테스트에서 태그를 수용하기 위해 조정이 이루어졌습니다. 태그가 올바르게 적용되었는지 확인하기 위해 VerifyEvaluations 및 VerifyQuery에서 에지 케이스를 조사하는 두 가지 새로운 테스트가 고안되었습니다. 한 테스트는 최대 입력 값(p - 1)으로 템플릿을 테스트하고, 다른 테스트는 뺄셈을 수행하지 않고 태그 값을 유지하도록 템플릿을 수정합니다.

수정 사항으로 연결되는 링크입니다:

보고된 취약점에 대해 신속하고 효과적으로 대응해 주신 Polygon zkEVM 팀에 감사드립니다. 또한 버그 바운티에 대해서도 진심으로 감사드립니다. 이 참여는 사이버 보안 커뮤니티에 대한 보안과 전문성에 대한 분명한 헌신을 보여주었습니다. 이는 개발자와 보안 전문가가 블록체인 생태계의 보안을 강화할 수 있는 열린 소통과 건설적인 지식 교환의 가치를 증명하는 증거입니다.

회사 소개

베리체인은 암호 분석, 보안 감사, 애플리케이션 보안 솔루션을 전문으로 하는 블록체인 보안 솔루션의 선도적인 공급업체입니다. 로닌과 BNB 체인 브리지와 같은 대규모 웹3.0 해킹을 조사하고 완화한 것으로 유명한 당사는 획기적인 연구와 실용적인 보안 솔루션을 결합하여 블록체인 산업에 포괄적인 보호 기능을 제공합니다.

베리체인의 세계적 수준의 보안 및 암호화 연구팀은 업계 전반에 걸쳐 수십억 달러에 영향을 미치는 중대한 취약점을 성공적으로 식별하여 주요 공급업체의 다자간 연산(MPC) 및 영지식 증명(ZKP) 구현의 핵심에 존재하는 결함을 밝혀냈습니다. 베리체인은 BnB 체인, 폴리곤 랩스, 위믹스, 앱토스, 클레이튼, 불리쉬, DWF 랩스 등 웹3.0 선도 기업의 신뢰할 수 있는 보안 파트너로서 전통적인 사이버 보안에 대한 깊은 뿌리를 활용하여 더욱 안전한 웹3.0 생태계를 위한 최첨단 솔루션을 제공하고 있습니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트