브로드캐스트 기반 프로토콜인 TCP/IP 기반 NetBIOS와 LLMNR은 대부분의 최신 네트워크에서 구버전 Windows와의 호환성을 위해서만 사용되고 있습니다. 그러나 이 두 프로토콜은 스푸핑(spoofing) 및 중간자 공격(MITM)에 매우 취약합니다. 실제로 Metasploit에는 브로드캐스트 방식의 NetBIOS와 LLMNR 프로토콜의 취약점을 손쉽게 악용해 로컬 네트워크 내 사용자 자격 증명(NTLMv2 해시 포함)을 가로챌 수 있는 공격 모듈이 이미 준비되어 있습니다. 따라서 네트워크 보안을 강화하려면 도메인 네트워크에서 이러한 프로토콜을 비활성화하는 것이 좋습니다. 이번 글에서는 Windows 10/Windows Server 2019 환경에서 LLMNR과 NetBIOS 프로토콜을 수동으로 또는 그룹 정책(GPO)을 통해 비활성화하는 방법을 자세히 알아보겠습니다.
목차
- LLMNR(Link-Local Multicast Name Resolution) 프로토콜이란?
- NetBIOS over TCP/IP 프로토콜이란?
- GPO를 사용해 Windows에서 LLMNR 비활성화하기
- Windows 10/Windows Server 2019에서 NetBIOS over TCP/IP 비활성화하기
- 그룹 정책으로 NetBIOS over TCP/IP 비활성화하는 방법
LLMNR(Link-Local Multicast Name Resolution) 프로토콜이란?
LLMNR(UDP/5355, Link-Local Multicast Name Resolution)은 Vista 이후 모든 Windows 버전에서 지원되는 프로토콜로, DNS 서버 없이도 로컬 L2 네트워크 세그먼트 내 멀티캐스트 요청을 통해 IPv4 및 IPv6 클라이언트가 인접 컴퓨터의 이름을 확인할 수 있게 해줍니다. 이 프로토콜은 DNS를 사용할 수 없는 경우 자동으로 활용됩니다(Windows 작업 그룹 환경에서는 네트워크 검색 기능에 사용됩니다). 따라서 도메인 환경에 DNS 서버가 정상적으로 운영되고 있다면 이 프로토콜은 불필요합니다.
NetBIOS over TCP/IP 프로토콜이란?
NetBIOS over TCP/IP, 즉 NBT-NS(UDP/137, 138 / TCP/139)는 LLMNR의 전신에 해당하는 브로드캐스트 프로토콜로, 로컬 네트워크에서 리소스를 게시하고 검색하는 데 사용됩니다. 모든 Windows 버전에서 기본적으로 모든 네트워크 인터페이스에 대해 NetBIOS over TCP/IP 지원이 활성화되어 있습니다.
Windows에서는 nbtstat 명령어를 사용해 NetBIOS 통계와 NBT를 경유하는 현재 TCP/IP 연결 상태를 확인할 수 있습니다. IP 주소로 컴퓨터 이름을 조회하려면 다음 명령을 실행합니다:
nbtstat -A 192.168.131.190
실행 결과를 보면, nbtstat 명령이 NetBIOS 프로토콜을 사용해 로컬 네트워크상의 컴퓨터를 찾아 해당 이름을 반환한 것을 확인할 수 있습니다.
같은 로컬 네트워크에 있는 인접 컴퓨터에 대한 모든 레코드를 NetBIOS 캐시에서 확인할 수도 있습니다:
nbtstat -c
NetBIOS와 LLMNR 프로토콜은 DNS 서버를 사용할 수 없을 때 로컬 네트워크의 컴퓨터들이 서로를 검색할 수 있게 해주는 역할을 합니다. 작업 그룹(workgroup) 환경에서는 유용할 수 있지만, 도메인 네트워크에서는 두 프로토콜 모두 비활성화해도 무방합니다.
팁: 도메인 전체에 이러한 정책을 대량 배포하기 전에, NetBIOS와 LLMNR이 비활성화된 상태에서 컴퓨터와 서버를 충분히 테스트하는 것을 강력히 권장합니다. 일반적으로 LLMNR을 비활성화하는 데는 문제가 거의 없지만, NetBIOS를 비활성화하면 구형 장비의 동작이 마비될 수 있습니다.
GPO를 사용해 Windows에서 LLMNR 비활성화하기
다음 PowerShell 명령을 사용하면 레지스트리를 통해 개별 Windows 컴퓨터에서 LLMNR 프로토콜을 로컬로 비활성화할 수 있습니다:
New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT" -Name DNSClient -Force
New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name EnableMultiCast -Value 0 -PropertyType DWORD -Force
도메인 환경에서는 그룹 정책을 사용해 컴퓨터와 서버의 LLMNR 브로드캐스트를 비활성화할 수 있습니다. 절차는 다음과 같습니다:
gpmc.msc를 열고 새 GPO를 생성하거나, 모든 워크스테이션 및 서버에 적용되는 기존 GPO를 편집합니다.- 컴퓨터 구성 → 관리 템플릿 → 네트워크 → DNS 클라이언트로 이동합니다.
- 멀티캐스트 이름 확인 끄기(Turn off multicast name resolution) 정책을 사용(Enabled)으로 변경하여 활성화합니다.
- 클라이언트에서 GPO 설정이 업데이트될 때까지 기다리거나,
gpupdate /force명령으로 수동으로 업데이트합니다.
또는 GPP(그룹 정책 기본 설정)를 사용해 도메인 컴퓨터에 EnableMulticast = 0 레지스트리 값(HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient 키)을 배포하는 방법도 있습니다.
Windows 10/Windows Server 2019에서 NetBIOS over TCP/IP 비활성화하기
참고: NetBIOS는 구버전 Windows(2000, XP 등)와 일부 비 Windows 장치에서 사용될 수 있으므로, 비활성화하기 전에 반드시 각 환경에서 테스트를 진행해야 합니다.
Windows에서 NetBIOS를 수동으로 비활성화하는 방법은 다음과 같습니다:
- 네트워크 연결 속성을 엽니다.
- TCP/IPv4를 선택하고 속성을 엽니다.
- 고급을 클릭한 후 WINS 탭으로 이동하여 TCP/IP에서 NetBIOS 사용 안 함(Disable NetBIOS over TCP)을 선택합니다.
- 변경 사항을 저장합니다.
컴퓨터에 여러 개의 네트워크 어댑터(또는 VLAN)가 있는 경우, 각 어댑터의 속성에서 개별적으로 NetBIOS를 비활성화해야 합니다.
Windows 명령 프롬프트에서 네트워크 어댑터의 NetBIOS over TCP/IP 상태를 확인할 수 있습니다:
ipconfig /all | find "NetBIOS"
NetBIOS over Tcpip . . . . . : Disabled
레지스트리를 통해서도 특정 네트워크 어댑터의 NetBIOS를 비활성화할 수 있습니다. 각 네트워크 어댑터는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces 아래에 고유한 TCPIP_GUID를 포함하는 별도의 레지스트리 키를 가지고 있습니다.
특정 어댑터의 NetBIOS를 비활성화하려면 해당 레지스트리 키로 이동하여 NetbiosOptions 값을 2로 변경합니다(기본값은 0).
Windows DHCP 서버에서 IP 주소를 할당받는 도메인 클라이언트의 경우, 특수 DHCP 옵션을 사용해 NetBIOS를 비활성화할 수도 있습니다.
dhcpmgmt.msc콘솔을 실행하고 DHCP 서버에 연결한 후 범위 옵션(Scope Options) 설정(또는 서버 수준의 서버 옵션)을 선택합니다.- 고급 탭으로 이동하여 공급업체 클래스(Vendor class) 드롭다운 목록에서 Microsoft Windows 2000 옵션을 선택합니다.
- 001 Microsoft Disable Netbios Option을 활성화하고 값을 0x2로 변경합니다.
그룹 정책으로 NetBIOS over TCP/IP 비활성화하는 방법
그룹 정책 편집기나 최신 Windows 10/Windows Server 2019 관리 템플릿에는 모든 네트워크 어댑터에 대해 NetBIOS over TCP/IP를 비활성화할 수 있는 별도의 GPO 옵션이 존재하지 않습니다. 대신 다음 PowerShell 로그온 스크립트를 사용하면 모든 네트워크 어댑터의 NetBIOS를 한 번에 비활성화할 수 있습니다:
$regkey = "HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces"
Get-ChildItem $regkey | foreach { Set-ItemProperty -Path "$regkey\$($_.pschildname)" -Name NetbiosOptions -Value 2 -Verbose}
이 코드를 disableNetbios.ps1 파일로 저장한 후 GPO 디렉터리에 복사하고, 컴퓨터 구성 → 정책 → Windows 설정 → 스크립트 → 시작 → PowerShell 스크립트를 통해 클라이언트에서 실행되도록 구성합니다.
현재 PowerShell 실행 정책이 Windows 컴퓨터에서 이 스크립트의 실행을 차단하고 있다면, PS1 스크립트에 코드 서명을 하거나 bypass 모드로 실행해야 합니다.
참고: 이 변경 사항을 적용하려면 네트워크 어댑터를 활성화/비활성화하거나 컴퓨터를 재시작해야 합니다.
이후 명령 프롬프트를 열고 다음 명령을 실행하여 네트워크 어댑터(터널 인터페이스 제외)에 대해 NetBIOS가 정상적으로 비활성화되었는지 확인합니다:
wmic nicconfig get caption,index,TcpipNetbiosOptions