환율 -
|
USDT(업비트) -
|
BTC.D -
|
총시총 -
|
접속 0

비트코인 코어, AI가 찾은 결함 3건 공개…4개 버전 패치

비트코인 코어, AI가 찾은 결함 3건 공개…4개 버전 패치

비트코인 코어, 28일 노드 결함 3건 공개…중간 위험 2건·낮은 위험 1건

3건 모두 스파이럴 '프로젝트 루프'의 자동 AI 코드 검사로 처음 발견

윈도·맥 노드 원격 다운 결함은 리눅스 무관…32비트·FAT32는 1건 미해결

광고

비트코인 네트워크를 돌리는 대표 프로그램 비트코인 코어(Bitcoin Core) 개발진이 28일(현지시간) 노드를 멈추게 할 수 있는 결함 3건의 내용을 공개했다. 개발진은 27일과 28일 이틀에 걸쳐 29.5·30.4·31.2·32.1 네 버전을 내놓으며 이 결함들을 고쳤다. 3건은 모두 사람이 아닌 자동 AI 코드 검사에서 처음 발견됐다.

3건이번에 공개된 결함
4개 버전29.5·30.4·31.2·32.1
1건32비트·FAT32에선 미해결
3건2주 뒤 추가 공개 예정

공개 글에 따르면 3건은 모두 스파이럴(Spiral)의 엘리아스 로러가 진행하는 '프로젝트 루프(Project Loupe)'가 대형 언어모델(LLM)로 코드를 자동 검사하다 찾아냈다. 비트코인 코어 기여자 그레고리 샌더스가 결과를 직접 검증한 뒤 보안팀에 넘겼다. 개발진은 두 건을 '중간(Medium)', 한 건을 '낮음(Low)' 위험으로 분류했고, 세 건 모두 '찾기 쉬운(easily discoverable)' 결함으로 봤다.

윈도·맥 노드는 메시지 한 종류로 멈출 수 있었다

가장 직접적인 결함은 리눅스가 아닌 운영체제에서 돌아가는 노드에 해당한다. 비트코인 코어는 상대 노드(피어)가 보낸 데이터가 너무 많이 쌓이면 잠시 읽기를 멈추는 방식으로 메모리를 지킨다. 그런데 리눅스 외 환경에서 쓰는 소켓 감시 방식(select)은 읽기를 멈춘 상태에서도 'TCP 긴급 데이터'라는 특수한 신호가 오면 데이터를 계속 읽어 들였다. 이를 악용하면 쌓이는 데이터에 한도가 사라진다.

개발진은 "악의적인 피어가 연결된 윈도·맥OS·BSD 노드를 손쉽게 다운시킬 수 있다"고 설명했다. 리눅스는 다른 방식(poll)을 쓰기 때문에 영향이 없다. 프로젝트 루프는 이 결함을 10월 23일 찾았고, 사흘 뒤인 26일 수정안(PR #36665)이 병합돼 29~32 각 버전에 함께 반영됐다.

광고

멈춘 연결에 쌓이는 메시지, 시간당 최대 5MB

두 번째 결함은 응답이 느린 피어를 '일시 정지' 상태로 둔 뒤에도 거래 알림 메시지를 계속 대기열에 넣는 동작에서 나왔다. 보통은 20분 안에 핑(ping) 응답이 없는 피어를 끊어내지만, 'BIP31'이라는 오래된 규격의 핑을 지원하지 않는다고 하는 피어에는 이 끊기가 적용되지 않았다. 공격자가 옛 규격인 척하며 메시지를 천천히 읽으면 대기열이 끝없이 커질 수 있었다.

메모리 증가 속도는 들어온 연결(인바운드) 하나당 시간당 최대 2MB, 내보낸 연결(아웃바운드)은 5MB였다. 거래 알림을 받지 않는 '-blocksonly' 설정 노드는 영향이 훨씬 작다. 이 결함은 9월 15일 프로젝트 루프가 먼저 찾았고, 9월 21일 개발자 L0rinc도 따로 발견해 알렸다.

채굴자가 한 달치 블록을 쏟아부어야 하는 공격

세 번째 결함은 블록을 되돌릴 때(리오그) 쓰는 '언두(undo)' 파일 위치를 32비트 정수로 저장한 데서 생겼다. 언두 파일 하나가 4GiB를 넘으면 위치 값이 한 바퀴 돌아 예전 데이터를 덮어쓰고, 이후 해당 블록을 되돌려야 할 때 노드가 멈춘다. 다시 켜도 소용없고, 고친 버전으로 전체 재색인(-reindex)을 해야 복구된다. 윈도와 32비트 환경은 2GiB에서 바로 기록이 실패해 켤 때마다 멈췄다.

다만 개발진은 64비트 환경에서 실제 공격은 "비현실적"이라고 밝혔다. 비표준 거래로 채운 블록을 수천 개, 네트워크 전체 블록 생산량으로 약 한 달치를 직접 채굴해야 하고, 이어 노드마다 다른 파일 배치에 맞춰 블록 약 18개를 정확한 위치에 놓은 뒤 2블록 리오그까지 이겨야 하기 때문이다. 수정은 위치 값을 64비트로 바꾸는 방식이라 저장 형식은 그대로다. 그러나 32비트 시스템과 블록 폴더를 FAT32 파일시스템에 둔 노드는 이번 버전에서도 여전히 영향을 받는다. 이 결함은 7월 8일 처음 보고됐고, 이후 L0rinc(8월 21일)와 앤드루 도먼(10월 23일)도 각각 같은 문제를 알렸다.

31.2와 32.1은 27일, 29.5와 30.4는 28일 나왔고 결함 공개도 28일 이뤄졌다. 32.1 출시 노트에는 32.0이 태그만 붙은 채 막판 문제로 정식 출시되지 않았다는 설명과 함께, 새 메이저 버전 출시로 29.x 이하가 지원 종료(EOL) 대상이 됐다는 안내가 담겼다. 개발진은 정기 공개 일정에 따라 30.0에서 고친 중간·높은 위험 결함 3건을 2주 뒤 공개하겠다고 예고했다.

BTC 상세 →
본 기사는 공개된 발표·자료를 바탕으로 정리한 정보이며 투자 권유가 아닙니다. 투자 판단과 책임은 본인에게 있습니다.