您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Server安全管理大搜集
談SQLServer安全管理大搜集胡百敬()精誠公司恆逸資訊2009/9/1新聞深度防禦•利用多層次防禦:–增加攻擊者事蹟敗露的風險–減少攻擊者成功的可能性安全性準則,程序,警醒SQLOS/SQLCLR強化,Audit防火牆,封包過濾器,不用預設的埠號警衛,鎖,追蹤裝置,封條…SSL,會談鑰匙,憑證安全ExecuteAs,signedprocs,schemas權限,加密,安全的metadata密碼安全性準則,預設安全性實體安全防線內部網路Host應用程式資料大綱•認證•加解密•Audit•原則管理•SQLInjection認證•Windows認證較SQL認證為佳SQL認證WINDOWS認證帳號/密碼EncryptedToken(Kerberos)Challenge-Response(NTLM)傳遞加密後的密碼密碼未在網路上傳遞若通訊間未加密,可能招到replay攻擊不會招到replay攻擊(Kerberos)沒有交互認證可透過Kerberos交互認證SQLServer管理登入Windows管理登入DBA建立登入帳號Windows/domainadmin建立登入帳號藉由Windows2003+要求密碼原則Windows要求密碼原則伺服器間的Securitycontext未必一致伺服器間的Securitycontext是一致的資料加密•為何考慮加解密–為安全加一層–一些行業的律法要求•SQLServer2000需要協力廠商•SQLServer2005–內建資料加密功能:對稱鑰匙、非對稱鑰匙、雜湊–支援鑰匙管理•SQLServer2008為加密增加功能–TransparentDataEncryption–ExtensibleKeyManagement資料加密Cell-level加密•內建加解密•可以DDL建立對稱式、非對稱式鑰匙以及憑證–對稱鑰匙與私鑰一定以加密的方式儲存•強化鑰匙自身安全–以使用者的密碼為基礎–自動架構在SQLServer鑰匙管理的架構中•可選擇演算法–包含DES,TRIPLE_DES,AES(128,192,或256)資料加密最佳做法•儘量考慮在應用程式層加/解密•只對必要的資料加密•使用對稱式加密•小心規畫–鑰匙管理非常重要–了解既有程式碼所需的改變–考慮鑰匙大小與演算法所需的CPU運算力鑰匙階層資料加密注意事項•SQLServer不確認憑證的正確性–過期日–CRL(CertificateRevocationList)–不加入PublicKeyInfrastructure(PKI)•存放加密的資料類型需Varbinary•跨資料庫的共用性•備份/還原鑰匙管理語法範例--ServiceMasterKey--備份ServiceMasterKeyBACKUPSERVICEMASTERKEYTOFILE='path_to_file'ENCRYPTIONBYPASSWORD='password‘--DatabaseMasterKey--以不同的保護密碼,在建立一份DatabaseMasterKeyALTERMASTERKEYADDENCRYPTIONBYPASSWORD='SecondDBAP@ssword';--刪掉另一份DatabaseMasterKeyALTERMASTERKEYDROPENCRYPTIONBYPASSWORD='SecondDBAP@ssword';鑰匙管理語法範例--憑證--備份憑證到硬碟成為檔案BACKUPCERTIFICATENorthwindCertTOFILE='C:\MyServerCert'WITHPRIVATEKEY(FILE='C:\MyServerCertKey',ENCRYPTIONBYPASSWORD='password');--還原先前的憑證CREATECERTIFICATEMyServerSertFROMFILE='C:\MyServerCert'WITHPRIVATEKEY(FILE='C:\MyServerCertKey',DECRYPTIONBYPASSWORD='password');鑰匙管理語法範例--對稱鑰匙--透過KEY_SOURCE和IDENTITY_VALUE建立對稱鑰匙,所以它可重建CREATESYMMETRICKEYkey_demo_recreateWITHALGORITHM=TRIPLE_DES,KEY_SOURCE='鑰匙源-保護這個來源定義的秘密!',IDENTITY_VALUE='鑰匙辨別碼'ENCRYPTIONBYCERTIFICATEcert_demoChannel加密•SQLServer2000後完整支援SSL加密–Clients:MDAC2.6orlater–Forceencryptionfromclientorserver•Login封包加密–不管加密設定為何,都會使用–自2000開始支援–自2005可以自行產生憑證Channel加密•安全重於效率時,啟動channelencryption•在伺服器端安裝憑證•使用者端啟動”強制通訊協定加密”透過SQLTrace/Profiler監控•以可重用的範本為基礎建立追蹤•最追蹤進行時,可以監看追蹤結果•將追蹤的結果存放在資料表•可啟動、暫停、停止追蹤•可重新執行追蹤的動作以DDL/DML觸發追蹤•當某些變更發生時,執行追蹤•建立變更歷程•防止登入,架構、資料等變更•可以在變更時執行商業邏輯SQLServerAudit•追蹤和記錄系統發生的事件•可追蹤伺服器或資料庫等級的變動•可透過Transact-SQL管理•追蹤失敗可以停止執行SQLServer服務•要稽核SELECT、UPDATE等行為在條件式內的資料值部分,需上Cumulativeupdatepackage3forSQLServer2008ServicePack1以原則為基礎的管理•容易地同時在多部伺服器上檢查有關安全的各項原則•msdb資料庫中PolicyAdministratorRole資料庫角色的成員對於系統上的原則擁有完整控制權一般常見的攻擊可能影響你的常見弱點SQLInjectionCross-SiteScriptingBufferOverflowsSQLInjection•讓意圖不軌的使用者透過SQL語法控制系統•技術門檻低,容易實做,透過網路搜尋可取得大量資料•可以從各種地方攻擊資料庫後,再由資料庫影響各種應用系統(Web,client/server…等)•Pattern:針對無法信任的資料建立動態SQL語法!SQLInjection廣泛而著名的攻擊March2006印度政府July2007MicrosoftUKAugust2007UnitedNationsJanuary2008大量的SQLinjection攻擊,10,000+systems程式碼哪裡有問題?publicvoidSample(StringNameStr){StringsqlQuery=String.Format(SELECT*FROM[Table1]WHEREName='{0}',NameStr);SqlCommandsqlCmd=newSqlCommand(sqlQuery,newSqlConnection(connectionString));...}Pattern:針對無法信任的資料建立動態SQL語法!NameStr=‘Kevin’SELECT*FROM[Table1]WHEREName=‘Kevin’NameStr=‘TechEd’SELECT*FROM[Table1]WHEREName=‘TechEd’NameStr=x’;DROPTABLETable1;--SELECT*FROM[Table1]WHEREName=‘x’;DROPTABLETable1;--’防禦資料隱碼(SQLInjection)•檢查所有輸入–除非經過證實,否則請將所有的使用者輸入視為是有害的–請找尋有效的資料,並拒絕其他的所有輸入–請考慮使用規則運算式,移除不需要的特殊字元或函數,限制長度–若是內部系統,考慮限制可存取的來源電腦•以最低需求的權限執行–絕對不視為「sa」而執行–限制對內建預存程序的存取•使用預存程序及SQL參數化查詢來存取資料•不要回應存取錯誤SQLInjection分析工具•MicrosoftCodeAnalysisTool.NET(CAT.NET)v1CTP二進位碼分析工具,分析Cross-SiteScripting(XSS),SQLInjection和XPathInjection=en&FamilyID=0178e2ef-9da8-445e-9348-c93f24cc9f9d•MicrosoftSourceCodeAnalyzerforSQLinjection–對偵測ASP原始程式碼的SQLinjection有幫助–JulyCTP:=58A7C46E-A599-4FCB-9AB4-A4334146B6BA參考資料•SQLServer2008WhitePapers((SQL.10).aspx)–CryptographyinSQLServer()–AuditinginSQLServer2008()•=blog••
本文标题:Server安全管理大搜集
链接地址:https://www.777doc.com/doc-1250168 .html