文|蘇荨墨
編輯|蘇荨墨
前言
軟體已經成為人類生活的核心部分,在日常活動中發揮着舉足輕重的作用,随着技術的進步,漏洞也在迅速産生。
軟體開發組織将軟體的安全性視為其客戶關注領域的突出部分,但是,組織内外的整個行業都有廣泛的知識來源。
由于組織的優先級不斷變化,安全知識處于次要地位,需要設計一種适當的機制來吸收行業中流行的所有知識,并在軟體開發團隊需要時以受控方式将其提供給軟體開發團隊。
它需要一種智能的方式将資訊放在一起,不斷地從中學習,并在營運中使用所學知識,為了軟體系統的安全,需要一個智能知識管理系統。
智能知識管理系統将是能夠整合來自各種來源的資料的系統。
軟體過程分析
技術債務是本文的一個重要考慮因素,一些研究确定了軟體系統中技術債務的影響因素。
這些是在軟體開發過程中試圖平衡客戶的戰略需求和短期需求時收集的。
引入了異常檢測方法,它利用了在玻爾茲曼機算法中路由問題區域的原始特征的優化機制,提出了軟體測試中的軟體故障檢測和糾正模組化架構。
針對靈活軟體開發模型提出了一種軟體工作量估算方法,采用人工神經網絡前饋、反向傳播神經網絡和埃爾曼神經網絡。
考慮了各種非功能性需求以進行模組化并建立适當的管道來更新标準并将其發送到下一階段。
安全控制是使用自動決策支援來識别的,這些控件可以與任何特定系統相關。
提出了一種基于問題架構的安全需求擷取方法,它考慮在早期階段将安全性納入軟體開發過程。
它可以幫助開發人員以有效的方式收集有關安全要求的資訊,準備了一個安全目錄來識别安全要求,并使用濫用架構通路威脅。
評估了機器學習技術以确定堆棧溢出的軟體要求,它表明潛在狄利克雷配置設定 (LDA) 被廣泛用于識别軟體需求。
設計了一種工具來發現基于軟體元件特征的漏洞,軟體元件特征代表了其他軟體開發領域的領域知識。
由于該方法規定的目标是預測新元件中的漏洞,是以有可能在生産中利用這些軟體元件的漏洞曆史記錄。
還有可能采用這些解決方案并将它們內建到開發環境中,以便于軟體開發人員使用。
總體重點是使軟體系統從一開始就安全,它可以減少公司為軟體安全性進行大量投資的需要。
項目中安全問題的修複時間會顯著影響整個開發過程,是以,必須在時限内解決問題。
機器學習模型被用來預測固定時間,使用長短期記憶(LSTM)技術對垃圾郵件進行分類。
這種技術可以自動學習抽象特征,在此,使用 ConceptNet 和 WordNet 将文本轉換為語義詞向量。
之後,使用 LSTM 從資料中檢測到垃圾郵件,K 最近相鄰 (K-NN) 算法在分類任務中的準确性得到了提高。
然而,它在大型資料集中需要更長的時間,但與其他方法相比提供了顯着的準确性。
挖掘了軟體需求規範文檔中提到的安全需求,這些要求被分類為資料完整性、密碼學、通路控制和使用決策樹的身份驗證。
針對每個安全需求開發了預測模型,預訓練模型還可以識别文檔中錯誤分類的需求,為需求工程師提供更好的洞察力。
進一步的細化将為使用者提供有關要求的分類資訊,并解釋為什麼選擇特定分類,神經網絡需要更好的方法來制作可解釋的模型,這是一個具有挑戰性的問題。
模型中系統的構造成分
了解有效應用于解決與軟體安全問題相關的問題的語言模型的構造是必不可少的,與軟體安全相關的問題可以通過利用跨公司和行業可用的自然語言資料來解決。
有效的語言模組化能力可以幫助推導出隐藏在這些資料中的資訊,此外,軟體開發團隊可以在需要時利用與安全相關的資訊。
語言模型是本文所用模型的基礎,語言模型在 N-gram 模組化方法中找到了它們的根源。
gram 模組化使用的思維過程是使用給定單詞的曆史來評估給定單詞的機率,例如,短語“Jack and Jill went up the”中的下一個詞是“hill”的機率。
所有與客戶需求相關的資料和與内部軟體開發過程相關的資料(例如測試用例和缺陷)都被提取并标記為安全相關和非安全相關的資料類。
是以,資料集包含文本和相應的标簽,資料集包含從客戶需求規範、測試用例、缺陷和軟體開發團隊維護的其他軟體開發工作中獲得的自然語言資料。
資料集按50%、40%、10%的比例分别分為訓練、測試和驗證,軟體開發需求管理專家标記了與客戶需求相關的資料。
軟體開發技術負責人參與标記與軟體開發工作相關的資料,例如缺陷和測試用例。
使用 python 的 train-test 拆分庫将資料集随機拆分為訓練、測試和驗證。我們考慮了訓練和測試資料的各個部分。
結果發現,當訓練資料集分數為 50% 時,模型不會出現過拟合和欠拟合問題。
共有 31,342 個資料點,其中 3,082 個與安全相關的資料點和 28,260 個非安全相關的資料點。
是以,資料增強技術,考慮了訓練和測試資料的各個部分,結果發現,當訓練資料集分數為 50% 時,模型不會出現過拟合和欠拟合問題。
資料預處理包括文本标記化以建立詞彙表,文本首先轉換為單詞序列,然後轉換為數字 ID 序列。
文本的标記化涉及将文本轉換為數字表示,以便這些表示可以傳遞到機器學習或深度學習模型中以用于模組化目的。
還進行文本序列填充以規範化文本序列長度。資料表示為用于進一步模組化的向量序列。
語言模型下的實驗
在第一個實驗中,CNN 在文本分類中進行了探索,算法 1示範了使用 CNN 進行文本分類所涉及的各個步驟。
算法1
首先,使用 TensorFlow Keras 預處理器對文本資料進行标記化。文本序列被轉換為數字 ID 序列。是以将有三組文本序列用于訓練、測試和驗證。
将句子長度分布可視化以檢查長度分布。填充的最大序列長度可以保持在 250,因為大多數長序列都在 250 的序列長度内。TensorFlow Keras 預處理器用于為所有三組資料集建立 250 長度的文本序列。
在下一階段,将探索基于預訓練的快速文本嵌入矩陣,快速文本是一個開源輕量級庫,可幫助學習語言模型中的文本表示。
快速文本被配置為它在預訓練期間已經學習到的資料矩陣,采用數字表示的嵌入形式。
快速文本的工作類似于 word2vec,其中每個單詞都被視為其基于字元的 N-gram 包。
預訓練詞嵌入架構以标準方式建構,為此在 300 個次元上建構的預訓練模型選擇了 300 的嵌入大小。
基于TensorFlow Keras的CNN模型架構搭建(見算法 1).,在每個 Conv1D 層中使用 256、128 和 64 個過濾器建構三組 Conv1D 和最大池化層,最大池化層的池大小為 5。
應用的激活函數是“ReLU”(整流線性單元)該架構具有三組密集層和 dropout 層,dropout 設定為 25%。
二進制交叉熵損失和 Adam 優化器被配置為模型編譯,模型架構在訓練資料集上運作。
盡管該模型被配置為運作 100 個 epochs 和 128 個 batch size,并提前停止,模型在第 7 個 epoch 達到最佳精度,驗證精度為 95.95%。
在測試資料集上評估模型性能;它的準确率為 71.89%,權重平均精度為 0.88;召回率為0.72;F1 分數為 0.77。
如果不對參數進行太多微調,該模型将提供 71.89% 的準确度,是以,可以針對保險資料進一步微調這些架構,以實作更好的準确性。
該實驗進一步補充了雙向 LSTM 和注意力層(參見算法2). 嵌入層保留了預訓練的 FastText 模型。
标記化、矢量化和填充的執行與實驗的早期部分類似。長短期記憶門控循環單元 (LSTM GRU) 最後一層的輸出被送入全局注意力層序列。
算法2
來自隐藏序列的向量被傳遞到學習函數 ( h t ),包括乘積向量。
c是最終的上下文向量,T是輸入序列的總時間步長,注意力層架構基于 TensorFlow Keras 注意力機制,用于時間資料和掩蔽。
TensorFlow 是一個機器學習庫,Keras 是 TensorFlow 的進階 API,注意力機制是利用從語言的重要部分學習而不是嘗試學習所有内容的前沿方法。
TensorFlow 和 Keras 的注意力機制提供了在模型中實作此功能的工具,本實驗中使用的建構體取自基于 FastText 的嵌入是在實驗的第一部分建構的。
核心模型架構是用 LSTM 建構的,以形成順序模型,LSTM 在記憶長序列資料方面優于 RNN。
LSTM 管理目前時間步的輸入,以及前一個 LSTM 單元的輸出和前一個單元中單元狀态的記憶。
雙向 LSTM 有助于提供内容的前向和後向序列,這些中的每一個提供的輸出在每個時間步被組合。
通過考慮過去和未來的順序,可以保留文本的更好上下文,該架構包括作為輸入的嵌入、具有 256 個單元的雙向 LSTM GRU、注意層以及三組密集層和丢棄層(參見算法2)。
厚層256個單元和0.25 dropout rate也交替使用,“Relu”是用于中間層的激活函數;在最後一層,使用“sigmoid”。
還考慮了二進制交叉熵損失和“Adam”優化器,模型在訓練和驗證中使用 100 個 epochs 的提前停止機制進行訓練。
保留 128 的批量大小;最好的結果出現在第 6個epoch,驗證準确率達到 98.69%。該模型的準确率為 84.33%,權重平均準确率為 0.91,召回率為 0.84,F1 分數為 0.87。
在下一階段的實驗中,将探索 Google 的通用句子編碼器 (USE)。它可以将不同長度的高維向量編碼成标準大小。圖1顯示了句子編碼的工作。
圖1
在本實驗中,USE 是在 TensorFlow 1.0 上實作的。USE 模型是從 TensorFlow hub加載的。
基于 USE 的嵌入層被建構并饋送到具有兩個密集層和丢失層的模型架構中(參見算法3)。
算法3
密集層有 256 個單元和一個 ReLU 激活層,dropout 值為 0.25。
結語
sigmoid 激活函數用于對結果進行分類,還使用了二進制交叉熵和 Adam 優化器。模型訓練是通過考慮提前停止來實作的。
它在第一個時期達到了 97.32% 的最佳驗證準确率,它的平均準确率為 92.61%,平均召回率、準确率和 F1 分數分别為 93.0%、95.0% 和 93.0%。
軟體需求模組化是這項工作的突出部分之一,大多數時候,重點是開發過程中的軟體正确性,這可能會導緻開發過程後期出現性能問題。
對整個軟體開發生命周期中為軟體性能模組化所做的所有工作進行了全面研究。
也評估了影響使用線性回歸方法修複安全問題的時間的因素。