DongDD's IT

[정보보안기사 실기] 침입 탐지 시스템, 침입 차단 시스템, 보안 도구 본문

자격증/정보보안기사

[정보보안기사 실기] 침입 탐지 시스템, 침입 차단 시스템, 보안 도구

DongDD 2018. 5. 12. 18:08

[정보보안기사 실기] 침입 탐지 시스템, 침입 차단 시스템, 보안 도구




침입 탐지 시스템(snort)


- 네트워크 트래픽을 감시하고 분석하기 위한 도구

- 기능

-> Packet Sniffer : 네트워크 상의 패킷을 sniffing하여 보여주는 기능

-> Packet Logger : 모니터링한 패킷을 저장하고 로그에 남기는 기능

-> IDS/IPS : 네트워크 트래픽을 분석해 공겨을 탐지/차단하는 기능


snort rule


- 헤더 : 처리 방식, 프로토콜, IP 주소, 포트번호 등의 패킷을 처리할 판단 기준을 명시

- 바디 : 패킷을 탐지하기 위한 규칙


1. rule header 설정

1) 형식

- Rule Actions : 패킷이 룰에 걸렸을 때 처리 형식

-> alert : 선택한 alert 방식을 이용해 alert 발생, 패킷을 로그에 남김

-> log : 패킷을 로그에 남김

-> pass : 패킷을 무시

-> activate : alert 발생, 대응하는 dynamic rule 활성화

-> drop : 패킷을 차단, 로그에 남김

-> reject : 패킷을 차단, 로그에 남긴 후 TCP는 TCP Reset 전송, UDP는 ICMP Unreachable 전송

-> sdrop : 패킷을 차단, 로그에 남기지 않음

- Protocols : 탐지할 프로토콜(TCP, UDP, ICMP, IP)

- IP Addresses : Source/Destination IP

-> any : 모든 IP

-> 단일 IP 지정

-> IP 대역(CIDR) 지정

-> IP 리스트 지정(대괄호로 묶고 ,로 구분)

-> !(부정 연산자) 사용 가능

- Port Numbers : Source/Destination Port

-> any : 모든 Port

-> 단일 포트 지정

-> 포트 범위 지정 - :로 지정(begin:end)

-> 포트 리스트 지정(대괄호로 묶고 ,로 구분)

- Direction Operator : 방향 지시자

-> ->(단방향) : 왼쪽은 Source, 오른쪽은 Destination(<-는 없음)

-> <>(양방향) : Source-Destination 사이의 모든 패킷

2) 예제

alert tcp any any -> 192.165.114.0/24 80

- 목적지 IP가 192.165.144.0 대역이고 Port가 80인 패킷에 대해 alert 발생 후 로그를 남김

- IP 주소에 $EXTERNAL_NET, $HOME_NET 환경변수 사용 가능

-> $EXTERNAL_NET : snort.conf 설정 파일에 정의된 환경 변수로 외부 네트워크를 의미(default : any)

-> $HOME_NET : snort.conf 설정 파일에 정의된 환경 변수로 내부 네트워크를 의미


2. rule body 설정(일반 옵션)

1) 옵션

- msg : msg 옵션에 기록된 내용이 alert 발생 시 이벤트 이름으로 사용

- reference : rule과 관련된 외부 취약점 정보 참조 시 사용

- sid : snort rule id

-> 99 이하 : 시스템에 예약된 id

-> 100~1000000 : snort에서 배포하는 rule set을 사용하는 sid

-> 1000001 ~ : 사용자 정의 rule을 사용하는 id

- classtype : 공격 유형과 우선순위(1 : 높음, 2: 중간, 3 : 낮음)

- priority : rule의 우선순위(이 옵션이 설정되면 classtype의 우선 순위 무시)

- rev : rule 버전 번호, 수정 횟수 표기


3. rule body 설정(페이로드/범위)

1) 옵션

- content : 페이로드에서 검사할 문자열 지정(text, binary로 구성)

-> text : content:"text"로 표시

-> binary : content:|FF FF FF FF|로 표시

-> !(부정 연산자) 사용 가능(content:!"text")

-> 3가지 특수문자는 escape 처리해 사용( ; , " , \)

- uricontent : content를 전체 패킷과 비교하는 대신 HTTP 클라이언트 요청 URI 정보를 검사할 문자열 지정

- offset : 패턴을 검사할 시작 위치(0부터 시작)

- depth : offset부터 검사할 바이트 수 지정

- distance : 패턴 매칭 후 매치된 바이트부터 몇 바이트 뒤부터 다음 content를 검사할 지 지정

- within : 패턴 매칭 후 distance부터 몇 바이트 범위 내에서 다음 content를 검사할 지 지정

- nocase : 대/소문자 구분을 안함

2) 설정 방법

- local.rules 파일에 다양한 형식의 룰 생성

alert tcp any any -> 192.165.114.0/24 80 (msg:"msg"; content:"passwd"; nocase; sid:1000001;)

- 192.165.114.0 대역의 80 port로 가는 패킷 중 "passwd" 문자열을 포함한 패킷 발견 시 alert를 보여주고 로그에 기록


4. rule body 설정(페이로드/정규 표현식)

1) 메타 문자

- \ : 특수 문자 기능을 제거하는 이스케이프 문자

- ^ : ^ 다음 문자가 문자열의 시작을 의미

- $ : $ 앞 문자가 문자열의 끝을 의미

- . : 임의의 문자 1개

- [] : 집합문자

-> [abc] : a, b, c 중 하나

-> [a-z] : a ~ z 중 하나

- | : | 앞 문자열과 뒤 문자열 중 하나 일치

- * : * 앞 문자가 0회 이상 나타남

- + : + 앞 문자가 1회 이상 나타남

- ? : ? 앞 문자가 0회 or 1회 나타남

- {x} : {x} 앞 문자가 x회 나타남

- {x,} : {x,} 앞 문자가 x회 이상 나타남

- {x,y} : {x,y} 앞 문자가 x회 이상 y회 이하 나타남

-> snort에서 pcre를 사용해 정규 표현식 사용 가능

-> rule에 pcre:"\^~~~~~\" 와 같이 사용


5. rule body 설정(페이로드/HTTP)

1) 옵션

- http_method : method 검사

- http_uri : uri 검사

- http_header : 헤더 검사

- http_cookie : 쿠키 검사

- http_client_body : 클라이언트 요청 body 검사(POST)

- http_stat_code : 상태 코드 검사

- http_stat_msg : 상태 메시지 검사


6. rule body 설정(Event Threshold)

- 특정 시간 동안 발생하는 이벤트 수 제한

1) 옵션

threshold type limit | threshold | both, track by_src | by_dst, count c, seconds s

- limit : 매 s초 동안 c번째 이벤트까지 action 수행

- threshold : 매 s초 동안 c번째 이벤트마다 action 수행

- both : 매 s초 동안 c번째 이벤트 시 한번 action 수행

- by_src : source IP 기준, by_dst : destination IP 기준


공격 탐지


1. root 로그인 탐지

1) FTP root 로그인

- FTP 접속 시 USER 명령을 통해 ID 전달하는 것으로 root 로그인 탐지(USER root)

alert tcp any any -> dst_ip 21 (msg:"FTP root login"; content:"USER root"; nocase; sid:1000001;)

2) Telnet root 로그인

- telnet은 접속 성공 시 로그인 성공 메시지와 shell을 평문으로 전달하므로 이것을 이용해 root 로그인 탐지

alert tcp src_ip 23 -> any any (msg:"telnet root login"; content:"login"; pcre:"\root@.*#\"; nocase; sid:1000001;)

-> login 메시지를 포함하고 정규 표현식으로 root@로 시작하고 임의의 문자가 0회 이상 나타난 후 #을 포함한 문자열 검사

-> 응답 메시지를 검사하므로 서버에서 나가는 패킷을 탐지


2. 패스워드 크래킹 탐지

1) Telnet Brute Force/Dictionary Attack 탐지

- telnet 응답 메시지에서 로그인 실패를 탐지하고 event threshold로 이벤트 제한을 두어 탐지

alert tcp src_ip 23 -> any any (msg:"telent brute force"; content:"Login incorrect"; nocase; threshold: type limit, track by_dst, count 1, seconds 5; sid:1000001;)

-> 5초 동안 1번째 이벤트까지만 탐지

2) FTP Brute Force/Dictionary Attack 탐지

- FTP 응답 메시지에서 로그인 실패를 탐지하고 event threshold로 이벤트 제한을 두어 탐지

alert tcp src_ip 21 -> any any (msg:"FTP brute force"; content:"Login incorrect"; nocase; threshold: type threshold, track by_dst, count 5, seconds 30; sid:1000001;)

-> 30초 동안 5번째 이벤트마다 탐지

3) SSH Brute Force/Dictionary Attack 탐지

- SSH 로그인 요청 메시지에서 "SSH-2.0" 문자열을 탐지하고 event threshold로 이벤트 제한을 두어 탐지

alert tcp any any -> dst_ip 22 (msg:"SSH brute force"; content:"SSH-2.0"; nocase; threshold: type both, track by_src, count 5, seconds 30; sid:1000001;)

-> 30초 동안 5번째 이벤트 한번만 탐지


3. Flooding Attack 탐지

1) HTTP GET Flooding 탐지

- HTTP 요청 메시지에서 "GET /HTTP/1." 문자열을 탐지하고 event threshold로 이벤트 제한을 두어 탐지

alert tcp any any -> dst_ip 80 (msg:"HTTP Flooding"; content:"GET /HTTP/1."; nocase; threshold: tpye threshold, track by_src, count 50, seconds 1; sid:1000001;)

-> 1초 동안 50번째 이벤트마다 처리

-> 1.0버전과 1.1버전 모두 처리하기 위해 "1."으로 탐지

2) TCP SYN Flooding 탐지

- HTTP 클라이언트의 TCP 요청 메시지에서 SYN Flag가 설정된 것을 탐지하고 event threshold로 이벤트 제한을 두어 탐지

alert tcp any any -> dst_iop 80 (msg:"TCP SYN Flooding"; flags:S; threshold : type threshold, track by_src, count 5, seconds 1; sid:1000001;)

-> 1초 동안 5번째 이벤트마다 처리

3) UDP/ICMP Flooding 탐지

- udp, icmp를 탐지하고 event threshold로 이벤트 제한을 두어 탐지

alert udp any any -> dst_ip any (msg:"UDP Flooding"; threshold: type threshold, track by_src, count 5, seconds 1; sid:1000001;)

alert icmp any any -> dst_ip any (msg:"ICMP Flooding"; threshold: type threshold, track by_src, count 5, seconds 1; sid:1000001;)

-> 1초 동안 5번째 이벤트마다 처리


비정상 패킷 탐지


- 비정상 패킷 : RFC(Request For Command) 문서에 정의된 프로토콜 표준에 위배되는 패킷


1. 비정상 IP 패킷

1) 인터넷 구간의 사설 IP를 가진 패킷

- 인터넷에 돌아다니는 패킷 중 사설 IP 주소를 가진 패킷은 조작된 IP 주소이므로 차단해야함

alert udp 10.0.0.0/8 any -> dst_ip any (msg:"abnormal packet"; sid:1000001;)

alert udp 172.16.0.0/12 any -> dst_ip any (msg:"abnormal packet"; sid:1000001;)

alert udp 192.168.0.0/16 any -> dst_ip any (msg:"abnormal packet"; sid:1000001;)

2) Source IP와 Destination IP가 동일한 패킷

- Land Attack에 사용되는 이러한 패킷을 탐지해야함

alert ip any any -> dst_ip any (msg:"Land Attack"; sameip; sid:1000001;)


2. 비정상 TCP 패킷

1) 정상적인 TCP 플래그 패킷

- SYN, SYN+ACK. SYN

- SYN 패킷 제외 모든 패킷은 ACK 플래그가 설정되어있음

- FIN+ACK, ACK

- RST+ACK

2) SYN+FIN 비정상 패킷

- 연결 설정 SYN 플래그와 연결 종료 FIN 플래그는 동시에 설정될 수 없음

alert tcp any any -> dst_ip any (msg:"SYN+FIN"; flags:SF; sid:1000001;)

-> SF+ : SYN+FIN 포함 다른 플래그도 설정 가능

-> SF* : SYN or SYN+FIN or FIN 중 하나를 포함하고 다른 플래그도 설정 가능

-> !SF : SYN, FIN(지정한 플래그)을 포함하지 않는 설정

3) SYN+FIN 변형 비정상 패킷

- SYN+FIN을 포함한 다양한 조합의 패킷

alert tcp any any -> dst_ip any (msg:"SYN+FIN+"; flags:SF+; sid:1000001;)

4) FIN 설정 비정상 패킷

- 정상적인 연결 종료는 FIN+ACK이므로 FIN만으로 이루어질 수 없음

alert tcp any any -> dst_ip any (msg:"FIN"; flags:F; sid:1000001;)

5) 플래그가 없는 NULL 패킷

- stealth scan에 사용되는 플래그가 설정되지 않은 패킷은 비정상 패킷으로 판단하고 차단

alert tcp any any -> dst_ip any (msg:"NULL"; flags:!UAPRSF; sid:1000001;)



침입 차단 시스템(iptables)


- f리눅스 커널에 있는 netfilter(패킷 필터링) 기능을 관리하기 윈한 rule 기반 패킷 필터링 기능을 제공하는 툴


기능


1. 상태 추적 기능(Connection Tracking)

- 방화벽을 통과하는 모든 패킷에 대한 연결 상태를 추적해 이 정보를 메모리에 보관하고 이 후 연결 때 비교

- 위조된 패킷을 차단해 보안성 향상

- 연결된 패킷은 더이상 검사하지 않아 성능 향상


2. NAT 기능


3. 패킷 레벨의 로깅 기능


4. 확장 모듈의 다양한 기능


용어


1. Table

- iptables가 제공하는기능

- Filter, Nat, Mangle(default : Filter)


2. Chain

- 패킷이 이동하는 경로

- INPUT Chain : 방화벽을 최종 목적지로 하는 chain

- OUTPUT Chain : 방화벽을 최초 출발지로 하는 chain

- FORWARD Chain : 방화벽을 경유하는 chain(방화벽을 별도 서버로 구성 시 사용)


3. Rule

- 패킷 필터링을 위한 Rule


사용 방법


iptables 테이블 체인 룰 타겟


1. Table

- -t 테이블

- 명시하지 않으면 default는 Filter


2. Chain

iptables -A | -I | -D 체인

- -A : append 모드, 해당 체인의 마지막에 룰 추가

- -I : insert 모드, 해당 체인의 첫 행에 룰 추가(-I 체인 n : n행에 룰 추가)

- -D : delete 모드, -D 체인 룰(해당 룰 삭제), -D 체인 n(n행 룰 삭제)

- Filter table : INPUT, OUTPUT, FORWARD 체인


3. Rule

1) IP/ICMP/TCP/UDP 모두 호스트를 식별하기 위해 IP 이용

- -s src_ip or src_ip 대역 : 출발지 IP를 명시(default : any)

- -d dst_ip or dst_ip 대역 : 목적지 IP를 명시(default : any)

2) TCP/UDP는 Port 번호로 서비스 식별

- --sport src_port : 출발지 port 명시

- --dport dst_port : 목적지 port 명시

3) ICMP는 타입과 코드로 식별

- --icmp-type type_name : 메시지 타입 명시

4) TCP 패킷 유형에 따른 설정

- -p tcp 옵션이 선행되어야 사용 가능

--tcp-flags 검사플래그 설정플래그

-> --tcp-flags SYN,FIN SYN,FIN : SYN, FIN을 검사해 SYN,FIN이 설정된 패킷 탐지

-> --tcp-flags ALL SYN : 모든 플래그를 검사해 SYN이 설정된 패킷 탐지

-m state --state 탐지상태

-> --state NEW | ESTABLISHED | RELATED | INVALID


4. Target

- -j ACCEPT : 해당 패킷 허용

- -j DROP : 해당 패킷을 차단하고 응답을 하지 않음

- -j REJECT : 해당 패킷을 차단하고 ICMP 응답을 보냄

- -j LOG : 탐지 로그를 남김(/var/log/messages에 저장)


5. 옵션

1) iptables -L 체인 -n

- -L 체인 : 해당 체인에 설정된 룰 리스트 확인

- -n : IP와 Port를 숫자로 출력

2) iptables -F 체인

- 해당 체인에 설정된 모든 룰 삭제

3) iptables -P 체인 ACCPET | DROP | REJECT

- 해당 체인의 기본 정책(default policy) 설정(모든 룰에 매치되지 않으면 적용)

- Negaative Policy : 기본 정책을 DROP/REJECT로 설정하고 허용할 부분만 ACCEPT

- Positive Policy : 기본 정책을 ACCEPT로 설정하고 허용할 부분만 REJECT/DROP


상태 추적 기능(Connetction Tracking)


1. 상태 유형

1) NEW

- 최초로 들어온 패킷 상태, 연결 정보가 없는 패킷(TCP의 경우, SYN 패킷)

2) ESTABLISHED

- 연결 정보를 갖고 있는 패킷(연결 이후 송수신 패킷)

3) RELATED

- 연관된 연결 정보를 갖고 있는 패킷(연결 시 포트 정보가 서비스 수행 중 추가)

-> ex) FTP에서 데이터 채널을 통해 송수신되는 패킷

4) INVALID

- 위 3가지 상태 중 어떤 상태에도 포함되지 않는 패킷


2. 프로토콜별 상태 유형

1) TCP

- SYN : NEW 상태

- SYN+ACK 이후 : ESTABLISHED 상태

- 연결 종료 마지막 ACK 전까지 ESTABLISHED 상태

2) UDP

- 연결 상태를 유지하지 않아 상태 정보가 없으나 다음과 같이 표시

- 최초 들어온 패킷 : NEW
- TTL이 유지되는 동안의 패킷 : ESTABLISHED


3. 위조된 TCP SYN 패킷 차단

- NEW이면서 SYN Flag가 설정되지 않은 패킷은 위조된 패킷으로 판단하고 차단

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-> ESTABLISHED, RELATED 상태의 패킷은 허용해 룰 검사를 다시 하지 않게 하여 성능 향상

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Abnormal SYN"

-> NEW이면서 SYN Flag가 설정되지 않은 패킷은 "Abnormal SYN"이라는 접두어를 붙여 로그를 남김

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

     -> NEW이면서 SYN Flag가 설정되지 않은 패킷 차단


iptables 확장 모듈


1. connlimit 모듈

- 동일한 IP, IP 대역의 동시 연결 개수를 제한할 수 있는 모듈

- DDoS 공격에 대응할 수 있음

1) 옵션

- --connlimit-above n : n을 초과하는 동시 연결 제한

- --connlimit-mask 0~32 : 0~32의 mask 값을 지정해 IP 대역에 대한 동시 연결 제한

2) 웹 서버에 대한 TCP SYN Flooding 대응 룰

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j LOG --log-prefix "SYN Flooding"

-> 동시 연결 개수 5 초과 시 "SYN Flooding"을 접두어로 사용해 로그를 남김

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

-> 동시 연결 개수 5 초과 시 차단

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 --connlimit-mask 24 -j DROP

-> 동일한 24 bit 마스크 대역의 IP에서 동시 연결 개수 5 초과 시 차단


2. limit 모듈

- 룰에 매치되는 비율을 제한해 불필요한 로그를 남기지 않게 하는 모듈

1) 옵션

- --limit n/second | n/minute | n/hour | n/day

-> 초/분/시/일당 매칭되는 제한 건수 지정

2) 비정상 TCP 플래그 조합 차단 룰

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -m limit --limit 6/minute -j LOG --log-prefix "SYN+FIN"

-> 모든 플래그를 검사해 SYN+FIN Flag가 설정된 패킷에 대해 분당 최대 6개의 로그를 남김

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

-> 모든 플래그를 검사해 SYN+FIN Flag가 설정된 패킷 차단

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

-> NULL 패킷 차단

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

-> 모든 플래그가 설정된 XMAS 패킷 차단


3. recent 모듈

- 동적으로 source IP 목록을 생성하고 이를 기반으로 패킷을 제어하는 기능을 제공하는 모듈

1) 옵션

- --name : 목록 이름 지정

- --set : 해당 목록에 새 엔트리 추가

-> 이미 있는 경우 "last seen" timestamp를 old로 옮기고 새로 갱신

- --rcheck : 해당 목록에 패킷의 source IP가 있는지 확인

- --update : 해당 목록에 패킷의 source IP가 있는지 확인하고 있으면 "last seen" timestamp를 갱신

- --seconds : update or rcheck와 같이 사용, "last seen" timestamp가 지정된 초 범위 내에 있는지 확인

- --hitcount : update or rcheck와 같이 사용, 해당 entry의 hit count가 지정 값 이상인지 확인(seconds 옵션과 같이 사용해 특정 초 내에 hit count 이상으로 발생했는지 확인)

2) SSH Brute Force/Dictionary Attack 차단 룰

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH_DROP --set

-> TCP 22번 포트(SSH) 연결 요청 목록의 이름을 SSH_DROP으로 설정

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 30 --hitcount 5 -j LOG --log-prefix "SSH Brute Force"

-> 30초 이내에 5번 이상 연결 요청 패킷이 오면 "SSH Brute Force" 접두어로 로그를 남김

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 30 --hitcount 5 -j DROP

-> 30초 이내에 5번 이상 연결 요청 패킷이 오면 차단



보안 솔루션


네트워크 보안 솔루션


1. 웹 방화벽(WAF : Web Application Firewall)

- 웹 어플리케이션 보안에 특화된 장비

- 여러 웹 공격을 탐지하고 차단

- 정보 유출, 부정 로그인 등을 방지


2. 무선 침입 방지 시스템(WIPS : Wireless IPS)

- 인가되지 않은 무선 접속을 탐지하고 차단하며 보안에 취약한 AP를 탐지하는 시스템

- 외부 공격으로부터 내부 시스템을 보호하기 위한 시스템


3. 네트워크 접근제어(NAC : Network Access Control)

- 내부 네트워크로의 접속에 대해 제어하고 통제하는 기능

- 인증 -> 백신, 보안 프로그램 정상 동작 확인 -> 접근 허용


4. 통합 위협 관리 시스템(UTM : Unified Threat Management)

- IDS, IPS, Firewall 등 다양한 보안 기능을 하나의 장비로 통합해 제공하는 솔루션

- 하나의 장비로 여러 보안 기능 수행

- 장점 : 비용 감소, 운영 편리

- 단점 : 장애 발생 시, 모든 보안 기능에 영향


시스템 보안 솔루션


1. 스팸 차단 솔루션

- 메일 서버 앞 단에 위치해 프록시 메인 서버로 동작

- 스팸 메일 차단, 바이러스 검사, 내부 정보 유출 방지 등의 기능 제공


2. 보안 운영체제(Secure OS)

- 보안 기능이 통합된 보안 커널을 추가한 운영체제


정보 유출 방지 솔루션


1. 보안 USB(Security USB)

- 보안 기능을 갖춘 USB

- 사용자 식별/인증, 암호화/복호화, 임의 복제 방지 등의 기능 제공


2. 디지털 저작권 관리(DRM : Digital Rights Management)

- 저작권 관리 보안 솔루션

- 파일 자체에 암호를 걸어 권한이 없는 사용자는 사용을 못하게 함


3. 데이터 유출 방지(DLP : Data Loss Prevention)

- 조직 내부의 정보가 외부로 유출되는 것을 탐지하고 차단하는 솔루션

- 정보의 흐름에 대한 모니터링과 실시간 차단 기능 제공


보안 관리 솔루션


1. 전사적 통합 관리 시스템(ESM : Enterprise Security Management)

- 여러 보안 장비를 통합해 관리하기 위한 솔루션

- 상호 연관 분석 : 여러 보안 장비에서 발생하는 로그, 이벤트 간의 연관성을 분석

1) 구성 요소

- ESM Agent : 관리 대상 보안 장비에 설치되어 규칙에 따른 로그, 이벤트를 수집해 ESM Manager로 전달하는 역할

- ESM Manager : 수집된 데이터를 저장, 분석해 결과를 ESM Console로 전달하는 역할

- ESM Console : 전달받은 정보를 시각적으로 보여주고 상황 판단 및 리포팅 기능을 제공해주며 Manager, Agent에 대한 제어를 담당하는 역학


2. 위협 관리 시스템(TMS : Threat Management System)

- 외부 위협으로부터 내부 정보 자산을 보호하기 위해 위협을 조기에 감지하고 위혐을 감소, 제거하기 위한 보안 시스템


3. 패치 관리 시스템(PMS : Patch Management System)

- 기업 네트워크에 접속하는 사용자의 PC 등을 기업 보안 정책에 맞게 자동으로 패치해 보안 위협으로부터 효과적으로 보호해주는 솔루션

1) 구성 요소

- PMS Server : 패치를 배포하고 보안 정책 위반 PC를 인식해 정책에 맞는 보안을 적용하는 역할

- PMS Agent : 서버로부터의 패치를 적용하고 사용자 PC를 점검해 정책 위반 여부를 서버에 제공해주는 역할


인증 및 암호 솔루션


1. H/W 토큰(HSM : Hardware Security Module)

- 전자 서명을 저장 장치 내부에 생성해 공인 인증 유출을 방지하는 휴대용 저장 장치(= 보안 토큰)



취약점 점검 도구


- 보안 취약점을 사전에 점검하여 보안을 강화하기 위한 도구


취약점 유형


1. 네트워크 보안 취약점

- 네트워크 장비, 네트워크 구조에 대한 취약점


2. 시스템 보안 취약점

- 계정, 권한, 파일 관리 등에 대한 취약점


3. 웹 보안 취약점

- 웹 브라우저, 웹 서버, 웹 프로그램에 대한 취약점


nessus


- 미국 tenable사가 개발한 취약점 점검 도구

- 시스템, 네트워크, 웹 등의 알려진 취약점에 대한 점검을 수행해 취약점의 내용과 해결 방법을 상세하게 제공


1. 특징

1) 클라이언트-서버 구조로 동작

- nessus 데몬과 각종 취약점 점검 플러그인을 통해 취약점을 점검하고 결과를 조회할 수 있는 인터페이스 제공

2) 사용이 자유롭고 플러그인 업데이트가 쉬움

- GUI 형태로 되어있어 사용하기 쉬움

3) 여러 형태로 결과를 리포트할 수 있음

- HTML, TXT 등 다양한 포맷으로 점검 결과 저장


2. 사용 방법

- /etc/init.d/nessusd 데몬을 실행 시킴(default port : 8834)

- 웹을 통해 접속 후 GUI를 통해 취약점 점검


nikto


- 공개용 웹 취약점 점검 도구

- 웹 서버, 웹 기반 응용 프로그램 취약점을 점검할 수 있음

- 방대한 DB를 이용해 취약한 CGI 파일을 스캔하는 기능이 있음

- 다양한 포맷으로 저장 가능


1. 사용 방법

nikto -h host -output a.txt | a.html -Format html | txt

-> host : 점검할 웹 호스트 주소

-> a.txt | a.html : 저장할 파일의 이름과 확장자

- -Format html | txt : 저장할 확장자 포맷


무결성 점검 도구


tripwire


- 유닉스/리눅스 환경의 파일 시스템 무결성을 점검하는 도구

- 파일시스템 상태 추적, 비허가 변경 여부를 주기적으로 검사하고 복구

- 시스템 내 중요 디렉토리, 파일에 대한 DB를 생성하고 tripwire가 실행될 때 이 DB와 비교해 변경된 점을 알려줌


1. 동작 방식

- 최초 설정 파일에 등록된 파일, 디렉토리의 해시값을 생성해 DB에 저장

- 주기적으로 동작하며 DB에 저장된 해시값과 설정된 디렉토리, 파일의 해시값 비교

- 비교한 후 결과가 다르면 변경 내역을 출력해 알려줌


2. 사용 방법

- /etc/tripwire에 있는 정책 설정 파일을 통해 디렉토리, 파일 지정

- tripwire --init을 통해 DB 초기화

- /var/lib/tripwire에 *.twd db 파일 생성 확인

- tripwire --check를 통해 tripwire 실행


Rootkit 점검 도구


- Rootkit : 자신의 존재를 숨겨 탐지되지 않게하여 관리자 권한 획득과 백도어 기능을 수행하는 프로그램들의 집합


chkrookit


- 루트킷 탐지를 위한 도구

- chkrootkit [옵션]

- 옵션

-> 빈 값 : 모든 파일의 결과를 출력

-> -q : 변조/감염된 파일 정보만 보여줌(quiet 모드)

1. 점검 결과 메시지

- INFECTED : 감염/변조됨

- not infected : 감염/변조되지 않았음

- not tested : 감염/변조 여부를 확인하지 못했음

- not found : 해당 파일이 존재하지 않음


2. hidden process 탐지 원리

1) /proc

- 커널이 메모리 상 사용하고 있는 모든 자원들에 대한 정보 파일

- 현재 실행중인 개별 프로세스 pid로 숫자 형식의 디렉토리들이 있음

- ps를 통해 pid 확인 후 해당 pid 디렉토리로 들어가면 다양한 상태 정보 파일들을 확인할 수 있음

2) 탐지 원리

- 일반적인 rootkit 프로그램은 자신을 숨기기 위해 ps에 출력되지 않도록 ps 프로그램을 만들어 정상 ps 프로그램과 교체함

- 탐지 프로그램은 /proc 디렉토리의 정보와 ps를 비교해 /proc에는 있지만 ps에 출력되지 않은 프로세스를 탐지함


Rootkit 대응 방법


1. RPM(Redhat Package Manager) 명령으로 변조 파일 확인

- rpm : 설치 파일인 package를 관리하는 명령어

- rpm [옵션]

1) 옵션

- -Uvh 패키지.rpm : 해당 패키지 설치 or 업데이트

- -qf 절대경로 : 해당 파일이 어떤 패키지에 속해있는지 확인

- -V 패키지 : 해당 패키지를 통해 설치된 파일의 무결성 검사

-> S : 파일 크기 변경 여부

-> M : 파일 권한 변경 여부

-> 5 : MD5 Checksum 변경 여부

-> T : 파일 수정 시간 변경 여부

-> U : 소유자 정보 변경 여부

-> G : 소유 그룹 변경 여부

-> D : 장치 정보 변경 여부

-> L : 심볼릭 링크 변경 여부


2. 변경 확인 후 패키지 재설치

1) 패키지 재설치 오류가 발생하는 경우

- rpm -Uvh --force 패키지.rpm 명령으로 패키지 재설치

-> --force : 동일하거나 더 높은 버전의 패키지라도 기존 것을 삭제하고 재설치

-> 공격자가 변조한 실행 파일을 삭제하지 못하게 속성을 설정한 경우 오류가 발생함(lsattr 명령을 통해 i 속성 설정을 확인)

2) 속성 변경 후 재설치

- chattr -i 파일명 명령으로 i 속성을 제거 후 재설치


3. Linux 파일 속성 설정

- 권한과 달리 파일 자체에 대한 허가를 의미

1) lsattr

- 파일의 속성 정보를 확인하는 명령어

- lsattr 파일명

-> i 속성 : 읽기 전용 모드(변경, 추가, 삭제 불가능)

-> a 속성 : append(추가)만 허용(변경, 삭제 불가능)

-> A 속성 : Access Time을 변경하지 않음

2) chattr

- 파일의 속성을 변경하기 위한 명령어

- +를 통해 속성을 추가, -를 통해 속성을 제거할 수 있음

- chattr [+ | -] [i | a | A] 파일명




Comments