1. VMware 위에 가상화 OS ESXi를 설치 2. vSphere Client(ESXi를 관리하는 인터페이스)에 pfSense 설치 3. vSphere Client(ESXi를 관리하는 인터페이스)에 pfSense 관리자 페이지 접속용 VM(윈도우7) 설치 4. vSphere 접속용 WAN과 일반적으로 사용할 WAN, LAN을 구성 5. 역할별, 서비스별로 VLAN을 나눔 (망 분리)
6. ACL 룰을 만들어 서로 다른 VLAN 간의 접속을 차단
7. 오피스 영역에서 아래와 같은 ACL 룰 생성
- 라이브 서버 대역의 서비스 포트(http/https)의 접근을 허용
- 직원들만 접속할 수 있는 사내망에 접근해야 하므로 역시 서비스 포트(http/https) 접근이 가능해야 한다.
- 사무실에서는 서비스 서버 관리를 해야 하므로 서비스 대역에 있는 라이브 서버의 SSH 접속을 허용
- 사무실에서는 내부 서버 관리를 해야 하므로 인트라넷 대역에 있는 내부 서버들의 SSH 접속을 허용
8. pfSense 버전 업데이트 (2.4.4)
9. 스퀴드 프락시 설치
10. 스퀴드 가드 설치 (유해차단시스템 구축)
- 직원용 ACL 룰 설정 (도박, 성인, 원격제어, 성교육, 스파이웨어 관련 사이트 접근 차단)
- 서버용 ACL 룰 설정 (리눅스 리포지토리 제외 나머지 사이트 접근 차단)
이제 IPS 구축을 위해 스노트(Snort)를 설치할 것이다.
1. 스노트 IPS 설치
스노트는 시그니처 기반 IDS로 가장 기본이자 핵심적인 툴이다. 패킷 스니핑 기반하에 탐지 모드를 설정하면 기본적으로 IDS로 사용하게 되지만 이를 인라인으로 연결하면 IPS로 활용할 수 있다. pfSense에는 스노트를 인라인 IPS 모드로 사용할 수 있는 기능이 있다.
현재 네트워크 구조는 [라우터 -> pfSense -> Snort IPS -> VLAN 10~40]의 순서로 되어있다.
(pfSense의 구조상 방화벽에서 IP 차단이 먼저 이뤄지면 IPS까지 패킷이 도달하지 않음)
본 프로젝트에서는 하나의 IPS에서 모든 VLAN을 커버하도록 설정한다. 인터페이스를 생성할 때 Description을 제외한 나머지 옵션은 기본값으로 둔 채 생성한다.
3. IPS 룰 다운로드
IPS에서 사용할 시그니처를 설정해야 하는데 이는 스노트 홈페이지에서 무료로 내려받아 사용한다. [Global Settings]에 [Sign up for a free Registered User Rules Account]를 클릭한다.
회원가입을 하고나면 Oinkcode가 생성되는데 이를 복사한다.
[Enable Snort VRT], [Enable Snort GPLv2], [Enalbe ET Open]을 체크하고 [Snort Oinkmaster Code]에 아까 복사했던 Oinkcode를 입력한다. 이제 스노트 사이트를 이용해 pfSense에서 스노트 관련 무료 룰을 내려받아 사용할 수 있다.
새로운 룰이 정기적으로 나오기 때문에 업데이트 주기는 1일, 시간은 오전 3시로 설정하여 자동으로 업데이트되게 만든다.
IPS를 가동시키기 위해 [Update Rules]를 클릭해 룰을 업데이트한다.
이 룰은 스노트에서 공통적으로 사용하는 룰이므로 인라인 IPS가 아닌 IDS로 사용할 때도 당연히 함께 사용된다.
기본적으로 룰은 아래와 같은 것을 탐지한다.
- 특정 서비스에 대한 익스플로잇 (HTTP(Apache/IlS 등), FTP, IMAP, SNMP 등)
- 사용자 트래픽 (웹브라우저에 대한 내용)
- 악성코드 (바이러스, 웜, PUAs)
- 각종 공격 시도 (DDoS, exploit-kits, bad-traffic)
- 블랙 IP 주소 (알려진 감염된 호스트나 블랙리스트에 등록된 IP 주소)
4. 개별 인터페이스 설정
지금까지는 글로벌 설정으로 전체 IPS 인터페이스에 영향을 주는 설정이었다. 이제 각 VLAN에만 영향을 주는 설정을 할 것이다. 이처럼 독립적으로 설정이 가능한 덕에 목적에 맞는 보안 정책을 개별적으로 구현할 수 있다.
(ex, SQL Injection 공격은 웹서버 쪽 VLAN에만 룰을 가동시키는 등)
4.1) WAN 인터페이스
연필 아이콘을 클릭하면 각 인터페이스에 대한 개별 설정을 할 수 있다.
WAN 인터페이스는 외부에 노출된 인터페이스이며, 가장 먼저 외부 공격 시도를 받게 된다. 따라서 막아야 할 룰은 여기서 막고 이후 안쪽으로 들어오는 트래픽은 각각의 VLAN에서 다시 룰 튜닝을 하여 처리한다. [WAN Categories]를 클릭한 후 WAN 인터페이스에 적용할 룰을 선택한다.
ET Open Rules - emerging-botcc.rules - emerging-compromised.rules - emerging-dshield.rules - emerging-exploit.rules - emerging-malware.rules - emerging-trojan.rules - emerging-worm.rules
Snort Text Rules - snort_backdoor.rules - snort_blacklist.rules - snort_botnet-cnc.rules
Snort SO Rules - snort_malware-cnc.so.rules
WAN 인터페이스에 선택한 룰은 위와 같다.
[Use IPS Policy]를 체크하고 [IPS Policy Selection]을 [Connectivity]로 설정한다. 스노트 정책은 Connectivity(연결성), Balanced(균형성), Security(보안성) 이렇게 3가지를 고를 수 있는데 Connectivity가 서비스 안정성을 우선으로 하기 때문에 선택했다. 해당 룰은 VRT 규칙이 활성화된 경우에만 사용할 수 있으므로 [Snort GPLv2 Community Rules (Talos certified)를 체크한다.
[WAN Settings]에서 [Search Optimize]와 [Checksum Check Disable] 항목을 체크한다.
설정을 마치고 저장한 후 IPS 재시작을 한다.
4.2 VLAN 10 인터페이스
웹서버인 VLAN 10의 룰을 만들 것이다. WAN에서 블록 중인 룰은 체크할 필요가 없으며 웹서버와 관계없는 룰 역시 체크하지 않는다.
ET Open Rules - emerging-web.server.rules - emerging-web_specific_apps.rules
이전에 WAN에 emerging-botcc.rules을 추가했다. 해당 룰은 악성 CnC 서버의 블랙 IP 주소가 기록되어있고 그쪽으로 접근하면 탐지한다. 실제 접속을 시도하면 위 그림처럼 로그가 남는다.
지금까지는 인라인으로 연결돼 있긴 하지만 실제 차단 행위는 하지 않았다. (탐지만 진행) 로그를 모니터링하다가 오탐이 없다 싶으면 차단하는 기능을 활성화시켜 블록으로 정책을 변경하는 게 일반적이다.
WAN 인터페이스를 선택한 후 [WAN Settings] - [Alert Settings]를 들어간다. [Send Alerts to System Log], [Block Offenders], [Kill States], [Which IP to Block]은 BOTH로 설정한다.
연결에 성공하고 알람 로그만 남겼던 이전과는 달리 차단 로그가 남으며 접속이 아예 불가능하다.
6. 커스텀 패턴 추가
벤더에서 정기적으로 내려주는 룰 외에 추가적으로 넣고 싶은 룰이 있을 때 커스텀 룰을 제작하고 적용하는 방법을 알아보자
룰을 만들고 싶은 인터페이스를 선택하고 (여기서는 WAN) [WAN Rules]를 클릭한 후 custom.rules를 선택한다.