* 역사
psad 소프트웨어 프로젝트는 1999년 가을, 바스티유 개발팀이 바스티유가 경량의 네트워크 침입 탐지 컴포넌트를 제공해야 한다고 결정했을 때 Bastille 리눅스의 일부로 시작했다. 당시 피터 왓킨스는 지금까지도 Bastille와 함께 제공되는 매우 뛰어난 방화벽 스크립트를 개발 중이었으므로 방화벽 로그가 제공하는 정보에 기반한 IDS 도구를 개발하는 것은 자연스러운 다음 작업이었다. 또 당시 PortSentry(http://sourceforge.net/projects/sentrytools 참조)에는 기본 버리기 전략으로 설정된 방화벽과 함께 사용하기에는 부적절한 구조적 설계 문제가 있었다.
이에 2001년 마이클 래쉬(이 글의 원 저자)는 바스티유-NIDS 프로젝트가 바스티유를 설치할 필요 없이 독립적으로 실행될 수 있게 별도의 프로젝트로 분리시키고 포트 스캔 공격 탐지기(Port Scan Attack Detector)라고 명명했다. psad의 개발 주기는 매우 활발하며 평균 3~4달에 한 번씩 새로운 배포판이 나온다.
* 방화벽 로그를 분석하는 이유
좋은 네트워크 보안은 기본 네트워크 연결성과 서비스를 허용하기 위해 절대적으로 필요한 만큼만 허용하게 적절히 설정된 방화벽에서 시작된다. 방화벽은 인라인 장치이므로 네트워크 트래픽에 필터링 로직을 적용하기 좋다. 컴퓨터 네트워킹의 문맥에서 인라인 장치란 네트워크를 통해 패킷이 라우팅될 때 패킷의 직접적인 경로에 존재하는 하드웨어를 의미한다. 인라인 장치 내의 하드웨어나 소프트웨어가 오작동해서 기기의 네트워크 트래픽 전달 기능에 영향을 미친다면 네트워크 통신은 더 이상 동작하지 못한다. 인라인 장치의 예로는 라우터, 스위치, 브리지, 방화벽, 네트워크 침입 방지 시스템(IPS)이 있다.
방화벽의 기능이 좀 더 완전해지고 복잡해짐에 따라 점차적으로(애플리케이션 계층 검사와 같이) 전통적으로 침입 탐지 시스템의 범주였던 기능을 제공하고 있다. 이런 기능이 트래픽을 필터링하는 기능에 더해지면서 방화벽은 명백한 침투와 복잡한 정탐 시도로부터 서비스를 보호하고 웜 트래픽으로부터의 잠재적인 피해를 제한할 수 있는 효과적인 기법을 제공할 수 있는 양질의 침입 탐지 데이터를 생성할 수 있게 됐다. 광범위한 로깅과 필터링 기능을 갖춘 iptables와 같은 방화벽은 무시해선 안 되는 가치 있는 보안 데이터를 제공할 수 있다.
스노트와 같은 전용 침입 탐지 시스템이 굉장히 많은 기능과 네트워크 공격을 기술하기 위한 광범위한 규칙 언어를 제공하는 반면 iptables는 항상 네트워크 트래픽에 인라인되서 자세한 패킷 해더 로그를 제공한다. 철저한 방어의 원리가 적용되므로 iptables의 로그를 주의 깊게 보는 것이 좋다.
* psad의 기능
현 버전의 psad는 Nmap과 같은 도구를 이용한 포트 스캔, 다양한 백도어 프로그램을 위한 탐사, 분산 서비스 거부 공격(DDoS) 도구, 네트워킹 프로토콜을 악용하려는 시도와 같이 다양한 유형의 의심스러운 트래픽을 탐지할 수 있다. psad는 fwsnort와 함께 사용하는 경우 애플리케이션 계층 데이터를 조사해야 하는 규칙을 포함해서 스노트 2.3.3 전체 규칙의 60% 이상을 탐지하고 경고할 수 있다.
psad의 좀 더 흥미로운 기능 가운데 하나는 스캔이나 기타 악의적인 트래픽이 시작되는 원격 운영체제를 수동적으로 핑거프린팅할 수 있는 기능이다. 예를 들어 누군가가 윈도우 머신에서 TCP connect() 스캔을 시작하면 psad는 (대개) 스캔이 윈도우 XP, 2000, NT 중 어떤 시스템으로부터 온 것인지 구분할 수 있다. 심지어 일부 경우 psad는 원격 시스템의 서비스 팩 버전까지 탐지할 수 있다. psad가 사용하는 핑거프린트는 p0f에서 나온 것이다. 더욱이 psad는 자세한 메일과 syslog 경고, 위험 수준 임계치에 기반한 IP 자동 차단 기능(이 기능은 기본적으로 비활성화되어 있다.), 통합된 whois 지원, DShield 보고 등을 제공한다.
* psad의 설치
psad 설치에 관련한 자세한 내용은 http://www.cipherdyne.org/psad/download 를 참고하기 바란다. 참고로 우분투/데비안 시스템의 경우 아래의 명령어 하나만으로 psad의 설치를 진행할 수 있다.
# apt-get install psad
직접 소스를 다운받아 설치를 하는 경우 install.pl 스크립트를 이용하게 되는데, install.pl 스크립트는 메일 경고가 전송될 메일 주소, 시스템에서 현재 실행 중인 syslog 데몬의 유형(syslogd, syslog-ng, metalog), psad가 특정 로깅 접두어를 포함하는 iptables 로그 메시지만을 분석하게 할지에 대한 결정, 로그 데이터를 DShield 분산 IDS로 전송할지에 대한 결정 등과 같은 몇 가지 사용자 입력을 필요로 한다. 직접 정보를 입력하거나 기본 값(그냥 엔터 키를 누름)을 그대로 사용할 수 있다.
* psadsms iptables 방화벽과 긴밀히 연계하기 때문에 아직 리눅스 이외의 운영체제로는 포팅되지 않았다. 그러나 psad의 능동적 응답 기능을 사용할 생각만 없다면 다른 운영체제를 실행 중이지만 별도의 리눅스 시스템으로부터 iptables 로그 메시지를 받아들이고 있는 syslog 서버에는 psad를 설치할 수 있다.
리눅스에 psad를 성공적으로 설치하고 나면 로컬 파일시스템에 다량의 새 파일과 디렉토리가 생성된다.
펄은 주요 psad 데몬을 개발하는데 쓰인 프로그래밍 언어로, 핵심 펄 모듈에는 포함되지 않는 몇 개의 펄 모듈이 사용된다. 이러한 펄 모듈을 /usr/lib/psad 에 모두 설치함으로써 psad는 이미 시스템 펄 라이브러리 트리에 설치된 펄 모듈과 psad가 필요로 하는 모듈을 완전히 분리시켜 유지할 수 있다.
psad에는 다음과 같은 모듈이 필요하다.
Data:Calc
Net::Ipv4Addr
Unix::Syslog
IPTABLES::Parse
IPTABLES::ChainMgr
psad, kmsgsd, pasdwatchd 와 같은 세 개의 시스템 데몬이 psad 를 구성한다. 이 데몬은 모두 /usr/sbin 에 설치되면 /etc/psad 의 psad.conf 파일을 참조한다.
psad 설치 프로그램은 /etc/psad/archive 디렉토리도 생성해서 현재의 psad 데몬 설정 파일을 복사한다. 이는 psad 를 재설치할 때 이전의 설정을 보존하기 위한 것이다. install.pl 프로그램은 현재의 psad 설정 값을 새로운 설정 파일로 통합할 수 있으며, 이를 통해 업그레이드 비용을 최소화할 수 있다.
설치 프로그램은 /var 에도 몇 개의 파일과 디렉터리를 생성한다. 우선 /var/lib/psadfifo 에 명명명 파이프를 생성하고 /var/log/psad 디렉토리와 파일 /var/log/psad/fwdata 를 생성한다. 끝으로 install.pl 스크립트는 설치 로그를 /var/log/psad/install.log 에 유지한다. 실행 시 psad 의 주요 동작 디렉토리(수상한 네트워크 트래픽과 관련된 IP 주소를 기록하는 디렉토리)도 /var/log/psad 다.