SMB (Server Message Block)

1. SMB (Server Message Block)의 개요

SMB(Server Message Block)는 네트워크 상에서 파일, 프린터, 직렬 포트 등의 자원을 공유하기 위해 사용되는 애플리케이션 계층 프로토콜입니다. 주로 Windows 시스템 간 파일 공유에 널리 사용되며, 클라이언트-서버 모델 기반으로 동작합니다.

SMB는 원래 IBM에 의해 개발되었고, 이후 Microsoft가 이를 확장하여 Windows OS에 통합하면서 널리 퍼지게 되었습니다. 현재는 다양한 운영체제에서 사용되며, 특히 Linux/Unix에서는 Samba라는 구현체를 통해 SMB 프로토콜을 지원합니다.

2. SMB의 상세 설명

2.1 SMB의 기본 동작 방식

SMB는 클라이언트-서버 모델로 동작합니다. 클라이언트가 서버에게 특정 자원(파일, 프린터 등)에 대한 작업을 요청하면, 서버는 이를 처리하여 결과를 응답합니다.

기본 동작 흐름

  1. 클라이언트가 TCP 445 포트로 서버에 접속
  2. 인증 과정 수행 (Windows 인증 / 사용자 계정 / 도메인 기반)
  3. 공유 리소스(공유 폴더, 프린터 등) 목록 요청
  4. 사용자가 선택한 리소스에 접근 (열기, 읽기, 쓰기 등)
  5. 작업 완료 후 연결 종료

이 과정은 SMB의 여러 명령어(예: NT_CREATE, READ, WRITE, CLOSE)를 통해 이뤄지며, 실제로는 패킷 단위로 복잡한 통신이 이뤄집니다.

2.2 SMB의 내부 구조 및 구성요소

1) Session

  • 하나의 SMB 연결(Session)은 인증된 사용자에 의해 생성되며, 여러 공유 리소스를 동시에 사용할 수 있습니다.

2) Tree Connect

  • 클라이언트가 특정 공유 폴더에 접근 요청할 때 Tree ID(Tree Connect ID)가 생성됩니다.

3) File ID

  • 열려 있는 파일이나 리소스마다 고유한 파일 핸들(File ID)을 부여받습니다.

2.3 SMB 명령어 예시

SMB 통신은 여러 종류의 명령어로 구성됩니다.

명령어설명
NEGOTIATESMB 버전 협상
SESSION_SETUP사용자 인증 과정
TREE_CONNECT공유 리소스에 대한 연결 요청
CREATE파일 또는 디렉토리 열기
READ/WRITE파일 읽기 및 쓰기
CLOSE열린 파일 핸들 종료
LOGOFF세션 종료

이러한 명령어들은 SMB의 각 동작을 세부적으로 제어합니다.

2.4 SMB의 전송 계층

SMB는 전송 계층으로 주로 다음 두 가지를 사용합니다.

  • TCP 445: 현재 대부분의 SMB 통신은 이 포트를 사용 (Windows 2000 이상부터 SMB Direct 사용)
  • NetBIOS over TCP/IP (137~139): 과거 SMB 1.0 시절에 사용되던 포트 (현재는 비권장)

2.5 SMB 버전별 변화 상세

SMB 1.0 (CIFS)

  • 기능: 파일 공유, 잠금, 이름 조회 등 기본 기능
  • 문제점: 보안 취약점 많고, 통신량 과다

SMB 2.0~2.1

  • 개선점: 명령어 수 대폭 축소 (100+ → 19), 파일 핸들 효율화, 대용량 전송

SMB 3.0

  • 도입 기능:
    • End-to-End 암호화
    • SMB Multichannel: 여러 NIC를 통한 병렬 전송
    • SMB Direct (RDMA): 고속 전송
    • VSS 통합: 볼륨 섀도우 복사본 연동

SMB 3.1.1

  • 보안 강화:
    • Pre-authentication integrity
    • AES-128-GCM 암호화
    • Downgrade 공격 방지

2.6 SMB 인증 방식

  • NTLM: 오래된 인증 프로토콜, 보안에 취약
  • Kerberos: Active Directory 환경에서 사용하는 기본 인증 방식
  • Guest Access: 인증 없이 접근 가능 (보안상 비추천)
  • Signed SMB: 패킷 위조 방지를 위한 서명

기업 환경에서는 반드시 Kerberos + Signed SMB 조합을 권장합니다.

2.7 SMB와 Samba의 관계

  • Samba는 Linux/Unix에서 SMB 프로토콜을 구현한 오픈소스 소프트웨어입니다.
  • SMB 프로토콜을 구현해 Windows 네트워크와 파일 공유를 가능하게 만듭니다.
  • Samba는 다음의 핵심 데몬으로 구성됩니다.
    • smbd: 파일 및 프린터 공유 서비스 제공
    • nmbd: NetBIOS 이름 서비스 제공
    • winbindd: Windows 사용자/그룹 정보 통합

실제 구성 예시

2.8 SMB의 보안 설정 포인트

  • SMB 1.0 비활성화 (특히 Windows Server에서)
  • TCP 445 포트에 대한 방화벽 제어
  • 파일 공유 권한 최소화 (읽기 전용, 특정 사용자 제한)
  • Signed SMB 및 암호화 설정
  • 접근 로그 및 감사 기능 활성화

3. 정리

SMB(Server Message Block)는 로컬 네트워크에서 자원 공유를 간편하게 만들어 주는 강력한 프로토콜입니다. Windows 기반 네트워크 환경에서 표준처럼 활용되고 있으며, Samba를 통해 리눅스 환경에서도 융합 운용이 가능합니다.

그러나 SMB는 버전별 보안 이슈가 존재하기 때문에, 항상 최신 버전 사용과 보안 설정 강화가 필요합니다. 특히 기업 환경에서는 방화벽 설정, 접근 제어 정책, 인증 방식 등을 종합적으로 고려하여 안전하게 운용해야 합니다.

Leave a Comment