컴퓨팅에서 서비스 거부 공격 (DoS 공격; 영국식: /dɒs/ doss 미국식: /dɑːs/ daas[1])은 범죄자가 기계나 네트워크 자원을 의도된 사용자에게 사용할 수 없도록 만들기 위해 네트워크에 연결된 호스트의 서비스를 일시적 또는 영구적으로 중단시키는 사이버 공격입니다. -서비스 거부 공격에 대한 위키백과 정의입니다.
이것은 매우 기본적인 개념입니다. 누군가 자신의 자원을 이용해 네트워크의 다른 기계의 기능을 방해합니다.
DoS 공격은 인터넷이 존재한 이래로 문제였습니다. 일반적으로 논의되는 “첫 번째 분산 서비스 거부(DDoS) 공격” 중 하나는 90년대 중반 인터넷 서비스 제공업체(ISP)인 Panix에 대한 것이었습니다. 물론 이전의 기술적 사례가 더 많았지만, 이는 현대 월드 와이드 웹에 대한 그러한 공격의 주요 사례 중 하나였습니다.
이 공격은 수많은 컴퓨터가 ISP 서버와 전송 제어 프로토콜(TCP) 연결을 시작하게 했지만, 연결을 완료하는 핸드쉐이크 프로토콜을 끝내지 못했습니다. 이는 서버의 네트워크 연결 관리 자원을 소모하고 정직한 사용자가 ISP 서버를 통해 인터넷에 접근하는 것을 방해합니다.
이 “초기” DDoS 공격 이후로, DDoS 공격은 자연에서의 폭풍처럼 인터넷에서 흔히 발생하는 일이 되었으며, 이에 맞서기 위해 대규모 인터넷 인프라가 구축되었습니다.
블록체인
블록체인은 비트코인의 핵심 구성 요소 중 하나이며, 분산 원장으로서 비트코인의 기능에 필요한 종속성입니다. 이 분야의 많은 사람들이 이른바 “스팸” 거래를 비트코인 블록체인에 대한 DoS 공격이라고 부를 것이라고 확신합니다. 그렇게 부르려면 블록체인이 시스템으로서 제공하는 “서비스”를 정의하고, 스팸 거래가 시스템 설계에 의도되지 않은 방식으로 다른 사람에게 그 서비스를 거부하는 방법을 설명해야 합니다.
스팸이 DoS 공격이라고 믿는 대부분의 사람들이 “블록체인이 제공하는 서비스는 금융 거래 처리이며, 스팸은 이를 시도하는 사람들의 공간을 빼앗는다”고 말할 것이라고 장담합니다. 문제는, 그것이 블록체인이 제공하는 서비스가 아니라는 것입니다.
실제로 블록체인이 제공하는 서비스는 실제 시간 경매를 통해 모든 합의 유효 거래를 확인하는 것입니다. 만약 당신의 거래가 합의 유효하고, 당신이 채굴자가 블록에 당신의 거래를 포함하도록 충분히 높은 수수료를 입찰했다면, 당신은 블록체인이 제공하는 서비스를 정확히 설계된 대로 사용하고 있는 것입니다.
이것은 “블록 크기 전쟁” 동안 수년에 걸쳐 이루어진 의식적인 설계 결정이었으며, 세그리게이티드 위트니스의 활성화와 당시 주요 기업들이 추진한 Segwit2x 블록 크기 증가의 거부로 마무리되었습니다. 블록체인은 가장 높은 입찰 수수료 거래를 우선시하여 기능하며, 사용자는 그 경매에 자유롭게 경쟁할 수 있습니다. 이렇게 블록 공간이 할당되며, 검증 가능성을 보호하기 위한 글로벌 제한과 자유 시장 가격 메커니즘이 있습니다.
어떤 사용자가 임의로 “스팸”으로 정의한 거래가 이 공개 경매에서 승리하는 것은 블록체인의 DoS가 아닙니다. 그것은 사용자가 그 자원을 본래 의도된 대로 사용하고, 다른 모든 사람과 함께 경매에 참여하는 것입니다.
릴레이 네트워크
많은, 아니 대부분의 비트코인 노드는 나머지 네트워크에 서비스로서 거래 릴레이를 제공합니다. 네트워크의 동료에게 거래를 방송하면, 그들은 이를 자신의 동료에게 전달하고, 계속해서 전파됩니다. 피어링 로직이 어떤 노드와 피어링할지를 결정하는 방식이 넓은 연결성을 유지하기 때문에, 이 서비스는 거래가 네트워크를 통해 매우 빠르게 전파되도록 하며, 특히 모든 채굴 노드에 전파되도록 합니다.
또 다른 서비스는 블록 릴레이로, 유효한 블록이 발견될 때 같은 방식으로 전파됩니다. 이는 수년에 걸쳐 매우 최적화되어, 대부분의 경우 전체 블록이 실제로 릴레이되지 않고, 블록 헤더와 그 안에 포함된 거래의 간략한 “스케치”만 전송되어 사용자가 자신의 메모리 풀에서 이를 재구성할 수 있도록 합니다. 다시 말해, 블록 릴레이의 최적화는 거래 릴레이가 제대로 작동하고 모든 유효하고 채굴될 가능성이 있는 거래를 전파하는 것에 의존합니다.
노드가 이미 메모리 풀에 블록의 거래가 없을 경우, 이들은 이웃 노드에 요청해야 하며, 이 과정에서 블록을 검증하는 데 더 많은 시간이 소요됩니다. 또한 이들은 누락된 거래가 있을 경우 블록 스케치와 함께 해당 거래를 다른 피어에게 명시적으로 전달하여 대역폭을 낭비합니다. 거래를 스팸으로 분류하는 노드가 많을수록, 필터링된 거래를 포함하는 블록이 네트워크를 통해 전파되는 데 더 오랜 시간이 걸립니다.
거래 필터링은 이 두 서비스 모두를 방해하려고 actively 시도하며, 거래 릴레이가 채굴자에게 전파되는 것을 방지하는 데 실패하고, 블록 전파가 네트워크의 노드가 거래를 필터링할수록 경미하지만 눈에 띄는 성능 저하를 겪게 됩니다.
이러한 노드 정책은 채굴자와 나머지 네트워크에 거래를 전파하는 네트워크 서비스의 저하를 명시적으로 목표로 하며, 필터링하는 유효 거래를 포함하기로 선택한 채굴자에게 블록 전파의 저하를 처벌로 간주합니다. 그들은 서비스 저하를 목표로 하며, 그 시도로 인해 발생하는 다른 서비스의 저하를 긍정적으로 봅니다.
이는 실제로 DoS 공격이며, 시스템 설계에 반하여 네트워크 서비스를 저하시키고 있습니다.
이제 어떻게 할까요?
Knotz 대 Core 또는 “스패머” 대 “필터러”의 전체 이야기는 비트코인 네트워크에 대한 비극적으로 비효율적이고 실패한 DoS 공격에 불과했습니다. 필터는 필터링된 거래가 블록에 포함되는 것을 방지하는 데 전혀 도움이 되지 않습니다. 채굴자에게 거래 전파를 방해하는 목표는 전혀 성공하지 못했으며, 블록 릴레이의 저하는 채굴자에게 단념할 정도로 미미했습니다.
저는 이것이 비트코인이 시도된 검열과 비트코인 네트워크 자체의 방해에 대한 강력함과 회복력을 보여주는 큰 사례라고 생각합니다.
그렇다면 이제 무엇을 할까요?
익명의 저자가 제안한 BIP가 약 1년 후 만료되는 임시 소프트포크를 시행하여 그 기간 동안 비트코인 거래의 “스팸”을 합의 무효로 만드는 여러 방법을 제시했습니다. 피어 투 피어 네트워크에 대한 DoS 공격이 완전히 실패한 것을 깨달은 필터 지지자들은 합의 변경으로 이동했습니다. 그들 중 많은 사람들이 2년 전 필요하다고 들었던 것입니다.
이것이 실제로 문제를 해결할까요? 아니요, 해결하지 않을 것입니다. 이는 “스팸”을 이 포크된 네트워크에 제출하고자 하는 사람들이 실제로 이를 구현하기로 한다면, 그들이 사용할 수 있는 가짜 ScriptPubKeys를 사용하여 지출할 수 없는 출력에 데이터를 인코딩하도록 강요할 것입니다. 이는 UTXO 세트를 부풀리게 됩니다.
따라서 이 포크가 압도적인 지지를 받더라도 성공적으로 활성화되고 체인 분할이 발생하지 않더라도, 여전히 명시된 목표를 달성하지 못하고 “스패머”에게 네트워크에 가장 해로운 방식으로 “스팸”을 할 수밖에 없는 선택지를 남길 것입니다.