일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ubuntu
- LGTM
- 자료구조
- Network
- juice-shop
- sqli
- OpenSource
- 운영체제
- Database
- Codeup
- 데이터통신
- JSP
- JDBC
- CodeQL
- gosec
- MySQL
- firewall
- 백준알고리즘
- C언어
- DVWA
- Python
- github
- OWASP
- Juice Shop
- SUA
- gotify
- github action
- virtualbox
- goKart
- 알고리즘
- Today
- Total
비트(bit)주세요
서비스 거부 공격: Dos, DDos(1) 본문
노점상의 주인은 장사를 하고 있던 어느 날, 문제가 생깁니다.
한 조직의 깡패들이 찾아와서 물건을 부수고 주인을 협박하며 장사를 방해하죠.
이 방해가 지속되면 그 날 장사는 하지 못하는 지경에 이르게 됩니다.
여기서 깡패들이 행한 공격을 네트워크에서는 서비스 거부 공격(Denial of Service), DoS라고 합니다.
방금 상황은 한 조직이 찾아와서 공격을 하였지만,
여러 조직이 찾아와서 공격을 한다면?
이것은 네트워크에서 분산 서비스 거부 공격(Distributed Denial of Service), DDoS라고 합니다
이 글에서는 DoS의 공격 방법과 이에 대한 대응책을 알아볼 것 입니다.
서비스 거부 공격(DoS)의 공격 방법은
1. 취약점 공격형
1.1 보잉크, 봉크, 티어드롭
1.2 랜드 공격
2. 자원 고갈 공격형
2.1 죽음의 핑 공격(ping of death)
2.2 SYN 플러딩 공격
2.3 HTTP GET 플러딩 공격
2.4 HTTP CC 공격
2.5 동적 HTTP 리퀘스트 플러딩 공격
2.6 슬로 HTTP 헤더 DoS(슬로리스) 공격
2.7 슬로 HTTP POST 공격
2.8 스머프 공격
2.9 메일 폭탄 공격
이 있습니다.
1. 취약점 공격형
취약점 공격형은 공격 대상이 특정 형태의 오류가 있는 네트워크 패킷의 처리 로직에 문제가 있을 때
그것을 이용하여 오작동을 유발하는 형태로 이루어집니다.
1.1 보잉크, 봉크, 티어드롭
은행에서는 원활한 진행을 위해 번호표 기계를 둡니다.
은행을 방문한 손님은 차례로 번호표 기계에서 번호표를 뽑아가 자신의 순서를 기다립니다.
하지만 이 번호표 기계가 고장나서 계속 똑같은 번호만 나온다면?
그 번호가 불렸을때 손님들이 한번에 몰려와, 은행원은 혼란에 빠질 것 입니다.
이러한 공격을 보잉크, 봉크 공격이라 합니다.
보잉크, 봉크, 티어드롭 공격의 공통점은 프로토콜의 오류 제어 로직을 악용해,
시스템자원을 고갈시키는 방식이라는 것 입니다.
TCP 프로토콜은 데이터 전달의 유효성과 효율성을 위해 시퀀스 넘버 기반의 오류 제어 방식을 사용해
특정 연결의 유효성을 제어합니다. TCP가 제공하는 오류 제어 기능은 다음과 같습니다
- 패킷의 순서가 올바른지 확인한다.
- 중간에 손실된 패킷이 없는지 확인한다.
- 손실된 패킷의 재전송을 요구한다.
TCP는 신뢰도를 확보하기 위해서 데이터를 전송할 때 패킷 전송에 문제가 있으면
반복적으로 재요청과 수정을 합니다.
보잉크, 봉크, 티어드롭 공격은 공격대상이 반복적인 재요청과 수정을 계속하게 함으로써
시스템 자원을 고갈시키는 공격입니다.
TCP 패킷 안에는 각 데이터의 어느 부분을 포함하고 있는지 표시하기 위해 시퀀스 넘버가 기록됩니다.
이 시퀀스 넘버를 속여서 시스템의 패킷 재전송과 재조합에 과부하가 걸리도록 합니다.
티어드롭 공격은 패킷의 시퀀스 넘버와 길이를 조작하여
패킷 간의 데이터 부분이 겹치거나 빠진 패킷을 전송하는 공격입니다.
시퀀스 넘버가 조작된 패킷의 흐름은 공격 대상에게 절대로 풀 수 없는 퍼즐을 던져주는 것과 같습니다.
시스템은 이 퍼즐을 맞추느라 머리를 싸매다가 작동을 멈춰버리게 됩니다.
이러한 취약점을 방지하기 위해 과부하가 걸리거나
계속 반복되는 패킷은 무시하고 버리도록 처리합니다.
1.2 랜드공격
자신이 영등포역에 갔다고 가정합니다. 그리고 다음과 같은 순서로 길을 찾습니다
영등포역에 도착하면 신길역으로 간다
신길역에서 내리면 영등포역으로 간다
영등포역에 도착하면 신길역으로 간다
신길역에서 내리면 영등포역으로 간다
영등포역에 도착하면 신길역으로 간다
신길역에서 내리면 영등포역으로 간다
쭉 보니까 뭔가 이상합니다. 왜 이런 의미없는 짓을 하는걸까요?
랜드공격에 당했기 때문입니다.
랜드공격은 패킷을 전송할 때 출발지 IP주소와 목적지 IP주소의 값을 똑같이 만들어서
공격대상에게 보내는 것입니다. 이 때 조작된 목적지 IP주소는 공격대상의 IP주소여야 합니다.
이렇게 목적지 주소가 조작된 패킷을 공격 대상에게 보내면 시스템은
공격자가 보낸 SYN 패킷의 출발지 주소를 참조하여 응답 패킷을 보냅니다.
여기서 SYN 패킷의 출발지 주소는 공격자의 주소가 아니라 공격 대상의 주소입니다.
그래서 패킷이 네트워크 밖으로 나가지 않고 자신에게 다시 돌아오며
돌아온 패킷의 출발지 IP주소는 또 다시 자신의 IP주소가 기록됩니다.
이 공격은 동시 사용자 수를 점유하고 CPU 부하를 올려서 시스템이 금방 지치게 만듭니다.
랜드 공격을 방지하기 위한 방법중 하나는 방화벽같은 보안솔루션을 이용하는 것입니다.
이때 네트워크 보안 솔루션엔 출발지 주소와 목적지 주소의 적절성을 검증하는 기능이 있습니다.
2. 자원 고갈 공격형
자원 고갈 공격은 네트워크 대역폭, CPU, 세션 등의 자원을 소모시키는 형태의 공격입니다.
2.1 죽음의 핑 공격(ping of death)
어느 날, 인터넷으로 쌀 20kg를 주문했다고 가정합시다. 그리고 매일 문자가 옵니다
1일 후, 금일 배송지로 쌀 한 톨이 개별 포장되어 배송될 예정입니다.
2일 후, 금일 배송지로 쌀 한 톨이 개별 포장되어 배송될 예정입니다.
3일 후, 금일 배송지로 쌀 한 톨이 개별 포장되어 배송될 예정입니다.
4일 후, 금일 배송지로 쌀 한 톨이 개별 포장되어 배송될 예정입니다.
5일 후, 금일 배송지로 쌀 한 톨이 개별 포장되어 배송될 예정입니다.
.
.
.
300일 후, 금일 배송지로 쌀 한 톨이 개별 포장되어 배송될 예정입니다.
이렇게 되면 주문자는 지치고 실증이 날 것 입니다.
이러한 공격을 죽음의 핑 공격이라고 합니다.
네트워크에서는 데이터를 전송할 때 전송하기 적당한 크기로 패킷을 잘라서 보냅니다.
죽음의 핑 공격은 공격대상에게 패킷을 최대한 길게 보내면 네트워크 특성에 따라
수백 개에서 수천 개의 패킷으로 잘게 쪼개져서 패킷이 보내짐을 이용한 공격입니다.
네트워크 특성상 한 번 나뉜 패킷이 다시 합쳐져 전송되는 일은 거의 없습니다.
결과적으로 공격 대상 시스템의 네트워크는 마비됩니다.
이 공격을 막으려면 ping이 내부 네트워크에 들어오지 못하도록
방화벽에서 ping을 사용하는 프로토콜인 ICMP를 차단해야 합니다.
2.2 SYN 플러딩 공격
영화관에 있는 좌석은 총 80좌석입니다. 여기서 손오공이 문제를 일으킵니다.
손오공은 머리카락을 뽑아 분신을 만든 뒤에 분신에게 모든 좌석을 차지하라고 합니다.
분신은 모든 좌석을 차지하고 다른 사람들은 이용하지 못하게 됩니다.
이러한 공격을 SYN 플러딩 공격이라고 합니다.
네트워크에서 서비스를 제공하는 시스템에는 동시 사용자 수 제한이 있습니다
SYN 플러딩 공격은 존재하지 않는 클라이언트가 서버별로 한정된 접속 가능 공간에
접속한 것처럼 속여 다른 사용자가 서비스를 제공받지 못하게 하는 공격입니다.
위 사진처럼 마지막으로 진행되어야 할 클라이언트 측에서 다시 보내는 ACK패킷을 보내지 않는 것입니다.
서버는 ACK패킷을 보낼때까지 일정 시간 기다려야 하고, 그동안 공격자는 또 SYN패킷을 수없이 만듭니다.
이렇게 되면 서버의 가용 동시 사용자 접속자 수를 모두 SYN Received 상태로 만들 수 있습니다.
이 공격의 대응책은 SYN Received의 대기 시간을 줄이는 것 입니다.
칩입 차단 시스템과 같은 보안 시스템을 통해서도 공격을 쉽게 차단할 수 있습니다.
2.3 HTTP GET 플러딩 공격
공격 대상 시스템에 TCP 3-핸드셰이킹 과정으로 정상적으로 접속한 뒤
특정 페이지를 HTTP의 GET 메소드를 통해 무한대로 실행하는 공격입니다.
연결은 정상인데 지속적으로 GET을 요청하므로 시스템에 과부하가 걸립니다.
2.4 HTTP CC 공격
HTTP 1.1버전부터는 Cache를 두어 클라이언트와 서버 양측의 부하를 줄이고 리소스를 빠르게 얻습니다.
CC(Cache-Control)로 이 캐시를 없앨 수 있는데, 그렇게 되면 웹 서버는 캐시를 사용하지 않아야 합니다.
캐시를 사용하지 않고 클라이언트에 응답해야 하므로 웹 서비스의 부하가 증가하게 됩니다.
2.5 동적 HTTP 리퀘스트 플러딩 공격
위의 HTTP GET 플러딩, HTTP CC 공격은 지정된 웹 페이지를 지속적으로 요청합니다.
그래서 방화벽에 의해 요청 패턴을 방어할 수 있습니다.
하지만 동적 HTTP 리퀘스트 플러딩 공격은 이러한 방어기법을 우회하려고
지속적으로 요청페이지를 변경하여 웹페이지를 요청하는 공격입니다
2.6 슬로 HTTP 헤더 DoS(슬로로리스) 공격
웹 서버와의 커넥션을 최대한 오래 유지하여 웹 서버가 정상적인 사용자의 접속을
받아들일 수 없게 하는 공격 방식입니다.
웹 서버에 아이디, 패스워드, 게시글, 첨부 파일 등을 전송할때 사용하는 POST를 이용합니다.
HTTP 헤더 중에서 Content-Length 필드에 임의의 큰 값을 설정하여 전송합니다.
이러면 클라이언트가 그 크기의 값을 전송할때까지 서버는 커넥션을 유지합니다.
이 때 공격자는 소량의 데이터를 느린 속도로 전송하여 커넥션을 장시간 유지되게 합니다.
결국 서버의 자원은 잠식됩니다.
2.7 스머프 공격
평화로운 스머프 마을의 새벽, A라는 스머프는 확성기로 "가가멜이 나타났다!!"라고 소리치고
마을의 모든 스머프를 깨웁니다. 물론 가가멜은 나타나지 않았습니다. A스머프는 이 사실을 압니다.
그러고선 A스머프는 아무잘못 없는 B스머프에게 확성기를 줍니다.
마을의 모든 스머프는 B스머프가 한 짓인줄 알고 B스머프에게 비난을 합니다.
이 때 B스머프는 스머프공격을 당했다 라고 합니다.
스머프 공격은 ICMP 패킷과 네트워크에 존재하는 임의의 시스템을 이용하여 패킷을 확장함으로써
서비스 거부 공격을 수행하는 공격입니다.
위 사진을 봅시다.
ICMP의 용도 중 하나는 인터넷/통신상에서 발생한 일반적인 상황에 대한 보고입니다.
브로드캐스트는 해당 구역에 있는 모든 PC와 통신을 합니다.
스머프 공격은 이 두가지를 이용합니다. 브로드캐스트로 ICMP request를 보내고 출발지 IP는 조작합니다.
조작된 출발지 IP주소는 공격 대상의 IP입니다. 그러면 공격 대상은 ICMP reply를 받습니다.
그냥 받는것도 아니고 브로드캐스트로 reply를 받게되니 시스템 과부하가 걸립니다.
스머프 공격에 대한 대응책은 간단합니다. 다이렉트 브로드캐스트를 막으면 됩니다.
위에서 나온 방식이 다이렉트 브로드캐스트입니다.
브로드캐스트는 기본적으로 라우터를 넘지 못합니다.
라우터를 넘어가서 브로드캐스트를 해야 하는 특별한 경우에는 네트워크 부분에 정상적인 IP를 적고
해당 네트워크에 있는 클라이언트의 IP주소 부분에 브로드캐스트 주소인 255를 채워서
원격지의 네트워크에 브로드캐스트를 할 수 있습니다. 이 것을 다이렉트 브로드캐스트라고 합니다.
2.8 메일 폭탄 공격
메일 폭탄은 스팸 메일과 같다. 메일 서버는 각 사용자에게 일정한 양의 디스크 공간을 할당합니다.
하지만 메일이 폭주하여 디스크 공간을 가득 채우면 정작 받아야 할 메일을 받을 수 없습니다.
이러한 공격이 메일 폭탄 공격입니다.
여기까지 DoS공격의 종류, 대응책이였습니다.
'정보보안 > 네트워크 보안' 카테고리의 다른 글
세션 하이재킹 공격 (0) | 2021.05.14 |
---|---|
스푸핑 공격 (0) | 2021.05.12 |
스니핑 공격 (0) | 2021.05.06 |
서비스 거부 공격: Dos, DDos(2) (0) | 2021.05.06 |