
psad: iptables를 사용한 침입 탐지 및 로그 분석
Port Scan Attack Detector psad는 가벼운 시스템 데몬으로, Linux iptables/ip6tables/firewalld 방화벽 코드와 함께 작동하여 포트 스캔 및 스위프, 백도어, 봇넷 명령 및 제어 통신 등 의심스러운 트래픽을 탐지하도록 설계되었습니다. 이 도구는 매우 구성 가능한 위험 임계값 세트(합리적인 기본값 제공), 소스, 대상, 스캔된 포트 범위, 시작 및 종료 시간, TCP 플래그 및 해당 nmap 옵션, 역방향 DNS 정보, 이메일 및 syslog 알림, iptables 규칙 세트의 동적 구성을 통한 공격 IP 주소 자동 차단, 수동 운영 체제 지문 인식, DShield 보고를 포함한 자세한 경고 메시지를 제공합니다. 또한 psad는 Snort 침입 탐지 시스템에 포함된 많은 TCP, UDP 및 ICMP 서명을 통합합니다. 다양한 백도어 프로그램(예: EvilFTP, GirlFriend, SubSeven), DDoS 도구(Mstream, Shaft) 및 nmap을 통해 시스템에 쉽게 사용될 수 있는 고급 포트 스캔(SYN, FIN, XMAS)을 탐지합니다. psad는 또한 fwsnort를 통해 기록된 Snort 서명에 대해 경고할 수 있으며, 이는 iptables 문자열 일치 확장을 사용하여 애플리케이션 계층 서명과 일치하는 트래픽을 탐지합니다. 2.4.4 릴리스부터 psad는 Mirai 봇넷의 IoT 기본 자격 증명 스캐닝 단계도 탐지할 수 있습니다.
전체 기능 목록은 아래와 같습니다.
psad는 애플리케이션 계층 버퍼 오버플로 공격, 의심스러운 애플리케이션 명령 및 기타 의심스러운 계층 7 트래픽에 대한 경고를 생성할 수 있습니다.psad는 gnuplot 및 afterglow와의 통합을 제공하여 악성 트래픽 그래프를 생성합니다. 다음 두 그래프는 Honeynet Scan30 챌린지의 Nachi 웜에 대한 것입니다. 첫 번째는 psad가 iptables 로그 데이터를 분석한 후 afterglow가 생성한 링크 그래프입니다:
"Nachi Worm Link Graph"
두 번째는 Scan30 iptables 데이터에서 시간별 Nachi 웜 트래픽을 보여줍니다:
"Nachi Worm Hourly Graph"
psad에서 참조하는 구성 키워드에 대한 정보는 psad(8) 매뉴얼 페이지와 다음에서 찾을 수 있습니다:
http://www.cipherdyne.org/psad/docs/config.html
psad가 분석하는 모든 정보는 iptables 로그 메시지에서 수집됩니다. psad는 기본적으로 새로운 iptables 메시지를 위해 /var/log/messages 파일을 읽고 선택적으로 전용 파일(/var/log/psad/fwdata)에 기록합니다. 그런 다음 psad는 위험 임계값 및 서명 로직을 적용하여 포트 스캔이 발생했는지 여부를 결정하고, 적절한 경고 이메일을 보내며, (선택적으로) 공격 IP 주소를 차단합니다. psad에는 신호 핸들러가 포함되어 있어 USR1 신호를 수신하면 현재 스캔 해시 데이터 구조의 내용을 /var/log/psad/scan_hash.$$에 덤프합니다. 여기서 "$$"는 실행 중인 psad 데몬의 PID를 나타냅니다.
참고: psad는 iptables가 승인되지 않은 패킷에 대해 적절한 로그 메시지를 생성하는 데 의존하므로, psad는 iptables 규칙 세트에 포함된 로깅 규칙만큼만 효과적입니다. 따라서 방화벽이 패킷을 기록하도록 구성되지 않은 경우, psad는 포트 스캔이나 다른 것을 탐지하지 않습니다. 일반적으로 방화벽을 설정하는 가장 좋은 방법은 규칙 세트 끝에 기본 "드롭 및 로그" 규칙을 두고, 이 마지막 규칙 위에 허용되어야 하는 트래픽만 허용하는 규칙을 포함하는 것입니다. 실행 시 psad 데몬은 이러한 기본 거부 규칙이 존재하는지 확인하려고 시도하며, 그렇지 않은 경우 사용자에게 경고합니다. psad와 호환되는 예제 방화벽 규칙 세트는 FW_EXAMPLE_RULES 파일을 참조하십시오.
또한, psad에 대한 광범위한 내용은 No Starch Press에서 출판한 "Linux Firewalls: Attack Detection and Response" 책에 포함되어 있으며, 이 책의 지원 스크립트는 psad와 호환됩니다. 이 스크립트는 다음에서 찾을 수 있습니다:
http://www.cipherdyne.org/LinuxFirewalls/ch01/
Linux 배포판에 따라 psad는 기본 패키지 저장소에서 이미 사용 가능할 수 있습니다. 예를 들어, Debian 또는 Ubuntu 시스템에서는 간단히 다음과 같이 설치합니다:
apt-get install psad
psad가 패키지 저장소에서 사용 불가능한 경우, psad 소스에 포함된 install.pl 스크립트로 설치할 수 있습니다. install.pl 스크립트는 psad가 이미 설치된 경우 업그레이드도 처리합니다. psad는 Linux 시스템에 이미 설치되어 있을 수도 있고 아닐 수도 있는 여러 Perl 모듈이 필요합니다. 이러한 모듈은 psad 소스의 deps/ 디렉토리에 포함되어 있으며 install.pl 스크립트에 의해 자동으로 설치됩니다. 모듈 목록은 다음과 같습니다:
psad에는 Marco d'Itri가 작성한 whois 클라이언트도 포함되어 있습니다(deps/whois 디렉토리 참조). 이 클라이언트는 주어진 IP 주소에 대한 올바른 whois 정보를 수집하는 데 다른 클라이언트보다 뛰어납니다.
iptables 구성을 psad와 호환되게 하기 위한 주요 요구 사항은 단순히 iptables가 패킷을 기록하는 것입니다. 이는 일반적으로 INPUT 및 FORWARD 체인에 다음과 같은 규칙을 추가하여 달성됩니다:
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG
위 규칙은 합법적인 트래픽에 대한 모든 ACCEPT 규칙 이후, 정책을 통해 허용되지 않는 트래픽에 대한 해당 DROP 규칙 직전에 INPUT 및 FORWARD 체인의 끝에 추가되어야 합니다. iptables 정책은 프로토콜, 네트워크, 포트 및 인터페이스 제한, 사용자 정의 체인, 연결 추적 규칙 등과 함께 매우 복잡할 수 있습니다. Shorewall 및 Firewall Builder와 같은 많은 소프트웨어는 iptables 정책을 구축하고 iptables가 제공하는 고급 필터링 및 로깅 기능을 활용합니다. 일반적으로 이러한 소프트웨어로 구축된 정책은 psad와 호환됩니다. 왜냐하면 이들은 합법적인 트래픽이 아닌 패킷을 기록하도록 iptables에 지시하는 규칙을 명시적으로 추가하기 때문입니다. Psad는 특정 로그 접두사(--log-prefix 옵션을 통해 추가됨)를 포함하는 iptables 메시지만 분석하도록 구성할 수 있지만, 기본값은 psad가 모든 iptables 로그 메시지를 포트 스캔, 백도어 프로그램 탐색 및 기타 의심스러운 트래픽의 증거로 분석하는 것입니다.
psad는 일반적으로 Linux 시스템에서 실행되며, 많은 주요 Linux 배포판의 패키지 저장소에서 사용할 수 있습니다. psad에 작동 문제가 있는 경우 github에서 이슈를 열어 주십시오.
psad는 GNU General Public License (GPL v2+) 조건에 따라 오픈 소스 소프트웨어로 릴리스됩니다. 최신 릴리스는 https://github.com/mrash/psad/releases에서 찾을 수 있습니다.
psad는 Snort(Marty Roesch 작성, http://www.snort.org 참조)에서 사용 가능한 많은 TCP, UDP 및 ICMP 서명을 사용합니다. Snort는 Sourcefire, Inc.의 등록 상표입니다.
모든 기능 요청 및 버그 수정은 github 이슈 추적을 통해 관리됩니다. 그러나 이메일(michael.rash_AT_gmail.com)로 연락하거나 Twitter(@michaelrash)를 통해 연락할 수 있습니다.