Problemas de seguridad con el CLR de SqlServer « Devthisblog

Devthisblog Desarrollo .net, Diseño Web, Seguridad… Y todo lo que se me vaya ocurriendo…

junio 15, 2013

Problemas de seguridad con el CLR de SqlServer

Filed under: .net,ASP.Net,BBDD,Programación,Seguridad — Etiquetas: , , , , , — jnavero @ 4:35 pm

En los post anteriores veíamos como crear procedimientos almacenados además de ver un procedimiento almacenado un poco mas complejo.

Como comenté en el segundo post, esto también tiene un problema de fondo que tras hacer diferentes pruebas corroboré lo que me temía. Con lo que debéis tener muy en cuenta antes de utilizar esto.

La práctica…

Para este experimento, he usado una maquina virtual con SqlServer instalada a la que le he dado permisos para ejecutar procedimientos almacenados con el CLR, además he habilitado la conectividad para poder acceder a ella desde otro ordenador (en mi caso mi maquina host).

Mi procedimiento almacenado es el siguiente:

 PL/SQL | 
 
 copy code |
?

01
    
02
<Microsoft.SqlServer.Server.SqlProcedure()> _
03
    PUBLIC Shared Sub ejecuta()
04
        Try
05
            Dim s AS String = "c:windowssystem32calc.exe"
06
            Dim p AS NEW Process()
07
            p.StartInfo.FileName = s
08
            p.START()
09
            SqlContext.Pipe.Send("Main Ok")
10
        Catch ex AS EXCEPTION
11
            SqlContext.Pipe.Send("Error: " + ex.Message)
12
        END Try
13
    END Sub
14

Implementamos este procedimiento almacenado y lo ejecutamos. Como vemos un simple código que ejecuta la calculadora de Windows.
Una vez ejecutado, aparece el cartel de Main Ok. Si miramos los procesos de nuestro ordenador donde estamos ejecutando el Management Studio ni rastro de la calculadora.
Si miramos el servidor la calculadora tampoco ha arrancado ahora bien, si miramos los procesos y le damos a ver todos los procesos, tenemos esto:

proceso

Si, veis bien!! la calculadora de Windows como un servicio de red…

Reflexión de todo esto:
No se me ocurre una forma segura de utilizar esto en un servidor teniendo en cuenta que con esta funcionalidad podemos hacer prácticamente lo que queramos. Desde mi punto de vista, se puede hacer un procedimiento almacenado para subir un troyano, que posteriormente se almacene en alguna ruta del servidor y después ejecutar el proceso.

No hay comentarios »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress