[Blockchain] 블록체인 보안 문제

yooni·2022년 3월 14일
0

Blockchain

목록 보기
30/36
post-thumbnail
post-custom-banner


블록체인은 탈중앙화를 추구하기 때문에 기본적으로 중앙화 방식의 시스템에서 발생할 수 있는 보안 문제를 상당수 해결할 수 있다. 중앙화 방식의 시스템에서는 관리자의 실수나 도덕적 해이로 사고가 발생할 가능성이 있는데 탈중앙화 시스템에서 이런 문제를 해결할 수 있다.

블록체인은 이론적으로는 해킹이 불가능하다. 하지만 블록체인은 새로운 기술이고 기존 보안 개념으로 접근하기에는 한계가 많다. 블록체인은 일반적으로 매우 안전하지만, 블록체인의 보안 수준은 네트워크를 지원하는 해시 파워의 양에 비례한다. 채굴자가 많을 수록 채굴 하드웨어가 강력할 수록 블록체인에 대한 공격이 더 어려워진다.



1. 블록체인 보안 특징

블록체인 시스템의 보안성을 결정짓는 블록체인의 다양한 특징들이 있다.


1-1. 합의 및 불변성

합의란 분산된 블록체인 네트워크 노드가 네트워크의 실제 상태와 트랜잭션의 유효성에 대해 합의하는 것을 말한다. 합의 알고리즘을 이용해 합의를 달성할 수 있다. 불변성이란 이미 확인된 트랜잭션의 변경을 방지하는 블록체인의 기능이다. 합의와 불변성은 블록체인 네트워크 보안의 기본이다.

합의 알고리즘은 시스템의 규칙을 준수하고 관련 당사자들이 네트워크의 현재 상태에 동의하도록 보장하고, 불변성은 새로운 데이터 블록이 유효한 트랜잭션을 온전하게 유지한다.


1-2. 암호화 기술

블록체인은 데이터 보안 및 트랜잭션 검증을 위해 해싱이라는 암호화 기술을 사용하며, 지갑의 보안을 위해 공개 키 암호화 방식을 사용한다.


1-3. 크립토 이코노믹스

크립토 이코노믹스는 분산 블록체인 시스템 상의 노드의 행위를 모델링하고 설명하는 연구이다. 이는 블록체인 시스템 노드가 악의적이거나 잘못 행동하는 것보다 정직하게 행동할 때 더 많은 인센티브를 제공한다는 개념에 기반한다. 비트코인 채굴에 사용되는 작업 증명 알고리즘은 이러한 인센티브 구조의 좋은 예이다.

사토시 나카모토는 비트코인 채굴 구조 설계시, 의도적으로 비용과 자원이 많이 들게끔 했다. 이로 인해 작업 증명 채굴은 상당한 자금과 시간을 필요로 한다. 이러한 구조는 악의적 행동을 할 때 상당한 불이익을 받게 하며 정직한 채굴 활동에 대해 막대한 인센티브를 제공한다. 악의적이거나 비효율적인 노드는 빠르게 퇴출되고, 정직하고 효율적인 채굴자들은 상당한 보상을 받을 수 있다. 위험과 보상에 대한 이러한 설계는 시스템이 단일 주체가 블록체인 네트워크의 대다수의 해시레이트를 점유하여 합의를 와해시키지 못하도록 보안을 제공한다.

예를 들어 51% 공격은 공격이 성공한다면 엄청난 피해를 줄 수 있지만, 악의적 행위자가 대다수 노드를 제어할 가능성이 적고 거대한 블록체인의 51%를 제어하는 데 필요한 연산 능력의 비용은 천문학적이다. 악의적 노드 구축에 엄청난 비용이 들고, 정직한 행위에 대한 인센티브가 크다면 시스템은 큰 방해 없이 성공할 수 있다.



2. 블록체인 보안 위협 요소

블록체인 시스템을 이루는 각 단계별로 다양한 위협 요소가 발생할 수 있다.


2-1. 블록체인 서비스 애플리케이션 단계

전자지갑 탈취

지갑 소프트웨어에 랜섬웨어와 같은 악성코드의 감염을 통해 특정 주소의 자산을 동결시키거나 각 지갑의 주소를 생성하는 비밀키를 탈취하여 위조한 주소를 생성, 배포함으로써 공격대상이 보유한 암호 자산을 다른 지갑으로 옮기는 등의 공격 사례가 있다.


이중지불 공격

이중지불은 한 번 사용한 가치를 다시 한 번 더 사용하는 것을 말한다. 합의 알고리즘이 각 트랜잭션을 처리하고 검증하는데 걸리는 시간 간격을 이용하여 공격할 수도 있고, 블록체인 내부 하드포크가 진행될 때 부득이하게 발생하는 기존 체인과 신규 체인 간의 전자지갑 주소 인증키 중복 현상을 이용하는 공격 방법도 있다. 이중지불 공격은 P2P 네트워크의 노드 51%를 장악하는 방식으로 구체화되어 합의 알고리즘을 무력화시키는 공격을 수행한다.


크립토재킹 (Crypto Jacking) - 채굴 악성코드 감염

인터넷을 사용하는 일반 사용자가 자신도 모르는 사이에 자신의 PC에 채굴 소프트웨어가 설치됨으로써 감염된 PC가 특정 암호화폐를 채굴한 뒤, 악성코드 유포자의 지갑으로 지속적으로 전송하게 한다. 직접적 금전 피해는 없지만 컴퓨팅파워를 도난당하게 된다.

웹 크립토재킹 방식은 공격자가 특정 웹사이트에 악성 자바스크립트 코드를 심어 놓는 방식의 공격이다. 웹사이트에 접속하는 순간 별도의 소프트웨어 설치 없이 컴퓨팅파워가 채굴에 도용되다가 웹사이트에서 빠져나오면 다시 채굴 도용이 중단되고 컴퓨팅파워가 정상으로 돌아오는 방식의 사례가 있다.

✔️ 코인하이브
웹 기반 크립토재킹을 최초로 구현한 웹사이트이다. 초창기 목적은 악성 채굴을 위함이 아니라 웹사이트 소유자들이 광고가 아닌 채굴을 통해 수익을 얻을 수 있도록 하기 위함이었다. 하지만 해커들이 코인하으브를 통해 크립토재킹을 하면서 많은 비난을 받았다.


더스팅 공격

더스트(dust)는 아주 적은 양의 코인이나 토큰을 말한다. 워낙 양이 적어 보낼 가치 조차 없는 트랜잭션 또는 금액이다. 공격자는 사용자들이 더스트에 관심을 갖지 않는다는 것을 알고, 사용자들에게 아주 작은 사토시들을 보내 많은 주소를 더스팅하기 시작했다. 그리고 해당 자금과 더스트된 지갑의 모든 트랜잭션을 추척했다. 블록체인 자체는 탈중앙화된 주소 기반 시스템으로 익명성이 보장되지만 대부분의 사람들은 거래소를 통하기 때문에 거래소 지갑에 있는 사용자의 개인 정보가 개인 지갑에도 연결된다. 따라서 해커들은 지갑 주소를 추적하여 결국 지갑을 소유한 개인이나 회사의 정보를 알아낼 수 있게 되었다. 이러한 정보는 피싱 공격에 사용될 수 있다.
블록체인 수수료 인상으로 인해 예전보다 더스트 공격을 실행하는 비용이 많이 들게 되었다. 실제로 최근 몇 년 동안 암호화폐 더스트는 공격보다 광고 등 합법적 목적에 더 많이 사용되었다. 하지만 항상 조심하며 더스트는 제거하는 편이 좋다.



2-2. 스마트 컨트랙트 단계

재진입 공격 (reentracy attack)

스마트 계약을 구성하는 코드 중 재귀함수에 의한 취약점을 이용하는 공격이다. 한 번의 거래가 합의 및 검증되는 시간 간격을 이용해 이전 거래의 잔고 차감이 이루어지기도 전에 새로운 신청에 대한 잔고 확인이 실행되고, 이전 거래에 의한 잔고 차감이 이루어지기도 전에 현재의 잔고를 기준으로 다시 거래가 이루어져 이중 거래가 발생한다.


리플레이 공격 (replay attack)

하드포크된 기존 블록체인에서 유효성을 인정받은 트랜잭션은 새로운 블록체인에서도 유효성을 인정받을 수 있다는 점을 악용하는 공격 방식이다. 기존 블록체인 시스템 내에서 거래를 수행하는 중 데이터를 가로챈 뒤 가로챈 원본 데이터를 그대로 하드포크되어 새롭게 생성된 블록체인 시스템에 재전송하여 공격 대상이 의도하지 않은 거래를 실행시킨다. 공격 대상이 원하지 않는 거래를 지속적으로 발생시켜 정당한 거래를 할 수 없게 만들고 사용하지 않은 자산을 의도적으로 소모시킬 수 있다.

리플레이 공격을 방지하기 위해 통신 당사자간 일회용 토큰을 해싱한 값을 공유하여 통신을 진행하거나, 일회용 비밀번호 혹은 타임스탬프를 활용할 수 있다.



2-3. 네트워크 단계

51% 장악 공격

작업 증명 블록체인 시스템 공격 방식 중 가장 대표적인 공격 방식이다. 전체 노드 해시파워의 51%를 장악하는 공격 방식이다. 전체 노드 중 51%가 특정 거래 요청에 대해 검증/승인 한다면 해당 거래로 생성된 블록은 유효한 블록으로 인정되는 원리를 이용하는 것이다. 51%의 노드를 장악하게 되면 해당 시스템이 공격자에 의해 좌지우지 될 수 있다. 51% 공격의 목표는 이중 지출을 수행하는 것이다.

51%를 차지하기 위한 공격으로는 시빌 공격밸런스 공격이 있다.

  • 시빌 공격
    공격자가 블록체인 내부에 허위의 채굴 노드를 생성하여 51%를 장악하는 방식이다. 시빌 공격은 크립토 이코노믹스에 의해 방어된다. 즉 시빌 공격을 위한 비용보다 정상적 채굴을 통한 수익을 더 크게 하여 공격 자체를 비효율적인 것으로 만드는 것이다.
  • 밸런스 공격
    공격자의 노드가 다른 채굴 노드보다 압도적으로 우위에 있는 채굴 성능 또는 보유 지분을 기반으로 공격자가 생성한 체인 이외의 블록은 무효화 되도록 유도하는 공격이다.

이클립스 공격 (eclipse attack)

허위 정보 전파 공격이라고도 한다. 공격자 노드가 주변 노드들에게 허위 블록 정보를 지속적으로 전파하여 주변 노드의 해시파워를 낭비하게 하거나 허위 블록으로 거래를 수행하도록 하는 공격이다. 이러한 공격을 통해 노드의 51% 이상에게 허위 정보를 제공하여 잘못된 거래를 지속하게 하거나 허위 거래를 통해 공격자에게 암호화폐를 송금하게 하는 등의 공격을 수행할 수 있다.

이클립스 공격으로 엔지니어링 블록 레이스, 채굴 파워 분할, N-컨펌 이중 지불과 같은 현상이 발생할 수 있다.

  • 엔지니어링 블록 레이스
    공격자와 공격 대상자가 동시에 블록을 생성한 경우 공격 대상자의 블록을 숨겨 고아 블록으로 만들고 자신의 블록이 네트워크에 올라가게 하는 것이다.
  • 채굴 파워 분할
    네트워크 전체 채굴 파워를 쪼개 공격자의 채굴 파워가 쪼개진 채굴 파워보다 커지게 되면 51% 공격을 개시할 수 있다.
  • N-컨펌 이중 지불
    여러 채굴 노드들을 공격하여 격리시킨 뒤, 공격자가 자신의 트랜잭션을 공격 대상인 채굴 노드들에게 제공하여 블록체인에 추가하게 한다. 이 노드들은 계속 블록을 생성하며 공격자의 트랜잭션이 들어있는 블록이 컨펌되도록 한다. 판매자는 블록이 컨펌되는 것을 보고 상호 물품을 제공하지만 이후 공격자가 격리된 노드들이 만든 블록체인을 전체 네트워크에 공유하면 이클립스 채굴자 장부가 폐기되고 판매자는 빈손이 된다.

이클립스 공격을 막기 위해 무작위로 피어 노드를 선택하여 공격자가 대상을 선택하기 어렵게 하거나, 노드가 다른 노드와 마주치는 대로 상대 노드에 대한 정보를 저장하여, 해당 노드가 네트워크를 떠났다가 재접속했을 때 이전에 연결한 정직한 노드와 피어 관계를 지속하게 한다. 노드가 더 많은 피어에 연결되게끔 하여 정직한 노드에게 연결될 가능성을 높이는 방법도 있다.


이기적 채굴 독점 (selfish mining)

채굴을 완료했지만 채굴 결과를 네트워크에 전파하지 않고 숨겨두고 있다가 다른 노드들의 네트워크 점유율이 공격자의 점유율을 넘어서려고 할 때 쌓아둔 블록을 네트워크에 전파하여 높은 점유율을 지속적으로 유지하여 채굴 보상을 독점하는 공격이다.


블록 보류 공격 (block withholding attack)

공격자의 해시파워가 다른 노드들보다 우위에 있을 경우, 채굴한 블록을 전파하지 않고 다음 블록을 계속 채굴해나간다. 공격자는 숨겨둔 블록의 길이를 길게 유지하고 특정 시점에 암호화폐 인출을 실행하고 이후 숨겨둔 긴 블록을 한번에 공개한다. 공격자가 인출 거래를 실행한 정당한 블록체인은 공격자가 숨겨둔 블록체인보다 짧기 때문에 거래 내역이 사라지면서 차감된 암호화폐가 다시 돌아온다.


디도스 공격

트랜잭션을 검증하는 데 일정한 시간이 필요한 블록체인의 특성에 따라, 무한히 반복하는 허위 트래픽이 네트워크에 진입하게 되면 정당한 트랜잭션의 시간이 무한히 증가하게 되면서 정해진 서비스를 제공할 수 없게 된다. 무한 루프에 빠지게 하거나 거래 검증을 위한 조건을 부풀리는 방식으로 공격할 수 있다.


DNS/BGP 하이재킹

일반 사용자가 공격자의 가짜 시스템이나 웹사이트를 정식 사이트로 착각하게 만들어 접속을 유도한 뒤, 위조된 서버 위치에서 사용자가 스스로 중요 정보를 입력하거나 특정 반응을 하게끔 유도하여 정보를 유출시키는 피싱 공격이다.



📌 Reference
https://academy.binance.com/ko/articles/what-is-a-dusting-attack
https://bitkr.com/crypto-kr/%EC%95%94%ED%98%B8%ED%99%94%ED%8F%90-%EB%8D%94%EC%8A%A4%ED%8A%B8-%EA%B3%B5%EA%B2%A9/
https://academy.horizen.io/technology/advanced/attacks-on-blockchain/

profile
멋쟁이 코린이
post-custom-banner

0개의 댓글