https://cexplorer.io/article/how-is-cardano-protected-from-ddos-attacks
DDoS 공격은 온라인 서비스에 심각한 위협입니다. 공격의 주요 목적은 서비스를 사용할 수 없게 만드는 것입니다. Cardano는 온라인 서비스로 볼 수 있습니다. 인터넷을 통해 스마트 계약 실행, 자금 이체 및 기타 기능을 위한 플랫폼을 제공합니다. 다른 온라인 서비스와 마찬가지로 이론적으로는 DDoS 공격의 표적이 될 수 있습니다. 그러나 분산된 특성과 보안 조치로 인해 기존의 중앙 집중식 온라인 서비스보다 이러한 공격에 훨씬 더 탄력적입니다. Cardano가 DDoS 공격에 얼마나 강한지 읽어보세요.
DDoS 공격이란 무엇입니까
DDoS(분산 서비스 거부) 공격은 엄청난 양의 인터넷 트래픽을 발생시켜 네트워크, 서비스 또는 서버의 정상적인 기능을 방해하려는 악의적인 시도입니다. 이를 네트워크 스팸이라고도 합니다. 공격자(또는 스패머)는 사용자의 일반적인 트래픽과 유사해 보이는 유사한 트래픽(예: 거래)을 생성하려고 합니다. 이는 스팸 거래가 사용자 거래와 혼합되어 있음을 의미합니다.
기사의 맥락에서 스팸이라는 용어는 공격자의 거래에 사용됩니다. 이것은 스팸 이메일이 아닙니다.
이러한 공격은 손상된 여러 컴퓨터 시스템(봇넷)을 공격 트래픽 소스로 활용하여 작동합니다. 악용되는 시스템에는 컴퓨터 및 IoT 장치와 같은 기타 네트워크 리소스가 포함될 수 있습니다. 피해자의 서버가 봇넷의 표적이 되면 각 봇은 표적의 IP 주소로 엄청난 양의 요청을 보냅니다. 이로 인해 잠재적으로 서버가 압도당하고 결과적으로 일반 트래픽에 대한 서비스 거부가 발생합니다.
서버는 일반적으로 특정 트래픽 양에 맞게 크기가 조정됩니다. 스팸 트래픽은 트래픽을 급격하게 증가시킵니다.
따라서 DDoS 공격의 주요 목적은 서비스를 (일시적으로) 사용할 수 없게 만드는 것입니다. 이는 일반적으로 대상 서버 리소스를 소진하거나 강제로 다시 시작하거나 통신 채널에 과부하를 주어 서버를 격리함으로써 달성됩니다.
스팸 트래픽은 일반 트래픽과 마찬가지로 리소스를 소비합니다. 그러나 서버에 사용 가능한 리소스가 없을 수도 있습니다.
DDoS 공격은 온라인 서비스에 심각한 중단을 초래할 수 있습니다. 공격이 진행되는 동안 사용자는 정상적인 서비스 이용이 불가능합니다. DDoS 공격의 가장 분명한 증상은 사이트나 서비스가 갑자기 느려지거나 사용할 수 없게 되는 것입니다. 이는 기업에 심각한 재정적, 평판적 손해를 초래할 수 있습니다.
DDoS 공격으로부터 보호해야 하는 필요성은 오늘날 디지털 시대에 가장 중요합니다.
DDoS 공격으로부터 보호하기 위한 주요 메커니즘은 다음과 같습니다.
속도 제한: 여기에는 서버가 단일 IP 주소로부터 특정 시간 내에 수락할 요청 수를 제한하는 것이 포함됩니다.
이상 탐지: 네트워크 트래픽을 모니터링하고 표준에서 벗어난 패턴을 분석함으로써 잠재적인 DDoS 공격을 식별할 수 있습니다.
방화벽 및 라우터: 의심스러운 IP 주소에서 나오거나 악성 콘텐츠가 포함된 트래픽을 거부하도록 구성할 수 있습니다.
DDoS 완화 서비스: 이 서비스는 DDoS 공격 중에 요청 폭주를 흡수하여 대상을 보호하고 온라인 상태를 유지하는 데 도움이 될 수 있습니다.
침입 방지 시스템(IPS): 이러한 시스템은 DDoS 공격 및 기타 보안 위협을 탐지한 다음 위협을 완화하기 위한 조치를 취할 수 있습니다.
DDoS 공격이 성공하더라도 일반적으로 몇 시간(일) 내에 공격을 방지하고 서비스를 다시 사용할 수 있습니다.
Cardano는 DDoS 공격으로부터 어떻게 보호되나요
블록체인에 대한 DDoS 공격의 목표는 거래 처리와 스마트 계약 실행을 늦추거나 완전히 중단시키는 것입니다. 사용자의 관점에서 보면 네트워크(즉, 서비스)는 정체되거나 사용할 수 없게 됩니다.
서버를 대상으로 하는 일반적인 DDoS 공격과 유사하게 Cardano의 경우 공격자가 트랜잭션(스팸 트랜잭션)으로 네트워크를 가득 채우려고 시도할 수 있습니다. 공격자는 네트워크가 일반 사용자 거래를 희생시키면서 기본적으로 스팸 거래(유효하고 수수료가 지불되는)만 처리하는 상태에 도달하기를 원합니다.
공격자는 거래 비용을 기꺼이 지불할 의사가 있습니다(즉, 공격에 돈을 투자합니다). 노드는 유효하지 않은 거래를 즉시 폐기하고 확산시키지 않습니다. 유효하지 않은 트랜잭션으로 노드를 넘치게 하려는 시도는 네트워크에 미미한 영향만 미칠 것입니다. 그러나 공격자가 노드를 충돌시킬 수 있습니다.
Cardano는 DDoS 공격의 위험을 완화하기 위해 여러 가지 조치를 구현했습니다. 여기에는 다수의 거래로 인해 네트워크에 스팸이 발생하는 것을 방지하기 위한 거래 수수료, 각 노드에 도착하는 데이터의 속도를 제어하는 수요 중심 프로토콜, 거래를 중계하기 전에 확인하기 위한 검증된 전달이 포함됩니다. 네트워크의 분산화(주로 노드 수)도 중요한 요소입니다.
간단히 말해서 Cardano는 다음과 같은 이유로 DDoS 공격에 저항합니다.
- 분산
- 수수료
- 확산 전 거래 검증
- 모든 블록 생산자 노드에는 몇 개의 릴레이 노드가 있습니다(더 많은 수의 노드 및 블록 생산자 노드 보호).
- 스팸 노드를 감지하고 연결을 끊는 기능
몇 가지 기본적인 방어 메커니즘을 설명하겠습니다.
DDoS 공격에서 공격자는 일반적으로 인터넷 트래픽의 홍수로 단일 대상을 압도합니다.
카르다노는 수많은 노드로 구성된 분산 네트워크입니다. Cardano에는 단일 실패 지점이 없습니다. 공격자는 네트워크를 중단시키기 위해 노드의 상당 부분을 스팸 트랜잭션으로 가득 채워야 합니다.
따라서 DDoS 공격에 대한 최선의 예방은 분산화입니다. Cardano에는 대략 3,000개의 풀이 있으며 각 풀에는 2-3개의 릴레이 노드가 있습니다. 풀은 릴레이 노드 뒤에 숨겨진 블록 생산자 노드입니다. 카르다노 공격은 약 10,000개의 노드를 공격해야 하기 때문에 도전이다.
SPO(스테이킹 풀 운영자)는 서로 직접 상호 작용할 수 있도록 노드를 구성할 수 있습니다. 이는 블록 생성 노드가 자신의 (신뢰할 수 있는) 릴레이 노드와 다른 SPO가 운영하는 다른 릴레이 노드에 모두 연결할 수 있음을 의미합니다. 즉, SPO는 통신할 피어 노드를 결정합니다. 네트워크 구성은 언제든지 변경될 수 있습니다.
노드가 메모리 풀에서 비정상적인 스팸 거래 수로 스팸 노드에 연결된 경우 운영자는 스팸 노드에서 자신의 노드 연결을 끊기로 결정할 수 있습니다. 이는 사전 프로그래밍된 로직을 갖춘 스크립트를 통해 수행할 수 있습니다.
하나의 블록 생산자 노드를 공격한다는 것은 기본적으로 여러 개의 릴레이 노드를 공격한다는 것을 의미합니다. 즉, 블록 생산자 노드는 공개적으로(즉, 공격자에게도) 보이는 노드가 아닙니다.
블록 생산자 노드가 하나의 릴레이 노드에서 연결이 끊어진 경우에도 최소한 하나의 다른 릴레이 노드에는 계속 연결되어 있습니다. 또한 다른 (정직한) 릴레이 노드에 연결하는 것도 가능합니다. 이로 인해 공격자가 노드의 블록 생산 기능을 손상시키기가 어렵습니다.
카르다노에서는 블록과 거래가 P2P 방식으로 확산됩니다. 새로운 트랜잭션은 다음 블록 중 하나에 삽입되기를 기다리는 일종의 대기실인 mem-pool에 삽입됩니다.
각 노드는 자체 mem-pool을 관리합니다. 네트워크의 mem-pool 내용은 트랜잭션이 특정 위치의 한 노드에서 네트워크의 다른 노드로 전파됨에 따라 달라집니다.
이제 mem-pool에서 유사한 트랜잭션을 가질 수 있는 분산 네트워크의 노드를 상상해 보십시오(mem-pool에 들어가는 트랜잭션의 순서는 다를 수 있음). 공격이 시작되면 일부 노드의 메모리 풀 내용이 크게 달라질 수 있습니다. 일부 mem-pool에서는 주로 스팸 거래가 발생합니다.
슬롯 리더는 지분 규모에 따라 무작위로 선출됩니다. 슬롯 리더는 메모리 풀에서 트랜잭션을 가져와 새 블록을 생성합니다. 공격자는 네트워크에서 다음 새 블록이 생성될 위치를 미리 알 수 없습니다.
또 다른 새로운 블록에는 주로 스팸 거래나 사용자 거래가 포함될 수 있습니다. 선출된 슬롯 리더가 어느 위치에 있을 것인지에 따라 다릅니다.
공격이 유럽에서만 발생했다면 유럽 노드는 스팸 거래가 포함된 블록을 생성하지만 더 많은 사용자 거래가 포함된 블록은 나머지 세계에서 채굴됩니다.
서버와 Cardano 노드에 대한 공격에는 특정한 세부 사항이 있습니다.
공격자는 일반 DDoS 공격처럼 선택한 노드를 향해 단순히 많은 트랜잭션을 브로드캐스트할 수 없습니다. 트랜잭션을 노드에 푸시할 수 없습니다. 노드는 피어 노드에서 트랜잭션을 가져옵니다. 이 사실은 풀 운영자가 어떤 피어 노드가 연결되는지 결정한다는 사실과 결합되어 강력한 방어 메커니즘을 나타냅니다.
유효한 거래만 네트워크에 분산된다는 점을 상기해 보겠습니다.
사용자가 지갑에서 트랜잭션을 보내면 해당 트랜잭션은 항상 노드에 의해 처리됩니다. 이는 반드시 블록 생산자 노드(풀)일 필요는 없습니다. 이는 릴레이 노드일 가능성이 높습니다. 유효한 트랜잭션은 노드에 의해 mem-pool에 삽입됩니다. 유효하지 않은 거래는 노드에 의해 즉시 폐기되며 더 이상 확산되지 않습니다.
노드가 유효하지 않은 트랜잭션을 보내거나 동일한 트랜잭션을 반복적으로 보내면 해당 (릴레이) 노드에 대한 연결이 닫힙니다. 노드가 트랜잭션을 중계하기 전에 헤더/내용을 규칙에 따라 확인합니다. 이 메커니즘은 노드가 많은 수의 트랜잭션으로 인해 네트워크에 범람하는 것을 방지하는 데 도움이 됩니다.
공격자가 네트워크에 스팸을 보내려면 먼저 자신의 노드에 있는 메모리 풀을 채워야 합니다. 또는 지갑이 연결된 노드의 메모리 풀을 채울 수도 있습니다. 이 노드에서 트랜잭션은 잠재적으로 다른 노드로 확산될 수 있습니다. 유효하다면 노드는 이를 메모리 풀에 넣습니다.
노드는 스팸 노드를 감지하고 연결을 끊을 수 있습니다. 노드는 서버와 유사한 전략, 즉 속도 제한을 사용한다고 할 수 있습니다. Cardano 네트워크에서는 노드가 거래 속도를 담당합니다.
Cardano의 프로토콜은 수요 중심 스타일로 설계되었습니다. 프로토콜 매개변수는 노드가 사용할 수 있는 네트워크 리소스의 양을 제한합니다. 각 노드와 해당 노드에 연결된 각 피어에 대해 노드는 데이터 도착 속도, 최대 동시성 및 처리되지 않은 데이터 양을 제어합니다.
노드 운영자가 프로토콜 매개변수에 의해 정의된 것보다 더 높은 트랜잭션 속도를 허용하기 위해 프로토콜 매개변수를 변경하면 네트워크는 이를 스팸 발송자로 간주합니다. 이는 적대적인 피어가 리소스 소비 공격을 가하는 것을 방지합니다. 피어가 프로토콜을 준수하는 경우 노드에서 리소스를 소비하는 능력은 제한됩니다. 이를 위반하면 연결이 끊어집니다. 즉, 피어 노드는 이 스팸 노드와의 연결을 끊습니다.
따라서 공격자가 한 위치에서 네트워크에 스팸을 보내려는 경우 피어는 해당 위치에서 트랜잭션 가져오기를 중단합니다. 분산형 네트워크가 단일 위치에서 공격받을 수 없다는 것은 명백합니다.
다음으로 설명할 요점은 매우 중요합니다.
여러 노드를 동시에 공격해야 합니다. 공격자가 네트워크 속도를 급격하게 저하시키거나 더 심각한 문제를 일으키고 싶다면 거의 모든 노드를 동시에 공격해야 한다.
노드는 연결된 모든 피어에서 트랜잭션을 가져와 일반 사용자 트랜잭션과 (유효한) 스팸 트랜잭션을 메모리 풀에 삽입합니다. 사용자 트랜잭션과 스팸 트랜잭션은 메모리 풀(블록 크기보다 2배 더 큰)의 자리를 놓고 서로 싸우기 시작합니다. 공격받은 노드의 메모리 풀에는 스팸 트랜잭션이 포함되지만, 공격받지 않은 노드에는 사용자 트랜잭션이 포함됩니다.
누가 다음 슬롯 리더가 되는지에 따라 블록 내에는 더 많은 스팸 거래나 사용자 거래가 발생하게 됩니다.
공격자가 동시에 모든 노드를 공격하지 않으면 사용자 트랜잭션이 네트워크의 많은 mem-pool에 들어가는 것을 막을 수 없습니다.
공격자가 트랜잭션으로 스팸을 보내야 하는 메모리(mem-pool)는 하나의 mem-pool 크기가 아니라 본질적으로 네트워크의 모든 mem-pool을 합친 메모리 크기입니다.
메모리 풀은 각각 16K 바이트 크기의 약 11개의 트랜잭션으로 채워질 수 있습니다. 그러한 거래를 하나 보내려면 최소 0.86 ADA가 필요합니다. 메모리 풀을 채우려면 최소 10 ADA가 필요합니다.
Cardano는 10K 노드로 구성되며 각 노드에는 2블록 크기의 메모리 풀이 있습니다. 한 번에 모든 메모리 풀을 고유한 트랜잭션으로 채우려면 110,000개의 트랜잭션을 생성해야 합니다. 공격자는 95K ADA를 지불합니다.
공격자가 스팸 노드를 네트워크의 모든 (정직한) 노드에 연결하고 mem-pool을 스팸 트랜잭션으로 채우면 사용자 트랜잭션이 mem-pool에 들어가는 데 어려움을 겪게 됩니다. 실제로는 비현실적이라고 감히 말씀드립니다.
110K의 거래가 최대 횟수임을 반복합니다. 실제로 공격자가 일부 메모리 풀을 스팸 거래로 채울 경우 사용자는 네트워크 속도 저하를 관찰할 수 있습니다. 공격을 받는 메모리 풀이 많을수록 네트워크 속도는 느려집니다.
공격자가 노드의 일부에만 스팸을 보내고 스팸 거래가 여러 mem-pool로 확산되기를 바라는 것이 더 쉬울 수 있습니다. 그는 점차적으로 또 다른 스팸 거래를 계속해서 보낼 수 있습니다.
네트워크(모든 노드)는 새 블록이 생성될 때마다 메모리 풀을 지웁니다. 이미 언급했듯이 각 mem-pool은 서로 다른 트랜잭션을 포함할 수 있습니다. 중요한 점은 공격자가 새로운 스팸 거래를 생성하지 않으면 메모리 풀의 거래 수가 점차 감소하는 경향이 있다는 것입니다.
노드는 스팸 거래와 사용자 거래를 구분하지 않습니다. 유효하다면(지불된 수수료 포함) 처리되어야 합니다.
따라서 새 블록에 포함된 트랜잭션은 노드에 의해 메모리 풀에서 제거됩니다. 트랜잭션이 고유하지 않은 경우 새 블록은 기본적으로 많은 노드의 mem-pool에서 트랜잭션 정리를 트리거합니다(mem-pool 크기의 절반만 단일 전체 블록으로 해제됩니다).
따라서 고유하지 않은 스팸 거래는 공격의 효율성을 떨어뜨립니다. 추가 스팸 거래로 메모리 풀을 더 자주 채워야 합니다.
공격자가 공격의 영향을 높이려면 사용자 트랜잭션 전에 자신의 트랜잭션이 mem-pool에 포함되도록 어떻게든 준비해야 합니다(즉, 우선 순위가 지정되도록). 그러나 이는 결코 쉬운 일이 아닙니다. 예를 들어, 공격자는 자신이 공격하는 노드와 지리적으로 최대한 가까워야 합니다(네트워크 지연으로 인해).
운영자는 공격에 대응할 수 있는 능력을 가지고 있습니다.
풀 운영자는 공격을 쉽게 감지할 수 있으며 단순히 메모리 풀을 비우는 것도 쉽습니다. 이 경우 사용자 트랜잭션이 mem-pool에 들어갈 가능성이 높아집니다. 공격자는 스팸 거래를 다시 보내야 합니다. 그러나 이로 인해 네트워크가 스팸 노드와의 연결이 끊어질 뿐입니다. 풀 운영자는 스팸 노드 또는 스팸 지갑과의 연결을 자동으로 결정할 수 있습니다.
네트워크가 스팸 노드를 제거하고 신뢰할 수 있는 노드로만 구성되는 것은 비교적 간단합니다.
결론
스팸 공격이 성공하려면 공격자는 네트워크의 모든 메모리 풀에 동등하고 즉각적으로 액세스할 수 있어야 합니다. 이는 실제로 달성하기 어렵습니다. 공격자가 네트워크 속도를 저하시킬 수 있다고 생각합니다. 또는 사용자가 자주 사용하는 특정 노드를 종료하려고 시도할 수도 있습니다.
예를 들어 포지션 청산의 위험이 있기 때문에 사용자가 거래를 신속하게 마무리해야 하는 경우 네트워크 속도 저하가 짜증스러울 수 있습니다.
과거에 Cardano 네트워크는 NFT 발행이나 DDoS 공격에 대한 저항 테스트로 인해 여러 차례 많은 압박을 받았습니다. 제가 들은 가장 큰 부하는 네트워크 용량의 44배였습니다(부하는 한 시간에 약 250,000개의 새로운 트랜잭션이었습니다). 대부분의 사용자는 속도 저하를 인지하지도 못했습니다.
Cardano나 다른 블록체인에 DDoS 공격을 저지르는 것이 쉽다면 우리는 이러한 공격을 매일 목격하게 될 것입니다. 그런 일은 일어나지 않습니다. 저를 믿으십시오. 그러한 공격을 준비하고 수행하는 것은 결코 쉬운 일이 아닙니다.