일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- XOR복호화
- 포렌식
- 무작위문자열
- 대외활동명함
- 파이썬암호화
- GRR 설치방법
- XOR암호화복호화
- 한국디지털포렌식센터
- 융보공대생
- 대외활동
- GRR 설치
- 포렌식3요소
- 포렌식5대요소
- 기사스크랩
- 디지털포렌식
- random.seed
- 무작위비트열
- 랜덤비트열
- 한국디지털포렌식
- 디지털포렌식3대요소
- 보안
- GRR
- XOR연산
- 포알즈
- 디지털포렌식5대요소
- 원격포렌식
- 융합보안공학과
- 난수발생기
- remote forensic
- 대외활동발대식
- Today
- Total
민오리
[네트워크 실습] Syn Flooding 공격&대응 과정 본문
1. TCP 프로토콜이란?
TCP 프로토콜 과정은 3단계로 이루어진다. CLIENT는 SERVER에 접속을 요청하는 SYN패킷을 보낸다. 이때 CLIENT는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT상태가 된다.
SERVER는 SYN 요청을 받고 CLIENT 에게 요청을 수락한다는 ACK과 SYN FLAG가 설정된 패킷을 발송하고 CLIENT가 다시 ACK으로 응답하기를 기다리는 SYN_RECEIVED 상태가 된다. 이때 SERVER는 CLIENT의 접속을 받아들이기 위해 메모리에 일정공간을 확보해 둔다.
CLIENT는 SERVER에 ACK을 보내고 그 이후부터는 연결이 이루어져 데이터가 오가게 되는 것이다. 이때 SERVER의 상태가 ESTABLISHED이다.
이 방식이 TCP의 연결방식인 3WAY HAND SHAKE이다.
2. SYN FLOODING 과정
이때 CLIENT가 SYN 패킷 만을 계속적으로 보내고 ACK을 보내지 않게 되면 SERVER는 CLIENT의 연결을 받아들이기 위해 메모리 공간을 점점 더 많이 확보해둔 상태에서 대기하게 된다.
SYN+ACK 패킷을 받은 SERVER는 CLIENT 로부터 응답이 올 것을 기대하고 반쯤 열린 이른바 “Half Open” 상태가 되어 대기 상태에 머무른 후 일정 시간 후에 다음 요청이 오지 않으면 해당 연결을 초기화 하게 되는데, 초기화하기 전까지 이 연결은 메모리 공간인 백 로그 큐(Backlog Queue)에 계속 쌓이게 된다. 또한 공격자는 매 패킷마다 IP를 랜덤으로 바꿔 공격해 SERVER는 위조된 CLIENT주소로 SYN+ACK을 보내기 때문에 SERVER는 ACK을 받을 수 없게 된다. 공격이 위조된 연결 시도를 초기화하기 전에 위조된 새로운 요구가 계속 들어오게 되거나 위조된 새로운 요구가 연결을 초기화하는 속도보다 더 빨리 이루어진다면 SYN 패킷이 어느 정도 백 로그 큐에 저장이 되다가 결국 꽉 차게 되어 더 이상의 연결을 받아들일 수 없는 상태, 즉 서비스 거부 상태가 된다. 이처럼 백 로그 큐가 가득 찼을 경우에 공격을 당한 해당 포트로만 접속이 이루어지지 않을 뿐 다른 포트에는 영향을 주지 않고, 또한 서버에 별다른 부하도 유발하지 않고, 다른 DoS 공격과는 달리 많은 트래픽을 유발하는 공격이 아니기 때문에 쉽게 파악이 되지 않는 공격 형태이다.
3. 공격 과정
1) 피해자: Debian (192.168.75.129)
공격자: Kali2 (192.168.75.128)
2) 피해자의 서버에서 Index.html 수정하고 apache서버 시작
3) 공격자 kali2에서 피해자 Debian 한테 hping3 공격
hping3 --rand-source (공격대상 ip) -p 80 -S --flood
Hping3 옵션 |
옵션 내용 |
--rand-source |
공격자의 IP주소를 랜덤하게 생성 |
192.168.75.129 |
공격 대상의 IP주소 |
-p 80 |
80번 포트에 대해 패킷 전송 |
-S |
TCP 패킷 중 SYN만 전송 |
-flood |
시스템이 생성 가능한 만큼 빠른 속도로 패킷 보낸다 |
netstat -an | grep SYN
4) 보안 기법 적용
① 백 로그 큐 사이즈 늘리기
sysctl -w net.ipv4.tcp_max_syn_backlog=1024
서비스 거부 상태가 되는 것은 백 로그 큐가 가득 차서 다른 접속 요구를 받아들이지 못하기 때문에 백 로그 큐의 크기를 늘려주면 된다. 현재 시스템에 설정된 백 로그 큐의 크기는 필요 이상으로 작게 설정되어 있기 때문에 백 로그 큐 사이즈를 늘려 제한된 용량을 늘려준다. 그러나 이 방법은 임시적인 방법일 뿐, 지속적인 공격을 당하여 로그 값이 다 차게 되기 때문에 근본적인 해결 방법은 아니다.
그렇기 때문에 백 로그 큐의 값을 늘려주는 것과 함께 syn cookies 기능도 설정해줘야 한다.
② syncookies 설정
syn cookies는 백 로그 큐가 가득 찼을 경우에도 정상적인 접속 요구를 계속 받아들일 수 있도록 해주기 때문에 가용성을 최대한 확보할 수 있으므로 SYN_FLOODING 공격에 대비한 가장 효과적인 방법 중 하나이다.
sysctl -w net.ipv4.tcp_syncookies=1
③ iptables을 이용한 차단
iptable이란 리눅스 상에서 방화벽을 설정하는 도구로서 특정 조건을 가지고 있는 패킷에 대해 허용(ACCEPT)과 차단(DROP)등을 지정할 수 있다.
iptables -A INPUT -s 192.168.35.1 -d 192.168.75.129 -j ACCEPT: 출발지 ip 192.168.35.1(라우터 ip)에서 도착지 192.168.75.129로 들어오는 패킷은 허용한다.
iptables -A INPUT -s 192.168.75.1 -d 192.168.75.129 -j ACCEPT: 출발지 ip 192.168.75.1(라우터 ip)에서 도착지 192.168.75.129로 들어오는 패킷은 허용한다.
iptables -A INPUT -s 192.168.35.247 -d 192.168.75.129 -j ACCEPT: 출발지 ip 192.168.35.247 (컴퓨터 ip)에서 도착지 192.168.75.129로 들어오는 패킷은 허용한다.
iptables -A INPUT -s 0.0.0.0/0 -d 192.168.75.129 -j DROP: 모든 ip에서 도착지 192.168.75.129로 들어오는 모든 패킷을 차단한다.
Iptables 옵션 |
옵션 내용 |
-A |
새로운 정책을 추가한다 |
-s |
패킷 송신지 |
-d |
패킷 수신지 |
-j |
규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시한다. |
ACCEPT |
허용한다 |
DROP |
차단한다. |
Iptables -nL |
현재 설정된 iptable의 목록을 보여준다. |
Iptables-save |
현재 변경한 iptable의 내역을 저장한다. |
• 위 명령어 적용 결과: 통신을 위해 라우터에서 전송하는 패킷은 허용한다. 또한 테스트를 위해 공격자 kali2뿐만 아니라 모든 ip를 차단하고 가상머신이 아닌 컴퓨터의 ip만을 허용한다.
‘
④ netstat -an | grep SYN_RECV 실시간 모니터링
공격이 이루어지고 있는 상황은 netstat -an을 통해 확인 가능하다. 연결 요청중인 목록 중 SYN_RECV 로 되어있는 요청이 많을 경우 Syn Flooding 공격 상황을 의심해 볼 있다. SYN_RECV로 된 요청이 많고, 해당 요청 IP가 비정상적인 경우 Syn Flooding 공격일 가능성이 아주 높다.
'전공수업 > Network' 카테고리의 다른 글
[네트워크 실습] SQL Injection 공격 실습 (0) | 2020.06.26 |
---|