베이징 시간으로 2022년 5월 9일 오전 4시 34분 42초에 CertiK 보안 기술 팀은 Fortress Loans가 오라클 조작에 의해 공격당했음을 감지했습니다.
베이징 시간으로 5월 9일 오전 10시 5분에 JetFuel Finance는 공식적으로 오라클 조작에 대한 뉴스를 확인하고 의심스러운 주소 및 거래에 대한 링크를 공개했습니다.
현재 이 프로젝트는 약 1,048.1 ETH 와 400,000 DAI (총 가치 약 298만 달러 )를 잃었습니다. 공격자는 DAO와 오라클 조작을 통해 ETH와 DAI를 훔쳐 공격을 완료합니다. 훔친 토큰을 얻은 후 모든 토큰을 ETH로 신속하게 교환하고 Tornado Cash를 통해 ETH를 이체했습니다.
취약점 트랜잭션
https://bscscan.com/tx/0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
https://bscscan.com/tx/0x851a65865ec89e64f0000ab973a92c3313ea09e80eb4b4660195a14d254cd425
관련 주소
공격 주소: https://bscscan.com/address/0xA6AF2872176320015f8ddB2ba013B38Cb35d22Ad
공격자 계약(대부분 자폭):
https://bscscan.com/address/0xcd337b920678cf35143322ab31ab8977c3463a45
요새 대출 오라클:
https://bscscan.com/address/0x00fcf33bfa9e3ff791b2b819ab2446861a318285#코드
체인 계약: https://bscscan.com/address/0xc11b687cd6061a6516e23769e4657b6efa25d
공격 단계
공격자는 Fortress Governor Alpha 계약(0xe79ecdb7fedd413e697f083982bac29e93d86b2e)에 대한 제안 ID가 11인 EOA(0x0db3b68c482b04c49cd64728ad5d6d9a7b8e43e6)를 생성하고 자금을 지원했습니다.
제안 11: https://bscscan.com/tx/0x12bea43496f35e7d92fb91bf2807b1c95fcc6fedb062d66678c0b5cfe07cc002#eventlog
공격자가 제어하는 또 다른 EOA(0x0db3b68c482b04c49cd64728ad5d6d9a7b8e43e6)가 이후 이 제안에 투표되었습니다. 39250f29d #이벤트로그
따라서 제안 11이 구현되어 FTS 토큰 담보를 70000000000000으로 증가시켜 공격자가 다음 단계에서 이익을 위해 이를 악용할 수 있습니다.
이후 공격자는 https://bscscan.com/address/0xcd337b920678cf35143322ab31ab8977c3463a45 계약을 공격하여 100 FTS를 담보로 제공하고 그 대가로 막대한 양의 다른 토큰을 빌렸습니다. https://bscscan.com/tx/0x13d19809b19ac512da6d110764caee75e2157ea62cb70937c8d9471afcb061bf
또한 공격자는 연결된 스마트 계약에서 "submit()" 함수를 호출하여 오라클을 조작합니다. 여기서 "requiredSignatures"는 우회될 수 있고 배포 시 전원 검사가 비활성화됩니다.
결국 이익의 일부는 공격자의 주소로 전송되고 나머지 이익은 공격 계약 외부로 전송됩니다.
계약 취약성 분석
취약점 ①
첫 번째 취약점은 거버넌스 계약의 설계 결함입니다.
거버넌스 계약은 대출 관련 구성을 수정하기 위한 성공적인 제안을 실행할 수 있습니다(예: 담보 및 해당 담보 계수 추가). 그러나 투표에 필요한 최소 FTS 토큰은 제안이 성공적으로 실행되기 위해 400,000개입니다. FTS 토큰의 저렴한 가격으로 인해 공격자는 약 11 ETH를 400,000개 이상의 FTS 토큰으로 교환했습니다.
이러한 FTS 토큰을 사용하여 공격자는 마음대로 악의적인 제안을 생성하고 성공적으로 실행할 수 있습니다.
취약점②
두 번째 취약점은 체인 계약의 "커밋" 기능에 결함이 있어 누구나 가격을 업데이트할 수 있다는 것입니다.
L142의 필수 문은 주석 처리됩니다. 따라서 함수 호출이 올바르게 실행되었는지 확인하는 유효성 검사가 없습니다.
자산 소재지
780,000 + 228만 USDT가 두 번의 공격 거래 후 공격자의 주소로 전송되었습니다.
230만 USDT가 이더리움 으로 anySwap(멀티체인)으로 전송되었습니다.
770,000 USDT가 cBridge(Celer Network)를 통해 이더리움 으로 전송되었습니다.
모든 USDT는 Unswap을 통해 ETH 및 DAI로 변환되어 Tornado Cash로 전송됩니다.
타임라인
베이징 시간으로 5월 9일 00시 30분경 Fortress(FTS)의 토큰 가격이 폭락했습니다. 곧 프로젝트 팀은 텔레그램에서 다음과 같이 말했습니다. 현재 조사 중인 프로젝트에 몇 가지 문제가 있습니다.
그러나 공격은 우리가 생각했던 것보다 일찍 시작되었을 수 있습니다.
공격자들이 처음으로 "테스트"를 시작한 것은 베이징 시간으로 4월 20일 오전 1시 41분 59초에 확인되지 않은 사용자 지정 계약을 배포한 때였습니다. "스톰프" 이후 몇 주 동안 공격자는 일련의 트랜잭션을 통해 Fortress와 계속 상호 작용하고 확인되지 않은 계약을 배포했으며 이러한 행동은 공격의 처음 며칠까지 가라앉지 않았습니다.
공격자는 계약을 배포한 후 공격자가 이전에 가격을 조작한 것처럼 일련의 거래를 시작했습니다. 즉, 외부 소유 주소를 생성하고 자금을 조달하고 Fortress Governor Alpha 계약에 악의적인 제안을 하고 스스로 투표할 수 있습니다. 쉽게 충분한 FTS(필요한 400,000표)를 구입한 다음 FTS 토큰의 담보를 FTS의 가치가 증가하도록 높게 설정하고 이를 사용하여 다른 많은 토큰을 빌린 다음 ETH 및 DAI로 교환합니다.
또한 공격자가 배포한 계약에는 모든 악의적인 트랜잭션이 완료되면 트리거되는 " 자체 파괴 " 기능이 있습니다.
현재 자금은 cBridge(Celer Network) 브릿지와 멀티체인 교환 브릿지를 거쳐 이더리움 체인으로 이체되고 일련의 후속 거래를 통해 토네이도 캐시로 보내진다.
마지막에 쓰기
이 공격은 보안 감사를 통해 효과적으로 방지했어야 합니다.
취약성 ①의 경우 거버넌스 토큰의 가격과 유통되는 토큰 수를 알 수 없기 때문에 이러한 위험을 발견하기 쉽지 않지만 특정 위험 발견을 통해 잠재적인 관련 공격에 대한 경고가 가능합니다.
취약성 ②에 대해서는 키 검증이 부족함을 감사를 통해 발견할 수 있어 누구든지 기능을 제출하여 가격을 조작하는 것을 방지할 수 있습니다.
오라클 머신 조작으로 인한 공격은 이뿐만이 아니다 며칠 전 CertiK에서 [오라클 머신을 조작해서 빈손 늑대로 만들까? DEUS Finance DAO에 대한 1,570만 달러 공격 분석] 도난 자금은 더욱 큽니다.
암호화 분야에는 끝없는 보안 위험이 존재하므로 프로젝트 팀은 가능한 한 경계하고 항상 보안 사고에 주의를 기울여 자체 검토하고 적시에 계약 코드를 개선 및 감사해야 합니다.