漏洞簡析——CWE-259:使用硬編碼的密碼漏洞

zktq2021發表於2021-08-11

對於硬編碼密碼,Immunity公司威脅情報負責人曾表示,這項常見的開發者漏洞不僅廣泛存在,而且在短時間內似乎也不太可能被徹底解決。早在2016年Fortinet防火牆發現硬編碼後門,儘管該公司否認硬編碼密碼是後門,稱這個漏洞是一個管理身份認證問題,但還是非常可疑。倘若攻擊者利用此漏洞,可以直接獲取Fortigate最高管理許可權,控制裝置進行如抓取流量監聽、DNS欺騙、建立隧道進入企業內網等攻擊行為。

一、什麼是使用硬編碼的密碼?

軟體包含一個硬編碼的密碼,該密碼用於自己的入站身份驗證或與外部元件的出站通訊。

這種處理方式一方面不易於程式維護,在程式碼投入使用後,除非對軟體進行修補,否則無法修改密碼。另一方面會削弱系統安全性,硬編碼密碼意味著擁有程式碼許可權的人都可以檢視到密碼,可以使用密碼訪問一些不具有許可權的系統,更嚴重的是如果攻擊者能夠訪問應用程式的位元組碼,利用一些反編譯工具就能閱讀到程式碼,可以輕易獲得密碼。

二、使用硬編碼的密碼漏洞的構成條件有哪些?

程式中採用硬編碼方式處理密碼。

三、使用硬編碼的密碼漏洞會造成哪些後果?

如果使用硬編碼的密碼,攻擊者將很可能透過該帳戶獲得訪問許可權。由於硬編碼密碼允許我們無需使用者名稱或者驗證實現裝置登入,因此其往往會帶來多種潛在使用途徑,甚至會洩漏部分敏感資訊。

四、使用硬編碼的密碼漏洞的防範和修補方法有哪些?

對於入站身份驗證:對密碼應用強單向雜湊,並將這些雜湊儲存在具有適當訪問控制的配置檔案或資料庫中。

對於出站身份驗證:將密碼儲存在程式碼之外的一個經過嚴格保護的、加密的配置檔案或資料庫中,該配置檔案或資料庫不會被所有外部人員訪問,包括同一系統上的其他本地使用者。

五、使用硬編碼的密碼漏洞的防範和修補方法有哪些?

以下程式碼使用硬編碼的密碼連線到資料庫:

public static void main(String[] args)

{

CreateDB db = new CreateDB();

Connection connection = null;

try

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();

}

catch (Exception e)

{

System.out.println("Failed to load DB driver");

e.printStackTrace();

}

try

{

connection = DriverManager

.getConnection("jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=c:/webgoat.mdb;PWD=webgoat","webgoat", "webgoat");

db.makeDB(connection);

}

catch (Exception e)

{

System.out.println("Driver Manager failed!");e.printStackTrace();

}

……

使用Wukong軟體程式碼安全檢測修復系統檢測上述程式程式碼,則可以發現程式碼中存在著“使用硬編碼的密碼”的安全漏洞。請見下圖:

 

使用硬編碼的密碼在CWE中被編號為:CWE-259:Use of Hard-coded Password


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2786372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章