본문 바로가기

IT Security/HACKABLE

[Two Greedy] HTTP Flood Attack

가상으로 구축된 환경 외에 시도하는 것은 엄연히 불법입니다. 모든 책임은 개개인에게 있으니 조심해주세요

안녕하세요 Retain0입니다.

이번 시간에 배워볼 것은 HTTP Flood의 일종인 R-U-Dead-Yet공격과 Slowloris공격입니다.

 

우선HTTP Flood Attack이란?

 

HTTP Flood 도식화

  • DOS / DDOS 공격의 분류로 HTTP의 메소드인 POST 와 GET 메소드를 이용한 7계층 공격으로 다량의 HTTP 세션을 연결하여 정상적인 세션을 연결될 수 없도록 함

HTTP Flood 공격이 전 시간에 배웠던 TCP 나 UDP Flood 공격과는 다르게 대역폭 자원을 범람시켜서 공격하지 않고 비교적 적은 양으로도 가용성(Availability) 을 침해할 수있는 것이 큰 특징입니다. 그렇기에 대역폭을 기준으로 차단하는 방어 체계를 우회할 수있는 가능성이 있습니다.

① RUDY(R-U-Dead-Yet) Attack

Slow-rate 방식으로 실행되는 대표적인 공격도구이며 현재까지도 널리 사용되고 있는 공격입니다.

여기서 Slow-rate 방식이란 말 그대로 " Low and Slow"입니다. 즉 범랑을 하지 않기에 겉보기에는 정상적으로 보일 수 있어 OSI 7 Layer에서 보지 못하게 우회할 수 있습니다.

RUDY 공격은 " POST" 메서드를 이용하고 "Content Lenght"를크게 할당하여 POST 영역 중 특정 변수의 값을 하나씩 하나씩 대입하여 연결을 계속 지속시키는 것이 특징입니다. 그렇게 되면 서버 측에서는 "Content Lenght" 값이 전부 올 때까지 대기하기 때문에 단일 pc만으로도 과부하가 걸릴 수가 있게 됩니다.

RUDY 실습 구성
사진 1 공격 대상 홈페이지

홈페이지는 임의로 만들어진 페이지를 타깃으로 테스트해보겠습니다. 우선 해당 페이지와의 통신이 공격자를 거치게 해야 하기에 웹 프록시 툴인 " Burp suite " 툴을 사용해서 잡아보겠습니다.

(사진 2) 해당 페이지 Proxy 설정
사진 3 웹 프락시 툴 " Burp suite " 설정

여기까지 설정을 맞췄으면 이제 github 나 sorceforge에서 RUDY 도구를 다운로드해줍니다. 압축까지 모두 풀어 두고 이제 " Burp suite "의 Intercept로 넘어가 " ON " 을 클릭해 주시면 이제 HTTP의 파라미터 값이 공격자를 거치게 됩니다.

사진 4 대상 사이트

" ON "을 눌러둔 상태에서 이제 대상 사이트로 넘어와 Like 버튼을 클릭해서 파라미터 값을 얻어보자

사진 5 얻은 파라미터 값을 " rudeadyet.conf "에 작성

파라미터 값을 얻었으니 다운로드한 rudy 파일 안에 " rudeadyet.conf " 파일이 있을 것이다. 그곳에 대상 사이트 주소 와 파라미터 값을 적고 attack parameter 부분에 post_id라고 적어놔주자( RUDY 공격은 POST를 기반함)

rudeadyet.conf 위치를 모르겠다면 (사진 6) 을 참고하자

 

사진 6 rudeadyet.conf 위치 및 경로
사진 7 공격 시작

준비는 끝났으니 이제 RUDY 공격을 실행해보자 참고로 Python 언어로 작성된 도구이기 때문에 앞에 python 명령을 선언해주고 시작해줘야 함!! 위처럼 작성하면 됩니다.

사진 8 패킷 분석

사진 8 을 보면 Slow-rate 방식이다 보니 동일 세션에 패킷이 보내지는 속도 차가 큼(10초 단위)

사진 9 패킷 상세 내용 확인

사진 9 패킷 하나를 잡고 우 클릭을 하면 -> TCP stream으로 상세 내용을 확인할 수가 있다. content-Lenght 값은 굉장히 크게 잡혀있으며 " post_id = A " 부분을 보아 POST 메서드 방식의 데이터가 아주 조금씩 채워지는 것을 확인할 수가 있습니다.

사진 10 접속 지연

◆ 대응 방안

(1) wireshark -> Follow TCP Stream 을 보면 content_lenght 값이 있다 여기서 적정 임계치를 두어 낮춰야 함

(2) httpd.conf 파일에서 Time out 을 "5" 이하로 수정

- centos 기준 -> /etc/httpd/conf/httpd.conf

- ubuntu 기준 -> /etc/apache2/apache2.conf

 


② Slowloris Attack

로버트 한슨(Robert Hansen)에의해 개발되었으며, 한대의 컴퓨터로 웹서버를 다운 시킬 수 있는 공격도구로 이 또한 " Slow-Rate" 방식으로 사용됩니다.

사용자 세션을 맺은 상태에서 공격자가 비정상적인 헤더 값(정상 헤더 값은 0d0a0d0a) 을 서버에 요청하여(0d0a만 보냄) 서버 측에서는 아직 전송이 다 완료되지 않은 것으로 파악하기 때문에 계속해서 세션을 유지시키게 하는 공격입니다.

Slowloris 실습 구성

 

 

사진 1 Centos: httpd 시작하기

사용자의 웹 페이지를 확인하기 위해 httpd를 시작을 해줘야 함 또한 80번 포트가 열려있는지 방화벽 설정이나 httpd.conf 설정 파일도 한번 확인해보길 바란다.( 필자는 설정이 변경되어 있었음.. 덕분에 허튼짓..)

사진 2 대상 웹페이지

오늘 실습에 사용될 사용자 페이지입니다. 주소창에 해당 pc의 ip 주소로 들어가거나 localhost 입력으로 들어가도 상관없음

사진 3 공격 시작

Slowloris는 python 언어로 만들어진 모듈이기에 맨 앞에 python 을 먼저 선언해주고 입력해야 됩니다.

 

사진 4 사용자와 공격자의 세션 연결 상태 확인

공격자와 사용자가 Established 된 상황이다. 여기서 공격자는 사용자에게 비정상 헤더 값(0d0a)를 날려서 사용자 서버 측에서 아직 정상 값으로 다 안 날라왔으니 기다려야지 하는 상황이 온다.

사진 5 패킷 분석(비정상)
사진 6 패킷 분석(정상)

 

사진 7 공격 후 대상 페이지

※ 공격명령을 실행 후 socket count 값이 주르르 나오는데 값이 " 0 " 이되거나 제대로 공격이 실행되지 않는 경우 상대방 방화벽에서 거르는 경우도 있습니다. 그럴 땐 사용자의 방화벽을 꺼주시고 진행해주시면 되겠습니다.

◆ 대응 방안

(1) 동시 연결에 대한 임계치 설정을 통해 다수의 접근을 통제

(2) httpd.conf 파일에서 Time out 을 "5" 이하로 수정

- centos 기준 -> /etc/httpd/conf/httpd.conf

- ubuntu 기준 -> /etc/apache2/apache2.conf

 

① RUDY install location : https://github.com/nosperantos/RUDY

② Slowloris install location : https://github.com/gkbrk/slowloris

 

 


오늘 실습은 여기까지만 해보겠습니다. HTTP Flood인 " R-U-Dead-Yet " 과 " Slowloris " 경우 최근까지 빈번하게 일어났었던 일입니다. DOS 공격을 위해 굳이 트래픽을 과부하 시켜야 하는 방법을 사용하지 않고 한대의 pc만으로도 이렇게 만들 수 있다는 점이 참 흥미롭습니다, 혹시나 pc에 dos 가 의심이 되신다면 패킷 분석을 통해 어떤 형태의 공격인지를 인지하시고 그에 따른 대응 방안을 모색하시길 바라겠습니다.

감사합니다.

 

'IT Security > HACKABLE' 카테고리의 다른 글

[Two Greedy] ARP Spoofing  (0) 2020.04.04
[Two Greedy] ARP & DNS Spoofing (Ettercap)  (0) 2020.04.03
[Two Greedy] TCP 통신 간 DOS Attack  (0) 2020.04.02
[Two Greedy] HTTP Flood & CVE-2018-6389  (0) 2020.04.01
[Two Greedy] Flooding Attack  (0) 2020.03.30