취약점분석 (Blue Team)/Network

[Network] IDS,IPS 침입 탐지/방지 시스템 (CrowdSec 설치)

poiri3r 2026. 3. 15. 23:56

안녕하세요.

오늘은 제가 만든 서버에 IDS, IPS를 구현해보겠습니다.

IDS, IPS 각 Intrusion Detection/protection System으로 침입 방지 및 탐지를 의미합니다.

 

간단하게 aws로 실습을 한지 몇 일 지났는데, 로그를 보니 굉장히 많은 자동 공격 시도들이 있더라고요

단순히 정찰부터 해서,

 

정보 유출을 시도하는 자동화된 공격들이 단순히 서버만 열었다고 해서 들어왔습니다.

 

아무래도 보안을 공부하는 입장에서, 또 블루팀 업무를 희망하는 입장에서 가만히 냅둘 순 없었습니다.

IDS, IPS는 개념을 공유하고 있는데, IPS가 IDS에 비해 더 많은 기능을 수행합니다.

IDS는 탐지만 하는 passive monitoring이고 IPS는 active protection이 가능합니다.

방화벽은 다음 포스팅에서 살펴볼 것이지만, IDS, IPS보다 앞단에서 방어를 수행합니다.

 

약 이런 구성인데, 상세 설정이나 종류에 따라 위치가 살짝 다를 수 있습니다.

일반적으로 IDS/IPS라고 하면 방화벽안에서 탐지 및 방어를 한다고 생각하면 됩니다.

 

IDS/IPS가 크게 어려운 개념은 아니니 IDS/IPS의 종류에 대해 알아보겠습니다.

아까 그림에서는 방화벽 뒤라고만 했지만, 사실 툴과 감시 대상에 따라 위치가 조금씩 다릅니다.

대표적으로 네트워크를 감시하냐 호스트를 감시하냐에 따라 NIDS/NIPS와 HIDS/HIPS로 나뉩니다.

 

NIDS/NIPS

NIDS/NIPS는 네트워크 기반 침입 탐지/방지 시스템입니다.

상세 원리에 앞서 개념을 살펴보겠습니다.

아까와 그림이 거의 비슷한데 IDS의 위치가 조금 바꼈습니다.

 

IDS와 IPS의 동작에 차이가 있는데, IDS는 CCTV와 같이 방화벽을 통과하는 패킷을 검사합니다.

이 검사를 받을 때 패킷을 어떻게 받는지에 두가지 방식이 있는데 첫번째는 SPAN port입니다.

해당 방식은 위의 그림처럼 스위치가 서버로 가는 패킷을 복사해서 패킷미러링을 통해 NIDS로 보냅니다.

 

두번째 방식은 방화벽과 스위치 사이의 네트워크 케이블에 물리적 장비를 끼워서 트래픽을 복사합니다.

스위치 미러링보다 더 정확하고 패킷 손실이 없어 실무에서 선호하는 방식입니다.

이런식으로 생겼다고 합니다.

 

NIPS의 경우 방화벽과 스위치 트래픽 중간에 위치하여 패킷을 직접 처리하고 차단합니다. NIPS의 경우 보안상 조금 더 좋다고 느껴질 순 있으나 NIPS가 장애 시 전체 네트워크에 영향을 줄 수 있습니다.

이런식으로 생겼는데 스위치랑 비슷하게 생겼네요. 군대에서 근무할 때 서버실에서 봤던 기억이 납니다.

 

NIDS와 NIPS가 패킷을 탐지하는 방식은 크게 3가지가 있습니다.

 

  1. 시그니처 기반 : 미리 공격 패턴을 DB에 저장해둔 뒤 , 들어오는 패킷이랑 대조합니다.  정확도가 높지만, 0-day나 알려지지 않은 공격은 탐지하지 못한다는 단점이 있습니다.
  2. 이상 탐지 기반 : 평소와 다를 때 의심하는 방식입니다. 정상 트래픽의 baseline을 먼저 학습한 뒤, 거기서 벗어나면 알림을 줍니다. 0-day 공격도 탐지 가능하지만, 오탐이 많은 방식입니다.
  3. 프로토콜 이상 탐지 : 시그니처 기반 방식과 비슷하지만, 시그니처 기반 방식과 다르게 패킷 구조 자체를 탐지합니다. TCP/IP/HTTP 등 프로토콜의 표준 규격에 벗어난 패킷을 탐지합니다.

HIDS/HIPS

HIDS와 HIPS는 네트워크가 아닌 호스트 내부에서 수상한 행위를 탐지하는 시스템입니다.

이름 그대로 설치 위치가 호스트 위에 있습니다.

어떻게 보면 백신과 비슷한 역할을 한다고 생각을 하면 이해가 쉬울 것 같습니다.

Microsoft Defender나 CrowdStrike Falcon같은 제품들은 EDR이라고 백신 + HIDS + HIPS 기능을 전부 합친 제품도 나오고 있습니다.

HIDS는 OS 커널부터 프로세스, 파일 시스템까지 탐지하고, 로그를 남기고, HIPS는 OS 커널과 프로세스를 탐지하고 차단합니다.

NIDS는 암호화된 트래픽을 못보지만 HIDS는 호스트에서 복호화 후 실행되는 지점에 행위를 잡기에 보안성에서 조금 더 용이한 부분이 있습니다.

 

사실 하나만 한다고 되는건 아니라 당연히 둘 다 설치해야합니다.

이제 제 서버에 설치해보겠습니다.

 

실습

일단 제 aws가 free tier기 때문에 환경에 맞는 설치가 필요합니다.

그리고 추가로 다른 보호 툴들도 설치할 예정이므로, 공간 확보가 필요합니다.

 

cpu와 메모리가 매우 빈약하네요 .. 공부를 더 해보고 돈을 벌면 더 써보겠습니다.

 

일단 Suricata나 Wazuh OSSEC, CroudSec, Fail2ban 등 여러가지 툴들이 있는데

가벼운 툴은 Fail2ban이나 CroudSec인 것 같습니다.

이런저런 공부를 다 마치고 나면, 연구실의 서버컴퓨터에 제대로 환경 구축을 해볼 생각인데 그때는 Suricata를 써봐야겠습니다.

 

먼저 Fail2ban과 CrowdSec중에서 고민을 해봤는데, fail2ban은 워낙 유명하고 가벼운 로그 기반 차단 툴입니다. 매우 간단하게 동작하는데

nginx 로그 감시
      ↓
특정 패턴이 N번 반복되면
      ↓
해당 IP를 iptables로 차단

다음과 같은 형식입니다.

매우 가볍고 간단하지만, 차단 기순이 단순하고, IP 하나씩만 차단한다는 단점이 있습니다.

 

CrowdSec은 2020년에 나온 비교적 최신 툴로 나오지만 조금 차이점이 있는데

nginx 로그 감시
      ↓
공격 패턴 탐지
      ↓
커뮤니티 공유 블랙리스트와 대조
      ↓
IP 차단
      ↓
이 IP를 커뮤니티에 공유 → 다른 서버도 미리 차단

의 형식으로 커뮤니티를 형성해서, 서버가 공격받기 전에 미리 차단이 가능하다는 점입니다.

현재 로그에 찍히는 공격들은 전부 자동화봇들이기에 crowdsec을 설치해보겠습니다.

CrowdSec 설치

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec -y

로 설치를 해줍니다.

 

이렇게 설치가 완료되었습니다.

 

nginx의 로그들이 /var/log/nginx/*.log에 있는걸 확인했으니 nginx로그에 연동을 해줍니다.

그 후 아래 명령어로 bouncer도 설치해줍니다

sudo apt install crowdsec-firewall-bouncer-iptables -y

active 상태인걸 확인했습니다.

sudo cscli scenarios list

로 등록된 시나리오를 확인할 수 있습니다.

필요에 따라 yaml로 룰을 추가해도 될 것 같네요.

일단 커뮤니티 연동을 해야 블랙리스트 연동이 되기 때문에 crowdsec 회원가입을 하고 왔습니다.

 

여기에 들어가면 Enroll Command가 있습니다.

누르면 api키가 나오는데 sudo cscli enroll api 키를 통해 연결하고 수락을 받아주면

이렇게 성공적으로 연동이 됩니다.

 

조금 기다려보고 다음 게시물 작성할 때 추가하겠습니다.

읽어주셔서 감사합니다.!