본문 바로가기

전공 공부/네트워크 해킹과 보안 : 정보보안 개론과 실습

ch10 - DoS와 DDoS 공격 /

728x90

01 DoS공격 

 1. DoS 공격에 대한 이해

 2. Ping of Death 공격 / 실습

 3. SYN Flooding / 실습

 4. Boink, Bonk, Teardrop / 실습

 5. Land / 실습

 6. Smurf와 Fraggle / 실습

 7. 7계층 DoS공격 / 실습

 

02 DDoS 공격

 1. DDoS 공격

 2. 툴

 3. 악성코드를 이용한 DDoS 공격

 

03 DoS 및 DDoS 공격 대응책

 

 

01 - DoS공격

 1. DoS 공격에 대한 이해

DoS(Denial of Service) : 서비스 거부는 공격 대상이 수용할 수 있는 능력 이상의 정보를 제공하거나 사용자 또는 네트워크 용량을 초과시켜 정상적으로 작동하지 못하게 하는 공격이다.

DoS와 DDoS와의 차이는 DoS는 혼자하는 공격 / DDoS는 분산 공격으로 여러 대 공격자가 공격하는 방식

 

  1.1 특징

  • 파괴 공격 : 디스크, 데이터, 시스템 파괴
  • 시스템 자원 고갈 공격 : CPU, 메모리, 디스크의 과다한 사용으로 인한 부하 가중
  • 네트워크 자원 고갈 공격 : 쓰레기 데이터로 네트워크 대역폭의 고갈

 

 - Dos 공격 개념

  • 자원(Resource) 고갈형 : 시스템 자원을 고갈시켜 성능을 저하시키는 공격

[SYN Flooding, Ping of Death, L7 Application 공격(HTTP Get Flooding 등)]

  • OS 똔느 서버 프로그램, 네트워크 프로토콜의 취약점을 이용한 DoS 공격

[Land attack, Ping of Death Attack, Teardrop Attack]

  • Route 경로 조작으로 네트워크 경로 상 교환장비 대상으로 하는 DoS 공격

[ICMP Router Discovery Attack]

  • Bankwidth 잠식형 : 네트워크 대역폭을 고갈시키는 공격

[Smuurf Attack, UDP Diagnostic Port Denial service Attack]

 

 

L4레이어 : SYN, SYN-ACK, Reset 플러딩, ACK 플러딩, UDP 플러딩

L3레이어 : Land 어택, ARP, RARP 플러딩, ICMP 플러딩

L2레이어 : VLAN double-encapsulated, VLAN non-IP flood

L7레이어 : HTTP GET 플러딩, DNS Lookup 플러딩, 캐시 컨트롤 공격

 

 

 2. Ping of Death 공격 / 실습

 : 죽음의 핑 날라기라고도 하며 윈도우 95/98과 레드햇 리눅스 6.0 이하 버전에서 유효하고 NetBIOS 해킹과 함께 시스템을 파괴하는 데 가장 흔히 쓰인 초기의 DoS 공격이다. 

 

 - 공격을 실행하는 방법 이해

ping을 이용하여 ICMP 패킷의 크기를 정상보다 아주 크게 만드는 것으로 크게 만들어진 패킷은 네트워크를 통해 라우팅되어 공격 네트워크에 도달하는 동안 아주 작은 조각(Fragment)으로 쪼개진다.

이때 IP Fragment를 제대로 재조립하지 못하면 공격 당한다.

 

 - 패킷을 작게 전달하는 이유?

 -> 네트워크 마다 특성이 똑같지 않아서 최대한 작게 쪼갠 다음 나중에 합쳐준다. 

프레임 릴레이, ATM, 토큰 링 등의 다양한 네트워크를 지나 목적지에 도달한다. 또한 네트워크마다 최대로 전송이 가능한 패킷의 길이가 다른데, 최대 전송 가능한 패킷의 길이가 작은 네트워크를 지나면 데이터는 더 작게 분할된다.

 

- 그리고 라우터의 저장 용량의 한계와 네트워크의 효율성 때문에 한번 분할된 패킷은 더 큰 패킷을 허용하는 네트워크를 지나도 다시 커지지 않는다.

 

 - 라우터가 받아들인 패킷을 전달하는 네트워크에 맞는 적절한 크기로 늘리려면 이미 들어온 패킷을 자신의 저장 공간에 저장하고 다음에 들어온 패킷 데이터를 다시 확인하여 헤더를 붙이는 등 새로운 패킷 생성 작업을 해야 한다.

 

ex) ICMP 패킷의 최대 길이가 65,500바이트 일때 네트워크 최대 전송 길이가 100바이트이면 655로 분할된다.

 

  #실습

클라이언트 : 칼리 리눅스

공격 대상 : 윈도우8

도구 : hping3, wireshark 사용

 

 - 보안 대책

반복적으로 들어오는 일정 수 이상의 ICMP 패킷을 무시하도록 설정.

 

 3. SYN Flooding / 실습

 : 네트워크에서 서비스를 제공하는 시스템은 동시 사용자 수가 제한되어 있는데 서버별로 한정되어 있는 접속 가능 공간에 존재하지 않는 클라이언트가 접속한 것처럼 속여 다른 사용자가 서비스를 제공받지 못하게 하는 것이다.

 

 1) 공격자는 많은 숫자의 SYN 패킷을 서버에 보낸다.

  • SYN(1) : 클라이언트 1,2,3이 서버에 접속하고자 신호를 보냄.

 2) 서버는 받은 SYN 패킷에 대한 SYN/ACK 패킷을 각 클라이언트로 보냄.

  • ACK(2) : 서버가 각각의 클라이언트 1,2,3 에게 확인을 보냄
  • SYN(3) : 서버가 각각의 클라이언트 1,2,3 에게 접속 가능한지 확인

 3) 서버는 자신이 보낸 SYN/ACK 패킷에 대한 ACK 패킷을 받지 못한다.

시간이 지난후

  • 클라이언트 1,2,3 모두 가짜이므로 대답이 없다.

 4) 서버는 세션의 연결을 기다리게 되고, 결국 공격 성공

  • 서버는 2)/3)과정을 반복하고 1,2,3의 자리를 비워둔다.

 

  #실습

공격자 : 칼리 리눅스

공격 대상 : 윈도우8

도구 : hping3

 

 - 보안 대책

  • 시스템 패치 설치
  • IDS나 IPS 설치
  • 짧은 시간 안에 똑같은 형태의 패킷을 보내는 형태의 공격을 인지했을 경우, 해당하는 IP 주소 대역의 접속을 차단, 방화벽 또는 라우터에서 해당 접속을 차단
  • 서버에서 클라이언트로 보내는 SYN+ACK 패킷에 암호화 기술을 이용해서 인증 정보가 담긴 시퀸스 넘버를 생성하여 클라이언트에 보내는 SYN_Cookie 이용

 - TCP 3way handshake 시에 SYN Flooding 공격할 때 Syn_Cookie 대응

 1) 클라이언트로부터 SYN 패킷을 받으면, 간단한 인증 정보가 담긴 Syn_Cookie를 시퀸스 넘버 값에 넣는다. 원래는 TCP SYN Received 상태가 되어야 하지만 SYN으로 인해 세션을 닫는다.

 2) 클라이언트가 Syn_Cookie가 포함된 값으로 ACK를 보내면, 그때 서버는 세션을 다시 열고 통신을 시작

 3) 클라이언트로부터 SYN 패킷을 받더라도 서버는 Syn_Cookie만 보내고 세션을 닫는다. 세션을 열고 기다릴 필요가 없으니 SYN Flooding 공격이 통하지 않는다.

 

 4. Boink, Bonk, Teardrop / 실습

 : TCP 프로토콜의 오류제어를 이용한 공격

신뢰성 있는 연결은 패킷의 순서가 올바른지, 중간에 손실된 패킷이 없었는지 확인한다.

Boink, Bonk, Teardrop은 이런 신뢰성을 확보하고자 수정을 하는 TCP의 반복적인 요구와 수정을 계속하여 시스템 자원을 고갈시키는 공격이다.

 

 - Boink, Bonk, Teardrop 차이

  • Bonk : 처음 패킷을 1번으로 보낸 후 두번째와 세 번째 패킷의 시퀸스 넘버를 모두 1번으로 조작해서 보낸다.
  • Boink : 처음 패킷을 1번으로 보낸 후 두 번째 패킷은 101번, 세 번째 패킷은 201번 등으로 정상적으로 보내다가 중간에서 일정한 시퀸스 넘버를 보낸다.

 ex) 10번째 패킷은 1001번, 11번째 패킷도 1001번, 12번째 1001번으로 보내는 것.

  • Teardrop : 시퀸스 넘버를 일정하게 바꾸는 것을 넘어 중첩과 빈 공간을 만들어 시퀸스 넘버가 좀더 복잡해지도록 섞는다.

 - UDP 를 이용한 것으로 단순히 시퀸스 넘버를 일정하게 바꾸는 것을 넘어 중첩과 빈 공간을 만들어 시퀸스 넘버가 좀더 복잡해지도록 섞는다.

 

bonk -> boink -> Teardrop

-> 전혀 맞지 않는 시퀸스 넘버 때문에 피해 시스템이 패킷화된 데이터를 재조합하는데 혼란이 생겨 CPU에 과부하가 걸리게 된다.

ex) 패킷  길이가 100이라고 했을 때 Teardrop 공격은 시퀸스 넘버를 다음과 같이 바꾼다.

 

  #실습

공격자 : 칼리 리눅스

공격 대상 : 윈도우 8

도구 : hping3

 

 - 보안 대책

SYN Flooding이나 Ping of Death와 같음

 

 5. Land / 실습

 : '땅', '착륙하다' 외에 '(나쁜 상태에) 빠지게 하다'라는 뜻으로 시스템을 나쁜 상태에 빠지게 하는 것으로 SYN Flooding기법과 유사하다.[동시 사용자 수를 점유해 CPU를 부하까지 올린다.]

 - 패킷을 전송 할 때 출발지 IP 주소와 목적지 IP 주소의 값을 똑같이 만들어서 공격 대상에게 보내는 것이다.(수신 IP 주소를 공격 대상 IP 주소로 위조)

이런 패킷을 공격 대상에게 보내면 시스템은 공격자가 처음 보낸 SYN 패킷의 출발지 주소 값을 참조하여 응답 패킷(Reply)의 목적지 주소를 SYN 패킷의 출발지 주소로 설정해서 보내게 된다.

 

그런데 SYN 패킷의 출발지 주소는 실제 공격자의 주소가 아닌 공격 대상의 주소 값을 네트워크 밖으로 나가지 않고 자신에게 다시 돌아오게 된다.

 

  #실습 

공격 : 칼리 리눅스

공격 대상 : 윈도우 8

도구 : hping3

 

 - 보안 대책

라우터나 방화벽에서 출발지 IP 주소가 내부 IP 주소와 동일한 패킷을 차단.

 

 6. Smurf와 Fraggle / 실습

Broadcasting + icmp + source.ip위장

 : 웜이 네트워크를 공격할 때 사용하는 것으로, Ping of Death 처럼 ICMP 패킷을 이용한다.

 - 목적지 IP를 255.255.255.255로 설정하여 패킷을 보내면, 라우터가 외부 네트워크로 나가는 것을 차단하여 내부 네트워크인 랜(lan)안에서만 동작한다.

라우터는 기본적으로 브로드캐스트를 지원하지 않고 다이렉트 브로드캐스트를 하게 된다.

ex) 172.16.0.0에 10.10.10.24인 공격자가 브로드캐스트를 하려면 목적지 IP 주소를 172.16.0.255와 같이 설정하여 패킷을 보내야 한다.

그런데 목적지 IP 주소 값을 255.255.255.255로 보내게 되면 이 패킷이 라우터는 외부 네트워크로 나가는 것을 차단한다.

 - ICMP Request를 받게 된 네트워크는 ICMP Request 패킷의 위조된 소스 IP 주소로 Reply를 다시 보낸다.

결국, 공격 대상은 많은 ICMP Reply를 받게 되고 Ping of Death처럼 수많은 패킷이 시스템을 과부하 상태로 만든다.

 

#Fraggle

 : smurf와 비슷하지만 ICMP 대신 UDP를 사용한다.

공격자는 네트워크 내의 브로드캐스트 주소로 전형적인 포트 7(echo)을 이용해 가짜 UDP패킷을 전송(에코가 가능한 네트워크 내의 각각의 시스템은 엄청난 트래픽을 생성하고 공격 대상으로 응답을 보낸다. )

 

#실습

공격자 : 칼리 리눅스

공격 대상 : 윈도우 8

도구 : hping3

 

 - 보안 대책

다이렉트 브로드캐스트를 막기

 

 7. 7계층 DoS공격 / 실습

 - 3계층과 4계층 DoS 공격의 차이

 

  7.1 웹 어플리케이션 DoS 유형

1. HTTP Get Flooding 공격

 : 공격 대상 시스템에 TCP 쓰리웨이 핸드셰이킹 과정을 통해 정상적으로 접속한 뒤, HTTP의 GET Method를 통해 특정 페이지를 무한대로 실행하는 방식이다.

-> 공격 패킷을 수신하는 웹 서버는 정상적인 TCP 세션과 함께 정상적으로 보이는 HTTP Get을 지속적으로 요청하여 시스템에 과부하를 건다.

 

2. HTTP CC 공격

HTTP 1.1 버전의 CC(Cache-Control) 헤더 옵션은 자주 변경되는 데이터에 HTTP 요청 및 응답을 새롭게 요구하기 위하여 캐시기능을 사용하지 않게 할 수 있다. DoS공격 기법에 'Cache-Control: no-store, must-revalidate' 옵션을 사용하면 웹 서버는 캐시를 사용하지 않고 응답을 해야 하므로 웹 서비스의 부하가 증가한다.

 

3. 동적 HTTP Request Flooding 공격

 : [HTTP Get Flooding 공격이나 HTTP CC공격은 지정된 웹 페이지를 지속적으로 요청하는 서비스 거부 공격이다. 이 두 가지 공격에 대해서는 웹 방화벽을 통해 특징적인 HTTP 요청 패턴으로 방어할 수 있는 차단 기법이 존재한다.] 동적 HTTP Request Flooding은 이러한 차단기법을 우회하기 위해 요청 페이지를 변경하여 웹 페이지를 지속적으로 요청하는 기법이다.

 

4. Slow HTTP Header DoS(Slowloris) 공격

서버로 전달할 HTTP 메시지의 Header 정보를 비정상적으로 조작하여 웹서버가 헤더 정보를 완전히 수신할 때까지 연결을 유지하도록 한다. 그 결과 시스템 자원을 소비시켜 다른 클라이언트의 정상적인 서비스를 방해하는 공격이다.

 - 웹 서버는 HTTP 메시지의 헤더와 데이터를 개행 문자(CR LF CR LF, \r \n \r \n, 0x0D 0x0A 0x0D 0x0a)로 구분한다. 하지만 개행 문자 없이 전달하면 정보가 다 수신하지 않은 것으로 판단해 서비스 장애가 발생.(웹 로그를 기록하지 않음)

 

5. Slow HTTP POST 공격

 : 웹 서버와의 커넥션을 최대한 장시간 동안 유지하여 웹 서버가 정상적인 이용자의 접속을 받아들일 수 없게 하는 방식이다.

이 공격은 사용자가 ID, pw, 게시글, 첨부 등을 전송할 때 사용하는 HTTP POST 메서드를 사용한다. 헤더의 Content-Length 필드에 임의의 큰 값을 설정해 전송함으로써 웹 서버가 클라이언트에서 해당 크기의 메시지를 전송할 때까지 커넥션을 유지하고, 공격자가 소량의 데이터를 느린 속도로 전송해 웹 서버와의 커넥션을 장시간 동안 유지하게 하여 서버의 자원을 잠식한다.

 

6. Mail Bomb

 : 메일 폭탄으로 메일 서버는 각 사용자에게 일정한 디스크 공간을 하당하는데, 메일이 폭주하여 디스크 공간을 가득 채우면 정작 받아야 하는 메일을 받을 수 없어서 스펨 메일이 DoS 공격이 된다.

 

  # 실습

 

 

02 - DDoS 공격

 1. DDoS 공격

  1.1 DDoS공격 개념

 : DoS 공격의 발전으로 공격자의 위치와 구체적인 발원지를 파악하는 일이 어려워 대응하기 어렵다.

  • 공격자(Attacker) : 공격을 주도하는 해커의 컴퓨터
  • 마스터(Master) : 공격자에게 직접 명령을 받는 시스템으로 , 여러 대의 에이전트를 관리
  • 핸들러(Handler) : 마스터 시스템 역할을 수행하는 프로그램
  • 에이전트 (좀비PC) : 공격 대상에 직접 공격을 가하는 시스템
  • 데몬 : 에이전트 시스템 역할을 수행하는 프로그램

  - DDoS 공격을 하는 순서

1. 많은 사람이 사용하며 대역폭이 넓고 관리자가 모든 시스템을 세세하게 관리할 수 없는 곳의 계정을 획득한다. 스니핑이나 버퍼 오버플로우 등의 공격으로 설치 권한이나 루트 권한을 획득

 

2. 잠재적인 공격 대상을 파악하기 위해 네트워크 블록별로 스캐닝을 실시한다. 그리고 원격지에서 버퍼 오버플로우를 일으킬 수 있는 취약한 서비스를 제공하는 서버를 파악한다.

 

3. 취약한 시스템 목록을 확인한 후 실제 공격을 위한 Exploit을 작성

 

4. 권한을 획득한 시스템에 침투하여 Exploit(공격 시 반복적인 작업을 피하기 위해 작성한 자동화된 스크립트)을 컴파일하여 설치한다.

 

5. 공격

 

 2.  DDoS툴

  2.1 Trinoo

 : UDP를 기본으로 공격을 시행하며 'statd, cmsd, ttdbserverd' 데몬이 주된 대상이다.

트리노의 각 마스터에는 설치자가 아닌 다른 사용자가 임의로 접속하지 못하게 패스워드를 입력하도록 되어 있으나 암호화되지 않은 텍스트라 스니핑이나 TCP 세션 하이재킹 공격에 노출된다.

 

  2.2 TFN, TFN 2K, Stacheldraht

#TFN(Tribed Flood Network)

 : Trinoo의 발전된 형태로 믹스터가 개발했으며 statd, cmsd, ttdb 데몬의 취약점을 공격한다.

클라이언트와 데몬 간에는 ICMP Echo Request 패킷을 사용하고 TCP, UDP 연결도 이뤄지지 않아서 모니터링하기 쉽지 않다.

클라이언트의 각 명령은 패킷에 16비트 이진수로 데몬에 전송되며, 시퀸스 넘버는 0x0000으로 설정되어 있어 TCP Dump로 모니터링하면 ping의 최초 패킷처럼 보이기 때문이다. [17바이트부터는 일정한 형태로 구별 가능]

약점 : Trinoo와 같이 공격자 시스템과 마스터 시스템 간의 연결이 암호문이 아닌 평문으로 전달되어 스니핑, 공격자가 노출 당할 수 있다.

 

#TFN 2K

 : 믹스터 개발로 통신에 특정 포트를 사용하지 않고 암호화되었다.(UDP, TCP, ICMP, 포트를 복합적으로 사용)

TCP SYN Flooding, UDP Flooding, ICMP Flooding, Smurf 공격을 사용

모든 명령은 CAST-256 알고리즘으로 암호화

지정된 TCP 포트에 백도어를 실행할 수 있다.

데몬은 설치할 때 자신의 프로세스 이름을 변경하여 프로세스 모니터링을 회피한다.

UDP 패킷의 헤더가 실제 UDP 패킷보다 3바이트만큼 더 크고 TCP 패킷의 헤더는 길이가 0이다.(정상 패킷이면 0일수 없음)

 

#Stacheldraht(슈타첼드라트)

 : 독일어로 철조망이라는 뜻으로 TFN의 발전 현태다.

공격자와 마스터, 에이전트, 데몬과의 통신에 암호화 추가

 

 3. 악성코드를 이용한 DDoS 공격

 

03 - DoS 및 DDoS 공격 대응책

  #보안 대책

  • 방화벽 설치와 운영

 보통 내부 네트워크와 외부 네트워크의 경계선에 우선 설치하며 30%정도 차단하는 역할을 한다.

그리고 출발지 주소 / 목적지 주소 / 침입을 시도하려는 서비스(포트 번호) / 프로토콜로 룰셋(규칙 집합)을 만든다.

 

 - 최소한의 서비스만 제공하고 사용하지 않은 서비스의 포트는 닫는다. 이는 DoS 공격 뿐 아니라 모든 해킹에 대한 기본 대응책이다.

 - 외부 네트워크에서 들어오는 패킷의 출발지 주소가 내부 네트워크에 존재하는 주소지와 일치할 경우 차단한다.

 - IPS 내부의 구성 요소 간 트러스트를 금지한다.[제로 트러스트]

 - 인증 없이 시스템에 접속할 수 있는 내부/외부 사용자를 허용하지 않는다.

 - 명시적인 서비스 외의 모든 서비스를 금지한다.

 

  • IPS 설치와 운영

 Intrusion Prevention System은 네트워크에 침입해서 들어오는 공격을 탐지항 능동적으로 대응하기 위한 시스템이다.

ICMP 패킷을 이용한 DoS 공격이나 백도어는 방화벽에서 무차별적으로 차단하기가 곤란하다. 공격자는 이러한 틈새를 이용해 원래 목적에 부합하지 않는 비정상적인 패킷으로 조작한 뒤 공격을 시도한다.

이런 시도는 선별적 차단이 어려워 각각의 패턴에 따라 정상적인 시도인지, 공격을 목적으로 하는 시도인지 판별하는 작업이 필요하는데 이를 IPS가 수행한다.

 - 실제 공격 시 또는 그 전에 공격 양상을 탐지할 수 있어 지속적인 관리가 필요하고 탐지된 공격의 출발지 주소에 대한 방화벽이나 라우터에서의 접근 금지도 예방책이 될 수 있다.

 

  • 안정적인 네트워크 설계

방화벽이 차단에 실패하고  IPS의 탐지도 늦어 최초 대응을 놓치게 된 경우, 내부의 시스템은 공격에 대해  다음과 같이 어느 정도 저항성이 있어야 한다.

CAR(Committed Access Rate) : 라우터로 일정량 이상의 패킷이 들어오면 그 이상의 패킷은 통과시키지 않는 방법

각 장비 간에 로드 밸런식을 설정하거나 백어 서버를 운영하는 방법 ..

 

  • 시스템 패치

시스템에서 바이러스와 해킹 공격에 취약한 점이 발견하면 패치를 하는데 해당 패치가 정확히 어떤 작용을 하는지 이해한 뒤 설치하도록 하며 백업을 필수적으로 해야한다.

 

  • 스캐닝

시스템 분석을 의미하며 Trinoo, TFN 등의 마스터와 에이전트는 해킹을 당한 시스템에 디렉토리, 루트킷, 커널 모듈 등과 같이 시스템에 꼭 필요한 형태이거나 눈치 채기 어려운 형태로 존재하는 것을 분석해야 한다.

 

  • 서비스별 대역폭 제한

L4 스위치에서 각 서비스별로 대역폭을 조절하여 특정 서비스에 대한 공격이 이뤄지더라도 나머지 서비스에 대한 영향을 최소화할 수 있으며 공격이 이뤄지고 있는 서비스도 공격 성공에 필요한 최소 대역폭을 얻을 수 없어 공격에 성공하기 어렵다.

 

04 - 연습문제