1.NFT와 Token의 차이점
1.NFT란 무엇일까?
(Non-Fungible-Token)
대체불가능한 토큰
- erp-721 제안
- erc-721에서 사용됌
- 사인받았냐 안받았냐에따라 가치가달라짐
- 민팅된 nft 토큰주소와 고유의 아이디만 가지고있으면
고유한 가치가 생김
소유권을 쉽게 증명할수있다는 특징 - nft에는 이미지만 담기지않고 음악도 담길수있음
2.ERC-20이란
- 대체가능한 토큰이다
- 서로교환이가능함
2.erc-721 작동방식
1.Erc-721에서 사용하는 주로 확인할 수 있는 코드들
balanceOf owner가 소유한 NFT의 갯수를 반환
owenerOf 특정 tokenId를 가진 NFT의 소유주 주소를 반환
approve 특정 계정에게 자신이 소유한 NFT 하나를 사용하도록 허용
getApproved 특정 NFT가 다른 계정에게 사용 승인되었는지의 여부 반환
setApporvalForAll 특정 계정에게 자신이 소유한 모든 NFT에 대한 사용을 허용
isApporvedForAll owner가 특정 계정에게 자신의 모든 NFT에 대한 사용을 허용했는지에대한 여부 반환
transferFrom NFT 소유권 전송
erc-20과 erc-721간의 함수사용차이점
erc-20 에서는 transfer와 transferFrom 을사용했지만
erc-721에서는 위한가지만사용
그이유는 아래 함수를사용하기때문이다
safeTransferFrom 받는 주소가 NFT를 받을 수 있는지 확인 후 NFT 소유권 전송
우리는 보통 서명을 통해서 개인키를 받아내는데
이거를 어떻게 해킹을 통해서 개인키를훔쳐서
컨트랙트를 수정해서 nft와 토큰을 가져갈까?
해킹당하는경우에는 흔히 두가지 경우가 있다.
1.지갑연결하는경우
악의적인 링크
ex)
NFT 민팅의 경우 티켓팅하는것처럼 하기가 매우 어려울수가있다(봇을 돌리는경우가 아주 빈번함) 이때 서버의 사정상 어쩔수 없었다며 관리자와 동일한이름의 사람이 링크를걸어 지갑을 연결해달라고 요청할때가 있는데
절.대.로 들어가면 안됀다.
혹여나 들어가더라고 지갑연결은 금물
2.소매넣기
1.자기지갑에 모르던 NFT, 공짜토큰이 들어와 있는 경우가 발생
지갑 소유자 :아싸 공짜 nft인데 오픈씨에올려서 팔아야겠다
이때 오픈씨에 리스팅하면 털린다.
어떻게 털리냐면
리스팅을 하게되면 nft에 있는 코드가 스마트컨트랙트를 수정하여 지갑을 사용할수있는 권한을 해킹한사람도 받게되기 때문이다
위 내용으로 부족하여 지인에게 부탁하여 물어보았다
Q.이런경우가 어떤방법으로 개인키가 털리는지
궁금합니다.
메타마스크에는 자동승인이란 기능이 내장되어있는데
자동 승인이란 댑에 접근할 때마다 승인 버튼을 눌러야 처리가 되는 번잡함을 없애기 위해 메타마스크가 만든 추가 기능이다.
매번 로그인을 수동으로 해야하는 불편함을 없애려고 '자동 로그인' 기능을 만든 원리와 유사하다. 자동 승인을 활성화하면 사용자는 해당 댑에서 추후에 다시 승인 버튼을 일일이 누르지 않아도 된다.
여기서
approve 및 서명 과정에서 NFT와 erc-20토큰에 대한 권한을 위임하게 되는데
거기서 악의적인 컨트랙트에 서명을 하게 되면 제 NFT와 토큰에 대한 전권을 위임하게 되고
해커는 제 지갑에 있는 eth을 최대한 높은 gwei를 땡겨서 전부 해커의 지갑으로 트랜잭션을 발생시켜
전부 가져가게 됩니다
그리고 이미 모든 권한이 넘어가 있기에 손 쓸 수가 없는 거구요
소매넣기 하는 NFT의 컨트랙트에 끼워넣는 경우가 많습니다
이를 통하여 빈번히 일어나는 해킹의 경우를 찾아보았다.
나도조심해야지..
개발자로써는 이런 사건을 미연에 방지하는게 제일 중요하다고 생각.