*DOS 공격
DoS(Denial
of Service, 서비스 거부)
- 공격 대상이 수용할 수 있는 능력 이상의 정보를 제공하거나, 사용자 또는 네트워크의 용량을 초과시켜 정상적으로 작동하지 못하게 하는 공격
- 파괴 공격 : 디스크, 데이터, 시스템 파괴
- 시스템 자원 고갈 공격 : CPU, 메모리, 디스크의 사용에 과다한 부하 가중
- 네트워크 자원 고갈 공격 : 쓰레기 데이터로 네트워크의 대역폭 고갈
DDoS(Distributed
Denial of Service)
- DoS 공격의 업그레이드판
- 1999년 8월 17일에 미네소타 대학에서 대대적으로 DDoS 공격이 일어나 CNN, Yahoo, NBC 같은 대규모 사이트를 마비시킴
Ping of
Death
- ping을 이용하여 ICMP 패킷을 정상 크기보다 아주 크게 만드는 것
- 크게 만들어진 패킷은 네트워크를 통해 라우팅(routing)되어 공격 네트워크에 도달하는 동안 아주 작은 조각(fragment)으로 쪼개지고 공격 대상은 조각화된 패킷을 모두 처리해야 하므로 정상적인 ping보다 부하가 훨씬 많이 걸림
라우팅과
패킷의 분할
- 라우팅은 출발지 주소와 목적지 주소를 확인하고 최적의 거리를 찾아 패킷을 전달해주는 것
- 전달 과정에서 패킷은 항상 특성이 똑같은 네트워크를 지나지는 않음. 프레임 릴레이ATM, 토큰 링, 이더넷 등 다양한 네트워크를 지나 목적지에 도달
- 네트워크마다 최대 전송 가능 패킷 길이가 달라 최대 전송 가능 패킷 길이가 더 작은 네트워크를 지날 때 데이터는 작게 분할됨
- 한 번 분할된 패킷은 더 긴 패킷 길이를 허용하는 네트워크를 지나도 다시 커지지 않음
*DOS 공격 - ping of death
hping3을 이용한
Ping of Death 공격
- epel에서 제공
yum을 이용한 hping 설치
Ping of Death 실행
# hping --icmp --rand-source IP -d [패킷크기]
--flood
--icmp : 전송
패킷의 종류
IP : 공격
대상
-d [숫자] : 전송
패킷의 길이 (최대 65,535)
--flood : 최대
속도로 패킷 생성
--rand-source : 소스 IP를 랜덤하게 결정한다.
-c 패킷
개수
-a IP : spoofing source address
자세한 옵션은 man파일을 참고한다.
--flood 옵션은
패킷 캡처를 어렵게 할 수 있다.
- 제한이 있는 –fast(10개/sec)나 –faster(100개/sec)를 이용할 수 있다.
// ISP에서 확인할 수 있다. 외국에선 어렵지만 국내에선 추적이 가능하다.
*DOS 공격 - SYN Flooding
SYN Flooding
- 네트워크에서 서비스를 제공하는 시스템은 동시 사용자 수가 제한되어 있음
- SYN Flooding(플러딩)은 존재하지 않는 클라이언트가 서버별로 한정되어 있는 접속 가능 공간에 접속한 것처럼 속여 다른 사용자가 서비스를 제공받지 못하게 하는 것
- 공격자는 쓰리웨이 핸드셰이킹 과정에서 서버를 다운시키기 위해 짧은 시간 안에 많은 양의 SYN만 보냄
- 시스템은 보통 SYN에 대한 연결을 무한정 기다리지 않고 일정 시간 동안만 연결을 시도하고 기다리도록 설정되어 있음
- SYN Flooding 공격을 성공하려면 서버에 설정된 대기 시간 안에 서버가 수용할 수 있는 동시 사용자 수의 한계를 넘는 연결을 시도해야 함
- 서버가‘SYN Received’상태로 ACK 패킷을 기다리는 상태를‘백로그 (backlog)에 빠졌다’고 표현하며,‘ SYN Received’상태로 ACK 패킷을 기다리는 시간은 설정 사항으로 변경할 수 있음
보안 패치로 대기 시간을 줄이는 것이 효과적이지만 시스템의 특성상 무조건 대기 시간을 줄일 수 없는 경우가 있음. 방화벽에서도 정상적인 접속 시도와 비정상적인 SYN Flooding 공격
시도를 구분할 수 있는 방법이 없기 때문에 직접적인 차단은 불가능
- SYN Flooding 공격은 일정 시간 안에 동시 접속자 수를 점유해야 하므로 아주 짧은 시간 안에 똑같은 형태의 패킷을 보내게 됨. 이는 매우 정형화된 형태로, 네트워크에서 쉽게 인지가 가능
- 해당 ISP 업체에 연락하여 그에 해당하는 IP 주소 대역을 접속 금지시키거나 확인한 후 방화벽 또는 라우터에서 해당 접속을 금지시킴으로써 시스템 서비스 중지를 막을 수 있음
- 관련 커널 파라미터
- net.ipv4.tcp_max_syn_backlog = 1024
- 백로그의 크기 (대기열에 준비중인 SYN 숫자)
- 실제 공격에 대비하지는 못함.
Syn_Cookie
- 관련 커널 파라미터
- net.ipv4.tcp_syncookies = 1
① 클라이언트로부터 SYN 패킷을 받으면, 시퀀스 넘버를 Sync_Cookie로하는 응답을 보내고 세션을 대기한다. 이때 아무런 버퍼로 저장하지 않는다.
② 클라이언트가 Syn_Cookie가 포함된 값으로 ACK를 보내면, 서버는 그제서야 세션을 다시 열고 통신을 시작한다.
SYN
flooding 실행
# hping --rand-source 192.168.11.17 -p 80 -S --flood
-p : 대상
포트번호
-S : SYN 패킷
tcpdump를 이용 패킷을 캡처한다.
※ 캡쳐 전에 HTTPD 서버가 구동 중인지
확인한다.
*DOS 공격
netstat 명령으로 대기 접속을 확인한다.
// 패킷의 양을 보고 검출한다.
// 바이트 스트림 넘버 : 바이트단위, 문자열(텍스트단위)
// 시퀀스넘버(바이트 스트림 넘버) : 데이터그램의 순서를 확인하는 번호
*DOS 공격 - Boink, Bonk, Teardorp // 시퀀스 넘버랑 관련된 문제
Boink, Bonk,
Teardrop
- 프로토콜은 목적에 따라 정도의 차이는 있지만 신뢰성 있는 연결을 제공하려 함
- 신뢰성 있는 연결은 패킷의 순서가 올바른가, 중간에 손실된 패킷은 없는가를 확인하는 기능을 기본으로 제공
- 프로토콜은 신뢰도를 확보하고자 반복적으로 재요구하고 수정을 하게됨
- Boink, Bonk, Teardrop은 이런 반복적인 재요구와 수정을 계속하게 함으로써 시스템 자원을 고갈시키는 공격
- Bonk는 처음 패킷을 1번으로 보낸 후 두 번째, 세 번째 패킷 모두 시퀀스 넘버를 1번으로 조작해서 보냄
- Boink는 처음 패킷을 1번으로 보낸 후 두 번째 패킷은 101번, 세 번째 패킷은 201번으로 정상적으로 보내다가 중간에서 일정한 시퀀스 넘버로 보냄
- Teardrop은 단순히 시퀀스 넘버를 일정하게 바꾸는 것을 넘어 중첩과 빈공간을 만들며, 시퀀스 넘버를 좀 더 복잡하게 섞음
- 모든 공격은 해석이 불가능하거나 불필요하다고 판단될 패킷을 보낸다.
hping을 이용
Boink, Bonk 공격을 수행하자
- 두개의 터미널에서 동시에 명령을 수행한다.
# hping3 -a 1.1.1.1 192.168.11.17 --id 3200 -M 34343 -p 21 -d 320
--flood
# hping3 -a 1.1.1.1 192.168.11.17 --id 3201 -M 34343 -p 21 -d 320
--flood
// id가 다르면 다른 데이터그램(app계층의 단위)이라는 것
-a : 출발지 IP
-M : TCP sequence 번호
--id : IP identification 번호
-p : dest port 번호
-d : 패킷
길이
- ID번호가 같은 패킷을 두개의 터미널에서 보내보자.
- 보낸 패킷을 각각 터미널로 분리해 보자.
192.168.11.17 시스템에서
패킷을 매우 잠시 동안 캡쳐하고 전달된 패킷의 개수가
얼마인지 확인한다.
*DOS 공격 - LAND
// icmp 패킷을 보내서 혼자 request, echo를 계속 반복한다.
// 네트워크로 나가지않고 메모리에서 계속 돌기 떄문에 시스템자원을 잡아먹는다.
// 라우터 셋팅을 잘못해두면 패킷이 날아간다. (ISP..)
Land
- Land를 사전에서 찾아보면‘땅’또는‘착륙하다’외에‘(나쁜 상태에) 빠지게 하다’라는 의미
- Land(랜드) 공격은 의미 그대로 시스템을 나쁜 상태에 빠지게 하는 것이며, 방법도 아주 간단
- 패킷을 전송할 때 출발지 IP 주소와 목적지 IP 주소 값을 똑같이 만들어서 공격 대상에 보내는 것. 이때 조작된 IP 주소 값은 당연히 공격 대상의 IP 주소여야 함
Land
보안 대책
- Land 공격도 현재의 시스템에서는 대부분 효과가 없음
- 현재의 시스템은 출발지 주소와 목적지 주소를 확인하여 동일한 패킷은 인식하고 버림
- 라우터나 방화벽에서 출발지 IP 주소가 내부 IP 주소와 동일한 패킷은 처음부터 차단하는 것이 좋음
hping을 이용
Land 공격을 수행한다.
# hping 192.168.11.11 -a 192.168.11.11 --icmp –flood
# tcpdump icmp 로 icmp 패킷만 캡처한다.
*DOS 공격 - Smurf, Fraggle
// 대규모 네트워크인경우 안막아둔 경우가 많다.
Smurf,
Fraggle
- 웜이 네트워크를 공격하는 데 아직도 많이 쓰는데, Ping of Death처럼 ICMP 패킷을 이용
- 출발지 주소가 공격 대상으로 바뀐 ICMP Request 패킷을 시스템이 매우 많은 네트워크로 브로드캐스트함
- 기본적인 브로드캐스트는 목적지 IP 주소255.255.255.255를 가지고 네트워크의 임의의 시스템에 패킷을 보내는 것
다이렉트
브로드캐스트(Direct Broadcast)
- 1.1.1.0 네트워크에 IP 주소가 2.2.2.2인 공격자가 브로드캐스트하려면 목적지 IP 주소를1.1.1.255와 같이 설정하여 패킷을 보내야 함
- 공격자가 1.1.1.255로 다이렉트 브로드캐스트하면 네트워크의 모든 시스템들은 아래와 같이 동일한 패킷을 받게됨
- ICMP Request를 받게 된 1.1.1.0 네트워크는 ICMP Request 패킷의 위조된 시작 IP 주소(3.3.3.3)로 ICMP Reply를 다시 보냄
스머프
공격
# hping 192.168.10.255 -a 192.168.11.17 --icmp --flood
- 192.168.11.11 시스템에서 패킷을 캡처해 본다.
// tcp는 어플리케이션에서 반응하지 않는다.
댓글 없음:
댓글 쓰기