solidity
payable : 이더리움 내장 modifier 중 하나, *이더 전송*과 관련된 함수라면 무조건 붙여야만 전송 가능
modifier : 함수 전에 붙어있음
Fallback : 함수명이 없는 no-name 함수
* contract 내 존재하지 않는 함수를 호출하려고 할 때 사용
* 아무 정보없이 이더를 보낼 때 fallback 으로 들어가게 됨
* ICO할때 많이 사용
[Ethereum의 Solidity 취약점]
1. Reentrace : 재귀호출 취약점, 외부 계약 호출(smart contracter)이 초기 실행이 완료되기 전에 호출 계약에 대한 새 호출을 허용할 때 발생
race to empty, call to the unkown 등의 용어로 사용됨
2. Access Control : 접근제어 취약점, 접근해서는 안되는 함수와 코드에 허용되지 않은 사용자가 접근할 수 있게 됨
3. Arithmetic Issues : 연산문제 overflow, Underflow
예) unit 부호없음 항상 양수인데 음수로 될경우 엄청 큰 수가 됨
delegatecall는 매우 위험함으로 사용하지 말아야함
safeMath : overflow, underflow 를 모두 막아주는 라이브러리
4. Unchecked Return Values for Low Level Calls
저수준의 호출로 예상치 못한 일 발생
OPcode : ex)어셈
send보다 transfer 함수를 사용
5. DoS : gas limit에 도달했거나 예상치 못한 throw를 실행시켰을 때 사용할 수 없는 계약이 되어버리는 취약점
msg.sender가 contract일때 발생할 수 있는 문제점을 잘 체크해야 함 -> 이걸 체크하는 게 잇어야함
contract일때는 ICO를 받지 않도록 해야함
6. Bad Randomness : 블록체인의 투명성으로 드러나거나, 예측 가능하는 등의 임의성을 보장받지 못하는 취약점
이더리움은 랜덤함수가 구현되있지 않고, 블록번호, timestamp, hash 등을 사용함
실제 사용하는 랜덤함수는 seed값기반으로 랜덤한 척 할 뿐, 그래서 하드웨어 적인 랜덤 값을 뽑아냄 (마우스 움직이는 횟수 등)
블록체인은 하드웨어 랜덤을 사용할 수 없음 contract 내 생성된 랜덤값은 다 같아야하는데 하드웨어적으로는 불가능하지! 그래서 블록번호, timestamp, hash 등을 사용함 하지만, 이런것은 contracter라 생각하면 위험함으로 안전하지 않음
7. Front-Running : 블록에 올리기 전, 답을 뺏길 수 있는 취약점, 불법적으로 거래 정보를 미리 알고 선수치는 것
블록에 들어가기 전에 트랜젝션은 모두가 알고 있음, 블록에 올라가는 순서는 miner 마음대로
소인수분해 문제 (소인수 분해는 컴퓨터에게 어려운 문제, 두 큰 소수의 곱은 쉬운 문제! 검증하기 쉬움! / 만약 블록체인 계약에 N의 두 큰 소수 p와 q를 구하는 문제가 적혀있고, 가장 먼저 푼 사람에게 ETH를 준다면? alice가 bob이 올려놓은 정보를 보고 큰돈과 답을 보내면 alice를 먼저 채택함....!)
Transaction Ordering Dependence가 없다는 것을 알아 둘것
8. Time-Manipulation : timestamp, transaction order를 조작할 수 있다!? / miner가 계약에 대한 지분을 보유하면 적절한 timestamp를 선택하여 조작
내가 miner라면 timestamp도 조작할 수 있음. 위에서 ordering을 조작하는 것과 같은 원리
9. Short Address Attack : 주소를 짧게 적어 발생하는 오류
off-chain
함수해쉬값 4bytes + 함수의 인자1 32bytes + 함수의 인자2 32bytes
위 내용은 smart contracter 와 관련된 Youtube 영상을 보고 정리한 내용입니다. (영상 : https://www.youtube.com/watch?v=A5mYsFsypms)
'보안 및 개발 > ETC...' 카테고리의 다른 글
[Git] SSL certificate problem: self-signed certificate in certificate chain 에러 (0) | 2024.02.01 |
---|---|
SonarQube in Windows (0) | 2021.12.12 |
OWASP Juice shop & CTFd 환경 구성 (0) | 2020.03.17 |
git branch 사용하기 (0) | 2019.10.07 |