Ethereum "scavenger"를 물리치는 방법, 여기에 세 가지 솔루션이 있습니다.
계좌로 일정 금액을 송금했는데 돈이 사라진 경험이 있으신가요? 당신은 "청소부"에 의해 중독되었을 수 있습니다. 위기에서 벗어날 수 있도록 도와드리겠습니다.
개인 키를 도난당한 경우 가해자는 일반적으로 "스캐빈저" 프로그램을 마련하여 계정을 모니터링한 다음 이 계정에 ETH 또는 기타 토큰을 예치하든 아니면 다른 토큰을 받든 계정의 자산을 먹을 기회를 기다립니다. 에어드랍이나 그와 비슷한 것.
이 기사는 "스캐빈저"가 사용자 자산을 먹는 방법을 설명하고, 먹지 않은 자금(예: 예치금)을 저장하는 세 가지 방법을 제공합니다.
사용자 개인키는 어떻게 유출되나요?
우리는 최근에 텔레그램 그룹의 관리자 행세를 한 다음 이러한 합법적인 그룹의 기본 채널에 있는 사용자에게 "도움말"을 제공하는 많은 사용자를 보았습니다(실제 관리자는 아니지만 실제 관리자의 프로필을 복사하고 있습니다. 사용자 이름이 약간 변경됨). 가짜 관리자는 종종 전문적인 언어를 사용하여 사용자를 혼동시키고 합법적인 웹사이트로 보이는 사용자 링크를 공유합니다(브랜드 보증 때문에). 이러한 사이트는 사용자에게 개인 키 또는 시드 문구를 요청합니다.
그런 다음 귀하의 토큰은 사라지고 "청소부"가 귀하의 계정을 모니터링하기 시작할 것입니다.
다음은 피싱 사이트의 예입니다.
WalletConnect를 사칭하는 많은 활동을 발견한 연구원 @dubstard에게 감사드립니다.
"청소기"는 어떻게 작동합니까?
"스캐빈저"는 블록체인(트랜잭션 풀 포함, 기술적으로 오프체인)을 모니터링하는 코드 조각입니다. 인간보다 반응 속도가 빠르고 규칙을 충족하는 특정 트랜잭션에 서명하도록 프로그래밍되어 있습니다.
즉, "스캐빈저"는 귀하를 볼 수 없으며, 귀하가 블록체인 브라우저에서 귀하의 주소를 보고 있는지 또는 귀하의 주소를 dApp의 사용자 인터페이스에 "연결"하고 있는지 알지 못합니다. 트랜잭션에 서명하고 네트워크에 브로드캐스트할 때만 활동을 볼 수 있습니다.
"Scavenger"와 "Scavenger"를 사용하는 피싱 사기는 시간이 지남에 따라 진화했습니다.
"스캐빈저"의 진화
2017년에 매우 유행했던 사기 유형 중 하나는 잠금 기능[즉, transfer()를 성공적으로 호출할 수 없음]과 가격 피드가 있는 토큰을 이용했습니다. Dave Appleton은 이러한 유형의 사기를 폭로하는 게시물을 게시했습니다.
이러한 유형의 사기에서 사기꾼은 먼저 잠글 수 있는 토큰을 획득하지만 블록 탐색기는 여전히 그러한 토큰의 가격을 제공합니다[가장 인기 있는 것은 Minerum(MNE)입니다]. 그런 다음 사기꾼은 (의도하지 않은 척) 해당 토큰이 저장된 주소의 개인 키를 게시하고 피해자가 해당 주소의 토큰을 가져가도록 유인합니다. 토큰을 인출하기 위해 피해자는 가스 수수료로 이 주소로 ETH를 전송합니다. 그러나 사기꾼들은 피해자가 전송한 ETH를 순식간에 자신의 계정으로 전송하도록 "스캐빈저"를 이미 준비했습니다. 이론적으로 잠긴 토큰은 가치가 없는 것으로 간주되므로 사기꾼은 순진한 탐욕스러운 사용자로부터 잠긴 가치의 일부를 회수하려고 합니다.
오늘날 해킹된 주소는 기본 ETH "스캐빈저"와 함께 대규모로 배치되었습니다. 또한 논리적으로 더 발전된 "스캐빈저"를 채택하고 가격 피드를 기반으로 ERC 20 토큰을 먹는 사기성 그룹도 있습니다.
얼마 전 해킹된 주소에 대한 연구를 수행한 결과 이러한 "스캐빈저"가 여전히 진화하고 있음을 발견했습니다.
1) 스캐빈저(Scavengers)는 더 많은 거래 수수료를 의미하더라도 고가의 자산을 먹는 것을 좋아합니다.
2) "Scavenger"는 가용한 모든 ETH를 사용하여 가능한 한 많은 가치를 훔칠 것이며, 그 트랜잭션은 동일한 논스에서 이길 확률이 높습니다.
3) "Scavenger"에는 약속된 토큰에 대한 가격 피드를 얻기 위해 기본 토큰을 약속된 토큰(즉, xKNCa = KNC)과 쌍으로 연결하는 매칭 엔진이 있습니다.
4) "Scavenger"에는 자체 내부 nonce 카운터가 있으며, 일정 기간 동안 가장 높은 nonce가 확인(또는 폐기/대체)되지 않으면 nonce를 다음으로 주기적으로 재설정합니다.
eth.getTransactionCount()
산출.
5) 체인의 일부 활동을 통해 "스캐빈저"의 눈에 고가 자산이 먹잇감이 되면 "스캐빈저"는 일부 ETH를 가스 수수료로 관련 계정으로 전송하여 자산은 계정 밖으로 이체됩니다.
6) 일부 "스캐빈저"는 자산 가치의 최소 임계값을 설정합니다. "Scavenger"는 이 임계값 미만의 자산을 먹지 않습니다. 이는 귀하의 계정에 "청소부"가 있다는 사실을 인지하지 못할 수 있음을 의미합니다. 잘 생각 해봐.
우리가 2017년에 "스캐빈저"에 대해 처음 쓴 것을 감안할 때 오늘날의 "스캐빈저"는 예전의 "스캐빈저"가 아니며, 운영자가 피해자의 손실을 최대화하면서 이익을 극대화하도록 돕습니다.
그만해요! 찾아 헤매다!
"Scavenger"를 물리치는 방법?
우선, 인간으로서 당신은 코드보다 빠르지 않으므로 우리의 솔루션에는 코드가 포함됩니다. 100% 효과적이라고 보장할 수는 없지만 항상 적합한 솔루션이 있습니다.
쉽게 계획할 수 있도록 회수하려는 코인 목록(우선 순위)을 만들어야 합니다. 이 목록에는 다음이 포함되어야 합니다.
토큰 계약 주소
토큰이 서약에 사용되었는지 여부(잠금 해제에 시간 제한이 있는지 여부)
토큰을 전송할 수 있습니까?
토큰 가치(사용자 주관적 판단 또는 우선 순위 USD 가치로 결정)
가장 중요한 것은 프로그램을 빠르고 효율적으로 실행하기 위해 체계적이어야 한다는 것입니다. 유명한 속담처럼 "모든 것이 미리 경고되고 아무것도 미리 경고되지 않습니다."
Taichi 네트워크 사용
"스캐빈저"는 "먹이" 주소로의 전송을 위해 트랜잭션 풀의 트랜잭션을 모니터링하여 작동합니다. 이러한 방식으로 "스캐빈저"는 다른 트랜잭션에 서명하고 트랜잭션이 확인되기 전에 트랜잭션을 브로드캐스트하여 전송된 자금을 가져갈 수 있습니다.
Taichi Network를 사용하면 서명된 거래를 공개 거래 풀에 공개하지 않고 채굴자(예: Spark Pool)에 직접 제출할 수 있습니다. 이것은 당신의 거래가 "스캐빈저"의 사각지대에 들어가고 "스캐빈저" 로봇에 의해 선점되지 않을 것임을 의미합니다(적어도 내 경험으로는).
출처: TAICHI.NETWORK
구체적인 방법은 모든 트랜잭션을 논스 순서로 사전 서명하고 프로그래밍 방식으로 Taiji Network에 제출하는 것입니다. 대부분의 "스캐빈저"는 포함되기를 기다리는 이더리움 트랜잭션에 대한 공개 트랜잭션 풀만 모니터링하고 각각의 새 블록에 대해 eth_getBalance를 호출하지 않습니다(CPU 주기 및 RPC 호출을 절약하기 위함). 즉, "스캐빈저"는 프라이빗 트랜잭션 풀을 통해 "피식자" 계정으로 전송된 ETH를 볼 수 없으며 먹지도 않습니다.
가스 수수료로 계정에 전송된 ETH가 서명된 각 거래에 완전히 사용될 수 있도록 몇 가지 계산을 수행해야 합니다. "Scavenger"는 올바르게 계산하면 초기 실행을 놓칠 수 있습니다! (일반적으로 다음 블록에 트랜잭션이 포함될 확률을 높이기 위해 GasNow의 "Rapid" 기준 값보다 몇 퍼센트 더 높은 가스 수수료를 기본값으로 설정합니다.)
MyCrypto를 오프라인으로 사용하여 트랜잭션 서명을 생성하고 준비가 되면 Taichi 네트워크로 보내거나 ethers.js(또는 기타 코드 라이브러리)를 사용하여 서명된 트랜잭션을 생성하는 코드를 작성할 수 있습니다.
자체 소멸 기능이 있는 스마트 컨트랙트 사용
이 방법은 Tai Chi Network를 사용하는 것과 유사합니다. 우리는 공개 거래 풀에 거래를 노출하지 않고 스마트 계약을 사용하여 ETH를 계정으로 전송할 수 있습니다. 이를 위해 보안 주소를 통해 스마트 계약을 배포하고 생성자를 통해 해킹된 주소로 ETH를 보낼 수 있습니다(이는 내부 트랜잭션이 됩니다).
pragma sopdity >=0.7.0 <0.9.0; contract MoveETH { constructor(address sendToAddress) payable { address payable addr = payable(address(sendToAddress)); selfdestruct(addr); }}
` 이 컨트랙트를 배포하면 ETH와 해킹된 주소 문자열을 생성자의 매개변수로 보낼 수 있습니다. 계약이 생성되고 동일한 트랜잭션에서 자체 소멸됩니다. 그 중 `selfdestruct()`는 이 컨트랙트의 블록체인 상태를 지우고(그래서 이 컨트랙트는 일회성임) 동일한 트랜잭션에서 해킹된 주소로 ETH를 보낸다는 의미입니다. `
예:
https://goerp.etherscan.io/tx/0x82ccb222eae55aaea73dd0efee1ea6ed7320f880889f280d4a343b8823f86692
이 방법은 효과적이지만 한 계정에서 다른 계정으로 ETH를 전송하는 것 이상의 작업을 수행하기 때문에 추가 비용이 추가된다는 점에 유의하십시오. 이 방법은 약 70,000 가스의 비용이 필요합니다. 가스 가격이 높을 때 가스 비용만 0.0112 ETH만큼 높습니다.
다음으로 해킹된 주소에서 사전 서명된 트랜잭션을 Taiji 네트워크를 통해 브로드캐스트합니다(공용 노드도 여기에서 사용할 수 있습니다. 계정의 전체 ETH 잔액을 가스 수수료로 설정하여 "스캐빈저"에 의해 선점되지 않도록 하십시오. (최소한 이 가능성을 줄이려고 노력하십시오), 이 경우 "스캐빈저"가 가스 수수료 경매에서 이기려면 해킹된 계정에 더 많은 ETH를 보내야 하기 때문입니다.
플래시봇 사용
일반적으로 우리는 거래를 체인에 올리기 위해 ETH를 지불해야 합니다(거래 수수료는 거래 발신자가 지불하기 때문입니다). 그러나 Flashbots를 사용하면 가스 수수료(즉, 거래 수수료)를 지불하지 않고 다른 계정의 자금으로 광부에게 "뇌물"을 주기만 하면 외부 계정의 거래를 온체인에 넣을 수 있습니다. 즉, 해킹된 주소로 수수료로 ETH를 송금할 필요가 없고, 이 주소에 있는 토큰을 가져갈 수 있습니다. 맞아, 그게 다야!
이 계획은 해킹된 계정과 광부에게 뇌물을 제공하는 데 사용된 계정의 두 가지 계정을 사용해야 합니다.
Flashbots 팀은 Flashbots/searcher-sponsored-tx라는 프로젝트를 출시했는데, 이 계획을 통해 트랜잭션을 체인에 넣는 방법에 대한 기본 원칙을 소개합니다.
다른 계정의 자금을 사용하여 거래 수수료를 지불하므로 해킹된 계정에 ETH가 필요하지 않습니다. 사실, 우리는 해킹된 계정에 ETH가 없었으면 합니다. 결국, 우리가 원하지 않는 것은 사기꾼/"스캐빈저"가 우리가 자금을 인출하고 계정의 원래 ETH를 사용하여 우리를 도망치고 싶다는 것을 깨닫는 것입니다. .
해킹된 계정에 ETH가 없는지 확인하려면 버너 봇을 실행하는 것이 좋습니다.
일반적으로 하나 이상의 시스템에서 burner-bot을 실행하고 인스턴스마다 다른 RPC 노드를 사용하는 것이 좋습니다. 예를 들어 버너를 로컬로 실행하려면 Infura를 사용하고 원격 서버에서 버너를 실행하려면 Quiknode와 같은 다른 공급자를 사용합니다. 이를 통해 높은 네트워크 대기 시간 또는 노드 오류(예: 속도 제한, 동기화 문제 등)와 같은 문제가 발생할 경우 중복성을 허용합니다.
Flashbots/searcher-sponsored-tx의 코드는 특정 요구 사항에 따라 수정해야 하지만 여기에는 해킹된 주소에 토큰을 저장하는 데 도움이 되는 엔진이 있습니다. Flashbots 엔진은 매우 유연하며 단일 transfer() 호출 또는 unstake() 및 transfer() 호출을 지원할 수 있습니다.
코드를 이해하지 못하는 경우 @kendricktan/flashbots.tools 웹사이트에서 제공하는 Flashbots 기능 UI를 사용해 볼 수도 있습니다.https://flashbots.tools/。
근본적으로 "청소부"를 피하는 방법은 무엇입니까?
최선의 예방 조치는 물론 "스캐빈저"에 의해 자신의 주소가 해킹되지 않도록 보호하는 것이므로 "스캐빈저"와 지혜롭게 싸울 필요가 없습니다.
최근 몇 년 동안 우리는 일부 앱 UI에서 반대로 사용자가 dapp 인터페이스에서 원시 기밀 정보를 사용할 수 있도록 했습니다. 이는 매우 안전하지 않은 관행이며 권장해서는 안 됩니다.
인터넷에 연결된 장치나 웹 페이지에 원래 기밀 정보(개인 키, 키 저장소 파일 및 시드 문구)를 입력하지 마십시오.
개인 키가 별도의 장치에 저장되도록 하드웨어 지갑을 사용하는 것이 좋습니다. MetaMask를 사용하여 dApp과 상호 작용하는 경우 MetaMask는 최근 사용자가 여러 하드웨어 지갑 주소를 사용할 수 있는 업데이트를 발표했습니다.


