4 IDS/IPS
-ICMP에 관련한 노트를 포함합니다.
TLDR
- IDS: Detection, 탐지에 관한 기술.
- IPS: Prevention, 예방/보호에 관한 기술.
- 오늘날엔
IDS/IPS가 상호 기능을 모두 제공하여 구분이 모호하지만, 자격증 시험에 종종 나온다고 합니다.
이번 강의에선 방화벽의 개념, IPS/IDS, Linux의 방화벽 설정 등 기본적인 보안 프로그램과 IPS/IDS 명령어에 대해 학습했습니다.
1. Firewall
- 방화벽
- 특정 포트, IP, 프로토콜 등 여러 기준을 가지고 통제를 제어함
2. IDS
- Intrusion Detection System
- IDS
- HIDS (Host based IDS)
- 호스트 기반 (컴퓨터 자체 내부 시스템)
- NIDS (Network based IDS)
- 네트워크 기반
3. IPS
- Intrusion Prevention System
- IDS의 고급화 버전
- 침입 탐지뿐만 아니라 사전에 차단 및 방어 기능 수행
4. 리눅스에서 IDS IPS
리눅스에서 사용되는 주요 IPS/IDS 툴은 다음과 같습니다:
- iptables → IPS
- Snort → IDS
*note:
Snort의 경우 면접에서 종종 물어보기에 실제로 사용해보는 것을 권장한다고 합니다.
Iptables 기본 문법
iptables [A. 규칙] [B. 체인명] [C. 옵션] [D. 타겟]
-
A. 규칙
-A: 새로운 규칙 맨 아래 추가-I: 새로운 규칙 맨 앞 추가-D: 특정 규칙을 삭제-F: 모든 규칙을 삭제-L: 현재 적용된 규칙을 출력
-
B. 체인명
INPUT: 외부 → 내부 패킷- 예: 외부 사용자가 서버의 22번 포트로 SSH 접속 시도
OUTPUT: 내부 → 외부 패킷- 예: 서버가 외부 웹사이트에 HTTP 요청을 보낼 때
FORWARD: 서버를 거쳐가는 패킷- 예: 서버가 게이트웨이 역할을 하여 다른 네트워크로 패킷 전달
INPUT/OUTPUT 체인과 함께 인바운드, 아웃바운드 개념을 살펴봅니다.
- 인바운드 (Inbound) : 외부에서 내부로 들어오는 트래픽. 주로
INPUT체인과 연관됩니다.- 서버가 외부 요청을 받을 때, 예: 웹서버의 80포트 접근
- 아웃바운드 (Outbound) : 내부에서 외부로 나가는 트래픽. 주로
OUTPUT과 관련있습니다.- 서버가 외부로 요청을 보낼 때, 예: 서버가 업데이트 서버로 접속
주의
-
인바운드 =
INPUT만은 아님- 인바운드 트래픽이 반드시 INPUT에서 끝나는 건 아님.
- 라우터나 방화벽처럼 패킷을 중간에 전달만 하는 장비라면, 외부 → 내부로 들어온 패킷이
FORWARD체인에서 처리될 수 있음.
-
아웃바운드 =
OUTPUT만은 아님- 서버 자체에서 나가는 건 OUTPUT이 맞지만, 내부 PC → 외부 인터넷 트래픽을 라우터가 중계할 때는
FORWARD에서 걸림.
- 서버 자체에서 나가는 건 OUTPUT이 맞지만, 내부 PC → 외부 인터넷 트래픽을 라우터가 중계할 때는
-
IDS > snort에서--dprot | --sport와 함께 혼동되어 다시 살펴볼 예정입니다. -
D. 타겟
ACCEPT: 허용DROP: 무반응 거부REJECT: 거부 메시지 전송LOG: syslog 기록RETURN: 패킷 처리 계속
DROP vs REJECT
DROP: 차단 당한 사용자가 자신의 차단 여부를 알 수 없습니다.REJECT: 차단 당한 사용자에게 차단 사실을 알립니다.
예시
Iptables –A INPUT –p tcp –s 195.2.3.5 --sport 31523 –j DROP
- 발신지 IP(
-s)가195.2.3.5, 발신지 포트가31523인 패킷 거부(DROP) --dprot는 도착지 포트입니다.DROP> 거부 메시지 전송 X
LINUX 관리자 권한
root- 윈도우의 관리자Administrator와 동일한 개념
- 방화벽 관련 정책을 실행하기 위해 관리자 권한이 필요함
su- 관리자 권한 상승 리눅스 명령어
sudopasswd- root 패스워드를 신규 등록
- Root의 패스워드를 등록한 후
su가 정상적으로 실행됨예:su > root Iptables명령어가 정상적으로 실행되는 것을 확인할 수 있음
nftables
- 2022년 이후로
iptables대신nftables가 기본 방화벽 설정으로 되어 있는 경우가 있습니다. - 아무것도 출력되지 않으면 방화벽 정책 없다는 뜻입니다.
기능 동작 테스트
ifconfigIP 확인 명령어 (inet)- 리눅스에서
ifconfig명령어는 Windows의ipconfig명령어에 해당합니다. - 두 명령어 모두 네트워크 인터페이스의 IP 주소, 서브넷 마스크, MAC 주소 등의 네트워크 구성을 확인하고 설정하는 데 사용됩니다.
- 리눅스에서는
ifconfig보다 더 강력하고 최신 기능의ip명령어가 권장됩니다.
- 리눅스에서
- 환경:
- Attacker
- Victim (192.168.26.129)
테스트 시나리오
-
Attacker PC로 Victim (192.168.26.129) 홈페이지 접속 테스트
-
Victim(localhost)에서는 웹페이지가 잘 열리는지 우선 확인할 것
홈페이지 동작 여부는 1순위로 localhost 체크가 우선입니다.
- 기본적이라 자주 실수 할 수 있다고 합니다.
-
Attacker(192.168.26.130) > victim(192.168.26.129) 접속 확인
-
KaliLinux를 통해 두 대의 가상머신VM에서 각각 서버를 열어 실행할 수 있습니다.
HTTP 포트
- HTTP > 포트번호??
- HTTP > 80 포트 (저번 강의 자료 Web 에서 설명)
- HTTPS > 443 포트
(CLOUDFLARE와 같은 플랫폼 이용해서 인증서(
TLS/SSL) 세팅해서 구축하기도 함)
❓ TLS/SSL
- TLS/SSL은 전송 계층(OSI L4)과 응용 계층(L7) 사이에서 사용되는 보안 프로토콜입니다.
- LS/SSL 인증서는 웹사이트와 사용자 브라우저 사이의 인터넷 연결을 암호화하여 **데이터를 안전하게 보호하는 디지털 파일 (인증서)**입니다."
방화벽 설정 예시
Iptables –A INPUT –p tcp –s 192.168.26.130 --sport 80 –j DROP
-A :[새로운 규칙 추가]
INPUT: 외부 → 내부 패킷
-p: tcp 프로토콜
-s: 발신지 IP가 192.168.26.130
--sport: 발신지 포트 80
-j DROP: 해당 조건(192.168.26.130 IP, TCP 프로토콜, 발신지 포트 80)에 해당하는 패킷을 차단(버림).
즉, 규칙과 일치하는 패킷을 받아들이지 않고 완전히 무시하여 송신자에게 응답하지 않음.
- Attacker가 victim 웹서버를 접속하지 못하도록
iptables로 방화벽을 설정합니다.
로그 확인
/var/log/apache2/access.log192.168.26.130 확인
명령어 오류 및 수정
iptables –A INPUT –p tcp –s 192.168.26.130 --sport 80 –j DROP
CLI의 인자(param)가 잘못되었습니다.
iptables –A INPUT –p tcp –s 192.168.26.130 --dport 80 –j DROP
INPUT체인에서는 보통 목적지 포트 (dport)를 다룬다고 합니다.Sport(src port소스포트)를 다루는 경우는 보통 로컬 프로세스(localhost)에서 처리할 때 사용Dport> 외부에서 내부로 접근할 때 처리
방화벽 정책 삭제
sudo nftflush ruleset
- 방화벽 정책 삭제
- 다시 접속 되는 것을 확인
Snort (리눅스 IDS)
앞서 말씀드린 것처럼 Snort를 해보는 것을 권장한다고 하십니다.Snort의 주요 기능은 다음과 같습니다:
- 네트워크상의 실시간 트래픽 분석 및 패킷 로깅 가능
- 오픈소스
- 리눅스 / 윈도우 둘 다 가능
- 패킷 스니퍼 (훔쳐보기)
- 패킷 로거 > 모니터링 / 로그 저장
- IDS / IPS도 가능하긴 함
- 리눅스 IPS 지원 O / 윈도우 IPS 지원 X
Snort 역사
- 1998: 패킷 스니퍼
- 2001: sourcefire 설립 / 상용 버전 출시
- 2009:
ipv6지원 - 2013:
Cisco>sourcefire인수Cisco미국 상장사로 네트워크계의 강자- 네트워크 자격증을 주로 주관하는 시험이 많음
Cisco계열 네트워크 장비 솔루션 등 많음
Snort 정책
Iptables,nftable(nft) 와 유사함
설치 및 버전 확인
apt-get install snort
snort --version
- (생각보다 버전체크하는게 매우 중요할 수 있음)
편집기
- Gedit / Windows 메모장 같은 직관적인 편집기
- vi
Snort rules
- snort rules 예시:
gedit local.rules
[동작] [프로토콜] [출발지IP] [출발지포트] -> [목적지IP] [목적지포트] (옵션들)
alert icmp any any -> any any (msg:"PINGTEST"; sid:1000001;)
msg: 이벤트명. 예시에서는 "PINGTEST"를 사용합니다.sid:- 99 이하: 시스템 예약
- 100 ~ 1,000,000 이하: snort 자체 지정
- 1,000,001 이상: 사용자 지정
Snort 실행 명령어와 버전 확인