맨위로가기

서버 메시지 블록

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

서버 메시지 블록(SMB)은 컴퓨터 네트워크를 통해 파일 공유, 프린터 공유, 네트워크 탐색 및 프로세스 간 통신을 가능하게 하는 네트워크 프로토콜이다. IBM에서 처음 설계되었으며, 마이크로소프트가 널리 사용되는 버전을 개발했다. SMB는 여러 버전으로 발전해 왔으며, SMB1은 보안 및 효율성 문제로 인해 더 이상 사용되지 않고, SMB2, SMB3이 그 뒤를 잇고 있다. SMB는 클라이언트-서버 모델을 기반으로 하며, 다양한 운영 체제에서 구현된다. 보안 취약점이 존재하며, SMB2 및 SMB3에서는 보안 기능이 개선되었다.

더 읽어볼만한 페이지

  • 네트워크 파일 시스템 - 클라우드 스토리지
    클라우드 스토리지는 가상화 기술을 기반으로 데이터를 분산 저장하여 관리하며, 웹 또는 앱을 통해 파일 작업이 가능하고 용량 확장이 유연하며, 객체, 파일, 블록 스토리지의 세 가지 유형으로 발전했다.
  • 네트워크 파일 시스템 - 아마존 S3
    아마존 S3는 AWS에서 제공하는 객체 스토리지 서비스로, 데이터 액세스 빈도 및 성능 요구 사항에 따라 다양한 스토리지 클래스를 제공하며 높은 확장성, 고가용성, 낮은 지연 시간, 높은 내구성을 제공한다.
  • 응용 계층 프로토콜 - 실시간 전송 프로토콜
    실시간 전송 프로토콜(RTP)은 스트리밍 미디어의 실시간 전송을 위해 설계된 프로토콜로, IP 네트워크에서 오디오/비디오 전송의 표준으로 사용되며, 멀티미디어 데이터 전송, 타임스탬프, 순서 제어, QoS 피드백 등을 제공한다.
  • 응용 계층 프로토콜 - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • 네트워크 프로토콜 - UUCP
    UUCP는 유닉스 시스템 간 파일 복사, 원격 명령 실행, 이메일 및 유즈넷 뉴스 전송을 위한 프로토콜 및 프로그램 모음으로, 초기 인터넷 확장에 중요한 역할을 했으나 TCP/IP 기반 서비스 보편화로 사용이 감소했다.
  • 네트워크 프로토콜 - 프레임 릴레이
    프레임 릴레이는 LAN 간 또는 WAN 종단점 간 데이터 전송을 위한 고속 패킷 교환 방식 통신 프로토콜로, X.25 프로토콜을 간소화하여 속도를 높이고, 영구 가상 회선을 통해 안정적인 연결을 제공하며, 서비스 품질 설정을 통해 프레임 우선순위를 지정할 수 있었으나, 현재는 다른 기술에 밀려 사용이 감소하고 있다.
서버 메시지 블록
프로토콜 개요
이름서버 메시지 블록 (Server Message Block, SMB)
다른 이름공통 인터넷 파일 시스템 (Common Internet File System, CIFS)
종류네트워크 프로토콜
목적네트워크 상에서 파일, 프린터, 직렬 포트, 그리고 통신을 위한 다양한 서비스를 공유하는 데 사용됨
특징응용층 네트워크 프로토콜
클라이언트-서버 모델 기반
다양한 전송 프로토콜 지원 (TCP/IP, NetBIOS over TCP/IP)
인증 및 권한 부여 기능 포함
기술 정보
동작 방식클라이언트가 서버에 연결을 설정하고, 특정 파일이나 자원에 대한 접근을 요청하면, 서버는 요청을 확인하고 적절한 권한이 있는 경우 접근을 허용함.
사용 포트137 (UDP): NetBIOS 이름 서비스
138 (UDP): NetBIOS 데이터그램 서비스
139 (TCP): NetBIOS 세션 서비스
445 (TCP): SMB 직접 호스팅 (SMB over TCP)
버전SMB 1.0 (CIFS)
SMB 2.0
SMB 2.1
SMB 3.0
SMB 3.0.2
SMB 3.1.1
역사
최초 개발IBM
주요 개발 및 발전마이크로소프트에 의해 발전
CIFS (Common Internet File System)로 확장
지속적인 버전 업데이트를 통해 성능 및 보안 강화
활용
주요 사용처윈도우 네트워크 파일 공유
프린터 공유
네트워크 드라이브 연결
서버 간 통신
기타 운영 체제 지원리눅스 (Samba를 통해 지원)
macOS
유닉스
보안
보안 고려 사항SMB 1.0의 보안 취약점 (WannaCry 랜섬웨어 공격의 주요 경로)
최신 버전의 SMB 프로토콜 사용 권장 (SMB 2.0 이상)
강력한 인증 및 암호화 설정
관련 기술
관련 기술NetBIOS
NFS (Network File System)
Samba
추가 정보
참고 자료Microsoft SMB Protocol and CIFS Protocol Overview

2. 역사

SMB(Server Message Block) 프로토콜은 1980년대IBM에서 MS-DOS의 로컬 파일 접근 기능을 네트워크 환경으로 확장하려는 목적으로 처음 설계되었다.[102][16] 이후 마이크로소프트가 이를 채택하여 랜 매니저, 윈도우 포 워크그룹 등 자사 운영체제에 통합하고 발전시키면서 널리 사용되기 시작했다.[102][17][18][19]

1996년 마이크로소프트는 기존 SMB를 CIFS(Common Internet File System)로 명칭을 변경하고 기능 확장을 시도했으나,[72] 초기 버전(SMB1/CIFS)은 통신 비효율성[24]과 보안 취약점[20] 등의 문제를 안고 있었다. 이러한 문제로 인해 SMB 1.0은 점차 사용이 중단되었고,[25] 윈도우 10 버전 1709 이후 버전에서는 기본적으로 비활성화되었다.[26]

2006년 윈도우 비스타와 함께 등장한 SMB 2.0은 기존 프로토콜의 문제점을 대폭 개선한 새로운 버전이다.[103][29] 명령어 수를 줄이고 파이프라인 처리, 요청 결합 등의 기능을 도입하여 성능과 효율성을 크게 높였다.[11][91] 이후 SMB 2.1[104][40]을 거쳐 윈도우 8과 함께 도입된 SMB 3.0[105][41]가상화 환경 지원 강화, RDMA를 통한 성능 향상(SMB 다이렉트), 다중 네트워크 경로 사용(SMB 멀티채널), 연결 안정성 강화(SMB 투명 장애 조치), 종단간 암호화[47][48][95] 등 중요한 기능들이 추가되었다.[42] SMB 3.0.2[106][107]와 SMB 3.1.1[108][53]은 보안 및 성능을 더욱 개선하며 현재에 이르고 있다.

2. 1. SMB / CIFS / SMB1

SMB(Server Message Block)는 초기에 IBM의 배리 파이겐바움(Barry Feigenbaum)이 MS-DOS의 로컬 파일 접근(인터럽트 21h) 기능을 네트워크 환경으로 확장하기 위해 설계했다.[102][16] 이후 마이크로소프트가 이 프로토콜을 받아들여 상당 부분 수정하고 랜 매니저, 윈도우 포 워크그룹 등 자사 운영 체제에 통합하면서 널리 사용되기 시작했다.[102][17][18][19]

1996년, 썬 마이크로시스템즈가 WebNFS를 발표하자[27], 마이크로소프트는 이에 대응하여 기존 SMB 프로토콜의 이름을 CIFS(Common Internet File System)로 변경하고 기능 확장을 시도했다.[72] 이 시기에는 심볼릭 링크, 하드 링크 지원, 더 큰 파일 크기 처리 능력 향상, 그리고 NetBIOS 없이 TCP 포트 445를 통한 직접 연결 지원 등이 모색되었으나, 당시 직접 연결 기능은 실험적인 수준에 머물렀다.[28] 마이크로소프트는 CIFS 관련 일부 규격을 IETF에 인터넷 초안 형태로 제출하기도 했지만, 이는 공식 표준으로 이어지지 못하고 만료되었다.[28]

SMB 1.0(또는 SMB1)은 이러한 초기 SMB와 CIFS 시기의 기술적 특징들을 아우르는 버전으로 간주된다. 윈도우 2000 이후 버전에서는 TCP 포트 445를 이용한 직접 호스트 SMB 통신이 공식적으로 구현되었다.[23] 그러나 SMB 1.0은 통신 과정에서 많은 메시지를 주고받는 비효율성으로 인해 특히 WAN 환경에서 성능 저하 문제가 있었고,[24] 초기 인증 방식 등에서 보안 취약점도 발견되었다.[20]

이러한 문제들로 인해 마이크로소프트는 2013년 6월 SMB 1.0을 공식적으로 사용 중단(deprecated)한다고 발표했으며,[25] 윈도우 서버 2016윈도우 10 버전 1709부터는 기본적으로 설치되지 않도록 조치했다.[26] 현재는 SMB 1.0 이전의 다양한 버전을 명확히 구분하기보다는 'SMB1' 또는 'SMB1/CIFS'와 같이 통칭하여 부르는 경우가 많다.[77][70]

2. 1. 1. 초기 SMB

SMB는 1982년 또는 1983년에 IBM의 배리 파이겐바움(Barry Feigenbaum)이 설계했다.[72][73][102] 이는 MS-DOS의 로컬 파일 접근에 사용되던 인터럽트 21h (INT 21h) 기능을 네트워크상의 파일 시스템에서도 사용할 수 있도록 전환하는 것을 목표로 했다.[102][73] IBM은 1984년 IBM PC DOS에 SMB를 처음 탑재했다.[72]

마이크로소프트는 SMB 프로토콜에 상당한 수정을 가했으며, 가장 널리 사용되는 버전을 만드는 데 기여했다.[102] 마이크로소프트는 1985년에 출시한 Microsoft Networks (MS-NET)에 SMB를 처음 탑재했고,[74] 1988년경에는 3Com과 공동 개발한 랜 매니저에 이를 적용했다.[72] 이후 1990년경 3Com과 함께 OS/2용 SMB 개발을 시작하여 랜 매니저 제품에 병합했으며,[102] 1992년경 윈도우 포 워크그룹에 탑재하는 등[72] 자사의 여러 운영 체제에 SMB를 포함시키고 기능을 계속 추가해 나갔다.[102]

2. 1. 2. CIFS

1996년, 썬 마이크로시스템즈가 WebNFS를 발표하자[27], 마이크로소프트는 기존의 SMB를 CIFS(Common Internet File System)로 이름을 바꾸고[72] 기능을 추가하기 시작했다. CIFS는 Windows NT 3.51, Windows NT 4.0, Windows 98에 탑재되었다.[75]

마이크로소프트는 CIFS를 여러 운영체제에서 사용할 수 있고 특정 전송 방식에 얽매이지 않는 파일 공유 프로토콜로 정의를 개선했다. 특히 TCP/IP 환경에서 NetBIOS 없이도 작동할 수 있도록 "NetBIOS Transport over TCP" 방식과 함께 TCP 포트 445를 직접 사용하는 "TCP Transport" 방식을 제시했다.[75] 하지만 "TCP Transport" 방식은 당시에는 실험적인 시도였으며[28], 실제로는 이후 개선을 거쳐 Windows 2000에서 "Microsoft Direct Hosting of SMB"라는 이름으로 구현되었다.[77]

또한 CIFS에는 심볼릭 링크, 하드 링크, 더 큰 파일 크기 지원, NTLMv2 인증 프로토콜 지원 등의 새로운 기능이 추가되었다.[28] CIFS는 "NT LM 0.12"라는 다이얼렉트(dialect, 특정 버전의 프로토콜 규약)를 사용한다.

마이크로소프트는 1997년, CIFS의 일부 기술 명세를 인터넷 초안 형태로 IETF에 제출하기도 했으나[28][76], 이 문서들은 1998년까지 모두 유효 기간이 만료되었다.

2. 1. 3. SMB 1.0

SMB 1.0(또는 SMB1)은 1983년 초 IBM의 배리 파이겐바움(Barry Feigenbaum)이 DOS의 INT 21h 로컬 파일 접근 기능을 네트워크 파일 시스템으로 확장하기 위해 처음 설계했다.[16][102] 마이크로소프트는 이 초기 설계를 바탕으로 상당한 수정을 가했으며, 1990년경 3Com과 함께 OS/2용으로 개발하던 랜 매니저 운영 체제에 SMB 지원을 포함시켰다.[17][18][19] 이후 윈도우 포 워크그룹(1992년경) 및 후속 윈도우 버전들에서 지속적으로 프로토콜 기능을 개선하고 추가했다.

초기 SMB 사양은 IBM의 "LAN Manager" 암호를 사용하는 LAN Manager 인증 방식을 요구했는데, 이는 DES를 취약한 방식으로 구현하여 암호 해독이 가능한 문제가 있었다.[20] 이후 Kerberos 인증 방식이 추가되었다. 윈도우 도메인 로그온 프로토콜은 초기에 미국의 수출 제한 정책 때문에 미국 외부에서는 40비트 암호화를 사용해야 했으나, 1996년 빌 클린턴 대통령이 행정 명령 13026에 서명하면서[22] 더 강력한 128비트 암호화 사용 제한이 해제되었다.[21]

SMB 1.0은 원래 NetBIOS 프레임(IEEE 802.2 위에서 동작)을 기반으로 설계되었으나, 이후 IPX/SPX를 통한 NetBIOS(NBX)와 TCP/IP를 통한 NetBIOS(NetBT) 환경에도 적용되었다. 윈도우 2000에서는 명칭을 다시 SMB 1.0으로 사용하며 Kerberos 인증, 액티브 디렉터리 지원과 함께[72][77], TCP 포트 445번을 직접 사용하여 SMB 통신을 하는 "직접 호스트 SMB" 기능이 도입되었다.[23][77] 이는 NetBT의 세션 서비스와 유사한 얇은 계층을 TCP 위에 추가한 형태이다.[23] 윈도우 서버 2003 및 구형 NAS 장치들은 기본적으로 SMB 1.0을 사용한다.

SMB 1.0은 통신 과정에서 많은 메시지를 주고받는(chatty) 프로토콜로, 응답 속도가 빠른 LAN 환경에서는 큰 문제가 되지 않지만, 지연 시간이 긴 WAN 환경에서는 왕복 핸드셰이크 과정 때문에 성능이 매우 느려지는 단점이 있다. 이러한 비효율성을 개선하기 위해 WAN 최적화 제품(예: 리버베드, 실버 피크, 시스코 제공)을 사용하거나, 더 나은 방법으로 최신 버전의 SMB로 업그레이드하는 것이 권장된다. SMB 1.0 트래픽은 와이어샤크와 같은 네트워크 분석 도구를 사용하거나, 윈도우 서버 2016에 포함된 감사 도구를 통해 식별하고 추적할 수 있다.[24]

마이크로소프트는 보안 및 성능상의 이유로 2013년 6월에 SMB 1.0을 공식적으로 사용 중단(deprecated)한다고 발표했으며,[25] 윈도우 서버 2016윈도우 10 버전 1709부터는 기본적으로 설치되지 않는다.[26]

2. 1. 4. 종언

SMB 1.0(또는 SMB1)은 1983년 초 IBM의 배리 파이겐바움(Barry Feigenbaum)이 DOS의 로컬 파일 접근(INT 21h)을 네트워크 파일 시스템으로 확장하기 위해 처음 설계했다.[16] 이후 마이크로소프트는 이 프로토콜에 상당한 수정을 가했으며, 1990년경 3Com과 함께 OS/2용 LAN Manager 운영 체제 개발 시 SMB 지원을 포함시켰다.[17][18][19] 마이크로소프트는 Windows for Workgroups(1992년경) 및 이후 버전의 Windows에서도 프로토콜 기능을 계속 추가했다. 초기 LAN Manager 인증은 IBM "LAN Manager" 암호를 사용해야 한다는 레거시 SMB 사양 요구 사항에 기반했지만, DES를 결함 있는 방식으로 구현하여 암호 해독에 취약했다.[20] 이후 Kerberos 인증이 추가되었다. Windows 도메인 로그온 프로토콜은 초기에 미국의 수출 제한으로 인해 해외에서는 40비트 암호화를 사용했으나, 1996년 빌 클린턴 대통령이 행정명령 13026에 서명하면서 128비트 암호화 사용 제한이 해제되었다.[21][22]

SMB1은 원래 NetBIOS 프레임(IEEE 802.2를 통한 NetBIOS)에서 작동하도록 설계되었고, 이후 IPX/SPX를 통한 NetBIOS(NBX) 및 TCP/IP를 통한 NetBIOS(NetBT)에도 적용되었다. Windows 2000부터는 TCP 포트 445를 직접 사용하는 "직접 호스트 SMB" 기능이 도입되었지만, 여전히 TCP와 SMB 사이에 얇은 계층(NetBT 세션 서비스와 유사)이 존재한다.[23] Windows Server 2003 및 레거시 NAS 장치는 기본적으로 SMB1을 사용했다.

SMB1은 통신량이 많아 대기 시간이 짧은 근거리 통신망 (LAN)에서는 큰 문제가 없었으나, 왕복 핸드셰이크 방식으로 인해 광대역 통신망 (WAN)에서는 높은 대기 시간으로 인해 속도가 매우 느려지는 단점이 있었다. 이후 버전의 SMB는 핸드셰이크 교환 횟수를 줄여 이 문제를 개선했다. SMB1의 비효율성을 완화하기 위해 WAN 최적화 제품(리버베드, 실버 피크, 시스코 등)을 사용하기도 했지만, 근본적인 해결책은 최신 버전의 SMB로 업그레이드하는 것이었다. SMB1 트래픽은 와이어샤크 같은 네트워크 분석 도구로 식별할 수 있으며, 마이크로소프트는 Windows Server 2016에 SMB1 사용 장치를 추적하는 감사 도구를 제공했다.[24]

기술 발전과 보안 요구 사항 증가로 인해 SMB1은 암호화 강도와 통신 효율성 면에서 더 이상 권장되지 않게 되었고, 결국 단계적으로 사용이 중단되었다. 주요 중단 과정은 다음과 같다.

연도주체내용
2012년마이크로소프트Storage Developer Conference에서 SMB1 비활성화 제안[78]
2013년6월마이크로소프트SMB1을 더 이상 사용하지 않는 것으로 공식 표시[25], Windows Server 2012 R2 이후 OS에서 사용 비권장 정의[79]
2014년마이크로소프트향후 Windows에서 기능 삭제 방침 공표
2016년마이크로소프트SMB1 사용 중지 재차 촉구[80]
2017년1월미국 국토안보부 US-CERT보안 모범 사례로 SMB1 비활성화 촉구[81]
2017년9월리눅스 커널4.13 버전부터 기본 프로토콜을 SMB3으로 변경하고 SMB1 비활성화[82][83]
2017년9월마이크로소프트Windows 10 버전 1709에서 SMB1 기본 비활성화[84] (설정 변경으로 활성화 가능[85])
2018년8월FreeNAS11.1-U6 버전부터 SMB1 기본 비활성화[86]
2019년9월Samba4.11 버전부터 SMB1 기본 비활성화[87]


2. 2. SMB 2.0

마이크로소프트는 2006년 윈도우 비스타윈도우 서버 2008을 출시하면서 완전히 새롭게 설계된 버전의 프로토콜인 SMB 2.0(또는 SMB2)을 도입했다.[103][29] 이 프로토콜은 마이크로소프트의 독점 기술이지만, 다른 운영체제와의 상호 운용성을 위해 사양이 공개되었다.[30]

SMB2는 기존 SMB 1.0 프로토콜의 비효율성, 소위 '채터리(chattiness)' 문제를 해결하기 위해 명령어와 하위 명령어의 수를 100개 이상에서 19개로 대폭 줄였다.[11][90] 또한 파이프라인 처리, 여러 요청을 하나로 묶는 기능, 더 큰 버퍼 지원 등을 통해 클라이언트와 서버 간의 통신 횟수를 줄이고 지연 시간이 긴 환경이나 고속 네트워크 환경에서의 성능을 크게 향상시켰다.[11][91] 이 외에도 '내구성 있는 파일 핸들'을 도입하여 네트워크 연결이 불안정한 환경에서의 안정성을 높였고, 심볼릭 링크 지원, 파일 속성 캐싱, HMAC SHA-256을 이용한 메시지 서명 강화, 확장성 개선 등 다양한 기능이 추가되거나 향상되었다.[11][92] 기존 SMB1의 16비트 데이터 크기 제한 역시 32비트 또는 64비트로 확장되어(파일 핸들은 128비트) 대용량 파일 전송 효율을 높였다.[11]

SMB 2.0 이후 버전들(SMB 2.1, SMB 3.x 등)은 모두 SMB2 프로토콜을 기반으로 한 확장(다이얼렉트)으로 분류된다.[88][89] 마이크로소프트는 SMB2 도입을 통해 지적 재산권을 명확히 하고, IBM에서 시작되어 여러 시스템을 거치며 복잡해진 SMB1과의 기술적 단절을 이루는 계기가 되었다.[72]

윈도우 비스타/서버 2008 및 이후 버전의 윈도우 운영체제는 SMB2를 지원하는 다른 시스템과 통신할 때 우선적으로 SMB2를 사용하며, 이전 버전 윈도우나 NAS 장비와의 호환성을 위해 SMB1도 계속 지원한다. Samba는 버전 3.5부터 SMB2를 지원하기 시작했으며,[31][32] 애플은 OS X 10.9 "Mavericks"부터 SMB2를 기본 파일 공유 프로토콜로 채택했다.[34] 리눅스 커널 역시 버전 3.7부터 CIFS 클라이언트를 통해 SMB2를 지원한다.[39]

2. 2. 1. SMB 2.0.0

마이크로소프트는 2006년 윈도우 비스타윈도우 서버 2008을 출시하면서 새로운 버전의 프로토콜인 SMB 2.0(SMB2)을 선보였다.[103][29] 이 프로토콜은 마이크로소프트의 독점 기술이지만, 다른 운영체제와의 상호 운용성을 위해 사양이 공개되었다.[30]

SMB2는 기존 SMB 1.0 프로토콜의 비효율성, 소위 '채터리(chattiness)' 문제를 개선하기 위해 명령어의 수를 100개 이상에서 19개로 대폭 줄였다.[11] 또한 다음과 같은 주요 개선 사항을 포함한다.

  • 파이프라인 메커니즘: 이전 요청에 대한 응답을 기다리지 않고 다음 요청을 보낼 수 있게 하여, 지연 시간이 긴 네트워크 환경에서의 성능을 향상시켰다.[11]
  • 요청 결합: 여러 작업을 하나의 요청으로 묶어 클라이언트와 서버 간의 왕복 횟수를 줄여 성능을 개선했다. SMB1에도 유사한 기능(AndX)이 있었으나 실제 마이크로소프트 클라이언트에서는 거의 사용되지 않았다.[11]
  • 내구성 있는 파일 핸들: 무선 네트워크 등에서 연결이 잠시 끊어지더라도 서버와의 연결 상태를 유지하여, 세션을 다시 협상하는 데 드는 부담을 줄였다.
  • 심볼릭 링크 지원: 파일 시스템의 심볼릭 링크를 지원한다.[11]
  • 기타 개선: 파일 속성 캐싱 기능 추가, HMAC SHA-256 해싱 알고리즘을 이용한 메시지 서명 강화, 서버당 동시 접속 가능한 사용자, 공유 폴더, 열린 파일 수를 늘려 확장성을 높였다.[11]
  • 데이터 크기 제한 완화: SMB1의 16비트 데이터 크기 제한(최대 64K 블록)을 넘어, 32비트 또는 64비트 저장 공간 필드와 128비트 파일 핸들을 사용하여 대용량 파일 전송 성능을 크게 향상시켰다.[11]


윈도우 비스타/서버 2008 및 이후 버전의 윈도우는 SMB2를 지원하는 다른 컴퓨터와 통신할 때 우선적으로 SMB2를 사용한다. 이전 버전의 윈도우나 다양한 NAS 장비와의 호환성을 위해서는 여전히 SMB1이 사용된다. 오픈 소스 진영에서는 Samba 3.5 버전부터 SMB2를 실험적으로 지원하기 시작했으며,[31] Samba 3.6 버전에서는 윈도우 할당량 관리 도구를 통한 사용자 할당량 수정 기능을 제외하고는 SMB2를 거의 완전하게 지원한다.[32]

SMB2의 도입은 기존 SMB1 구현의 복잡성을 상당 부분 해소하는 계기가 되었다. IBM이 처음 설계하고 이후 여러 운영체제(Xenix, OS/2, VMS 등)에서 사용되며 역설계와 부분적 표준화 과정을 거친 SMB1은 유니코드 지원 등이 나중에 추가되면서 구현이 복잡해졌다. 반면 SMB2는 유니코드 지원을 기본으로 요구하는 등 구조를 단순화하여 프로토콜 구현의 부담을 줄였다. 마이크로소프트는 NFSv4의 IETF 표준화에 대응하여 SMB2 사양을 인터넷 초안으로 제출하기도 했으나, 공식 표준으로 인정받지는 못하고 만료되었다.[33]

애플은 OS X 10.9 "Mavericks"부터 자체 파일 공유 프로토콜인 AFP 대신 SMB2를 기본 프로토콜로 채택했다.[34] 이는 Samba 프로젝트가 GPLv3 라이선스를 채택하자 애플이 자체 개발한 SMB 구현(SMBX)으로 전환한 것과 관련이 있는데,[37][38] 이 과정에서 일부 호환성 문제가 발생하기도 했다.[35][36] 리눅스 커널에서는 버전 3.7부터 CIFS 클라이언트 파일 시스템을 통해 SMB2를 지원하기 시작했다.[39]

최초의 SMB 2.0.0 버전은 일부 상호 운용성 문제를 가지고 있었으며, 이후 이를 개선한 SMB 2.0.2 버전으로 대체되어 사실상 폐지되었다.[93]

2. 2. 2. SMB 2.0.2

윈도우 비스타 서비스 팩 1(SP1)과 윈도우 서버 2008에 탑재되었다. SMB 2.0.2는 이전 버전인 2.0.0에서 발생했던 상호 운용성 문제를 개선한 버전이다.

2. 2. 3. SMB 2.1

SMB 2.1은 윈도우 7윈도우 서버 2008 R2에 도입된 버전이다.[104][40] 이 버전은 새로운 기회적 잠금(Oplock) 메커니즘을 도입하여 약간의 성능 향상을 이루었다.[104][40] 특히, 여러 클라이언트가 동시에 파일에 접근할 경우 SMB 2.0.2에 비해 파일 전송 속도가 약 3.5배 향상되었다.[94]

2. 3. SMB 3.0

SMB 3.0(이전 명칭 SMB 2.2)[105][41][96]윈도우 8[105][41]윈도우 서버 2012[105][41]와 함께 도입되었다. 이 버전은 특히 가상화된 데이터 센터 환경에서 기능을 추가하고 SMB2 성능을 개선하기 위한 중요한 변경 사항들을 포함한다.[42] 주요 기능은 다음과 같다:

2. 3. 1. SMB 3.0.2

SMB 3.0.2(당시 3.02로 알려짐)는 윈도우 8.1과 윈도우 서버 2012 R2와 함께 도입되었다.[106][107][49][50][97] 이 버전은 보안 강화를 위해 이전 SMB 버전 1을 선택적으로 비활성화할 수 있는 기능을 제공한다.[51][52] 또한 투명 페일오버(Transparent Failover) 사용 시 자동 리밸런싱(Automatic Rebalancing) 기능과 SMB 다이렉트(SMB Direct) 성능 향상 등 일부 기능 업데이트가 이루어졌다.[97]

2. 3. 2. SMB 3.1.1

SMB 3.1.1은 윈도우 10윈도우 서버 2016과 함께 도입되었다.[108][53] 이 버전은 기존 SMB3에 추가된 AES-128 CCM 모드 암호화 외에 AES-128 GCM 암호화를 지원한다. 또한 SHA-512 해시를 사용하여 사전 인증 무결성 검사를 구현한다. SMB 3.1.1은 이를 지원하는 SMB 버전을 사용하는 클라이언트에 연결할 때 보안 협상을 필수적으로 수행하도록 한다.[54] 다이얼렉트(Dialect)는 3.1.1을 유지하며, 이후 몇 가지 기능이 추가되었다.[89][98]

3. 기능

서버 메시지 블록(SMB)은 파일 공유, 프린터 공유, 네트워크 탐색, 그리고 프로세스 간 통신(명명된 파이프를 통해)을 컴퓨터 네트워크를 통해 가능하게 하는 프로토콜이다. SMB는 마이크로소프트의 분산 파일 시스템 구현의 기반이 되기도 한다.

SMB는 세션 계층 네트워크 계층의 최상위에서 동작하며, 여러 방식으로 구현될 수 있다. 현대 시스템에서는 주로 TCP 포트 445를 통해 직접 통신한다.[100] 과거에는 넷바이오스 API를 통해 다양한 전송 계층에서 실행되기도 했다.[101]

SMB 통신 방식 및 관련 포트
통신 방식프로토콜포트
직접 통신TCPTCP 445
NetBIOS over TCP/IP (NetBT)UDP / TCPUDP 137, 138 및 TCP 137, 139
레거시 프로토콜NBF, IPX/SPX해당 프로토콜별 포트 (현재 거의 사용되지 않음)



SMB는 원래 NetBIOS over IEEE 802.2 (NBF) 및 IPX/SPX에서 작동했으며, 이후 NetBIOS over TCP/IP(NetBT)에서도 사용되었지만, 마이크로소프트는 NBF, IPX/SPX, NetBT 프로토콜을 점차 사용 중단했다. 현재는 주로 TCPIP에 의존하여 공용 인터넷을 포함한 복잡한 상호 연결된 네트워크에서도 파일 공유를 가능하게 한다.

마이크로소프트 윈도우 환경에서는 두 개의 윈도우 서비스가 SMB 기능을 담당한다.


  • '''서버 서비스''' (ID: LanmanServer): 공유 리소스를 제공하는 역할을 한다.
  • '''워크스테이션 서비스''' (ID: LanmanWorkstation): 컴퓨터 이름을 유지 관리하고 다른 컴퓨터의 공유 리소스에 접근하는 기능을 지원한다.[2]


사용자 인증 방식은 네트워크 환경에 따라 다르다. 윈도우 도메인 환경에서는 액티브 디렉토리에 대해 사용자를 인증하기 위해 Kerberos 프로토콜을 사용한다. 반면, 더 간단한 피어 투 피어 네트워크에서는 NTLM 프로토콜을 사용한다.

보안 강화를 위해 Windows NT 4.0 SP3 버전부터는 SMB 메시지에 디지털 서명을 추가하여 일부 중간자 공격을 방지하는 기능이 도입되었다.[5][6][7] 이 SMB 서명 기능은 들어오는 연결("LanmanServer" 서비스)과 나가는 연결("LanmanWorkstation" 서비스)에 대해 각각 별도로 설정할 수 있다. Windows Server 2003 이상 버전의 도메인 컨트롤러는 기본적으로 서명되지 않은 들어오는 연결을 허용하지 않도록 설정되어 있다.[8] 이 때문에 SMB 서명을 지원하지 않는 초기 버전의 윈도우(예: Windows 9x)는 Windows Server 2003 도메인 컨트롤러에 연결하지 못하는 문제가 발생할 수 있다.[6]

또한 SMB는 성능 향상을 위해 파일에 대한 기회적 잠금 기능을 지원하여 클라이언트의 파일 캐싱 효율을 높인다.

3. 1. 기회적 잠금 (Opportunistic Locking)

(내용 없음 - 하위 섹션에서 상세 내용을 다루므로 중복을 피해 생략)

3. 1. 1. 기회적 잠금의 유형

SMB 프로토콜에서 기회 잠금(OpLock)은 클라이언트가 네트워크 파일을 캐싱하는 것을 제어하여 성능을 향상시키기 위해 설계된 메커니즘이다.[9] 일반적인 잠금과 달리, 기회 잠금은 엄격한 파일 잠금이 아니며 상호 배타성을 제공하기 위해 사용되지는 않는다.

기회 잠금에는 네 가지 주요 유형이 있다.

  • '''일괄 잠금''' (Batch OpLock): 원래 DOS 일괄 파일 실행 작업에서 파일을 짧은 시간 안에 여러 번 열고 닫는 특정 동작을 지원하기 위해 만들어졌다. 이는 성능 문제를 일으킬 수 있는데, 일괄 잠금을 사용하면 클라이언트는 파일 닫기 요청 전송을 잠시 미루고, 이후 같은 파일을 다시 여는 요청이 오면 두 요청을 상쇄시켜 성능을 개선한다.[10]
  • '''레벨-1 OpLock / 배타적 잠금''' (Level 1 OpLock / Exclusive Lock): 애플리케이션이 다른 프로세스나 클라이언트에 의해 열리지 않은 SMB 서버의 파일을 '공유 모드'로 열 때, 클라이언트는 서버로부터 배타적 OpLock을 받을 수 있다. 이는 클라이언트가 해당 파일에 접근하는 유일한 프로세스라고 가정하고, 서버에 즉시 알리지 않고 파일 변경 사항을 로컬 캐시에 저장할 수 있게 한다. 파일 읽기 및 쓰기에 필요한 네트워크 통신 횟수가 줄어들어 성능이 향상된다. 만약 다른 클라이언트나 프로세스가 같은 파일을 열려고 하면, 서버는 첫 번째 클라이언트에게 '브레이크(Break)' 또는 '취소(Revocation)' 메시지를 보내 배타적 잠금을 해제하도록 요청한다. 그러면 클라이언트는 캐시된 변경 사항을 서버에 모두 저장(플러시)해야 한다.
  • '''레벨-2 OpLock''' (Level 2 OpLock): 클라이언트가 배타적 OpLock을 가지고 있을 때 다른 클라이언트가 해당 파일을 열면, 첫 번째 클라이언트는 배타적 OpLock을 포기해야 한다. 대신 서버로부터 '레벨 2 OpLock'을 받을 수 있다. 레벨 2 OpLock은 파일 읽기 작업의 캐싱은 허용하지만, 쓰기 작업의 캐싱은 허용하지 않는다.
  • '''필터 OpLock''' (Filter OpLock): 윈도우 NT 4.0에 추가된 잠금 유형이다. 레벨 2 OpLock과 유사하게 여러 클라이언트의 읽기를 허용하지만, 파일 열기와 잠금 획득 사이의 공유 모드 충돌을 방지하는 기능이 추가되었다. 마이크로소프트는 여러 클라이언트의 동시 읽기가 중요하고 다른 상황에서 레벨 2 OpLock을 사용할 경우에만 필터 OpLock 사용을 권장한다. 필터 OpLock을 가진 클라이언트는 실제로 파일에 대한 배타적 잠금을 보유하는 것이 아니며, 다른 클라이언트가 잠금과 호환되지 않는 방식으로 파일에 접근하려고 할 때 '브레이크' 알림을 받는다. 다른 클라이언트의 요청은 브레이크가 처리될 때까지 대기 상태가 된다.


'''브레이크''' (Break): 일반적인 SMB 프로토콜 동작과 달리, 브레이크 요청은 서버에서 클라이언트로 전송될 수 있다. 이는 클라이언트가 보유한 OpLock이 더 이상 유효하지 않음을 알리는 신호이다. 예를 들어, 다른 클라이언트가 기존 OpLock을 무효화하는 방식으로 파일을 열려고 할 때 발생한다. OpLock 브레이크를 받은 클라이언트(특히 일괄 또는 배타적 OpLock의 경우)는 로컬에 캐시된 변경 사항이 있다면 이를 서버로 모두 전송하고, 브레이크 요청을 승인해야 한다. 서버는 이 승인을 받은 후에야 두 번째 클라이언트의 요청에 일관성 있게 응답할 수 있다.

3. 2. 성능

SMB 프로토콜을 사용하면 네트워크의 브로드캐스트 트래픽이 상당히 증가한다고 알려져 있지만, SMB 자체는 브로드캐스트를 사용하지 않는다. SMB와 관련된 브로드캐스트 문제는 실제로는 NetBIOS의 서비스 위치 프로토콜에서 비롯된다. 기본적으로 윈도우 NT 4.0 서버와 같은 구형 시스템은 NetBIOS를 사용하여 네트워크 상의 다른 컴퓨터에게 자신의 서비스를 알리고 다른 컴퓨터의 서비스를 찾았다. NetBIOS는 특정 호스트에서 사용 가능한 서비스를 주기적인 간격으로 브로드캐스트하는 방식으로 작동한다. 이는 호스트 수가 적은 네트워크에서는 일반적으로 큰 문제가 되지 않지만, 네트워크의 호스트 수가 증가하면 브로드캐스트 트래픽 증가로 인해 성능 문제를 일으킬 수 있다.

이 문제를 해결하기 위해 WINS나 DNS와 같은 이름 확인 인프라를 구현할 수 있다. WINS는 윈도우 NT 4.0 네트워크에서 사용된 독점적 해결책이었지만, 네트워크 설계 및 유지 관리에 복잡성을 더하는 단점이 있었다.

윈도우 2000 출시 이후 마이크로소프트는 WINS 사용을 권장하지 않고, 계층적인 동적 DNS를 모든 윈도우 운영 체제의 기본 이름 확인 프로토콜로 구성했다. DNS 환경에서 짧은 NetBIOS 이름을 확인하려면 일반적으로 DNS 클라이언트가 연결별 DNS 접미사를 DNS 조회 쿼리에 추가하여 이름을 확장해야 한다. WINS는 여전히 구형 윈도우 환경 및 애플리케이션과의 상호 운용성을 위해 클라이언트에서 보조 이름 확인 프로토콜로 구성될 수 있다. 또한 마이크로소프트 DNS 서버는 DNS를 지원하지 않는 구형(윈도우 2000 이전) 환경과의 이름 확인 통합을 위해 구형 WINS 서버로 이름 확인 요청을 전달할 수 있다. 마이크로소프트는 Active Directory 환경에서 동적 DNS 사용을 권장한다.

네트워크 설계자들은 네트워크 대기 시간이 SMB 1.0 프로토콜 성능에 큰 영향을 미치며, FTP와 같은 다른 프로토콜보다 성능이 떨어진다는 점을 발견했다. 이는 호스트 간의 잦은 통신 요청("채터링")과 네트워크 대기 시간에 대한 고려 부족 때문이다.[11] 예를 들어 인터넷을 통한 VPN 연결은 종종 네트워크 대기 시간을 증가시키는데, 이런 환경에서는 SMB를 사용하여 디렉토리를 탐색하고 파일을 찾는 작업의 성능이 눈에 띄게 저하될 수 있다.

마이크로소프트는 SMB 1.0의 성능 문제가 주로 다음 원인들 때문이라고 설명했다.[12]

  • SMB 1.0은 원래 작은 LAN을 위해 설계된 블록 수준 프로토콜이며, 스트리밍 방식이 아니다.
  • 블록 크기가 64KB로 제한된다.
  • SMB 서명 기능은 추가 오버헤드를 발생시킨다.
  • TCP 윈도우 크기가 WAN 링크에 최적화되어 있지 않다.


이 문제에 대한 해결책으로는 업데이트된 SMB 2.0 프로토콜 사용[13], 오프라인 파일 기능 활용, TCP 윈도우 스케일 옵션 적용, 그리고 다양한 네트워크 공급업체의 WAN 최적화 장치를 사용하여 SMB 1.0[14] 및 2.0[15] 통신을 캐시하고 최적화하는 방법 등이 있다.

4. 구현

서버 메시지 블록(SMB) 프로토콜은 마이크로소프트 윈도우 환경뿐만 아니라 다양한 운영체제와 시스템에서 클라이언트 및 서버 형태로 구현되어 사용되고 있다. SMB 클라이언트, SMB 서버, 그리고 네트워크 검색이나 윈도우 도메인 관련 기능과 같은 SMB 프로토콜 확장을 포함하는 여러 구현 예시가 존재한다. 주요 구현으로는 자유 소프트웨어인 Samba나 여러 유닉스 계열 운영체제의 내장 클라이언트 등이 있으며, 상용 솔루션도 다수 개발되었다.[99] 구체적인 구현 사례는 아래 하위 섹션에서 자세히 설명한다.

4. 1. 클라이언트-서버 접근

SMB는 클라이언트-서버 모델을 기반으로 동작한다. 클라이언트가 특정 자원이나 서비스에 대한 요청을 보내면, 서버는 이에 응답하는 방식으로 통신이 이루어진다. SMB 프로토콜은 주로 컴퓨터 네트워크 환경에서 파일 공유, 프린터 공유, 네트워크 탐색 기능을 제공하며, 명명된 파이프를 이용한 프로세스 간 통신(IPC)도 지원한다. 또한, 마이크로소프트의 분산 파일 시스템 구현의 핵심 기반 기술이기도 하다.

SMB는 통신을 위해 TCPIP를 사용한다. 이를 통해 공용 인터넷을 포함한 복잡하고 상호 연결된 네트워크 환경에서도 파일 공유가 가능하다. SMB 서버는 기본적으로 TCP 포트 445번을 사용한다. 과거에는 NetBIOS over IEEE 802.2 (NetBIOS 프레임 또는 NBF), IPX/SPX, 그리고 NetBIOS over TCP/IP(NetBT) 위에서도 동작했지만, 마이크로소프트는 이러한 오래된 프로토콜들의 사용을 중단했다. NetBT 환경에서는 서버가 TCP 또는 UDP 포트 137번(NETBIOS 이름 서비스), 138번(NETBIOS 데이터그램 서비스), 139번(NETBIOS 세션 서비스)을 사용했다.

마이크로소프트 윈도우 운영체제에서는 두 가지 핵심 윈도우 서비스가 SMB 기능을 담당한다. '서버' 서비스(서비스 ID: LanmanServer)는 파일이나 프린터와 같은 공유 리소스를 네트워크에 제공하는 역할을 한다. 반면, '워크스테이션' 서비스(서비스 ID: LanmanWorkstation)는 컴퓨터 이름을 관리하고 다른 컴퓨터의 공유 리소스에 접근하는 클라이언트 기능을 수행한다.[2] 사용자 인증 방식은 네트워크 환경에 따라 다르다. 윈도우 도메인 환경에서는 액티브 디렉토리를 통해 사용자를 인증하기 위해 Kerberos 프로토콜을 사용한다. 반면, 더 단순한 피어 투 피어 네트워크에서는 NTLM 프로토콜을 이용해 인증한다.

보안 강화를 위해 Windows NT 4.0 서비스 팩 3 버전부터는 SMB 메시지에 디지털 서명을 추가하는 기능이 도입되었다. 이는 일부 중간자 공격을 방지하는 데 도움을 준다.[5][6][7] SMB 서명 기능은 들어오는 연결('서버' 서비스)과 나가는 연결('워크스테이션' 서비스)에 대해 각각 설정할 수 있다. Windows Server 2003 이상의 도메인 컨트롤러는 기본적으로 서명되지 않은 SMB 연결 요청을 거부하도록 설정되어 있다.[8] 이 때문에 SMB 서명을 지원하지 않는 구형 윈도우 버전(Windows 9x 계열 포함)은 해당 도메인 컨트롤러에 접속하지 못하는 호환성 문제가 발생할 수 있다.[6]

SMB는 파일 접근 성능을 높이기 위해 기회적 잠금(Opportunistic Locking, OpLock) 기능을 지원한다. 기회적 잠금에 대한 구체적인 지원 방식은 윈도우 서버 버전이 업데이트되면서 계속 변경되어 왔다.

SMB 프로토콜은 크게 두 부분으로 나눌 수 있다. 하나는 클라이언트가 파일 서버와 통신하며 파일 시스템에 접근하는 데 사용되는 부분이다. 다른 하나는 프로세스 간 통신(IPC)을 위한 부분이다. SMB는 기본적으로 로컬 서브넷 환경에서의 사용에 최적화되어 있지만, 인터넷을 통해 다른 서브넷과 통신하는 것도 가능하다. 그러나 인터넷을 통한 SMB 사용은 보안 익스플로잇의 주요 표적이 될 수 있어 주의가 필요하다.

SMB 서버는 네트워크상의 클라이언트가 파일 시스템이나 프린터 등 다양한 리소스에 접근할 수 있도록 해준다. 클라이언트는 서버가 공유하는 자원에 접근하여 사용한다. 이러한 파일 및 프린터 공유 기능은 SMB의 가장 잘 알려진 용도이다. 또한, SMB는 NT 도메인 환경에서 중요한 역할을 한다. NT 도메인 프로토콜은 SMB의 IPC 메커니즘인 명명된 파이프를 통해 MSRPC 서비스를 제공하며, 대부분의 SMB 서버 구현은 NT 도메인 인증을 사용하여 리소스 접근 권한을 검증한다.

4. 2. Samba

1991년, 앤드루 트리젤은 SMB/CIFS 네트워킹 프로토콜을 유닉스 계열 시스템에 맞게 리버스 엔지니어링을 사용하여 자유 소프트웨어로 재구현하는 Samba 개발을 시작했다. 초기에는 DEC(Digital Equipment Corporation) Pathworks 클라이언트를 실행하는 PC 클라이언트가 SunOS 머신에서 파일에 액세스할 수 있도록 SMB 서버를 구현하기 위해서였다.[16][56] SMB 프로토콜이 널리 사용되는 마이크로소프트 윈도우 플랫폼과의 상호 작용에 중요하다는 점 때문에, Samba는 윈도우가 아닌 유닉스 계열 운영 체제와 같은 운영 체제가 윈도우와 상호 운용될 수 있도록 호환 가능한 SMB 클라이언트 및 서버의 인기 있는 자유 소프트웨어 구현이 되었다.

버전 3(2003)부터 Samba는 마이크로소프트 윈도우 클라이언트에 파일 및 인쇄 서비스를 제공하며, PDC 또는 도메인 구성원으로서 윈도우 NT 4.0 서버 도메인과 통합될 수 있다. Samba4 설치는 Windows 2008 도메인 및 포리스트 기능 수준에서 액티브 디렉터리 도메인 컨트롤러 또는 멤버 서버 역할을 할 수 있다.[57]

리눅스 배포판의 패키지 관리자는 ''cifs-utils'' 패키지를 검색할 수 있다. 이 패키지는 Samba 관리자가 제공한다.

NSMB(Netsmb 및 SMBFS)는 BSD 운영 체제 내의 SMB 클라이언트 구현의 일종이다. 보리스 포포프에 의해 FreeBSD 4.4에 처음 기여되었으며, 현재 NetBSD 및 macOS를 포함한 광범위한 다른 BSD 시스템에서 발견된다.[58] 구현 방식은 이후로 크게 달라졌다.[59]

NSMB의 macOS 버전은 심볼릭 링크를 나타내는 현재 일반적인 방식 때문에 주목할 만하다. 이 "Minshall-French" 형식은 심볼릭 링크를 `.symlink` 확장자와 `Xsym\n` 매직 넘버를 가진 텍스트 파일로 표시하며, 항상 1067 바이트 길이이다. 이 형식은 네이티브 SMB 서버 또는 지원되지 않는 파일 시스템에 심볼릭 링크를 저장하는 데에도 사용된다. Samba는 `mfsymlink` 옵션으로 이 형식을 지원한다.[60] 윈도우의 Docker 또한 이를 사용하는 것으로 보인다.

다음 목록은 SMB 클라이언트, SMB 서버, SMB 프로토콜의 각종 확장(Network Neighborhood 스위트나 NT 도메인 스위트 등)이다. 아래에 나타낸 것은 주요한 것으로, 확장판, 재구현판, 이식판 등은 생략했다.

4. 3. NQ

NQ는 이스라엘 기업인 Visuality Systems가 개발한 휴대용 SMB 클라이언트 및 서버 구현 제품군이다.[99] 이 회사는 1998년 지멘스 데이터 통신의 전 CEO였던 샘 와이드먼(Sam Widerman)에 의해 설립되었다.

NQ 제품군은 주로 임베디드 시스템을 대상으로 하며, 다음과 같이 구성된다.

  • 임베디드 SMB 스택: C 언어로 작성되었다.
  • Pure Java SMB 클라이언트: Java 기반 클라이언트이다.
  • 스토리지 SMB 서버 구현


모든 솔루션은 최신 SMB 3.1.1 다이얼렉트까지 지원한다. NQ는 리눅스, WinCE, iOS, 안드로이드, VxWorks, Integrity 등 다양한 운영 체제 및 실시간 운영 체제(RTOS)에 이식되어 사용되고 있다.

4. 4. MoSMB

MoSMB는 Ryussi Technologies가 개발한 리눅스 및 기타 유닉스 계열 운영 체제를 위한 사유 SMB 구현체이다. SMB 2.x와 SMB 3.x 버전만 지원한다.[109]

MoSMB는 리눅스용 사용자 공간 SMB 구현체로서, 다음과 같은 주요 기능을 제공한다.[61]

  • 클라우드 규모의 액티브-액티브 스케일 아웃 클러스터
  • SMB 다이렉트(RDMA)
  • SMB 멀티채널
  • 투명한 페일오버
  • 지속적인 가용성


스토리지 백엔드로는 ext4, ZFS, 러스터, 세프와 같은 POSIX 파일 시스템뿐만 아니라 아마존 S3 객체 스토리지도 지원한다.[61]

4. 5. Tuxera SMB

Tuxera SMB는 Tuxera가 개발한 독점적인 SMB 서버 구현체로, 커널이나 사용자 공간에서 실행할 수 있다.[110] SMB 3.0 및 이전 버전을 지원한다.

Fusion File Share by Tuxera 역시 Tuxera에서 개발한 독점적인 SMB 서버 구현체이며, 커널 또는 사용자 공간에서 실행 가능하다.[62] 이 구현체는 SMB 3.1.1 및 이전 버전을 모두 지원하며, 다음과 같은 고급 SMB 기능도 제공한다:

  • 지속적인 가용성(영구 핸들)
  • 스케일 아웃
  • RDMA(SMB Direct)
  • SMB 멀티채널
  • 투명 압축
  • 섀도 복사

4. 6. KSMBD

KSMBD는 리눅스 커널을 위한 오픈 소스 인 커널 CIFS/SMB 서버 구현체이다. 사용자 공간 구현에 비해 더 나은 성능을 제공하며, SMB Direct와 같은 일부 기능을 구현하기 더 쉽게 만든다. SMB 3.1.1 및 이전 버전을 지원한다.

4. 7. 기타 구현

다음은 SMB 클라이언트, 서버, 관련 프로토콜 확장(예: Network Neighborhood 스위트, NT 도메인 스위트)의 주요 구현 목록이다. 확장판, 재구현판, 이식판 등은 제외했다.

  • Samba: SMB 프로토콜과 마이크로소프트 확장을 자유 소프트웨어로 재구현한 것이다. SMB 서버 기능과 커맨드라인 SMB 클라이언트 기능을 제공한다.
  • 리눅스 커널: 가상 파일 시스템(VFS)을 사용한 SMB 클라이언트 구현 2개(smbfs, cifs)가 있으며, 이를 통해 표준 파일 시스템 API로 SMB 서버 상의 파일에 접근할 수 있다. FUSE 커널 모듈과 사용자 공간의 fusesmb를 사용하여 SMB 클라이언트 기능을 구현할 수도 있다.
  • NetWare: 버전 6 이후부터 CIFS 서버 기능을 구현하고 있다.
  • FreeBSD: VFS를 사용한 SMB 클라이언트 구현인 smbfs가 있다.
  • NetBSD와 macOS: 각각의 VFS를 사용한 SMB 클라이언트 구현으로 smbfs가 있다(원래 FreeBSD의 smbfs를 이식한 것).
  • Solaris: macOS의 smbfs를 기반으로 한 CIFS client for Solaris 프로젝트가 있다.
  • OpenSolaris: 2007년 10월, 커널 내에 CIFS 서버 기능을 구현했다.[99]
  • TrueNAS: FreeBSD 기반의 소형 NAS 서버로, CIFS/Samba를 지원한다. EMC 코퍼레이션, 넷앱과 같은 주요 스토리지 기업들도 자체적인 SMB 서버 구현을 제공한다.
  • Advanced Server for Unix (AS/U): UNIX용으로 Windows NT 3.51의 SMB 서버 기능을 이식한 것이다. AT&T가 마이크로소프트로부터 라이선스를 받아 주요 UNIX 벤더에 라이선스를 제공했다. 썬 마이크로시스템즈는 AS/U를 Solaris에 이식하여 Solaris PC NetLink(코드명 Cascade)라는 이름으로 제품화했다.
  • Alfresco: 콘텐츠 관리 시스템으로, Java로 구현된 SMB 서버인 JLAN을 포함하고 있다.
  • JCIFS: Java로 구현된 SMB 클라이언트이다.
  • RTSMB: 임베디드 시스템용으로 개발된 CIFS/SMB 구현이다.
  • Visuality Systems NQ CIFS: 임베디드 시스템용 CIFS/SMB 구현으로, SMB1.0, SMB2.0, SMB3.0을 지원한다. Linux, VxWorks, Integrity, iOS, Android 등 다양한 RTOS에 이식되어 있다.
  • AzSmb: 임베디드 시스템용 소형 SMB 서버이며, GPL 또는 상용 라이선스로 제공된다.
  • File System for SMB/CIFS/Windows(R): ChromeOS용 SMB 클라이언트 구현으로, JavaScript로 작성되었다.

5. 보안

수년에 걸쳐 SMB 프로토콜이나 이 프로토콜에 기반한 구성 요소의 마이크로소프트 구현체에서 수많은 보안 취약점이 발견되었다.[111][112][63][64] 다른 업체들의 보안 취약점은 주로 NTLMv1, LanMan 또는 일반 텍스트 암호와 같은 오래된 프로토콜을 선호하고, NTLMv2나 Kerberos와 같은 더 새로운 인증 프로토콜의 지원이 부족하기 때문에 발생한다. 실시간 공격 추적 결과[113][65]에 따르면, SMB는 침투 시도를 위한 주요 공격 경로 중 하나로[114][66], 2014년의 소니 픽처스 해킹 사건[115][67]이나 2017년의 워너크라이 랜섬웨어 공격[116][68] 등이 대표적인 사례이다.

2020년에는 심각도가 높은 두 가지 SMB 취약점, 즉 SMBGhost(CVE-2020-0796)와 SMBleed(CVE-2020-1206)가 공개되었다. 이 두 취약점을 함께 악용하면 공격자가 원격 코드 실행(RCE) 권한을 얻을 수 있다.[69]

6. 구조

SMB에 대한 규격은 독점적이었으며 초기에는 공개되지 않아, 다른 벤더나 프로젝트에서는 이 프로토콜과 상호 운용하기 위해 리버스 엔지니어링을 수행해야 했다. SMB 1.0 프로토콜은 리버스 엔지니어링 이후에 공개되었지만, SMB 2.0 프로토콜부터는 마이크로소프트의 오픈 스펙 개발자 센터를 통해 처음부터 제공되었다.[55]

마이크로소프트는 다음과 같은 관련 프로토콜 명세를 제공한다.

참조

[1] 웹사이트 Microsoft SMB Protocol and CIFS Protocol Overview http://msdn.microsof[...] Microsoft 2009-10-22
[2] 웹사이트 Lan Manager Networking Concepts http://support.micro[...] Microsoft 2014-09-18
[3] 웹사이트 Common Internet File System https://docs.microso[...] Microsoft 2012-07-18
[4] 웹사이트 Microsoft SMB Protocol and CIFS Protocol Overview https://docs.microso[...] Microsoft 2021-01-08
[5] 웹사이트 Overview of Server Message Block signing https://docs.microso[...] Microsoft 2021-11-24
[6] 웹사이트 How to Shoot Yourself in the Foot with Security, Part 1 https://docs.microso[...] Microsoft 2005-05-20
[7] 웹사이트 The Basics of SMB Signing (covering both SMB1 and SMB2) https://docs.microso[...] Microsoft 2010-12-01
[8] 웹사이트 MSKB887429: Overview of Server Message Block signing http://support.micro[...] Microsoft 2012-10-24
[9] 웹사이트 Opportunistic Locks https://docs.microso[...] Microsoft 2021-08-19
[10] 웹사이트 All About Opportunistic Locking https://sphereit.uk/[...] 2021-08-19
[11] 웹사이트 SMB2, a Complete Redesign of the Main Remote File Protocol for Windows http://blogs.technet[...] Microsoft Server & Management Blogs 2009-11-01
[12] 웹사이트 SMB/CIFS Performance Over WAN Links https://docs.microso[...] Microsoft 2020-02-13
[13] 웹사이트 "What's New in SMB in Windows Server" https://technet.micr[...] 2016-08-31
[14] 웹사이트 CIFS Acceleration Techniques https://www.snia.org[...] Storage Developer Conference, SNIA, Santa Clara 2009 2020-07-06
[15] 웹사이트 Accelerating SMB2 https://www.snia.org[...] Storage Developer Conference, SNIA, Santa Clara 2011 2020-07-06
[16] 웹사이트 Myths About Samba https://www.samba.or[...] 2016-01-03
[17] 뉴스 Have to use SMB 1.0? Windows 10 April 2018 Update says NO https://www.theregis[...] 2023-02-18
[18] 뉴스 Microsoft plans to deactivate SMBv1 in Windows 10 V1709 https://borncity.com[...] 2017-06-15
[19] 뉴스 Microsoft Gets Ready to Disable SMB1 Protocol on Windows 11 https://www.thurrott[...] 2022-04-20
[20] 웹사이트 SMB: The Server Message Block Protocol http://ubiqx.org/cif[...] 2009-11-01
[21] 웹사이트 Description of Microsoft Windows Encryption Pack 1 http://support.micro[...] Microsoft 2009-11-01
[22] 웹사이트 US Executive Order 13026 http://www.gpo.gov/f[...] United States Government 2009-11-01
[23] 웹사이트 Direct hosting of SMB over TCP/IP http://support.micro[...] Microsoft 2009-11-01
[24] 웹사이트 SMB1 – Audit Active Usage using Message Analyzer https://blogs.techne[...] Microsoft 2017-05-13
[25] 웹사이트 The Deprecation of SMB1 – You should be planning to get rid of this old SMB dialect – Jose Barreto's Blog https://blogs.techne[...] 2015-04-21
[26] 웹사이트 SMBv1 is not installed by default in Windows 10 Fall Creators Update and Windows Server, version 1709 and later versions https://support.micr[...] 2019-10-09
[27] 웹사이트 WebNFS - Technical Overview http://www.sun.com/s[...]
[28] 웹사이트 Common Internet File System Protocol (CIFS/1.0) https://tools.ietf.o[...] 1996-06-13
[28] 웹사이트 CIFS Logon and Pass Through Authentication http://tools.ietf.or[...] 2017-12-10
[28] 웹사이트 CIFS/E Browser Protocol http://tools.ietf.or[...] 2017-12-10
[28] 웹사이트 CIFS Printing Specification http://tools.ietf.or[...] 2017-12-10
[28] 웹사이트 CIFS Remote Administration Protocol http://tools.ietf.or[...] 2017-12-10
[28] 웹사이트 A Common Internet File System (CIFS/1.0) Protocol https://tools.ietf.o[...] 2017-12-10
[29] 웹사이트 "What's new in SMB in Windows Vista" http://blogs.msdn.co[...] Microsoft 2006-05-01
[30] 간행물 Server Message Block (SMB) Protocol Versions 2 and 3 https://docs.microso[...] 2020-11-29
[31] 웹사이트 Samba 3.5.0 Available for Download http://www.samba.org[...] 2011-07-08
[32] 웹사이트 Samba 3.6.0 Available for Download http://samba.org/sam[...] 2011-08-10
[33] IETF NFS version 4 Protocol 2000-12
[34] 웹사이트 Apple shifts from AFP file sharing to SMB2 in OS X 10.9 Mavericks http://appleinsider.[...] Appleinsider.com 2014-01-12
[35] 웹사이트 Mavericks' SMB2 problem and fixes https://www.zdnet.co[...] ZDNet 2014-01-12
[36] 웹사이트 10.9: Switch the SMB stack to use SMB1 as default http://hints.macworl[...] macworld.com 2014-01-12
[37] 웹사이트 Say adios to Samba in OS X http://reviews.cnet.[...] CNET 2014-01-12
[38] 웹사이트 Apple Ditches SAMBA in Favour of Homegrown Replacement http://www.osnews.co[...] 2014-01-12
[39] 웹사이트 Linux 3.7 - Linux Kernel Newbies https://kernelnewbie[...] 2016-09-04
[40] 웹사이트 Implementing an End-User Data Centralization Solution http://www.microsoft[...] Microsoft 2009-10-21
[41] 웹사이트 SMB 2.2 is now SMB 3.0 https://cloudblogs.m[...] 2020-07-06
[42] 웹사이트 40G SMB Direct http://www.chelsio.c[...] 2013-06-18
[43] 웹사이트 SNIA Tutorial on the SMB Protocol https://www.eisevery[...] Storage Networking Industry Association 2012-11-28
[44] 웹사이트 The Future of File Protocols: SMB 2.2 in the Datacenter http://www.snia.org/[...]
[45] 웹사이트 SMB Transparent Failover – making file shares continuously available https://blogs.techne[...] 2017-02-01
[46] 웹사이트 New Ways to Enable High Availability for File Shares http://windowsitpro.[...] 2017-02-01
[47] 웹사이트 SMB Security Enhancements https://technet.micr[...] Microsoft Technet 2014-06-18
[48] 웹사이트 Updated Links on Windows Server 2012 File Server and SMB 3.0 https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2016-08-14
[49] 웹사이트 Updated Links on Windows Server 2012 R2 File Server and SMB 3.02 https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2016-08-14
[50] 웹사이트 Storage Developer Conference – SDC 2013 slides now publicly available. Here are the links to Microsoft slides… https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2016-08-14
[51] 웹사이트 WindowsNetworking.com: Improvements in the SMB 3.0 and 3.02 Protocol Updates http://www.windowsne[...] 2015-04-06
[52] 웹사이트 SMB3 Networking Links for Windows Server 2012 R2 https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2016-08-14
[53] 웹사이트 What's new in SMB 3.1.1 in the Windows Server 2016 Technical Preview 2 https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2016-08-14
[54] 웹사이트 SMB security enhancements https://learn.micros[...] Microsoft Learn 2023-04-10
[55] 웹사이트 Windows Protocols http://msdn.microsof[...] Microsoft Corp. 2015-12-16
[56] 웹사이트 A bit of history and a bit of fun http://www.rxn.com/s[...] 2011-07-26
[57] 웹사이트 Samba 4 functional levels http://samba.2283325[...] 2014-01-12
[58] 웹사이트 netsmb(4) https://man.netbsd.o[...] 2020-01-05
[59] 문서 "{{man|5|nsmb.conf|FreeBSD}}"
[60] 웹사이트 UNIX Extensions https://wiki.samba.o[...] 2020-03-15
[61] 웹사이트 Building a Highly Scalable and Performant SMB Protocol Server http://www.snia.org/[...] 2016-09-25
[62] 웹사이트 Microsoft and Tuxera strengthen partnership through Tuxera SMB Server https://news.microso[...] Microsoft News Center 2017-02-06
[63] 웹사이트 MS02-070: Flaw in SMB Signing May Permit Group Policy to Be Modified http://support.micro[...] Microsoft 2009-11-01
[64] 웹사이트 MS09-001: Vulnerabilities in SMB could allow remote code execution http://support.micro[...] Microsoft 2009-11-01
[65] 웹사이트 Sicherheitstacho.eu http://www.sicherhei[...] Deutsche Telekom 2013-03-07
[66] 웹사이트 Alert (TA14-353A) Targeted Destructive Malware https://www.us-cert.[...] US-CERT 2014-12-20
[67] 웹사이트 Sony Hackers Used Server Message Block (SMB) Worm Tool http://www.securityw[...] 2014-12-20
[68] 뉴스 WannaCry Ransomware Attack Hits Victims With Microsoft SMB Exploit http://www.eweek.com[...] 2017-05-13
[69] 웹사이트 SMBleedingGhost Writeup: Chaining SMBleed (CVE-2020-1206) with SMBGhost https://blog.zecops.[...] 2020-11-19
[70] 웹사이트 Microsoft SMB Protocol Dialects https://msdn.microso[...] Microsoft Corp. 2015-12-16
[71] 웹사이트 ファイル共有プロトコル、SMBとCIFSの違いを正しく理解できていますか?(前編) https://atmarkit.itm[...] 2019-02-02
[72] 웹사이트 SMB|CIFS NQ|製品情報|アイティアクセス株式会社 http://www.itaccess.[...] IT Access 2018-07-10
[73] 웹사이트 SMB3 Multi-Channel in Samba https://sambaxp.org/[...] 2021-05-06
[74] 웹사이트 Early Microsoft Networks {{!}} OS/2 Museum http://www.os2museum[...] 2021-05-06
[75] ファイル共有プロトコル、SMBとCIFSの違いを正しく理解できていますか?(前編):その知識、ホントに正しい? Windowsにまつわる都市伝説(23) - @IT https://atmarkit.itm[...]
[76] 문서 Common Internet File System Protocol (CIFS/1.0) http://www.tools.iet[...]
[77] 웹사이트 第7回 ファイル共有プロトコルSMBの概要 https://www.atmarkit[...] 2021-05-06
[78] 웹사이트 SMB 3.0 https://www.snia.org[...] 2019-02-02
[79] 웹사이트 Features Removed or Deprecated in Windows Server 2012 R2 https://learn.micros[...] 2023-01-14
[80] 웹사이트 Stop using SMB1 https://blogs.techne[...] 2019-02-02
[81] 웹사이트 Windowsの通信プロトコルに脆弱性報告、SMB v1は無効化を https://www.itmedia.[...] 2019-02-23
[82] 웹사이트 2017年9月4日 Linux 4.13がリリース,SMB 3.0がデフォルトCIFSに https://gihyo.jp/adm[...] 2019-02-23
[83] 웹사이트 WannaCry対策にLinux 4.13でもSMB 1.0が無効に https://news.mynavi.[...] 2019-02-23
[84] 웹사이트 SMBv1 is not installed by default in Windows 10 version 1709, Windows Server version 1709 and later versions https://learn.micros[...] 2023-01-14
[85] 웹사이트 Windows 10 の SMB 1.0 を有効にする https://www.iodata.j[...] 2019-02-02
[86] 웹사이트 FreeNAS 11.1-U6 https://www.ixsystem[...] 2020-07-16
[87] 웹사이트 Samba 4.11.0 Available for Download https://www.samba.or[...] 2019-10-25
[88] 웹사이트 [MS-SMB2]: Appendix A: Product Behavior https://learn.micros[...] 2023-01-14
[89] 웹사이트 WindowsのSMB v3はSMB v2より新しいが、SMB v3はSMB2である https://atmarkit.itm[...] 2023-01-14
[90] 웹사이트 Vistaの目指すネットワークの姿(2)- NetBIOSなしでWindowsネットを実現 https://xtech.nikkei[...] ITPro 2010-03-30
[91] マイクロソフト、VistaとServer 2008で実現するメリットを解説 https://pc.watch.imp[...]
[92] SMB2, a complete redesign of the main remote file protocol for Windows http://blogs.technet[...]
[93] 웹사이트 What's new in SMB in Windows Vista http://blogs.msdn.co[...] MSDN 2006-05-01
[94] 웹사이트 "ファイルサーバー、小型NASは安いのを選べ」 本当にそれでいい?" https://atmarkit.itm[...] 2011-02-10
[95] 웹사이트 サーバー メッセージ ブロックの概要 http://technet.micro[...] 2013-08-08
[96] 웹사이트 SMB 2.2 is now SMB 3.0 http://blogs.technet[...] 2013-08-08
[97] 웹사이트 What's New in SMB in Windows Server 2012 R2 http://technet.micro[...] 2014-07-02
[98] 웹사이트 Windows Server の SMB 3 プロトコルを使用したファイル共有の概要 https://learn.micros[...] 2023-01-14
[99] Project CIFS Server - Introduction http://www.opensolar[...]
[100] 웹인용 Direct hosting of SMB over TCP/IP http://support.micro[...] 마이크로소프트 2009-11-01
[101] 웹인용 Just what is SMB? http://samba.anu.edu[...] 2011-07-18
[102] 웹인용 Myths About Samba https://www.samba.or[...] 2016-01-03
[103] 웹인용 What's new in SMB in Windows Vista http://blogs.msdn.co[...] MSDN 2006-05-01
[104] 웹인용 Implementing an End-User Data Centralization Solution http://www.microsoft[...] 마이크로소프트 2009-10-21
[105] 웹인용 Windows Server Blog: SMB 2.2 is now SMB 3.0 http://blogs.technet[...] 마이크로소프트 2012-06-14
[106] 웹인용 Updated Links on Windows Server 2012 R2 File Server and SMB 3.02 https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2014-07-07
[107] 웹인용 Storage Developer Conference – SDC 2013 slides now publicly available. Here are the links to Microsoft slides… https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2013-12-12
[108] 웹인용 What’s new in SMB 3.1.1 in the Windows Server 2016 Technical Preview 2 https://blogs.techne[...] Microsoft TechNet Server & Management Blogs 2015-05-05
[109] 웹인용 Building a Highly Scalable and Performant SMB Protocol Server http://www.snia.org/[...]
[110] 웹인용 Microsoft and Tuxera strengthen partnership through Tuxera SMB Server https://news.microso[...] Microsoft News Center 2017-02-06
[111] 웹인용 MS02-070: Flaw in SMB Signing May Permit Group Policy to Be Modified http://support.micro[...] 마이크로소프트 2007-12-01
[112] 웹인용 MS09-001: Vulnerabilities in SMB could allow remote code execution http://support.micro[...] 마이크로소프트 2009-01-13
[113] 웹인용 Sicherheitstacho.eu http://www.sicherhei[...] Deutsche Telekom 2013-03-07
[114] 웹인용 Alert (TA14-353A) Targeted Destructive Malware https://www.us-cert.[...] US-CERT
[115] 웹인용 Sony Hackers Used Server Message Block (SMB) Worm Tool http://www.securityw[...]
[116] 뉴스 WannaCry Ransomware Attack Hits Victims With Microsoft SMB Exploit http://www.eweek.com[...] 2017-05-13



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com