BackDoor/Network Security

05/01 4주차 : 네트워크 공격 방식 - 서비스 거부 공격

ochamekinou 2025. 5. 29. 22:48

서비스 거부 공격 (DoS, Denial of Service)

취약점 공격형

특정 형태의 오류가 있는 네트워크 패킷의 처리 로직에 문제가 있을 때 공격 대상이 그 문제점을 이용하여 오작동을 유발하는 형태

보잉크/봉크/티어드롭 공격

프로토콜의 오류 제어 로직을 악용해 시스템 자원을 고갈시키는 방식


OSI 4계층(전송 계층, Transport Layer)의 신뢰성 확보

ACK: 패킷이 정상 도착했는지 확인 → 신뢰성 보장

NAK: 오류 감지 시 빠르게 알림 → 재전송 수행

재전송: 패킷 손실을 복구 → 데이터 무결성 유지

흐름 제어: 수신 속도 조절 → 패킷 손실 및 네트워크 과부하 방지

순서 번호: 데이터 순서 유지 → 중복 방지 및 재조립 가능

 

1) 긍정 응답 (Positive Acknowledgement, ACK)

데이터가 제대로 도착했음을 확인하기 위한 신호

손실된 패킷 구별 가능, 불필요한 재전송 방지

 

2) 부정 응답 (Negative Acknowledgment, NAK)

데이터가 손상되었거나 손실되었음을 알리는 신호

오류가 있는 데이터 감지 가능

 

3) 재전송

패킷이 손실되거나 손상되었을 때 다시 전송하는 과정

송신자는 일정 시간 동안 ACK을 받지 못하면 해당 패킷을 재전송

NAK를 받거나 타임아웃이 발생하면 재전송

 

4) 흐름 제어(속도)

송신자의 전송 속도를 조절해 수신자가 감당할 수 있도록 하는 과정

 

5) 순서 번호(시퀀스 넘버)

데이터의 순서를 보장하고 중복을 방지하는 번호

TCP는 패킷마다 순서 번호(Sequence Number, SEQ)를 부여

수신자는 순서대로 정렬하여 데이터 조립

만약 패킷이 중복되거나 순서가 바뀌면 재전송 요청


따라서 TCP는 데이터 전송 시 신뢰 확보하기 위해 패킷 전송에 문제가 있으면 반복적으로 재요청과 수정 진행

→ (OSI 4계층) 각 패킷이 데이터의 어느 부분을 포함하고 있는지 표시하기 위해 시퀀스 넘버가 기록

→ 시스템의 패킷 재전송과 재조합에 과부하가 걸리도록 시퀀스 넘버 속임

 

티어드롭

패킷의 시퀀스 넘버와 길이를 조작하여 패킷 간의 데이터 부분이 겹치거나 빠진 상태로 패킷을 전송하는 공격 방법

= 패킷 재조합 방해

= 데이터 전송 방해

→ TCP는 신뢰성을 중시하는 프로토콜이므로 데이터를 온전히 받아야 함

→ 온전한 데이터가 오지 않으면 Hang(데이터 읽기를 포기)


패킷 스위칭

데이터를 패킷(작은 단위)으로 나누어 네트워크를 통해 전송 → 단편화

패킷은 목적지에서 다시 조립됨 → 재조합(재조립)


자원 고갈 공격형

네트워크 대역폭이나 시스템의 CPU, 세션 등의 자원을 소모시키는 형태

랜드 공격

시스템을 나쁜 상태에 빠뜨리는 것

패킷을 전송할 때 출발지 IP 주소와 목적지 IP 주소의 값을 똑같이 만들어서 공격 대상에게 보내는 것(→ 조작된 목적지 IP 주소는 공격 대상의 IP 주소)

목적지 주소가 조작된 패킷을 공격 대상에게 보내면 시스템은 공격자가 보낸 SYN 패킷의 출발지 주소를 참조하여 응답 패킷 전송

그런데 SYN 패킷의 출발지 주소는 공격 대상의 주소이므로 자신에게 다시 돌아옴

돌아온 패킷의 출발지 주소에는 또 다시 자신의 주소가 기록됨

.

.

.

→ 영원히 자기 자신에게 데이터 패킷을 송수신하는 꼴

죽음의 핑 공격 (ping of death)

데이터 전송 시 통째로 가는 것이 아닌 수천 개의 패킷으로 나뉘어 전송되는 것을 이용한 공격

네트워크 연결 상태를 점검하는 ping 명령을 보낼 때 공격 대상에게 패킷을 최대한 길게 보내면 수천 개의 패킷으로 잘개 쪼개짐

공격 대상 시스템은 대량의 작은 패킷을 수신하느랴 네트워크가 마비

보안 방법) ping이 사용하는 프로토콜인 ICMP 차단해야 함

SYN 플러딩 공격

TCP의 연결 과정인 3-way handshake 악용


3-way handshake

SYN → SYN+ACK → ACK

신뢰성 있는 데이터 전송 보장하는 TCP: 데이터 전송 전에 송신자와 수신자가 연결을 설정해야 함

송신자(Client)와 수신자(Server)가 3번의 패킷 교환을 통해 TCP 연결을 설정하는 과정

1️⃣ 클라이언트 → 서버 : SYN (연결 요청), 서로 데이터를 주고받을 준비가 되었는지 확인

2️⃣ 서버 → 클라이언트 : SYN + ACK (요청 수락 & 응답), 데이터 전송을 위한 초기 설정 공유

3️⃣ 클라이언트 → 서버 : ACK (응답 확인 & 연결 완료), 연결이 제대로 성립되었는지 확인

신뢰성 있는 데이터 전송을 보장

데이터의 순서를 유지하고 손실을 방지

클라이언트와 서버가 서로 준비 상태임을 확인


네트워크의 동시 사용자 수 제한(ex) 이 웹 서버의 동시 사용자는 200명이다)

존재하지 않는 클라이언트가 서버별로 한정된 접속 가능 공간에 접속한 것처럼 속여 다른 사용자가 서비스를 제공받지 못하게 함

TCP 최초 연결 시

클라이언트: SYN 패킷을 보냄

서버: SYN+ACK 패킷을 받음

클라이언트: ACK 패킷을 보냄 → 여기서 안 보낸다면?

서버는 클라이언트가 ACK 패킷을 보낼 때까지 SYN Received 상태로 일정 시간을 기다려야 함

그 동안 공격자는 가상의 클라이언트로 위조한 SYN 패킷을 수없이 만들어서 서버에 보내 가용되는 동시 접속자 수를 SYN Received 상태로 만들 수 있음

HTTP GET 플러딩 공격


플러딩(Flooding) 공격

대량의 요청이나 데이터를 한꺼번에 쏟아내는 공격 방식


공격 대상 시스템에 TCP 3-way handshake 과정으로 정상적으로 접속한 뒤, HTTP의 GET 메서드를 통해 특정 페이지를 무한대로 실행하는 공격

정상적인 TCP 세션과 함께 정상적으로 보이는 HTTP GET을 지속적으로 요청받으므로 과부하가 걸림

HTTP CC 공격

CC: Cache-Control

캐시 기능을 사용하지 않도록 함, 캐시 사용하지 않고 응답해야 할 시 웹 서비스의 부하가 증가

동적 HTTP 리퀘스트 플러딩 공격

HTTP GET 플러딩 공격, HTTP CC 공격: 지정된 웹 페이지를 지속적으로 요청하는 서비스 거부 공격 → 특징적인 HTTP 요청 패턴을 확인해 방어 가능(패턴 매칭)


패턴 매칭(Pattern Matching) 방어 기법

특정한 공격 패턴이나 이상 징후를 식별하기 위해 데이터를 분석하는 방법

악의적인 트래픽이나 공격 시도를 조기에 탐지하여 시스템을 보호


지속적으로 요청 페이지를 변경해 웹 페이지를 요청하는 기법(패턴 매칭 방어 기법 회피)

Slowloris

서버로 전달할 HTTP 메시지의 헤더 정보를 비정상적으로 조작해 웹서버가 헤더 정보를 완전히 수신할 때까지 연결을 유지하도록 하는 공격

→ 시스템 자원을 소비시켜 다른 클라이언트의 정상적인 서비스를 방해함

다수의 HTTP 요청 헤더를 전송해 대상 서버에 대한 여러 연결 유지

피해 시스템은 연결이 완료되면 세션을 닫기 위해 기다리며 다음 응답이 없어 지나치게 길게 세션을 유지해야 한다면 세션 중지

공격자는 피해 시스템이 세션 유지 시간 초과를 방지하기 위해 주기적으로 부분 요청 헤더를 피해 시스템으로 전송

피해 서버는 세션 종료 시까지 열린 부분 연결을 종료할 수 없음

사용 가능한 모든 스레드가 사용 중이면 서버는 정상 트래픽의 요청에 응답할 수 없으므로 서비스 거부 발생

(대응 방안) 단일 IP 주소에서 만들 수 있는 최대 연결 수 제한, 느린 전송 속도 제한, 클라이언트가 연결 상태를 유지할 수 있는 최대 시간 제한 등을 통해 낮고 느린 공격의 효과를 제한하기 위한 접근 방식

 

느리고 끈질긴 연결 유지(Slow + loris)

  1. 공격자 클라이언트가 HTTP 요청을 서버에게 보냄
  2. 요청을 완전히 끝내지 않음 → 서버는 전체 헤더가 도착할 때까지 기다림
  3. 서버는 연결을 유지하며 세션을 대기 상태로 둠 → 자원을 점유
  4. 공격자 클라이언트는 일정 시간 간격으로 아주 조금씩 추가적인 헤더 정보 전송 → 서버는 “아직 요청 중이구나”라고 생각하고 세션을 끊지 않음
  5. 서버의 연결 자원이 가득 차게 됨 → 정상 사용자의 요청을 처리할 수 없게 됨(서비스 거부, DoS)

HTTP 요청 헤더를 비정상적으로 조작해 연결을 장시간 유지시켜 서버 자원을 고갈시키는 저속 DoS 공격

헤더 미완성된 HTTP 요청 → 연결 유지

주기적인 미세 전송 → 세션 유지

서버의 자원 고갈 → 정상 사용자 접속 불가

낮고 느린 연결로 DoS 유발

RUDY (R-U-Dead-Yet?)

도구는 피해자의 애플리케이션을 크롤링하여 양식 필드를 찾음

양식 필드가 발견되면 합법적인 양식 제출을 모방해 HTTP POST 요청

이 POST 요청은 “매우 긴 콘텐츠를 곧 제출할 것임”을 서버에 알리는 헤더 포함

그런 다음 양식 데이터를 각각 1바이트 정도의 작은 패킷으로 분해하고 각각 약 10초의 무작위 간격으로 서버에 전송하여 양식 데이터를 제출하는 프로세스를 오래 유지

데이터를 무기한 계속 제출

공격 동작이 연결 속도가 느린 사용자가 양식 데이터를 제출하는 동작과 유사하여 피해 웹 서버는 패킷을 수락하기 위해 연결을 열린 상태로 유지(자원 고갈)

(대응 방안) 웹 서버에서 더 엄격한 연결 제한 시간 초과 간격 설정, 인터넷 연결이 느린 정상 사용자는 서버에서 서비스가 거부될 수가 있음

 

  1. 공격자는 대상 웹 애플리케이션을 스캔해 폼 필드를 자동 탐색
  2. HTTP POST 요청을 시작하면서 Content-Length 헤더를 매우 크게 설정 (“매우 긴 콘텐츠를 곧 제출할 것임”을 서버에 알리는 헤더 포함)
  3. 본문 데이터는 1바이트씩, 10초 간격처럼, 느리게 전송
  4. 서버는 아직 데이터가 오고 있는 중이라고 판단하고 → 세션을 계속 유지하면서 자원을 점유함
  5. 서버의 연결 자원이 가득 차게 됨 → 정상 사용자의 요청을 처리할 수 없게 됨(서비스 거부, DoS)

HTTP POST 요청을 조작해 서버의 자원을 장시간 점유하는 방식

HTTP POST 요청을 악용해 폼 데이터를 아주 천천히 전송하며 서버의 연결을 유지시켜 자원을 고갈시키는 저속 DoS 공격


Slowloris와 RUDY의 차이

항목  Slowloris RUDY
요청 방식 HTTP 헤더 전송 HTTP 본문(Post Body) 전송
유지 전략 헤더를 끝까지 보내지 않음 본문 데이터를 천천히 전송
대상 웹 서버 웹 애플리케이션 (폼 기반)
탐지 난이도 중간 높음 (정상 동작과 유사함)