1년 넘게 공격자들은 비트코인 언리미티드와 비트코인 클래식 노드를 다운시킬 수 있는 능력을 가지고 있었습니다. 어제, 누군가 실제로 그렇게 했습니다. Coin Dance와 같은 웹사이트에 따르면, 비트코인 언리미티드 노드의 수는 거의 800에서 몇 시간 만에 250 이하로 급격히 감소했습니다. 비트코인 클래식도 곧이어 타격을 받았습니다.
하루 전, 취약점을 발견한 보안 연구원이 비트코인 매거진에 연락을 했습니다.
“20억 달러 규모의 네트워크를 운영하려는 프로젝트가 이렇게 초보적인 실수를 할 수 있다는 것이 정말 놀랍습니다.”
취약점
비트코인 언리미티드와 비트코인 클래식은 비트코인 코어의 포크로, 비트코인의 블록 크기 제한을 늘리려는 의도를 가지고 있습니다. 두 프로젝트 모두 2015년에 시작되었으며, 이후 각자의 개발 팀에 의해 유지되고 있습니다. 비트코인 클래식은 작년 비트코인 코어의 비교적 인기 있는 대안이었지만, 비트코인 언리미티드는 최근에 주목받고 있습니다. 세계 최대의 채굴 풀인 AntPool은 비트코인 언리미티드로 전환할 것이라고 발표했으며, 여러 소규모 풀도 마찬가지입니다.
하지만 모든 사람이 그것이 좋은 생각이라고 믿는 것은 아닙니다.
“비트코인 언리미티드의 코드 품질이 매우 낮다는 것에 실망하고 있으며, 다른 문제들도 많을 것이라고 의심합니다.”라고 자신을 “샬롯 가드너”라고 소개한 보안 연구원이 비트코인 매거진에 월요일에 말했습니다.
이메일을 통해 소통하며, 가드너는 자신의 사용을 위해 소프트웨어를 감사하고 있었지만, 그것이 매우 안전하지 않다는 결론에 빠르게 도달했다고 말했습니다: “이 소프트웨어가 현재 비트코인 채굴 생태계의 큰 부분에서 사용되고 있다는 것이 걱정됩니다.”
가드너는 비트코인 언리미티드 개발 팀에 “치명적인 원격 크래시 취약점” 두 가지를 제출했다고 밝혔습니다.
첫 번째는 “NULL 포인터 역참조”로 알려져 있으며, 두 번째는 “도달 가능한 단언”입니다. 두 경우 모두 공격자는 특별히 제작된 메시지를 비트코인 언리미티드 또는 비트코인 클래식 노드에 보내 이 노드들을 다운시킬 수 있습니다. 비트코인과 같은 공개 P2P 네트워크에서는 공격자가 Bitnodes와 같은 공개 소스에서 비트코인 언리미티드와 비트코인 클래식 노드의 목록을 얻고, 모든 노드를 오프라인으로 만들 수 있다는 것을 의미합니다.
“아직 아무도 이를 발견하지 못했다는 것이 놀랍습니다.”라고 가드너는 공격이 발생하기 하루 전에 비트코인 매거진에 말했습니다. “비트코인 언리미티드 소프트웨어를 실제로 사용하는 사람이 많지 않은 것 같습니다. 하지만 그들의 ‘부상’으로 인해 공격자들이 더 많은 관심을 가질 수 있습니다.”
공개
월요일에 비트코인 매거진에 연락했을 때, 가드너는 취약점을 즉시 공개하고 싶지 않았습니다. 이는 무책임하다고 설명하며, 비트코인 언리미티드 개발 팀이 이를 수정할 기회를 갖기 전에 버그가 악용될 수 있기 때문입니다.
하지만 그녀는 또한 취약점을 Mitre의 일반 취약점 및 노출(CVE) 데이터베이스에 제출했습니다. 이는 Mitre가 한 달 후에 버그를 공개하도록 보장하며, 개발자들이 제때 문제를 실제로 수정하도록 압박합니다.
그러나 이러한 책임 있는 공개 이후에도, 가드너는 비트코인 언리미티드 코드 저장소에서 취약점이 수정되자마자 악용될 위험이 있다고 생각했습니다. 결국, 그 시점에서 문제는 실제로 해결되지 않습니다: 출시된 비트코인 언리미티드 소프트웨어를 실행하는 모든 사람은 새로운 수정된 버전을 다운로드하고 실행할 때까지 여전히 취약합니다. 이는 공격자에게 기회를 제공합니다.
“문제는 버그가 너무 명백해서 이를 수정할 때 개발 과정을 지켜보는 누구에게나 쉽게 눈에 띄게 될 것이라는 점입니다.”라고 그녀는 말했습니다.
현재 그것이 정확히 발생한 것으로 보입니다. 비트코인 언리미티드 개발자들은 실제로 문제가 지적된 직후 이를 수정했지만, 가드너는 버그가 수정된 것으로 보이고 공격이 시작되기 전에 그들이 너무 눈에 띄는 GitHub 커밋 메시지로 이를 수행했다고 말했습니다.
“그들의 커밋 메시지는 경고 신호를 울립니다. 누군가가 이를 알아차릴지는 모르겠지만, 아마도 그들은 메시지를 좀 더 모호하게 만들었어야 했습니다. 문구가 더 면밀한 조사를 유도할 수 있습니다. 하지만 이렇게 오랫동안 눈에 띄지 않았다면, 아마도 눈에 띄지 않을 것입니다.”
분명히, 그렇지 않았습니다.
가드너가 경고한 대로, 공격자들이 취약점 중 하나를 악용하는 데 오랜 시간이 걸리지 않았습니다: 첫 번째 공격은 버그가 수정된 직후에 발생했습니다. 조금 후, 사용자 “shinobimonkey”가 이 문제를 Reddit에 올렸고, 비트코인 코어 개발자 피터 토드가 버그에 대해 트윗하며 소셜 미디어가 폭발했습니다.
누군가는 심지어 누구나 사용할 수 있는 익스플로잇 코드를 게시했으며, 곧 대부분의 비트코인 언리미티드 노드가 다운되었고, 많은 비트코인 클래식 노드도 뒤따랐습니다.
“이것이 바로 ‘책임 있는 공개’ 프로토콜이 있어야 하는 이유입니다.”라고 가드너는 공격이 발생한 후 비트코인 매거진에 말했습니다. “하지만 소프트웨어 프로젝트가 이렇게 중요한 문제를 해결하는 데 신중하지 않다면 도움이 되지 않습니다.”
코드 품질
비트코인 언리미티드 또는 비트코인 클래식의 코드 품질이 검토된 것은 이번이 처음이 아닙니다.
가장 잘 알려진 예로, 비트코인 언리미티드를 운영하는 bitcoin.com 채굴 풀이 지난 1월 버그로 인해 유효하지 않은 블록을 채굴했습니다. 블록을 생성하는 데 투자된 모든 에너지가 낭비되었고, 유효하지 않은 블록 위에서 스파이 채굴한 채굴 풀도 일부 에너지를 낭비했습니다.
그 이전에 비트코인 코어 개발자들은 여러 차례 버그가 있는 코드에 대해 경고했습니다. 비트코인 개발 메일링 리스트에서 맷 코랄로는 비트코인 클래식의 유연한 거래 코드베이스가 “명백하고 대규모의 보안 구멍으로 가득 차 있다”고 말했습니다. 레딧에서 그레고리 맥스웰은 비트코인 언리미티드 노드가 개발 팀이 제거해서는 안 되는 코드를 제거했기 때문에 다운되고 있다고 지적했습니다.
어제 사건에 대한 응답으로 비트코인 언리미티드의 수석 개발자 앤드류 스톤에게, 맥스웰은 비트코인 언리미티드 코드베이스에 아직 악용되지 않은 더 많은 문제가 있다고 제안했습니다:
“비트코인 코어 사람들이 비트코인 언리미티드에 개인적으로 보고한 취약점이 있으며, 당신이 이에 대해 조치를 취하지 않았습니다. 사실 이보다 더 심각한 문제입니다.”
정보 보안 전문가 안드레아스 안토노풀로스가 지적한 바와 같이 비트코인 언리미티드의 주요 문제는 적절한 품질 분석을 수행할 수 있는 상당한 개발 커뮤니티가 부족하다는 것입니다. 비트코인 언리미티드와 비트코인 클래식에서 작업하는 개발자의 수는 상대적으로 적으며, 악용된 취약점을 포함한 코드는 단 한 사람의 검토 후 병합되었습니다 — 사람들의 돈을 보호하는 보안에 중요한 코드에 비해 많지 않습니다.
가드너는 이 평가에 동의했습니다:
“이 경우 취약점이 너무 명백해서 아무도 그들의 코드를 감사하지 않았다는 것이 분명합니다. 이들은 눈에 띄게 드러납니다.”라고 그녀는 말했습니다. “채굴 산업이 이 소프트웨어를 운영하고 있다는 것이 놀랍습니다. 하지만 그들이 그렇게 하고 있고, 많은 사람들이 피해를 입을 수 있으므로, 비트코인 언리미티드를 사용하지 말라고 권장하는 것 외에는 문제를 공개하고 그들이 이를 수정할 수 있을 만큼 유능하길 바라는 것이 최선입니다.”
비트코인 매거진은 비트코인 언리미티드 개발자 앤드류 스톤과 안드레아 수이사니에게 연락했지만, 발행 시점에 응답을 받지 못했습니다.