Linux #16
침입감지 시스템(IDS), 침입예방 시스템(IPS)과 네트워크 모니터링
보안설정의 기본원칙에 Fail Safe와 Safe Failure가 있다.
Fail Safe는 시스템에 오류가 있어도 사용자나 시스템에 피해가 없게 하는 것으로, 예를 들어 네트워크의 인증을 인증 서버로 하게 되어 있을 때 이 인증 서버에 문제가 있어도 정규 사용자는 다른 방법으로 로그온이 되게 하는 것이다. Fail Safe 설정에서는 예를 들어 '인증을 받지 못하면 httpd 서비스는 거부된다'라는 기본원칙은 있을 때 이 기본원칙에 명시하지 않은 vsftpd와 같은 서비스는 인증을 허용된다는 이면의 뜻이 있을 수 있어서 위험할 수 있고, 수많은 서버 서비스의 인증을 일일이 모두 지정하기에는 쉽지 않다는 문제가 있다.
Safe Failure는 시스템에 오류가 있어도 시스템은 안전해야 한다는 것으로, 예를 들어 철문은 전기 자물쇠가 망가져도 사람이 안에 갇히지 않도록 설계되어야 한다는 것이다. Safe Failure 설정에서는 예를 들어 스니핑 하기 위해서 스위치 장비에 ARP Poisoning을 시도하는 macof 공격으로 가짜 MAC 주소를 스위치 장비에 퍼부어서 스위치 포트의 MAC 주소를 저장하는 공간(CAM)을 채워버리면 스위치가 제 기능을 하지 못하고 허브처럼 작동되게 되지만 네트워크는 여전히 작동되게 해준다는 개념이다. 이럴 때 스위치가 허브처럼 작동해서 네트워크 속도는 느려지고, 허브는 매우 보안에 취약해서 위험하다는 문제가 있다. 보통 이런 도구들은 시그니처 기반과 이상 행동 기반으로 구성되어 패킷을 검출한다.
이 두 가지는 네트워크 장비의 특성과 보안 방침에 따라 결정되는데 방화벽(FW)이나 침입감지 시스템(IDS), 침입예방 시스템(IPS)은 일반적으로 Fail Safe 원칙을 따른다.
네트워크상의 특정 호스트에 설치하고 보안을 설정해서 모니터링과 보안을 적용시키는 도구로
∎ 외부에서 내부의 특정 호스트의 서비스나 포트로 침입하는 것을 감지해서 막는 Firewall(방화벽) <=Web Firewall(.htaccess)
∎ 내부 네트워크에 proxy나 mail relay 등을 통해서 내부 네트워크에서 바이러스 전파를 막아주며 라우터 아래 스위치 장비 밖에 두는 내부 FireWall의 일종인 VirusWall(바이러스 월)
∎ 네트워크상의 침입을 알려주는 침입감지 시스템 IDS(Intrusion Detection System) <=침입이 있을 때 알리기만 함
∎ 네트워크상의 침입을 막아주는 침입예방 시스템 IPS(Intrusion Prevention System) <=침입이 있을 때 조치를 취함
∎ 종합적인 보안관리 시스템인 통합 보안관리 ESM(Enterprise Security Management),
∎ 위협관리 도구들을 묶어놓은 통합 위협관리 UTM(Unified Threat Management)
∎ 네트워크상의 노드 추가 등을 관리하는 접근관리 NAC(Network Access Control) 등을 알아본다.
현장에서 매우 중시하는 도구들이므로 잘 알아두면 좋을 것이다.
그리고 다음의 용어도 보안에서 중요하므로 알아두자.
■ 위험(risk)은
① 예상되는 위협(threat)에 의하여 자산(asset)에 발생할 가능성이 있는 손실의 기대치
② 자산의 가치 및 취약성과 위협 요소의 능력, 보호 대책의 효과 등에 의해 영향을 받음
■ 위협(threat)은
① 자산에 손실을 발생시키는 직/간접적인 원인이나 행위
② 보안에 해를 끼치는 행동이나 사건
■ 취약점(vulnerability)은
① 위협에 의하여 손실이 발생하게 되는 자산의 약점(weakpoint)
② 기능 명세, 설계 또는 구현 단계의 오류나 시동, 설치 또는 운용상의 문제점으로 인하여 정보 시스템이 지니게 되는 보안상 취약점
=>취약점이 중복되는 지점이 위험하다고 하고, 실제 해킹 등으로 침투하는 행위를 위협이라고 하면 위협을 통해서 조직의 자산에 해를 입힐 수 있다.
네트워크 모니터링 도구들
이제 외부에서의 침입을 모니터링해서 로그하거나 통보하는 도구들을 알아보자. 이런 전문적인 모니터링 도구들 중에는 단순한 모니터링뿐만 아니라 네트워크 트래픽 감시와 네트워크나 호스트로 들어오는 패킷을 분석해서 일반적이지 않거나(출발지나 목적지 IP 주소가 없거나, 자신에게 되보내지는 IP_주소, 너무 길거나 짧은 패킷, 목적지 등의 포트가 없거나, 변형된 헤더, 사설 IP를 사용하는 패킷 등), 악성 코드 데이터베이스에서 발견되는 패턴과 유사한 형태(변종 포함)의 패킷을 걸러 내거나 침입자의 작업을 유추해주기도 한다.
또 패킷이 들어와서 어느 작업을 하는지 활동을 감시하는 시스템도 있는데 이들은 미리 정의된 규칙(rule)에 따라서 작동되며 여러 지점에서 들어온 정보를 분석해서 실제 침입 유무를 판단하기도 한다.
침입예방 시스템은 침입감지 시스템과 설정이 유사하다. 예를 들어 침입 감지를 알리는 warn 설정을 drop 설정으로 바꿔두면 침입이 되지 못하므로 침입 예방(차단) 시스템이 된다.
Firewall과 IDS/IPS 도구들에 대해서 알아본다.
이들에 대해서 몇 가지 구별 방법이 있을 수 있지만 일반적인 분류로는 네트워크 카드(NIC)가 하나인 In-Line 방식(노드의 네트워크 주소와 방화벽 주소가 동일함)과 NIC가 두 개인 Out-of-Path 방식(노드의 네트워크 주소가 방화벽의 주소와 다름)이 있다.
∎ In-Line으로 Snort, Fail2Ban, Suricata, OSSEC, ModSecurity, PacketFence 와 ELK(ElasticSearch+Logstash+Kibana)를 알아보고,
∎ Out-of-Path로 Linux FW, ASG(Astaro Security Gate), Untangle, Security Onion, FortiGate와 Endian을 알아보며,
∎ Cloud Network Monitoring으로 Zabbix, MRTG(Multi Router Traffic Grapher), Cacti, Nagios와 Ganglia를 알아본다.
IDS/IPS의 고전 - Snort
Snort는 침입감지를 수행하는 IDS를 주로 하지만 IPS 역할도 해서 외부로부터의 침입여부를 빠르게 알려준다. Snort는 sniffer mode, logger mode, 그리고 IDS/IPS mode로 작동될 수 있는데 Snort가 제대로 작동되려면 AV에서의 악성코드에 대한 데이터베이스가 있어야 하듯이 유효한 침투에 대한 룰세트(Signature based) 데이터베이스가 잘 유지되어야 하므로 rule.conf 파일 설정이 중요하다.
IPS에 강한 - fail2ban
이 fail2ban은 IPS로 사용되는데 서버 서비스를 실행중인 서버에 fail2ban을 설치해서 외부에서의 의심스런 침투를 미리 막아서 보안을 강화시키는 도구이다. fail2ban-client는 fail2ban-server의 jail 설정 등을 확인시키는 콘솔 명령어로써 일반적인 서버-클라이언트 개념과 무관하므로 주의한다. fail2ban의 jail 설정에 따라 서버머신의 로그파일을 모니터링해서 서버에 의심스런 호스트 접근을 감지해서 해당 IP를 추려서 차단해준다. SNORT가 IDS 도구라면 FAIL2BAN은 IPS 도구인데 서버나 방화벽에 설정해서 사용하는 로그기반 도구이다.
설정은 /etc/fail2ban/fail2ban.conf 파일에서 해줄 수 있지만 기본설정을 그대로 놔두고 사용해도 문제는 없다. 의심스런 행동이 몇 번 탐지되면 어떤 액션을 취해야할지 이 파일에서 '필터.액션' 구문으로 jail을 정의해준다.
IDS/IPS로 강력한 - suricata
이 도구는 single-thread인 Snort의 진보된 multi-thread 버전으로 어느 정도의 RAM과 CPU만 있는 머신이라면 웬만한 규모의 네트워크에서 IDS/IPS 역할을 잘 수행한다. suricata.yaml 파일의 Detect-engine에서 low, medium, high, 그리고 사용자정의 보안레벨을 설정할 수 있다. Suricata는 설정된 룰로 침투여부를 판단하는데 snorts의 룰과 호환된다.
의심스러운 호스트나 네트워크를 규제해주는 - DenyHosts
이 도구도 Fail2Ban처럼 IPS로 사용된다. 원격에서 여러 IP로 무차별 연결을 시도하는 DDoS 공격의 해커를 막는 기법 중 하나이다. 서버가 사설 IP와 같이 알 수 없는 무수한 악성 IP 주소들을 모두 막을 수 없으므로 연결을 허용할 IP 주소만 지정해두고 이런 이상한 IP 주소들의 연결을 Messages나 Secure 로그를 읽어서 이들 호스트나 네트워크를 TCPwrapper의 /etc/hosts.deny 파일에 넣어서 막는 기법이다.
TCPwrapper는 일반적으로 /etc/hosts.allow 파일을 먼저 보고 /etc/hosts.deny 파일을 나중에 보므로 설정은 먼저 /etc/hosts.deny 파일에서 모두 거부로 해두고, /etc/hosts.allow 파일에서 필요한 것들만 허용해주면 허용할 것 이외에는 모두 거부된다.
=>TCP_wrapper에서는 /etc/hosts.allow 파일을 먼저보고 허용할 것들을 허용한 뒤
/etc/hosts.deny 파일을 나중에 보므로 여기에 ALL(서비스) : ALL(호스트) 해두면 /etc/hosts.allow에서 허용한 것들 이외에는 모두 거부되게 된다.
===>ACL(Access Control List)나 iptables와 같은 Firewall 보안 설정 파일에서의 설정과 유사하다. ACL 맨 끝에, iptables 맨 끝에는 암묵적(implicity)으로
deny any any의 설정이 들어 있다.
예를 들어서 /etc/hosts.allow 파일에
httpd : ALL
sshd : 192.168.111.100(host)
sendmail : ALL EXCEPT 192.168.100.100(host)
mysqld : 192.168.111.*(network)
식으로 해서 허용할 것만 넣으면 된다.
IDS/IPS/NAC로 사용되는 - OSSEC(Open Source SECurity)
OSSEC도 강력한 IDS/IPS 도구인데 그래픽 모드로 다양하게 설정해서 네트워크상의 노드들의 활동을 볼 수 있다. 보통 HID(Host Intrusion Detection)과 NID(Network Intrusion Detection)으로 사용되고 Ubuntu 20.04에서 실행하면 잘된다.
=>참고로 Ubuntu 20.04에서는 콘솔에서 settings를 입력한 뒤, network에서 IP_주소 등을 주고, display로 가서 해상도를 조절하고, apt -y install net-tools 해서 ifconfig 도구를 설치한 뒤, apt update 해주고, ifconfig 해본 뒤, exit 하고, firefox http://www.naver.com 해서 확인하면 네트워크 설정이 잘 된 것이다.
보안 침해를 감지하는 - ModSecurity
ModSecurity도 보안 침투를 감지하고 막아주는 방화벽으로 손색이 없는 도구인데 Web, DB, 그리고 DDoS 공격도 잘 막아준다. 프로그램에 내장된 룰 이외에 한국정보보호진흥원(http://www.securenet.or.kr)에서 ModSecurity의 룰을 별도로 다운받아서 사용할 수도 있다. 우리나라 보안기관에서 지원하고 있는 도구이므로 잘 알아두면 좋다.
username : abcd
password : A' OR 'A'='A
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs/*.conf
IncludeOptional /usr/share/modsecurity-crs/activated_rules/*.conf
IncludeOptional /usr/share/modsecurity-crs/owasp-crs.load