보안 고려 사항은 일반적으로 소프트웨어 및 특히 블록 체인의 다른 모든 고려 사항보다 우선합니다. 보안이 실패하면 다른 것은 중요하지 않습니다. 블록 체인은 탈 중앙화되고 신뢰할 수없는 거래가 작동 함을 입증하지만 그럼에도 불구하고 많은 블록 체인 보안 취약성이 남아 있습니다..

보안 공격은 설계 및 아키텍처 수준, 코딩 단계 및 운영 단계에서 존재합니다. 그리고 궁금한 점이 있다면 블록 체인을 해킹 할 수 있습니다..

블록 체인 보안 취약성 – 여기에서 영원까지

다이아몬드는 영원하며 스마트 계약은 배포 된 블록 체인이 계속 사용되는 한 지속됩니다. 결과적으로 모든 버그와 블록 체인 보안 취약성은 계약 기간 동안 지속됩니다..

일반적으로 각 블록 체인은 스마트 계약을 구현하기 위해 자체 프로그래밍 언어를 제공합니다. 자세히 살펴 보겠습니다.

스마트 계약 언어

블록 체인 환경에는 스마트 계약 개발을위한 자체 언어가 포함됩니다..

예를 들어, Ethereum 플랫폼에는 스마트 계약을 작성하는 Solidity 언어가 포함되어 있습니다. 제작자는 Solidity를 Turing 완전한 언어로 설계했습니다..

Turing 완전한 언어는 본질적으로 프로그래머가 기본 시스템이 할 수있는 모든 것을 구현할 수 있도록합니다. 결과적으로 이는 프로그래머에게 코드에서 루프를 구현하는 것과 같은 기능을 제공하여 잠재적으로 블록 체인 보안 취약성을 유발할 수 있습니다..

튜링 완전성

Turing 완전한 언어는 본질적으로 복잡성을 포함하고 복잡성은 버그와 취약성을 유발합니다..

비트 코인 네트워크에는 스크립트라고하는 프로그래밍 언어도 있습니다. 스크립트는 보안을 강화하기 위해 의도적으로 튜링이 완료되지 않았습니다..

프로그래머에게 제공되는 옵션이 적을수록 블록 체인 보안 취약성이 시스템에 침투 할 가능성이 적습니다..

결함이있는 코드를 야생에 공개 할 위험을 최소화하기 위해 프로그래머는 스마트 계약 프로그래밍에 내재 된 일반적인 함정과 안티 패턴을 이해해야합니다. (안티 패턴은 나쁜 프로그래밍 관행을 나타냄).

DAO 해킹 : 재진입 문제

블록 체인 보안 취약성 이미지

DAO 해킹

재진입 문제는 스마트 계약에 코딩 된 블록 체인 보안 취약성 프로그래머 중 가장 높은 순위를 차지할 것입니다. 재진입은 동일한 거래에 대한 여러 지출을 통해 계정을 비 웁니다. 환불 처리의 사용 사례는이 악용에 적합하지만이 결함은 설계 및 코딩 단계에서 해결되지 않으면 모든 종류의 거래에 영향을 미칩니다..

현재까지 가장 악명 높은 암호 화폐 공격 중 하나에서 DAO의 해커는 재진입을 악용했습니다. 어떤 조직 리더도 DAO (또는 탈 중앙화 자율 조직)를 운영하는 방법을 지시하지 않았고, DAO는 사용자가 투자 할 프로젝트에 투표 할 수있는 권한을 부여하도록 제안했습니다..

첫 달에 1 억 5 천만 달러 이상의 자금을 모금했습니다. 2016 년 6 월 17 일, 해커는 재진입 결함을 통해 조직에서 5 천만 달러를 낭비했습니다. Ethereum Classic (ETC)에서 Ethereum (ETH)으로의 하드 포크는이 해킹으로 인해 발생한 문제를 해결하기위한 노력의 결과를 가져 왔습니다..

재진입에 취약한 안티 패턴

코드에 대한 취약한 재진입 논리는 다음과 같습니다.

결제 처리 기능 () {

(1) 거래, 수취인 및 계정 잔액의 유효성을 확인하십시오.

(2) 거래 처리;

(3) 시스템 상태를 업데이트하여 트랜잭션이 처리되었음을 보여줍니다.

}

언뜻보기에는 논리가 정확하고 완전 해 보이지만 결함은 3 단계 이전에 2 단계를 수행하는 순서에 있습니다..

함수에 대한 첫 번째 호출이 2 단계 처리를 계속하는 동안 동일한 트랜잭션에 대한 다른 호출이 함수에 들어갈 수 있습니다. 상태 정보는 초기 상태로 유지되고 3 단계에서 아직 처리되지 않았으므로 두 번째 호출은 처리 할 유효한 트랜잭션으로 체크 아웃합니다..

결과적으로 시스템은 동일한 의무에 대해 두 번째로 통화를 사용합니다. 해커는 상태가 제대로 설정되기 전에 여러 트랜잭션을 함수로 돌립니다..

재진입을위한 치료

이 알고리즘 변경은 위의 문제를 해결합니다.

결제 처리 기능 () {

(1) 거래, 수취인 및 계정 잔액의 유효성을 확인하십시오.

(2) 시스템 상태를 업데이트하여 거래가 처리되었음을 보여줍니다.

(3) 거래 처리;

}

코드는 필요한 모든 예외 처리를 고려해야하며 모든 논리적 종속성도 고려해야합니다..

과다

오버플로는 프로그래머가 알아야 할 또 다른 일반적인 보안 결함입니다..

일부 프로그래밍 언어는 강력한 입력을 제공하고 다른 프로그래밍 언어는 약한 입력을 제공합니다. 강력한 형식의 언어는 프로그래머가 숫자 변수에 문자열 데이터를 할당하는 것을 거부하고 약한 형식의 언어는 이러한 작업을 허용합니다..

강력한 형식의 언어는 범위 제한을 적용합니다. 배열이 10 개의 요소 인 경우 프로그래머는 11 번째 요소에 액세스 할 수 없습니다. 약한 유형의 언어는 이러한 동작을 허용하지만 결과가 충돌합니다. 변수가 보유 할 수있는 최대 허용 값이 99이고 값을 100으로 지정하면 실행할 때 충돌이 발생하는 것을 확인하십시오.!

결과적으로 오버플로는 해커가 사용하는 익스플로잇입니다. 해커가 코드가 처리 할 수있는 범위를 벗어난 스마트 계약에 매개 변수를 제공하면 충돌이 발생합니다. 이러한 충돌은 여러 악용을 촉진합니다. 충돌은 서비스 거부 공격 (DDoS 공격)을 트리거 할 수 있으며 시스템 내부에 대한 중요한 정보가 때때로 오류 메시지에 표시됩니다..

웹 응용 프로그램에서 해커는 종종 자신의 악성 코드로 메모리를 채우므로 프로그램이 충돌하고 메모리의 임의의 지점으로 이동하면 악성 코드가 실행됩니다..

약한 유형의 언어는 강력하고 동적 인 유연성을 제공하지만 공격에 대비하기 위해서는보다 엄격한 설계와 테스트가 필요합니다..

다 머리 히드라

블록 체인 보안 취약성 이미지

소프트웨어 세계에는 수많은 보안 문제가 있습니다. 새로운 기술이 등장하면 새로운 위협이 나타납니다. 위에서 언급 한 익스플로잇 외에도 이러한 주목할만한 결함은 다른 많은 블록 체인 보안 취약점 중 일부에 불과합니다..

잘못된 암호화는 많은 골칫거리를 만듭니다. 암호화는 프라이버시를 보장하고 프라이버시가 깨지면 모든 것이 깨집니다. IOTA 팀은 제품의 초기 버전에서 처음부터 자체 암호화 라이브러리를 작성하는 실수를 저질렀습니다. 자체 암호화 롤링에 내재 된 문제는 모든 복잡한 소프트웨어에 버그가 포함되어 있으므로 버그가있는 암호화가 보장된다는 것입니다..

확립 된 암호화 라이브러리는 학계의 검증을 견디며 야생 생활을 통해 시간이 지남에 따라 신뢰할 수 있음을 입증합니다..

지갑의 세계에서 난수 생성은 진정한 무작위 여야합니다. 특히 암호 화폐 초기에는 일부 지갑이이 요구 사항에 실패했습니다..

암호 화폐 주소에는 고유해야하는 주소가 필요합니다. 고유성은 난수 생성기에서 비롯되며 난수 생성기는 프로세스를 시작하기 위해 시드가 필요합니다. 시드가 실제로 무작위가되지 않으면 시스템이 실패합니다..

잘못된 임의성의 결과는 동일한 주소가 여러 번 생성된다는 것을 의미합니다. 지갑이 주소 X를 사람 A에게 할당하고 나중에 언젠가 주소 X를 사람 B에게 할당하는 시나리오를 상상해보십시오. 지불이 주소 X로 가면 한 사람에게만 전달됩니다. 돈을받는 사람?

잘못된 임의성의 또 다른 문제는 해커가 시드를 만드는 데 사용 된 알고리즘을 파악할 때 발생합니다. 해커는 자신을 위해 시드를 재생성하고 시스템을 소유합니다..

길은 영원히 가고 파티는 끝나지 않는다

보안은 끝없는 싸움이며 프로그래머, 설계자 및 테스터가 코드에서 모든 취약성을 제거하더라도 운영 취약성은 남아 있습니다..

작업 증명 환경에서 악의적 인 행위자가 네트워크의 51 %를 제어하면 무결성이 파괴됩니다. 게임 이론은이 공격에 대한 완화를 제공합니다. 소규모 네트워크를 가진 새로운 암호 화폐는이 공격에 가장 큰 위험을 노출합니다. 그러나 51 % 공격은 통화 가치를 파괴하므로 공격자는 자신을 다치게합니다..

블록 체인은 인터넷에 상주하며 인터넷과 동일한 해커 노출을 공유합니다. 예를 들어 웹 사이트의 거래소에서 코인을 구매한다고 가정 해 보겠습니다. 인젝션 공격, 크로스 사이트 스크립팅, 피싱 공격 및 기타 모든 기존 웹 사이트 해킹이 우세합니다..

마지막 생각들

프로그래머가 버그로부터 보호하는 것처럼 프로그래머는 개발에 보안을 고려해야합니다. 작업에서 프로그래머를 돕기 위해 일부 도구가 존재하지만 프로그래머는 먼저 자신의 취약성을 이해하여이를 방지해야합니다..

그만큼 분산 형 애플리케이션 보안 프로젝트 (DASP) 블록 체인 보안에 대한 정보와 자원의 저장소가 되고자합니다. 그들은 자신을 다소 모델링 오픈 웹 애플리케이션 보안 프로젝트 (OWASP). 연간 OWASP Top 10에는 현재 존재하는 주요 웹 애플리케이션 취약성이 명시되어 있습니다. DASP Top 10은 블록 체인에 상응하는 리소스를 제공하고자합니다..

모든 공격이 미리 알려진 것은 아닙니다. 제로 데이 익스플로잇은 다른 사람보다 먼저 해커가 알고있는 익스플로잇을 정의합니다. 따라서 프로그래머는 소프트웨어를 설계하고 구현할 때 공격자처럼 생각해야합니다. 코드에서 취약점을 찾지 못하면 이익을 찾는 해커가 찾아 낼 수 있습니다..