네트워크 침해 유형 및 특징
네트워크 침해 유형 및 특징
DoS(Denial of Service) 공격
시스템이나 네트워크의 구조적인 취약점을 공격하여 정상적인 서비스를 할 수 없도록 방해하는 것. 과도한 부하를 발생시켜 데이터나 자원을 잠식. 파괴 공격, 시스템 자원 고갈 공격, 네트워크 자원 고갈 공격으로 분류.
Ping of Death
Ping을 이용하여 ICMP 패킷을 정상적인 크기보다 아주 크게 만들어 보낸는 공격 방법. ICMP Flooding의 일종.
UDP Flooding
UDP 패킷을 대량 발생시켜 특정 시스템의 서비스를 방해하는 공격. 소스 주소가 스푸핑된 시스템에서 UDP 패킷을 공격 대상이 되는 시스템에 대량 전송하여 네트워크 대역폭을 소모하는 형태로 공격이 이루어짐
TCP SYN Flooding
네트워크 서비스들이 동시에 접속하는 사용자 수의 제한이 있다는 점을 약용한 공격법으로 특히 TCP의 Three-way Handshaking과 밀접한 관계가 있음. 공격자가 특정 시스템의 서비스 방해를 목적으로 짧은 시간에 대량의 SYN 패킷을 보내어 접속 가능한 공간을 소진함으로서 다른 사용자의 접속을 막는 기법.
Teardrop Attack
데이터를 전송하기 위해서는 패킷을 분할하고 시퀀스 넘버를 생성하는 데, 이러한 시퀀스 넘버를 조작하거나 중첩시켜서 패킷화된 데이터를 재조합할 때 혼란을 일으켜 내부에 과부하를 발생시키는 공격 방법.
Land Attack
공격자가 임의로 자신의 IP 주소 및 포트를 대상 서버의 IP 주소 및 포트와 동일하게 하여 서버를 공격.
Smurf Attack
공격자는 IP 주소를 공격 서버의 IP 주소로 위장하고 ICMP Request 패킷을 브로드캐스트를 통해 다수의 시스템에 전송. 이 때 브로드캐스트를 수신한 다수의 시스템은 ICMP Echo Reply 패킷을 공격자가 아닌 공격 대상의 서버로 전송하게 되면서 부하를 발생.
Mail Bomb
폭탄 메일이라고 부르는데, 스팸 메일 형태의 공격. 다량의 메일을 발송하여 메일 서버의 디스크 공간을 가득 채움으로서 더 이상의 메일 수신이 불가능하게 만드는 공격.
DDoS(Distributed Denial of Service) 공격
여러 대의 공격자를 분산 배치하여 동시에 DoS 공격을 함으로서 공격 대상이 되는 시스템이 정삭적인 서비스를 할 수 없도록 방해하는 공격.
DDos 도구
- Trinoo : UDP Flooding 공격 시행
- TFN : UDP Flooding, TCP SYN Flooding, ICMP 브로드 캐스트 공격.
- TFN 2k : 발전된 TFN. 암호화를 사용. UDP, TCP, ICMP 복합적 사용, 포트 임의 사용. UDP Flooding, TCP SYN Flooding, ICMP FLooding, Smurf 공격 사용.
- Stacheldraht : 암호화 기능, 패스워드 입력 요구.
기타 공격
SSH 무작위 대입(SSH Brute force) 공격
SSH를 기반으로 로그인 시에 무차별적으로 아이디와 패스워드를 대입으로 접근을 시도하는 공격.
대비 및 대처 방안
대비 및 대처 방안
DoS 및 DDoS 공격에 대한 대응책
- 방화벽을 이용하여 패킷 및 포트 필터링을 통한 집입 차단
- 침입 탐지 시스템(Intrusion Detection System, IDS)을 이용한 공격 탐지
- 침입 방지 시스템(Intrusion Prevention System, IPS)를 이용한 공격 탐지
- 취약점 및 버그를 이용한 악성코드 및 짐입 방지를 위한 시스템 패치
- 안정적인 네트워크 설계
- 다양한 보안 툴을 활용하여 DoS 공격 탐색과 제거
- 로드 밸런싱을 통한 대용량 트래픽 분산 처리 및 네트워크 성능 강화
- 서비스별 대역폭 제한
- 불필요한 서비스 제거
방화벽(Firewall, 침입 차단 시스템)
방화벽의 기능
- 접근 제어 : 패킷 필터링 방식과 프록시 방식으로 나뉨.
- 로깅과 감사 추적 : 접근 허가 및 거부된 내용을 기록하고 추적
- 인증 : 메시지 인증, 사용자 인증, 클라이언트 인증을 통해 허가된 접근을 인증.
- 데이터 암호화 : 가상 사설망을 이용하여 데이터 암호화.
방화벽의 종류
- 베스천 호스트 : 접근 제어, 응용 시스템의 게이트로서 가상 서버의 설치, 인증, 로그 등을 담당.
- 스크린 라우터 : 방화벽 역할을 수행하는 라우터로서 외부 네트워크와 내부 네트워크의 경계에 위치. 패킷의 헤더 내용을 보고 필터링할 수 있는 기능을 제공.
- 단일 홈 게이트웨이 : 스크린 라우터보다 좀 더 발전된 형태의 방화벽. 접근 제어, 프록시, 인증, 로깅 등 방화벽의 가장 기본적인 기능을 수행.
- 이중 홈 게이트웨이 : 최소 2개 이상의 네트워크 카드를 이용해서 구성하는 방화벽으로 하나의 네트워크로부터 전송된 패킷이 다른 네트워크로 직접 전송되지 않고 게이트웨이로 정의된 장치와 통신. 양방향의 IP 트래픽 제한. 프록시 프로그램 존재하여 패킷의 전달 제한.
- 스크린 호스트 게이트웨이 : 스크린 라우터와 단일 홈 게이트웨이를 조합한 형태로 스크린 라우터에서 패킷 필터링을 1차로 수행하고, 배스천 호스트 역할을 수행하는 단일 홈 게트웨이에서 프록시와 같은 서비스를 통해 2차 방어를 함.
- 스크린 서브넷 게이트웨이 : 외부 네트워크와 내부 네트워크 사이에 완충지대를 두는 방식으로 완충지대의 네트워크를 서브넷이라고 부름. 완충지대에 보통 DMZ(DeMilitarized Zone)가 위치하고, 방화벽도 이 위치에 설치.
침입 탐지 시스템(Intrusion Detection System, IDS)
- 서버나 네트워크에 대한 공격을 실시간으로 탐지하는 시스템으로 데이터 수집, 데이터 필터링과 축약, 침입 탐지, 책임 추적성과 대응 기능을 수행.
- 설치 위치와 목적에 따라 호스트 기반 IDS와 네트워크 기반 IDS로 나뉨. HIDS는 윈도우나 리눅스 등 운영체제에 부가적으로 설치되어 사용자 계정에 따라 기록 및 추적. NIDS는 네트워크상에서 하나의 독립된 시스템으로 운영, 네트워크 전반을 감시
- 기법으로 오용 탐지와 이상 탐지로 나뉨. 오용 탐지 기법은 이미 발견된 공격 패턴을 미리 입력해두고, 해당 패턴이 탐지했을 때 이를 알려주고, 이상 탐지 기법은 정상적이고 평균적인 상태를 기준으로 급격한 변화를 일으키거나 확률이 낮은 일이 발생할 경우에 알리는 방식
침입 방지 시스템(Intrusion Prevention System, IPS)
네트워크에서 공격 서명을 찾아내어 자동으로 모종의 조치를 취함으로써 비정상적인 트래픽을 중단시키는 보안 시스템.
리눅스 기반 IDS 및 IPS 시스템
Snort
대표적인 공개형 IDS, IPS 프로그램으로 Sniffer and more라는 말에서 유래. 탐지 룰을 기반으로 네트워크 트래픽을 감시하고 분석하여 침입 여부를 탐지.
기능
- Packet Sniffer : 패킷 읽고 보여주는 기능
- Packet Logger : 모니터링한 패킷을 저장, 로그 기록 및 트래픽 디버깅에 유용.
- Network IDS : 네트워크 트래픽 분석, 공격 탐지 기능
- Snort Inline : 패킷 분석 및 공격 차단 기능.
Suricata
미국 국토안보부가 설립한 OISF 개발한 IDS 및 IPS 프로그램. Snort와 유사. 멀티 코어 및 멀티 쓰레딩 지원, GPU 하드웨어 가속 지원, LUA 같은 스크립트 언어로 시그니처 작성 가능
iptables를 이용한 리눅스 방화벽 구축
iptables의 개요
- 패킷 필터링 도구로서 방화벽 구성이나 NAT에 사용.
- 사용자가 iptables라는 명령으로 정책을 설정하면 해당 정책에 의거하여 동작.
- OSI 참조 모델의 2, 3, 4,계층에서 정책을 수행.
- 커널에 있는 넷필터 모듈이 필터링을 수행.
iptables의 구조
- ipchains의 사슬 구조를 그대로 승계했지만, 4계층 구조의 테이블을 만듬.
- filter, nat, mangle, raw 4개의 테이블
- filter은 패킷 필터링
- nat은 IP의 주소의 변환시키는 역할 수행
- mangle은 패킷 데이터를 변경하는 특수 규칙을 적용하는 테이블로 TOS(Type of Service)를 설정
- raw는 넷필터의 연결추적 하위 시스템과 독립적으로 동작해야 하는 규칙을 설정하는 테이블.
Filter 테이블의 사슬 및 기능
- INPUT : 패킷 필터링 및 방화벽 관련 정책들을 설정하는 사슬
- OUTPUT : 다른 시스템으로의 접근을 차단할 때 사용하는 사슬
- FORWARD : 리눅스 시스템을 통과하는 패킷을 관리하는 사슬
iptables의 사용하기
- 타켓 : iptables에서 패킷이 규칙과 일치할 때 취하는 동작
- 매치 : iptables가 규칙 타겟에 의해 명시되는 동작에 따라 패킷을 처리하기 위해서 만족해야 하는 조건
[사용법]
$ iptables [-t table] action chain match [-j target]
- 테이블의 기본 설정은 Filter이고, 다른 테이블을 지정할 때는 -t 옵션을 사용
- 액션은 사슬을 지정, 설정, 제어할 때 사용
- 사슬을 명기하는데 INPUT, OUTPUT과 같이 입력
- 마지막으로 실질적인 룰에 해당하는 매치와 타켓을 지정.
- 매치는 -d, -p와 같은 소문자 옵션을 사용. 타겟은 -j(--jump) 옵션을 사용.
주요 액션
- -N : 새로운 사용자 정의 사슬(--new-chain)
- -X : 비어있는 사슬 제거(--delete-chain)
- -P : 사슬의 기본 정책을 설정(--policy)
- -L : 현재 사슬의 규칙을 나열(--list)
- -F : 사슬로부터 규칙을 제거(--flush)
- -Z : 사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만듬(--zero)
- -A : 사슬에 새로운 규칙을 추가(--append)
- -I : 사슬에 규칙을 맨 첫 부분에 삽입(--insert)
- -R : 사슬의 규칙을 교환(--replace)
- -D : 사슬의 규칙을 제거(--delete)
주요 매치
- -s : 출발지 IP 주소(--source)
- -d : 목적지 IP 주소(--destination)
- -p : 특정 프로토콜과 매칭(--protocol)
- -i : 입력 인터페이스와 매칭(--in-interface)
- -o : 출력 인터페이스와 매칭(--out-interface)
- ! : 아닌의 의미로 사용하는데, 특정 매칭을 제외할 때 사용
- -m : 좀 더 세밀하게 제어할 때 사용하는 매칭 옵션(--match)
- --state : 연결 상태와 매칭
- --string : 특정한 패턴과 매칭
기타 옵션
- -n : 출력 정보를 숫자값으로 표현(--numeric)
- -v : 패킷, 바이트수 등을 추가하여 정보를 자세히 출력(--verbose)
- --line-number : 정책 앞에 번호를 붙여 출력
주요 타겟
- ACCEPT : 패킷 허가. 본래 라우팅대로 진행
- DROP : 패킷 거부
- LOG : 패킷을 syslog에 전달하여 기록
- REJECT : 패킷을 버리고 동시에 적당한 응답 패킷을 전달
- RETURN : 호출 사슬 내에서 패킷 처리를 계속 진행
iptables의 확장 사용하기
TCP의 확장
-p tcp로 프로토콜을 지정하고 추가로 지정할 옵션을 사용.
[옵션]
- --sport : 발신지에서의 하나의 포트 또는 포트범위를 지정.(--source-port)
- --dport : 도착지의 포트를 지정하는 것으로 설정 방법은 --sport 옵션과 동일(--destination-port)
- --tcp-flags : TCP flag를 지정. SYN, ACK, FIN, RST, URG, PSH, ALL, NONE
UDP의 확장
먼저 -p udp로 프로토콜을 지정하고 추가로 지정할 옵션을 사용 TCP 옵션중 --sport 및 --dport를 지원.
ICMP의 확장
먼저 -p icmp로 프로토콜을 지정하고 --icmp-type을 추가 옵션으로 지정. ICMP 타입값에는 echo-request, echo-reply, destination-unreachable 등이 있음.
iptables의 설정 규칙 저장
관련 명령어 사용
iptables-save
[사용법]
iptables-save > 파일명
iptables-restore
iptables-save로 저장된 파일을 불러들여서 정책 설정에 반영
[사용법]
$ iptables-restore < 파일명
iptables 스크립트 사용
/etc/rc.d/init.d/iptables라는 스크립트에 저장하면 /etc/sysconfig/iptables라는 파일에 관련 정책이 저장되어 시스템 재부팅 시에도 자동으로 규칙이 적용.
셸 스크립트 사용
iptables를 이용한 NAT(Network Address Translation) 구현
NAT(Network Address Translation)의 개요
IP 주소는 폭발적인 인터넷 사용인구의 증가로 인해 부족해지는 현상이 나타났고, 부족한 현상을 해결하는 방안 중의 한 기술이 NAT.
NAT의 사용 예
ex) 하나의 공인 IP 주소를 공유하여 다수의 PC에서 인터넷을 사용하는 경우, 하나의 IP 주소를 이용하여 다수의 서버를 연결하여 사용하는 경우, 투명 프록시
iptables에서 NAT의 분류 및 설정
SNAT(Source NAT)
공인 IP 주소 하나로 다수의 컴퓨터가 인터넷 접속이 가능하게 하는 경우.
NAT 테이블의 POSTROUTING 사슬에 정책 설정
DNAT(Destination NAT)
하나의 공인 IP 주소로 다수의 서버를 운영하는 경우
NAT 테이블의 PREROUTING 사슬에 정책을 설정
리눅스에서 NAT를 사용하려면 관련 설정 파일에 설정이 되어 있어야 함.
$ echo > /proc/sys/net/ipv4/ip_forward
iptables를 이용한 공격 대비 설정 예
ICMP Flooding 대비
$ iptables -N ICMP
ICMP라는 이름의 사슬 생성
$ iptables -A INPUT -p icmp -j ICMP
ICMP 프로토콜 관련 패킷은 ICMP 사슬로 보냄
$ iptables -A ICMP -p icmp --icmp-type echo-request -j DROP
icmp echo request 요청은 DROP 시킴
UDP Flooding 대비
$ iptables -N UDP
$ iptables -A INPUT -p udp -j UDP
$ iptables -A UDP -p udp --dport 80 -m recent --update --seconds 1 --hitcount 10 -j drop
같은 IP 주소에서 1초에 10개 이상 UDP 패킷이 들어오면 DROP 시키는 정책을 UDP 사슬에 추가
$ iptables -A UDP -j LOG --log-prefix "UDP FLOOD"
UDP 사슬 로그에 "UDP FLOOD"이라고 기록
TCP Flooding 대비
초 당 허용되는 접속 개수 제한
$ iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 100/s -j ACCEPT
IP 주소 당 허용되는 접속 개수 제한
$ iptables -A INPUT -p tcp --dport 80 --syn -m connlimit --limit -above 30 -j DROP
특정 IP 주소에서 오는 초 당 요구 수 제한
$ iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 -j DROP
SSH 무작위 대입 공격 대비
$ iptables -N SSH
SSH라는 이름의 사슬 생성
$ iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH
22번 포트로 접속하는 패킷은 SSH 사슬로 보냄.
$ iptables -A SSH -j LOF --log-prefix "SSH Brute"
SSH 사슬 로그에 "SSH Brute"이라고 기록