ABAP程序中的七大危险漏洞
SAP的企業資源規劃(ERP)系統已成為企業各項關鍵業務:財務管理、薪資管理、人力資源管理、供應鏈管理、客戶關系管理等的基礎平臺。然而,在每個SAP的安裝實施過程中,都會基于客戶的需求進行不同程度的客戶化。通常使用ABAP程序來調整SAP系統以滿足客戶的需求,而且還能更好的定制SAP的實施及應用。然而,有缺陷的ABAP代碼卻有可能給開發人員非法訪問SAP系統關鍵資源的機會。ABAP程序的安全漏洞,如果沒有被很好的控制,將會造成關鍵數據丟失、經濟損失等嚴重后果,甚至需要承擔法律責任,因為這些代碼漏洞違反了法律規定。
簡介
??SAP的企業資源規劃(ERP)系統被全球大部分的企業級公司所采用。在這樣的企業級環境中,加強SAP應用的安全性有著很重要的意義。SAP系統是企業各項關鍵業務:財務管理、薪資管理、人力資源管理、供應鏈管理、客戶關系管理等的基礎平臺,因此SAP安全也尤為重要。任何未知的缺陷或漏洞都會導致災難性的后果,并會為之付出昂貴的代價。
??SAP安全主要包括SAP授權、密碼策略、角色分配不當或權限過大、安全策略失效等方面。如果能對解決上述方面的問題并對其進行監控,就能保障企業的相對安全。但是,這些漏洞卻往往會被忽視而且很少受到仔細的檢查。那些運行在公司服務器上的,由公司內部和外部人員開發的代碼就存在這樣的情況。
??在每個SAP的安裝實施過程中,都會基于客戶的需求進行不同程度的客戶化。除調整基礎的SAP系統以滿足客戶的規范要求外, 公司的開發人員還會編寫一些功能程序來定制SAP的安裝,而他們使用的編程語言是ABAP —— SAP的主要的,并且在不斷發展的編程語言。
??雖然公司可能會遵循嚴格的軟件開發流程,還會有測試和質量保證等階段,但ABAP代碼卻很少會被開發者之外的其他人進行逐行的代碼審查。所以,無論對ABAP程序進行多少測試,實際上只有開發者自己才知道這些代碼到底有多安全。如果不對代碼進行嚴格仔細的審查,有缺陷的ABAP代碼就很可能給開發人員非法訪問SAP系統關鍵機密資源的機會。ABAP程序的安全漏洞,如果沒有被正確的處理,將會造成關鍵數據丟失、經濟損失等嚴重后果,甚至需要承擔法律責任,因為這些代碼漏洞違反了法律規定
常見的ABAP漏洞
??ABAP程序的漏洞很難被標準編譯器或代碼分析器檢測到,因為這些漏洞并不是因語法錯誤產生的,它們更像是普通的編程步驟或一些預置程序,這些預置可能是開發者的疏忽,也可能是開發者故意留在系統中以備以后利用。我們一起來看看這些常見ABAP程序漏洞:
SQL Injection
定義
??SQL注入是一種攻擊應用服務器或web網站的方式,是通過嘗試在普通用戶的輸入內容中嵌入SQL語句,來操縱Open SQL語句的執行內容。下面的例子演示了一個普通的SQL語句是如何被用于進行SQL注入攻擊的:
正常SQL語句
SELECT * FROM table WHERE name = 'userinput'.
被攻擊者用SQL注入修改后的語句
SELECT * FROM table
WHERE name = ' a'; DROP TABLE users;
? ?? ?? ?? ? SELECT *
? ?? ?? ?? ?? ?FROM??table1
? ?? ?? ?? ? WHERE name = '%''.
上面的示例中,攻擊者沒有輸入應用或web網站的用戶名,而是使用了SQL注入攻擊,用紅色部分嵌入SQL的文本替換了用戶名。這樣,SQL語句的查詢結果就從簡單的讀取用戶名與用戶輸入相匹配的數據,變成了先讀取用戶名是’a’的數據,然后再刪除用戶表,最后再讀取表’table1’中的所有數據。攻擊者已經很輕松地獲取到了未授權的特定表的數據,還刪除了包含所有用戶信息的表。
對業務有何影響?
此漏洞會導致數據被破壞或SAP數據庫中的數據被惡意篡改。這也會使公司信譽受損,并因此影響公司收益。舉例說明SQL注入攻擊者會做些什么事情:
攻擊者使用你們公司的在線商店來購買產品。如果在付款流程中的某個web頁面不夠安全,攻擊者用下面的語句來替換他的用戶名:
a'; SELECT *
? ?? ?FROM??CreditCardInfo
? ?? ?WHERE name = '%'
這樣,攻擊者就能成功地獲取了您公司所有注冊用戶的信用卡信息。
如何修復漏洞?
在ABAP代碼中,用戶輸入的所有內容都應該在插入于SQL語句前進行驗證和清理,以便移除偽裝成用戶輸入的各種惡意代碼和命令。
未進行授權檢查
定義
??在ABAP程序或報表程序中,能夠調用SAP事務處理命令。通常,這些事務處理命令是在SAP GUI客戶端中被調用的,而且需要用戶擁有執行命令所必需的權限。但是,在ABAP代碼中,如果開發者在調用前沒有明確的進行權限檢查,那么無論當前用戶是否有執行權限,上面的SAP事務處理命令都會被執行。下面的例子演示了調用SAP事物處理命令而沒有進行權限檢查:
? ? CALL TRANSACTION ‘SU10’.
上面這行ABAP代碼調用了SAP事務處理命令’SU01’——用來集中管理維護用戶的命令,卻沒有對當前用戶是否有權執行進行檢查。
對業務有何影響?
這一漏洞將導致未經授權地執行SAP事務處理命令,進而非法的訪問SAP數據,甚至篡改數據。而且,機密數據丟失或公司系統被滲透,將導致客戶信心下降。客戶信心動搖又將會長期影響公司收益。在大部分這樣的案例中,這樣操作還是違反法律規定的。下面這個例子說明未進行授權檢查會怎樣:
一個普通用戶執行上面的ABAP 程序,到了運行事務代碼’SU01’那一步,這個用戶本身是沒有權限執行’SU01’的,但是因為這個ABAP代碼沒有授權檢查,他現在卻獲得了這種權限,這樣做是絕對違反法律規定的。
如何修復漏洞?
??在ABAP代碼中所有調用SAP事務處理命令的地方,都需要事先進行詳細的授權檢查,以確認當前用戶是否擁有執行此命令所必須的權限。這個修復上面ABAP代碼的簡單方法是,在原來的代碼:
? ? ? ? CALL TRANSACTION ‘SU10’.
增加一段AUTHORITY-CHECK代碼:
? ? ? ? AUTHORITY-CHECK OBJECT 'S_TCODE
? ?? ?? ?? ?? ?ID 'TCD'
? ?? ?? ?? ?? ?FIELD 'SU10'.
IF sy-subrc = 0.
CALL TRANSACTION 'SU10'.
ENDIF.
這樣就可以在調用前確定當前用戶是否有權執行。
硬編碼的用戶憑證
定義
? ? 在ABAP代碼中,用戶安全憑證不是動態檢查的而是硬編碼寫死在程序中的。例如:
IF sy-uname = 'JOHNSMITH'.
? ? ? ? CALL TRANSACTION ‘SU01’.
ENDIF.
對業務有何影響?
這將會允許用戶輕松地通過檢查,而不是真正的使用用戶自己的身份進行認證和檢驗。在這樣的例子中,很可能導致某個用戶獲取到SAP數據庫中未被授權訪問的數據。這樣的非法訪問數據會使公司蒙受經濟損失,動搖客戶信心,也同樣違反了法律規定。舉例說明:
??John Smith是一家ABAP軟件開發公司的開發人員,您將您公司ABAP開發外包給了這家公司。John 恰好在您公司的這個項目中工作。John在他編寫的一個偶爾會用到的、用于記錄他在此項目工作時間的普通程序中,包裝了一段’SU01’調用的代碼。通過上面的硬編碼,使得只在他登錄時,程序在會調用’SU01’命令。而后,John Smith 使用這個程序時就不僅是用它記錄工作時間了,還進入了您公司的SAP系統’SU01’命令,他就可以創建新用戶或修改您公司的用戶數據。這當然也絕對是違反了法律規定的。
如何修復漏洞?
所有的硬編碼的用戶憑證都必須用對當前用戶的動態檢查來替換。這樣才能使授權檢查真正地起到安全保護作用,而不僅僅是一個假象
跨站腳本
定義
??跨站腳本是一種攻擊方式,它通過在Web頁面的用戶輸入內容中嵌入惡意腳本來進行攻擊。一旦這樣的頁面被加載,惡意代碼將會在用戶的瀏覽器中執行。這些腳本利用了web應用的安全漏洞,繞過常規的瀏覽器強制加載的安全機制,來進行惡意攻擊。
對業務有何影響?
??如果通過跨站腳本攻擊成功地嵌入的惡意腳本被執行了,那攻擊者就能獲取到存儲于瀏覽器會話中的用戶或應用的機密信息。這將會導致用戶身份被盜用或數據被破壞,以致造成經濟損失、法律責任甚至失去品牌價值等嚴重后果。下面示例說明這一漏洞的嚴重性:
??一個黑客來到您公司的在線商店中,想要在付款頁面嵌入一些惡意腳本。通過跨站腳本這種方式,他成功的將惡意代碼嵌入其中。從這以后,每當有客戶在您公司的在線商店購買商品時,客戶的所有訂單信息包括信用卡信息都被發送到黑客的服務器上,而不是您公司的服務器上了。
如何修復漏洞?
??跨站腳本攻擊也是一種代碼注入攻擊方式,所以應該在ABAP程序使用用戶輸入內容前,對其進行的嚴格檢查和清理,這樣才能去除嵌入其中的危險代碼
定義
??一些ABAP命令允許訪問文件系統或執行底層操作系統命令。這就會有潛在危險,所以它們是不應該出現在ABAP代碼中。
對業務有何影響?
??如果不仔細檢查,這樣的ABAP命令會變的非常危險,它們可能會被用來刪除或修改操作系統文件或者SAP數據。這將會危害整個公司和公司的各種寶貴數據的安全,并因此會損害公司在客戶中的聲譽,減少預期收益。下面的例子演示這一漏洞的危害:
??一名您公司ABAP外包項目的開發人員,在他編寫的一個簡單的ABAP程序中,包含了一個’DELETE DATASET’的命令,而這個程序卻是您公司員工經常使用的程序。這個程序僅僅被這個開發人員更新了一下就發送給您公司來使用。當公司內的員工使用新更新的程序時,像刪除這樣的攻擊會不知不覺的發生。
如何修復這樣的漏洞?
應該盡量少使用這些命令,并仔細的審查代碼,以保證這些命令不會被惡意使用
生成Open SQL
定義
??Open SQL允許用戶使用可動態生成的SQL語句,以便在運行時完成裝配,而不是編譯時生成。如果用戶輸入的內容恰好是生成的SQL語句的一部分,并且沒有被很好的檢查和清理,就會導致用戶讀取或修改SAP數據中的關鍵數據,甚至會在其中插入一些假數據。這有一個動態生成Open SQL語句的例子:
SELECT * FROM (mytable) WHERE NAME = (username).
對業務有何影響?
如果通過用戶輸入能修改后臺Open SQL語句,就會導致關鍵業務數據被盜、被修改甚至被刪除。SQL注入攻擊是這種利用SQL語句使用不當來進行攻擊的一個通用模式。同樣的,這種數據被非法訪問的事情將損害公司在客戶中的聲譽,給公司造成經濟損失,還可能承擔法律責任。舉例說明:
在你的ABAP程序中有如下的Open SQL語句:
SELECT * FROM SSNDETAILS WHERE NAME = (usernameval).
變量’usernameval’原本是取自用戶輸入內容的。一個心懷不滿的員工,沒有輸入他的用戶名,而是輸入了一段惡意字符,使上面的語句變成了這樣:
SELECT * FROM SSNDETAILS WHERE NAME = ‘%’.
這樣他獲得了所有員工的社保信息,而不只是他自己的信息。
如何修復漏洞?
??應該盡量少使用動態生成的Open SQL語句,如果必須使用,則應該在使用前對用戶輸入的內容進行嚴格檢查和清理。
ABAP命令注入(程序)
定義
動態ABAP命令像:POOL, PERFORM 和 GENERATE SUBROUTINE,通常被用來在運行時生成并執行ABAP代碼。如果這樣的命令和用戶的輸入一起使用,將是非常危險的事情。
對業務有何影響?
??如果用戶的輸入內容和這些動態的ABAP命令一起使用,而用戶輸入內容又沒有任何的后期處理流程或清理,就會導致SAP數據庫數據被非法讀寫,甚至會隨機執行一些危險SAP系統命令。未經批準地訪問數據可能會使公司在客戶中信譽掃地,即使沒有也會嚴重損害公司的信譽。還會給公司還來經濟損失,而且大多數還會承擔法律責任。舉例說明:
??一個心懷不滿的員工在一個經常使用的ABAP程序中嵌入了一個動態命令,這個程序將會在某個特殊時間(比如當他被解雇的時候),刪除關鍵的系統數據。而當這災難性的毀滅發生或漏洞被發現時,他已經遠走高飛了。
如何修復漏洞?
??使用動態ABAP命令的地方應該被控制在盡可能少的情況中,而且無論什么時候使用,都應該對用戶輸入的內容進行嚴格檢查以保證里面不會有潛在的惡意命令。
ABAP命令注入(報告)
定義
??和在ABAP程序中使用動態ABAP命令一樣,有一些命令像:INSERT REPORT 和 GENERATE REPORT被用于在運行時動態生成REPORT程序。如果有和用戶的輸入內容一起使用,則用戶可能會通過運行動態REPORT來獲得SAP數據庫中的關鍵數據。
對業務有何影響?
??如果用戶的輸入內容和這些動態的ABAP命令一起使用,而用戶輸入內容又沒有任何的后期處理流程或清理,這可能會導致SAP數據庫數據被非法讀寫,甚至會隨機執行一些危險SAP系統命令。未經批準地訪問數據可能會使公司在客戶中信譽掃地,即使沒有也會嚴重損害公司的信譽。還會給公司還來經濟損失,而且大多數還會承擔法律責任。舉例說明:
??一個對公司不滿的員工,在一個他經常使用的程序中嵌入了動態ABAP命令,這個命令會生成一個所有的員工社保信息的報告。然后他像往常一樣進入程序,瀏覽了包含所有員工社保信息的報告。這絕對是法律不允許的。
如何修復漏洞?
??使用動態ABAP命令的地方應該被控制在盡可能少的情況中,而且無論什么時候使用,都應該對用戶輸入的內容進行嚴格檢查以保證里面不會有潛在的惡意命令。
上面這些,只是選擇了ABAP程序漏洞中一小部分進行了介紹。大部分都是因編程疏忽、單純無知的錯誤或惡意代碼而引起的程序漏洞。這些程序漏洞,能夠通過仔細的逐行的代碼檢查來發現。然而,通過人工進行代碼檢查可是相當耗時的,因為,一個公司里定制開發的ABAP代碼庫中會有成千上萬行的ABAP代碼!
如前所述,大約80%的SAP客戶都有自己定制開發的程序。這些程序大部分都是用ABAP或WebDynpro 來開發。這些定制開發過程中的質量保證流程通常只是在將程序發布到生產環境前,進行功能性的質量檢查。而對跨站腳本、未授權檢查、SQL注入等安全漏洞方面進行的檢查,卻大部分都沒有進行過。
一些客戶會希望通過一些黑盒測試來發現大部分關鍵的安全漏洞。但是,黑盒測試只能確認一部分問題。
總結
以上是生活随笔為你收集整理的ABAP程序中的七大危险漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PC上虚拟机中安装NW 7.02 ABA
- 下一篇: Web Dynpro for ABAP