버그 (Bug)
버그는 소프트웨어나 하드웨어가 설계 의도와 다르게 동작하게 만드는 결함·오류입니다. 단순한 화면 오류부터 보안 취약점까지 범위가 넓으며, 블록체인에서는 버그 하나가 자금 손실이나 체인 분기로 이어질 수 있습니다.
자세히 알아보기
버그는 원인에 따라 논리 오류(조건을 잘못 씀), 경계값 오류(배열 끝을 넘음), 정수 오버플로, 동시성 문제(경쟁 상태) 등으로 나눌 수 있습니다. 모든 버그가 보안 문제는 아니지만, 공격자가 의도적으로 악용할 수 있는 버그는 취약점(vulnerability)이라고 부르며 CVE 번호가 붙기도 합니다.
버그를 줄이는 방법으로는 코드 리뷰, 단위·통합 테스트, 퍼징(무작위 입력 테스트), 정적 분석, 형식 검증이 있습니다. 발견된 버그는 재현 → 원인 분석 → 수정 → 회귀 테스트의 순서로 처리합니다. 외부 연구자의 신고를 보상하는 버그 바운티 제도도 널리 쓰입니다.
블록체인·암호화폐에서는
블록체인 소프트웨어의 버그는 되돌리기 어렵다는 점에서 특히 위험합니다.
- 2010년 8월 비트코인에서는 값 오버플로 버그(CVE-2010-5139)로 약 1,840억 BTC가 생성된 트랜잭션이 블록에 포함되었고, 수정된 소프트웨어로 체인을 되돌려 해결했습니다.
- 2016년 이더리움의 The DAO 컨트랙트는 재진입(reentrancy) 버그로 대량의 ETH를 탈취당했고, 이 사건을 계기로 하드 포크가 이루어져 이더리움과 이더리움 클래식이 갈라졌습니다.
스마트 컨트랙트는 한 번 배포하면 코드를 고치기 어렵기 때문에 배포 전 보안 감사와 테스트가 필수입니다.
버그와 체인 분기
노드 소프트웨어의 버그는 체인 분기를 일으킬 수도 있습니다. 서로 다른 버전이나 다른 구현의 클라이언트가 같은 블록을 두고 유효성 판단을 다르게 하면 네트워크가 두 갈래로 나뉩니다. 그래서 블록체인 개발에서는 합의 규칙과 관련된 코드를 특히 보수적으로 변경하고, 여러 클라이언트 구현 사이의 호환성 테스트를 중요하게 여깁니다.
버그를 발견했을 때는 공개 이슈로 바로 올리기보다 프로젝트가 안내하는 보안 신고 절차를 따르는 것이 원칙입니다. 수정이 배포되기 전에 세부 내용이 알려지면 공격자가 먼저 악용할 수 있기 때문입니다(책임 있는 공개).
쉽게 말하면
설계도의 작은 오타 때문에 문이 반대로 열리는 집과 같습니다. 대부분은 불편한 정도지만, 오타가 자물쇠에 있으면 도둑이 들어올 수 있습니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.