MSSQL的安全設(shè)置
發(fā)表時間:2023-05-27 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]前 SQL INJECTION 攻擊測試愈演愈烈, 很多大型的網(wǎng)站和論壇都相繼被注入。 這些網(wǎng)站一般使用的多為 SQL SERVER 數(shù)據(jù)庫, 正因?yàn)槿绱耍?很多人開始懷疑 SQL SERVER ...
前 SQL INJECTION 攻擊測試愈演愈烈, 很多大型的網(wǎng)站和論壇都相繼被注入。 這些網(wǎng)站一般使用的多為 SQL SERVER 數(shù)據(jù)庫, 正因?yàn)槿绱耍?很多人開始懷疑 SQL SERVER 平安性。 其實(shí) SQL SERVER 2000 已經(jīng)通過了美國政府的 C2 級安全認(rèn)證 - 這是該行業(yè)所能擁有的最高認(rèn)證級別, 所以使用 SQL SERVER 還是相當(dāng)?shù)钠桨驳漠?dāng)然和 ORCAL DB2 等還是有差距, 但是 SQL SERVER 易用性和廣泛性還是能成為我繼續(xù)使用下去的理由。 那怎么樣才干使 SQL SERVER 設(shè)置讓人使用的放心呢?
第一步肯定是打上 SQL SERVER 最新的平安補(bǔ)丁 . 如果這一步都沒有做好, 那我也沒有繼續(xù)下去的必要了
第 二步是修改默認(rèn)的 1433 端口, 并且將 SQL SERVER 隱藏。 這樣能禁止對試圖枚舉網(wǎng)絡(luò)上現(xiàn)有的 SQL Server 客戶端所發(fā)出的廣播作出響應(yīng)。 另外, 還需要在 TCP/IP 篩選中將 1433 端口屏蔽掉, 盡可能的隱藏你 SQL SERVER 數(shù)據(jù)庫。 這樣子一但讓攻擊創(chuàng)建了 SQL SERVER 賬號, 也不能馬上使用查詢分析器遠(yuǎn)程登陸來進(jìn)行下一步的攻擊。 單從 ASP PHP 等頁面構(gòu)造惡意語句的話, 還有需要檢查返回值的問題, 總比 不上直接查詢分析器來得利落。 所以我首先要做到即使讓別人注入了也不能讓攻擊者下一步做得順當(dāng)。 修改方法:企業(yè)管理器 --> 數(shù)據(jù)庫組 --> 屬性 --> 慣例 --> 網(wǎng)絡(luò)配置 --> TCP/IP --> 屬性 這兒將你默認(rèn)端口進(jìn)行修改, 和 SQL SERVER 隱藏。
第三步是很重要的一步, SQL INJECTION 往往在 WEB CODE 中產(chǎn)生。 而做為系統(tǒng)管理員或者數(shù)據(jù)庫管理員, 總不能常常的去看每一段代碼。 即使經(jīng)常看代碼, 也不能保證我上面的疏忽。 那怎么辦?就要從數(shù) 據(jù)庫角色著手, 讓數(shù)據(jù)庫用戶的權(quán)限劃分到最低點(diǎn)。 SQL SERVER 默認(rèn)權(quán)限讓人真的很頭疼, 權(quán)限大得非常的高, 權(quán)限小的又什么都做不了 SYSADMIN 和 db_owner 真是讓人又愛又恨。 攻擊者一但確 認(rèn)了網(wǎng)站存在 SQL INJECTION 漏洞, 肯定有一步操作方法就是測試網(wǎng)站的 SQL SERVER 使用者具有多大的權(quán)限。 一般都會借助 SELECT IS_SRVROLEMEMBER 'sysadmin' 或者 SELECT IS_MEMBER 'db_owner' 再或者用 user = 0 讓字符和數(shù)字進(jìn)行比擬, SQL SERVER 就會提示了錯誤信息, 從該信息中即可知道一些敏感信息 ) 等語句進(jìn)行測試。 方法還有, 也不敢多說了其一怕錯, 其二怕聯(lián)盟中的人扁。 當(dāng)前, 如果網(wǎng)站的數(shù)據(jù)庫使用者用的 SA 權(quán)限, 再加上確認(rèn)了 WEB 所處在絕對路徑, 那么就宣告了網(wǎng)站的 OVER db_owner 權(quán)限也一樣, 如果確認(rèn)了絕對路徑, 那么有 50 %的機(jī)會能給你機(jī)器中上 WEB 方式的木馬, 如海陽等。 所以這兒我確認(rèn)了一點(diǎn), 必需要創(chuàng)建自已的權(quán)限, 讓攻擊者找不著下嘴的地方。 這兒引用一個 SQL SERVER 聯(lián)機(jī)協(xié)助中的例子:
創(chuàng)立 SQL Server 數(shù)據(jù)庫角色的方法(企業(yè)管理器)
創(chuàng)立 SQL Server 數(shù)據(jù)庫角色
1. 展開服務(wù)器組, 然后展開服務(wù)器。
2. 展開 " 數(shù)據(jù)庫 " 文件夾, 然后展開要在其中創(chuàng)建角色的數(shù)據(jù)庫。
3. 右擊 " 角色 " 然后單擊 " 新建數(shù)據(jù)庫角色 " 命令。
4. " 名稱 " 框中輸入新角色的名稱。
5. 單擊 " 添加 " 將成員添加到 " 規(guī)范角色 " 列表中, 然后單擊要添加的一個或多個用戶。 可選)
只有選定數(shù)據(jù)庫中的用戶才干被添加到角色中。
對象權(quán)限
處置數(shù)據(jù)或執(zhí)行過程時需要稱為對象權(quán)限的權(quán)限類別:
SELECT INSERT UPDATE 和 DELETE 語句權(quán)限, 可以應(yīng)用到整個表或視圖中。
SELECT 和 UPDATE 語句權(quán)限, 可以有選擇性地應(yīng)用到表或視圖中的單個列上。
SELECT 權(quán)限, 可以應(yīng)用到用戶定義函數(shù)。
INSERT 和 DELETE 語句權(quán)限, 會影響整行, 因此只可以應(yīng)用到表或視圖中, 而不能應(yīng)用到單個列上。
EXECUTE 語句權(quán)限, 可以影響存儲過程和函數(shù)。
語句權(quán)限
創(chuàng) 建數(shù)據(jù)庫或數(shù)據(jù)庫中的項(xiàng)(如表或存儲過程)所涉及的活動要求另一類稱為語句權(quán)限的權(quán)限。 例如, 如果用戶必需能夠在數(shù)據(jù)庫中創(chuàng)建表, 則應(yīng)該向該用戶授予 CREATE TABLE 語句權(quán)限。 語句權(quán)限(如 CREATE DATABASE 適用于語句自身, 而不適用于數(shù)據(jù)庫中定義的特定對象。
語句權(quán)限有:
BACKUP DATABASE
BACKUP LOG
CREATE DATABASE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
暗示性權(quán)限
暗示性權(quán)限控制那些只能由預(yù)定義系統(tǒng)角色的成員或數(shù)據(jù)庫對象所有者執(zhí)行的活動。 例如, sysadmin 固定服務(wù)器角色成員自動繼承在 SQL Server 裝置中進(jìn)行操作或查看的全部權(quán)限。
數(shù)據(jù)庫對象所有者還有暗示性權(quán)限, 可以對所擁有的對象執(zhí)行一切活動。 例如, 擁有表的用戶可以檢查、添加或刪除數(shù)據(jù), 更改表定義, 或控制允許其他用戶對表進(jìn)行操作的權(quán)限。
db_owner 數(shù)據(jù)庫中有全部權(quán)限。
db_accessadmin 可以添加或刪除用戶 ID
db_securityadmin 可以管理全部權(quán)限、對象所有權(quán)、角色和角色成員資格。
db_ddladmin 可以發(fā)出 ALL DDL 但不能發(fā)出 GRANT REVOKE 或 DENY 語句。
db_backupoperator 可以發(fā)出 DBCC CHECKPOINT 和 BACKUP 語句。
db_datareader 可以選擇數(shù)據(jù)庫內(nèi)任何用戶表中的所有數(shù)據(jù)。
db_datawriter 可以更改數(shù)據(jù)庫內(nèi)任何用戶表中的所有數(shù)據(jù)。
db_denydatareader 不能選擇數(shù)據(jù)庫內(nèi)任何用戶表中的任何數(shù)據(jù)。
db_denydatawriter 不能更改數(shù)據(jù)庫內(nèi)任何用戶表中的任何數(shù)據(jù)。
這兒把新建的數(shù)據(jù)庫角色的權(quán)限配置好, 比如需要使用哪個表、視圖、存儲過程等。 然后把 Db_owner 和 db_securityadmin db_backupoper 取消, 不給攻擊者 BACKUP DATABASE 和 CREATE TABLE 機(jī)會, 一但攻擊者具有這兩個權(quán)限, 那么你網(wǎng)站就還處在十分危險的狀態(tài)。 還有注意一下, 創(chuàng)建數(shù)據(jù)庫賬號時, 千萬不能對服務(wù)器角色進(jìn)行選擇。
第 四步是修改 SQL SERVER 內(nèi)置存儲過程。 SQL SERVER 估計(jì)是為了裝置或者其它方面, 內(nèi)置了一批危險的存儲過程。 能讀到注冊表信息, 能寫入注冊表信息, 能讀磁盤共享信息等等 ...... 各位看到這兒, 心里可能會在想, 網(wǎng)站中有其它代碼, 又不像查詢分析器那樣能查接將結(jié)果輸出。 給你這個權(quán)限, 又不能怎么樣, 還是看不到信息。 如果各位這樣想就 大錯特錯了提示一下, 如果攻擊者有 CREATE TABLE 權(quán)限, 那么創(chuàng)建一個臨時表, 然后將信息 INSERT 表中, 然 SELECT 進(jìn)去, 接著跟數(shù)字進(jìn)行比擬, 讓 SQL SERVER 報(bào)錯, 那么結(jié)果就全出來了 ...... 所以我要報(bào)著寧錯殺, 不放過的態(tài)度進(jìn)行修補(bǔ)。
先來列出危險的內(nèi)置存儲過程:
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 過程刪除 . 比較全面 . 一切為了平安 !
刪除有安全隱患的擴(kuò)展 :
exec sp_dropextendedproc 'xp_cmdshell' [ 刪除此項(xiàng)擴(kuò)展后 , 將無法遠(yuǎn)程連接數(shù)據(jù)庫 ]
exec sp_dropextendedproc 'xp_dirtree' [ 刪除此項(xiàng)擴(kuò)展后 , 將無法新建或附加數(shù)據(jù)庫 ]
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'
恢復(fù)擴(kuò)展
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', 'xpstar.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'
全部復(fù)制到 "SQL 查詢分析器 "
點(diǎn)擊菜單上的 --" 查詢 "--" 執(zhí)行 " 就會將有安全問題的 SQL 過程刪除 ( 以上是 7i24 正版用戶的技術(shù)支持 )
更改默認(rèn) SA 空密碼 . 數(shù)據(jù)庫鏈接不要使用 SA 帳戶 . 單數(shù)據(jù)庫單獨(dú)設(shè)使用帳戶 . 只給 public 和 db_owner 權(quán)限 .
數(shù)據(jù)庫不要放在默認(rèn)的位置 .
SQL 不要裝置在 PROGRAM FILE 目錄下面 .
以 上各項(xiàng)全在封殺之列, 例如 xp_cmdshell 屏蔽的方法為: sp_dropextendedproc 'xp_cmdshell' 如果需要的話, 再用 sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll' 進(jìn)行恢復(fù)。 如果你不知道 xp_cmdshell 使用的哪個 .dll 文件的話, 可以使用 sp_helpextendedproc xp_cmdshell 來查看 xp_cmdshell 使用的哪個動態(tài)聯(lián)接庫。 另外, 將 xp_cmdshell 屏蔽后, 還需要做的方法是將 xpsql70.dll 文件進(jìn)行改名, 以防止獲得 SA 攻擊者將它進(jìn)行恢復(fù)。
做到這兒, SQL SERVER 就基本上平安了但是信息還是能一樣的外泄。 終究 SELECT 無法取消的除非你網(wǎng)站用的 HTML SQL INJECTION 防范還需要我這些順序員來注意, 這才是治本之法。 高級設(shè)置篇再接著對 SQL SERVER 平安做下一步的分析。 該篇文章如果有什么錯漏, 請大家多多包涵。 謝謝 ......
上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費(fèi)電腦中毒的煩擾。