利用可解釋性做定位,用可解釋的方法來做定位。
首先在建模的時候要包括能體現漏洞的特徵,結合汙點分析的原理,可以這樣說,如果在source和sink中間沒有sanitizer操作,這才可能會導致漏洞發生,資料完整性或資料私密性被破壞。
都說借助自然語言的處理方法來對程式處理,是為了程式的語義資訊。可是,程式的語義到底是指什麼資訊。一般來說語義資訊是指,符號所表示的含義(具體的內容)。那麼程式中的語義可以說是程式中的符號的含義。程式中的符號可以分為以下幾種,操作符,分隔符,識別符號,關鍵字。
對於操作符來說,類似於加減乘除這一類的算術運算,或是與或非的邏輯運算等等,這些符號的含義比較明確,基本上不會出現乙個符號在不同的場景會有不同的意思,而且符號的形式相對是固定的。對於分隔符,比如括號,分號,空格,引號等,這些符號的形式和含義也相對來說比較固定。然而,對於識別符號來說,這個語義資訊則是多變萬化的,程式設計人員根據自己的需要可以編寫出各式各樣的函式名和變數名。這些名字當然目的是為了輔助程式設計人員更好的來理解**的功能。那麼這些語義資訊對安全人員來找漏洞是什麼樣的幫助呢?我覺得主要就是來理解程式功能,理清**邏輯。如果同樣將程式原始碼轉換成只用abcd這樣的字母符號來替換所有的函式名,變數名,整個程式的功能不會變。因為程式的功能不會由同一變數name a變為name b而發生改變。但是此時變數a和變數b在命名上的語義就不同了。比如當我們來對記憶體型漏洞進行分析,我們首先會找程式中能對記憶體進行操作的敏感操作。這些可以稱之為記憶體操作,當然我們是通過其的命名來識別的,比如memcpy等等,又或者對指標的一些操作。這些操作帶給我們的反應應該是這樣的。
我們舉乙個棧溢位的例子。棧溢位是指在記憶體棧中的資料發生了越界到了不屬於其的記憶體位址。棧結構是在函式呼叫時系統自動開闢的記憶體空間,按照一定的資料進出順序進行排列。因此,我們首先要找到能發生溢位的危險操作,比如陣列迴圈賦值,記憶體拷貝等等。那我們是如何來理解這些操作的具體含義的?如果是呼叫了庫函式來進行,比如memcpy,strcpy等等,這些函式本身的含義是我們所熟知的,不看其原始碼,只通過函式名也能知道其功能;但是如果同樣是這些函式,將其封裝換個其它的函式名比如,hugememorycopy,longstringcopy後,這些函式名並不是標準的庫函式名,雖然函式名有輔助理解的作用,但不看其原始碼不能準確的知道其功能。所以函式名的語義資訊,是在我們已有某些庫函式功能的準確認識上(這裡可以理解為已有的確定知識),來輔助我們對非庫函式的功能理解。包括我們對程式原始碼進行理解,那也是
構建乙個句子的特徵矩陣,這些特徵包括,是否為函式呼叫,是哪種函式呼叫;是否為賦值操作,為哪種賦值操作;是否為變數宣告。
當我們已經知道該程式有漏洞時,用打補丁前後的原始碼做比對進行漏洞定位。補丁前後的差異就是漏洞所在點。如果直接將這些漏洞片段選出來,將一類漏洞的片段(從source點到sink點之間的所有語句)作為乙個類別,通過訓練來提取這些共同特徵向量。
分別用補丁前後的程式來訓練神經網路,
AI可解釋性主體
可解釋性,就是我們需要完成一件事的時候,我們能獲取到的足夠多的,能讓我們自己理解的資訊。當我們不能獲得足夠多的資訊,來理解一件事情的時候,我們可以說這是不可解釋的。所以,解釋性的目的就是以人的思維來理解事物,讓人能懂。但是在深度學習模型中,建立模型的時候往往沒有考慮到它的可解釋性,特別是在深層網路中...
可解釋性人工智慧粗讀
人工智慧已經成功運用在自然語言 多 計算杋視覺 語音和跨 等相關的特定領域。然而,這一架構在 端到端 模式下 通過計算大量資料來進行誤差後向傳播而優化引數的學習方法被比喻為乙個 黑盒子 可解釋性較弱,人們普遍難以相信乙個不可解釋的黑盒子模型做出的決策。雖然我們造出了準確度極高的機器,但最後只能得到一...
關於深度學習的可解釋性
在這裡學習的,在此簡要做了些筆記。人類對模型決策 結果的理解程度。對於深度學習而言,可解釋性面臨兩個問題 為甚會得到該結果?過程 為甚結果應該是這個?結果 理想狀態 通過溯因推理,計算出輸出結果,可是實現較好的模型解釋性。衡量乙個解釋是否合理,需要考慮 可解釋性 通過人類可以理解的方式描述系統的內部...