이더리움 접속 프로그램에 적용된 ‘비밀패치’가 입출금 장애 유발했다

By 강민승   Posted: 2020-11-18


최근 업비트, 빗썸 등 국내 암호화폐 거래소와 메타마스크 지갑 등 여러 서비스에서 이더리움 계열 토큰의 입출금이 중단되는 사태가 발생해 사용자들이 불편을 겪은 바 있다. 이번 장애는 이더리움에 접속하는 고이더리움(geth) 클라이언트 프로그램 사이에 데이터가 호환되지 않고 네트워크를 겉돌면서 발생했다. 이더리움 블록체인의 하드포크도 일시적으로 야기된 것으로 드러났다. 사건이 발생한 내막을 둘러싸고 이더리움 커뮤니티에선 개발사가 보안 취약점을 남몰래 패치하고 제대로 공시하지 않아 발생한 문제라는 지적이 나오고 있다.


이더리움 접속 프로그램인 고이더리움, 인퓨라란 무엇인가?

업계에서 이더리움에 접속하는 장치인 ‘노드’를 구성하는 데는 고(GO) 언어로 작성된 고이더리움(geth) 클라이언트와 러스트 언어로 작성된 패리티 클라이언트가 현재 많이 사용된다. 블록체인에 기반한 서비스를 운영하려면 회사는 노드를 필수적으로 운영해야 한다. 다만 업계에서 노드를 설정하는 방식은 여러 가지가 존재한다. 기존 클라이언트 프로그램을 그대로 쓰거나 커스텀 클라이언트를 만드는 경우도 있다. 또 서비스 운영을 쉽게 하기 위해 인퓨라 서비스를 사용하는 경우도 많다. 암호화폐 지갑 업체로 유명한 메타마스크도 인퓨라 노드를 기반으로 서비스를 제공하고 있다.


*인퓨라 : 사용자가 이더리움 블록체인에 접속하기 위해선 하드웨어와 소프트웨어를 구비해 진입점(노드)을 구축해야 한다. 인퓨라는 클라우드 서비스 형태로 이더리움 노드를 배포할 수 있게끔 제공하는 서비스다. 예를 들어 암호화폐 거래소에서 인퓨라를 사용하면 블록체인 노드를 쉽게 구성할 수 있고 개발자는 필요한 작업을 응용프로그래밍인터페이스(API)을 통해 조작할 수 있다. 서비스형 노드(Node as a Service) 라고도 부른다.


이더리움 입출금 장애는 왜 발생했나? 최신 버전과 구버전 클라이언트의 충돌 때문

이번에 발생한 입출금 장애는 고이더리움의 이전 버전 클라이언트가 최신 버전 클라이언트와 기능이 충돌하면서 발생했다. 1.9.19 버전 이상의 최신 클라이언트와 1.9.13 이전 버전의 클라이언트가 호환되지 않았고 동기화 작업 등에서 오류가 발생했다. 이 같은 장애는 이더리움 네트워크의 여러 서비스에서 산발적으로 광범위하게 발생했다. 


특히 인퓨라도 출시한 지 반년이 다되가는 오래된 버전의 고이더리움 클라이언트를 그대로 사용하고 있었고 장애를 겪을 수밖에 없었다. 때문에 인퓨라 노드에 기반한 암호화폐 거래소나 여러 블록체인 서비스도 한동안 먹통이 됐다. 기업이 고이더리움 클라이언트를 사용하는 경우 인퓨라의 경우처럼 몇 개월이 지난 이전 버전 소프트웨어를 그대로 사용하는 경우도 실제로 많이 존재한다.


고이더리움 개발팀은 문제가 발생한 지점을 부검 문서를 통해 공개했다. 2017년에 배포된 고이더리움 클라이언트에선 어떤 데이터를 내부에서 복사할 때 메모리의 주소만 상대편에게 넘겨주는 ‘얕은 복사’ 기능이 들어있었다. 이 부분에서 복사가 진행되는 와중에 해커가 임의로 메모리에 접근해 데이터를 덮어쓸 수 있다는 보안 취약점이 재작년 발견됐다.


이같은 문제점은 코드 내에서 잠재적인 결함으로 2년 동안 존재하다가 지난 7월 공개된 1.9.17 버전의 클라이언트를 통해 최종적으로 개선됐다. 보안 패치는 코드 한 줄 분량으로 간단했지만 이더리움 노드의 합의 알고리즘이 변경돼 기존과 호환되지 않는 이슈가 추가적으로 발생했다. 블록체인에서 합의 알고리즘이 변경되는 경우는 단순한 패치가 아닌 상당한 업데이트로 여겨진다.


“신속한 보안성 패치가 필요했다” vs “은밀한 패치가 정보의 투명성을 해쳤다”

고이더리움 개발팀은 기존 클라이언트에 이같은 취약점이 존재한다는 내용을 외부에 공개하지 않고 비밀리에 보안 패치를 진행한 것으로 밝혀졌다. 개발팀에 따르면 해당 내용을 정식 하드포크에 포함하기에는 시간이 많이 걸리고 그동안 공격자만 오히려 유인할 수 있어 패치를 일방적으로 밀어붙였다는 설명이다. 고이더리움 개발팀은 부검 문서에서 “개발팀은 보안상의 이유로 ‘사일런트 패치’를 택했다. 꽤나 긴 기간 동안 문제가 없었던 만큼 취약점을 외부에 굳이 공개하지 않았다. 사용자가 클라이언트를 업데이트하고 시간이 흐르면서 해당 문제가 점차 해결되길 기대했다”고 밝혔다. 반면 이드리서치 등 이더리움 커뮤니티는 이같은 행위가 정보의 투명성과 정면 대치된다고 반박하고 나섰다.


엘리자 갈라노 인퓨라 공동창립자는 자사 블로그를 통해 “최신 업데이트를 통해 사용자에게 호환 문제가 생기는 경우나 버그 등 예기치 못한 이슈가 발생할 수 있어 현업에서 업데이트를 곧장 진행하기는 쉽지 않다”고 말했다. 그는 합의 알고리즘 변경과 같은 중대한 사안의 경우 업데이트를 진행할 분명한 사유가 되지만 이같은 설명이 없어 최신판 업데이트를 굳이 진행하지 않았다고 밝혔다. 하지만 “이번 사건을 통해 책임감을 느끼고 안정성을 위한 유지 보수와 이전 버전과 호환성을 높이기 위한 조치를 하겠다”고 말했다.


블록체인 보안 기술 기업인 해치랩스의 문건기 대표는 “이번 문제는 비단 인퓨라만의 문제가 아니기 때문에 거래소에서 자체적으로 노드를 운영하거나 인퓨라 외에 다른 노드를 사용하였더라도 꾸준히 노드 프로그램 업데이트를 하지 않았다면 동일한 문제를 겪을 것”이라며 “최신 버전에선 결함이 수정됐지만 구버전 프로그램으로 운영하던 노드에서 장애가 발생한 것으로 보여 최신판 업데이트를 반드시 권장한다”고 말했다.


한편 이더리움재단은 노드의 메모리 기능을 수정한 고이더리움 1.9.19 버전과 별개로 고 언어 자체에서 서비스 거부공격(DoS)에 대한 보안 취약점이 발견됐다고 밝혔다. 이더리움재단은 고이더리움의 최신 버전인 1.15.5 혹은 1.14.12 버전으로 노드를 반드시 업데이트해 달라고 지난 12일 공시했다.

[강민승 기자]