Linux 시스템 보안 기초 · 37/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

열린 포트는 곧 공격 표면입니다. 그런데 '포트가 열렸다'는 것만으로 위험을 판단하면 오탐이 됩니다. 핵심은 어떤 주소에 바인딩되었는가 — 즉 로컬 전용인지 전체 노출인지입니다. 이번 편은 그 차이를 정확히 봅니다.

2. 핵심 개념

바인딩 주소의 의미:

주소의미노출
127.0.0.1 / ::1루프백(로컬 전용)외부 접근 불가
0.0.0.0모든 IPv4 인터페이스외부 노출
::모든 IPv6 인터페이스외부 노출
특정 IP해당 인터페이스만제한적

127.0.0.1:3306(로컬 전용 DB)은 안전하지만 0.0.0.0:3306(전체 노출 DB)은 위험합니다 — 같은 포트라도 다릅니다.

127.0.0.1:5432          vs        0.0.0.0:5432
 │ 로컬만 접근                     │ 외부에서 접근 가능
 ▼                                ▼
안전(내부 통신용)                 위험(DB가 인터넷에 노출)

3. 동작 원리

서비스는 시작 시 특정 주소:포트에 소켓을 바인딩합니다. 루프백(127.0.0.1)에 바인딩하면 같은 호스트의 프로세스만 접속할 수 있고, 0.0.0.0에 바인딩하면 방화벽이 막지 않는 한 외부에서 접속 가능합니다.

흔한 사고: DB나 관리용 서비스가 실수로 0.0.0.0에 바인딩되어 인터넷에 노출되는 것. 그래서 점검은 '열린 포트 목록'이 아니라 '외부 노출(0.0.0.0/::) 포트 목록'에 집중해야 합니다.

4. 명령어 실습

# 외부 노출(0.0.0.0 / ::) 리스닝 포트만 필터
sudo ss -tulnp | grep -E '0\.0\.0\.0:|\[::\]:'

# 로컬 전용 포트 (참고)
sudo ss -tulnp | grep -E '127\.0\.0\.1:|\[::1\]:'

# 포트별 소유 프로세스 상세
sudo ss -tulnp | awk 'NR==1 || /LISTEN/'

5. 실행 결과

실습 컨테이너 실제 실행 결과입니다. (실제 캡처)

$ sudo ss -tulnp | grep -E '0\.0\.0\.0:|\[::\]:'
tcp LISTEN 0 128 0.0.0.0:22  users:(("sshd",pid=1491,fd=3))

외부 노출 포트가 SSH(22)뿐입니다. 만약 여기에 0.0.0.0:3306(MySQL), 0.0.0.0:6379(Redis) 등이 나오면, 인증 없는 DB가 인터넷에 노출된 심각한 상황일 수 있어 즉시 조치해야 합니다.

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: 외부 노출은 꼭 필요한 서비스만(예: 웹 80/443, SSH 22), DB·캐시는 루프백/내부망.
  • 위험 징후:
    • DB·캐시·관리 포트가 0.0.0.0 노출
    • 알 수 없는 프로세스가 고포트를 리스닝(백도어/리버스 쉘 리스너)
    • 기준선에 없던 신규 리스닝 포트

'같은 포트, 다른 바인딩'의 위험 차이를 구분하는 것이 이 편의 핵심입니다.

7. 탐지 방법

  • 외부 노출 포트 목록 기준선 대비 diff
  • 노출 포트의 소유 프로세스 정상성 확인
  • 신규/고포트 리스너 탐지

8. SOC 관점 — SIEM · Wazuh · IOC

노출 포트 변화는 공격 표면 변화이자 백도어 리스너 지표입니다. Wazuh는 netstat/ss 기반 점검으로 열린 포트를 정기 수집하고, 기준선을 벗어난 포트를 알람합니다. 외부 스캐너(예: 네트워크 스캔) 결과와 호스트 정보를 결합하면 '실제로 인터넷에 노출된 포트'를 정확히 파악할 수 있습니다.

9. 실습 체크리스트

[ ] 외부 노출(0.0.0.0/::) 포트만 필터
[ ] 노출 포트의 소유 프로세스 확인
[ ] DB·관리 포트의 로컬 전용 여부 확인
[ ] 신규 리스닝 포트 탐지

10. 핵심 정리

  • 포트 위험은 '열림'이 아니라 '바인딩 주소'로 판단한다.
  • 127.0.0.1은 로컬 전용, 0.0.0.0/::는 외부 노출이다.
  • DB·캐시의 0.0.0.0 노출은 대표적 심각 사고다.
  • 알 수 없는 고포트 리스너는 백도어 정황이다.
  • 노출 포트 기준선 대비 변화를 탐지한다.

11. 다음 편

다음 편에서는 38. 비정상 네트워크 연결 탐지 를 다룹니다. 들어오는 포트에서 나아가, 나가는 '비정상 연결'을 탐지하는 법을 봅니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글