Ethereum의 어두운 숲에 있는 "Predator"
편집자 주: 이 기사의 출처는크립토 밸리 라이브 (ID: cryptovalley)크립토 밸리 라이브 (ID: cryptovalley)
Ethereum의 어두운 숲 괴물은 농담이 아닙니다. 이러한 선행 봇은 잠재적인 이익을 위해 스마트 계약에서 사용한 적이 없는 스마트 계약 호출 및 기능을 분석할 수 있습니다.
, 저자: Alex MenUskin, 번역: Sherrie, Odaily의 승인을 받아 재인쇄됨.
Ethereum의 어두운 숲 괴물은 농담이 아닙니다. 이러한 선행 봇은 잠재적인 이익을 위해 스마트 계약에서 사용한 적이 없는 스마트 계약 호출 및 기능을 분석할 수 있습니다.
이러한 로봇에 대한 일반적인 이해 부족을 감안하여 우리는 상황에 대해 자세히 알아보고 로봇이 얼마나 흔한지 알아보기 위해 사파리에 착수했습니다. 우리는 몇 가지 일반적인 프런트 엔드 봇을 "캡처"하고 그들의 행동을 분석했습니다. 우리는 효율성과 트랜잭션이 "사냥"될 가능성을 살펴보았습니다. 우리는 또한 그들을 피하는 다양한 방법을 테스트했습니다.
보조 제목
프론트러닝이란?
선행매매의 간단한 예는 스왑 입찰입니다. 누군가가 Uniswap에서 ETH 가격을 상승시키기에 충분한 대량의 ETH를 구매하려고 한다고 가정합니다. 이 상황에서 이익을 얻을 수 있는 한 가지 방법은 가격이 낮은 상태에서 많은 양의 ETH를 구매하기 전에 거래하는 것입니다. 그런 다음 가격 급등 후 ETH를 판매하여 이익을 얻으십시오.
이 차익 거래 사례 외에도 청산, 희귀 NFT 구매 또는 단순한 사용자 오류를 포함하여 다른 많은 거래에 대한 선행 실행도 가치가 있을 수 있습니다. (트랜잭션 또는 일련의 트랜잭션에서 추출한 값을 MEV라고 합니다.)
이더리움에서 프런트러닝은 트랜잭션에서 약간 더 높은 트랜잭션 수수료를 입찰함으로써 달성되며, 채굴자들이 블록을 구축할 때 더 높은 지불 트랜잭션이 먼저 실행되도록 시퀀스를 더 일찍 수행하도록 장려합니다. 따라서 같은 컨트랙트 콜로 수익을 내는 두 트랜잭션을 같은 블록에 넣으면 첫 번째 트랜잭션만 수익을 낸다.
보조 제목
행동
Dan Robinson과 Georgios Konstantopoulos는 "ETH is a Dark Forest"라는 블로그 게시물에서 12,000달러가 정교한 "포식자"의 손아귀에 빠진 선행 매매 시도에 대해 설명했습니다. Predator는 이더리움 거래 풀에서 가치 있는 거래를 추적하고 Frontrunning을 통해 보상을 얻을 수 있을 정도로 앞서 있습니다.
"다크 포레스트"의 이야기는 처음에는 믿기 어려울 정도로 "무섭다". 실제로 우리는 그러한 "포식자"의 존재를 의심할 이유가 있습니다. 수많은 로봇이 면밀히 모니터링하는 재정 거래 플랫폼인 Uniswap에서 자금을 인출하는 방법은 무엇입니까? "일반" 차익 거래자가 될 수 있습니까?
올해 초 우리의 심층 분석은 그렇지 않다는 것을 증명했습니다. 이것은 평범한 로봇이 아닙니다. 그것은 우리가 아는 한 이전에 한 번도 호출된 적이 없는 계약 함수를 성공적으로 호출했습니다. 프록시 스마트 계약을 통해 거래를 난독화했음에도 불구하고 자금을 빼돌렸습니다.
최소한으로 말하면 꽤 걱정됩니다. 트랜잭션 풀의 모든 트랜잭션을 모니터링하는 기능은 매우 강력한 무기입니다. 걱정스럽게도 일부 서비스는 "다크 풀" 거래 계층을 공개적으로 제공하기 시작했습니다.
"다크 풀" 거래 계층은 Infura 또는 개인 노드와 같은 서비스를 사용하지 않지만 거래를 네트워크의 나머지 부분에 전파하지 않는다는 약속과 함께 채굴자에게 직접 전송하여 약탈자의 스누핑으로부터 안전하게 보호합니다.
Samczun and co.는 취약한 계약에서 960만 달러를 추출하려고 시도할 때 유사한 방법을 사용했습니다. 채굴자들이 Frontrunning의 봇을 사용하기 시작하고 프리미엄을 지불하는 사람들에게만 안전한 액세스를 제공하는 것을 상상하는 것은 어렵지 않습니다.
개발 환경이나 테스트넷에서 테스트할 수 있는 스마트 계약과 같은 이더리움의 다른 요소와 달리 이러한 봇은 이더리움 메인넷에만 존재합니다. 일부 초기 시험을 제외하고 테스트넷 트랜잭션을 시도하고 선행 실행하는 것은 재정적으로 이치에 맞지 않습니다. 또한 논리가 숨겨져 있기 때문에 모든 사람과 동일한 규칙에 따라 플레이할 필요가 없습니다.
우리가 잡은 선두주자가 "진짜" 일반 선두주자인지 확인하려면 고유한 함정이 필요합니다. 트랩은 SHA256 해시된 비밀 문자열에 의해 시작된 새로 생성된 계약이며 일부 자금은 획득할 수 있습니다. 잠긴 자금은 이 비밀이 제공되는 경우에만 출금이 가능하며 자금은 출금 트랜잭션 발신자에게 직접 전송됩니다.
아이디어는 올바른 비밀을 제공하는 "미끼" 트랜잭션을 보내고, 누군가 그것을 복제하려고 시도하는지 확인한 다음 스스로 비밀을 제공하여 사용 가능한 자금을 얻는 것입니다. 미끼 거래 전에 누군가가 자금을 얻는다면 거래가 아직 거래 풀 l에 있는 동안 거래를 분석하고 관련 콘텐츠를 복사하고 비밀 자체를 제공할 수 있음을 의미합니다.
흥미롭게도 이들은 돈을 받기 위해 전에는 몰랐던 비밀, 본 적도 없는 계약서를 제시할 예정이다.
보조 제목
평균적인 선두 주자는 어떻게 작동합니까?
이 실험의 중요한 부분은 Frontrunner가 작동하는 방식을 이해하는 것입니다. 하지만 누군가가 돈 버는 기계를 만든다면 아마도 Github에서 공유되지 않을 것입니다. 따라서 우리는 범죄자의 행동을 관찰하고 리버스 엔지니어링할 수 있을 뿐입니다.
일반적으로 범용 선두주자를 구축하는 데는 두 부분이 있습니다. 첫 번째 구성 요소는 스마트 지갑 에이전트를 사용하거나 사용하지 않고 수정된 트랜잭션을 보낼 수 있는 이더리움 계정입니다. 두 번째는 대부분 오프체인에서 발생하는 작업의 두뇌인 "백엔드"입니다. 운영자는 몇 가지 기술을 사용하여 풀의 각 트랜잭션을 검사하고 구문 분석하고 해당 매개변수(예: tx 호출자)를 대체하고 수익이 있는지 확인합니다.
또한 트랜잭션 풀에서 각 트랜잭션(많은 트랜잭션이 있음)을 분석해야 하기 때문에 시간도 중요합니다. Ethereum 블록을 채굴하는 데 평균 12초가 걸립니다. 이 거래에 대한 거래 수수료가 충분히 높으면 다음 블록이 도착하기 전에 충분히 빨리 분석하고 교체해야 합니다.
이는 확률적 프로세스이며 트랜잭션이 브로드캐스트되는 즉시 블록을 채굴할 수 있으므로 봇이 블록을 성공적으로 분석하고 실행 중인 트랜잭션을 브로드캐스트할 시간이 없습니다.
이러한 고려 사항과 약간의 생각을 통해 우리는 로봇이 미끼를 잡는 데 걸리는 시간을 테스트했습니다."보조 제목"우리 계약(수여자)의 초기 잔고는 0.035 ETH였으며 당시 가치는 약 $20였습니다. 해당 자금은 계약에 저장된 해시에 올바른 사전 이미지를 제공하는 모든 사람이 사용할 수 있습니다. 자금을 획득하고 약탈자의 방아쇠 역할을 하기 위해 별도의 계정(획득자)이 적절한
반전 이미지
자금 인출을 좋아합니다.
첫 번째 라운드: 계약을 직접 호출
베이스라인 트랩이 작동하는지 확인하기 위해 먼저 getter 계정을 사용하여 계약을 호출합니다. 첫 번째 시도에서 상대적으로 높은 거래 수수료(ETH 프레임워크에 의해 설정됨)로 자금을 되찾을 수 있었습니다.
마진이 너무 낮아 포식자를 유치할 수 없거나 거래가 너무 빨리 채굴되어 반응할 수 없기 때문일 수 있습니다. 포식자를 잡는 것이 우리의 목표이기 때문에 분명히 이것은 우리가 원하는 것이 아닙니다.
보조 제목
이번 라운드에서 우리는 이전에 가지고 있던 문제를 해결했습니다. 우리는 거래가 너무 빨리 채굴되지 않도록 잠재적 이익을 높이고 거래 수수료를 낮추어 봇이 그것을 발견할 시간을 줍니다. 계약에는 0.04 ETH(이전보다 0.005 증가)도 추가되었습니다.
이번에는 성공했습니다. 트랜잭션은 채굴되기까지 약 3분을 대기했으며 계약에서 가치를 얻지 못했습니다. 계약의 내부 거래에 따르면 자금이 다른 사람에게 흘러가는 것을 알 수 있습니다.
현재 트랜잭션은 25.000001111 Gwei(.000001111 Gwei는 우리가 사용하고 있는 것보다 높음)를 사용하며 시도한 "추출"과 동일한 블록에서 채굴되었습니다.
보조 제목
추종자 양성
이제 우리는 봇을 찾았으므로(일부 비용으로) 몇 가지 흥미로운 통찰력을 얻을 수 있습니다. 첫째, 트랜잭션은 계약 호출이 직접 실행되지 않음을 나타냅니다. 트랜잭션을 복사하고 맹목적으로 소유 계정에서 전송하는 대신 봇은 해당 트랜잭션을 실행하는 스마트 지갑 역할을 하는 프록시 스마트 계약을 통해 트랜잭션을 전달합니다.
이제 이전 및 미래 거래 주소를 추적하여 봇이 얼마나 성공적이며 어떻게 작동하는지 확인할 수 있습니다.
디컴파일된 계약에는 두 가지 주요 기능이 있습니다.
이 기능을 통해 프록시 계약은 운영자의 스마트 지갑 역할을 합니다. 외부 기능에 대한 호출을 수행하는 기능 외에도 트랜잭션 시작 시 잔고가 적어도 트랜잭션 종료 시 잔고만큼 크도록 보장합니다. 그렇지 않으면 복원할 수 있으므로 손실 가능성을 방지할 수 있습니다. 알 수 없는 계약 호출 시 자금(거래 수수료는 물론. ).
Dune Analytics를 사용하여 2018년 5월 이후 봇이 얼마나 성공적이었는지 확인할 수 있습니다!
이 특정 봇이 거래를 발행하기 위해 항상 동일한 프록시와 발신 주소를 사용한다고 가정하면 총 수익은 약 17 ETH(작성 당시 ~$10K)로 추정할 수 있습니다.
보조 제목
3라운드: 그들은 얼마나 똑똑한가?
이제 봇이 우리를 공격하고 있다고 확신했으므로 미끼를 추출할 수 있는지 테스트하려고 합니다. (또한 계약서에 돈을 돌려받을 수 있는 "수취" 기능이 있습니다.)
우리는 자금을 인출하기 위해 ProxyTaker 계약을 배포하고 적절한 기능을 호출했습니다. 대리를 통해 자금을 받는 비용이 약간 더 높기 때문에 부여자 계약의 금액은 0.055 ETH로 약간 더 높습니다. 보라, 우리 거래는 다른 봇에 의해 즉시 취소되었습니다.
이번에는 더욱 인상적이었습니다. 봇은 인출 거래를 감지할 수 있었을 뿐만 아니라 내부 호출, 완전히 다른 계약에서 식별했습니다! 이 위업은 기록적인 시간 안에 달성되었습니다. 우리의 인출 거래는 몇 초 안에 채굴되었습니다(봇처럼).
봇의 동일한 행동 패턴(계정 A에서 에이전트를 호출하고 계정 B로 자금을 이체)과 사건의 근접성을 감안할 때 봇이 이 경우에도 화이트 해커에 대한 일반적인 선행 작업을 수행하고 있다고 가정하는 것이 합리적입니다. 사건.
이 로봇은 이전 로봇보다 훨씬 더 복잡합니다. ETH에만 집중하는 것이 아니라 다양한 차익거래를 진행합니다.
또한 자금을 모으는 계정 잔액 측면에서도 훨씬 더 성공적입니다. 현재 잔고는 약 300 ETH(작성 당시 ~$180,000)입니다. 또한 계약 주소에서 모든 유입 및 유출을 빼서 총 ~900 ETH의 수익률을 추정할 수 있습니다. 계정이 선행 실행 활동과 관련 없는 거래를 수행했을 수 있으므로 이는 대략적인 추정치일 뿐입니다. (아래는 양수 값을 가진 모든 봇 거래 목록입니다).
보조 제목
최종 라운드: 성공적인 추출
이 도전을 조금 더 흥미롭게 만들기 위해 이번에는 우리만 사용할 수 있는 프록시 계약인 OwnedTaker를 사용하여 또 다른 난독화 시도를 했습니다.
셋업은 3라운드와 비슷하다. 그랜트 계약에 0.05 ETH가 추가되었습니다. 자금은 또한 계약에 남아 있지 않고 동일한 거래에서 우리에게 다시 이체됩니다.
첫 번째 시도에서 OwnedTaker 계약으로의 거래는 채굴하는 데 약 1분이 걸렸고 자금을 인출할 수 있었습니다.
실험이 반복되었고, 이번에는 기부자 계약을 우리가 지금까지 사용한 가장 높은 지불금인 0.06 ETH로 다시 채워 낮은 지불금이 Frontrunning 시도가 없는 이유가 아닌지 확인했습니다.
계약 소유자만 콜을 실행하도록 허용될 수 있다는 요구 사항 또는 자금이 콜링 계약과 다른 목적지로 전송된다는 사실은 선행 실행 시도를 피하는 데 도움이 됩니다.
그래서 우리가 이겼어?
봇은 자기 보존을 먼저 생각할 가능성이 높으며 결국 임의의 코드를 실행할 수 있는 알 수 없는 계약을 호출하고 있습니다. 이익이 보장되지 않으면 불필요한 위험이나 거래 수수료 손실을 피할 수 있다는 것은 당연합니다.
보조 제목
지난번에 (프론트러닝) 우리가 저항할 수 있었던 이유는?
결론적으로
말하기 어렵다. 봇이 인증된 계약과 통신하는 위험을 감수하지 않았거나 자금이 다른 주소로 이체된 사실이 우발적일 수 있습니다. 물론 그렇다고 해서 Frontrunners를 완전히 피하는 방법은 아닙니다. 대부분의 경우 거래 풀에 숨어 있는 더 정교한 봇이 있을 가능성이 높습니다.
보조 제목
결론적으로
이 짧은 실험에서 우리는 범용 프론트 러닝 봇이 존재하고 매우 복잡하다는 것을 보여줄 수 있었습니다.
물론 우리는 실험이 완전하거나 결정적이지 않다는 것을 알고 있습니다. 매우 다른 트리거와 작동 모드를 가진 다른 많은 봇이 있습니다. 잠재적 상승 여력, 커뮤니케이션 패턴, 최소한의 복잡성(예: 거래 수수료 한도)과 같은 요인이 작동 방식에 영향을 미칠 수 있습니다.
그러나 우리는 우리의 작업이 개념 증명을 제공하고 이러한 범용 프런트 엔드 로봇이 작동하는 방식에 대해 더 많은 정보를 제공한다고 믿습니다.
따라서 현재와 미래에 더 안전한 시스템을 구축하려면 이러한 로봇과 작동 방식을 이해하는 것이 중요합니다. Flashbots와 같은 프로젝트는 MEV 마이닝을 민주화하고 공개 리소스로 만들어 이를 수행하려고 합니다. 본 연구가 이러한 목표를 달성하는 데 도움이 되기를 바랍니다.
이러한 봇을 발견했거나 보다 정교한 난독화 기술을 찾고 있는 경우 언제든지 문의해 주십시오. 귀하의 경험을 공유함으로써 우리는 이러한 봇을 더 잘 이해하고 우리 모두를 위해 더 안전한 암호화 커뮤니티를 구축할 것입니다.
Tal Be'ery, Omer Shlomovitz, Oded Leiba, Dan Robinson 및 기타 이 기사 작성에 도움을 주신 분들께 감사드립니다.
보조 제목
부록


