SQL的安全解决方案
2012-12-17 15:06
190 查看
SQL的安全解决方案
第一步肯定是打上SQL SERVER最新的安全补丁.如果这一步都没有做好,那我们也没有继续下去的必要了。
1. 建立用户(用计算机管理器);先创建一个帐户如:mssql设置好密码,记住密码,分配好组,如GUETST 2. 在分配其他必须权限,此处如果配置不好SQL将无法启动(例:mssql装在D
盘)右键点D盘,属性,安全,高级,添加,输入创建的帐户名,选择:只有该文件夹,勾上:读取权限(倒数第三个),点确定。
3. 在sql 2000企业管理器中配置该用户启动;右键点我的电脑,管理,服务和应用程序,Microsoft SQL Servers,对着MSSQL点右键,安全性,最下面: 启动服务帐户,选择本帐户,输
入:.\帐号名,输入密码,点确定,就OK了
有的时候服务“MSSQLSERVER”启动又停止,出现这种问题请检查安装目录的权限问题,和创建的用户mssql的隶属于的问题,有时可能需要管理员组的权限的。
第 二步是修改默认的1433端口,并且将SQL SERVER隐藏。这样能禁止对试图枚举网络上现有的 SQL Server 客户端所发出的广播作出响应。另外,还需要在TCP/IP筛选中将1433端口屏蔽掉,
尽可能的隐藏你的SQL SERVER数据库。这样子一但让攻击创建了SQL SERVER的账号,也不能马上使用查询分析器远程登陆来进行下一步的攻击。单从ASP,PHP等页面构造恶意语句的话,还有
需要查看返回值的问题,总比不上直接查询分析器来得利落。所以我们首先要做到即使让别人注入了,也不能让攻击者下一步做得顺当。修改方法:企业管理器 --> 你的数据库组 --> 属性
--> 常规 --> 网络配置 --> TCP/IP --> 属性 ,在这儿将你的默认端口进行修改,和SQL SERVER的隐藏。
第三步是很重要的一步,SQL INJECTION往往在WEB CODE中产生。而做为系统管理员或者数据库管理员,总不能常常的去看每一段代码。即使常常看代码,也不能保证我们在上面的疏忽。那怎
么办?我们就要从数据库角色着手,让数据库用户的权限划分到最低点。SQL SERVER的默认权限让人真的很头疼,权限大得非常的高,权限小的又什么都做不了,SYSADMIN和db_owner真是让
人又爱又恨。攻击者一但确认了网站存在SQL INJECTION漏洞,肯定有一步操作步骤就是测试网站的SQL SERVER使用者具有多大的权限。一般都会借助SELECT IS_SRVROLEMEMBER('sysadmin')
,或者SELECT IS_MEMBER('db_owner'),再或者用user = 0(让字符和数字进行比较,SQL SERVER就会提示了错误信息,从该信息中即可知道一些敏感信息)等语句进行测试。方法还有,我也
不敢多说了。其一怕错,其二怕联盟中的人扁。在当前,如果网站的数据库使用者用的是SA权限,再加上确认了WEB所处在的绝对路径,那么就宣告了你的网站的OVER。db_owner权限也一样,
如果确认了绝对路径,那么有50%的机会能给你的机器中上WEB 方式的木马,如海阳等。所以这儿我们确认了一点,我们必须要创建自已的权限,让攻击者找不着下嘴的地方。在这儿引用一
个SQL SERVER联机帮助中的例子:
创建 SQL Server 数据库角色的方法(企业管理器)
创建 SQL Server 数据库角色
1. 展开服务器组,然后展开服务器。
2. 展开"数据库"文件夹,然后展开要在其中创建角色的数据库。
3. 右击"角色",然后单击"新建数据库角色"命令。
4. 在"名称"框中输入新角色的名称。
5. 单击"添加"将成员添加到"标准角色"列表中,然后单击要添加的一个或多个用户。(可选)
只有选定数据库中的用户才能被添加到角色中。
对象权限
处理数据或执行过程时需要称为对象权限的权限类别:
· SELECT、INSERT、UPDATE 和 DELETE 语句权限,它们可以应用到整个表或视图中。
· SELECT 和 UPDATE 语句权限,它们可以有选择性地应用到表或视图中的单个列上。
· SELECT 权限,它们可以应用到用户定义函数。
· INSERT 和 DELETE 语句权限,它们会影响整行,因此只可以应用到表或视图中,而不能应用到单个列上。
· EXECUTE 语句权限,它们可以影响存储过程和函数。
语句权限
创建数据库或数据库中的项(如表或存储过程)所涉及的活动要求另一类称为语句权限的权限。例如,如果用户必须能够在数据库中创建表,则应该向该用户授予 CREATE TABLE 语句权限。
语句权限(如 CREATE DATABASE)适用于语句自身,而不适用于数据库中定义的特定对象。
语句权限有:
· BACKUP DATABASE
· BACKUP LOG
· CREATE DATABASE
· CREATE DEFAULT
· CREATE FUNCTION
· CREATE PROCEDURE
· CREATE RULE
· CREATE TABLE
· CREATE VIEW
暗示性权限
暗示性权限控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。例如,sysadmin 固定服务器角色成员自动继承在 SQL Server 安装中进行操作或查看的全部权限。
数据库对象所有者还有暗示性权限,可以对所拥有的对象执行一切活动。例如,拥有表的用户可以查看、添加或删除数据,更改表定义,或控制允许其他用户对表进行操作的权限。
db_owner 在数据库中有全部权限。
db_accessadmin 可以添加或删除用户 ID。
db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。
db_ddladmin 可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。
db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。
db_datareader 可以选择数据库内任何用户表中的所有数据。
db_datawriter 可以更改数据库内任何用户表中的所有数据。
db_denydatareader 不能选择数据库内任何用户表中的任何数据。
db_denydatawriter 不能更改数据库内任何用户表中的任何数据。
在这儿把新建的数据库角色的权限配置好,比如需要使用哪个表、视图、存储过程等。然后把Db_owner和db_securityadmin、 db_backupoperator取消,不给攻击者BACKUP DATABASE和CREATE
TABLE的机会,一但攻击者具有这两个权限,那么你的网站就还处在十分危险的状态。还有注意一下,在创建数据库账号时,千万不能对服务器角色进行选择。
第 四步是修改SQL SERVER内置存储过程。SQL SERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等......各
位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分析器那样能查接将结果输出。给你这个权限,又不能怎么样,还是看不到信息。如果各位这样想就大错特错了。提示
一下,如果攻击者有CREATE TABLE的权限,那么创建一个临时表,然后将信息INSERT到表中,然SELECT出来,接着跟数字进行比较,让SQL SERVER报错,那么结果就全出来了......所以我们
要报着宁错杀,不放过的态度进行修补。
先来列出危险的内置存储过程:
xp_cmdshell
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
ActiveX自动脚本:
sp_OACreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop
将有安全问题的SQL过程删除.比较全面.一切为了安全!
xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。请把它去掉。使用这个SQL语句:
use master
sp_dropextendedproc 'xp_cmdshell'
如果你需要这个存储过程,请用这个语句也可以恢复过来。
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
删除有安全隐患的扩展:
exec sp_dropextendedproc 'xp_cmdshell' [删除此项扩展后,将无法远程连接数据库]
exec sp_dropextendedproc 'xp_dirtree' [删除此项扩展后,将无法新建或附加数据库]
exec sp_dropextendedproc 'xp_enumgroups'
exec sp_dropextendedproc 'xp_fixeddrives'
exec sp_dropextendedproc 'xp_loginconfig'
exec sp_dropextendedproc 'xp_regaddmultistring'
exec sp_dropextendedproc 'xp_regdeletekey'
exec sp_dropextendedproc 'xp_regdeletevalue'
exec sp_dropextendedproc 'xp_regread' [还原数据库的时候用到]
exec sp_dropextendedproc 'xp_regremovemultistring'
exec sp_dropextendedproc 'xp_regwrite'
exec sp_dropextendedproc 'xp_enumerrorlogs'
exec sp_dropextendedproc 'xp_getfiledetails'
exec sp_dropextendedproc 'xp_regenumvalues'
恢复扩展
exec sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
exec sp_addextendedproc 'xp_dirtree', 'xpstar.dll'
exec sp_addextendedproc 'xp_enumgroups', 'xplog70.dll'
exec sp_addextendedproc 'xp_fixeddrives', 'xps
e401
tar.dll'
exec sp_addextendedproc 'xp_loginconfig', 'xplog70.dll'
exec sp_addextendedproc 'xp_regaddmultistring', 'xpstar.dll'
exec sp_addextendedproc 'xp_regdeletekey', 'xpstar.dll'
exec sp_addextendedproc 'xp_regdeletevalue', 'xpstar.dll'
exec sp_addextendedproc 'xp_regread', 'xpstar.dll'
exec sp_addextendedproc 'xp_regremovemultistring', 'xpstar.dll'
exec sp_addextendedproc 'xp_regwrite', 'xpstar.dll'
exec sp_addextendedproc 'xp_enumerrorlogs', 'xpstar.dll'
exec sp_addextendedproc 'xp_getfiledetails', 'xpstar.dll'
exec sp_addextendedproc 'xp_regenumvalues', 'xpstar.dll'
全部复制到"SQL查询分析器"
点击菜单上的--"查询"--"执行",就会将有安全问题的SQL过程删除(以上是7i24的正版用户的技术支持)
更改默认SA空密码.数据库链接不要使用SA帐户.单数据库单独设使用帐户.只给public和db_owner权限.
数据库不要放在默认的位置.
SQL不要安装在PROGRAM FILE目录下面.
以 上各项全在我们封杀之列,例如xp_cmdshell屏蔽的方法为:sp_dropextendedproc 'xp_cmdshell',如果需要的话,再用sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'进行恢复。
如果你不知道xp_cmdshell使用的是哪个.dll文件的话,可以使用 sp_helpextendedproc xp_cmdshell来查看xp_cmdshell使用的是哪个动态联接库。另外,将xp_cmdshell屏蔽后,我们还需要
做的步骤是将 xpsql70.dll文件进行改名,以防止获得SA的攻击者将它进行恢复。
第一步肯定是打上SQL SERVER最新的安全补丁.如果这一步都没有做好,那我们也没有继续下去的必要了。
1. 建立用户(用计算机管理器);先创建一个帐户如:mssql设置好密码,记住密码,分配好组,如GUETST 2. 在分配其他必须权限,此处如果配置不好SQL将无法启动(例:mssql装在D
盘)右键点D盘,属性,安全,高级,添加,输入创建的帐户名,选择:只有该文件夹,勾上:读取权限(倒数第三个),点确定。
3. 在sql 2000企业管理器中配置该用户启动;右键点我的电脑,管理,服务和应用程序,Microsoft SQL Servers,对着MSSQL点右键,安全性,最下面: 启动服务帐户,选择本帐户,输
入:.\帐号名,输入密码,点确定,就OK了
有的时候服务“MSSQLSERVER”启动又停止,出现这种问题请检查安装目录的权限问题,和创建的用户mssql的隶属于的问题,有时可能需要管理员组的权限的。
第 二步是修改默认的1433端口,并且将SQL SERVER隐藏。这样能禁止对试图枚举网络上现有的 SQL Server 客户端所发出的广播作出响应。另外,还需要在TCP/IP筛选中将1433端口屏蔽掉,
尽可能的隐藏你的SQL SERVER数据库。这样子一但让攻击创建了SQL SERVER的账号,也不能马上使用查询分析器远程登陆来进行下一步的攻击。单从ASP,PHP等页面构造恶意语句的话,还有
需要查看返回值的问题,总比不上直接查询分析器来得利落。所以我们首先要做到即使让别人注入了,也不能让攻击者下一步做得顺当。修改方法:企业管理器 --> 你的数据库组 --> 属性
--> 常规 --> 网络配置 --> TCP/IP --> 属性 ,在这儿将你的默认端口进行修改,和SQL SERVER的隐藏。
第三步是很重要的一步,SQL INJECTION往往在WEB CODE中产生。而做为系统管理员或者数据库管理员,总不能常常的去看每一段代码。即使常常看代码,也不能保证我们在上面的疏忽。那怎
么办?我们就要从数据库角色着手,让数据库用户的权限划分到最低点。SQL SERVER的默认权限让人真的很头疼,权限大得非常的高,权限小的又什么都做不了,SYSADMIN和db_owner真是让
人又爱又恨。攻击者一但确认了网站存在SQL INJECTION漏洞,肯定有一步操作步骤就是测试网站的SQL SERVER使用者具有多大的权限。一般都会借助SELECT IS_SRVROLEMEMBER('sysadmin')
,或者SELECT IS_MEMBER('db_owner'),再或者用user = 0(让字符和数字进行比较,SQL SERVER就会提示了错误信息,从该信息中即可知道一些敏感信息)等语句进行测试。方法还有,我也
不敢多说了。其一怕错,其二怕联盟中的人扁。在当前,如果网站的数据库使用者用的是SA权限,再加上确认了WEB所处在的绝对路径,那么就宣告了你的网站的OVER。db_owner权限也一样,
如果确认了绝对路径,那么有50%的机会能给你的机器中上WEB 方式的木马,如海阳等。所以这儿我们确认了一点,我们必须要创建自已的权限,让攻击者找不着下嘴的地方。在这儿引用一
个SQL SERVER联机帮助中的例子:
创建 SQL Server 数据库角色的方法(企业管理器)
创建 SQL Server 数据库角色
1. 展开服务器组,然后展开服务器。
2. 展开"数据库"文件夹,然后展开要在其中创建角色的数据库。
3. 右击"角色",然后单击"新建数据库角色"命令。
4. 在"名称"框中输入新角色的名称。
5. 单击"添加"将成员添加到"标准角色"列表中,然后单击要添加的一个或多个用户。(可选)
只有选定数据库中的用户才能被添加到角色中。
对象权限
处理数据或执行过程时需要称为对象权限的权限类别:
· SELECT、INSERT、UPDATE 和 DELETE 语句权限,它们可以应用到整个表或视图中。
· SELECT 和 UPDATE 语句权限,它们可以有选择性地应用到表或视图中的单个列上。
· SELECT 权限,它们可以应用到用户定义函数。
· INSERT 和 DELETE 语句权限,它们会影响整行,因此只可以应用到表或视图中,而不能应用到单个列上。
· EXECUTE 语句权限,它们可以影响存储过程和函数。
语句权限
创建数据库或数据库中的项(如表或存储过程)所涉及的活动要求另一类称为语句权限的权限。例如,如果用户必须能够在数据库中创建表,则应该向该用户授予 CREATE TABLE 语句权限。
语句权限(如 CREATE DATABASE)适用于语句自身,而不适用于数据库中定义的特定对象。
语句权限有:
· BACKUP DATABASE
· BACKUP LOG
· CREATE DATABASE
· CREATE DEFAULT
· CREATE FUNCTION
· CREATE PROCEDURE
· CREATE RULE
· CREATE TABLE
· CREATE VIEW
暗示性权限
暗示性权限控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。例如,sysadmin 固定服务器角色成员自动继承在 SQL Server 安装中进行操作或查看的全部权限。
数据库对象所有者还有暗示性权限,可以对所拥有的对象执行一切活动。例如,拥有表的用户可以查看、添加或删除数据,更改表定义,或控制允许其他用户对表进行操作的权限。
db_owner 在数据库中有全部权限。
db_accessadmin 可以添加或删除用户 ID。
db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。
db_ddladmin 可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。
db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。
db_datareader 可以选择数据库内任何用户表中的所有数据。
db_datawriter 可以更改数据库内任何用户表中的所有数据。
db_denydatareader 不能选择数据库内任何用户表中的任何数据。
db_denydatawriter 不能更改数据库内任何用户表中的任何数据。
在这儿把新建的数据库角色的权限配置好,比如需要使用哪个表、视图、存储过程等。然后把Db_owner和db_securityadmin、 db_backupoperator取消,不给攻击者BACKUP DATABASE和CREATE
TABLE的机会,一但攻击者具有这两个权限,那么你的网站就还处在十分危险的状态。还有注意一下,在创建数据库账号时,千万不能对服务器角色进行选择。
第 四步是修改SQL SERVER内置存储过程。SQL SERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等......各
位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分析器那样能查接将结果输出。给你这个权限,又不能怎么样,还是看不到信息。如果各位这样想就大错特错了。提示
一下,如果攻击者有CREATE TABLE的权限,那么创建一个临时表,然后将信息INSERT到表中,然SELECT出来,接着跟数字进行比较,让SQL SERVER报错,那么结果就全出来了......所以我们
要报着宁错杀,不放过的态度进行修补。
先来列出危险的内置存储过程:
xp_cmdshell
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
ActiveX自动脚本:
sp_OACreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop
将有安全问题的SQL过程删除.比较全面.一切为了安全!
xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。请把它去掉。使用这个SQL语句:
use master
sp_dropextendedproc 'xp_cmdshell'
如果你需要这个存储过程,请用这个语句也可以恢复过来。
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
删除有安全隐患的扩展:
exec sp_dropextendedproc 'xp_cmdshell' [删除此项扩展后,将无法远程连接数据库]
exec sp_dropextendedproc 'xp_dirtree' [删除此项扩展后,将无法新建或附加数据库]
exec sp_dropextendedproc 'xp_enumgroups'
exec sp_dropextendedproc 'xp_fixeddrives'
exec sp_dropextendedproc 'xp_loginconfig'
exec sp_dropextendedproc 'xp_regaddmultistring'
exec sp_dropextendedproc 'xp_regdeletekey'
exec sp_dropextendedproc 'xp_regdeletevalue'
exec sp_dropextendedproc 'xp_regread' [还原数据库的时候用到]
exec sp_dropextendedproc 'xp_regremovemultistring'
exec sp_dropextendedproc 'xp_regwrite'
exec sp_dropextendedproc 'xp_enumerrorlogs'
exec sp_dropextendedproc 'xp_getfiledetails'
exec sp_dropextendedproc 'xp_regenumvalues'
恢复扩展
exec sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
exec sp_addextendedproc 'xp_dirtree', 'xpstar.dll'
exec sp_addextendedproc 'xp_enumgroups', 'xplog70.dll'
exec sp_addextendedproc 'xp_fixeddrives', 'xps
e401
tar.dll'
exec sp_addextendedproc 'xp_loginconfig', 'xplog70.dll'
exec sp_addextendedproc 'xp_regaddmultistring', 'xpstar.dll'
exec sp_addextendedproc 'xp_regdeletekey', 'xpstar.dll'
exec sp_addextendedproc 'xp_regdeletevalue', 'xpstar.dll'
exec sp_addextendedproc 'xp_regread', 'xpstar.dll'
exec sp_addextendedproc 'xp_regremovemultistring', 'xpstar.dll'
exec sp_addextendedproc 'xp_regwrite', 'xpstar.dll'
exec sp_addextendedproc 'xp_enumerrorlogs', 'xpstar.dll'
exec sp_addextendedproc 'xp_getfiledetails', 'xpstar.dll'
exec sp_addextendedproc 'xp_regenumvalues', 'xpstar.dll'
全部复制到"SQL查询分析器"
点击菜单上的--"查询"--"执行",就会将有安全问题的SQL过程删除(以上是7i24的正版用户的技术支持)
更改默认SA空密码.数据库链接不要使用SA帐户.单数据库单独设使用帐户.只给public和db_owner权限.
数据库不要放在默认的位置.
SQL不要安装在PROGRAM FILE目录下面.
以 上各项全在我们封杀之列,例如xp_cmdshell屏蔽的方法为:sp_dropextendedproc 'xp_cmdshell',如果需要的话,再用sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'进行恢复。
如果你不知道xp_cmdshell使用的是哪个.dll文件的话,可以使用 sp_helpextendedproc xp_cmdshell来查看xp_cmdshell使用的是哪个动态联接库。另外,将xp_cmdshell屏蔽后,我们还需要
做的步骤是将 xpsql70.dll文件进行改名,以防止获得SA的攻击者将它进行恢复。
相关文章推荐
- Web系统常见安全漏洞及解决方案-SQL盲注
- Web系统常见安全漏洞及解决方案-SQL盲注
- 解决数据分权访问----SQL 2016 行级安全解决方案
- Sql安全解决方案
- IIS安全工具UrlScan介绍 ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS,使用免费工具) 批改或隐藏IIS7.5的Server头信息 移除X-Powered-By,MVC,ASP.NET_SessionId 的 HTTP头或者cookie名称
- 【互联网安全】关于移动APP漏洞风险,阿里送你解决方案
- SQL Server安全列表
- PetShop中为什么不用存储过程,而使用动态SQL??效率高?安全?
- 2014年6月5日 深圳 IBM 安全解决方案会议通知
- sql 2000 中附加 sql 2005 数据库时,报错误602(已测成功)~~~解决方案
- Web安全之SQL注入
- 趋势科技与VMware共同推进虚拟化安全解决方案
- 出现“System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部”错误的解决方案
- MySQL备份、安全、SQL规范与系统规划
- SGX——intel对抗Trustzone的安全解决方案
- SQL Server 数据库安全相关(SQL语句)
- 企业安全需要全面的整体安全解决方案
- 预防sql注入安全的函数
- 移动安全加密存储解决方案
- 【安全 PHP】sql防注入和xss安全 方案 请喷