Professional Documents
Culture Documents
Seguridad
Amenazas
Vulnerabilidad
Identidad y control de acceso
Implementacin segura
Amenaza o
Definicin
vulnerabilidad
Mitigacin
Directivas de
seguridad
Principio de
"privilegios
mnimos"
Boletines de
seguridad
Amenaza o
vulnerabilidad
Definicin
Microsoft publica
actualizaciones de software
El sistema no est
para mejorar la seguridad de
actualizado (no se han
SQL Server. Si no se siguen
aplicado las
o se aplican estas
actualizaciones de
actualizaciones de software,
software)
el sistema ser ms
vulnerable a los ataques.
Vulnerabilidades de
seguridad de los
puertos de red
Configuracin
incorrecta de las
cuentas de servicio
Mitigacin
rea expuesta
demasiado grande
Procedimientos
almacenados
innecesarios
habilitados
Algunos procedimientos
almacenados extendidos
permiten el acceso al
sistema operativo o al
registro.
Amenaza o
Definicin
vulnerabilidad
Mitigacin
Cuentas de
usuario sin
auditar
Amenaza o
vulnerabilidad
Definicin
Inyeccin de
cdigo SQL
Contraseas
incrustadas
Mitigacin
Amenaza o
vulnerabilidad
Definicin
Mitigacin
Certificados
aplicados
incorrectamente
ejecutan. Existe un ataque menos directo que inyecta cdigo daino en cadenas que estn
destinadas a almacenarse en una tabla o como metadatos. Cuando las cadenas almacenadas
se concatenan posteriormente en un comando SQL dinmico, se ejecuta el cdigo daino.
El proceso de inyeccin consiste en finalizar prematuramente una cadena de texto y anexar
un nuevo comando. Como el comando insertado puede contener cadenas adicionales que se
hayan anexado al mismo antes de su ejecucin, el atacante pone fin a la cadena inyectada
con una marca de comentario "--". El texto situado a continuacin se omite en tiempo de
ejecucin.
En el siguiente script se muestra una sencilla inyeccin de cdigo SQL. El script crea una
consulta SQL concatenando cadenas no modificables con una cadena especificada por el
usuario:
var Shipcity;
ShipCity = Request.form ("ShipCity");
var sql = "select * from OrdersTable where ShipCity = '" + ShipCity +
"'";
Funcin de aplicacin
Todas las bases de datos incluyen dos entidades que aparecen como
usuarios en las vistas de catlogo: INFORMATION_SCHEMA y sys. SQL
Server necesita estas dos entidades. No son entidades de seguridad y no
se pueden modificar ni quitar.
Inicios de sesin de SQL Server basados en certificados
Las entidades de seguridad de servidor con nombres incluidos entre signos de nmero
dobles (##) son exclusivamente para uso interno del sistema. Las siguientes entidades de
##MS_SQLResourceSigningCertificate##
##MS_SQLReplicationSigningCertificate##
##MS_SQLAuthenticatorCertificate##
##MS_AgentSigningCertificate##
##MS_PolicyEventProcessingLogin##
##MS_PolicySigningCertificate##
##MS_PolicyTsqlExecutionLogin##
Nombre de la
Descripcin
funcin de nivel de
servidor
sysadmin
serveradmin
securityadmin
processadmin
Setupadmin
Bulkadmin
Diskadmin
archivos de disco.
Dbcreator
public
Para obtener informacin especfica sobre los permisos de las funciones de nivel de
servidor, vea Permisos de las funciones fijas de servidor (motor de base de datos).
Trabajar con funciones de nivel de servidor
En la tabla siguiente se explican los comandos, las vistas y las funciones que se utilizan
para trabajar con funciones de nivel de servidor.
Caracterstica
Tipo
Descripcin
sp_helpsrvrolemember
(Transact-SQL)
Metadatos
sp_srvrolepermission
(Transact-SQL)
Metadatos
IS_SRVROLEMEMBER
(Transact-SQL)
Metadatos
especificada.
sys.server_role_members
(Transact-SQL)
Metadatos
sp_addsrvrolemember
(Transact-SQL)
Comando
Comando
sp_dropsrvrolemember
(Transact-SQL)
Puede agregar cualquier cuenta de la base de datos y otras funciones de SQL Server a las
funciones del nivel de base de datos. Cada miembro de una funcin de base de datos fija
puede agregar otros inicios de sesin a esa misma funcin.
Importante
No agregue funciones flexibles de la base de datos como miembros de funciones fijas. Esto
podra habilitar un aumento de privilegios no deseado.
En la tabla siguiente se muestran las funciones fijas del nivel de base de datos y sus
capacidades. Estas funciones existen en todas las bases de datos.
db_securityadmin
db_accessadmin
db_datawriter
db_datareader
Funciones de msdb
La base de datos msdb contiene las funciones con fines especiales que se
muestran en la tabla siguiente.
Nombre de funcin de Descripcin
msdb
db_ssisadmin
db_ssisoperator
db_ssisltduser
dc_admin
dc_operator
dc_proxy
En la tabla siguiente se explican los comandos, las vistas y las funciones que se
utilizan para trabajar con funciones del nivel de base de datos.
Caracterstica
Tipo
Descripcin
sp_helpdbfixedrole
(Transact-SQL)
sp_helprolemember
(Transact-SQL)
Comand
Quita una funcin de base de datos.
o
sp_addrole (Transact-SQL)
sp_droprole (TransactSQL)
sp_addrolemember
(Transact-SQL)
sp_droprolemember
(Transact-SQL)
Sintaxis
CREATE CREDENTIAL credential_name WITH IDENTITY = 'identity_name'
[ , SECRET = 'secret' ]
[ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]
/*credential_name
Especifica el nombre de la credencial que se va a crear.
credential_name no
puede comenzar por el signo de nmero (#). Las credenciales del
sistema comienzan por ##.
IDENTITY ='identity_name'
Especifica el nombre de la cuenta que se utilizar para conectarse
fuera del servidor.
SECRET ='secret'
Especifica el secreto necesario para la autenticacin de salida. Esta
clusula es opcional.
Ejemplos
--En el ejemplo siguiente se crea la credencial denominada AlterEgo.
-- La credencial contiene el usuario de Windows JoelPC y una contrasea.
CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
SECRET = '<EnterStrongPasswordHere>';
GO
Ejemplos
/*A. Cambiar la contrasea de una credencial
En el siguiente ejemplo se cambia el secreto almacenado en una
credencial denominada Saddles. La credencial contiene el inicio
de sesin de Windows RettigB y su contrasea. La nueva contrasea
se agrega a la credencial mediante la clusula SECRET.*/
ALTER CREDENTIAL Saddles WITH IDENTITY = 'RettigB',
SECRET = 'sdrlk8$40-dksli87nNN8';
GO
/*B. Quitar la contrasea de una credencial
En el ejemplo siguiente se quita la contrasea de una credencial
denominada Frames. La credencial contiene el inicio de sesin de
Windows Aboulrus8 y una contrasea. Despus de ejecutar la instruccin,
la credencial tendr una contrasea NULL porque no se especifica la
opcin
SECRET.*/
ALTER CREDENTIAL Frames WITH IDENTITY = 'Aboulrus8';
GO
Ejemplos
--En el ejemplo siguiente se quita la credencial denominada Saddles.
DROP CREDENTIAL Saddles;
GO
Asegurables
Los asegurables son los recursos cuyo acceso es regulado por el sistema de autorizacin del
SQL Server Database Engine (Motor de base de datos de SQL Server). Algunos asegurables
pueden estar incluidos en otros, con lo que se crean jerarquas anidadas denominadas
"mbitos" que a su vez se pueden asegurar. Los mbitos asegurables son servidor, base de
datos y esquema.
Servidor
Extremo
Inicio de sesin
Base de datos
Usuario
Funcin
Funcin de aplicacin
Ensamblado
Ruta
Servicio
Catlogo de texto
Certificado
Clave asimtrica
Clave simtrica
Contrato
Esquema
Tipo
Objeto
Objetos
Agregado
Restriccin
Funcin
Procedimiento
Cola
Estadstica
Sinnimo
Tabla
Vista
Clase
Tipo
TYPE
Tabla
OBJECT
Vista
OBJECT
Procedimiento
OBJECT
Funcin
OBJECT
Agregado
OBJECT
Restriccin
OBJECT
Sinnimo
OBJECT
Cola
OBJECT
Estadstica
OBJECT
El SQL Server establece los permisos de acceso a archivos en los archivos de datos fsicos
y de registro de cada base de datos en cuentas especficas. Estos permisos impiden que se
alteren los archivos si se encuentran en un directorio con permisos abiertos. Por ejemplo, si
no se han establecido los permisos y para los permisos del sistema operativo en el
directorio de la base de datos se ha seleccionado Control total para todos, cualquier cuenta
que tenga acceso a ese directorio podr eliminar o modificar los archivos de la base de
datos aunque no tenga permisos de SQL Server para modificar la base de datos.
Los permisos de acceso a archivos se establecen durante cualquiera de las siguientes
operaciones de base de datos: crear, adjuntar, separar, modificar para agregar un nuevo
archivo, realizar copias de seguridad o restaurar.
Cadenas de propiedad
Cuando varios objetos de base de datos obtienen acceso unos a otros de forma secuencial,
la secuencia se denomina cadena. Aunque estas cadenas no existen de manera
independiente, cuando SQL Server recorre los eslabones de una cadena, SQL Server evala
los permisos de los objetos que la componen de manera distinta a si se estuviese obteniendo
acceso a los objetos por separado. Estas diferencias tienen implicaciones importantes en lo
que se refiere a administrar la seguridad.
Las cadenas de propiedad permiten administrar el acceso a varios objetos, por ejemplo, a
varias tablas, estableciendo permisos en un objeto, como una vista. El encadenamiento de
propiedad tambin ofrece una pequea mejora en el rendimiento en los escenarios que
permiten la omisin de comprobaciones de permisos.
Cmo se comprueban los permisos en una cadena
Fojura 11111111111111111
Contexto de seguridad
Es el grupo de entidades de seguridad al que contribuyen los permisos para la
comprobacin de acceso. Son los permisos que estn relacionados con el inicio de
sesin actual o el usuario, a menos que el contexto de seguridad se cambiara a otro
inicio de sesin o usuario utilizando la instruccin EXECUTE AS. El contexto de
seguridad incluye las entidades de seguridad siguientes:
o El inicio de sesin
o El usuario
o Pertenecientes a la funcin
o Pertenecientes al grupo Windows
o Si se utiliza la firma de mdulo, cualquier cuenta de inicio de sesin o de
usuario da cuenta del certificado utilizado para firmar el mdulo que el
usuario est ejecutando actualmente, as como de los pertenecientes a la
funcin asociados de ese entidad de seguridad.
Permiso necesario
El tipo de permiso que se necesita. Por ejemplo, INSERT, UPDATE, DELETE,
SELECT, EXECUTE, ALTER, CONTROL, etc.
Ejemplos
/*Los siguientes ejemplos muestran cmo recuperar la informacin sobre
permisos.
A. Devolviendo la lista completa de los permisos que pueden concederse.
La instruccin siguiente devuelve todo los permisos de Database Engine
(Motor de base de datos) utilizando la funcin fn_builtin_permissions.
Para obtener ms informacin, vea sys.fn_builtin_permissions (TransactSQL).
*/
SELECT * FROM fn_builtin_permissions(default);
GO
/*B. Devolviendo los permisos de una clase de objetos concreta
Tambin puede utilizar la funcin fn_builtin_permissions para ver todos
los
permisos que estn disponibles para una categora protegible. El ejemplo
siguiente devuelve permisos de ensamblados.
*/
SELECT * FROM fn_builtin_permissions('assembly');
GO
/*C. Devolviendo los permisos de un objeto concedidos a la entidad de
seguridad que se ejecuta
Puede utilizar fn_my_permissions para devolver una lista de los permisos
efectivos que son retenidos por el entidad de seguridad de la llamada
sobre un elemento especfico que se puede proteger. Para obtener ms
informacin, vea fn_my_permissions (Transact-SQL). El ejemplo siguiente
devuelve los permisos de un objeto denominado Orders55.
*/
SELECT * FROM fn_my_permissions('Orders55', 'object');
GO
Escenario
use master
go
-- Create a test database.
CREATE DATABASE db_Demo
go
-- Create a certificate on the server. A test key pair can be created
-- using the MakeCert tool that ships with the .NET Framework SDK.
CREATE CERTIFICATE SysProcCert FROM FILE = 'e:\programming\testCert.cer'
go
-- Create a login and map it to the certificate.
CREATE LOGIN login_SysProcCert FROM CERTIFICATE SysProcCert
Go
-- Revoke the connect permission.
REVOKE CONNECT SQL FROM login_SysProcCert ;
go
-- Grant the certificate, through the login, permission to select from
sys.sysprocesses view.
GRANT VIEW SERVER STATE TO login_SysProcCert
go
-- Create a test login.
CREATE LOGIN bob WITH PASSWORD = '<enterStrongPasswordHere>'
go
sesin y el usuario de dicha cuenta, en lugar de hacerlo con la persona que llama al mdulo
o a la instruccin EXECUTE AS. El inicio de sesin de SQL Server o del usuario de la base
de datos se suplanta durante el resto de la sesin o de la ejecucin del mdulo, o bien hasta
que el cambio de contexto se revierta de forma explcita.
Utilice la instruccin REVERT para volver al contexto anterior. El usuario que llama a la
instruccin REVERT debe estar incluido en la misma base de datos donde se ha producido
la suplantacin.
Ejemplo
Utilice la instruccin REVERT para volver al contexto anterior. El usuario que llama a la
instruccin REVERT debe estar incluido en la misma base de datos donde se ha producido
la suplantacin.
Ejemplo
Desencadenadores DDL
Desencadenadores DML
Colas
Procedimientos almacenados
Ejemplo
Escenario
En este escenario, dos usuarios necesitan cuentas para obtener acceso a los datos de los
pedidos de compra almacenados en la base de datos AdventureWorks. Los requisitos son
los siguientes:
La primera cuenta (TestManagerUser) debe poder ver todos los detalles de cada
pedido de compra.
Para cumplir los requisitos de este escenario, el ejemplo se ha dividido en cuatro partes que
describen los conceptos de cadenas de propiedad y cambio de contexto:
1. Configuracin del entorno.
2. Creacin de un procedimiento almacenado para obtener acceso a datos por pedido
de compra.
3. Acceso a los datos mediante un procedimiento almacenado.
4. Restablecimiento del entorno.
1. Configurar el entorno
Use SQL Server Management Studio y el cdigo siguiente para
abrir la base de datos AdventureWorks y use la instruccin
CURRENT_USER de Transact-SQL para comprobar que el usuario
dbo se muestra como contexto.
USE AdventureWorks;
GO
SELECT CURRENT_USER AS 'Current User Name';
GO
2222222222222222
Use este cdigo como usuario dbo para crear dos usuarios en el servidor y en la base de
datos AdventureWorks.
CREATE LOGIN TestManagerUser
WITH PASSWORD = '340$Uuxwp7Mcxo7Khx';
GO
CREATE USER TestManagerUser
FOR LOGIN TestManagerUser
WITH DEFAULT_SCHEMA = Purchasing;
GO
CREATE LOGIN TestEmployeeUser
WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
GO
CREATE USER TestEmployeeUser
FOR LOGIN TestEmployeeUser;
GO
333333333333333333333333333
ON a.PurchaseOrderID = b.PurchaseOrderID
WHERE b.OrderQty > b.ReceivedQty
AND @ProductID = b.ProductID
ORDER BY b.ProductID ASC
END
GO
5555555555555555555555555555555555555555555555555555
77777777
Una vez finalizada esta seccin del ejemplo, el cdigo vuelve a cambiar
el contexto a dbo mediante la instruccin REVERT.
REVERT;
GO
88888888
99999
/* This won't work */
SELECT *
FROM Purchasing.PurchaseOrderHeader;
GO
SELECT *
FROM Purchasing.PurchaseOrderDetail;
GO
1010101010101010101
4. Restablecer el entorno
El cdigo siguiente usa el comando REVERT para devolver el contexto de
la cuenta actual a dbo y, a continuacin, restablece el entorno.
REVERT;
GO
ALTER AUTHORIZATION
ON SCHEMA::Purchasing TO dbo;
GO
DROP PROCEDURE Purchasing.usp_ShowWaitingItems
GO
DROP USER TestEmployeeUser;
GO
DROP USER TestManagerUser;
GO
DROP LOGIN TestEmployeeUser;
GO
DROP LOGIN TestManagerUser;
GO
1111111111