안녕하세요 C0FFEE 입니다.
바로 스캠 NFT를 없애는 정보를 보고싶으시면 여기를 클릭해주시기 바랍니다.
최근 특정 해커가 스캠 NFT 를 뿌리고 특정 사이트로 유도 후 가상 자산을 탈취하는 사건이 있었습니다.
제가 활동하는 선미야클럽에서도 피해자가 있었는데 다행히 2022.07.23 기준으로 해커가 선미야클럽 피해자의 NFT를 돌려주어서 피해 복구할 수 있었습니다.
해당 머니타이거라는 nft의 이미지가 위처럼 되어서 특정 사이트로 리빌을 유도하고 있습니다.
해당 사이트에 들어가면 아래와 같은 사이트가 나오게 됩니다.
여기서 지갑을 연결하고 리빌을 진행하게 되면 본인의 특정 NFT들이 해커의 지갑으로 전송되는 원리입니다.
현재 머니타이거의 mint를 실행한 지갑은 0xd5b215fb96a68bb3348591d378842354c429228a 이며 해당 지갑에 최초 클레이튼 자금이 들어온 지갑을 추적하니 바이낸스 입금이 있어서 선미야클럽 쪽에서는 바이낸스에게 KYC 정보를 요청한 사항입니다.
해커는 어떻게 내 가상자산을 탈취할 수 있었을까?
많은 일반인 분들이 해킹, 탈취를 당하는 이유는 크게 두 가지입니다.
1. 니모닉 키 또는 private key 노출
2. 나의 가상자산을 특정 트랜잭션이 이용할 권리를 부여하여 탈취하는 경우
저는 1번의 경우를 "해킹", 2번의 경우를 "탈취"라고 정의합니다.
1번의 경우는 나의 지갑 자체를 해킹하는 것으로 니모닉 키와 private key 가 노출된다면 이는 어떠한 조치도 취하지 못합니다.
대게 사용자의 실수로 인해 이루어지는데 니모닉 키 또는 private key를 네이버 드라이브, 클라우드 등에 업로드한 것을 해커가 발견하여 가상 자산을 탈취하게 됩니다.
이는 100% 사용자의 실수이며 절대 해커 스스로 니모닉 키와 private key를 알 수 없습니다. (우주에 존재하는 원자 개수보다 낮은 확률로 가능하긴 합니다. 약 1/ 10^77 확률로 알려져 있습니다.)
2번의 경우가 이번 머니타이거 사태인데요. 이는 특정 트랜잭션이 나의 가상자산을 사용할 권리를 내가 부여하여 해당 트랜잭션이 가상자산을 탈취하여 해커의 지갑에 전송하는 형태입니다.
엥..? 나는 내 가상자산을 사용할 권리를 부여하지 않았는데..?
분명 여러분은 트랜잭션을 실행할 때 'approve'를 진행하게 됩니다. 해당 메시지를 읽어보면 나의 가상자산을 사용할 권리에 대해 승인할 거냐는 메시지이며 피해자는 그 권한을 '본인'이 승인하였습니다. 내 가상자산 가져가주십쇼~ 하고 주는 꼴이죠. 절대 절대로 블록체인에서는 나의 지갑에 있는 가상자산을 해커가 맘대로 가져갈 수 없습니다. '본인' 이 가져갈 권리를 줘서 피해가 생긴 것입니다.
이러한 류의 피해가 발생하는 이유는 여러분이 민팅을 진행할 때 나의 클레이튼 (또는 다른 가상자산)을 프로젝트 진행자의 지갑에 보내게 되는데 이때 진행하는 'approve'에 익숙해져서 아무런 내용도 모르고 'approve'를 눌렀지 사실은 민팅을 실행하는 트랜잭션이 여러분의 가상자산을 가져갈 권리를 줘서 가능했던 것입니다. 익숙함에 속아서 이제는 무작정으로 approve를 누르게 되죠.
머니타이거의 리빌 코드를 간단하게 보겠습니다.
var contractAddress1 = "0x4c80dd5a8c1b429a0fb222d930f1db6d2de11fe5"; //MetaZellys
var contractAddress2 = "0xd643bb39f81ff9079436f726d2ed27abc547cb38"; //PuuvillaSociety
var contractAddress3 = "0xbaf8864ee1b5f2be3dcd637203aed524b86db4e4"; //ArcheWorld Fandom Card
var contractAddress4 = "0xc6fc271db0ecc36aa43653041476e2095a817956"; //KLAYDICE GENESIS
var contractAddress5 = "0x902f7a954ad18931f5e5721dc3d30737f6fbf07d"; //SNKRZ SKIN
var contractAddress6 = "0x8f5aa6b6dcd2d952a22920e8fe3f798471d05901"; //Sunmiya Club Official
...
var contractAddress19 = "0x4007cb1fb9d1158add29cf5d88568dd44a1f516e" // [Treasures Club] MASTERS
var contractAddress20 = "0xe66a466e45e9b3ae1ee840019dd4cd4e676d3d2d" // BomulPlanet Season One
async function approve()
{
const myContract = new caver.kct.kip17(contractAddress)
myContract.balanceOf(klaytn.selectedAddress).then((result) => {
tomass(contractAddress, result);
return result;
});
const myContract1 = new caver.kct.kip17(contractAddress1)
myContract1.balanceOf(klaytn.selectedAddress).then((result) => {
tomass(contractAddress1, result);
return result;
});
const myContract2 = new caver.kct.kip17(contractAddress2)
myContract2.balanceOf(klaytn.selectedAddress).then((result) => {
tomass(contractAddress2, result);
return result;
});
...
const myContract19 = new caver.kct.kip17(contractAddress19)
myContract19.balanceOf(klaytn.selectedAddress).then((result) => {
tomass(contractAddress19, result);
return result;
});
const myContract20 = new caver.kct.kip17(contractAddress20)
myContract20.balanceOf(klaytn.selectedAddress).then((result) => {
tomass(contractAddress20, result);
return result;
});
}
코드의 악용여지가 있어 일부분만 가져왔습니다.
위의 코드를 간단하게 말씀드리면 여러 nft의 contract ID에 해당하는 것이 본인의 지갑에 있으면 (본인의 지갑에 해당 nft 가 있으면) 그 가상자산을 사용할 권리를 'approve' 요청하고 '본인'이 승인을 하면 해당 nft 들을 특정 해커의 지갑에 보내게 됩니다.
내 가상자산 가져가줍쇼~~ 하고 제가 주게 되는 것이죠. 이 때문에 'approve' 요청은 항상 주의하셔야 합니다.
스캠 NFT를 없애보자!
하지만 이러한 스캠 NFT의 원리를 모르시는 분들은 자신의 지갑에 스캠 NFT 가 생긴다면 걱정이 생깁니다.
이거 가만히 놔도 둬 되는 건가요..? 괜히 해킹당하는 거 아닌가요?
이거 어떻게 없애요? 괜히 옮기다가 해킹당하는 건가요??
스캠 NFT 절대 건드리지 마세요. 해킹당할 수 있습니다.
결론부터 말씀드리면 스캠 NFT를 없앤다고 여러분의 지갑이 해킹당할 수는 없습니다.
추가로 스캠 NFT를 이동시킨다고 여러분의 지갑에 있는 가상자산이 탈취당할 수는 없습니다.
위의 글에도 말씀드렸다시피 블록체인에서는 나의 가상자산을 사용할 권리를 '본인' 이 부여하지 않는 이상 트랜잭션은 여러분의 가상자산을 가져갈 수 없습니다.
저의 많은 미야가 있는 지갑에 들어온 스캠 NFT 를 없애는(소각) 과정을 설명드리겠습니다.
- 블록체인에서 소각이란 아무도 개인키를 모르는 주소에 암호화폐를 전송하여 누구도 사용하지 못하게 하는 방식을 얘기합니다.
- 한 번 자산이 전송되면 다시는 나올 수 없어서 블랙홀 주소(또는 eater address)라고 말합니다.
우선 클레이튼에서 사용되는 블랙홀의 주소는 0x000000000000000000000000000000000000dead 입니다.
1. 오픈씨에서 해당 스캠 nft 확인
오픈씨에 본인의 지갑으로 로그인 후 'Collected' 또는 'More-Hidden' 에 있는 스캠 nft를 확인합니다.
우리가 해야 할 작업은 해당 스캠 nft를 소각하려고 합니다. (다른 주소로 보낼 수 있으나 그 주소의 주인이 있을 수 있으므로 우리는 '소각'을 진행해 아무런 피해자도 생기지 않게 하려고 합니다.)
아래의 --- 을 눌러 Transfer를 눌러주세요.
2. 스캠 NFT 소각
+ 0724
처음으로 스캠 nft 를 보낸다면 아래와 같은 화면이 나타날 수 있습니다.
어떠한게 떠도 오픈씨에서 transfer 작업을 진행한다면 안전하게 할 수 있습니다.
Transfer 버튼을 활성화하여 보내는 주소를 블랙홀 주소(0x000000000000000000000000000000000000dead) 로 설정해줍니다.
그리고 Transfer를 눌러줍니다.
결과를 보면 안전하게(?) 블랙홀 주소로 옮겨졌고 제 미야도 당연히 안전하답니다.
네 그렇습니다.
그냥 블랙홀로 보내면 됩니다.
스캠 NFT를 내 지갑에 없애는 법은 그냥 오픈씨를 통하여 소각을 시키면 됩니다.
해당 방법을 진행하면 절대로 내 가상자산을 탈취당할 수 없습니다.
많은 분들이 "해킹"이라는 말이 무섭고 "해킹"의 원리를 모르니 절대 스캠 nft를 건드리지 말라는 낭설이 퍼지는 것 같습니다.
하지만 스캠 nft 자체로는 절대로 해킹을 할 수 없고 스캠 nft를 이동시킨다고 나의 자산이 탈취당할 수 없습니다.
때문에 그냥 블랙홀로 해당 nft 를 보내면 안전(?) 하게 내 지갑에서 스캠 nft 를 없앨 수 있고 아무도 피해를 추가로 보지 않습니다.
결론은 -그냥 오픈씨 통해서 스캠 nft 를 블랙홀로 보내면 된다- 입니다.
다만 블랙홀로 보내면 절대로 다시는 보낸 자산을 찾을 수 없으니 스캠 nft 가 아닌 다른 자산을 블랙홀 주소로 보내는 것은 주의해주셔야 합니다.
제 첫 포스팅의 결론이 이렇게 허무해서 아쉽네요..
하지만 여러분께 조금이나마 블록체인, 가상자산의 탈취에 대한 이해를 도와드리고자 이 포스팅을 최우선으로 작성해보았습니다.
많은 분들이 잘 모르시는 스캠 nft 의 자산 탈취방법 및 소각 방법에 대해서 포스팅해보았습니다.
정말 간단하지만 많은 분들에게 도움이 되었으면 좋겠습니다.
주의하실 점
- 어떠한 투자도 100% 안전할 수는 없습니다.
- 꼭 투자 전 본인 스스로 확인이 되시면 투자를 진행하시기 바랍니다.
- 러그, 탈취, 해킹 등 투자 자본의 피해는 누구도 책임 지지 않습니다
+ 위의 포스팅에서 사용한 방법은 오픈씨를 통하여 nft를 전송하는 방법입니다.
+ 오픈씨에서는 safeTransferFrom이라는 함수를 이용하여 안전하게 nft를 전송합니다. 또한 해당 함수는 공익을 위해 오픈되어 있는 것으로 알고 있습니다.
+ 만약 safeTransferFrom이라는 함수를 이용하지 않는 방법으로 nft를 전송할 시 해커가 해당 nft 트랜잭션이 발생할 때 해킹을 시도할 코드를 넣을 수 있습니다 (해당 방법은 역으로 hook(coin 이름)에서 블랙리스트를 등록하여 해당 지갑에 있는 hook의 전송을 막은 이력이 있습니다.)
+ 때문에 본 포스팅은 오픈씨를 통한 transfer를 사용하여 소각하기를 추천드립니다.