가상으로 구축된 환경 외에 시도하는 것은 엄연히 불법입니다. 모든 책임은 개개인에게 있으니 조심해주세요
안녕하세요 Retain0입니다.
이번 시간에 배워볼 것은 HTTP Flood의 일종인 R-U-Dead-Yet공격과 Slowloris공격입니다.
우선HTTP Flood Attack이란?
- 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만으로도 과부하가 걸릴 수가 있게 됩니다.
홈페이지는 임의로 만들어진 페이지를 타깃으로 테스트해보겠습니다. 우선 해당 페이지와의 통신이 공격자를 거치게 해야 하기에 웹 프록시 툴인 " Burp suite " 툴을 사용해서 잡아보겠습니다.
여기까지 설정을 맞췄으면 이제 github 나 sorceforge에서 RUDY 도구를 다운로드해줍니다. 압축까지 모두 풀어 두고 이제 " Burp suite "의 Intercept로 넘어가 " ON " 을 클릭해 주시면 이제 HTTP의 파라미터 값이 공격자를 거치게 됩니다.
" ON "을 눌러둔 상태에서 이제 대상 사이트로 넘어와 Like 버튼을 클릭해서 파라미터 값을 얻어보자
파라미터 값을 얻었으니 다운로드한 rudy 파일 안에 " rudeadyet.conf " 파일이 있을 것이다. 그곳에 대상 사이트 주소 와 파라미터 값을 적고 attack parameter 부분에 post_id라고 적어놔주자( RUDY 공격은 POST를 기반함)
rudeadyet.conf 위치를 모르겠다면 (사진 6) 을 참고하자
준비는 끝났으니 이제 RUDY 공격을 실행해보자 참고로 Python 언어로 작성된 도구이기 때문에 앞에 python 명령을 선언해주고 시작해줘야 함!! 위처럼 작성하면 됩니다.
사진 8 을 보면 Slow-rate 방식이다 보니 동일 세션에 패킷이 보내지는 속도 차가 큼(10초 단위)
사진 9 패킷 하나를 잡고 우 클릭을 하면 -> TCP stream으로 상세 내용을 확인할 수가 있다. content-Lenght 값은 굉장히 크게 잡혀있으며 " post_id = A " 부분을 보아 POST 메서드 방식의 데이터가 아주 조금씩 채워지는 것을 확인할 수가 있습니다.
◆ 대응 방안
(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만 보냄) 서버 측에서는 아직 전송이 다 완료되지 않은 것으로 파악하기 때문에 계속해서 세션을 유지시키게 하는 공격입니다.
사용자의 웹 페이지를 확인하기 위해 httpd를 시작을 해줘야 함 또한 80번 포트가 열려있는지 방화벽 설정이나 httpd.conf 설정 파일도 한번 확인해보길 바란다.( 필자는 설정이 변경되어 있었음.. 덕분에 허튼짓..)
오늘 실습에 사용될 사용자 페이지입니다. 주소창에 해당 pc의 ip 주소로 들어가거나 localhost 입력으로 들어가도 상관없음
Slowloris는 python 언어로 만들어진 모듈이기에 맨 앞에 python 을 먼저 선언해주고 입력해야 됩니다.
공격자와 사용자가 Established 된 상황이다. 여기서 공격자는 사용자에게 비정상 헤더 값(0d0a)를 날려서 사용자 서버 측에서 아직 정상 값으로 다 안 날라왔으니 기다려야지 하는 상황이 온다.
※ 공격명령을 실행 후 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 |