Skip to main content

Insecure service configuration - SMB

Need

Secure configuration of SMB service

Context

  • Usage of Python 3 for developing applications and scripts
  • Usage of the os module for accessing operating system-related information

Description

Non compliant code

import os

def enable_smb_v1():
os.system("Set-SmbServerConfiguration -EnableSMB1Protocol $true")

This code represents a function in Python that uses the os.system function to execute a shell command that enables the SMBv1 protocol on the server.

The os.system function takes a string as an argument and runs that string in the system's shell. In this case, the string is a PowerShell command to enable the SMBv1 protocol.

SMB (Server Message Block) is a network protocol that provides shared access to files, printers, and serial ports. It's commonly used in Microsoft Windows.

The vulnerability here is that SMBv1 is an outdated version of the protocol, which has many known security issues, including susceptibility to man-in-the-middle attacks and ransomware like WannaCry. It also does not support encryption, which means that any data sent using this protocol can be intercepted and read by unauthorized parties.

Therefore, enabling SMBv1 on a server introduces significant security risks. It's recommended to use SMBv2 or SMBv3, which have improved security features, including support for encryption.

Steps

  • Disable SMBv1 protocol in the service configuration.
  • Enable SMBv2 or SMBv3, as these versions support encryption and are less vulnerable.
  • Ensure that all clients connecting to the service are compatible with SMBv2 or SMBv3.
  • Test the service to ensure it is functioning correctly after the changes.

Compliant code

import os

def disable_smb_v1():
os.system("Set-SmbServerConfiguration -EnableSMB1Protocol $false")

def enable_smb_v2_v3():
os.system("Set-SmbServerConfiguration -EnableSMB2Protocol $true")
os.system("Set-SmbServerConfiguration -EnableSMB3Protocol $true")

The original code was enabling the insecure SMBv1 protocol. This protocol version does not support encryption and has multiple known vulnerabilities. The updated code disables SMBv1 and enables SMBv2 and SMBv3, which are more secure versions of the protocol that support encryption.

The disable_smb_v1 function uses the Set-SmbServerConfiguration command to disable SMBv1. The -EnableSMB1Protocol $false argument tells the command to disable the protocol.

The enable_smb_v2_v3 function uses the same command to enable SMBv2 and SMBv3. The -EnableSMB2Protocol $true and -EnableSMB3Protocol $true arguments tell the command to enable these protocols.

After running these functions, you should ensure that all clients connecting to the service are compatible with SMBv2 or SMBv3. You should also test the service to ensure it is functioning correctly after the changes.

References