23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
Cetus의 해킹으로 한번 떠들썩 했는데요
이번 해커 (공격자는) overflow 체크 취약점을 이용했습니다.
전반적으로 관련된 용어를 설명하면서 그 내용도 같이 알아보겠습니다.

해커들은 세투스의 자동화된 시장 조성자(AMM) 프로토콜에서
유동성 매개변수의 가장 중요한 비트(MSB) 검증에 존재하는 취약점을 악용했습니다.
이로 인해 단 한 번의 키 입력으로 대규모 유동성 포지션을 형성하고,
이를 통해 수백만 달러 상당의 자산을 탈취할 수 있었습니다.
총 2억 2,300만 달러 상당의 자산이 탈취되었으며,
이 중 약 1억 6,300만 달러는 수이 네트워크의 검증자들에 의해 동결되었습니다.
일부 커뮤니티 구성원들은 검증자들의 자산 동결 조치가 탈중앙화 원칙을 훼손한다고 비판했습니다.
이는 블록체인의 검열 저항성과 관련된 논쟁을 촉발시켰습니다.
세투스는 Sui와 Aptos 블록체인 기반의 탈중앙화 거래소 (DEX) 입니다.
세투스는 CLMM( Concentrated Liquidity Market Maker : 집중 유동성 시장 조성자) 모델을 도입했습니다.
기존의 AMM ( Automated Market Maker) 모델은 일반적으로 Constant Product Formula ( x * y = k ) 를 사용합니다.
AMM 최초에 공급자가 예치하는 토큰을 기준으로 x * y = k 를 결정합니다.
A라는 유동성 공급자가 이더 2 개와 USDC 1,500 개를 예치하고 유동성 pool을 생성을 하면
이더리움과 USDC는 2 * 1500 = 3000 의 공식이 성립하게 되고, 3000 이라는 숫자는 바꾸지 않게 됩니다.
이때 1 이더의 가치는 750 USDC로 볼 수 있습니다. 최초에는 가격차이가 날 수 있지만,
거래 차익을 얻기 위한 노력으로 시장 평균으로 수렴하게 됩니다.
단 B라는 사람이 1개의 이더를 거래하기 위해서 USDC 750개를 넣었다고 하면
Constant Product Formula ( x * y = k ) 에 의해서 0.6666..7 개의 이더만 확보하게 됩니다. (거래순간 이더의 가치가 올라가 버립니다)
1.3333.. * 2250 = 3000
초기 가치와 비교해서 0.33333개 를 확보하지 못하게 되는데
이때 이 0.33333 개에 해당하는 가치에 대해서 슬리피지가 발생했다 합니다.
이 AMM 모델은 0 부터 무한대까지 모든 가격범위에 걸쳐 균등하게 분포 되지만, 유동성 pool이 작을때는
위에서 처럼 슬리피지가 발생합니다. 하지만 토큰의 가치가 급변하기 보다는 특정 가격 범위에서 주로 거래가 됩니다.
하지만 전체 가격범위에 토큰의 유동성이 공급되다 보니, 실제 거래가 자주 발생하는 범위에서는 유동성이 부족해 지게 되는 현상이 발생합니다.
CLMM은 특정 범위를 정해 놓고, 해당 범위에 대해서만 유동성을 공급하게 됨으로
낮은 슬리피지와 거래가 활성화 되고, 거래 수수료를 더 많이 받을 수 있는 장점이 있습니다.
세투스는 CLMM 모델을 통해 유동성 공급자들이 특정 가격 범위 내에서 자산을 제공함으로써 자본 효율성을 극대화하고, 거래자들에게는 낮은 슬리피지와 빠른 거래를 제공합니다.

CLMM에서는 유동성 공급자가 특정 가격 범위에 자산을 공급합니다.
그 범위 안에서는 항상 두 가지 자산이 일정한 비율로 교환 가능해야 하죠.
이걸 가능하게 하려면 유동성이 일정해야 하고, 이 유동성은 가격 범위 내에서 루트 가격 기반의 계산으로 정해집니다.
유동성을 구하는 공식은
liquidity = ΔTokenX / (sqrt(P_upper) - sqrt(P_lower))
즉 루트 가격 범위의 차이가 작을수록, 동일한 토큰 양으로 더 큰 liquidity 값이 계산됩니다.
이해를 돕기위해서 가상의 예를 든다면 1개의 이더를 1000원 ~ 10000원 사이에 공급하기로 했다고 하면 1/ (10-1) 로 유동성이 계산되는 방식입니다.
실제로는 금액이 아니라 Tick이라는 단위로 계산이 되어집니다.
공격자(해커)는 매우 좁은 가격 범위(예: [300000, 300200])를 설정하여 유동성을 추가했습니다.
이러한 좁은 범위는 sqrt_price_diff 값을 작게 만들어, 이후 계산의 결과가 오버플로우를 발생은 하지만 임계값을 넘지 않도록 만들었습니다.
Cetus의 스마트 계약에서는 checked_shlw 함수를 사용하여 오버플로우를 검사합니다.
그러나 이 함수의 구현에서 사용된 마스크 값이 잘못되어, 실제로 오버플로우가 발생해도 이를 감지하지 못했습니다.
공격자는 이 취약점을 이용하여, 오버플로우를 유도하면서도 검사에는 통과하는 값을 입력할 수 있었습니다.
이런 방식으로 실제 1Token 만 공급하였지만, 오버플로우로 인해서 대용량의 유동성을 공급 받습니다.
큰 유동성을 제공한 것으로 인정받아, LP토큰을 받게 됩니다. LP토큰은 유동성 Pool 내의 지분을 의미합니다.
이렇게 1 토큰으로 LP토큰을 받은 뒤에 다시 자산을 회수하는 방식으로 2억 2,300만 달러의 자산을 탈취했습니다.
Sui 블록체인은 Move 언어를 기반이며 자산의 이동이 검증자의 승인을 필요로 하는 구조입니다.
즉, 자산의 소유자가 트랜잭션을 생성하더라도, 검증자들이 이를 승인하지 않으면 해당 자산은 이동할 수 없습니다.
검증자들이 협력하여 해커의 주소에서 발생하는 트랜잭션을 처리하지 않음으로써, 해당 자산을 사실상 동결할 수 있습니다.
이번 사태가 발생한 후에 보안 전문가들과 Sui커뮤니티에서 해커 주소 식별 → 검증자 설정 변경 → 협력적 실행 을 통해서 자산을 동결했습니다.
나머지 약 6,000만 달러는 해커가 Sui 네트워크를 벗어나 이더리움 체인으로 브리지로 이전하여 동결이 어려웠습니다.
검증자들의 협력은 사용자 자산 보호라는 측면에서 긍정적으로 평가되지만,
동시에 블록체인의 탈중앙화 원칙에 대한 우려가 있습니다.
일부 커뮤니티 구성원들은 검증자들이 특정 주소의 트랜잭션을 임의로 차단할 수 있는 권한을 가지는 것이
검열의 위험성을 내포한다고 말합니다
Sui 재단은 이러한 우려를 인식하고, 동결된 자산의 반환 여부를 커뮤니티의 거버넌스 투표를 통해 결정하도록 제안했습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.