Malicious Code Detection in Smart Contracts via Opcode Vectorization
이 논문은 스마트 컨트랙트의 악성 코드를 탐지하기 위해 오프코드(opcode)를 분류 및 단순화한 후, 분류기 학습을 위한 특징 추출을 최적화하고자 가공되지 않은 오프코드와 처리된 오프코드 모두에 대해 N-Gram과 TF-IDF 벡터화 방식의 효과를 비교하는 머신러닝 기반의 접근 방식을 제안한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
블록체인을 사람들이 "스마트 컨트랙트"를 작성하는 거대하고 공개된 디지털 장부라고 상상해 보세요. 이 컨트랙트를 법적 문서가 아니라 자율 주행 자판기라고 생각하십시오. 돈을 넣으면 기계가 규칙을 확인하고, 모든 것이 올바르면 간식을 내어줍니다. 만약 기계 내부의 코드가 고장 났거나 숨겨진 함정(악성 코드)이 있다면, 돈을 잃거나 기계 자체가 멈춰버릴 수도 있습니다.
이 논문은 마치 보안 요원 팀이 누군가 피해를 입기 전에 고장 나거나 조작된 자판기를 찾아내는 방법을 알아내려는 것과 같습니다. 그들이 어떻게 이 일을 수행했는지 아주 쉽게 설명해 드리겠습니다.
1. 문제점: 너무 많은 언어
스마트 컨트랙트는 코드로 작성되지만, 블록체인은 인간이 쓰는 "영어" 버전(소스 코드)을 읽지 못합니다. 블록체인은 오직 **오프코드(Opcodes)**라고 불리는 매우 특정한 로봇 언어만을 이해합니다.
- 비유: 컨트랙트를 하나의 레시피라고 상상해 보세요. 인간은 영어로 된 레시피("밀가루 두 컵을 넣으세요")를 읽습니다. 하지만 블록체인은 오직 화학적 명령 목록("성분 A와 성분 B를 혼합하라")만을 이해합니다.
- 문제: 이러한 화학적 명령은 수백 가지나 됩니다. 만약 이 명령들을 그냥 무작위로 나열하기만 한다면, 컴퓨터가 안전한 레시피와 독이 든 레시피를 구분하기란 매우 어렵습니다.
2. 해결책: 그룹화와 계수
저자들은 컴퓨터가 이 로봇 명령들을 단순한 숫자 리스트(벡터)로 변 변환하여 읽는 법을 가르치기로 했습니다. 이 과정은 세 단계로 진행되었습니다.
단계 A: 명령 그룹화 (단순화)
모든 명령을 각각 고유한 것으로 취급하는 대신, 유사한 것들을 하나로 묶었습니다.- 비유: 당신에게 32가지 종류의 "누르기(Push)" 버튼(Push1, Push2... Push32)이 있다고 상상해 보세요. 32개의 서로 다른 버튼을 일일이 기억하는 대신, 저자들은 이들을 모두 그냥 "누르기(Push)"라고 부르기로 했습니다. 이들은 "점프(Jump)"나 "수학(Math)" 같은 다른 그룹에 대해서도 똑같이 수행했습니다. 이를 통해 노이즈를 줄이고 리스트를 더 짧고 연구하기 쉽게 만들었습니다.
단계 B: 쌍(Pair) 살펴보기 (N-Gram)
그들은 단순히 개별 명령만 본 것이 아니라, 서로 연속해서 나타나는 명령의 쌍을 살펴보았습니다.- 비유: 레시피에서 "소금"이라는 단어를 보는 것은 흔한 일입니다. 하지만 "소금" 바로 다음에 "독"이라는 단어가 나온다면 그것은 위험 신호입니다. 그들은 이 쌍(예: "누르기" 다음에 "점프")을 관찰하여 컨트랙트의 흐름을 이해했습니다.
단계 C: 중요도 가중치 부여 (TF-IDF)
그들은 어떤 쌍이 실제로 중요한지를 파악하기 위해 수학적 기법을 사용했습니다.- 비유: 만약 거의 모든 안전한 레시피가 "섞은 후 붓기"라는 쌍을 사용한다면, 그 쌍은 특별하지 않습니다. 하지만 특정 명령 쌍이 오직 "독이 든" 레시피에서만 나타난다면, 그 쌍은 매우 중요한 단서가 됩니다. 그들은 희귀하고 의심스러운 쌍에는 높은 점수를 주고, 흔한 쌍에는 낮은 점수를 주었습니다.
3. 실험: 탐정 훈련시키기
컨트랙트를 이러한 숫자 리스트로 변환한 후, 그들은 다섯 가지 서로 다른 "탐정" 컴퓨터(의사결정 나무 및 랜덤 포레스트와 같은 머신러닝 모델)에 입력하여 악성 컨트랙트를 찾아낼 수 있는지 테스트했습니다.
- 결과: 그들은 두 가지 방식으로 실험했습니다.
- 방법 1: 가공되지 않은 원본 명령 리스트만 보는 방식.
- 방법 2: 위에서 설명한 것처럼 단순화된 쌍과 그 중요도 점수를 보는 방식.
- 결과: 두 번째 방법(쌍을 보는 방식)이 특정 탐정(의사결정 나무)에게는 약간 더 효과적이었지만, 전반적인 결과는 엇갈렸습니다.
4. 큰 장애물: 부족한 나쁜 예시들
저자들이 직면한 가장 큰 문제는 수학이 아니라 바로 데이터였습니다.
- 비유: 당신이 개에게 늑대를 구별하는 법을 가르치려 한다고 상상해 보세요. 당신은 개에게 양 사진 500장을 보여주었지만, 정작 가진 늑대 사진은 80장뿐입니다.
- 현실: 현실 세계에서 대부분의 스마트 컨트랙트는 안전합니다. 악성 컨트랙트는 드뭅니다. 연구에 사용할 수 있는 "나쁜" 컨트랙트의 수가 너무 적었기 때문에 컴퓨터 모델은 혼란을 겪었습니다. 양과 비교할 수 있는 "늑대"의 사진이 충분하지 않았기에, 컴퓨터는 늑대의 패턴을 학습할 수 없었습니다.
5. 미래: 더 큰 도서관 구축하기
저자들은 이들의 방식이 로봇 코드를 숫자로 번역하는 좋은 아이디어이긴 하지만, 완벽하게 작동함을 증명하기 위해서는 더 많은 데이터가 필요하다고 결론지었습니다.
- 향acy 계획: 그들은 인터넷에서 수천 개의 컨트랙트를 자동으로 수집하여 훨씬 더 큰 라이브러리를 만들기 위한 로봇(웹 크롤러)을 구축하고자 합니다. 또한, 알려진 "나쁜" 컨트랙트를 찾는 것이 매우 어렵기 때문에, 컴퓨터가 스스로 어떤 것이 나쁜지 추측하게 하는 "레이블이 없는(unlabeled)" 컨트랙트를 사용하여 컴퓨터를 가르치는 방법도 시도하고자 합니다.
요약하자면:
이 논문은 스마트 컨트랙트의 로봇 언어를 컴퓨터가 쉽게 비교할 수 있는 형식으로 번역하는 영리한 방법을 제안합니다. 명령의 쌍을 살펴보는 것이 도움이 된다는 것을 발견했지만, 세상에 "나쁜" 컨트랙트의 예시가 너무 적어 시스템을 효과적으로 훈련시키는 데 한계에 부딪혔습니다. 보안 요원이 완전히 신뢰받기 위해서는 더 많은 데이터가 필요합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.