DoS의 개념과 목적
DoS란 'Denial of Service'의 약자로, 한글로 하면 '서비스 거부 공격'이라고 합니다. 서비스를 거부한다? 무슨 뜻일까요. 서비스를 주거나 받는 입장에서 거부한다는 것이 아니라, 서비스를 하지 못하도록 하는 공격입니다. 즉, 공격의 목표는 '서비스를 제공하는 기업이나 대상이 서비스를 제공하지 못하도록'만 하면 공격의 목표는 달성하는 것입니다. 예를 들어 커피를 제공하는 카페가 있다면, 이 카페에서 커피를 손님들에게 줄 수 없도록 하게 하면 서비스 거부 공격이 성공하는 것이라고 볼 수 있습니다. 커피를 제공하지 못하도록 하는 방법은 여러 가지가 있습니다. 원두콩을 배달받지 못하게 하거나, 카페에 들어가는 전기선을 끊거나, 바리스타가 일을 그만두도록 만들거나, 주문을 받는 곳에서 오랫동안 서있으면서 주문을 하지 않거나 진상짓을 부리는 등의 일로 카페에서 서비스를 제공하지 못하도록 만들 수 있습니다. 이러한 방식으로 웹서버를 여러 가지 방식으로 망가뜨릴 수 있습니다. 그렇게 웹서버를 공격하는 방식을 일반적으로 'DoS' 또는 '도스' 공격이라고 합니다.
DoS와 DDoS의 차이
DDoS란 'Distributed Denial of Service'로 '분산 서비스 거부 공격'이라고 합니다. DoS와 DDoS의 차이는 사실 크지 않습니다. DoS를 분산시켜서 여러대에서 공격을 실행하면 그게 곧 DDoS가 됩니다. 아까 카페의 예를 다시 들어서, 카페에 전기를 차단시키기 위해서 주변이나 옆에 상가 건물을 여러 대 사서 전기를 최대한 많이 끌어다 쓰는 식으로 카페에 전기가 못 가게 하거나, 진상을 잔뜩 고용해서 카페에서 주문을 받기 어렵도록 만든다면 그런 것이 바로 분산 서비스 거부 공격이 되겠습니다.
공격의 종류와 방식
DDoS의 종류는 매우 다양합니다. 서비스를 제공하지 못하게 하면 되는 특성 때문에 여러 가지 다양한 접근법이 있을 수 있습니다. '애플리케이션의 취약점'을 활용하거나 '서버의 리소스를 소모'하는 등의 방식이 있을 수 있습니다. 드물지만 물리적인 테러 행위도 DoS의 공격목표에는 해당된다고 할 수 있지만, 물리보안의 영역이므로 구분해서 생각할 필요가 있습니다. DDoS로 가장 많이 사용되는 방식은 '네트워크 대역폭 소모'가 일반적으로 인식되는 DDoS 공격 방식입니다.
- 애플리케이션 취약점
- 앱자체의 버그나 취약점으로 인해 DoS가 발생하는 경우
- (ex : 비번 횟수 제한을 악용한 가용성 침해)
- 서버 리소스 소모
- 메모리나 CPU와 같은 서버의 리소스를 소모시키는 경우
- 게시판에 자료 용량 제한이나 업로드 횟수 제한이 없거나, 업무 요청을 제한없이 할 수 있는 경우
- (물리적) 테러
- ex : 카카오톡 서버 다운 사태
- 네트워크 대역폭 소모
- 트래픽을 잔뜩 보내는 공격 (주로 IP 변조를 사용)
- 별도 취약점 없이 공격 가능
- 컴퓨터가 여러 대일 수록 효과가 큼
- 일반적으로 C&C 서버(C2서버, Command and Control Server)를 통해 봇넷을 지휘
이 네트워크 대역폭 소모의 종류도 매우 다양합니다. 우선 간단하게 5가지를 알아보겠습니다.
- Get Flooding
- TCP SYN Flooding
- ICMP Flooding (Smurfing)
- Tear Drop
- Land Attack
Get Flooding
가장 단순하고 정직한 공격방식입니다. IP를 변조하지도 않고 다른 특별한 기법을 쓰거나 하지 않고 단순하게 요청을 잔뜩 보내는 것입니다. 새로고침이나 메뉴를 엄청나게 많이 클릭하는 것도 비슷한 공격 방식입니다. 다만 그 정도 속도로는 서버에서 부하가 일어날 만큼의 대미지가 생기지 않겠지요? 따라서 악의적인 DDoS 공격자들은 프로그램과 같은 도구를 만들어서 이런 요청을 무진장 많이 보내는 것이라고 볼 수 있습니다.
TCP SYN Flooding
TCP SYN 플러딩이란 매우 간단하고 단순한 방식입니다. 정말 단순하게 연결 요청을 엄청나게 많이 보냄으로써 서버에서 반응하기 위한 자원이 바닥나도록 하는 공격입니다. 카페로 비유하면, 진상 손님을 보내서 주문을 받을 때 엄청 오래 걸리도록 해서 커피를 마시러 온 손님들이 커피를 마시지 못하도록 하는 것과 같습니다. 화장실로 비유하면 좌변기에 앉아서 아무것도 안 하고 나가지도 않고 있다면 줄을 서있는 사람들은 한평생을 기다려도 못쓰게 되겠죠? 그렇게 정말 간단한 공격입니다. GET Flooding과의 차이라면 Get Flooding의 경우 정상적인 요청을 전송하지만, TCP SYN Flooding은 정말 TCP의 3방향 핸드셰이크 프로토콜에서 SYN만 보내고 ACK를 보내지 않아서 연결이 완성되지 않도록 합니다. 전화를 걸어놓고 아무 말도 안 하고 있는 것과 같습니다. 물론 대응법은 그런 이상한 전화를 그냥 끊는 것입니다.
ICMP Flooding
ICMP 플러딩도 TCP SYN 플러딩과 유사하게 요청을 잔뜩 보내는 방식으로 공격합니다. 하지만 직접 요청을 보내는 것이 아니라, 같은 네트워크 상에 있는 다른 컴퓨터들이 타깃에게 요청을 보내도록 유도하는 식의 공격방식입니다. 카페로 다시 예를 들어보겠습니다. '우리 카페 폐점을 위해 각종 자재를 싸게 팝니다'라고 홍보 전단지를 주변 카페나 상가에 뿌린다면 주변 상가에서 잔뜩 카페로 몰려들어서 자재를 사려고 하겠죠? 하지만 막상 해당 카페는 그런 홍보전단지를 뿌린 적도 없는데 말이죠. 어쨌든 그렇게 되면 소동이 일어나면서 하루 장사를 말아먹는 것은 거의 확정적입니다.
Tear Drop
Tear Drop은 말 그대로 tear(찢어서) drop(폭탄 등을 던지다)입니다. 네트워크 상에서 데이터를 전송할 때 한번에 보내기 어려운 양이 있다면 그것을 나눠서 보냅니다. 이후 도착해서 조립할 수 있도록 메모를 같이 보내는데, 그 메모를 이상하게 조작해서 재조립이 어렵도록 한다면 서버는 매우 혼란스러워하겠지요? 네트워크 상에서 전송되는 데이터를 '패킷'이라고 하고, 그 상자 크기를 MTU(Maximum Transmission Unit)라고 합니다. 그 상자보다 큰 데이터가 있다면 다음 상자에 나눠서 보내야 합니다. 첫 상자를 1번 상자, 두 번째 상자를 2번 상자라고 해서 보내면 나중에 조립하기가 쉬울 겁니다. 하지만 1번 상자라고만 와버리면 2번 상자를 받은 게 없으니 매우 혼란스럽고 재조립도 못하겠죠?
Land Attack
카페에서 사용하는 카드를 훔쳐서 계산할 때 쓴다면 카페는 자기 돈을 들여서 커피를 사고 만들지만 결론적으로는 서비스를 누군가에게 제공한 것이 아니기 때문에 손해를 보게 됩니다. 이렇게 자기가 자기한테 서비스를 하는 식으로 불필요한 업무를 하도록 해서 컴퓨터 자원이나 네트워크 장비에 부하를 주고 심한 경우 다운되거나 할 수도 있습니다. 카페 직원은 정말 열심히 일했는데 수입이 하나도 없다니 정말 슬프지 않나요? Land Attack의 이름이 그렇습니다. 자기 땅에서 자기 땅을 때리는 것 같은 공격입니다. IP Header를 변조해서 받는 사람, 그러니까 공격 대상의 IP/Port로 트래픽을 전송하게 된다면 대상 시스템은 혼자서 쉐도우 복싱을 하다가 지쳐서 쓰러지는 겁니다.
각 공격의 장단점과 예방
플러딩 공격의 특징은 대량의 요청을 보내는 것입니다. 이런 경우들은 대부분 IP 당 전송 요청의 임계치를 설정하고, 방화벽/IPS 등으로 차단하거나 어느 정도 자주 사용되는 공격패턴들로부터 보호할 수 있습니다. Land Attack의 경우 자신의 송신자와 수신자의 IP가 같은 그런 뻔한 패킷은 제거할 수 있겠습니다. 그 외에도 다양한 DDoS 공격 기법들에 대한 일차적인 방어 기법들이 다양하게 있습니다. 하지만, 최악의 경우 정말로 많은 수의 요청이 진짜로 쏟아진다면 막기 어려울 수 있을 수 있습니다. 그래서 엄청 많은 사람들이 서버에 접속하거나 하면 서버가 다운되는 등의 일이 일어나고는 하는 것입니다. 그래도 어느 정도 방어기법들을 알고 있다면 단순한 공격에 대해서는 기본적인 방어가 가능할 것입니다.
'💻Information Security' 카테고리의 다른 글
XSS 공격 시나리오 (1) | 2024.01.29 |
---|---|
DOM(Document Object Model)이란? (0) | 2024.01.29 |
CSRF(Cross Site Request Forgery)이란? (1) | 2024.01.21 |
XSS 대응방안에 대한 자세한 설명 (1) | 2024.01.20 |
XSS(Cross Site Scripting)이란? (0) | 2024.01.18 |