背景技術:
1、用于控制、調節和/或監視技術系統(尤其是諸如車輛的計算單元之類的信息物理系統)的軟件通常具有高復雜度。這樣的軟件經常包括大量軟件部分,諸如在組織上和/或經濟上彼此獨立開發和提供的軟件包、函數和/或庫。此外通常以不同的版本(有時也為子版本)存在的大量軟件部分經常多(例如超過100個、超過500個或超過1000個軟件部分)到以至于對于個體軟件工程師以及甚至對于整個軟件開發部門而言富有挑戰性的是,在軟件的生命周期(開發、測試、生產和維護)上保持對各個軟件部分的概覽。軟件及其軟件部分可能是易于出錯的。例如,可以通過靜態軟件測試來檢驗軟件和/或其軟件部分的差錯,其中與動態軟件測試相比,不執行軟件。在本發明的上下文中,有問題的尤其是損害或甚至危及軟件的安全性、因此損害或甚至危及由所述軟件控制、調節和/或監視的技術系統的安全性的差錯或弱點。在實踐中,盡管有詳盡的測試,但是各個軟件部分的這樣的安全漏洞(簡稱漏洞)并不少見地在一定的時間之后才得到識別。因此,在軟件的生命周期中,必須連續地監視軟件的軟件部分,并且設法解決產生的漏洞。眾所周知的漏洞是特別關鍵的,因為所述漏洞可能很容易被攻擊者利用。
2、一般漏洞的持續更新且可調用的列表和/或數據庫是已知的。對此的示例是公共漏洞和暴露(common?vulnerabilities?and?exposures)(cve),所述公共漏洞和暴露是隸屬于美國國家網絡安全ffrdc并且由mitre公司維護的引用系統,其目的是引入針對計算機系統中的安全漏洞和其他弱點的統一命名公約。
3、軟件的各個軟件部分經常也具有足夠大的復雜度,使得應該準確地區分分配給該軟件部分的已知漏洞是否也實際上是安全風險。在大型軟件的情況下,例如可能產生數百或數千個與在該軟件中使用的軟件部分相關的漏洞(其中許多是所謂的假陽性),但是其中只有大約3-10%實際上與軟件的安全風險相關(所謂的真陽性)。
4、因此,本發明所基于的問題是,提供對相關漏洞的自動但仍然可靠的識別,尤其是其中應該減少或消除假陽性的數量。
技術實現思路
1、本公開的第一一般方面涉及一種用于在軟件的靜態測試中自動識別已知漏洞的計算機實現的方法。該方法可以包括提取所述軟件的代碼的數據結構。該方法此外包括基于代碼、所提取的數據結構和/或軟件的軟件材料清單(sbom)來標識一個或多個軟件部分,所述軟件與所述一個或多個軟件部分有關。該方法此外包括對于至少一個所標識的軟件部分,評價是否使所述軟件部分與已知漏洞相關聯,其中得出一個或多個潛在易受攻擊的軟件部分。該方法此外包括對于至少一個潛在易受攻擊的軟件部分,將機器學習模型應用于分配給已知漏洞的描述,其中所述機器學習模型被訓練和配置為至少從描述和提示中確定至少一個主要原因。該方法此外包括基于至少一個主要原因和所提取的數據結構(和/或代碼)將至少一個潛在易受攻擊的軟件部分評價為易受攻擊的或不易受攻擊的或可選地不可評價的。
2、軟件可以被設計用于控制、調節和/或監視技術系統、尤其是信息物理系統、尤其是車輛的至少一個計算單元。所述方法可以在電子編程環境中加以執行。該方法可以包括可選地通過用戶接口輸出至少一個被評價為易受攻擊的軟件部分。
3、本公開的第二一般方面涉及一種計算機系統,所述計算機系統被設計用于執行根據第一一般方面(或其實施方式)的用于在軟件的靜態測試中自動識別已知漏洞的計算機實現的方法。
4、本公開的第三一般方面涉及一種計算機程序,所述計算機程序被設計用于執行根據第一一般方面(或其實施方式)的用于在軟件的靜態測試中自動識別已知漏洞的計算機實現的方法。
5、本公開的第四一般方面涉及一種存儲和/或包含根據第三一般方面(或其實施方式)的計算機程序的計算機可讀介質或信號。
6、在本公開中提出的根據第一方面(或其實施方式)的方法旨在自動識別軟件的已知漏洞。由此能夠(更好地)標識與軟件(或其軟件部分)相關的已知漏洞。尤其是,可以顯著減少或者甚至完全消除假陽性。因此在實踐中,這尤其是優點,因為由于軟件及其軟件部分的通常高的復雜性可能出現大量(絕對也達到數十萬)假陽性,所述假陽性很難用合理的耗費深入地得到分析并且被標識為假陽性。由于在這里公開的自動且可靠的識別,(幾乎)僅標識真陽性,然后可以通過改變軟件來設法解決所述真陽性。由此可以改善軟件的安全性以及改善例如由軟件控制、調節和/或監視的技術系統(諸如車輛)的安全性。
1.一種用于在軟件的靜態測試中自動識別已知漏洞的計算機實現的方法(100),包括:
2.根據權利要求1所述的方法(100),其中所述軟件被設計用于控制、調節和/或監視技術系統,尤其是信息物理系統,尤其是車輛的至少一個計算單元。
3.根據權利要求1或2所述的方法(100),其中所述方法(100)在電子編程環境中予以執行。
4.根據前述權利要求中任一項所述的方法(100),包括:
5.根據前述權利要求中任一項所述的方法(100),其中所述代碼包括源代碼。
6.根據前述權利要求中任一項所述的方法(100),其中所述代碼包括經過編譯的二進制代碼。
7.根據前述權利要求中任一項所述的方法(100),其中所述數據結構包括抽象語法樹。
8.根據前述權利要求中任一項所述的方法(100),其中所述數據結構包括控制流圖。
9.根據前述權利要求中任一項所述的方法(100),其中提取所述代碼的數據結構(10)包括產生所述代碼的抽象語法樹并且從所述抽象語法樹中產生所述控制流圖。
10.根據前述權利要求中任一項所述的方法(100),其中軟件部分包括軟件包、函數和/或庫。
11.根據前述權利要求中任一項所述的方法(100),其中對于至少一個所標識的軟件部分評價(130)是否將所述軟件部分與已知漏洞相關聯是基于標識符和/或元數據的對比。
12.根據權利要求11所述的方法(100),其中標識符包括軟件包、函數和/或庫的唯一名稱。
13.根據權利要求11或12所述的方法(100),其中所述元數據包括版本號、使用類型、配置和/或構建選項。
14.根據前述權利要求中任一項所述的方法(100),其中所述機器學習模型包括基礎模型。
15.根據前述權利要求中任一項所述的方法(100),其中所述提示包括對所述機器學習模型的指令,所述指令旨在從所述描述中提取一個或多個主要原因。
16.根據權利要求14或15所述的方法(100),其中所述機器學習模型包括大型語言模型(llm)。
17.根據前述權利要求中任一項所述的方法(100),其中所述至少一個主要原因是函數,尤其是其中所述函數包含在所述描述中。
18.根據權利要求16或17所述的方法(100),其中所述提示包括對所述大型語言模型(llm)的語言指令,所述語言指令旨在從所述描述中提取一個或多個主要原因。
19.根據權利要求17或18所述的方法(100),其中基于所述至少一個主要原因和所提取(110)的數據結構(10)將所述至少一個潛在易受攻擊的軟件部分評價(150)為易受攻擊的或不易受攻擊的或者可選地不可評價的包括檢驗屬于所述至少一個主要原因的函數是否包含在所提取(110)的數據結構(10)中。
20.一種計算機系統,被設計用于執行根據前述權利要求中任一項所述的用于在軟件的靜態測試中自動識別已知漏洞的計算機實現的方法(100)。
21.一種計算機程序,被設計用于執行根據權利要求1至19中任一項所述的用于在軟件的靜態測試中自動識別已知漏洞的計算機實現的方法(100)。
22.一種計算機可讀介質或信號,其存儲和/或包含根據權利要求21所述的計算機程序。