SMB(Server Message Block)는 주로 Windows 환경에서 파일 공유, 프린터 공유, 그리고 네트워크에 연결된 컴퓨터 간 통신을 위해 사용되는 네트워크 프로토콜입니다. 이 프로토콜은 IBM과 Microsoft가 중심적으로 개발했으며, 최초 구현체는 DOS와 Windows NT 3.1에서 만들어졌습니다. 이후 SMB는 XP, Vista, 7, 8, 10, 11에 이르는 거의 모든 Windows 버전과 서버 에디션에 기본 탑재되었습니다. Windows 고유의 프로토콜이지만 Linux(SAMBA를 통해)와 macOS에서도 지원됩니다.

SMB의 작동 원리
가장 단순한 형태로 설명하면, SMB 클라이언트는 인증에 성공한 후 SMB 포트(445번 포트)를 통해 SMB 서버에 접속하여 공유 리소스에 액세스합니다. 연결이 수립되면 파일 협업, 프린터 공유 등 다양한 네트워크 기반 작업을 수행할 수 있습니다.

SMB 프로토콜의 역사
SMB는 1980년대 IBM의 한 팀이 개발한 프로토콜로, 수년간 변화하는 네트워크 요구 사항을 충족하기 위해 여러 버전(다이얼렉트)으로 발전해 왔습니다. 그럼에도 불구하고 지금도 LAN이나 사무실 환경에서 리소스 공유에 가장 널리 사용되는 프로토콜 중 하나입니다.
SMB 프로토콜의 버전 변천사
끊임없이 변화하는 IT 환경에 대응하기 위해 SMB는 초기 구현 이후 수차례 개선을 거쳤습니다. 주요 버전은 다음과 같습니다.
- SMB 1: 1984년, DOS에서 파일 공유를 위해 개발됨
- CIFS(Common Internet File System): 1996년 Microsoft가 Windows 95용으로 자체 버전의 SMB를 도입
- SMB 2: 2006년 Windows Vista 및 Windows Server 2008과 함께 출시
- SMB 2.1: 2010년 Windows Server 2008 R2 및 Windows 7에서 도입
- SMB 3: 2012년 Windows 8 및 Windows Server 2012와 함께 출시
- SMB 3.02: 2014년 Windows 8.1 및 Windows Server 2012 R2에서 첫 선
- SMB 3.1.1: 2015년 Windows 10 및 Windows Server 2016에서 도입
SMBv1의 문제점
SMBv1은 1980년대 IBM이 개발하고 1990년대 Microsoft가 기능을 추가하며 CIFS로 명명한 프로토콜입니다. 당시에는 큰 성공을 거두었지만, 오늘날의 연결된 세계를 염두에 두고 설계된 것이 아닙니다. 정보 혁명 이후 30여 년이 지난 지금, 구식 기술인 SMBv1은 매우 취약합니다. 수많은 익스플로잇과 취약점을 보유하고 있으며, 그중 상당수는 대상 머신에서 원격 코드 실행을 허용합니다.
보안 전문가들이 SMB 1의 취약점에 대해 경고해 왔지만, 악명 높은 WannaCry 랜섬웨어 공격이 이를 명확히 증명했습니다. WannaCry는 바로 SMBv1에서 발견된 취약점을 표적으로 삼았습니다.

이러한 취약점 때문에 SMB1 비활성화가 강력히 권장됩니다. SMB1 취약점에 대한 자세한 내용은 Malwarebytes 블로그에서 확인할 수 있으며, 사용자는 Metasploit을 활용해 직접 취약점(특히 EternalBlue)을 점검해 볼 수도 있습니다.

SMBv2와 SMBv3의 개선 사항
SMBv2와 SMBv3는 SMB 1에 없는 다음과 같은 보안 기능을 제공합니다.
- 사전 인증 무결성(Integrity)
- 보안 다이얼렉트 협상(Negotiation)
- 암호화(Encryption)
- 안전하지 않은 게스트 인증 차단
- 개선된 메시지 서명
일부 사용자는 "시스템에 SMBv2나 v3가 있다면 SMB 1의 취약점을 커버해 주지 않을까?"라고 생각할 수 있습니다. 하지만 답은 '아니오'입니다. 이러한 보강 기능은 서로 다른 메커니즘으로 작동하기 때문입니다. SMBv2와 v3가 있는 머신에서 SMBv1이 활성화되어 있으면 오히려 전체가 위험해질 수 있습니다. SMB 1은 중간자(MiTM) 공격을 막지 못하기 때문에, 공격자는 자신 측에서 SMBv2와 v3만 차단하고 SMB 1을 통해 악성 코드를 실행하면 됩니다.
SMB 1 비활성화의 영향
Windows XP 또는 SMB 1을 사용하는 레거시 애플리케이션을 실행하는 머신 등 특수한 경우가 아니라면, 모든 사이버 보안 전문가는 개인 시스템은 물론 조직 차원에서도 SMBv1을 비활성화할 것을 권장합니다. 네트워크에 SMBv1 애플리케이션이나 장치가 없다면 아무런 영향이 없겠지만, 모든 상황에 그렇다고 볼 수는 없습니다. SMBv1을 비활성화하기 전 IT 관리자는 다음 사항을 검토해야 합니다.
- 호스트와 애플리케이션 간의 암호화되지 않았거나 서명되지 않은 통신
- LM 및 NTLM 통신
- 하위(또는 상위) 수준 클라이언트 간 파일 공유 통신
- 서로 다른 운영 체제 간 파일 공유 통신(예: Linux와 Windows 간)
- 레거시 소프트웨어 및 SMB 기반 통신에 고정된 애플리케이션(Sophos, NetApp, EMC VNX, SonicWalls, vCenter/vSphere, Juniper Pulse Secure SSO, Aruba 등)
- 프린터 및 프린트 서버
- Android와 Windows 기반 애플리케이션 간 통신
- MDB 기반 데이터베이스 파일(SMBv2/v3에서 손상될 수 있어 SMBv1이 필수적인 파일)
- SMB 1을 사용하는 백업 또는 클라우드 애플리케이션
SMB 1 비활성화 방법
SMB1을 비활성화하는 방법은 여러 가지가 있으며, 사용자는 자신의 상황에 가장 적합한 방법을 선택하면 됩니다.
기본적으로 비활성화된 경우 확인하기
Windows 10 Fall Creators Update 이후 버전과 Windows 11에서는 SMBv1이 기본적으로 비활성화되어 있습니다. 서버 에디션의 경우 Windows Server 버전 1709(RS3) 이상에서 기본 비활성화됩니다. SMB1의 현재 상태를 확인하려면:
- Windows 키를 누르고 PowerShell을 검색한 후, 마우스 오른쪽 버튼으로 클릭하여 관리자 권한으로 실행을 선택합니다.

- 다음 명령을 실행합니다.
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol

참고로 Microsoft는 Windows 업데이트를 통해 SMB 1을 자동 제거하는 기능을 포함시켰지만, 사용자가 재활성화하면 이후 자동으로 비활성화되지 않아 시스템이 취약해질 수 있습니다.
Windows 10, 8, 7의 제어판 사용
- Windows 키를 누르고 제어판을 검색하여 엽니다.

- 프로그램을 선택하고 Windows 기능 켜기/끄기를 엽니다.

- SMB 1.0/CIFS 파일 공유 지원의 체크를 해제하고 적용을 클릭합니다.

- 시스템을 재시작하면 SMB 1이 비활성화됩니다.

Windows 11의 선택적 기능 메뉴 사용
- Windows 버튼을 마우스 오른쪽 버튼으로 클릭하고 설정을 엽니다.

- 왼쪽 창에서 앱으로 이동한 후, 오른쪽 창에서 선택적 기능을 엽니다.

- 아래로 스크롤하여 관련 설정에서 추가 Windows 기능을 클릭합니다.

- 표시된 목록에서 SMB 1.0/CIFS 파일 공유 지원의 체크를 해제하고 적용을 클릭합니다.

- PC를 재시작하면 재시작 후 SMBv1이 비활성화됩니다.
PowerShell 사용
위의 두 가지 방법으로 대부분의 사용자 요구를 충족할 수 있지만, 서버 시스템에서는 관리자가 PowerShell을 사용해야 할 수 있습니다(물론 클라이언트 머신에서도 동일하게 작동합니다).
- Windows 키를 누르고 PowerShell을 검색한 후, 마우스 오른쪽 버튼으로 클릭하여 관리자 권한으로 실행을 선택합니다.
- 다음 명령 중 하나를 실행합니다.
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force 또는 Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol 또는 Set-SmbServerConfiguration -EnableSMB1Protocol $false 서버의 경우 Remove-WindowsFeature -Name FS-SMB1 또는 Set-SmbServerConfiguration -EnableSMB1Protocol $false

- 시스템을 재시작하면 재시작 후 SMB 1이 비활성화됩니다.
레지스트리 편집기 사용
PowerShell이 없는 서버 머신(예: Windows Server 2003)의 관리자는 레지스트리 편집기를 통해 SMB 1을 비활성화할 수 있습니다. 물론 클라이언트 머신에서도 동일하게 작동합니다.
주의:
레지스트리 편집은 숙련된 작업입니다. 잘못 수정하면 시스템, 데이터 또는 네트워크에 심각한 손상을 초래할 수 있으므로 각별히 신중하게 진행하시기 바랍니다.
- Windows 키를 누르고 Regedit를 검색한 후, 마우스 오른쪽 버튼으로 클릭하여 관리자 권한으로 실행을 선택합니다.

- 다음 경로로 이동합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

- 오른쪽 창에서 SMB1을 더블클릭하고 값을 0으로 설정합니다. Windows 7처럼 일부 사용자는 SMB1 DWORD(32비트) 값을 새로 만들고 값을 0으로 설정해야 할 수 있습니다.
그룹 정책 편집기 사용
위의 방법들은 개별 머신에 적용되지만, 조직 차원에서 SMB 1을 비활성화하려면 관리자가 그룹 정책 편집기를 사용하는 것이 좋습니다.
SMB 1 서버 비활성화
- 그룹 정책 관리 콘솔을 실행하고 새 기본 설정을 추가할 GPO를 마우스 오른쪽 버튼으로 클릭합니다.
- 편집을 선택하고 다음 위치로 이동합니다.
컴퓨터 구성 >> 기본 설정 >> Windows 설정
- 왼쪽 창에서 레지스트리를 마우스 오른쪽 버튼으로 클릭하고 레지스트리 항목을 선택합니다.

- 다음 내용을 입력합니다.
동작: 만들기 Hive: HKEY_LOCAL_MACHINE 키 경로: SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters 값 이름: SMB1 값 형식: REG_DWORD 값 데이터: 0

- 변경 사항을 적용하고 시스템을 재시작합니다.
SMB1 클라이언트 비활성화
- 그룹 정책 관리 콘솔을 실행하고 새 기본 설정을 추가할 GPO를 마우스 오른쪽 버튼으로 클릭합니다.
- 편집을 선택하고 다음 위치로 이동합니다.
컴퓨터 구성 >> 기본 설정 >> Windows 설정
- 왼쪽 창에서 레지스트리를 마우스 오른쪽 버튼으로 클릭하고 새 레지스트리 항목을 선택합니다.
- 다음 내용을 입력합니다.
동작: 업데이트 Hive: HKEY_LOCAL_MACHINE 키 경로: SYSTEM\CurrentControlSet\services\mrxsmb10 값 이름: Start 값 형식: REG_DWORD 값 데이터: 4

- 변경 사항을 적용한 후 DependOnService 속성을 엽니다.
- 다음 내용을 설정하고 변경 사항을 적용합니다.
동작: 바꾸기 Hive: HKEY_LOCAL_MACHINE 키 경로: SYSTEM\CurrentControlSet\Services\LanmanWorkstation 값 이름: DependOnService 값 형식: REG_MULTI_SZ 값 데이터: Bowser MRxSmb20 NSI

- 최종 화면은 아래와 같으며, 이후 시스템을 재부팅합니다.

SMBv2 또는 v3까지 비활성화해야 할까?
SMB 1의 위협 수준을 고려해 일부 사용자가 SMBv2나 v3까지 비활성화하려 할 수 있지만, 현재로서는 전혀 필요하지 않습니다. SMBv2나 v3를 비활성화하면 다음과 같은 기능을 잃게 됩니다.
- 로컬 캐싱
- 대규모 파일 공유 네트워크
- 장애 조치(Failover)
- 심볼릭 링크
- 10GB 이더넷
- 대역폭 제한
- 멀티채널 내결함성
- 최근 30년간 축적된 보안 및 암호화 개선 사항
SMB1을 사용해야만 하는 경우
다음과 같은 상황에서는 SMB 1 사용이 불가피할 수 있습니다.
- Windows XP 또는 구형 Windows Server 머신을 사용하는 경우
- 시스템 관리자가 네트워크 환경 탐색기를 통해 탐색해야 하는 낡은 관리 소프트웨어를 사용해야 하는 경우
- 구형 펌웨어의 오래된 프린터로 '스캔하여 공유' 기능을 사용해야 하는 경우
다른 방법이 전혀 없을 때만 SMB1을 사용하세요. 애플리케이션이나 장치가 SMBv1을 요구한다면 해당 애플리케이션이나 장치의 대안을 찾는 것이 가장 좋습니다. 당장은 비용이 들어 보일 수 있지만 장기적으로는 분명히 이득입니다. WannaCry로 고통받은 사용자나 조직에게 물어보면 알 수 있을 것입니다.
지금까지 SMB1에 대해 알아보았습니다. 질문이나 제안 사항이 있다면 댓글로 알려주세요.