牛方華,楊大哲,劉瑞芳
(1.國網(wǎng)山西省電力公司檢修公司,山西太原030032;2.國網(wǎng)山西省電力公司電力科學(xué)研究院,山西太原030001)
電力信息系統(tǒng)結(jié)構(gòu)化查詢語言注入攻擊原理及安全防護
牛方華1,楊大哲2,劉瑞芳2
(1.國網(wǎng)山西省電力公司檢修公司,山西太原030032;2.國網(wǎng)山西省電力公司電力科學(xué)研究院,山西太原030001)
指出隨著電力信息化的快速發(fā)展,信息系統(tǒng)已成為日常工作的重要組成部分。信息化在給工作帶來便利的同時,各種應(yīng)用攻擊層出不窮。結(jié)構(gòu)化查詢語言注入是現(xiàn)今存在最廣泛的W eb漏洞之一,存在于W eb應(yīng)用程序開發(fā)中。重點闡述了其注入漏洞產(chǎn)生的原因、利用漏洞攻擊的方法和防范該注入攻擊的有效措施,以保障電力信息系統(tǒng)W eb應(yīng)用的安全穩(wěn)定運行。
電力信息系統(tǒng);結(jié)構(gòu)化查詢語言注入;安全防護
作為國家基礎(chǔ)行業(yè)的電力公司,隨著信息化的快速發(fā)展,特別是SG-ERP的實施,電力公司的很多應(yīng)用都是通過信息系統(tǒng)完成的。特別是電力交易、95598交流互動平臺、門戶網(wǎng)站等,由于含有涉及個人、企業(yè)甚至國家的政治秘密。在政治利益、經(jīng)濟利益或其他動機的驅(qū)動下,黑客利用大眾化、工具化技術(shù)對電力公司門戶網(wǎng)站、應(yīng)用系統(tǒng)等存在的漏洞進行攻擊,并進一步利用攻陷的主機進行其他犯罪活動,比如散布病毒、蠕蟲、特洛伊、間諜軟件、僵尸、網(wǎng)絡(luò)釣魚電子郵件、偽造交易等等。而結(jié)構(gòu)化查詢語言SQL(Structured Query Langnage)注入則占據(jù)了重要部分。根據(jù)某省電力公司某月入侵防御系統(tǒng)IPS(Intrusion Prevention System)日志分析,在外部攻擊中,SQL注入攻擊占據(jù)了攻擊總數(shù)的12.8%。
根據(jù)開放式Web應(yīng)用程序項目OWASP(OpenWeb Applicarion Secutity Project)2013年Web十大安全威脅,注入類排名第一,包括SQL注入、OS注入、LDAP注入等。其中,SQL注入攻擊是從正常的WWW端口訪問,表面看起來跟一般的Web頁面訪問沒什么區(qū)別,防火墻不會對SQL注入進行阻隔,即使網(wǎng)站平臺被攻陷也無法及時發(fā)現(xiàn)。
1.1 SQL注入概念和產(chǎn)生的原因
SQL注入是目前比較常見的針對數(shù)據(jù)庫的一種攻擊方式。所謂SQL注入,就是由于網(wǎng)站程序員在編寫代碼的時候,沒有對用戶發(fā)送的查詢數(shù)據(jù)的合法性進行判斷和過濾有害字符,造成攻擊者通過精巧構(gòu)造變量,把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,繞過用戶驗證欺騙應(yīng)用服務(wù)器向后臺數(shù)據(jù)庫發(fā)送了指定的SQL查詢命令,數(shù)據(jù)庫執(zhí)行該SQL語句,執(zhí)行了危害性操作。
1.2 SQL注入分類
SQL注入式攻擊的主要形式有兩種。一是直接注入式攻擊法,指攻擊者直接將代碼插入到與SQL命令串聯(lián)在一起并使得其以執(zhí)行的用戶輸入變量。二是間接的攻擊方法,它將惡意代碼注入要在表中存儲或者作為原數(shù)據(jù)存儲的字符串,在存儲的字符串中會連接到一個動態(tài)的SQL命令中,以執(zhí)行一些惡意的SQL代碼。
1.3 SQL注入危害
通過SQL注入漏洞,可實現(xiàn)非授權(quán)操作后臺的數(shù)據(jù)庫,泄漏敏感信息,破壞數(shù)據(jù)庫內(nèi)容和結(jié)構(gòu)、甚至利用數(shù)據(jù)庫本身的擴展功能控制服務(wù)器操作系統(tǒng)。由于SQL注入漏洞是寄生在Web應(yīng)用程序,通過常規(guī)的防火墻,IDS等防護設(shè)備無法發(fā)現(xiàn)和阻擋其被利用攻擊。
SQL注入的主要方式是將代碼插入到輸入?yún)?shù)中,這些參數(shù)會被置入到SQL命令中加以執(zhí)行。如果未對動態(tài)構(gòu)造的SQL語句所使用的參數(shù)進行正確性審查,那么攻擊者就很可能會修改后臺SQL語句的構(gòu)造。如果攻擊者能夠修改SQL語句,那么該語句將與應(yīng)用的用戶擁有相同的運行權(quán)限。當SQL服務(wù)器執(zhí)行與操作系統(tǒng)交互的命令時,該進程將與執(zhí)行命令的組件擁有相同的權(quán)限[1]。具體流程如圖1所示。
圖1 SQL注入攻擊流程圖
a)尋找SQL注入點。在動態(tài)網(wǎng)頁中,通過構(gòu)造SQL語句,根據(jù)其返回的信息,判斷其是否存在注入點。常用的是利用“’”和“and l=l”、“and l=2”等查詢條件,通過瀏覽器所返回的錯誤信息來判斷是否存在SQL注入漏洞。
b)判斷數(shù)據(jù)庫的類型。通過返回的錯誤信息,可以判斷數(shù)據(jù)庫類型。根據(jù)具體的類型,決定實施攻擊的方法。若存在關(guān)鍵字microsoft,jet,database,engine,則數(shù)據(jù)庫為access;若存在關(guān)鍵字microsoft,odbc,SQLServer,則數(shù)據(jù)庫為SQL Server,本文主要從SQLServer數(shù)據(jù)庫管理系統(tǒng)來介紹SQL注入攻擊的流程。
c)攻擊SQL Server數(shù)據(jù)庫系統(tǒng)。首先要判斷存在注入點的數(shù)據(jù)庫是否支持多句查詢、子查詢、數(shù)據(jù)庫用戶賬號、數(shù)據(jù)庫用戶權(quán)限等。如果用戶權(quán)限為SA,且數(shù)據(jù)庫中存在XP_SMDSHELL存儲過程,則可以直接轉(zhuǎn)利用XP_CMDSHELL存儲過程執(zhí)行“net user hacker by hacker”,生成hacker用戶。如果用戶權(quán)限不是SA,則可以通過探測數(shù)據(jù)庫表名和列名,并探測列值(字段值)了解數(shù)據(jù)庫的相關(guān)信息,在得到數(shù)據(jù)庫的相關(guān)信息之后,就可以擴張權(quán)限。
猜解表名:在注入點后加上“and exists(select count(*)from表名)”。
猜解列名:在注入點后加上“and exists(select count(列名)from表名)”。猜解列的內(nèi)容。猜解用戶名和密碼需要用到asc和mid這兩個函數(shù)。用mid(列名,N,1)函數(shù)截取第N位字符,再用asc(mid(列名,N,1))函數(shù)截取第N位字符的ASCII碼。相關(guān)語句為:and(select top 1 asc(mid(列名,N,1))from表名)>x,x為ASCII碼,再得到ASCII碼后可通過轉(zhuǎn)換工具轉(zhuǎn)譯ASCII碼。
d)提取權(quán)限。通過上傳webshell、木馬等方式進一步取得管理員權(quán)限,進而控制服務(wù)器。
SQL注入漏洞攻擊產(chǎn)生的危害非常大而且普遍性很高,近年來SQL注入攻擊一直在OWASP十大Web應(yīng)用安全風(fēng)險前列。需要在系統(tǒng)編碼、數(shù)據(jù)庫、服務(wù)器等多方面進行安全設(shè)置。
3.1 編碼方面
3.1.1 參數(shù)化查詢
SQL注入源于攻擊者控制查詢數(shù)據(jù)以修改查詢邏輯,因此防范SQL注入攻擊的最佳方式就是將查詢的邏輯與其數(shù)據(jù)分隔,這可以防止執(zhí)行從用戶輸入所注入的命令。這種方式的缺陷是可能對性能產(chǎn)生影響(但影響很小),且必須以這種方式構(gòu)建站點上的每個查詢才能完全有效。只要無意中繞過了一個查詢,就足以導(dǎo)致應(yīng)用受SQL注入的影響。
3.1.2 驗證數(shù)據(jù)的有效性與合法性
按照輸入格式(類型、長度)嚴格校驗用戶的輸入,對特殊字符;<>*|`&$!#()[]:{}‘“../ ..--進行詳細檢查,確保用戶的輸入符合要求;常用的方式是采用白名單,定義系統(tǒng)所接受的參數(shù)的類型、長度等,對于不符合的一律進行過濾。另一種方式為轉(zhuǎn)義特殊字符,避免黑客的直接攻擊。
3.1.3 數(shù)據(jù)封裝
對客戶端提交的數(shù)據(jù)進行封裝,不要將數(shù)據(jù)直接存入cookie中,防止攻擊者獲取cookie中的重要信息;刪除代碼中存在的用戶名、口令信息等敏感字段,替換成輸入框。入侵者不會輕易就獲取到用戶名、口令信息。
3.1.4 設(shè)置錯誤頁面
正常返回的錯誤頁面通常含有數(shù)據(jù)庫、服務(wù)器及系統(tǒng)的信息,攻擊者可通過錯誤頁面有效判斷相關(guān)信息,提高攻擊的準確性和便利性。系統(tǒng)管理員需設(shè)置無敏感信息的錯誤頁面,防止錯誤頁面信息泄露。當返回錯誤頁面,應(yīng)通過重定向到指定的錯誤頁面,對調(diào)試信息進行有效保護。
3.1.5 最小化權(quán)限
過高的用戶權(quán)限,會增大系統(tǒng)的風(fēng)險。系統(tǒng)開發(fā)人員應(yīng)只賦予系統(tǒng)用戶必需的權(quán)限,不要隨意授予數(shù)據(jù)庫管理員的權(quán)限。
3.2 服務(wù)器方面
3.2.1 嚴格控制W eb目錄的訪問權(quán)限
站點的文件目錄禁止Guest用戶訪問,將User用戶權(quán)限修改成只讀權(quán)限,切勿將管理權(quán)限的用戶添加到訪問列表。SQLServer將在注冊表鍵和文件上設(shè)置合適的訪問控制列表ACL(Access Control List),應(yīng)用這些訪問控制列表可實現(xiàn)權(quán)限控制。通過操作系統(tǒng)提供的加密文件系統(tǒng)EFS,數(shù)據(jù)庫文件可在運行SQLServer的賬戶身份下進行加密,只有這個賬戶才能解密這些文件,使數(shù)據(jù)庫更加安全。
3.2.2 最小服務(wù)原則
Web服務(wù)器應(yīng)以最小權(quán)限進行配置,只提供Web服務(wù),這樣可以有效地阻止系統(tǒng)的危險命令,如ftp,cmd,vbscript,等。
3.2.3 加強應(yīng)用系統(tǒng)文件訪問控制
應(yīng)用系統(tǒng)文件承載著信息系統(tǒng)的重要信息,應(yīng)通過操作系統(tǒng)設(shè)置文件及文件夾的訪問權(quán)限,對重要文件進行加密保護,提高其安全性。
3.3 數(shù)據(jù)庫方面
3.3.1 合理的賬號和權(quán)限
采用強壯的管理員口令,禁用或刪除SA用戶,只賦予應(yīng)用程序用戶必需的權(quán)限,防止數(shù)據(jù)庫的未授權(quán)訪問。盡量使用Windows身份驗證模式。配備日志審計等。
3.3.2 必要的安全加固
刪除多余的XP_CMDSHELL等存儲過程。及時更新數(shù)據(jù)庫系統(tǒng)補丁,關(guān)閉多余的數(shù)據(jù)庫服務(wù),在不需要時關(guān)閉數(shù)據(jù)庫遠程連接。
3.3.3 敏感信息加密
將保存在數(shù)據(jù)庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。
SQL注入攻擊作為常見且高危的攻擊方式,系統(tǒng)開發(fā)人員應(yīng)高度重視SQL注入的防御工作,使用安全的編程方法,進行有效的輸入校驗,安全配置服務(wù)器和數(shù)據(jù)庫,加強網(wǎng)站的巡查,可最大程度上防御SQL注入攻擊。
[1]張勇,李力,薛倩.Web環(huán)境下SQL注入攻擊的檢測與防御[J].現(xiàn)代電子技術(shù),2004(15):103-105.
SQL Injection Theory and Satety Protection of Electric Power Information System
NIU Fang-hua1,YANG Da-zhe2,LIU Rui-fang2
(1.State Grid M aintenance Com pany of SEPC,Taiyuan,Shanxi 030032,China;2.State Grid Shanxi Electric Power Research Institute of SEPC,Taiyuan,Shanxi 030001,China)
With the rapid development of electric power informationization,information system has become an important part of dailywork.Although it is convenient,a variety of attacks against the system arise.SQL injection is one of themostwidely spread WEB vulnerabilities,existing in theWeb application development.This article focuses on the causes of SQL injection vulnerabilities,and the methods and effectivemeasures to prevent SQL injection attacks in order to protect the safety and stable operation ofweb application of electric power information system.
electric power information system;SQL injection;safety protection
TP309.2
A
1671-0320(2014)04-0038-03
2014-03-28,
2014-05-21
牛方華(1979-),男,山西運城人,2008年畢業(yè)于中北大學(xué)計算機應(yīng)用技術(shù)專業(yè),工程師,從事信息通信工作;
楊大哲(1983-),男,河南南陽人,2009年畢業(yè)于山東大學(xué)熱能工程專業(yè),工程師,從事信息安全工作;
劉瑞芳(1963-),女,山西晉城人,1993年畢業(yè)于山西郵電中等專業(yè)學(xué)校市內(nèi)電話通信專業(yè),從事交換機通信及信息維護管理工作。