← 최신 논문
💻 computer science

Assessing Vulnerability in Smart Contracts: The Role of Code Complexity Metrics in Security Analysis

본 연구는 솔리디티(Solidity) 스마트 계약의 특정 취약점과 개별 소프트웨어 복잡도 지표 간의 상관관계는 낮게 나타나지만, 이들을 종합적으로 분석할 경우 보안이 확보된 코드와 취약한 코드를 효과적으로 구분할 수 있으며, 취약한 계약들이 일관되게 더 높은 평균 복잡도 점수를 보인다는 점을 입증한다.

원저자: Masoud Jamshidiyan Tehrani

게시일 2026-01-26
📖 3 분 읽기☕ 가벼운 읽기

원저자: Masoud Jamshidiyan Tehrani

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

상상해 보세요. **스마트 컨트랙트(Smart Contract)**는 블록체인 위에 구축된, 스스로 실행되는 자판기와 같습니다. 일단 돈을 넣고 버튼을 누르면 자동으로 간식을 내어줍니다. 당신은 나중에 기계 내부의 톱니바퀴를 바꿀 수 없습니다. 그것은 "불변(immutable)"하기 때문입니다. 만약 톱니바퀴에 결함이 있다면, 해커가 그 안의 돈을 모두 훔쳐갈 수 있으며, 기계를 통째로 새로 만들지 않고서는 이를 고칠 방법이 없습니다.

이 논문은 기계가 배포되기 에 이러한 고장 난 톱니바퀴를 찾아내는 방법에 관한 것입니다. 연구진들은 다음과 같은 간단한 질문을 던졌습니다. "설계도가 얼마나 복잡한지만 보고도 그 자판기가 고장 날 가능성이 있는지 알 수 있을까?"

다음은 일상적인 비유를 사용한 연구 결과의 요약입니다:

1. 핵심 아이디어: 복잡성은 "적신호"이다

연구진은 코드가 얼마나 "지저le지거나" "복잡한지"를 측정하는 21가지의 서로 다른 방법을 살펴보았습니다. 이 지표들은 다음과 같은 것들을 측정합니다:

  • SLOC (소스 코드 라인 수): 설명서가 몇 페이지인가?
  • 중첩(Nesting): "만약 이렇다면, 저렇다"라는 식의 상자 안에 상자가 몇 겹으로 쌓여 있는가? (러시아 인형처럼)
  • 결합도(Coupling): 이 기계가 작동하기 위해 다른 기계들과 얼마나 많이 대화해야 하는가?

연구 결과: 그들은 복잡한 설계도는 대개 고장 난 기계라는 것을 발견했습니다.
해킹을 당한(취약한) 컨트랙트들을 살펴보았을 때, 그 설계도들은 안전한 컨트랙트의 설계도보다 거의 항상 더 복잡하고, 길고, 뒤엉켜 있었습니다.

2. "수정구슬"의 문제 (개별 지표)

연구진은 하나의 특정 측정값이 해킹을 예측할 수 있는지 확인하려 했습니다.

  • 비유: 자동차의 컵 홀더 개수만 보고 자동차가 사고가 날지 예측하려는 것과 같습니다.
  • 결과: 잘 작동하지 않았습니다. 어떤 단일 지표(예를 들어 단순히 코드 줄 수만 세는 것)도 완벽한 "수정구슬"이 될 수는 없었습니다. 만약 줄 수만 본다면, "이것은 반드시 해킹당할 것이다"라고 확실하게 말할 수 없습니다. 연관성은 존재했지만, 그 연결 고리는 약했습니다.

3. "팀워크"의 성공 (결합 지표)

하지만 모든 측정값을 함께 살펴보았을 때, 그림은 매우 명확해졌습니다.

  • 비유: 소금통만 맛봐서는 국이 짠지 알 수 없지만, 국 전체를 맛본다면 얼마나 짠지 정확히 알 수 있습니다.
  • 결과: 하나의 지표는 충분하지 않았지만, 지표들의 조합은 안전한 컨트랙트와 위험한 컨트랙트를 구분해 내는 데 매우 뛰어났습니다. "취약한" 컨트랙트들은 안전한 컨트랙트에 비해 전반적으로 높은 점수(더 많은 코드 줄, 더 깊은 중첩, 더 많은 연결)를 일관되게 기록했습니다.

4. 놀라운 예외 사항들

"복잡함 = 더 큰 위험"이라는 규칙에 어긋나는 세 가지 사항이 있었습니다:

  1. 주석 (CLOC): 안전한 컨트랙트는 더 많은 주석(프로그래머가 코드를 설명하기 위해 작성한 메모)을 가지고 있었습니다. 취약한 컨트랙트는 주석이 더 적었습니다.
    • 교훈: 설계도에 메모를 남기는 것이 기계를 더 안전하게 만드는 데 도움이 되는 듯합니다.
  2. 자손 (NOD): 안전한 컨트랙트는 더 많은 "자손"(버전 또는 파생 컨트랙트)을 가지고 있었습니다. 취약한 것들은 더 적었습니다.
  3. 매개변수 (Parameters): 취약한 컨트랙트는 평균적으로 입력값/매개변수가 약간 더 적었습니다.

5. 이것이 개발자들에게 의미하는 바

논문은 복잡성이 해킹의 원인(바이러스 같은 것)은 아니지만, 매우 강력한 경고 신호라고 결론짓습니다.

  • 비유: 엉킨 전선, 노출된 파이프, 혼란스러운 평면도를 가진 집을 본다면, 그 집이 반드시 불이 날 것이라고 확신할 수는 없지만, 깔끔하고 정리된 배선을 가진 집보다 훨씬 더 불이 날 가능성이 높다는 것을 알 수 있습니다.
  • 조언: 개발자는 코드를 단순하게 유지하도록 노력해야 합니다. 만약 컨트랙트가 너무 복잡해지고 있다면, 이는 멈춰서 보안 구멍을 점검하라는 신호입니다. 또한, 주석을 더 많이 작성하십시오. 데이터에 따르면 잘 문서화된 코드가 더 안전합니다.

요약

이 논문은 복잡성이 스마트 컨트랙트의 위험을 나타내는 강력한 지표임을 증명합니다. 해킹을 예측하기 위해 단 하나의 숫자만을 믿을 수는 없지만, 코드의 전반적인 "지저분함"을 살펴본다면 복잡성을 완전히 무시했을 때보다 훨씬 더 잘 위험한 컨트랙트를 찾아낼 수 있습니다. 이는 감사인(Auditor)과 개발자들이 어떤 컨트랙트를 가장 주의 깊게 검사해야 할지 우선순위를 정하는 데 도움을 주는 도구입니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →