2024 SWLUG/논문 분석

3. 스마트 컨트랙트 보안 취약점 분석 및 보안 자동화 모델

un_plugged 2024. 5. 22. 14:13

스마트 컨트랙트 보안 취약점 분석 및 보안 자동화 모델.pdf
0.69MB

 

▶논문 선정 이유

이번 논문 분석은 보안 취약점에 관련된 주제를 하고 싶었다. 이와 관련된 다양한 논문을 보던 중 블록체인과 스마트 컨트랙트라는 개념을 알게 되었다. 블록체인은 원래 알고 있었는데 자세히 알진 못했고 스마트 컨트랜트는 나에겐 생소한 개념이라 배워보고 싶어 이 논문을 선정하였다.

▶블록체인과 스마트 컨트랙트

블록체인 기술

여러 컴퓨터에 분산되어 데이터를 저장하는 기술

  • 디지털 거래의 투명성과 무결성(데이터의 정확성, 일관성, 유효성 유지) 제공
  • 각 데이터 블록이 이전 블록에 대한 암호화된 참조를 포함하여 "체인"을 형성
  • 중앙집중식 서버 없이도 정보의 안전성 유지
  • 이더리움 블록체인 : 블록체인 기술을 기반으로 스마트 계약 기능을 구현하기 위한 분산 컴퓨팅 플랫폼이자 플랫폼의 자체 통화명.

-> 튜링 완전성을 갖춘 스마트 컨트랙트를 통해 다양한 분야에서 혁신적인 응용 프로그램 개발 가능

튜링 안전성: 어떤 프로그래밍 언어나 추상 기계가 튜링 기계와 동일한 계산 능력을 가짐

튜링 기계: 수학적 모형의 일종으로, 특수한 테이프를 기반으로 작동하는 기계

튜링 기계 작동 방식 묘사

이더리움 블록체인의 계층적 구조

응용 계층
합의 계층
데이터 계층
네트워크 계층

위의 표는 이더리움 블록체인의 여러 계층이다.

  1. 응용 계층: 사용자가 직접 상호 작용
  2. 합의 계층: 네트워크의 모든 참가자의 합의 메커니즘이 구현됨
  3. 데이터 계층: 블록 체인의 데이터 구조 관리
  4. 네트워크 계층: P2P 네트워크 연결을 통해 데이터 전파

P2P(Peer-to-Peer) : 네트워크로 같이 연결되어 있는 컴퓨터들이 클라이언트와 서버의 기능을 하는 네트워크를 의미한다. (데통네 수업에서 배웠지만 한번 더 복습!)

이더리움 블록체인의 블록 구조

각 블록은 이전 블록의 해시, 타임스탬프, 머클 루트, 논스로 구성된다.

① 각 블록은 이전 블록의 해시를 사용하여 다른 블록과 연결

해시: 입력 데이터를 고정된 길이의 데이터로 변환된 값

② 타임스태프: 각 블록이 생성되는 시간으로 트랜잭션의 순서를 추적하고 검증

③ 머클 트리: 모든 트랜잭션의 해시를 요약하여 하나의 해시값으로 집약

④ 논스: 작업 증명과 합의 알고리즘에서 사용하는 값

작업 증명(PoW. Proof of Work): 목표값 이하의 해시를 찾는 과정을 무수히 반복함으로써 해당 작업에 참여했음을 증명하는 방식의 합의 알고리즘

이더리움 블록체인 블록구조

스마트 컨트랙트

블록체인 기술의 핵심 구성 요소로 계약 조건이 충족될 때 자동으로 계약 내용을 이행하도록 설계된 자동 실행 프로그램 또는 알고리즘이다.

  • 트랜잭션에 대한 모든 정보가 포함되어 있음

트랜잭션: 블록체인이라는 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위

  • 기존 계약과는 다르게 제 3자가 관여하지 않고 암호화된 거래를 참여자 간 공유하기 때문에 신뢰성과 투명성이 보장
  • 블록체인의 불변성, 분산성, 투명성을 활용하여 신뢰할 수 있고 변경 불가능한 방식으로 계약 조건을 자동으로 실행

-> 이러한 스마트 컨트랙트는 아래와 같은 단점을 가진다.

① 한 번 블록체인에 배포되면 수정할 수 없어 이를 악용한 악의적인 공격 발생(특히 블록체인 네트워크는 공개적으로 접근 가능!)

② 스마트 컨트랙트 내의 데이터가 블록체인에 영구적으로 기록되므로 개인 정보가 포함된 경우 이를 적절히 보호하지 못할 위험 있음

스마트 컨트랙트의 동작 과정

1. 스마트 컨트랙트 설계 및 배포

① 스마트 컨트랙트가 수행할 작업, 처리할 데이터의 종류, 스마트 컨트랙트의 실행 조건 정의

② 작성된 스마트 컨트랙트는 마이너들(채굴자. 블록을 생성하는 대가로 비트코인을 받음)에 의해 블록체인 네트워크 배포

※ 이더리움에서는 솔리디티(Solidity) 언어를 사용하여 프로그래밍 -> 솔리디티 컴파일러(solc)를 통해 바이트코드로 변환 -> 블록에 포함되어 이더리움 가상 머신(EVM)에서 실행

  • 솔리디티 언어: C++, Python, 그리고 JavaScript의 영향을 받아 만들어졌습니다
  • 이더리움 가상 머신(EVM): 이더리움 스마트 컨트랙트의 바이트코드를 실행하는 32바이트 스택 기반의 실행 환경

2. 사용자 트랜잭션 전송

① 사용자는 블록체인 네트워크에 트랜잭션 전송

-> 이 트랜잭션은 스마트 컨트랙트의 특정 함수 호출, 특정 조건 충족을 위한 데이터 포함

② 블록체인 노드들에 의해 검증되고 블록에 포함

③ 조건이 충족되면 스마트 컨트랙트는 자동으로 계약 조항 이행(사람의 개입X)

3. 스마트 컨트랙트 실행과 기록

  • State change: 함수 실행의 결과로 스마트 컨트랙트 계약의 데이터나 상태가 변경
  • Triggered Events: 상태 변경에 따라 스마트 컨트랙트에서 이벤트가 트리거
  • 이벤트: 계약 외부의 참여자들에게 특정 사건이 발생했음을 알릴 때 사용

① 스마트 컨트랙트에 의한 모든 트랜잭션 결과는 블록체인에 기록됨

② 트랜잭션이 완료되면 트랜잭션과 관련된 가스 비용이 계산 및 지불되고 네트워크를 통해 비용 지불 결과 표시

-> 이 단계에서 블록체인 네트워크는 트랜잭션의 결과를 검증하고, 블록에 포함시켜 네트워크 전체에 분산시킴

스마트 컨트랙트 동작 과정

▶스마트 컨트랙트의 보안 취약점 분석

스마트 컨트랙트 설계 및 배포 단계의 취약점

1. 코드 취약점: 프로그래밍 오류나 논리적 결함으로 인한 보안 취약점

재진입 공격(Reentrancy Attack): 스마트 컨트랙트 내의 동일한 함수를 여러 번 호출하여 예상치 못한 방식으로 동작하게 만듦

오버플로 공격: 변수가 허용하는 최대값을 초과하여 데이터 손상

-> 이러한 오류를 검출하기 위한 다양한 방식의 기존 연구들

  • 정적 분석: 코드의 구문과 구조 검사
  • 동적 분석: 테스트 환경에서 스마트 컨트랙트 코드를 실행하여 오류나 취약점을 찾는 기법으로 정적 분석에서 놓칠 수 있는 실행시간 오류 탐지
  • 형식적 검증: 수학적 방법을 사용하여 스마트 컨트랙트 코드가 특정 속성을 만족하는지 증명
  • 자동화된 퍼지 테스트 기법: 비정상적인 데이터를 어플리케이션에 전달하여 에러를 유도하는 테스트
  • 코드리뷰 및 감사방법: 전문가가 코드를 직접 검토하여 논리적 오류나 설계 결함을 찾는 방법

2. 프라이버시 노출

① 스마트 컨트랙트는 모든 거래 내용을 블록체인에 공개적으로 기록하는데 투명성을 제공하는 동시에 사용자의 민감한 정보가 외부에 노출될 수 있음

② 스마트 컨트랙트 실행 시 블록체인에 개인정보 기록되는데 불변성의 특징으로 한 번 기록된 데이터는 삭제되지 않아 개인정보 보호와 데이터 파기에 관한 문제 발생할 수 있음

-> 이러한 오류를 검출하기 위한 다양한 방식의 기존 연구들

  • 제로 지식 증명: Zero-Knowledge Proof(ZKP). 증명자가 자신이 알고 있는 지식과 정보를 공개하지 않으면서 그 지식을 알고 있다는 사실을 증명
  • 동형 암호화: 데이터를 암호화된 상태에서 연산할 수 있는 암호화 방법
  • 다자간 계산: Multi-Party Computation(MPC). 원래의 비밀 정보를 나누거나 조합하는 방식이 아니라 여러 참가자(사람 또는 기계)가 자신의 개별 비밀 정보를 공개하지 않고 함께 비밀적인 연산을 수행하는 암호학적인 방식
  • 사이드체인: 사이드체인만의 독립된 노드를 구성하지 않고, 기존 블록체인의 메인체인 노드에 사이드체인의 노드가 추가되는 방식으로 작동
  • 오프체인: 블록체인 이외의 외부 거래 내역을 기록하는 방식
  • 프라이버시를 보장하는 암호화 기술을 내장한 스마트 컨트랙트 개발

사용자의 트랜잭션 전송단계의 취약점

피싱 공격: 사용자를 속여 중요 정보(비밀번호, 개인키)를 획득하려는 사기성 공격

네트워크 스니핑: 사용자가 트랜잭션을 전송할 때, 공격자가 데이터를 가로채는 네트워크 기반의 공격

트랜잭션 조작: 공격자가 트랜잭션 내용을 변경하여 스마트 컨트랙트의 동작을 의도와 다르게 조작하는 행위

-> 이에 대한 보안 기법

  • SSL/TLS와 같은 안전한 프로토콜을 이용하여 데이터를 암호화 및 데이터의 기밀성, 무결성 보장

SSL: Secure Socket Layer. 인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜

TLS: Transport Layer Security. 온라인 네트워크에서 데이터를 안전하게 주고받기 위한 암호화 프로토콜

  • 디지털 서명 사용: 발신자가 자신의 개인키를 사용하여 트랜잭션에 서명 -> 이 서명은 트랜잭션의 무결성과 발신자의 인증을 보장하는 데에 사용

멀티팩터 인증(MFA. Multi-Factor Authentication): 사용자가 온라인 서비스에 로그인할 때 신원 확인을 위해 다양한 인증 요소를 사용하는 보안 기술

스마트 컨트랙트 실행 및 기록 단계의 취약점

가스 한도 문제

  • 가스(Gas): 스마트 컨트랙트 실행에 '가스(Gas)'라고 불리는 단위가 소모
  • 가스 한도 문제: 스마트 컨트랙트 실행에 필요한 가스가 한도를 초과하여 작업이 완료되지 못하는 문제

-> 스마트 컨트랙트 실행이 중단되며, 서비스 거부(DoS) 공격의 원인

타임스탬프 조작: 스마트 컨트랙트가 블록의 타임스탬프에 의존할 때, 타임스탬프 조작으로 스마트 컨트랙트의 실행 결과에 영향을 미치는 행위

-> 특정 트랜잭션이 유리하게 처리되거나 특정 조건이 만족되는 등의 문제 발생

무단 접근 및 권한 남용: 스마트 컨트랙트의 기능에 접근 권한이 없는 사용자가 스마트 컨트랙트를 실행하거나, 권한이 있는 사용자가 그 권한을 남용

블록체인 데이터 변조: 블록체인에 기록된 데이터가 불법적으로 변경되거나 삭제되는 행위

-> 저장된 정보의 신뢰성이 저하, 트랜잭션 기록의 진실성을 손상, 블록체인 네트워크 전체의 신뢰도 하락

-> 다양한 보안 기법

  • 스마트 컨트랙트 코드의 충분한 테스트 및 시뮬레이션을 통해 오류를 미리 발견하도록 하고 수정
  • 코드 최적화 작업
  • 타임 스탬프 조작 방지를 위해 블록체인의 합의 메커니즘과 규칙을 활용

-> 이미 블록체인 네트워크는 타임 스탬프 조작을 어렵게 만드는 분산된 합의 프로세스가 있음

  • 역할 기반의 액세스 제어(RBAC)기법: 조직 내에서의 사용자의 역할만을 기반으로 데이터에 대한 사용자 액세스를 허용하거나 제한
  • 접근 제어목록(ACL) 정책: 사용자가 자원에 대해 수행할 수 있는 조작 및 이 조작을 수행할 수 있는 사용자를 제어

STRIDE를 적용한 스마트 컨트랙트 취약점

위협 모델링 기법: 정보 자산의 보안 위험을 식별, 정량화, 해결하기 위한 구조적 접근 방식

STRIDE: 아래 사진의 약어이며 아래 6가지에 대한 위협을 측정한다.

STRIDE

STRIDE를 적용한 스마트 컨트랙트 취약점

▶스마트 컨트랙트의 보안 자동화 모델

스마트 컨트랙트 설계 및 배포 단계의 보안 모델

1. 스마트 컨트랙트에서 처리될 민감한 데이터를 식별하고, 이에 대한 데이터 처리 방법 및 프라이버시 정책을 결정

2. 위의 데이터는 데이터베이스(DB)에서 암호화하여 저장됨

3. 누가 어떤 데이터에 접근할 수 있는지 접근 제어 목록(ACL)을 정의하고, 이를 인증서버(Authentication Server)에 적용하여 데이터 접근을 관리

-> 역할기반 액세스 제어(RBAC) 기법을 사용

인증 서버: 네트워크 상에서, 모든 사용자 또는 서버에 대한 신원확인 및 신원증명을 하도록, 비밀사항을 중앙집중식 DB에 저장 관리하는 제3의 신뢰 받는 인증용 서버

4. 개발된 스마트 컨트랙트는 감사 도구(Audit Tool)를 사용하여 코드 오류 및 프라이버시 취약점을 검사하고 보안 감사를 수행

5. 테스트 시스템(Test System)을 통해 스마트 컨트랙트가 코드 오류가 없는지 확인하고 프라이버시 정책 및 관련 법규를 준수하는지 확인

6. 테스트를 마친 스마트 컨트랙트는 블록체인 네트워크에 배포

-> 민감한 데이터는 블록체인 외부의 데이터베이스에 저장되며, 블록체인 상에서는 참조만 가능하게 함

스마트 컨트랙트 설계 및 배포 보안 모델

트랜잭션 전송 단계의 보안 모델

1. 사용자가 트랜잭션을 전송할 때, 전송되는 데이터는 SSL/TLS와 같은 암호화 프로토콜을 통해 보호됨 ->데이터의 안전성 확보!

2. 인증 서버는 여러 단계의 인증(비밀번호, OTP, 생체 인증 )을 요구

OTP: One Time Password. 인터넷뱅킹에서 특정 거래를 하려고 할때 사전에 등록한 이메일로 1회용 비밀번호가 보내지는 방식

3. 사용자는 이러한 인증 요구 사항에 따라 필요한 정보를 제공하고, 인증서버는 제공된 정보를 검증

-> 인증에 실패할 경우, 사용자에게 인증실패 메시지가 전송되며 해당 트랜잭션은 중단됨

4. 인증 서버는 또한 사용자 계정의 트랜잭션 한도와 규칙을 적용하여 검토하고, 사용자가 입력한

스마트 컨트랙트 주소(ETH)의 유효성을 확인

5. 모든 검증이 완료되면 해당 트랜잭션은 블록체인에 기록되어 처리됨

트랜잭션 전송 보안 모델

스마트 컨트랙트 실행 및 기록 단계의 보안 모델

1. 트랜잭션이 스마트 컨트랙트에 전송되면, 스마트 컨트랙트는 트랜잭션이 설정한 규칙과 조건에 부합하는 지 검증

-> 오류가 검출되면 트랜잭션 실행은 중단됨

2. 트랜잭션이 스마트 컨트랙트의 요구사항을 충족하면, 블록체인 네트워크는 트랜잭션의 가스 한도를 계산

3. 가스 한도 내 에서 실행 가능한 경우, 트랜잭션은 블록체인 네트워크에 의해 자동으로 처리되며, 타임스탬프와 블록 해시는 합의 메커니즘에 의해 관리됨

-> 블록체인에 기록된 트랜잭션은 변경할 수 없으며, 모든 블록체인 네트워크 참가자에게 정보의 정확성을 보증!

스마트 컨트랙트 실행 및 기록 보안 모델

▶배운점 및 느낀점

블록체인과 스마트 컨트랙트에 관한 논문을 분석하면서 잘 알지 못했던 이 두 개념을 전반적으로 알게 되었다. 전공 수업 시간에 배운 개념들도 있지만 생소한 개념들도 꽤 있어 열심히 검색하며 배웠다. 아직 전공 지식이 부족한 것 같아 다양한 분야를 더 열심히 공부해야겠다!