73. SMB와 445 포트 — 내부 확산의 통로

changseop lee·7일 전

📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 73편
이전 글: 72. LDAP·Kerberos 포트 — 인증 인프라 트래픽 개요 · 다음 글: 74. NFS
참고(리눅스 시스템 기초): 37. Listening Port 보안 점검 — 불필요한 리슨 포트 찾기

1. 왜 알아야 하는가

SMB(Server Message Block)는 Windows 환경의 파일·프린터 공유와 원격 관리를 담당하는 프로토콜입니다. 사내망에서는 매일 대량으로 오가는 정상 트래픽이지만, 동시에 공격자가 한 대를 장악한 뒤 옆 PC·서버로 퍼지는(Lateral Movement) 대표 통로이기도 합니다.

  • 2017년 WannaCry 랜섬웨어는 SMBv1 취약점(MS17-010) 을 이용해 445번 포트로 네트워크 내부에서 스스로 확산했습니다.
  • 탈취한 계정으로 원격 PC의 관리 공유(C,ADMIN, ADMIN) 에 파일을 복사하고 서비스를 등록해 실행하는 방식은 지금도 흔한 확산 기법입니다.

즉 445번 트래픽 자체는 정상이지만, "누가, 어디로, 얼마나 넓게" 접속하는지가 관제의 핵심 질문이 됩니다.


2. 핵심 개념

2-1. SMB 관련 포트

포트이름용도
TCP 445SMB over TCP (Direct Hosting)현재 SMB의 기본 포트
TCP 139NetBIOS Session ServiceNetBIOS 위의 구형 SMB 전송
UDP 137NetBIOS Name ServiceNetBIOS 이름 조회
UDP 138NetBIOS Datagram Service브로드캐스트 기반 공지·브라우징

최신 환경은 445만으로 동작합니다. 137~139가 보이면 레거시 호환 설정이 남아 있다는 신호입니다.

2-2. 버전별 보안 차이

버전대표 도입 시기보안 관점
SMB1 (CIFS)구형 WindowsMS17-010 등 치명적 취약점 이력, 현재 비활성화 권고. 최신 Windows는 기본 미설치 또는 비활성
SMB 2.xWindows Vista / Server 2008 이후구조 개선, 서명(Signing) 지원
SMB 3.xWindows 8 / Server 2012 이후전송 암호화 지원, 3.1.1에서 협상 과정 무결성 보호 강화
  • 서명(Signing): 메시지 위·변조를 막습니다. 중간에서 인증을 가로채 다른 서버로 넘기는 릴레이 공격을 어렵게 합니다.
  • 암호화(Encryption): SMB 3.x에서 공유 단위·서버 단위로 켤 수 있습니다. 켜면 네트워크에서 파일 이름·내용을 볼 수 없습니다.

2-3. 공유의 종류

공유설명관제 의미
일반 공유 (예: \\fs01\부서자료)사용자 파일 공유대량 읽기·쓰기 = 유출 또는 랜섬웨어 암호화
C$, D$ 등드라이브 전체 관리 공유(관리자 권한)일반 사용자 PC 간 접근은 비정상
ADMIN$Windows 폴더 관리 공유원격 실행 파일 복사 경로로 악용
IPC$프로세스 간 통신(명명된 파이프)원격 서비스 제어·정보 조회의 통로

3. 동작 원리

SMB 확산 증거 흐름
그림 1. 445 연결 → 인증 → 공유 접근 → 원격 실행 순서로 남는 흔적

3-1. SMB 세션 수립 흐름

 클라이언트 192.168.10.20                          파일 서버 192.168.10.10:445
    │── TCP 3-Way Handshake ─────────────────────────→│
    │── Negotiate (지원 버전·기능 제시) ──────────────→│
    │←─ Negotiate Response (선택된 버전: 예 3.1.1) ────│
    │── Session Setup (NTLM 또는 Kerberos 인증) ─────→│
    │←─ Session Setup Response (성공/실패) ────────────│   ← 인증 결과
    │── Tree Connect  \\192.168.10.10\share ──────────→│   ← 어떤 공유에 접근?
    │←─ Tree Connect Response ─────────────────────────│
    │── Create / Read / Write / Close (파일 작업) ────→│   ← 무엇을 했나?
    │── Tree Disconnect / Logoff ─────────────────────→│

관제에서 중요한 단계는 Session Setup(누가), Tree Connect(어느 공유에), Create/Write(무엇을) 입니다. 각 메시지의 필드 해석은 (03. Wireshark 패킷 분석 시리즈에서 다룸)

3-2. SMB를 이용한 내부 확산 원리

 [장악된 PC-A]  탈취 계정/해시 보유
      │
      │ ① 445 접속, Session Setup (관리자 계정으로 인증)
      ↓
 [대상 PC-B]
      │ ② Tree Connect \\PC-B\ADMIN$   → 실행 파일 복사 (Write)
      │ ③ Tree Connect \\PC-B\IPC$     → 서비스 제어 파이프로 새 서비스 등록·시작
      ↓
 PC-B에서 복사된 파일이 서비스로 실행 → PC-B도 장악 → 다음 대상으로 반복

이 방식은 정상 관리 도구(원격 관리 유틸리티)의 동작 방식과 같습니다. 그래서 도구 이름이 아니라 "누가 어디에서 관리 공유를 쓰는가" 로 판단해야 합니다.


4. 실제 명령어 / 실습

실습 환경: 본인 소유 Linux VM (Rocky Linux 또는 Ubuntu), 인터페이스는 ens33을 예시로 사용합니다. Windows 없이 Samba(리눅스용 SMB 서버) 와 smbclient로 SMB 동작과 로그를 관찰합니다. 접속은 루프백에서만 합니다.

4-1. 설치와 공유 만들기

항목Rocky LinuxUbuntu
패키지samba samba-clientsamba smbclient
서비스 이름smbsmbd
로그 위치/var/log/samba//var/log/samba/
# Rocky
sudo dnf install -y samba samba-client tcpdump
# Ubuntu
sudo apt install -y samba smbclient tcpdump

# 공유 디렉터리와 테스트 계정
sudo mkdir -p /srv/labshare
sudo useradd -M -s /sbin/nologin smbtest
sudo smbpasswd -a smbtest          # Samba 전용 비밀번호 설정
sudo chown smbtest: /srv/labshare

# Rocky: SELinux 컨텍스트 지정
sudo chcon -t samba_share_t /srv/labshare

/etc/samba/smb.conf를 백업한 뒤, [global] 섹션에 아래 항목을 추가하고 파일 끝에 공유를 정의합니다.

[global]
   server min protocol = SMB2_02
   log level = 1 auth_audit:3
   interfaces = lo
   bind interfaces only = yes

[labshare]
   path = /srv/labshare
   valid users = smbtest
   read only = no
  • server min protocol = SMB2_02: SMB1 접속 거부 (최신 Samba 기본값과 같지만 명시적으로 확인)
  • auth_audit:3: 인증 성공·실패를 로그에 남김
  • interfaces = lo + bind interfaces only = yes: 실습용으로 루프백에서만 리슨
testparm -s                        # 문법 검사
sudo systemctl restart smb         # Ubuntu: sudo systemctl restart smbd
sudo ss -tlnp | grep -E ':(445|139) '

4-2. 접속과 캡처

# 터미널 1
sudo tcpdump -i lo -nn 'tcp port 445'
# 터미널 2: 공유 목록 → 공유 접속 → 파일 업로드
smbclient -L //127.0.0.1 -U smbtest
echo "lab" > /tmp/lab.txt
smbclient //127.0.0.1/labshare -U smbtest -c 'put /tmp/lab.txt lab.txt; ls'

# 일부러 틀린 비밀번호로 한 번 시도 (실패 로그 확인용)
smbclient -L //127.0.0.1 -U smbtest

📷 [실습 화면 삽입] smbclient -L 결과(labshare, IPC$ 표시)와 ls 결과

4-3. 로그와 세션 확인

sudo smbstatus                      # 현재 연결·세션·열린 파일
sudo grep -h "Auth:" /var/log/samba/log.* | tail -n 5

📷 [실습 화면 삽입] smbstatus 출력의 Protocol Version(SMB3_11 등)과 접속 공유, Auth: 로그의 성공/실패 줄

4-4. 정리

sudo systemctl disable --now smb          # Ubuntu: smbd (nmbd도 설치되었다면 함께 중지)
sudo smbpasswd -x smbtest && sudo userdel smbtest

5. 결과 확인

smbstatus (형식 예시(값은 환경마다 다름))

PID     Username     Group        Machine            Protocol Version  Encryption  Signing
-------------------------------------------------------------------------------------------
4412    smbtest      smbtest      127.0.0.1 (ipv4:127.0.0.1:50122)  SMB3_11  -  -

Service      pid     Machine       Connected at
------------------------------------------------
labshare     4412    127.0.0.1     Sat Sep 26 13:10:22 2026 KST
IPC$         4412    127.0.0.1     Sat Sep 26 13:10:22 2026 KST

인증 감사 로그 (형식 예시(값은 환경·버전마다 다름))

Auth: [SMB2,(null)] user [WORKGROUP]\[smbtest] at [Sat, 26 Sep 2026 13:10:22 KST] with [NTLMv2] status [NT_STATUS_OK] workstation [LAB] remote host [ipv4:127.0.0.1:50122] ...
Auth: [SMB2,(null)] user [WORKGROUP]\[smbtest] at [Sat, 26 Sep 2026 13:11:05 KST] with [NTLMv2] status [NT_STATUS_WRONG_PASSWORD] workstation [LAB] remote host [ipv4:127.0.0.1:50130] ...

점검 체크리스트

  • SMB1이 비활성(server min protocol)이고 협상 버전이 SMB2 이상인 것을 확인했다
  • tcpdump에서 445 연결 수립 후 데이터 교환을 확인했다
  • smbstatus로 사용자·출발지·접속 공유를 확인했다
  • 인증 성공(NT_STATUS_OK)과 실패(NT_STATUS_WRONG_PASSWORD) 로그를 비교했다
  • 공유 목록에 IPC$가 함께 보이는 이유를 이해했다
  • 실습 후 서비스 중지와 테스트 계정 삭제를 확인했다

6. 패킷 / 로그 분석

6-1. 판단 기준

관찰정상일 수 있는 경우의심해야 하는 경우
PC → 파일 서버 445일상적인 공유 폴더 사용업무 외 시간 대량 읽기(유출), 대량 쓰기·이름 변경(랜섬웨어)
PC → PC 445드묾(개인 공유 폴더 등 예외)한 PC가 짧은 시간 여러 PC의 445로 접속 = 확산·탐색 징후
C$/ADMIN$ 접근관리 서버·관리자 PC에서 배포 작업일반 사용자 PC에서 발생, 업무 외 시간
인증 실패 다수비밀번호 만료 후 매핑 드라이브 재시도여러 계정·여러 대상에 대한 연속 실패
SMB1 협상레거시 장비(구형 복합기 등) 식별 필요최신 PC가 SMB1로 접속 시도 (취약점 악용 도구 가능성)
외부 ↔ 445없어야 함인터넷에서 445 도달 가능 = 즉시 차단 대상

6-2. 확인 명령 (리눅스 측)

# 이 서버로 들어온 445 세션 출발지 집계
sudo ss -tn state established '( sport = :445 )' | awk 'NR>1{split($4,a,":"); print a[1]}' | sort | uniq -c

# 출발지별로 SYN을 보낸 '서로 다른 목적지 수' (게이트웨이·미러 포트에서 캡처 시)
sudo tcpdump -i ens33 -nn -c 300 'tcp dst port 445 and tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0' \
  | awk '{split($3,s,"."); split($5,d,"."); print s[1]"."s[2]"."s[3]"."s[4], d[1]"."d[2]"."d[3]"."d[4]}' \
  | sort -u | awk '{print $1}' | sort | uniq -c | sort -rn

# Samba 인증 실패만
sudo grep -h "Auth:" /var/log/samba/log.* | grep -v NT_STATUS_OK

6-3. Windows 측 이벤트 (참고)

실습 환경에 Windows는 없으므로 아래는 참고용입니다. 공유 접근 이벤트(5140, 5145)는 감사 정책에서 "파일 공유 감사", "세부 파일 공유 감사"를 켜야 기록됩니다.

이벤트 ID로그의미
4624 (Logon Type 3)Security네트워크 로그온 성공 (SMB 접속 인증 등)
4625Security로그온 실패
5140Security네트워크 공유 개체 접근 (공유 이름, 출발지 IP)
5145Security공유 내 파일 단위 접근 검사 (양이 많음)
7045System새 서비스 설치 (원격 서비스 등록 흔적)

"4624 Type 3 → 5140(ADMIN$) → 7045"가 같은 시간대, 같은 출발지로 이어지면 위 3-2의 원격 실행 패턴과 일치합니다.


7. 보안관제 관점

흔적이 남는 곳

위치남는 정보
내부 방화벽·세그먼트 경계PC ↔ PC, VLAN 간 445 세션 (내부 통제가 있을 때만)
IDS/IPSSMB1 취약점 악용 시그니처, 관리 공유 접근 룰 (06. 방화벽 · IDS/IPS 분석 시리즈에서 다룸)
Windows 보안 로그4624/4625/5140/5145/7045
Samba 서버 로그인증 감사(Auth:), 클라이언트별 로그
EDR원격 서비스 생성, 관리 공유 경유 파일 생성 프로세스

관제 시 핵심 포인트

  • 445는 외부에 절대 노출하지 않는 포트입니다(22편에서 정리). 외부 노출이 확인되면 분석보다 차단이 먼저입니다.
  • 내부에서는 "한 출발지 → 다수 목적지 445" 가 가장 강한 확산 신호입니다. 이 패턴의 스캔 판단 기준은 (05. 네트워크 스캔 · 공격 징후 분석 시리즈에서 다룸)
  • 랜섬웨어는 파일 서버에서 짧은 시간 대량 쓰기·이름 변경으로 나타납니다. 파일 서버의 SMB 쓰기량 급증은 즉시 확인 대상입니다.

한계와 오탐 주의

  • 백신·자산관리·패치 서버는 정상적으로 다수 PC의 445에 접속합니다. 관리 서버 목록을 예외 기준선으로 관리해야 합니다.
  • SMB3 암호화가 켜져 있으면 네트워크에서 파일명·경로가 보이지 않으므로, 엔드포인트·서버 로그가 필요합니다.
  • 내부 PC 간 트래픽은 경계 방화벽을 지나지 않으므로 로그 자체가 없을 수 있습니다. 내부 세그먼트 분리와 호스트 방화벽이 탐지 가능성을 좌우합니다.

8. 핵심 정리

  • SMB는 TCP 445(구형: 137~139)로 파일 공유와 원격 관리를 수행하며, 사내망의 일상 트래픽입니다.
  • SMB1은 비활성화하고, SMB2 이상에서 서명, SMB3에서 암호화를 활용합니다.
  • 공격자는 탈취 계정으로 ADMIN$에 파일 복사 → IPC$로 서비스 등록 방식으로 내부 확산하며, 이는 정상 관리 도구 동작과 같아 "누가 어디서"가 판단 기준입니다.
  • Windows에서는 4624(Type 3)·4625·5140·5145·7045, Samba에서는 auth_audit 로그가 핵심 흔적입니다.
  • 관제에서는 외부 노출, 한 출발지의 다수 445 접속, 일반 PC의 관리 공유 접근, 파일 서버 대량 쓰기를 우선 봅니다.

다음 글: 15. RDP와 3389 포트 — 원격 접속 노출 위험

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

0개의 댓글