서명이 도난당했나요? 유니스왑을 사용해보신 분들은 주의해주세요! Permit2 서명 피싱에 대한 이해하기

이 기사는 기계로 번역되었습니다
원문 표시
이 글에서는 최근 두 달 사이에 활성화된 새로운 피싱 수법을 소개합니다.서명만 사용하면 도용됩니다.이 수법은 극도로 은폐되어 예방하기 어려우며, Uniswap 상호 작용을 사용한 주소가 노출될 수 있습니다. 위험에. 이 기사에서는 이 시그니처 피싱 기술을 대중화하고 모든 사람이 더 많은 자산 손실을 피할 수 있도록 노력할 것입니다.

작성자: 시금치 시금치 버신초청독립연구원, 시반(버신보안연구원)

해커, 이것은 Web3 생태계 모두를 두렵게 하는 존재입니다.프로젝트 팀 입장에서는 전 세계의 해커들이 당신을 노려볼 수 있을 때, 코드의 오픈 소스 기능은 프로젝트 팀으로 하여금 잘못된 코드 라인을 작성할 것을 두려워하게 만듭니다. 허점을 방치하면 보안 사고가 발생했을 때 그 결과를 감당하기 어려워집니다.

개인의 경우, 수행 중인 작업이 무엇을 의미하는지 이해하지 못한다면 모든 온체인 상호 작용이나 서명으로 인해 자산이 도난당할 가능성이 있습니다. 따라서 보안 문제는 항상 암호화 세계에서 가장 골치 아픈 문제 중 하나였으며, 블록체인의 특성상 한번 도난당한 자산을 복구할 수 있는 방법이 거의 없기 때문에 특히 보안 지식을 갖추는 것이 중요합니다. 암호화의 세계.

최근 버신의 절친한 친구 시금치가 지난 두 달간 활동한 새로운 피싱 수법을 발견했습니다 .서명만 서명하면 도용됩니다.수법은 극도로 은폐되어 예방하기 어렵고, 사용된 주소는 다음과 같습니다. Uniswap 상호 작용은 위험에 노출될 수 있습니다. 이 기사에서 Beosin은 독립 연구원 Spinach 와 협력하여 이 시그니처 피싱 기술을 대중화하고 모든 사람의 더 많은 자산 손실을 방지하려고 노력했습니다.

다음은 Spinach의 개인적인 경험을 다시 설명한 것입니다.

프로세스

최근 친구(가칭 리틀A)가 자신의 지갑 자산을 도난당한 후 시금치를 발견했는데, 리틀A는 일반적인 도난 수법과 달리 개인키를 유출하거나 피싱 사이트의 계약서와 연동하지 않았기 때문에 시금치는 시금치를 발견했다. 자산도용에 대한 조사가 시작되었습니다.

블록체인 브라우저에서 Little A의 지갑에서 훔친 USDT가 Transfer From 기능을 통해 전송된 것을 볼 수 있습니다. 여기서 대중적인 과학을 해보겠습니다. 이더리움에서 토큰을 전송할 때 실제로 토큰 스마트 계약의 전송 기능을 호출합니다. 간단히 말하면, Transfer From은 자산 소유자가 직접 토큰을 다른 주소로 전송하는 작업인 반면 Transfer From은 제3자가 해당 주소의 토큰을 다른 주소로 전송하는 작업입니다. 이는 지갑 개인키가 유출된 것이 아니라 도난당한 자산을 다른 주소에서 토큰을 전송하기 위해 다른 주소에서 전송했다는 의미이기도 합니다.

거래 세부정보를 쿼리하면 다음과 같은 몇 가지 주요 단서를 찾을 수 있습니다.

  • fd51로 끝나는 주소는 Little A의 자산을 a0c8로 끝나는 주소로 이전했습니다.
  • 이 작업은 Uniswap의 Permit2 계약과 상호 작용합니다.

그렇다면 fd51로 끝나는 주소가 어떻게 이 자산에 대한 권한을 얻었는지에 대한 의문이 생깁니다. 유니스왑과 왜 관련이 있나요?

먼저 Transfer From 기능을 성공적으로 호출하기 위한 전제조건은 호출자가 이 토큰에 대한 할당량 권한, 즉 승인을 받아야 한다는 점을 알아야 합니다. 우리가 일부 Dapp을 사용할 때 때로는 자산 이전이 포함되면 먼저 승인(승인) 작업을 수행해야 Dapp 계약이 자산을 이전할 수 있는 권한을 갖게 됩니다.

이 퍼즐을 풀려면 계속해서 파헤쳐야 하는데, 그 답은 꼬리번호 fd51을 갖는 주소의 상호작용 기록에 있습니다. 해당 주소가 Little A의 자산을 전송하기 위해 Transfer From을 수행하기 전에 해당 주소도 Permit을 수행한 것을 확인할 수 있습니다. .연산과 이 두 연산의 상호작용 객체는 Uniswap의 Permit2 계약인데, 이 Permit 함수와 Uniswap Permit2의 상황은 어떻게 되나요?

Uniswap Permit2 계약은 Uniswap이 2022년 말 출시한 새로운 스마트 계약입니다. 공식 성명에 따르면 이는 토큰 인증을 다양한 애플리케이션에서 공유하고 관리할 수 있도록 하는 토큰 승인 계약으로, 보다 통합되고 비용이 많이 듭니다. -효과적이고 안전한 사용자 경험.

그리고 앞으로 점점 더 많은 프로젝트가 Permit2와 통합됨에 따라 Permit2는 모든 애플리케이션에서 표준화된 토큰 승인을 구현할 수 있습니다. Permit2는 스마트 계약의 보안을 강화하는 동시에 거래 비용을 줄여 사용자 경험을 향상시킵니다.

먼저 Uniswap이 Permit2를 출시하는 이유를 이해해야 합니다.예를 들어 특정 Dex에 대해 Swap을 수행하려는 경우 전통적인 상호 작용 방법은 먼저 Dex에 대한 권한(승인)을 수행한 다음 Swap을 수행하는 것입니다. 보통 가스비 2배가 들고 사용자 입장에서는 마찰비용이 너무 높아 다들 이런 경험을 해보셨을 거라 생각합니다.

이미지 출처: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit2

Permit2의 출시는 전체 Dapp 생태계의 게임 규칙을 바꿀 가능성이 높습니다. 간단히 말해서 전통적인 방법은 Dapp과 상호 작용하여 자산을 전송할 때마다 이를 승인해야 한다는 것입니다. Permit2는 이 단계를 저장할 수 있습니다. 이는 매우 사용자 상호 작용 비용을 효과적으로 줄이고 더 나은 사용자 경험을 제공합니다.

해결책은 Permit2가 사용자와 Dapp 사이의 중개자 역할을 한다는 것입니다. 사용자는 Permit2 계약에 대한 토큰 권한을 승인하기만 하면 됩니다. Permit2 계약을 통합하는 모든 Dapp은 이 승인 금액을 공유할 수 있습니다. 사용자의 경우 이는 상호 작용 비용을 줄이고 효율성을 향상시킵니다. Dapp의 경우 사용자 경험의 향상은 더 많은 사용자와 자금을 가져옵니다. 이는 win-win 상황이지만 양날의 검이 될 수도 있습니다. 문제는 Permit2와 상호 작용하는 방식에 있습니다. .

전통적인 상호 작용 방법에서는 승인이든 자금 이체이든 운영 사용자를 위한 체인 상호 작용입니다. Permit2는 사용자 작업을 오프체인 서명으로 전환하고 모든 온체인 작업은 중간 행위자(예: Permit2 계약 및 Permit2를 통합하는 프로젝트 당사자 등)에 의해 완료됩니다. 상호 작용의 역할은 사용자에서 중개 역할로 이전되며, 사용자의 지갑에 ETH가 없더라도, 사용자의 선택에 따라 다른 토큰을 사용하여 가스비를 지불하거나 중개 역할로부터 전액 상환받을 수 있습니다. 중개 역할.

이미지 출처: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit2

Permit2의 등장으로 향후 Dapp의 게임 규칙이 바뀔 수도 있지만 이는 강력한 양날의 검이라고 볼 수 있습니다. 사용자에게 오프체인 서명은 경계심을 늦추는 가장 쉬운 링크입니다. 예를 들어, 지갑이 일부 Dapp에 로그인할 때 연결하려면 서명이 필요하지만, 대부분의 사람들은 서명 내용을 주의 깊게 확인하지 않거나 서명 내용을 이해하지 못하는데, 이것이 가장 무서운 부분입니다.

Permit2 계약을 이해한 후 Little A 사건으로 돌아가면 도난당한 자산이 Permit2 계약과 상호 작용하는 이유를 이해할 수 있습니다.그런 다음 Spinach가 Permit2 서명 피싱 기술을 재현하게 하십시오.첫 번째로 중요한 전제 조건이 있습니다. Uniswap의 Permit2 계약에 승인된 토큰 Spinach는 현재 Permit2 또는 Uniswap과 통합된 Dapp에서 Swap을 수행하는 한 이를 Permit2 계약에 승인해야 한다는 것을 발견했습니다(Spinach는 아래 그림에서 보안 플러그인을 사용합니다).

또 다른 무서운 점은 스왑을 아무리 원하더라도 Uniswap의 Permit2 계약을 사용하면 기본적으로 토큰의 전체 잔액을 승인할 수 있다는 것입니다. MetaMask에서는 입력 금액을 사용자 정의할 수 있지만 대부분의 사람들이 스왑을 직접 클릭할 것이라고 믿습니다. 최대값 또는 기본값이며 Permit2의 기본값은 무제한입니다...

이는 귀하가 2023년 이후 Uniswap과 상호 작용하고 Permit2 계약에 대한 할당량을 승인한 한 이 피싱 사기의 위험에 노출될 수 있음을 의미합니다.

이전에 fd51로 끝나는 주소에서 Permit2 컨트랙트와 상호 작용했던 Permit 함수에 초점이 맞춰져 있기 때문입니다. 간단히 말하면 이 함수는 지갑을 사용하여 Permit2 컨트랙트에 승인된 Token 금액을 다른 주소로 전송하는 기능입니다. 귀하의 서명을 받은 후 해커는 귀하의 지갑에 있는 토큰에 접근하여 귀하의 자산을 전송할 수 있습니다.

이벤트에 대한 상세한 분석

허가 기능:

허가 기능은 온라인으로 계약을 체결하는 방법이라고 생각하시면 됩니다. 이 기능을 사용하면 귀하(PermitSingle)가 미래의 어느 시점에 다른 사람(지불자)이 귀하의 토큰 중 일부를 사용할 수 있도록 허용하는 "계약"에 미리 서명할 수 있습니다.

동시에, 이 "계약서"가 실제로 귀하가 서명했음을 증명하기 위해 종이 계약서의 서명과 마찬가지로 서명도 제공해야 합니다.

그러면 이 기능은 어떻게 작동하나요?

  1. 먼저, 현재 시간이 서명 유효 기간(sigDeadline)을 초과하는지 확인합니다. 귀하가 서명한 계약서에 유효 기간이 있는 것처럼, 현재 시간이 유효 기간을 초과하면 이 "계약"은 더 이상 사용할 수 없으며 프로그램이 즉시 중지됩니다.
  2. 다음으로, 귀하의 서명이 실제로 귀하의 것인지 확인합니다. 프로그램은 서명이 실제로 귀하에 의해 서명되었으며 다른 사람이 위조하지 않았는지 확인하기 위해 서명을 확인하기 위해 특별한 방법(signature.verify)을 사용합니다.
  3. 마지막으로 검사가 통과되면 프로그램은 다른 사람이 귀하의 토큰 중 일부를 사용하도록 허용했음을 기록하기 위해 기록을 업데이트합니다.

주로 확인 기능과 _updateApproval 기능에 중점을 둡니다.

확인 기능:

보시다시피, 검증 기능은 서명 정보 매개변수로부터 세 가지 데이터 v, r, s를 얻습니다. v, r, s는 거래 서명의 값이며, 이를 사용하여 주소를 복원할 수 있습니다. 위의 코드에서 볼 수 있듯이 컨트랙트는 트랜잭션 서명 주소를 복원한 후 이를 들어오는 토큰 소유자 주소와 비교하여 동일하면 확인이 통과되고 _updateApproval 함수 호출이 계속됩니다. 서로 다른 경우 트랜잭션이 롤백됩니다.

_updateApproval 함수:

서명 확인이 통과되면 _updateApproval 함수가 호출되어 인증 값을 업데이트합니다. 이는 권한이 전송되었음을 의미합니다. 이때 권한 있는 사람은 아래 코드와 같이 transferfrom 함수를 호출하여 지정된 주소로 토큰을 전송할 수 있습니다.

좋아요, 허가 기능을 설명한 후 체인의 실제 트랜잭션을 살펴보겠습니다. 이 상호 작용의 세부 사항을 살펴보면 다음을 찾을 수 있습니다.

  • 소유자는 Little A의 지갑 주소입니다(끝 번호 308a).
  • 승인된 토큰 계약 주소(USDT)와 금액은 세부정보에서 확인할 수 있습니다.
  • 스펜더는 fd51로 끝나는 해커 주소입니다.
  • sigDeadline은 서명의 유효 시간이고, 서명은 Little A의 서명 정보입니다.

Little A의 상호 작용 기록을 되돌아 보면 Little A가 Uniswap 사용 시 기본 승인 금액을 클릭한 것을 알 수 있는데, 이는 거의 무제한 금액입니다.

간단한 리뷰는 Little A가 이전에 Uniswap을 사용하는 과정에서 Uniswap Permit2 무제한 USDT 할당량을 승인했으며, Little A는 지갑을 운영할 때 해커가 설계한 Permit2 시그니처 피싱 트랩에 실수로 빠져 해커가 이를 획득했다는 것입니다. 서명, Little A의 서명은 Little A의 자산을 전송하기 위해 Permit2 계약에서 Permit 및 Transfer From 두 가지 작업을 수행하는 데 사용되었습니다. 현재 우리가 관찰한 바에 따르면 Uniswap의 Permit2 계약은 낚시 천국이 되었습니다. 이 Permit2 서명 피싱은 오직 두 달 전에 활동했어요.

출처: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3

그리고 대화기록을 보면 대부분이 피싱주소(Fake_Phishing)로 표기되어 있어 사람들이 지속적으로 속고 있음을 알 수 있다.

출처: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3

그것을 방지하는 방법?

Uniswap Permit2 계약이 앞으로 더 대중화될 수 있고 더 많은 프로젝트가 허가된 공유를 위해 Permit2 계약을 통합할 것이라는 점을 고려하면 효과적인 예방 방법을 생각해 볼 수 있습니다.

1 서명 내용을 이해하고 식별합니다.

Permit의 서명 형식에는 일반적으로 Owner, 지출자, 값, nonce 및 마감일의 주요 형식이 포함됩니다. Permit2가 제공하는 편리함과 저렴한 비용을 즐기려면 이 서명 형식을 인식하는 방법을 배워야 합니다. (보안 플러그인을 다운로드하는 것이 좋은 선택입니다)

Web3 분야의 대부분의 피싱 웹사이트를 식별하고 모든 사람의 지갑과 자산의 보안을 보호할 수 있는 다음 Beosin Alert 피싱 방지 플러그인을 모든 독자와 친구에게 권장합니다.

피싱 방지 플러그인 다운로드:
https://chrome.google.com/webstore/detail/beosin-alert/lgbhcpagiobjacpmcgckfgodjeogceji?hl=en

2. 자산을 보관하는 지갑과 상호 작용을 위한 지갑은 별도로 사용됩니다.

자산이 많은 경우 자산은 콜드월렛에, 소액의 자금은 체인상에서 상호작용하는 지갑에 넣어두는 것이 피싱사기 피해를 크게 줄일 수 있는 방법입니다.

3. Permit2 계약에 너무 많은 할당량을 승인하거나 승인을 취소하지 마십시오.

Uniswap에서 Swap을 수행할 때 상호 작용하려는 금액만 승인하면 각 상호 작용마다 재인증이 필요하지만 추가 상호 작용 비용이 발생하지만 Permit2 서명 피싱으로 인한 피해를 피할 수 있습니다. 이미 할당량을 승인한 경우 해당 보안 플러그인을 찾아 승인을 취소할 수 있습니다.

4. 토큰의 성격과 허가 기능 지원 여부를 식별합니다.

앞으로 점점 더 많은 ERC20 토큰이 이 확장 프로토콜을 사용하여 허가 기능을 구현할 수 있으므로 보유하고 있는 토큰이 이 기능을 지원하는지 여부에 주의가 필요하며, 지원하는 경우 토큰을 거래하거나 조작할 때 주의해야 합니다. 각별히 주의하고 알려지지 않은 각 서명이 허가 기능의 서명인지 엄격하게 확인하십시오.

5. 사기를 당한 후에도 여전히 다른 플랫폼에 토큰이 저장되어 있는 경우 완전한 구제 계획을 수립해야 합니다.

사기를 당하여 해커에게 토큰이 이전된 것을 발견했지만, 스테이킹 등을 통해 다른 플랫폼에 보관된 토큰이 아직 남아 있어 이를 출금하여 안전한 주소로 전송해야 하는 경우, 다음 사항을 알아두셔야 합니다. 해커는 항상 당신을 감시할 수 있습니다.그는 당신의 서명을 가지고 있기 때문에 토큰이 당신의 훔친 주소에 나타나는 한 해커는 그것을 직접 전송할 수 있습니다. 이때 완전한 토큰 복구 프로세스가 공식화되어야 하며 토큰을 인출하고 토큰을 전송하는 두 가지 프로세스를 함께 실행해야 하며 해커 트랜잭션을 삽입할 수 없으며 MEV 전송을 사용할 수 있으므로 일부 블록체인 지식과 코딩이 필요합니다. 이를 위해 Beosin 팀과 같은 전문 보안 회사를 찾아 트랜잭션 프론트 런닝 스크립트를 사용할 수 있습니다.

사례 읽기: 암호화폐 인플루언서가 "Scavenger" 공격을 받았는데, Beosin 보안팀은 그가 자금을 회수하도록 어떻게 도왔나요?

앞으로 Permit2를 기반 으로 한 피싱이 더욱 많아질 것으로 예상됩니다. 이 시그니처 피싱 수법은 매우 은밀하고 예방하기 어렵습니다. Permit2가 널리 사용됨에 따라 점점 더 많은 주소가 위험에 노출될 것으로 예상됩니다. 이 글을 읽고 나면 화면 앞에 있는 당신이 더 많은 사람들에게 이 글을 퍼뜨려 더 많은 사람들이 도난당하는 것을 막을 수 있습니다.

참조:
https://t.co/G9Mnq8eUle
https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit2

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트