요약: 블록체인은 세 가지 계층에서 오류가 발생합니다. 합의 계층의 오류로는 검증자 버그, 네트워크 분할, 51% 공격 등이 있습니다. 애플리케이션 계층의 오류로는 스마트 계약 버그, 오라클 조작, 거버넌스 악용 등이 있습니다. 인프라 계층의 오류로는 노드 중단, 제공업체 서비스 중단, 클라우드 사고 등이 있습니다. 각 계층마다 별도의 방어 체계가 필요합니다. 블록체인 애플리케이션은 실제 자금을 다루기 때문에 이러한 오류는 매우 중요하며, 오류 발생 시 일반적인 소프트웨어보다 훨씬 더 큰 손실을 초래합니다.
간단한 설명
블록체인은 흔히 ‘신뢰가 필요 없는(trustless)’ 시스템이자 ‘분산된( immutable)’ 시스템으로 불립니다. 그렇다고 해서 블록체인이 결코 실패하지 않는다는 뜻은 아닙니다. 다른 복잡한 분산 시스템과 마찬가지로, 블록체인도 다양한 방식과 여러 단계에서 오류가 발생할 수 있습니다.
개발자들에게 중요한 점은 오류가 계층별로 누적된다는 것입니다. 아무리 안전한 스마트 계약이라도, 데이터를 제공하는 오라클이 누군가에 의해 조작된다면 사용자 자금을 잃을 수 있습니다. 잘 만들어진 앱이라도 그 기반이 되는 노드들이 다운되면 여전히 작동하지 않을 수 있습니다.
이것을 건물에 비유해 보세요. 기초(합의 계층)에 균열이 생길 수 있습니다. 배관과 배선(애플리케이션 계층)에서 누수가 발생하거나 단락이 일어날 수 있습니다. 관리인(인프라 계층)이 파산할 수도 있습니다. 각 장애에는 서로 다른 종류의 보호 조치가 필요하며, 복원력이 뛰어난 시스템은 이 세 가지 모두를 동시에 방어합니다.
컨센서스 계층 오류
합의 계층은 모든 블록체인의 기반이 됩니다. 이는 검증자들이 어떤 거래가 유효한지, 어떤 블록이 체인에 포함될지에 대해 합의하는 방식입니다. 합의가 실패할 경우, 그 피해는 모든 계층 중에서 가장 심각합니다. 체인이 중단되거나, 재구성되거나, 상충되는 블록이 생성될 수 있기 때문입니다.
검증자 버그는 가장 흔한 합의 실패 원인 중 하나입니다. 블록체인 클라이언트 소프트웨어는 복잡합니다. 블록 생성, 인증 로직 또는 상태 전환에 버그가 발생하면 검증자가 유효하지 않은 블록을 생성하거나, 라운드 도중 중단되거나, 올바른 상태에 대해 의견이 일치하지 않는 상황이 발생할 수 있습니다.
한 클라이언트가 네트워크를 장악하면 위험이 커집니다. 검증자의 70%가 동일한 클라이언트를 실행하고 있는데 그 클라이언트에 버그가 있다면, 네트워크의 70%가 한꺼번에 마비됩니다. 바로 이 때문에 블록체인 보안 분야에서 ‘클라이언트 다양성’, 즉 동일한 프로토콜에 대한 여러 개의 독립적인 구현체가 그토록 자주 언급되는 것입니다.
네트워크 분할은 검증자 그룹들이 더 이상 서로 통신할 수 없게 될 때 발생합니다. 일반적인 원인으로는 인터넷 중단, 표적 DDoS 공격, 라우팅 장애 등이 있습니다.
분할된 양측 중 어느 쪽도 합의 기준치(일반적으로 스테이킹된 가중치의 3분의 2)에 도달하지 못하면 블록 생성이 중단됩니다.
양측이 여전히 임계값에 도달할 수 있다면, 체인은 잠시 동안 분기되고, 각 측은 자체 블록을 생성합니다.
네트워크가 다시 연결되면, 재구성(reorg)을 통해 포크가 해결됩니다. 더 짧은 포크에 있던 트랜잭션은 되돌려집니다.
51% 공격 (또는 BFT 기반 체인에 대한 34% 공격)은 과반수의 합의 권한을 가진 공격자가 최근의 거래 내역을 재작성할 수 있게 합니다. 그 원리는 다음과 같습니다:
공격자는 공개 체인에서 분기된 사설 체인을 구축합니다.
프라이빗 체인은 퍼블릭 체인보다 더 많은 작업 증명(PoW)이나 검증자의 인증을 수집합니다.
공격자가 이를 브로드캐스트합니다. 이 데이터가 더 큰 가중치를 지니기 때문에 네트워크는 이를 수용하고, 퍼블릭 체인의 최근 블록들을 삭제합니다.
이를 통해 이중 지출이 가능해집니다. 공격자는 퍼블릭 체인에 자금을 송금한 뒤 확인이 완료되기를 기다립니다. 그런 다음 해당 거래가 제외된 프라이빗 체인을 공개합니다. 결국 공격자는 상품을 받고 자금도 챙기게 됩니다.
애플리케이션 계층 장애
애플리케이션 계층은 스마트 계약, 디파이(DeFi) 프로토콜, 오라클, 그리고 수십억 달러에 달하는 사용자 자금을 관리하는 온체인 로직을 포괄합니다. 이 부분에서 오류가 가장 빈번하게 발생하며, 그로 인한 손실도 가장 큽니다.
재진입 공격은 자체 상태를 업데이트하기 전에 다른 계약을 호출하는 계약을 표적으로 삼습니다. 호출된 계약은 업데이트가 반영되기 전에 원래 계약으로 “재진입”하여 동일한 함수를 다시 실행할 수 있으며, 이로 인해 자금이 유출될 수 있습니다.
2016년 DAO 해킹 사건은 재진입 공격이었습니다. 이 사건으로 약 6,000만 달러의 손실이 발생했으며, Ethereum 과 Ethereum Classic 간의 분열로 이어졌습니다. 이 결함은 수년 전부터 잘 알려져 있었음에도 불구하고, 여전히 ‘검증-효과-상호작용’ 패턴을 생략한 새로운 계약서에서 발견되고 있습니다.
정수 오버플로우와 언더플로우는 산술 연산 결과 데이터 유형이 수용할 수 있는 범위를 벗어난 숫자가 발생하여 값이 감싸지는 현상입니다. 음수가 되어야 할 뺄셈 연산 결과가 대신 엄청난 양의 양수 값을 반환할 수 있으며, 이로 인해 공격자가 자신이 소유한 것보다 더 많은 토큰을 청구할 수 있게 됩니다. Solidity 0.8.0부터는 오버플로우 발생 시 트랜잭션을 롤백하는 내장 검사 기능이 추가되었습니다. 이전 버전으로 구축되었거나 ‘unchecked math’ 블록을 사용하는 계약은 여전히 위험에 노출되어 있습니다.
액세스 제어 오류는 관리자 함수가 호출 주체를 확인하지 않을 때 발생합니다. 이 경우 누구나 계약 소유자나 특정 역할만을 대상으로 하는 함수를 실행할 수 있게 됩니다. 일반적인 예시:
누구나 계약서의 로직을 변경할 수 있게 하는, 보안 조치가 없는 업그레이드 기능
소유권 확인이 없는 반환 함수
잘못 설정된 역할 기반 접근 권한
오라클 조작은 온체인 데이터와 오프체인 데이터를 연결하는 가교 역할을 하는 부분을 공격하기 때문에 특히 위험합니다. 대출, 청산 또는 파생상품 거래에 가격 오라클을 사용하는 스마트 계약은 가짜 가격에 따라 작동하도록 속아 넘어갈 수 있습니다.
플래시 대출은 가장 흔히 사용되는 수단입니다. 단일 원자적 트랜잭션에서 공격자는 다음과 같은 행동을 합니다:
대량의 토큰을 차입한다
오라클이 읽어들이는 DEX에서 가격을 변동시키기 위해 이를 활용합니다
가짜 가격으로 대상 프로토콜에서 수익을 창출하는 거래를 실행합니다.
대출금을 상환한다
해당 계약은 원래 의도된 대로 정확히 작동했습니다. 문제는 단기적인 가격 변동을 고려하지 않은 오라클 설계에 있었습니다.
거버넌스 악용 공격은 DAO 및 DeFi 프로토콜의 투표 시스템을 표적으로 삼습니다. 공격자는 대개 플래시 론을 통해 충분한 거버넌스 토큰을 확보한 뒤, 악의적인 제안을 통과시킵니다. 이러한 제안은 재무 자금을 고갈시키거나, 프로토콜 설정을 변경하여 취약점을 유발하거나, 공격자에게 관리자 권한을 부여할 수 있습니다.
인프라 계층 장애
인프라 장애는 블록체인 자체를 망가뜨리는 것이 아닙니다. 앱과 사용자가 블록체인에 접근하는 능력을 저해할 뿐입니다. 개발자나 최종 사용자에게는 그 결과가 체인 장애와 똑같이 보입니다. 즉, 앱이 작동하지 않게 되는 것입니다.
노드 충돌이나 동기화 실패로 인해 노드가 오프라인 상태가 되거나 오래된 데이터를 제공하게 됩니다. 체인 끝부분보다 여러 블록 뒤처진 노드는 오래된 잔액을 반환하고, 최근 거래를 놓치며, 최근 상태에 의존하는 유효한 거래를 거부할 수도 있습니다. 장애 조치 기능이 없는 단일 노드에 의존하는 앱은 해당 노드가 다운되면 함께 중단됩니다.
프로바이더 장애는 해당 프로바이더의 모든 고객에게 동시에 영향을 미칩니다. 주요 RPC 프로바이더에 장애가 발생하면, 해당 엔드포인트를 사용하는 모든 앱이 체인에 접근할 수 없게 됩니다. 이는 분산화를 목표로 하는 시스템 내부의 중앙화 위험입니다. 수천 개의 앱이 하나의 프로바이더를 공유할 경우, 해당 프로바이더는 단일 장애 지점이 되기 때문입니다.
클라우드 제공업체의 장애는 다른 클라우드 서비스와 마찬가지로 블록체인 노드에도 영향을 미칩니다. AWS, GCP 또는 다른 클라우드 서비스에서 지역별 장애가 발생하면 해당 지역의 모든 노드가 오프라인 상태가 됩니다. 블록체인 노드의 상당 부분이 소수의 클라우드 제공업체에서 운영되고 있기 때문에, 한 곳의 클라우드 장애만으로도 네트워크 상태와 애플리케이션 가동 시간에 예상보다 훨씬 더 큰 타격을 줄 수 있습니다.
DNS 및 네트워킹 장애가 발생하면, RPC 엔드포인트가 정상적으로 작동하고 있음에도 불구하고 앱이 해당 엔드포인트에 접속하지 못할 수 있습니다. DNS 하이재킹, BGP 라우팅 문제, TLS 인증서 문제 등은 모두 앱과 인프라 간의 연결을 차단할 수 있습니다.
완화 전략
이러한 실패를 방지하려면 세 가지 수준을 모두 아우르는 다층적인 접근 방식이 필요합니다.
컨센서스 계층에서는 클라이언트의 다양성이 가장 효과적인 방어 수단입니다. 여러 클라이언트 구현체가 존재하면, 그중 하나에 버그가 발생하더라도 전체 네트워크가 마비되지는 않습니다. 스테이크 분배도 중요합니다. 광범위하고 분산된 검증자 집합은 조직적인 장애와 51% 공격의 위험을 낮춥니다.
애플리케이션 계층에서 주요 방어 수단은 보안 감사, 형식 검증, 버그 보상 제도입니다:
스마트 계약을 배포하기 전에 여러 독립적인 업체에 감사를 의뢰하십시오.
형식 검증을 통해 코드가 사양과 일치함을 수학적으로 증명하십시오. 이를 통해 수동 검토에서는 놓칠 수 있는 버그를 찾아낼 수 있습니다.
화이트햇 해커들이 취약점을 발견하고 책임감 있게 공개할 경우 보상을 지급하는 버그 바운티 프로그램을 운영하십시오.
타임락 기능을 통해 커뮤니티가 변경 사항이 적용되기 전에 이를 검토할 수 있도록 합니다. 이를 통해 악의적이거나 버그가 있는 업데이트가 즉시 적용되는 것을 방지합니다.
관리자 기능에 대해 다중 서명 승인을 의무화하여, 도난당한 단일 키만으로는 특권 작업을 수행할 수 없도록 합니다.
인프라 계층에서는 제공업체, 리전 및 클라우드 전반에 걸친 중복성이 핵심 기반이 됩니다. 단일 RPC 제공업체, 데이터 센터 또는 클라우드에만 의존해서는 안 됩니다.
회로 차단기는 고장 난 부품이 이에 의존하는 시스템 전체를 마비시키기 전에 해당 부품을 차단합니다.
점진적 성능 저하(Graceful degradation)는 일부 구성 요소가 작동하지 않을 때도 잔액 표시와 같은 핵심 기능이 계속 작동하도록 합니다.
Quicknode 가 회복탄력성을 어떻게 구축하는가
Quicknode의 인프라는 인프라 계층의 장애를 감당할 수 있도록 구축되어 있습니다:
14개 이상의 지역과 5개 이상의 클라우드 및 베어메탈 제공업체에 걸친 지리적 분포
가능한 경우 고객 구성의 다양성
상태가 정상적이지 않은 노드로의 요청을 우회시키는 자동 장애 조치
전담 블록체인 운영팀에 의한 연중무휴 24시간 모니터링 equipe
Quicknode Streams 전달 보장, 최종성 순서 처리, 자동 재구성 처리를 통해 데이터 파이프라인의 복원력을 강화합니다. 재구성이 발생하면 ‘ Streams ’가 이를 감지하고 영향을 받은 데이터를 자동으로 수정합니다. 애플리케이션 계층 모니터링의 경우, ‘ Streams ’를 통해 특정 계약 이벤트, 비정상적인 트랜잭션 패턴, 그리고 진행 중인 악용을 시사할 수 있는 상태 변화를 감시할 수 있습니다.
가동 시간 요구 사항이 가장 엄격한 팀을 위해, Quicknode 의 전용 Clusters 는 공유 트래픽과 분리된, 가동 시간 SLA가 보장되는 독립적인 인프라를 제공합니다. 다른 고객의 트래픽 급증으로 인해 서비스 속도가 저하되는 일이 없으므로, 미션 크리티컬 애플리케이션에 필요한 격리 환경을 확보할 수 있습니다.
가장 흔한 블록체인 장애 유형에는 어떤 것들이 있나요?
위의 오류들은 발생된 계층별로 분류되어 있습니다. 또한 각 계층을 통해 해당 오류를 방어할 책임이 있는 주체를 알 수 있습니다. 아래 표에는 가장 흔한 오류들, 각 오류에 대한 예시, 그리고 해결 방법이 포함된 위치가 나열되어 있습니다.
레이어
흔히 발생하는 고장
예시
완화 조치의 현장은 바로 여기
합의
51% 공격 또는 재구성
다수가 최근의 역사를 재구성한다
프로토콜 및 검증자 세트
합의
네트워크 분할 또는 중지
검증자들이 임계값에 도달하지 못함
프로토콜 및 클라이언트의 다양성
신청
재진입 문제 또는 오라클 조작
플래시 론으로 인해 대출 풀이 고갈된다
스마트 계약 및 감사
신청
접근 제어 또는 거버넌스 취약점 악용
보안 조치가 없는 관리자 기능
스마트 계약과 다중 서명
인프라
노드 중단 또는 제공자 서비스 중단
RPC endpoint 가 오래된 데이터를 반환합니다
중복 인프라
손실을 초래하기 전에 블록체인 장애를 어떻게 감지할 수 있을까요?
탐지는 사고를 통제 가능한 수준으로 막을 수 있는지, 아니면 재앙으로 번질지를 가르는 결정적인 요소입니다. 블록체인 인프라를 지속적으로 모니터링하면 노드 지연, 오류 급증, 동기화 불일치 등을 실시간으로 파악할 수 있습니다. 더 광범위한 가시성을 통해 이러한 신호를 애플리케이션 동작과 연계함으로써, 사용자가 이를 체감하기 전에 악용 사례나 서비스 중단을 미리 포착할 수 있습니다.
체인 홀트와 체인 재구성(reorg)의 차이점은 무엇인가요?
이 두 가지 합의 실패 현상은 혼동하기 쉽습니다. 체인 정지는 검증자들이 합의 임계값에 도달하지 못해 블록 생성이 완전히 중단되므로, 새로운 거래가 확인되지 않는 현상입니다. 반면 블록체인 재구성(reorg )은 블록 생성을 계속하지만, 최근 생성된 블록들을 경쟁 체인의 블록으로 대체합니다. 이로 인해 이미 확인된 것으로 보였던 거래들이 되돌려질 수 있습니다.
인프라 중복 구성은 어떻게 장애 위험을 줄여주나요?
대부분의 인프라 장애는 단일 장애 지점(SPOF)에서 비롯됩니다. 인프라 중복성이 왜 중요한지 이해하게 되면, 설계 방향은 자연스럽게 정해집니다. 즉, 여러 공급자와 리전을 활용하고, 요청이 실패하기 전에 상태가 좋지 않은 노드를 우회하도록 하는 자동 장애 조치 기능을 도입하는 것입니다.
자주 묻는 질문
블록체인 장애의 세 가지 단계는 무엇인가요?
오류는 합의 계층(검증자 버그, 파티션, 51% 공격), 애플리케이션 계층(스마트 계약 버그, 오라클 조작, 거버넌스 악용) 또는 인프라 계층(노드 중단, 제공업체 및 클라우드 서비스 중단)에서 발생합니다. 복원력이 뛰어난 시스템은 이 세 가지 모두에 대비합니다.
블록체인 손실의 가장 흔한 원인은 무엇인가요?
애플리케이션 계층의 장애, 특히 스마트 계약의 취약점 및 오라클 조작은 가장 빈번하게 발생하며 가장 큰 손실을 초래합니다. 결함이 있는 계약이나 오라클 로직이 악용되는 동안, 기반이 되는 블록체인은 대개 설계된 대로 정확히 작동합니다.
단 하나의 RPC 제공자가 중단되는 것만으로 내 앱이 다운될 수 있나요?
네. 애플리케이션이 단일 공급자, 단일 데이터 센터 또는 단일 클라우드 리전에만 의존하는 경우, 해당 곳에서 장애가 발생하면 서비스가 중단됩니다. 자동 장애 조치 기능을 통해 트래픽을 중복된 공급자와 리전에 분산시키면 이러한 단일 장애 지점을 제거할 수 있습니다.
51% 공격은 네트워크 분할과 같은 것인가요?
아닙니다. 51% 공격은 합의 권한의 과반수가 의도적으로 역사를 재작성하려는 시도인 반면, 네트워크 분할은 검증자들 간의 통신이 우발적으로 단절되는 현상입니다. 두 경우 모두 리오르그를 유발할 수 있지만, 그 원인과 방어 방법은 다릅니다.
오라클 조작을 어떻게 방지할 수 있나요?
다양한 출처와 시간대의 가격을 종합해 보여주는 오라클을 사용하고, 단일 DEX 현물 가격에만 의존하지 않도록 하며, 타당성 검증 및 서킷 브레이커를 추가하십시오. 이러한 조치들은 가격 피드를 일시적으로 왜곡시키는 플래시 론 공격을 무력화합니다.