이쪽으로 오세요. 스마트 컨트랙트 취약점, 딥러닝으로 스마트하게 찾기

Luke Park
CURG
Published in
8 min readApr 3, 2021

Lutz, Oliver, et al. “ESCORT: Ethereum Smart COntRacTs Vulnerability Detection using Deep Neural Network and Transfer Learning.”

임의의 프로그램인 ‘스마트 컨트랙트’를 블록체인상에서 배포 및 실행할 수 있게 되면서 탈중앙화 환경에서 여러 일들을 할 수 있게 되었다. 그러나 컴퓨터공학에서 모든 gain에는 트레이드-오프가 있는 법. 새로운 공격 요소들이 등장하게 되었다.

블록체인 레이어는 막강한 (해시나 자본 등의) 파워와 합의 알고리즘 등으로 보호받기 때문에 공격이 힘들지만, 스마트 컨트랙트는 개발자의 태만이나 실수로부터 취약점이 쉽게 발생하기 때문이다.

따라서 컨트랙트를 블록체인에 배포하기에 앞서, 다양한 유형의 취약점을 사전에 검출하는 것이 중요하다. 그것도 효율적인 방법으로 말이다.

신경망

이번 포스팅에서 리뷰할 논문인 ‘ESCORT’는 깊은 신경망(DNN)을 이용해 이더리움 스마트 컨트랙트의 취약점을 검출하고자 했다. 통상, 전통적인 방법이 아니라 신경망을 이용하게 되면 정확하지는 않지만 확장성 있고 일반화된 솔루션을 구할 수 있는데, ESCORT 역시 그러한 측면을 갖추고 있다.

ESCORT는 크게 두 파트로 구분되는 multi-output 신경망 구조를 갖췄는데, 이게 무슨 말인고 하니:

  1. 특징 추출기(feature extractor)라 불리는 신경망이 존재한다. 이 신경망은 스마트 컨트랙트 바이트코드를 입력으로 하고 그 Semantics을 잘 나태내도록 학습한 뒤, 임베딩된 출력을 반환한다. 쉽게 말하자면 입력 스마트 컨트랙트의 구문 및 의미를 잘 나타내는 벡터를 출력한다는 것이다.
  2. 여러 가지(branch) 구조의 신경망이 존재한다. 독립적인 신경망이 여러 개 있다는 의미이다. 각 신경망 가지는 특정 취약점을 검출해내는 방법을 학습한다. 이들의 입력은 파트 1의 특징 추출기의 출력이며, 최종 출력은 해당 취약점을 포함할 확률이 된다.

그림으로 보면 좀 더 이해가 쉽다:

위가 파트 1, 아래가 파트 2에 해당하는 신경망이다. 좀 더 자세히 살펴보자.

파트 1 신경망은 입력한 스마트 컨트랙트의 semantic 그리고 syntactic 정보를 추출하는 방법을 배운다. 최종적으로 출력하는 것은 출력 레이어의 노드 수 만큼의 차원을 가지는 벡터이며(신경망의 각 노드가 가지는 출력이 실수임을 생각해보면 당연한 얘기이다), 정보를 임베딩하고 있다. 이런 임베딩을 통해 얻을 수 있는 강점은 크게 두 가지이다.

  1. 입력은 코드이기 때문에, 크기에 제한이 없다. 사실 이더리움 스마트 컨트랙트는 블록 가스 제한으로부터 크기에 제한이 있다고 볼 수도 있겠는데, 이를 감안해도 너무나도 큰 값이 될 수 있다. 임베딩 과정을 거치면 표현을 정해진 크기의 벡터로 효과적/효율적으로 압축할 수 있다.
  2. 유사한 스마트 컨트랙트끼리는 유사한 벡터를 가진다. 다시 말해 압축을 거쳤음에도 불구하고 원래의 정보를 그다지 훼손하지 않는다는 말이다. 오히려 원본 바이트코드보다 효과적으로 정보를 전달한다.

어찌 보면 파트 1 신경망은 ‘프로그래밍 언어’를 다룬다고 볼 수 있는데, 이 역시 ‘언어’이므로 자연어처리의 방법을 활용한다. 본 논문에서는 GRU 레이어를 사용해 신경망을 구성했다.

파트 2 신경망은 파트 1 신경망의 출력을 입력으로 삼는다. 각 가지들은 서로 간 직접적인 의존성을 가지고 있지 않다. 오직 같은 특징 추출기를 가진다는 점에서 간접적으로 연관되어 있을 뿐이다. 이들 각각은 컨트랙트 바이트코드(가 임베딩된 벡터)를 통해 저마다의 취약점을 찾도록 학습한다. 정확하게는 저마다의 취약점이 있을 확률을 0~1 사이의 값으로 반환한다. 따라서 최종 출력 노드는 1개이며 sigmoid를 활용한다.

실제 ESCORT에서 사용한 신경망 구조는 다음과 같다:

원 논문 Fig. 6에서 발췌

가장 오른쪽의 붉은 색으로 표시된 신경망은 기존에 없던 신경망을 의미하며, 새롭게 발견된 취약점에 대해 추가된 가지이다. 스마트 컨트랙트 취약점은 연구를 통해 끊임없이 새로 발굴되고 발견된다. 따라서 항상 새로운 취약점 검출 방법을 업데이트해야 하는데, ESCORT는 이러한 측면에서도 강점을 가진다.

신경망이 아닌 전통적 기존 스마트 컨트랙트 보안 분석 도구인 Oyente나 Mythril 등을 생각해보자. 이들은 새로운 취약점 검출을 가능케 하기 위해서는 프로그래머들의 부단한 노력이 요구된다.

그러나 ESCORT는 전이 학습(Transfer Learning)의 강력함을 십분 활용할 수 있다. 특징 추출기는 모든 신경망 가지의 공통부분에 해당하고 이미 잘 학습되어 있으니, 새로운 취약점을 검출하기 위한 가지를 추가해도 이미 절반은 먹고 들어가는 셈이다.

데이터

이러한 궁금증이 생긴 독자들도 있을 것이다.

특정 취약점을 찾는 기능을 각 가지들이 수행하는데, 어떤 데이터로부터 학습하는가? 또한, 그러한 데이터를 쉽게 구할 수 있는가?

신경망에서 가장 중요한 것은 데이터이다. 그것도 이러한 지도 학습에서는 잘 레이블링된 (입력, 출력) 쌍의 데이터가 많이 필요하다. 본 학습에서 필요한 데이터는 간단히 말하자면 (바이트코드, 취약점 리스트) 쌍인데, 이를 어디서 얻을 것인가?

ESCORT의 저자들은 이러한 문제를 다루기 위해 ContractScraper라는 프로그램을 또 하나 만들었다. ContractScraper는 이더리움 블록체인으로부터 스마트 컨트랙트를 추출하고, Oyente, Mythril, Dedaub라는 스마트 컨트랙트 취약점 도구를 통해 취약점을 검출하는 end-to-end 과정을 포괄하는 스마트 컨트랙트이다. 이를 통해 총 1,156,611개의 스마트 컨트랙트를 레이블링했고 학습을 진행했다고 한다.

신경망 출력과 레이블에 대해 좀 더 자세히 다뤄보자. 결국 ESCORT가 하는 일은 여러 취약점의 확률값 검출이므로 multi-class 문제라 생각할 수 있다. 그러나 실상은 multi-label 문제이다. Multi-class과 multi-label의 차이점은 원 논문에서의 예시를 통해 명쾌히 설명하도록 하겠다.

(black, blue, red)의 세 가지 색상 분류와 (jeans, dress, shirt, shoes)의 카테고리 분류를 가진 옷 데이터셋이 있다. 분류 업무를 수행하는 신경망을 만들려면, 출력층을 어떻게 구성해야 할까?

  • Multi-class: 가장 쉽게 생각할 수 있는 방법은 색상에 해당하는 3, 카테고리에 해당하는 4를 곱해 12개 클래스로 분류 작업을 수행하는 것이다. (black, dress), …, (red, jeans) 처럼 3X4=12 쌍을 만드는 것이다. 신경망 출력층의 12개 노드 각각은 해당하는 (색상, 카테고리) 쌍일 확률을 나타내게 된다.
  • Multi-label: 아니면 신경망을 두 개로 나누는 방법이 있다. 한 신경망은 색상 분류 작업만을 수행하고, 다른 신경망은 카테고리 분류 작업만을 수행하는 것이다.

이것도 그림으로 살펴보자:

원 논문 Fig. 2에서 발췌

좌측이 multi-class에 해당하는 구조, 우측이 multi-label에 해당하는 구조이다.

어느 구조가 더 우수하다고 단정 지을 수는 없다. 그러나 적어도 본 논문에서 해결하고자 하는 스마트 컨트랙트 취약점 검출에 대한 업무에서는 multi-label 구조가 합리적으로 보인다. 왜냐하면 각 취약점 간 상관관계도 거의 없을 것으로 예상될뿐더러, 심지어 새로운 취약점이 추가로 나올 수도 있기 때문이다.

이를 통해서 저자들은 6개의 주요 취약점에 대해 평균 F1 점수 95%의 수치를 달성했고, 컨트랙트당 오직 0.02초만을 소요했다고 한다. 여기에 새로운 취약점을 추가했을 때, 전체 신경망 재학습 없이 전이 학습을 통해 93%의 F1 점수를 달성할 수 있었다고 한다. 간단히 말해서 빠르게 잘 취약점을 찾아낼 수 있으며, 새로운 취약점이 발견되면 대응도 쉽게 할 수 있다는 것이다.

본 글에서는 인공지능에 집중해 신경망과 데이터를 중심으로 ESCORT를 살펴봤다. 다음 글에서는 블록체인 관점에서 ESCORT 논문을 서술할 예정이다. 취약점에 대한 얘기와 실험 분석까지 포함해서.

만일 다음 글 발행까지 기다리기 힘드시다면, 스마트 컨트랙트의 주요 취약점이나 검출을 위한 도구들 그리고 실험 분석 등이 원 논문에 잘 설명되어 있으니 읽어보시길 추천한다.

저자

박상현 (Luke Park)

🏠 서울대학교 가상머신 및 최적화 연구실
🖥 https://github.com/lukepark327
✉️ lukepark327@gmail.com

--

--