본문 바로가기

보안

보안기사 - DDoS, DRDoS

DDoS (Distributed Denial of Service) 분산 서비스 거부 공격


분류 대역폭 소진공격 서비스(어플리케이션) 마비공격
대표 유형 UDP/ICMP Flooding, SYN Flooding HTTP GET Flooding
공격 형태 1. UDP/ICMP Traffic Flooding
  UDP/ICMP Flooding, DNS Query Flooding
2. TCP Traffic Flooding
  SYN Flooding, SYN+ACK Flooding
3. IP Flooding
  Land Attack, Tear Drop, HTTP Contiuation
1. HTTP Traffic Flooding
  GET Flooding, CC Attack
2. HTTP Header/Option Spoofing
  Slowloris, Pyloris
3. TCP Traffic Flooding
  TCP Session, SYN Flooding, TCP Slow Read
4. Other L7 Service Flooding
  Hash DoS, Hulk DoS, FTP/SMTP Attack
프로토콜 3~4계층 (Network, Transport 계층)
IP, ICMP, IGMP, UDP, TCP 등
7계층 (Application 계층)
HTTP, DNS, FTP, SMTP 등
증상 회선 대역폭 고갈
동일 네트워크를 상용하는 모든 서비스에 대한 접속장애 발생
HTTP 서버 과다 접속 (또는 서비스 부하)로 인한 장애발생
공격대상 시스템만 피해
공격대상 네트워크 인프라 웹서버, 정보보호 장비 등

네트워크 대역폭 소진 공격

UDP/ICMP Flooding

다량의 UDP/ICMP 패킷을 서버로 전송하여 서버가 보유한 네트워크 대역폭을 소진시켜 다른 정상적인 클라이언트의 접속을 원활하지 못하도록 유발

DNS Query Flooding

UDP 기반의 서비스를 제공하는 DNS에 대해 DNS 쿼리 데이터를 다량으로 서버에 전송하여 DNS의 정상적인 서비스를 방해

서버/서비스 자원 소진 공격

TCP SYN Flooding

TCP 3-Way Handshae의 취약점 이용. target의 TCP 연결자원(대기큐)를 소진시켜 외부의 TCP 연결요청을 받을 수 없는 상태로 만든다
다량의 SYN 패킷을 서버로 전달하여 서버의 대기큐를 가득 채워 새로운 클라이언트의 연결요청을 무시하도록하여 장애 유발

client가 서버로 SYN 보내면 서버는 SYN+ACK응답 보내고 해당 연결 요청 정보를 incomplete connection queue에 저장 (SYN_RECV 상태)
client로부터 ACK 받아 연결 완료되면 연결 소켓 생성되고 연결 요청 정보를 큐에서 삭제
TCP SYN flooding은 다수의 TCP 연결을 완료하지 않아 큐를 꽉차게 만드는 것

공격자는 source IP를 도달 불가능한(존재하지 않는) IP로 위조한 SYN 요청을 보내 서버 측의 SYN+ACK 요청에 대한 ACK응답이 발생하지 않도록 만든다
(만약 위조한 주소가 실제 존재하여 서버로부터 SYN+ACK 받은 호스트의 응답은? 'RST + ACK' 또는 drop)
netstat -an 명령을 통해 다수의 SYN_RECV 상태의 TCP 소켓을 확인할 수 있다 (ACK 응답 대기중)

  • 대응책
    완전한 3-Way Handskaing이 이루어지지 않으면 연결요청대기큐가 소비되지 않도록 설정. 대표적으로 Syn Cookie 설정 이용
        sysctl -w net.ipv4.tcp_syncookies=1
    방화벽 또는 DDoS 대응장비를 이용해 동일 IP의 연결 요청(SYN)에 대한 임계치(threshold) 설정 ~ 과도한 연결 요청 발생 방지
        iptables -A INPUT -p TCP --dport 80 --syn -m connlimit --connlimit-above 5 -j DROP
    First SYN Drop 설정 (재요청 패킷이 도착하는지 확인하여 출발지 IP가 위조되었는지 판단)
    Backlog queue의 크기를 늘려준다 (임시조치)
    SYN+ACK에 대한 대기시간을 줄인다 (너무 줄이면 정상 요청에 문제 생길 수도..)

TCP Flag Flooding

TCP의 Flag값(Control bit)을 임의로 조작하면 SYN, ACK, FIN, RST 와 같이 여러 형태의 패킷을 생성할 수 있으며, 서버는 이러한 패킷을 수신하는 경우 해당 패킷을 검증하기 때문에 서버의 자원을 소모

TCP Session Flooding

TCP 3-way handshake 과정을 과도하게 유발하여 서비스의 과부하 유발

HTTP Continuation

서버로 전달되는 패킷에 HTTP 헤더 없이 Data만 채워 웹서버가 지속적으로 데이터 수신을 위해 TCP 자원을 사용하도록 하는 공격

HTTP GET Flooding


동일한 동적 컨텐츠(서버의 연산이 필요)에 대한 HTTP GET 요청을 다량으로 발생시켜 공격대상 웹서버가 해당 요청을 처리하기 위해 서버 자원을 과도하게 사용하도록해(부하 유발) 정상 요청을 처리하지 못하도록 함
동일한 URL을 반복 요청하여 웹서버가 URL에 해당되는 데이터를 클라이언트에게 회신하기 위해 서버 자원을 사용하도록 하는 공격

  • 웹서버 access 로그 분석 : p.227
  • 패킷 캡처도구
    ngrep : 7계층 프로토콜 패킷의 데이터부를 ASCII 형식으로 보고자할 때 유용한 패킷 캡처도구
    wirekshark

HulkDoS 공격

GET Flooding 공격유형으로 동일 URL을 지속적으로 요청 시 차단될 수 있기 때문에 이를 우회하기 위해 URL을 지속적으로 변경하면서 공격
특정 자원(URL)에 접근하는 횟수를 제한하는 임계치(threshol) 기반의 디도스 대응 장비 우회하기 위함

HTTP GET Flooding with Cache-Control(CC Attack)

HTTP 메시지의 캐시옵션(Cache-Control:no-store, must-revalidated)을 조작해 캐싱 서버가 아닌 웹서버가 직접 처리하도록 유도하여 캐싱 서버의 기능을 무력화하고 웹서버의 자원을 소모

HashDoS 공격

웹서버는 클라이언트로부터 전달받은 HTTP 메시지의 Parameter 관리를 위해 해시테이블을 사용. 조작된 많은 수의 파라미터를 POST 방식으로 웹서버로 전달, 해시테이블 검색을 위한 인덱스로 사용되는 해시값에 충돌을 발생시켜 정확한 값을 찾기 위해 모든 해시테이블을 검사하게 되는데 이 때 웹서버의 CPU 자원을 소진하게 되어 정상적인 서비스를 방해

  • 파라미터는 "파라미터명=파라미터값&파라미터명=파라미터값..." 형태로 구성 (&는 파라미터 구분자)

Slow 계열 공격

Slow HTTP Header DoS(Slowloris)

[HTTP 요청 메시지 구조]

웹서버는 HTTP 메시지의 헤더부분을 먼저 수신하여 이후 수신할 데이터의 종류를 판단하게 되는데, 헤더부분을 비정상적으로 조작하여 웹서버가 헤더정보를 구분할 수 없도록 하면 웹서버는 아직 HTTP 헤더정보가 모두 전달되지 않은 것으로 판단해 연결을 장시간 유지하게 됨

웹서버는 HTTP 요청이 들어오면 먼저 요청 헤더부까지 모두 수신한 후 헤더 필드들을 분석하여 이후 메시지 바디부를 어떻게 처리할지 결정
공격자가 만약 요청 헤더의 끝, 즉 Empty Line을 전달하지 않고 지속적으로 천천히 불필요한 헤더 필드 정보를 전달한다면 서버는 이를 모두 수신할 때까지 연결 상태를 유지하면서 대기
이런 방식으로 다수의 연결을 지속시키면 대상 웹서버의 연결자원이 모두 소진되어 정상요청을 받을 수 없는 상태가 된다
웹서버와의 연결상태를 지속시키는 방식이어서 연결자원을 소진시킬 정도의 트래픽만 필요하므로 '저대역폭 공격'

Slow HTTP POST DoS(RUDY)

HTTP POST 메소드를 이용해 서버로 전달할 대량의 데이터를 장시간에 걸쳐 분할 전송하면 서버는 POST 데이터가 모두 수신하지 않았다고 판단해 연결을 장시간 유지하게 하는 공격

웹서버는 Content-Type 헤더필드르르 참고해 데이터의 유형을 파악하고, Content-Length 헤더 필드를 참고해 데이터의 길이를 파악한 후 해당 데이터의 길이만큼 읽어들이는 작업을 수행
공격자는 Content-Length를 비정상적으로 크게 설정한 후 매우 소량의 데이터를 지속적으로 천천히 웹서버에 전송하면, 웹서버는 명시된 크기만큼 데이터를 모두 수신하기 위해 연결상태를 유지하며 대기
이런 방식으로 다수의 연결을 지속시키면 대상 웹서버의 연결자원이 모두 소진되어 정상요청을 받을 수 없는 상태가 된다

Slow HTTP Read DoS

[TCP flow control]

공격자는 웹서버와 TCP 연결시, TCP 윈도우 크기 및 데이터 처리율을 감소시킨 후 HTTP 데이터를 송신해 웹서버가 정상적으로 응답하지 못하도록 DoS 상태를 유발
공격자가 TCP 흐름제어를 이용해서 요청에 대한 응답을 느리게 read하여 서비스 거부 공격을 수행하는 것

TCP는 헤더의 window 필드(수신 가능한 여유 공간의 크기를 담아 전달)를 이용해 흐름제어(flow control)를 수행
수신측의 수신 버퍼에 여유 공간이 0이 되면 Window 필드를 0으로 설정하 'Zero Window Packet'을 전달하고, 이를 수신한 송신측에서는 일정시간 대기후 수신측 상태를 확인하기 위한 'Zero Window Probe Packet'을 전달.
수신측은 여유공간이 생겼다면 해당 공간의 크기만큼 Window 필드를 설정하여 응답('Window Update Packet'), 또는 'Zero Window Pakcet'으로 응답

공격자는 지속적으로 'Zero Window Packet'을 전다랗여 서버가 요청에 대한 응답 메시지를 전송하지 못하고 연결을 지속적으로 유지하도록 한다
이런 방식으로 다수의 연결을 지속시키면 대상 웹서버의 연결자원이 모두 소진되어 정상요청을 받을 수 없는 상태가 된다

* TCP Keep-Alive Packet
'Keep-Alive Packet'은 일정시간 IDLE 타임이 지속될 경우 TCP 연결 상태를 확인하기 위해 상대방에게 보내는 패킷
'Zero Window Probe Packet'의 경우 'Keep-Alive Packet'과 그 구조가 완전히 동일하기 때문에(ACK만 설정해 전송) wireshark에서는 Keep-Alive Packet으로 설명

Slow 계열 공격 대응

  • 동시 연결에 대한 임계치 설정
    동일한 출발지 IP에서 동시에 연결할 수 있는 연결개수에 대한 임계치(threshod)를 설정
    iptables -A INPUT -p ttcp --dport 80 -m connlimit --connlimit-above 30 -j DROP :30개 초과 동시 연결에 대해 drop

  • 연결 타임아웃 설정
    IDLE 타임에 대한 임계치 설정
    Apache 웹서버의 경우 httpd.conf의 Timeout 지시자를 120(default)에서 작은 값(5추천)으로 설정
    (너무 작으면 정상적 서비스에 영향 미칠수도 있으니 적절하게)

  • 읽기 타임아웃 설정
    지정한 시간 내에 read를 완료하지 못하면 클라이언트에게 오류코드 반환

DRDoS(Distributed Reflection DoS)



공격자는 출발지 IP를 공격대상의 IP로 위조(IP Spoofing)하여 다수의 반사서버(Reflector)로 요청정보를 전송, 공격대상은 반사서버로부터 다수의 응답을 받아 서비스 거부 상태가 되는 공격유형

크게 반사(reflection)와 증폭(amplification) 공격 형태로 나타남
공격자는 출발지 IP를 공격대상 IP로 위조하여 취약한 서비스를 사용하는 서버에 대규모의 메시지 전송 -> 서버는 요청에 대한 응답메시지를 공격대상 IP에 반사 -> 반사된 응답메시지는 대량의 트래픽으로 증폭되어 공격대상에게 전달

유형

  1. TCP 연결설정과정(3way-handshake) 취약점 이용
    위조된 주소의 syn요청을 반사서버로 전달하여 syn+ack응답이 공격대상으로 향하도록 하는 방법

  2. ICMP 프로토콜의 Echo Request, Echo Response 이용
    위조된 주소의 Echo Request를 반사서버로 전달해 Echo Response가 공격대상으로 향하도록 하는 방법

  3. UDP 프로토콜 서비스를 제공하는 서버를 반사서버로 이용해 그 응답이 공격대상으로 향하도록 하는 방법 (가장 많이 발생)
    • DNS 증폭 DRDoS 공격
      DNS서버(반사서버)에 많은 양의 레코드 정보를 요구하는 DNS 질의타입 (ANY, TXT 등)을 요청해 공격대상에게 대량의 트래픽(증폭) 유발
    • NTP 증폭 DRDoS 공격
      NTP서버(반사서버)에 최근 접속한 클라이언트 목록을 요청해 대량의 응답 트래픽(증폭) 유발
    • SNMP 증폭 DRDoS 공격
      SNMP agent에 MIB와 같은 정보를 대량요청하여 공격대상자에게 대량 트래픽을 유발
    • CHARGEN 증폭 DRDoS 공격
      CHARGEN 서버에 접속 시 대량의 문자열을 전송하여 공격대상자에게 대량 트래픽을 유발

일반 DoS 공격과의 차이점

공격 근원지파악이 어려움 (출발지 IP 변조, 공격트래픽이 수많은 반사 서버를 경유하므로)
좀비 PC의 공격트래픽 효율이 증가

대응방법

  1. IP주소가 위조된 패킷이 인터넷 망에서 인입되지 않도록 ISP가 직접 차단
  2. 반사서버에서는icmp 프로토콜이 악의적으로 이용되지 않도록 필요가 없다면 icmp 프로토콜을 차단
  3. DNS 증폭 DRDoS 반사서버로 악용되지 않도록..
    공개용이 아닌 내부 사용자 DNS 서버라면 내부 사용자 주소만 recursive query가 가능하도록 제한
    서버 방화벽 또는 네트워크 보안장비를 통해 특정 byte 이상의 DNS 질의에 대한 응답을 차단하거나 동일IP에 대한 단위 초당 요청 개수 제한 설정
  4. NTP 증폭 DRDoS 반사서버로 악용되지 않도록 대량의 응답트래픽을 발생시키는 monlist명령을 해제 (NTP 설정파일을 통해 monlist 기능 비활성화)

'보안' 카테고리의 다른 글

보안기사 - 무선랜 보안  (0) 2020.04.28
보안기사 - 무선랜  (0) 2020.04.26
보안기사 - 서비스 거부 공격(DoS, DDoS)  (0) 2020.04.23
보안기사 - Port Scanning  (0) 2020.04.22
보안기사 - 네트워크 관리 명령어  (0) 2020.04.22