Article ID: 117863, created on Mar 7, 2014, last review on Aug 12, 2014

  • Applies to:
  • Virtuozzo containers for Windows

Síntomas

  1. La ejecución del comando vzctl enter <ctid> devuelve el siguiente error:

    C:\>vzctl enter 1164
    ERROR: Response timeout for operation 'exec'
    Environment is not changed.
    Command 'enter' is successfully finished
    
  2. En el registro de seguridad de Windows del contenedor pueden verse gran cantidad de eventos con el ID 1012:

    Log Name:      System
    Source:        Microsoft-Windows-TerminalServices-RemoteConnectionManager
    Date:          9/30/2013 5:21:21 AM
    Event ID:      1012
    Task Category: None
    Level:         Information
    Keywords:      Classic
    User:          N/A
    Computer:      vps
    Description:
    Remote session from client name a exceeded the maximum allowed failed logon attempts. The session was forcibly terminated.
    
  3. Si se experimenta el mismo problema en un gran número de contenedores, puede que el nodo resulte completamente bloqueado con todas las CPUs alcanzando una carga del 100%.

Causa

Los contenedores experimentan ataques de Distributed Denial of Service (DDoS) de fuerza bruta mediante Escritorio Remoto (RDP).

Resolución

El administrador del nodo/contenedor debería mejorar las medidas de seguridad. Estas incluyen:

  1. Análisis del registro de seguridad y bloqueo de redes comunes de atacantes mediante un firewall.

  2. Cambio del puerto RDP para el contenedor. Este artículo de Microsoft detalla cómo realizar esta acción: Cómo cambiar el puerto de escucha para Escritorio remoto.

    Puede establecer un puerto nuevo para el contenedor desde el símbolo del sistema del nodo ejecutando el siguiente comando:

    C:\>reg add "HKEY_LOCAL_MACHINE\vzCTID\MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TCP" /v PortNumber /t REG_DWORD /d new_port /f
    

    Reemplace CTID por el valor del ID del contenedor, conservando vz en el nombre de la clave de registro y reemplace new_port por el número de puerto deseado.

    Si desea definir otro puerto RDP para todos los contenedores en ejecución, puede realizar esta acción ejecutando el siguiente comando:

    C:\>for /f %i in ('vzlist -Ho veid') do reg add "HKEY_LOCAL_MACHINE\vz%i\MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TCP" /v PortNumber /t REG_DWORD /d new_port /f
    

    Reemplace new_port por el número de puerto deseado.

  3. Activación de la "Autenticación a nivel de red" para dichos contenedores.

    La autenticación a nivel de red o Network Level Authentication (NLA) para Remote Desktop Services Connections puede reducir el riesgo de ataques de denegación de servicio.

    • Para activar NLA únicamente en el contenedor afectado, realice los pasos detallados en el siguiente artículo de Microsoft: Configuración de Autenticación a nivel de red para conexiones de Servicios de Escritorio remoto.

    • Para activar NLA en todos los contenedores del nodo, ejecute el siguiente comando:

      C:\>for /f %i in ('vzlist -Ho veid') do reg add "HKEY_LOCAL_MACHINE\vz%i\MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
      
    • Para activar NLA automáticamente para todos los contenedores nuevos, descargue el script vz-postcreate.cmd adjunto a este artículo y sitúelo en la carpeta C:\vz\Scripts\.

    Tenga en cuenta que la carpeta puede ser, por ejemplo, D:\vz\Scripts. Durante la instalación de Parallels Virtuozzo Containers, se crea automáticamente la subcarpeta Scripts en la carpeta especificada para el almacenamiento de todos los archivos de configuración de contenedor. Por omisión, se utiliza la carpeta C:\vz. De todos modos, puede que haya definido otra ruta para esta carpeta.

Información adicional

Con el fin de identificar los contenedores que experimentan este ataque, puede usarse el siguiente script de Powershell:

$out = select-string KlpcOnNewTerminalSession C:\vzlog\2013.10.11-vzlog.log
$ctids = (vzlist -Hao veid) -replace " ",""
$sessioncount = foreach ($ctid in $ctids) { $count = $out -match "ctid=$ctid" | measure | select -exp count ; "$ctid : $count" }
$sessioncount | sort-object { [double]$_.split(":")[-1] } –descending

En el script deberá cambiar la fecha del archivo de registro por la fecha actual. Tenga en cuenta que se acepta el uso de wildcards, como por ejemplo 2013.10.0*-vzlog.log. Asimismo, los IDs de los contenedores pueden añadirse explícitamente:

$ctids = 101, 102, 103

Ejemplo de la salida:

1014 : 3048
1028 : 1229
2541 : 1180
1126 : 1124
1002 : 1102
1212 : 1086
3211 : 1063
3231 : 1056

La primera columna representa los IDs de los contenedores y la segunda columna muestra la cantidad de sesiones RDP creadas para el periodo de registro especificado.

d02f9caf3e11b191a38179103495106f 2897d76d56d2010f4e3a28f864d69223 965b49118115a610e93635d21c5694a8

Email subscription for changes to this article
Save as PDF