서명 도난? Uniswap Permit2 시그니처 피싱에 주의하세요.
*이 글은 버신의 객원 독립연구원 시금치 시금치님의 후원으로 작성되었습니다! (twitter@wzxznl) Beosin 보안 연구원 Sivan과 공동으로 게시물을 작성했습니다.
해커, 이것은 Web3 생태계의 모든 사람들을 두렵게 하는 존재입니다. 개발 허점을 떠나 보안 사고가 발생하면 그 결과는 견디기 어려울 것입니다.
개인적으로, 당신이 하는 모든 온체인 상호작용이나 서명은 당신이 무엇을 하고 있는지 이해하지 못한다면 당신의 자산을 도난당할 가능성이 있습니다.따라서 보안 문제는 항상 암호화 세계에서 가장 골치 아픈 문제 중 하나였으며, 블록체인의 특성상 자산을 한 번 도난당하면 복구할 방법이 거의 없기 때문에 특히 보안 지식을 갖추는 것이 중요합니다. 암호화 세계에서.
최근에,버신의 절친 시금치가 발견한 새로운 낚시법이 두 달 가까이 활동 중이다.서명이 도용되는 한 그 방법은 극도로 은폐되어 방지하기 어렵습니다.또한 Uniswap과 상호 작용한 주소는 위험에 노출될 수 있습니다.이 기사에서 Beosin과 독립 연구원 Pincai는 모든 사람의 자산 손실을 방지하기 위해 이 서명 피싱 기술을 대중화할 것입니다.
첫 번째 레벨 제목
프로세스
최근 지인(가칭 리틀A)이 지갑 속 자산을 도난당한 후 시금치를 발견했는데, 일반적인 도난 수법과 달리 리틀A는 자신의 개인키를 공개하지 않았고 피싱 사이트의 컨트랙트와도 상호작용하지 않아 시금치가 창업했다. 자산 도난이 조사되었습니다.
블록체인 브라우저에서는 작은 A 지갑에서 훔친 USDT가 Transfer From 기능을 통해 전송된 것을 확인할 수 있습니다.여기서 과학을 대중화하자.이더리움에서 Token을 전송할 때 실제로 Token 스마트 계약의 Transfer 기능을 호출합니다.이 둘의 차이점은 단순히 Transfer는 자산 소유자 자신이 Token을 다른 주소로 전송하는 작업이고, Transfer From은 제3자가 해당 주소의 토큰을 다른 주소로 전송하는 것입니다.이는 지갑의 개인키가 유출된 것이 아니라 도난당한 자산이 다른 주소에서 옮겨졌다는 의미이기도 하다.
트랜잭션 세부 정보를 쿼리하여 몇 가지 주요 단서를 찾을 수 있습니다.
f d5 1로 끝나는 주소는 Little A의 자산을 0 c 8로 끝나는 주소로 이전합니다.
이 작업은 Uniswap의 Permit 2 계약과 상호 작용합니다.
그래서 여기서 의문점이 생깁니다. f d5 1로 끝나는 주소가 이 자산의 권한을 어떻게 얻었습니까? Uniswap과 관련된 이유는 무엇입니까?
먼저 Transfer From 기능을 성공적으로 호출하기 위한 전제 조건은 호출자가 이 Token의 할당 권한, 즉 승인을 가지고 있어야 한다는 것입니다. 우리가 어떤 Dapp을 사용할 때 때때로 자산 이전이 수반되면 먼저 승인(승인) 작업을 수행해야 Dapp 계약이 우리 자산을 이전할 권리를 갖게 됩니다.
이 수수께끼를 풀기 위해서는 계속해서 파헤쳐야 합니다.그리고 답은 f d5 1로 끝나는 주소의 상호작용 기록에 있고,Little A의 자산을 이전하기 위해 주소에서 이전하기 전에 주소도 Permit 작업을 수행했음을 알 수 있으며 이 두 작업의 상호 작용 개체는 Uniswap의 Permit 2 계약이며 이 Permit 기능과 Uniswap Permit 2는 무엇입니까 그 상황?
Uniswap Permit 2 계약은 2022년 말에 Uniswap에서 출시한 새로운 스마트 계약입니다. 공식 성명에 따르면 이것은 토큰 승인을 다른 애플리케이션에서 공유 및 관리할 수 있도록 허용하는 토큰 승인 계약으로, 보다 통합되고 더 많은 비용 효율적이고 보다 안전한 사용자 경험.
그리고 앞으로 점점 더 많은 프로젝트가 Permit 2와 통합됨에 따라 Permit 2는 모든 애플리케이션에서 표준화된 토큰 승인을 달성할 수 있습니다. Permit 2는 거래 비용을 줄이면서 스마트 계약의 보안을 강화하여 사용자 경험을 개선합니다.

이미지 설명
이미지 출처: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit 2
Permit 2의 출시는 전체 Dapp 생태계의 게임 규칙을 바꿀 수 있습니다.간단히 말해서 전통적인 방법은 자산 전송을 위해 Dapp과 상호 작용할 때마다 권한을 부여해야 하며 Permit 2는 이 단계를 저장할 수 있습니다. 사용자의 상호 작용 비용을 매우 효과적으로 줄이고 더 나은 사용자 경험을 제공할 수 있습니다.
해결책은 Permit 2가 사용자와 Dapp 사이의 중개자 역할을 한다는 것입니다. 사용자는 Permit 2 계약에 대한 토큰 권한만 승인하면 됩니다. Permit 2 계약을 통합하는 모든 Dapp은 이 승인 금액을 공유할 수 있습니다. 사용자를 위해 , 상호 작용 비용 감소 및 사용자 경험 개선 Dapp의 경우 사용자 경험 개선은 더 많은 사용자와 자금을 가져옵니다 이는 윈윈 상황이지만 동시에 양날의 검이 될 수도 있습니다. 문제는 대화식으로 2에 있습니다.
이미지 설명
이미지 출처: https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit 2
Permit 2의 등장은 향후 Dapp 게임의 규칙을 바꿀 수 있지만 강력한 양날의 검이라고 볼 수 있습니다. 예를 들어 우리가 지갑으로 어떤 Dapps에 로그인할 때 서명이 있어야 연결이 되는데 대부분의 사람들이 서명 내용을 꼼꼼히 확인하지 않고 서명 내용을 이해하지 못하는데 이것이 가장 무서운 부분입니다.
Permit 2 계약을 이해한 후 작은 A 사건으로 돌아가면 도난당한 자산이 Permit 2 계약과 상호 작용하는 이유를 이해할 수 있으므로 시금치가 이 Permit 2 시그니처 피싱 방법을 재현하도록 하십시오. 첫 번째가 매우 중요합니다. 전제 조건은 피싱된 지갑은 Uniswap의 Permit 2 계약에 대해 승인된 토큰을 가지고 있어야 합니다. Spinach는 Permit 2와 통합된 Dapp 또는 Uniswap에서 Swap이 수행되는 한 Permit 2 계약에 대한 승인이 필요하다는 것을 발견했습니다(Spinach A 보안 아래 그림 참조). 플러그인 사용).
또 무서운 점은 아무리 스왑을 하고 싶어도 Uniswap의 Permit 2 계약을 통해 기본적으로 토큰의 전체 잔액을 승인할 수 있다는 것입니다. 최대값 또는 기본값이며 Permit 2의 기본값은 무제한 할당량입니다....

이것은 또한 2023년 이후에 Uniswap과 상호 작용하고 Permit 2 계약에 대한 금액을 승인한 한 이 피싱 사기의 위험에 노출될 것임을 의미합니다.
첫 번째 레벨 제목
보조 제목
허가 기능:
허가 기능은 온라인으로 계약서에 서명하는 방법이라고 생각하시면 됩니다. 이 기능을 사용하면 (PermitSingle) 사전 서명할 수 있습니다."계약", 다른 사람(소비자)이 미래의 어느 시점에 귀하의 토큰 중 일부를 사용할 수 있도록 허용합니다.
동시에 이를 증명하기 위해 서면 계약서에 서명하는 것과 같은 서명(서명)도 제공해야 합니다."계약"서명한 사람은 바로 당신입니다.
그렇다면 이 기능은 어떻게 작동할까요?
먼저 현재 시간이 서명 만료일(sigDeadline)을 초과하는지 확인합니다. 서명한 계약서에 만료일이 있는 것처럼 현재 시간이 만료일을 초과하면"계약"더 이상 사용할 수 없으며 프로그램이 바로 중지됩니다.
다음으로 귀하의 서명이 실제로 귀하의 서명인지 확인합니다. 프로그램은 서명을 확인하기 위해 특별한 방법(signature.verify)을 사용하여 서명이 실제로 귀하에 의해 서명되고 다른 사람에 의해 위조되지 않았는지 확인합니다.
마지막으로 검사가 통과되면 프로그램은 다른 사람이 토큰 중 일부를 사용하도록 허용했음을 기록하도록 레코드를 업데이트합니다.
보조 제목
기능 확인:
보조 제목
_updateApproval 함수:
서명 확인이 통과되면 _updateApproval 함수가 호출되어 권한 값을 업데이트하므로 권한이 이전되었음을 의미합니다. 이때 아래 코드와 같이 transferfrom 함수를 호출하여 인증 후 지정된 주소로 토큰을 전송하는 것이 편리합니다.
퍼밋 기능을 설명한 후 체인의 실제 트랜잭션을 살펴보겠습니다.이 상호 작용의 세부 사항을 찾을 수 있습니다.
소유자는 Little A의 지갑 주소(끝 번호 308a)입니다.
세부 정보에서 승인된 토큰 계약 주소(USDT)와 금액 및 기타 정보를 볼 수 있습니다.
지출자는 꼬리 번호가 f d5 1인 해커 주소입니다.
sigDeadline은 서명의 유효시간, signature는 Little A의 서명 정보
그리고 Little A의 상호 작용 기록을 다시 살펴보면 다음과 같은 사실을 알 수 있습니다.작은 A가 이전에 Uniswap을 사용했을 때 그는 거의 무제한인 기본 인증 제한을 클릭했습니다.
재생해 보세요.Little A는 이전에 Uniswap을 사용하는 과정에서 허가된 Uniswap Permit 2 무제한 USDT 할당량과 Little A가 지갑 작업을 수행할 때 실수로 해커가 설계한 Permit 2 서명 피싱 함정에 빠졌고 해커는 Little A의 서명을 얻었습니다. Permit 및 Transfer From은 Little A의 자산을 이전하기 위해 Little A의 서명을 사용하여 Permit 2 계약에서 수행되었습니다.이미지 설명
출처: https://etherscan.io/address/0x000000000022d473030f116ddee9f6b43ac78ba3
이미지 설명
첫 번째 레벨 제목
텍스트
Uniswap Permit 2 계약이 앞으로 더 대중화될 수 있고 더 많은 프로젝트가 허가 공유를 위해 Permit 2 계약을 통합할 것이라는 점을 고려하면 다음과 같이 효과적인 예방 방법을 생각할 수 있습니다.
1 서명 콘텐츠 이해 및 식별:
Permit의 서명 형식은 일반적으로 Owner, Spender, Value, nonce 및 Deadline의 주요 형식을 포함하며, Permit 2의 편리함과 저렴한 비용을 즐기려면 이 서명 형식을 인식하는 방법을 배워야 합니다. (보안 플러그인을 다운로드하는 것이 좋습니다.)

Web3 분야에서 대부분의 피싱 사이트를 식별하고 지갑과 자산 보안을 보호할 수 있는 다음 Beosin Alert 피싱 방지 플러그인을 독자와 친구에게 권장합니다.
피싱 방지 플러그인 다운로드:
https://chrome.google.com/webstore/detail/beosin-alert/lgbhcpagiobjacpmcgckfgodjeogceji? hl=en
2 자산 지갑과 대화형 지갑은 별도로 사용됩니다.
자산이 많은 경우 모든 자산을 콜드 월렛에 넣고 소액의 자금을 체인의 인터랙티브 월렛에 넣어 피싱 사기의 경우 손실을 크게 줄일 수 있습니다.
3 Permit 2 계약에 너무 많은 금액을 승인하거나 승인을 취소하지 마십시오.
Uniswap에서 Swap을 수행할 때 상호 작용하려는 양만 승인하므로 각 상호 작용에 재인증이 필요하지만 약간의 상호 작용 비용이 발생하지만 Permit 2의 서명 피싱을 피할 수 있습니다. 할당량을 이미 승인한 경우 해당 보안 플러그인을 찾아 승인을 취소할 수 있습니다.
4 토큰의 특성과 허용 기능을 지원하는지 여부를 식별합니다.
앞으로 점점 더 많은 ERC 20 토큰이 이 확장 프로토콜을 사용하여 허가 기능을 실현할 수 있습니다.여러분은 보유하고 있는 토큰이 이 기능을 지원하는지 여부에 주의해야 합니다.지원하는 경우 거래 또는 조작이 가능합니다. 각별한 주의를 기울여야 하며 알 수 없는 각 서명이 허용 기능의 서명인지 엄격하게 확인해야 합니다.
5 사기를 당한 후 다른 플랫폼에 저장된 토큰이 있는 경우 포괄적인 복구 계획을 공식화해야 합니다.
사기를 당하고 토큰이 해커에 의해 전송되었지만 서약 등을 통해 다른 플랫폼에 토큰이 여전히 저장되어 있는 경우 이를 인출하고 안전한 주소로 전송해야 합니다. 이번에는 해커가 항상 귀하를 모니터링할 수 있음을 알아야 합니다. 주소의 토큰 잔액은 그가 귀하의 서명을 가지고 있기 때문에 토큰이 도난당한 주소에 표시되는 한 해커가 직접 전송할 수 있습니다. 이때 완전한 토큰 복구 프로세스를 공식화해야 합니다.토큰 추출과 토큰 전송의 두 프로세스가 함께 실행되어야 합니다.해커 트랜잭션을 삽입할 수 없습니다.MEV 전송을 사용할 수 있으며, 이는 약간의 블록체인 지식과 거래 선점 스크립트를 사용하여 이를 달성하기 위해 Beosin 팀과 같은 전문 보안 회사를 찾을 수 있습니다.
앞으로 Permit 2를 기반으로 하는 낚시가 점점 많아질 거라 생각합니다만,보조 제목
Reference:
https://t.co/G9Mnq8eUle
https://github.com/dragonfly-xyz/useful-solidity-patterns/tree/main/patterns/permit2


