본문 바로가기

Home363

[블록체인 보안] 스마트컨트랙트 취약성 hidden backdoor 소스파일 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Backdoor-assembly.sol 이 계약은 표면적으로 공정한 ‘LotteryGame’이라고 생각할수 있음 실제 계약 배포자, 관리자에게 특권이 부여되어 있음 어셈블리 레벨의 스토리지 변수 접근을 통해서 달성됨 referee function은 관리적인 백도어를 제공하도록 설계됨 pickWinner 함수는 무작위로 당첨자를 선택하는 것처럼 보이지만 실제로는 관리자가 당첨자를 설정할 수 있게 해줌 결국 일반적인 접근제어를 우회하며 무단 사용자가 상금 풀을 인출하는데 사용할 수 있는 러그풀(rug pull)의 한 유형임. 공격자는 인라인 어셈블리 작성하여 백도어로 스마트계약을 조작할수 .. 2023. 8. 24.
[블록체인 보안] 스마트컨트랙트 취약성, private data 취약성 테스트 소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Privatedata.sol 코드 취약성 - 솔리디티는 컨트랙트에 정의된 변수를 슬롯에 저장함. - 각 슬롯은 최대 32바이트 또는 256비트까지 데이터를 수용할 수 있음 - 온체인 데이터는 공개, 비공개든 읽을 수 있음. - 비공개 데이터가 있는 보안 컨트랙트로부터 메모리 슬롯을 예측하여 읽어 낼 수 있음. 테스트 참고문서 https://web3sec.notion.site/Private-data-6c0a2a7122e443988cdf514cc54a0a79 2023. 8. 24.
[블록체인 보안] 스마트컨트랙트 취약성 Unchecked external call - call injection 안전하지 않은 호출 취약점 TokenWhale 계약의 ApproveAndCallcode 함수에서 발생하는 취약점. 이 취약점은 임의의 데이터와 함께 임의의 호출이 실행될 수 있게 해서 잠재적인 보안 위험과 의도치 않은 결과를 초래할 수 있음 이 함수는 _spender 주소로부터 받은 _extraData에 대한 유효성 검사나 호가인을 수행하지 않고 저수준 호출(_spender.call(_extraData)를 사용하여 코드를 실행함. 이로 인해 예상치 못한 동작, 재진입공격 또는 무단작업이 발생할 수 있음 이 연습은 입력 및 반환값이 확인되지 않는 계약으로의 저수준 호출에 관한 것임, 호출 데이터가 조작 가능한 경우 임의의 함수 실행을 일으키는것이 쉬움. 테스트 소스 https://github.com/Sun.. 2023. 8. 24.
[블록체인 보안] 스마트컨트랙트 취약성(재진입공격) 재진입 취약점 EtherStore 재진입 취약점은 스마트계약설계의 결함으로, 공격자가 재진입을 악용하여 EtherStore 계약으로부터 자신이 권한이 있는 금액보다 더 많은 자금을 인출할 수 있는 문제임. 이 취약점은 EtherStore 계약의 withdrawFunds 함수에서 발생함. 여기서 Ether가 공격자 주소로 전송되고 나서 잔액을 업데이트 하기 때문임. 이로 인해 공격자의 계약은 잔액 업데이트 이전에 withdrawfunds 함수로 재진입 호출을 수행할 수 있음. 이로써 여러차례의 인출이 발생하고 EtherSotre 계약에서 모든 Ether가 흡수될 수 있음. 시나리오. EtherStore는 간단한 금고로, 모든 사람의 이더를 관리할 수 있음. 하지만 이는 취약함. 보안방법 check-effe.. 2023. 8. 24.
[블록체인 보안] 스마트컨트랙트 취약성 unsafe delegatecall 안전하지 않은 Delegate Call 취약성 Proxy 계약 소유자 조작 취약점은 스마트계약 설계에서 발행하는 결함으로, 공격자가 Proxy 계약의 소유자를 조작할 수 있는 문제임. 이 취약점은 Proxy 계약의 fallback 함수에서 delegatecall을 사용함으로써 발생 함. delegatecall은 공격자가 proxy 계약의 컨텐스트 내에서 delegate 계약의 pwn()함수를 호출할 수 있게 해주므로, Proxy 계약의 소유자 상태 변수값을 변강할 수 있음. 이로써 스마트계약은 런타임시 다른 주소에서 코드를 동적으로 로드할 수 있게 됨. 시나리오 Proxy 계약은 사용자가 로직 계약을 호출하는데 도움을 주기 위해 설계 됨. Proxy 계약의 소유자는 0xdeadbeef로 하드코딩되어 있음.. 2023. 8. 24.
[블록체인 보안] 솔리디티 해킹관련 파운더리 셋팅 및 테스트(selfdestruct) 1. 파운더리 설치 curl -L https://foundry.paradigm.xyz | bash foundryup 2. hello_foundry 초기화 forge init hello_foundry ls forge build forge test 3. 예제 테스트 1. Self Destruct - 가이드 https://web3sec.notion.site/Selfdestruct-4c64f3ceb02f477f9dfc0079b66c84a6 - 예제샘플소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Selfdestruct.sol 테스트 폴더에 해당 파일 저장. - 아래 명령 실행. forge test --contracts src/test/Self.. 2023. 8. 24.
38. 투자는 기다림 투자를 잘한다는 건 어떤 의미일까? 투자에 기술이 필요하다면 어떤 기술이 필요할까? 현재의 시장을 정확히 보고 일어날 미래에 대해서 최대한 예측 가능한 시나리오를 예상해 보는 것은 투자의 능력 중 하나다. 그리고 내가 투자할 수 있는 가용한 범위내에서의 자산을 잘 배분하여 적절한 시점에 적절한 곳에 잘 투자하는 건 중요하다. 모든 사람이 가진 투자의 능력이 다르다. 그리고 가지고 있는 자산의 범위도 다르다. 접할 수 있는 정보의 양과 질도 다르다. 그렇다면 공통적으로 투자자들이 가질 수 있는 기본적인 기술중 반드시 필요한 것 하나를 훈련하려면 무엇일까? 그중에 하나는 기다림이라고 생각한다. 투자는 '기다림'이다. 물론 이 '기다림' 전에 두가지가 필요하다. 1. 시장을 정확히 보고 최대한 예측 가능한 시.. 2023. 8. 8.
37. DeFi 투자에서 리스크를 완전히 제거할 수 있을까? 크립토 투자에는 여러 가지 방법이 존재한다. 특히 수익이 많이 발생하는 구간에선 더 많은 리스크에 노출이 된다. 가장 리스크가 높으면서도 수익이 좋은 방법은 DeFi투자가 있다. 그런데 이 DeFi투자란 건 꽤나 큰 잠재적인 리스크가 있다는 걸 투자자는 알고 있다. 연이어 전달되는 해킹소식에 불안하지만 여전히 투자자 입장에서 리스크를 알지만 그 리스크를 직접 체크할 순 없다. 잠재적인 위협이 코드에 존재하지만 그 위협에 대한걸 일반 투자자가 알 방법은 전혀 없다. 전문 개발자라도 해당하는 코드에 위협이 존재하는 걸 발견하는 건 쉽지 않다. 해킹을 위해 전문적으로 그 일을 주도적으로 하는 전문가가 옆에 있지 않는 이상 잠재적인 리스크는 존재한다는 걸 알지만 그 리스크를 부인할 만큼 꽤나 괜찮은 수익을 주기.. 2023. 8. 5.
36. 자신만의 투자성향을 파악하는것의 중요성 수익을 보장하는 코인 투자의 원칙 전체 글 링크 우리 모두는 성공적인 투자자가 되고 싶어 한다. 그래서 성공한 투자자의 행동을 따라 한다. 성공한 투자자들을 통해서 투자의 기본적인 철학과 방법 등을 배우는 건 중요하지만 그와 나는 다르다는 걸 깨달을 필요가 있다. 시간적으로도 다르고 처한 환경도 다르고 성향도 다르다. 그리고 그가 성공한 방법이 지금도 동일하지 않다는 걸 알아야 한다. 무엇보다 투자에는 자신의 성향이 꽤나 반영된다. 예를 들어 나의 경우는 새로운 것들에 대한 호기심이 많다. 그리고 오랫동안 무엇을 하기보다는 다양한걸 빠르게 변화시키면서 경험하는 걸 좋아한다. 이런 성향이 직업을 선택하는데도 반영이 되고 삶의 생활양식에도 영향을 미친다. 또한 투자에도 당연히 영향을 미치는데 자기랑 비슷한 .. 2023. 7. 29.