본문으로 이동

오라클 공격

오라클 공격은 조작 가능하거나 오래되었거나 스케일 또는 설정이 잘못된 외부 데이터를 악용해 프로토콜이 위험한 값으로 대출, 발행, 상환, 결제 또는 청산하게 만듭니다.

업데이트

교육 참고용이며 투자 조언이 아닙니다. 투자로 인해 손실이 발생할 수 있습니다.

핵심 답변

오라클 공격은 프로토콜의 데이터 신뢰 경계를 악용해 가격, 환율, 지수, 순자산가치 또는 상태 입력이 경제적으로 위험한 동작을 일으키게 합니다. 공격자는 유동성이 얕은 거래소를 조작하거나 보고자·키를 탈취하거나 집계·갱신 규칙을 악용할 수 있습니다. 소비자 측의 최신성, 단위, 범위, 대체값 검사가 빠진 상황에 차입 자금을 결합할 수도 있습니다. 악의적인 오라클 운영자가 없어도 오래되거나 잘못 설정된 피드가 같은 손실을 낼 수 있으므로 사고 분석에서는 공격 경로와 장애 유형을 구분해야 합니다.

결정적인 비교는 표시 가격이 급변했는지가 아닙니다. 컨트랙트가 실제 사용하는 값에 영향을 주는 비용과 위험이 대출, 발행, 상환, 결제 또는 청산으로 실행 가능하게 추출할 가치보다 작은지입니다. 플래시 유동성은 원자적 경로에 자금을 조달할 수 있지만 잘못된 신뢰 경계를 만들지도 않고, 공격에 반드시 필요하지도 않습니다.

오라클 값이 시장에서 실제 체결 가능한 가격인 것도 아닙니다. 모든 검토는 값을 체인, 블록, 피드나 풀 주소, 기준·표시 자산 방향, 소수 자릿수, 타임스탬프, 집계 방식, 시장 규모와 소비 함수에 연결해야 합니다. 유효한 서명은 특정 체계 아래 누가 데이터를 보고했는지만 증명합니다. 그 자체로 최신성, 출처 독립성, 시장 깊이 또는 경제적 정확성을 증명하지는 않습니다.

작동 방식

  1. 배포를 고정합니다. 체인, 블록, 소비 컨트랙트와 함수, 자산 컨트랙트, 피드 프록시나 풀, 집계기, 기준·표시 자산, 소수 자릿수, 관리자와 업그레이드 상태를 특정합니다.
  2. 거래소, 풀, 보고자에서 집계, 서명, 프록시·어댑터, 대체값, 소비 로직까지 전체 신뢰 경로를 그립니다. 라벨 개수를 독립 출처로 세지 말고 공유 거래소, 운영자, 키와 거버넌스를 기록합니다.
  3. 온체인 읽기를 정확히 재현합니다. 답, 라운드 메타데이터, 타임스탬프, 해당되는 신뢰도나 상태, 소수점 정규화, 표시 방향 반전, 시퀀서 상태와 유예 기간, 최대 데이터 나이, 편차 한도, 0·음수 값 처리를 확인합니다.
  4. 소비자 노출 장부를 만듭니다. 담보 계수, 청산 임계값, 대출·공급 한도, 가용 유동성, 부채, 발행·상환 한도, close factor, 청산 보너스와 해당 값이 허용하는 모든 동작을 기록합니다.
  5. 준비금, 활성 유동성, 관측값, 기간과 가중 방식, 수수료, 차익거래, 블록 정렬, 플래시·자기자본, 포지션 정리 손실, gas, MEV와 경쟁 청산자를 포함해 실행 가능한 규모로 조작을 모델링합니다.
  6. 독립 출처, TWAP 관측 용량, 한도, 서킷 브레이커, 일시중지 권한, timelock, 오래되거나 괴리된 대체값, 보고자·키 손실, L2 시퀀서 중단, 정상 가격 갭, fail-open·fail-closed 동작을 시험합니다.
  7. canonical 피드 라운드, 프록시·설정 변경, 출처 괴리, 프로토콜 동작, 청산, 부실채권, 일시중지와 복구 결정을 감시하고 대조합니다. 유동성, 상장, 업그레이드 또는 시장 국면이 바뀌면 분석을 반복합니다.

현물 AMM 읽기값은 한 트랜잭션 안에서 바뀔 수 있습니다. 시간가중평균은 여러 관측에 걸쳐 영향을 유지하게 해 비용을 높일 수 있지만, 안전성은 정확한 산술 또는 tick 방식, 기간, 관측 용량, 유동성 분포와 블록 통제에 달려 있습니다. 중앙값은 일부 이상값을 제거할 수 있으나 상류 거래소의 상관관계나 정족수 상실은 안전성 또는 활성에 여전히 영향을 줍니다. heartbeat와 deviation 설정은 일부 피드의 게시 시점을 정하지만 소비자는 자체 최신성·유효성 정책이 필요합니다.

계산 예시

  • 상수곱 현물. 수수료를 무시하고 준비금이 1,000,000 ABC1,000,000 USDC이면 k = 10^12입니다. 목표 한계가격 9 USDC/ABC에는 준비금 3,000,000 USDC333,333.333333 ABC가 필요합니다. 거래자는 2,000,000 USDC를 넣고 666,666.666667 ABC를 받습니다. 최종 한계가격은 3,000,000 / 333,333.333333 = 9, 평균 체결가는 2,000,000 / 666,666.666667 = 3 USDC/ABC입니다. 반대로 5,000,000 USDC를 넣으면 준비금은 6,000,000166,666.666667이 되고 한계가격은 36이지 9가 아닙니다. 실제 수수료, 차익거래, 집중 유동성과 포지션 정리는 장부를 바꿉니다.
  • TWAP 방식. 동일 가중치의 1분 관측값 10개 중 9개가 100, 1개가 160입니다. 교육용 산술 TWAP는 (9 * 100 + 160) / 10 = 106으로 100보다 6% 높을 뿐이지만, 마지막 현물은 60% 높습니다. 나머지 9개 관측값이 100인 채 산술평균을 130으로 만들려면 조작 관측값이 400이어야 합니다. Uniswap v3 tick 평균은 이 산술 예시와 달리 기하 방식이므로 소비자는 배포된 방식을 재현해야 합니다.
  • 중앙값과 정족수. 정규화한 관측값 7개는 [99, 100, 100, 101, 101, 500, 600]이고 중앙값은 101입니다. 극단값 두 개는 결과를 정직한 값 집단 밖으로 움직이지 못합니다. 수용에 활성 보고 5개가 필요한데 정직한 보고자 3명이 오프라인이면 4 < 5만 남습니다. 이상값 저항성이 가용성을 보장하지 않으며 대체값 동작도 보안 모델의 일부입니다.
  • 오래된 값과 부당 청산. 소수 자릿수 8인 피드의 원시 반환값이 140,000,000,000, 즉 1,400이더라도 데이터 나이가 17 minutes이고 소비자 상한 15 minutes를 넘으면 거부해야 합니다. 이 값을 그대로 10 ETH, 청산 임계값 75%, 부채 12,000에 사용하면 건강계수는 10 * 1,400 * 0.75 / 12,000 = 0.875입니다. 최신 가격 2,000에서는 1.25입니다. 이후 가격을 고쳐도 이미 완료한 청산은 되돌아가지 않습니다.

위험

  • 체인, 자산, 피드, 프록시, 풀 또는 소비자 주소 오류.
  • 기준·표시 자산 반전 또는 표시 단위 불일치.
  • 피드, 토큰, 내부 고정소수점의 소수 자릿수 정규화 오류.
  • 오래된 데이터를 받거나 heartbeat·deviation trigger를 최신성 보장으로 오해하는 경우.
  • 불완전한 라운드, 잘못된 상태, 0, 음수, 상한 적용, 범위 밖 답을 받는 경우.
  • 얕은 단일 거래소 현물 가격이 큰 프로토콜 노출을 좌우하는 경우.
  • TWAP 기간이 너무 짧거나 관측이 드물거나 가중·읽기 방향이 잘못된 경우.
  • 관측 용량, 초기화, 보간 또는 대체값 동작을 오해하는 경우.
  • 집중 또는 JIT 유동성 때문에 풀 총가치가 공격 비용을 잘못 나타내는 경우.
  • 여러 피드가 같은 거래소, 데이터 공급자, 운영자, 키 또는 통제 계층을 공유하는 경우.
  • 보고자, 거래소, API, 서명자, 네트워크 또는 정족수 장애로 갱신·무결성이 사라지는 경우.
  • L2 시퀀서 중단 또는 복구 유예 기간 누락·오류로 오래된 상태가 노출되는 경우.
  • 대체값이 오래되거나 순환·상관되거나 스케일·의미가 호환되지 않는 경우.
  • 플래시 유동성과 원자적 조합성 때문에 일시적인 영향을 경제적으로 이용할 수 있는 경우.
  • 오라클 갱신 정렬, 선행매매, 샌드위치, 후행매매 또는 청산 MEV가 지급액을 바꾸는 경우.
  • 담보 계수, 청산 임계값, 한도, 보너스와 가용 유동성이 작은 오류를 증폭하는 경우.
  • 거버넌스, 관리자, guardian, 멀티시그 또는 서명 키 탈취로 신뢰 경로가 바뀌는 경우.
  • 프록시, 집계기, 어댑터, 업그레이드, 스토리지 또는 설정 오류로 잘못된 값이 선택되는 경우.
  • 서킷 브레이커 또는 fail-closed 로직이 스트레스 때 정상 대출·상환·청산을 중단하는 경우.
  • 일시중지, 복구, 계정 대조, 부실채권 배분 또는 크로스프로토콜 격리가 실패하는 경우.

흔한 오해

  • “모든 오라클 공격은 오라클 네트워크를 탈취한다.” 많은 장애는 보고 네트워크가 설정대로 작동하는 동안 얕은 출처, 오래된 값, 잘못된 단위, 불안전한 어댑터나 소비 로직을 악용합니다.
  • “여러 개 또는 탈중앙화 피드는 정확한 가격을 보장한다.” 독립성, 출처 품질, 정족수, 최신성, 단위, 집계와 소비자 검사는 여전히 필요합니다.
  • “TWAP면 조작이 불가능하다.” 영향에 필요한 기간과 비용을 바꿀 뿐이며 약한 기간, 드문 관측, 얕은 유동성 또는 블록 통제는 여전히 악용될 수 있습니다.
  • “플래시론을 금지하면 오라클 위험이 해결된다.” 플래시론은 자금 조달 방식 하나일 뿐입니다. 자기자본, 신용, 크로스프로토콜 차입, 보고자 탈취와 설정 오류는 남습니다.
  • “가격이 회복되면 피해가 되돌아간다.” canonical 대출, 발행, 상환, 결제와 청산은 별도로 권한을 부여한 복구 절차가 없다면 그대로 유지됩니다.

관련 주제

출처

탐색

위키 검색...