전통적인 사이버 보안 관점에서 블록체인 보안은 무엇이 다른가?

웨이 씨가 말했다
2022-08-22 16:11:39
수집
왜 '더 안전한' 블록체인에서도 자주 사고가 발생할까?

원문 제목:《블록체인 보안과 전통 보안의 차이점

저자:웨이젠판, 웨이Sir의 이야기

전통 보안에 대해 이야기하면 많은 친구들이 익숙할 것입니다. 기본적으로는 취약점(관리, 기술, 인간)에 대한 공격과 공격에 대한 방어입니다.

하지만 블록체인 보안에 대해서는 많은 사람들이 잘 알지 못합니다. 어떤 사람들은 블록체인이 본질적으로 안전하다고 말하며, 전통적인 공격이 전혀 영향을 미치지 않는다고 주장합니다. 그러나 블록체인 내의 보안 사건을 자주 목격하게 되며, 이는 결코 적지 않습니다.

그렇다면 전통 보안과의 차이점은 무엇일까요?

이 글에서는 이에 대해 이야기해 보겠습니다.

1. 전반적으로

블록체인은 설계에서 대량의 암호학 기술을 사용하며, 비즈니스 계층, 통신 계층, 데이터 계층 모두에서 암호화, 서명, 해시 등의 기술을 사용합니다. 여기에 블록체인의 탈중앙화 설계가 더해져 블록체인이 수용하는 비즈니스의 기밀성, 완전성, 가용성이 전례 없는 수준에 도달했습니다.

하지만 본질적으로 블록체인은 여전히 소프트웨어 시스템입니다. 소프트웨어에서 발생할 수 있는 보안 문제는 블록체인에서도 존재합니다.

블록체인이 하층에서 완벽하더라도, 그 위에서 운영되는 다양한 Dapp, Web3 애플리케이션은 여전히 많은 취약점을 가질 수 있습니다.

이는 마치 기초가 아무리 안전하더라도 그 위의 건물이 안전 문제를 가질 수 있는 것과 같습니다.

이 글의 구조는 다음과 같습니다:

  • 보안은 주로 무엇을 봐야 할까요?
  • 전통 보안의 문제는 주로 어디에 있나요?
  • 블록체인은 어떤 보안 문제를 해결했나요? 해결하지 못한 것은 무엇인가요?

2. 보안은 주로 무엇을 봐야 할까요?

사실 보안은 세 가지 요소로 요약될 수 있으며, 지금까지 이를 초월한 것은 없습니다:

기밀성, 완전성, 가용성.

이 세 가지는 CIA(세 개의 영어 단어의 첫 글자 약어)로 줄여 부릅니다.

다른 표현이 있을 수 있지만, 이는 같은 차원에 있지 않습니다. 예를 들어 인증성, 제어 가능성, 감사 가능성, 부인 방지성 등은 모두 CIA의 부속 또는 연장으로, CIA를 위해 존재합니다.

CIA를 깊이 이해하는 방법은 무엇일까요?

UNIX에 익숙한 분들은 좀 더 쉽게 이해할 수 있습니다. UNIX의 사고방식에서는 모든 것이 파일이며, 파일의 보안은 궁극적으로 읽기, 쓰기, 실행(rwx)으로 귀결됩니다. 사용자가 특정 파일에 대한 접근 권한은 읽을 수 있는지, 쓸 수 있는지, 실행할 수 있는지에 따라 결정됩니다. 이는 대체로 기밀성, 완전성, 가용성과 대응됩니다.

기밀성은 다른 사람이 알기를 원하지 않는 것을 알리지 않는 것입니다.

이를 실현하는 방법은 대체로 다음과 같습니다:

  • 기록하지 않기, 어떤 서면 기록도 남기지 않고, 머릿속에만 남기며, 드러내지 않기.
  • 잠그기, 물리적이든 기술적이든 잠금을 통해 접근자를 제어하며, 권한이 있는 사람만 접근할 수 있게 하기.
  • 숨기기, 권한이 있는 사람만 어디에 있는지 알고, 다른 사람은 모르게 하기, 스테가노그래피도 여기에 포함될 수 있습니다.
  • 암호화, 코드나 암호 방식으로 접근할 수 있도록 하며, 암호집이나 키가 있어야 접근할 수 있습니다.

완전성의 개념은 이해하기 어려울 수 있지만, 가장 간단한 이해는 권한 없이 어떤 것의 어떤 부분도 추가, 감소, 변경할 수 없다는 것입니다. 만약 비권한적으로 이러한 작업을 수행하면 완전성이 파괴됩니다.

또한 완전성은 일관성이라는 비교적 직관적인 의미도 가지고 있습니다. 즉, 시스템 데이터가 실제 세계와 일치해야 하며, 완전성의 영어 단어인 integrity가 "정직"이라는 의미를 가지고 있듯이, 데이터가 변조되면 일관성이 반드시 파괴됩니다.

가용성은 상대적으로 이해하기 쉽습니다. 시스템이 다운되거나 느려지면 데이터가 사용할 수 없게 되어 가용성에 문제가 생깁니다. 시스템이 제공하는 서비스가 "사용할 수 없다", "작동하지 않는다", "효과가 없다"는 느낌을 주면 가용성에 문제가 생긴 것입니다.

정보 시스템이 보장해야 하는 것은 이 세 가지입니다.

일반적으로 CIA를 보장하기 위해 사용하는 방법은 인증, 권한 부여, 접근 제어, 검증, 암호화, 감지, 백업, 다중 활성화 등입니다. 물론 이러한 작업이 잘 이루어지지 않으면 다양한 취약점이 발생할 수 있으며, 한편으로는 발견되면 즉시 보완하고, 다른 한편으로는 근본적으로 시작하여 취약점 발생을 최소화해야 합니다.

전통 보안의 주체는 대체로 이러한 것들입니다.

3. 전통 보안의 문제는 어디에 있나요?

이미 보안 분야의 전문가라면 이 섹션을 건너뛰어도 됩니다.

보안 취약점은 여러 종류가 있으며, 이 글에서는 일일이 열거하지 않고 간단한 예시를 들어 대략적인 상황을 보여드리겠습니다.

가장 높은 차원에서 볼 때, 취약점의 공통적인 특징은 공격자의 행동이 소프트웨어와 하드웨어의 동작을 시스템 설계자의 예측을 초과하게 하여 부정적인 결과를 초래한다는 것입니다.

예 1: SQL 인젝션

SQL 인젝션이란 페이지 입력란이나 URL 등에서 해커가 프로그래머가 예상한 내용이 아닌 SQL 키워드를 섞어 입력하여, 프로그램이 입력 데이터를 처리할 때 SQL을 사용하고 입력 내용을 SQL 문장의 매개변수로 사용하는 경우입니다. 이렇게 되면 SQL 문장이 해커가 교묘하게 삽입한 SQL 내용을 실행하게 되어 해커가 프로그래머가 예상하지 못한 데이터베이스 작업을 수행할 수 있습니다.

프로그래머는 이러한 공격 시도를 포함한 입력을 허용해서는 안 되며, 대부분의 프로그래머는 보안 지식이 부족합니다. 조금이라도 알고 있더라도 잘 처리하지 못할 수 있어 해커가 우회할 가능성이 여전히 존재합니다.

해커가 파괴한 보안 속성은 무엇인가요? 해커는 시스템이 예상하지 못한 데이터를 작성하여 시스템의 완전성을 파괴했습니다. 해커가 SQL 문장을 통해 데이터베이스를 삭제했다면 시스템의 기밀성도 추가로 파괴했습니다.

프로그램에서 잘못된 점은 무엇인가요? 접근 제어가 제대로 이루어지지 않았습니다. 어떤 데이터도 들어오게 해서는 안 됩니다.

예 2: 버퍼 오버플로우 취약점

버퍼는 메모리에서 데이터를 저장하는 공간으로, 일반적으로 미리 설정된 크기가 있습니다. 사용자가 입력한 데이터를 메모리에 저장할 때 검사를 제대로 하지 않으면 미리 설정된 공간을 초과하여 버퍼 오버플로우가 발생할 수 있습니다. 프로그램의 실행 코드도 메모리에 있기 때문에 해커가 충분히 정교하게 설계하면 오버플로우를 통해 원래의 코드를 덮어쓰게 되어 컴퓨터가 결국 해커의 코드를 실행하게 됩니다.

이는 SQL 인젝션과 유사하게 해커가 입력 데이터의 기회를 이용하여 실행 가능한 코드를 작성하고 피해 호스트가 이를 실행하게 되는 것입니다!

이후 이러한 공격을 억제하기 위해 CPU 제조업체는 DEP(데이터 실행 방지) 기능을 제공하여 메모리 페이지에서 실행 가능 여부를 표시합니다. 운영 체제가 이 기능을 활용하면 이러한 공격을 상당히 방지할 수 있습니다. 또한 운영 체제는 ASLR 기술을 도입하여 힙, 스택, 공유 라이브러리 매핑 등의 선형 영역 배치를 무작위화하여 공격자가 목적 주소를 예측하는 난이도를 증가시킵니다. 그러나 이 두 가지 기술을 사용한다고 해서 공격자가 우회할 수 없는 것은 아닙니다.

해커가 메모리 영역을 마음대로 수정하는 것도 시스템의 완전성을 파괴하는 것입니다.

프로그램은 접근 제어를 제대로 하지 않았습니다.

예 3: 파일 업로드 취약점

예를 들어, 어떤 웹사이트가 사용자에게 jpg 사진을 업로드할 수 있는 경로를 제공했지만 검사를 하지 않아 해커가 JSP 파일을 성공적으로 업로드했습니다. 그런 다음 해커는 해당 업로드 파일의 URL을 찾아 자신이 작성한 스크립트를 실행할 수 있습니다. 이 스크립트는 완전히 트로이 목마일 수 있습니다.

앞서와 마찬가지로 검사가 철저하지 않아 해커가 빈틈을 이용해 설계자가 예상하지 못한 파일을 작성하고 설계자가 예상하지 못한 프로그램을 실행하게 됩니다.

프로그램의 접근 제어가 제대로 이루어지지 않았습니다.

예 4: 중간자 공격 취약점

중간자 공격에는 여러 종류가 있습니다. 예를 들어 TCP 공격, HTTP 공격, DNS 공격, 인증서 공격, 키 협상 공격 등이 있습니다.

공통적인 특징은 A가 B와 상호작용하고 있다고 생각하고, B가 A와 상호작용하고 있다고 생각하지만 실제로는 둘 다 중간자 C와 상호작용하고 있다는 것입니다. A와 B의 모든 내용은 C를 통해 전달되며, C는 A와 B 간의 통신 내용을 볼 수 있고, C는 A와 B 간의 통신 내용을 수정할 수 있습니다.

이는 최소한 A와 B 간의 통신의 기밀성을 파괴하며, C가 데이터를 수정하면 완전성도 파괴됩니다.

프로그램의 인증이 제대로 이루어지지 않았습니다.

예 5: 비밀번호 무차별 대입 공격

사용자의 비밀번호가 약하면 해커가 여러 번 시도한 후 비밀번호를 알아내고 시스템에 접근할 수 있습니다.

이런 경우 누군가는 책임이 사용자에게 있다고 생각할 수 있지만, 일반적으로 현대의 애플리케이션 시스템은 사용자가 설정한 비밀번호의 강도를 강제로 요구합니다.

해커가 성공하면 시스템의 완전성이 파괴됩니다(시스템이 해커를 수용하는 것은 일관성이 무효화됨을 의미합니다) 그리고 해커가 들어가서 보지 말아야 할 것을 보게 되어 기밀성이 파괴될 수 있습니다.

시스템의 인증이 제대로 이루어지지 않았습니다.

예 6: 권한 초과 취약점

어떤 웹사이트에서 사용자 A와 B가 모두 일반 사용자라면, 원칙적으로 자신의 개인 정보만 조작할 수 있어야 합니다. A가 어떤 해킹 방법을 통해 B의 개인 정보를 조작할 수 있다면 이는 평행 권한 초과입니다. 만약 A가 일반 사용자이고 B가 관리자라면, A가 어떤 해킹 방법을 통해 B만 할 수 있는 작업을 수행할 수 있다면 이는 수직 권한 초과입니다.

권한 초과 취약점은 일반적으로 권한 검증 로직이 충분히 엄격하지 않아서 발생합니다.

프로그램의 권한 관리가 제대로 이루어지지 않았습니다.

예 7: 피크 시간에 웹사이트 다운

유명인이 웹사이트에서 뉴스를 발표하면 대량의 사람들이 몰려들어 웹사이트가 다운되거나 응답이 매우 느려질 수 있습니다.

이는 전형적인 시스템 가용성 문제입니다.

시스템에서 무엇이 잘못되었나요? 확장성이 부족했습니다.

예 8: 자연 재해로 인한 시스템 데이터 손실

2015년, 구글의 벨기에 데이터 센터가 4번의 번개 공격을 받아 디스크가 손상되었습니다. 구글은 이러한 디스크를 긴급 복구했지만 일부 데이터는 여전히 영구적으로 손실되었습니다. 구글은 손실된 데이터가 매우 적으며 해당 데이터 센터의 0.000001%에 불과하다고 강조했습니다. 그럼에도 불구하고 일부 구글 사용자는 자신의 일부 개인 데이터를 영원히 잃게 되었습니다.

이는 전형적으로 데이터의 가용성을 파괴했습니다.

시스템의 재해 복구 백업이 제대로 이루어지지 않았습니다.

4. 블록체인은 어떤 보안 문제를 해결했나요?

블록체인과 전통 시스템의 가장 큰 차이점은 두 가지입니다: 하나는 대량의 암호 기술을 사용하고, 다른 하나는 탈중앙화 구조를 사용합니다.

전자는 기밀성과 완전성을 크게 강화하고, 후자는 가용성을 크게 향상시킵니다.

먼저 암호 기술 사용의 이점을 살펴보겠습니다.

초기 웹 세계에서는 IP 프로토콜, HTTP, FTP, TELNET 등에서 암호학 기술이 거의 사용되지 않았습니다. 당시 인터넷은 초기 단계에 있었고, 주된 목적은 상호 연결이었으며, 주로 대학과 연구 기관 간에 사용되었기 때문에 악의적인 공격을 고려할 여유가 없었습니다. 프로그래머들은 이러한 측면에서 항상 순수한 마음을 가지고 있었고, 다른 사람들을 신뢰할 수 있다고 생각하며, 아무도 "그렇게 지루할" 것이라고 생각하지 않았습니다.

그들은 나중에 현실 세계가 공격, 파괴, 위조 및 침입으로 가득 차 있다는 것을 깨달았고, 프로그래머들은 다양한 보안 기술을 도입해야 했으며, 암호학도 그에 따라 도입되었습니다. SSL, SSH, HTTPS, IPSec와 같은 새로운 세대의 네트워크 프로토콜이 등장했습니다.

하지만 이러한 것들은 대부분 전송 계층에 국한되어 데이터 전송을 암호화하는 데 중점을 두었으며, 비즈니스 계층이나 사용자 계층으로 올라가지 않았습니다. 최종 사용자는 암호학의 이점을 느낄 수 없었습니다. 사용자 계층의 암호화란 무엇일까요? 예를 들어, office 문서의 비밀번호 암호화, winrar 암호화, truecrypt 전체 디스크 암호화, 인터넷 뱅킹의 U 쉴드 등이 있습니다.

그러나 블록체인은 설계 초기부터 암호화 알고리즘을 내장하고 있어 다음과 같은 이점을 제공합니다:

  1. 블록은 해시를 통해 연결되어 있으며, 첫 번째 블록부터 마지막 블록까지 모든 블록이 올바른지 쉽게 검증할 수 있어 모든 블록 데이터의 완전성을 보장합니다.

  2. 위조된 블록의 해시는 쉽게 생성할 수 없으며, 특정 난이도의 해시만 인정됩니다. 이러한 해시를 위조하려면 막대한 계산이 필요하며, 이는 채굴과 맞먹는 연산 능력이 필요합니다.

  3. 각 사용자에게는 개인 키가 있으며, 개인 키에 해당하는 공개 키로 공개 주소를 생성합니다. 공격자는 무차별 대입 방법으로 개인 키를 얻을 수 없습니다.

  4. 사용자 시스템이 공개 키 체계에 기반하고 있기 때문에 사용자 인증, 사용자 서명, 대칭 키 생성(필요한 경우)이 매우 용이하고 편리합니다.

  5. 블록 내의 각 거래는 완료되기 위해 서명을 제공해야 합니다. 공격자는 개인 키가 없기 때문에 서명할 수 없으며 거래를 위조할 수 없습니다. 동시에 서명이 있으면 사용자는 자신이 발송한 거래를 부인할 수 없습니다.

블록체인이 해시와 공개 키 체계를 내장하여 암호학 수준의 완전성과 기밀성을 직접 제공합니다.

암호학 기술은 거의 한 세기 동안 발전해온 결과로 상당히 견고한 기반을 구축했습니다. 현대 암호학의 일부 공개 알고리즘은 세계적인 수준의 보안을 제공합니다. 이러한 알고리즘 중에서 현재 어떤 국가의 힘도 이를 해독할 수 없습니다(일부 뒷문 전설이 존재하지만, 이는 여전히 전설에 불과하며, 그 진실성을 입증할 명확한 증거는 없습니다).

이제 탈중앙화의 이점을 살펴보겠습니다:

1. 노드가 하나 더 늘어나면 백업도 하나 더 생깁니다.

비트코인을 예로 들면, 전 세계에 가까운 10,000개의 노드가 서비스를 제공하여 비트코인 시스템은 탄생 이후로 안정적으로 운영되고 있으며, 누구도 이를 중단시킬 수 없었습니다. 8,000개의 노드가 동시에 실패하더라도 여전히 2,000개가 작동하고 있습니다. 사실, 전체 네트워크에 몇 개의 노드만 작동하더라도 이 네트워크는 여전히 운영될 수 있습니다.

2. 일부가 배신하더라도 여전히 작동합니다.

시스템의 견고성은 특정 운영 체제나 데이터베이스의 보안에 의존하지 않고, 독특한 블록식 데이터 구조에 기반하고 있습니다. 일부 노드가 실패하더라도, 고의로 악의적인 행동을 하더라도 전체에 영향을 미치지 않습니다. 구체적으로 얼마나 많은 실패와 배신을 용인할 수 있는지는 특정 합의 알고리즘에 따라 다릅니다.

3. 특정인이나 기관에 의존하지 않습니다.

원하는 경우 소프트웨어를 다운로드(코드는 모두 오픈 소스입니다)하여 비트코인, 이더리움 또는 어떤 공공 블록체인에도 참여할 수 있습니다. 누구의 의견을 구할 필요가 없으며, 누구의 실종이나 퇴장으로 인해 이 소프트웨어의 미래를 걱정할 필요가 없습니다. 당신은 오직 자신의 판단, 관심 및 이익에 따라 이를 운영할 수 있습니다. 즉, 단일 개인이나 기관이 이를 통제할 수 없습니다.

탈중앙화는 가용성을 크게 향상시킵니다.

5. 블록체인이 해결할 수 없는 보안 문제는 무엇인가요?

가장 기본적인 논리에서 블록체인은 보안성을 크게 향상시켰지만, 문제가 없다고 보장할 수는 없습니다.

우리는 블록체인 보안의 고전적인 사례인 "922억 비트코인"과 "The DAO 해킹"에서 이미 이를 보았습니다:

비트코인은 프로그래머가 정수 오버플로우 문제를 간과하여 큰 웃음을 자아냈습니다. 총량이 2,100만 비트코인이라고 했는데, 어떤 거래에서 1845억 비트코인이 등장했습니다!

이더리움 기반의 The DAO는 개발자가 재진입 공격에 대해 전혀 알지 못해 사용자가 크라우드 펀딩한 300만 개 이상의 이더가 도난당하는 불행한 결과를 초래했습니다.

이는 최소한 두 가지를 알려줍니다:

  1. 블록체인 자체는 설계에서 대량의 암호학 알고리즘을 사용했지만, 설계나 코딩이 부주의하면 큰 취약점이 발생할 수 있습니다.

  2. 블록체인 자체가 철저하게 검증되어 완전히 신뢰할 수 있는 보안을 제공하더라도, 그 위의 스마트 계약은 보안을 보장할 수 없습니다.

스마트 계약 코드의 논리가 요구 사항, 설계, 코딩의 예상과 일치하지 않으면 문제가 발생할 수 있습니다.

이는 전통 보안과 전혀 다르지 않습니다.

또한 매우 중요한 점이 있습니다:

  1. 블록체인에서 사용하는 암호학 기술 자체에도 취약점이 있을 수 있습니다.

결국 암호학도 인간이 만든 것입니다.

인간이 만든 것에는 항상 취약점이 존재합니다.

관련 태그
체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
체인캐처 혁신가들과 함께하는 Web3 세상 구축