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


對於硬編碼密碼,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM