대상 OS: Ubuntu Server 24.04 LTS
서버가 이미 침해된 뒤에야 로그를 모으기 시작하면, 대부분 “남은 흔적”만 보게 됩니다.
그래서 요즘 운영 보안에서는 런타임(runtime)에서 이상 행위를 바로 탐지하는 IDS/정책 엔진이 중요해졌고, 그 대표가 eBPF 기반 Falco입니다.
Falco는 커널 이벤트(프로세스 실행, 파일 접근, 네트워크 등)를 관측해 “원래라면 나오면 안 되는 행동”을 규칙으로 잡아냅니다.
하지만 설치만 해놓으면 경고가 쏟아져 금방 꺼버리기 쉽습니다. 첫 주에 해야 할 일은 규칙 튜닝과 운영 방식(서비스/로그/알림)을 정하는 것입니다.
오늘은 Ubuntu Server 24.04에서 Falco를 설치하고, 기본 규칙을 현실에 맞게 줄이며, systemd로 안정적으로 돌리고, 알림 연동 전 단계까지 ‘운영 가능한’ 형태로 만드는 과정을 정리합니다.
---
# 1) Falco가 잡아내는 것과 한계(기대치 조정)
1) 잘 잡는 것
- 의심스러운 쉘 실행(웹 프로세스가 bash/sh 실행)
- 민감 파일 접근(/etc/shadow, SSH 키 등)
- 컨테이너/호스트에서 이상 프로세스 실행
- 권한 상승/스케줄러 변조/원격 다운로드 후 실행 같은 흔한 TTP
2) 한계
- “정상처럼 보이는” 행위(계정 탈취 후 정상 명령)는 탐지 난이도가 높음
- 과도한 경고(노이즈) 발생 가능: 튜닝 없이는 운영하기 어려움
---
# 2) 사전 확인: 커널/환경 점검
1) 커널 버전 확인
uname -r
2) eBPF 사용 관련 제한 확인
sysctl kernel.unprivileged_bpf_disabled 2>/dev/null || true
- Falco는 root/systemd 서비스로 동작하므로, unprivileged 설정은 크게 문제되지 않는 경우가 많습니다.
---
# 3) 설치: 패키지 저장소 추가 후 Falco 설치
1) 저장소 설정에 필요한 도구 설치
sudo apt update
sudo apt install -y curl ca-certificates gnupg
2) Falco APT 저장소 추가(공식 repo 방식)
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main" | sudo tee /etc/apt/sources.list.d/falcosecurity.list >/dev/null
sudo apt update
3) Falco 설치
sudo apt install -y falco
4) 서비스 상태 확인
sudo systemctl enable --now falco
sudo systemctl --no-pager -l status falco | sed -n '1,80p'
---
# 4) 기본 동작 확인: 경고가 어디로 나오는지 먼저 파악
1) 저널에서 Falco 이벤트 확인
sudo journalctl -u falco -S -30m --no-pager | tail -n 200
2) Falco 설정 파일 위치 확인
sudo ls -al /etc/falco /etc/falco/falco.yaml 2>/dev/null || true
sudo sed -n '1,120p' /etc/falco/falco.yaml 2>/dev/null || true
---
# 5) 운영형 튜닝 1: 룰 파일을 “덮어쓰기”가 아니라 “추가”로 관리
1) 원칙
- 기본 룰 파일을 직접 수정하지 않고,
- `/etc/falco/falco_rules.local.yaml` 같은 로컬 룰로 예외/조정을 쌓습니다.
2) 로컬 룰 파일 생성(예시)
sudo bash -lc 'cat >/etc/falco/falco_rules.local.yaml <<"EOF"
# Local overrides for Falco rules
# 목적: 노이즈를 줄이고, 우리 환경에서 의미 있는 경고만 남긴다.
# 예: 운영상 정상인 패턴을 예외 처리(아래는 예시이며 반드시 환경에 맞게 수정)
EOF'
'
---
# 6) 운영형 튜닝 2: 가장 흔한 노이즈부터 줄이는 방법
1) 특정 프로세스/경로가 계속 뜨는 경우
- 먼저 “무슨 룰이 울리는지”를 확인한 뒤, 그 룰에만 최소 예외를 넣는 것이 핵심입니다.
sudo journalctl -u falco -S -2h --no-pager | tail -n 300
2) 예외는 ‘전역’보다 ‘조건’을 좁혀라
- 예: 특정 컨테이너 이미지/특정 유닛/특정 바이너리 경로에만 적용
(룰 문법이 복잡해질 수 있으니, 처음에는 “경고 레벨 낮추기”도 현실적인 선택입니다.)
---
# 7) 시스템 운영: 로그/리소스/재시작 정책을 systemd로 고정
1) Drop-In으로 제한/재시작 정책 설정
sudo systemctl edit falco
Drop-In 내용 예시:
sudo bash -lc 'cat >/etc/systemd/system/falco.service.d/10-ops.conf <<"EOF"
[Service]
Restart=always
RestartSec=3
# 과도한 리소스 사용 방지(환경에 맞게 조정)
MemoryMax=500M
CPUQuota=50%
EOF'
'
2) 반영
sudo systemctl daemon-reload
sudo systemctl restart falco
sudo systemctl --no-pager -l status falco | sed -n '1,80p'
---
# 8) “탐지 테스트”를 해보자(간단한 트리거)
1) 민감 파일 접근(예: shadow 읽기)
sudo cat /etc/shadow >/dev/null
2) 웹 서비스 계정으로 쉘 실행(테스트 환경에서만)
- 실제 운영에서는 위험하니 테스트 서버에서만.
sudo -u www-data sh -lc 'id; whoami' 2>/dev/null || true
3) Falco 경고 확인
sudo journalctl -u falco -S -10m --no-pager | tail -n 200
---
# 9) 알림으로 가기 전, 먼저 해야 할 “필수 운영 정리”
1) 경고 분류
- 즉시 대응(예: 웹 프로세스에서 쉘 실행)
- 추적 필요(예: 민감 파일 접근)
- 정보성(예: 특정 툴 실행)
2) 경고를 중앙 수집으로 보내기
- 지금 단계에서는 journald에 쌓이는 것만으로도 충분하지만,
- 이후에는 syslog/로그 파이프라인으로 전송해 상관분석을 할 수 있게 합니다.
3) 룰 변경은 코드로 관리
- 로컬 룰 파일을 Git/배포 도구로 관리하면, “누가 어떤 예외를 왜 넣었는지” 추적이 가능합니다.
---
# 10) 롤백/중지 절차(노이즈 폭주 대비)
1) 서비스 중지
sudo systemctl stop falco
2) 부팅 시 자동 시작 해제
sudo systemctl disable falco
3) 다시 켤 때
sudo systemctl enable --now falco
sudo journalctl -u falco -S -10m --no-pager | tail -n 120
---
# 11) 결론: Falco는 “설치”가 아니라 “튜닝”이 가치다
1) 첫 주 목표는 노이즈를 줄여 꺼지지 않게 만드는 것
2) 두 번째 목표는 핵심 TTP(쉘 실행, 다운로드 후 실행, 민감 파일 접근)만이라도 확실히 알람으로 묶는 것
3) systemd로 리소스/재시작 정책을 고정해 ‘운영형’으로 만든 뒤 알림 연동을 붙이는 게 순서