디파이 공격의 상당수는 트랜잭션 하나로 끝나지 않습니다. 공격자는 컨트랙트를 배포하고, 시험해 보고, 자금을 빌리고, 가격을 움직인 다음에야 목표를 털어 가며, 이 과정이 몇 분에서 몇 시간에 걸치기도 합니다. 각 단계는 공개 블록체인에 흔적을 남깁니다. 런타임 모니터링은 그 흔적을 대응할 수 있을 만큼 빨리 읽어 내는 일입니다.
작동 방식
모니터링 시스템은 블록체인을, 그리고 흔히 블록에 포함되기를 기다리는 트랜잭션 대기열까지 지켜보며 공격과 연결된 패턴을 찾습니다. 대표적인 신호는 다음과 같습니다.
- 새로 배포된 컨트랙트가 프로토콜 함수를 평소와 다른 순서로 호출하는 경우
- 대규모 플래시 론 직후 오라클 가격을 움직이는 거래가 이어지는 경우
- 볼트의 지분 가격이나 풀 잔고가 갑자기 변하는 경우
- 소유권 이전이나 업그레이드처럼, 아무도 예고하지 않은 관리자 작업
- 과거 공격과 연결된 주소로 자금이 이동하는 경우
탐지는 보통 두 단계로 이뤄집니다. 빠른 필터가 새 트랜잭션이나 컨트랙트를 알려진 공격 패턴과 비교해 점수를 매기고, 의심스러운 것은 현재 체인 상태에서 시뮬레이션해 실제로 무슨 일을 하는지 확인합니다. 어떤 잔고가 바뀌고, 어떤 가격이 움직이고, 자금이 어디로 가는지입니다. 덩치는 크지만 평범한 거래와 공격의 첫 수를 구별할 수 있게 해 주는 것이 바로 이 시뮬레이션입니다.
신호가 울리면 시스템은 팀에 경고를 보냅니다. 구성에 따라서는 자동 대응을 실행할 수도 있습니다. 공격이 완료되기 전에 컨트랙트를 일시 중지하거나, 특정 함수를 막거나, 자금을 손이 닿지 않는 곳으로 옮기는 식입니다.
간단한 예시
공격자가 플래시 론으로 큰 금액을 빌린 뒤 얇은 유동성 풀에서 스왑해 가격을 왜곡하고, 그 가격을 근거로 대출을 받으려는 컨트랙트를 배포합니다. 모니터링 시스템은 새 컨트랙트를 시뮬레이션해 패턴을 알아보고, 실제 트랜잭션이 들어오기 전에 고위험으로 표시합니다. 프로토콜의 가디언이 대출 기능을 일시 중지하고, 공격은 실패하며, 팀은 조사에 들어갑니다. 모니터링이 없었다면 처음 알아챈 신호는 텅 빈 볼트였을지도 모릅니다.
모니터링, 감사, 바운티의 차이
스마트 컨트랙트 감사는 배포 전이나 배포 직후에 코드를 검토하고, 버그 바운티는 연구자들이 그 검토를 계속하도록 유도합니다. 런타임 모니터링은 코드 대신 행동을 지켜봅니다. 새로 출시된 프로토콜과의 상호작용처럼 아무도 검토할 생각을 못 한 코드를 이용하는 공격을 잡아낼 수 있고, 수상한 관리자 활동처럼 코드 검토로는 결코 보이지 않는 운영상의 사건도 다룹니다.
위험과 한계
모니터링은 제때 보지 못한 것을 막을 수 없습니다. 어떤 공격은 트랜잭션 하나로 끝나며, 그 트랜잭션이 블록에 포함되기 전의 짧은 틈밖에 남기지 않습니다. 비공개 트랜잭션 경로를 쓰면 그 틈마저 가려질 수 있습니다. 자동 대응은 신중하게 설계해야 합니다. 너무 쉽게 작동하는 일시 중지는 정직한 사용자를 방해하고, 너무 늦게 작동하는 일시 중지는 쓸모가 없습니다. 일시 중지 권한 자체도 그 뒤의 키가 허술하게 보호된다면 위험이 됩니다. 그리고 모니터링 시스템은 그 모델만큼만 뛰어나기 때문에, 새로운 유형의 공격은 알려진 어떤 패턴과도 맞지 않을 수 있습니다. 그래서 모니터링은 감사, 바운티, 준비금 증명을 대신하지 않고 그것들과 함께 작동합니다.
Tori Finance (토리 파이낸스)는 이렇게 활용합니다
Tori Finance는 Hypernative의 런타임 모니터링으로 스마트 컨트랙트의 온체인 활동을 지켜봅니다. 이는 Sherlock과 Nethermind의 스마트 컨트랙트 감사 위에 실시간 보안 층을 더합니다. Tori Finance는 자체 내부 버그 바운티 프로그램도 운영합니다.
자주 묻는 질문
디파이 해킹을 실시간으로 막을 수 있습니까?
경우에 따라 가능합니다. 공격이 여러 단계를 거치거나, 공격 트랜잭션이 블록에 포함되기 전에 보인다면 모니터링이 이를 표시하고 자동 대응이 표적 함수를 일시 중지할 수 있습니다. 숨겨진 트랜잭션 하나로 끝나는 공격은 막기가 훨씬 어렵습니다.
감사와 모니터링은 무엇이 다릅니까?
감사는 배포 전이나 배포 직후에 코드를 검토합니다. 모니터링은 코드가 운영된 뒤에 일어나는 일을 지켜보며, 감사로는 볼 수 없는 상호작용과 관리자 작업까지 다룹니다.
모니터링 시스템은 무엇을 찾습니까?
평소와 다른 패턴입니다. 프로토콜을 떠보는 새 컨트랙트, 가격을 움직이는 대규모 플래시 론, 잔고나 지분 가격의 급격한 변화, 예고 없는 업그레이드, 과거 공격과 연결된 주소로 향하는 자금 이동 등입니다.
관련 용어
스마트 컨트랙트 감사
스마트 컨트랙트 감사는 프로토콜 코드가 출시되기 전이나 출시 직후에 취약점을 찾는 독립적인 보안 검토입니다. 명시된 범위와 시점 안에서 위험을 낮춰 주지만, 코드에 버그가 없다는 약속은 아닙니다.
버그 바운티
버그 바운티 프로그램은 보안 연구자가 취약점을 악용하는 대신 책임 있게 제보하면 보상을 지급하며, 보상 규모는 문제의 심각도에 따라 정해집니다. 감사가 끝난 뒤에도 오랫동안 프로토콜 코드가 계속 검토되도록 해 줍니다.
가격 오라클
가격 오라클은 토큰 가격 같은 외부 데이터를 블록체인 위로 가져와 스마트 컨트랙트가 쓸 수 있게 하는 장치입니다. 대출 시장은 오라클을 통해 담보 가치를 매기기 때문에, 틀리거나 조작된 가격은 일어나지 말아야 할 청산을 일으킬 수 있습니다.
출처
- Hypernativewww.hypernative.io
- ethereum.org: Smart contract securityethereum.org
Tori Finance (토리 파이낸스) 팀이 작성한 글이며, 투자 권유가 아닙니다. 수익은 변동하며 원금 손실이 발생할 수 있습니다.