본문 바로가기

블록체인교육129

메타마스크 지갑에 비트코인 사용하기 메타마스크는 이더리움 재단에서 만든 지갑이다. 그래서 이더리움 계열의 토큰만 기본적으로 지원해준다. 이더리움 계열의 토큰은 이더리움의 EVM 환경에서 활용할 수 있는 토큰이다. 그런데 최근에 메타마스크에서 모든 종류의 지갑을 지원할 수 있는 기능을 출시했다. 바로 스냅스인데, 이 스냅스를 활용해서 이제 메타마스크에서 비트코인을 받고 보낼 수 있게 되었다. 메타마스크의 스냅스가 먼지 간단하게 살펴본 뒤에, 비트코인을 어떻게 받고 보낼 수 있는지를 설명하겠다. 1. 메타마스크 스냅은 무엇? - 메타마스크에 다른 개발자들이 기능추가를 할 수 있도록 어떤 공간을 오픈해줬다는 거다. - 우리가 크롬브라우저를 사용하면서 크롬의 익스텐션을 활용하듯이, 메타마스크에서 크롬의 익스텐션 같은 기능을 만들어줬다고 이해할 수.. 2023. 10. 28.
비트코인이 근본인 이유, 이중지불 해결한 최초의 암호화폐 1.비트코인이 해결하고자 했던 문제 비트코인 백서에서 초록은 전체 비트코인 백서 내용을 요약한 글이다. 즉, 비트코인 백서 전체를 보지 못하더라도 최소한 이 초록만이라도 보게 되면 비트코인 핵심가치를 이해할 수 있다. 비트코인 초록에 쓰인 글이다. 글은 한글이지만 해석이 어렵다. 그래서 초록부터 대부분 읽다가 포기해버린다. 포기하지 않고 비트코인 백서를 이해할 수 있도록 쉽게 설명하려고 한다. ​ P2P 방식, peer to peer 방식이라고 하는데, 이 방식은 쉽게 이야기해서 나와 당신, 그리고 나와 당신과 또 다른 3자, 혹은 또 다른 사람들이 직접적으로 연결되어 있는 방식을 의미한다. 예를 들어서 커피숍에서 동호회 모임을 했는데, 한 장소에 모두 모여서 서로의 말을 모두 직접 들을 수 있고 전달할.. 2023. 10. 28.
[블록체인 보안] 스마트컨트랙트 취약 (transfer(),send() 부적절한사용) payable.transfer(), send()의 부적절한 사용 이스탄불 하드포크에서 EIP1884가 시행된 이후, SLOAD 작업의 가스 비용이 증가함으로써 일부 기존 스마트계약이 손상됨. ETH를 수신자에게 전송할때, 솔리디티의 transfer() 또는 send() 매서드를 사용하는 경우 특정한 결함이 발생할 수 있는데, 특히 수신자가 스마트계약인 경우임. 이러한 결함으로 인해 ETH를 스마트계약 수신자에게 성공적으로 전송할 수 없게 될 수 있음. 구체적으로 스마트계약이 다음중 하나를 만족할때 전송은 반드시 실패함. 1 . 지불 가능한 fallback 함수를 구현하지 않은 경우. 지불 가능한 fallback 함수가 2300 이상의 가스 단위를 소비하는 경우 2300 이하의 가스단위를 소비하는 지불 가.. 2023. 8. 25.
[블록체인 보안] 스마트컨트랙트 취약성(반복문에 return사용) 내부 루프 반복에서의 return 사용으로 의도치 않은 종료 발생 BankContractBug의 addBanks 함수는 루프 반복 내에서 return 문을 잘못 사용하여 루프가 의도치 않게 종료되는 문제를 나타냄. Return 문이 내부 루프 내에 배치되어 있으며, 이로 인해 모든 은행 주소에 대한 반복이 완료되기 전에 함수가 조기 종료됨. 조치방안 Return 대신에 break를 사용. 테스트 소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/return-break.sol 취약성 코드 테스트 참고문서 https://web3sec.notion.site/Return-vs-break-06125cc0e8ff4328b6b3551ad8b04ce5 2023. 8. 25.
[블록체인 보안] 스마트컨트랙트 취약성 (txGasPrice 조작) txGasPrice 조작 txGasPrice 값을 조작하는 것은 의도하지 않은 결과와 잠재적인 금전적 손실을 초래할 수 있음. calculateTotalFee 함수에서는 gasUsed + GAS_OVERHEAD_NATIVE를 txGasPrice와 곱하여 총 수수료를 계산함 문제는 txGasPrice 값이 공격자에 의해 조작될 수 있다는 것으로, 이로 인해 과도한 수수료 계산이 발생할 수 있음 조치방안 이 취약점을 해결하기 위해서는 가스 오라클(gas oracle)와 같은 보호 장치를 구현하느 ㄴ것이 좋음. 이를 통해 신뢰 할 수 있는 출처에서 평균 가스 가격을 얻을 수 있음. 테스트 소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/gas.. 2023. 8. 25.
[블록체인 보안] 스마트컨트랙트 취약성(배열 삭제 간과) 배열 삭제 간과 : 데이터 불일치로 이어지는 문제 솔리디티에서 동적 배열요소를 적절하게 삭제하지 않으면 데이터 불일치가 발생할 수 있음 배열에서 요소를 삭제할때 삭제 과정을 올바르게 처리하지 않으면 배열은 여전히 스토리지 공간을 유지하게 되며 예상치 못한 동작이 발생할 수 있음 조치방안 옵션1 : 마지막 요소를 복사하여 제거할 위치에 넣는 방법 옵션2 : 오른쪽에서 왼쪽으로 요소를 이동하여 삭제하는 방법 테스트 소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Array-deletion.sol 코드 취약부분 테스트 참고문헌 https://web3sec.notion.site/Array-Deletion-Oversight-199221ca7495.. 2023. 8. 25.
[블록체인 보안] 스마트컨트랙트 취약성(Struct Deletion Oversight) 구조체 삭제 간과 불완전한 구조체 삭제는 잔여 데이터를 남기게 됨. 매핑을 포함하는 구조체를 삭제하더라도 해당 매핑은 삭제되지 않음. 이 버그는 솔리디티의 delete 키워드가 스토리지를 초기 상태로 재설정하지 않고 부분적인 초기화를 수행하기 때문에 발생함. Delete myStructs[structId]가 호출되면 이는 매핑 내의 id 만 기본값인 0으로 재설정하지만, 매핑 내의 다른 플래그는 변경되지 않음. 따라서 구조체 내부의 매핑을 삭제하지 않고 구조체를 삭제하면 남아 있는 플래그라 스토리지에 계속 남게 됨. 조치 이 버그를 수정하려면 구조체 자체를 삭제하기 전에 구조체 내부의 매핑을 삭제해야 함. 테스트소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/m.. 2023. 8. 25.
[블록체인 보안] 스마트컨트랙트 취약성(abi.encodePacked()) Abi.encodePacked() 해시 충돌 여러 가변 길이 인자와 함께 abi.encodePacked()을 사용하는 경우 특정 상황에서 해시 충돌이 발생할 수 있음. 해시함수는 각 입력에 대해 고유하도록 설계되었지만, 해시 함수의 크기 제한이나 가능한 입력 수의 한계로 인해 충돌이 발생할 수 있음. 해당 이슈 문서 https://docs.soliditylang.org/en/v0.8.17/abi-spec.html?highlight=collisions#non-standard-packed-mode Deposit 함수에는 사용자가 _string1 및 _string2 라는 두개의 문자열 입력을 기반으로 계약에 이더를 예치할 수 있음. 계약은 이 두 문자열을 연결하여 고유한 해시를 생성하기 위해 keccak256.. 2023. 8. 25.
[블록체인 보안] 스마트컨트랙트 취약성(토큰의 소수점이슈) 정밀도 손실 - 소수점 이하를 반올림하여 0으로 모든 ERC20 토큰을 지원하면서, 이러한 토큰들은 서로 다른 소수 자리를 가질 수 있음. 예를들어 USDC와 USDC는 6개의 소수자리를 가짐. (계산시 조심해야 함) 분자가 분모보다 작으면 결과가 0이 되는 상황을 피해야 함 반올림과 관련된 문제는 다음과 같은 방법으로 피할 수 있음 필요한대로 반올림/버림 라이브러리 사용 결과가 0이 아니거나 분모가 분자보다 작거나 같음을 요구 분자를 먼저 나눈 다음 곱하는 대신에 연산을 리팩토링하여 정밀도 손실이 증폭되는 상황 피하기 테스트소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Precision-loss.sol 취약코드 테스트결과 참고문서 h.. 2023. 8. 25.