본문 바로가기
Hack/Cryptocurrency

Upbit의 Aptos를 사칭한 Scam Token 입금 반영 사고 분석

by Becoming a Hacker 2023. 9. 24.
반응형

사고 요약

여러 정보들을 종합해보았을 때, 아래와 같은 흐름으로 사고가 발생했을 것으로 추측하고 있습니다.

1. Aptos Mainnet에서 코인 및 토큰 전송 시 APT 코인과 다른 토큰은 Payload의 Type_arguments를 기준으로 구분됨

- APT 코인 : 0x1::aptos_coin::AptosCoin

- 다른 토큰 : 0xf658475dc67a4d48295dbcea6de1dc3c9af64c1c80d4161284df369be941dafb::moon_coin::MoonCoin

2. 업비트에서 실제 입금 반영한 Transaction을 확인해보면, Type_arguments가 0x1::aptos_coin::AptosCoin가 아닌 토큰도 APT로 입금을 반영한 것을 볼 수 있음

3. 이를 악용하여 다수의 봇에서 불특정 업비트 입금 계좌로 Scam Token을 입금함

4. 위 문제로 Scam Token을 입금받았으나, APT 코인이 입금된 다수의 계정에서 APT 코인을 매도함

5. 업비트에서는 사고 인지 후, 입금 중단을 공지하였으며, 24일 23시를 기준으로 입출금 재개를 수행함


원인 분석

최초 트위터를 통하여 공격에 사용된 스캠 토큰의 주소는 0xc4f4e73e689b13799d6a1a52a9db1e0099de2e16967ca9bff97e9946dbedc4e9으로 확인하였습니다.

스캠 코인의 Transaction

 

APT Mainnet의 APT 코인을 전송할 경우, Payload가 아래와 같이 구성됩니다.

  • 즉, Type Arguments에 할당된 APT 코인을 To(arg[0])로 Amount(arg[1])만큼 보낸다는 Payload가 됩니다.
{
  "function": "0x1::coin::transfer",
  "type_arguments": [
    "0x1::aptos_coin::AptosCoin"
  ],
  "arguments": [
    "0x50d8f3484158b57de90ec4f8869469308b19d1c93784c699a19aa6ca6f8b5d8e",
    "57149000000"
  ],
  "type": "entry_function_payload"
}

출처 : https://aptos.dev/reference/move/?branch=mainnet&page=aptos-framework/doc/coin.md#0x1_coin_transfer

 

그런데 스캠 토큰을 전송한 Payload는 아래와 같이 구성이 되어있습니다.

  • 해당 function은 CoinType이 존재하지 않는 수신자가 존재하는 경우, 해당 코인 Type을 수신하도록 등록한 뒤 전송해주는 기능입니다.
  • 즉, Type Arguments에 할당된 Scam Token을 To(arg[0])로 Amount(arg[1])만큼 보내는데, CoinType을 받지 않는다면, 등록한 뒤 보낸다는 Payload가 됩니다.
{
  "function": "0x1::aptos_account::transfer_coins",
  "type_arguments": [
    "0xf658475dc67a4d48295dbcea6de1dc3c9af64c1c80d4161284df369be941dafb::moon_coin::MoonCoin"
  ],
  "arguments": [
    "0x2b1eff734a07eb6f50cd8410c5d819231496046d1979a60c4d59351e36d14e46",
    "3114000000"
  ],
  "type": "entry_function_payload"
}

출처 : https://aptos.dev/reference/move/?branch=mainnet&page=aptos-framework/doc/aptos_account.md#0x1_aptos_account_transfer_coins

 

입금 처리 시 Type_Arguments가 APT 코인을 의미하는 0x1::aptos_coin::AptosCoin이라면, 입금을 반영하고 아니라면 입금을 반영하지 않았다면 해당 사고가 발생하지 않았을 것 같습니다.

 

실제 업비트에서 사고가 발생한 입출금 처리 내역을 보면 49.79개의 APT 코인이 입금 처리된 것을 볼 수 있습니다.

입출금 처리 내역

 

그러나 실제 Payload에서 확인할 수 있듯이, Type Arguments는 0x1::aptos_coin::AptosCoin가 아닌 Scam Token인 

0xf658475dc67a4d48295dbcea6de1dc3c9af64c1c80d4161284df369be941dafb::moon_coin::MoonCoin임을 확인할 수 있습니다.

{
  "function": "0x1::aptos_account::transfer_coins",
  "type_arguments": [
    "0xf658475dc67a4d48295dbcea6de1dc3c9af64c1c80d4161284df369be941dafb::moon_coin::MoonCoin"
  ],
  "arguments": [
    "0x4f6a3d861bf96e9f32b6a3e436a4f58bae1cb4c2808b4ec6dabb35c4201b7862",
    "4979000000"
  ],
  "type": "entry_function_payload"
}

 

Reference

 

 

반응형

댓글