비트코인 코어 — 비트코인의 주요 소프트웨어 구현 — 의 버전에는 1년 이상 심각한 소프트웨어 버그가 포함되어 있었습니다. 이 버그는 이번 주에 출시된 비트코인 코어 0.16.3(및 0.17.0rc4)로 수정되었으며, 현재 비트코인 네트워크의 상태는 안전해 보이며, 피해는 없습니다. 비트코인 코어 프로젝트는 이후 버그가 이전에 생각했던 것보다 더 심각하다는 것을 밝혀내는 전체 공개 보고서를 발표했습니다.
이것은 비트코인 코어의 가장 심각한 버그 중 하나에 대한 좋은, 나쁜, 추한 세부 사항입니다. (하지만 그 순서는 아닙니다.)
나쁜 점
물론 나쁜 점은 버그 자체로, 현재 CVE-2018-17144로 문서화되어 있습니다.
이 버그는 2017년 3월에 공식 출시된 비트코인 코어 0.14.0에서 블록 릴레이 관련 성능 개선의 일환으로 도입되었습니다. 간단히 말해, 이 버그는 노드가 동일한 코인을 여러 번 사용하는 트랜잭션이 포함된 블록을 거부하지 못하게 했습니다. 실제로 이는 비정상적인 형태의 이중 지출을 허용했으며, 이는 비트코인이 방지하기 위해 설계된 바로 그 것입니다.
이는 여러 가지 방식으로 나타날 수 있는 심각한 문제를 야기했습니다.
첫째, 비트코인 코어 버전 0.14.0에서 0.14.2(그리고 경우에 따라 더 최신 버전)는 블록을 수용했지만, 동시에 뭔가 잘못되었다는 것을 인식했습니다. 그러나 그들은 정확히 무엇이 잘못되었는지 알 수 없었습니다. 결과적으로 노드는 완전히 작동을 중단하고 종료되었습니다. 이 버그로 인해 잘못된 블록이 이러한 노드에 도달했다면, 사실상 충돌했을 것입니다. 그건 나쁜 일입니다.
하지만 상황은 훨씬 나빠집니다.
비트코인 코어 버전 0.15.0에서 0.16.2는 또 다른 성능 개선을 포함하여, 경우에 따라 이러한 노드가 더 이상 뭔가 잘못되었다는 것을 인식하지 못하게 만들었습니다. 특히, 이중 지출된 코인이 이미 동일한 블록에서 이동되지 않았다면(이는 자주 발생하는 경우입니다), 이러한 노드는 트랜잭션과 블록을 정상으로 수용했을 것입니다. 가상의 최악의 시나리오에서, 악의적인 채굴자는 자신의 코인을 복사하여 비트코인의 화폐 공급을 부풀릴 수 있었고, 비트코인 코어 버전 0.15.0에서 0.16.2를 사용하는 누구나 이러한 코인을 유효한 것으로 수용했을 것입니다.
기술적으로, 이 버그는 영향을 받은 노드(비트코인 코어 0.15.0에서 0.16.2 및 그 코드베이스의 포크)와 영향을 받지 않은 노드(특히 비트코인 코어 0.13.2 및 이전 버전, 그리고 일부 대안 비트코인 구현) 간의 블록체인 분기를 유발할 수도 있었습니다. 그러나 후자의 범주는 아마도 며칠 내에 단 하나의 블록도 생성할 수 있는 충분한 해시 파워를 갖고 있지 않기 때문에 이는 가능성이 낮습니다. 이러한 노드는 대신 유효한 블록을 기다리며 멈춰 있을 것입니다.
그럼에도 불구하고, 이 버그는 비트코인에 대한 가장 심각한 공격 중 하나를 허용할 수 있었습니다. 이 버그가 비트코인의 주요 소프트웨어 구현의 릴리스에 포함되었고, 여러 코드베이스 포크에서도 발견되었으며, 약 18개월 동안 눈치채지 못했다는 사실은 많은 사람들에게 충격적입니다.
좋은 점
이제 좋은 소식입니다.
첫 번째이자 주요 좋은 소식은 이 버그가 어떤 방식으로도 악용된 적이 없다는 것입니다.
두 번째 좋은 소식은 이 버그가 처음부터 악용될 가능성이 매우 낮았다는 것입니다. 이는 공격이 의도적으로 “공격” 블록을 생성하는 채굴자에 의해만 악용될 수 있었기 때문입니다 — 사고로 그렇게 하는 채굴자나 일반 사용자에 의해 악용될 수는 없었습니다.
즉, 채굴자는 약 80,000달러의 일반 블록 보상을 포기할 위험을 감수해야 했습니다. 이러한 공격은 꽤 빨리 눈에 띄었을 것입니다 — 모든 것은 공개 블록체인에서 발생하며, 충돌 보고서는 아마도 채팅룸과 포럼에 쏟아졌을 것입니다. 그 시점에서 비트코인 사용자 기반은 추가된 인플레이션이 사실상 버그로 인해 발생했으며, 새로운 프로토콜 규칙으로 수용되어서는 안 된다는 데 동의했을 것입니다.
따라서 2010년에 발생한 값 오버플로우 사건이나 2013년에 비트코인 네트워크를 분할한 버그와 마찬가지로, 대부분의 채굴자(해시 파워 기준)는 소프트웨어를 신속하게 업그레이드하거나 다운그레이드하여 “공격 블록”을 거부하고 대신 “정직한 체인”에서 채굴했을 것입니다. 이 정직한 체인이 “공격 체인”을 초과하자마자, 심지어 취약한 노드조차도 정직한 체인으로 전환하고 공격 체인을 무시했을 것이며, 공격하는 채굴자는 어떤 블록 보상도 받지 못했을 것입니다.
또한, 공격 체인上的 코인은 아마도 빠르게 가치가 하락했을 것입니다: 시장은 악의적인 채굴자가 “허공에서” 복사할 수 있는 코인을 가치 있게 평가할 가능성이 낮습니다. 따라서 이 채굴자는 복사되는 동일한 코인의 가치를 즉시 훼손했을 것이며, 이는 공격의 목적을 무효화할 수 있습니다. (물론, 채굴자는 시장을 숏으로 하여 돈을 벌 수도 있지만, 이것은 여전히 상당한 위험을 동반합니다.)
세 번째 좋은 소식은 이 버그가 월요일에 비트코인 코어에서 작업하는 여러 개발자에게 알려지지 않은 사람이 책임감 있게 공개했다는 것입니다(비트코인 캐시 구현인 비트코인 ABC 및 비트코인 언리미티드 포함). 처음에는 서비스 거부(DoS) 버그로 제시되었으며, 이는 비트코인 코어 버전 0.14.0에서 0.14.2에 대해 정확합니다. 그러나 추가 검토에서 비트코인 코어 기여자이자 체인코드 연구소 직원인 맷 코랄로는 동일한 버그가 인플레이션 취약점이기도 하다는 것을 발견했습니다.
버그는 신속하게 패치되었고, 화요일에 새로운 비트코인 코어 마이너 릴리스인 비트코인 코어 0.16.3으로 출시되었습니다. 이 버그는 비트코인 코어의 다가오는 주요 릴리스인 0.17.0의 네 번째이자 최신 릴리스 후보에서도 패치되었습니다. 한편, 이 버그를 알고 있는 비트코인 코어 기여자 그룹은 채굴자와 대기업 등 비트코인 생태계의 주요 플레이어에게 비트코인 코어 0.16.3으로 업그레이드할 것을 요청하기 시작했습니다. 일반 사용자에게도 업그레이드를 권장했습니다.
네 번째 좋은 소식은 네트워크의 대부분의 채굴자가 이제 버그를 제거하기 위해 업그레이드했을 가능성이 높다는 것입니다. 이는 공격자가 이를 악용하려고 하더라도 그리 멀리 가지 못할 것임을 의미합니다. 정직한 채굴자들은 조만간 공격 체인을 초과할 것이며, 그 시점에서 비업그레이드된 노드조차도 정직한 체인을 유일한 유효한 체인으로 수용할 것입니다. 그러나 안전을 위해 현재 사용자는 결제를 수용하기 전에 추가 확인을 기다릴 것을 권장합니다.
(기술적으로 비트코인 프로토콜에 미치는 영향은 다음과 같습니다: 비트코인 코어 0.15.0은 채굴자에 의해 트리거되거나 작동된 적이 없는 “우발적인 하드 포크”를 도입했으며, 따라서 블록체인 포크로 이어지지 않았습니다. 이 “하드 포크”는 지난 며칠 동안 의도적인 채굴자 강제 소프트 포크에 의해 사실상 무효화되었습니다. 현재 시점에서 비트코인 경제에 의해 강제되었을 가능성도 있습니다.)
추한 점
이러한 버그의 심각성은 오픈 소스 소프트웨어로 지원되는 공개적이고 분산된 지속적으로 운영되는 네트워크에서 다루기가 까다로울 수 있습니다. 비트코인 언리미티드가 2017년 초에 버그를 패치했을 때와 같이, 코드의 취약점을 수정하는 행위 자체가 잠재적인 적에게 이를 드러내어 수정이 현장에서 널리 배포될 때까지 공격의 창을 열 수 있습니다.
이러한 공격을 피하기 위해, 문제를 알고 있는 비트코인 코어 기여자들은 버그의 심각성을 즉시 공개하지 않기로 결정했습니다. 처음에는 채굴자, 기업 및 일반 대중에게 일부 정보를 생략하고 DoS 취약점을 공개하기로 선택했지만 인플레이션 취약점은 공개하지 않았습니다. 그들은 DoS 취약점(및 몇 가지 강력한 권장 사항)이 사용자가 업그레이드할 충분한 이유가 될 것이라고 희망했으며, 잠재적인 공격자에게 경고하지 않으려 했습니다. 전체 공개는 나중에 이루어질 것입니다.
그러나 모든 사람이 이러한 접근 방식을 공유한 것은 아닙니다. 버그가 주목받기 시작하자, 더 많은 사람들이 스스로 이 버그가 단순한 DoS 취약점보다 더 심각하다는 것을 알아내기 시작했습니다. 일부는 취약점의 전체 범위를 유출하기 시작했다고 전해지며, 이는 비트코인 네트워크를 공격의 위험에 더 노출시켰습니다. 취약점이 해커 뉴스에 보고되었을 때(나중에 철회되었지만), 더 이상 이를 숨길 이유가 없었습니다.
다행히도 그때까지 비트코인 코어 기여자들은 대부분의 채굴자가 업그레이드했으며 비트코인 네트워크가 안전하다고 판단했습니다. 원래 계획보다 빨리 비트코인 코어 프로젝트는 목요일 저녁에 전체 공개를 발표하기로 결정했습니다.
그러나 비트코인의 코드베이스를 기반으로 한 여러 알트코인이 여전히 공격에 취약할 수 있으며, 이 약점이 이제 공개적으로 알려진 사실은 도움이 되지 않을 것입니다. 가장 큰 비트코인 코드베이스 기반 암호화폐의 주요 구현 — 특히 비트코인 캐시의 비트코인 ABC — 는 패치를 배포했으며 이제 안전하지만, 더 작은 코인은 여전히 위험에 처해 있을 수 있습니다.
업데이트 9월 22일 토요일: 익명 비트코인 언리미티드 개발자 “awemany”가 버그를 발견한 사람으로 나섰습니다.
자세한 내용은 비트코인 코어 프로젝트의 CVE-2018-17144 전체 공개를 참조하십시오. 사용자와 채굴자가 비트코인 코어 0.16.3(또는 비트코인 코어 0.17.0rc4)로 업그레이드하는 것이 여전히 권장됩니다.