安全程式設計部分複習內容

2021-10-12 20:22:38 字數 3426 閱讀 3063

主要工作

2.安全編譯:採用最新的整合編譯環境,**編譯需要在乙個安全的環境下進行,對應用環境的真實模擬也是軟體編譯需要考慮的問題,多樣化編譯技術作為一種提高軟體安全性的方法得到了應用(可執行檔案不同、二進位制檔案不同、映象不同、在過程中定期或隨時改變自己的特徵。)

3.軟體安全編譯的基本原則:驗證輸入、留意編譯器警告、保持簡單性、清潔傳送給其他系統的資料。

4.c語言安全程式設計注意事項:

-對記憶體訪問錯誤的檢測和修改。

-指標引用是c程式中最靈活、最核心、最複雜,也是最容易出錯的部分。

-隨機數的選取和使用問題。

-c語言沒有提供異常處理機制其異常檢測處理要由程式設計師預設完成。

1.頭腦風暴:指無限制的自由聯想和討論,其目的在於產生新觀念或激發創新設想,在應用程式需要快速實現的時候使用。

缺點:·提出的需求可能與軟體業務、技術和安全情境不直接相關,這可能導致某些重要的安全考慮,或者對於一些重要的細節問題轉牛角尖。

·得出的安全需求不一致或者不全面,很大程度上依賴於個人對於問題的理解,以及自身的實踐經驗,比較主觀。

2.策略分解:指將組織需要遵守的內部和外部政策,包括法律法規、隱私和遵從性命令分解成詳細的安全需求。策略分解過程是乙個連續的、結構化的過程。

3.資料分類:根據資料生命週期管理對資料的分階段劃分來決定相應的安全需求,也可以根據資料的重要性對保護級別的劃分來決定相應的安全需求。實際上也就是根據資料的敏感級,同時根據對資料洩露、變更或破壞的影響,有意識地為資料資產分配標籤,以此來確定保護資料資產的不同安全保護需求和控制方法。具體方案:訪問控制。

4.使用用例:可以描述軟體或系統的預期行為,而預期行為描述了完成業務功能所需要的行為和時間的順序

5.濫用案例:使用用例出發,濫用案例可以通過對負面場景進行建模來幫助確定安全需求,非預期行為。

軟體安全設計的目的和作用

目的:安全屬性設計到軟體架構。

作用:以實現軟體產品本質的安全性

大多數軟體安全問題都是由於軟體上的安全性考慮不足或不完整所導致。

經典安全原則條目:

-saltzer和schroeder提出的安全設計8條原則。

-john viega和gary mcgraw總結的10條軟體安全原則

-michael howard總結的13條安全設計原則

安全設計原則介紹

-減少軟體受攻擊面原則:使用者或其他程式及潛在的攻擊者能夠訪問到的所有功能和**的總和,乙個軟體的攻擊面越大,安全風險就越大,減少軟體受攻擊面就是去除、禁止一切不需要使用的模組、協議和服務,其目的是減少攻擊可利用的漏洞。

-最小授權原則:系統僅授權實體完成規定任務所必須的最小許可權,並且該許可權的持續時間也盡可能短。

-縱深防禦原則:又稱為分層防禦,是指在軟體設計中加入層次化安全控制和風險緩解/防禦方法,有助於減少系統的單一失效點。

實列:在使用預處理語句和儲存過程的同時應用輸入驗證功能,不允許使用使用者輸入的動態查詢結構,以防止注入攻擊。

不允許活動指令碼與輸出編碼、輸入或請求驗證相結合,防止指令碼xss

使用安全域,根據被授權訪問的軟體或者人員級別來劃分不同的訪問。

-預設安全配置原則:為系統提供的安全措施,包括預設許可權、預設策略等,盡可能讓使用者不需要額外配置就可以安全地應用。預設安全原則也是保持系統簡單化的重要方式。

對任何請求預設加以拒絕。不經常使用的功能在預設情況下關閉。預設檢查口令的複雜性。當達到最大登入嘗試次數後,預設狀態下拒絕使用者訪問,鎖定賬戶。

-保護最弱-環原則:保護最弱元件,可能是**、服務或埠。

-平衡安全設計原則

1.什麼是威脅建模:通過抽象的概念模型對影響軟體系統的威脅進行系統的識別和評價。

2.為什麼:比較流行的一種方法通過滲透測試技術驗證網路和資訊系統可能面臨的安全威脅和脆弱點,市場上也有很多書籍資料介紹各類攻擊防範的方法。而採用威脅建模的方法,可以系統性地分析其架構、軟體體系和程式部署,分析網路和資訊系統可能面臨的潛在威脅,確認有哪些攻擊面,之後提出有針對性的安全防範措施,這才是有效解決網路安全對抗的良策。

3.威脅建模的分類:有軟體為中心的威脅建模、安全為中心的威脅建模、以及資產和風險中心的威脅建模。

4.威脅建模的過程:確定安全目標–建立應用程式–分解應用程式–確定威脅–威脅評估–確定威脅緩解計畫或策略–驗證威脅–驗證建檔

5.建立應用程式概況圖:-識別物理拓撲結構 -識別網路拓撲結構 -識別應用程式使用者中的人類和非人類的角色 -確定應用程式的安全機制 -確定應用程式處理的資料元素 -確定軟體採用的技術及主要功能

6.確定威脅緩解計畫或策略:假冒、篡改、資訊洩露

7.驗證威脅

8.威脅建檔

9.常見的3種風險分析:delphi排序(1-關鍵、2-嚴重、3-最小)、平均排序:平均值=(d值+r值+e值+a值+di值)/5,分數越高,風險越高、以及概率x影響因子排序。

1.目標:盡可能多的發現程式中的錯誤,好的測試就是找到未發現的錯誤。

2.方法:白盒測試(又稱結構測試,需要知道原始碼,一般方式是人工走查,靜態較多)、黑盒測試(又稱功能測試,一般為動態測試)、灰盒測試(又稱介面測試,只需了解部分原始碼(對接的原始碼))

3.軟體測試的步驟:模組測試,子系統測試、系統測試、驗收測試、平行執行。

4.軟體安全測試的目標:、

-驗證軟體系統的安全功能是否滿足安全需求

發現系統的安全漏洞,並把最終這些數量降到最低

評估軟體的其他質量屬性,包括可靠性、可存活性

5.軟體安全的原則:

盡早進行軟體安全測試,優先測試高風險模組

軟體安全沒有銀彈

程式設計師應避免檢查自的程式

盡量避免測試的隨意性

6.軟體測試與軟體安全測試的區別

軟體測試主要是從終端使用者的角度出發發現缺陷並修復,保證軟體滿足終端使用者的要求。軟體安全測試則是從攻擊者的角度出發發現漏洞並修復,保證軟體不被惡意攻擊者破壞。

7.軟體安全測試的方法:白盒測試可以分成功能測試和源**測試;黑盒測試又可以分為漏洞掃瞄、模糊測試和滲透測試等

8.**分析:

**靜態分析包括**檢查、靜態結構分析和**質量。(優缺點:編碼錯誤和漏洞能夠盡早地檢測出來,以便於在軟體部署之前解決問題,誤判率和漏判率比較高地情況)

控制流分析:有向控制流圖,生成函式呼叫關係圖,表示函式的巢狀關係。

資料流分析、汙點分析。

9.滲透技術地核心思想:模仿黑客地特定攻擊行為,盡可能完整地模擬黑客使用地漏洞發現技術和攻擊手段,對目標地安全性做深入地探測,發現系統最脆弱環節地過程。

10.漏洞掃瞄與模糊測試、滲透測試地區別:

漏洞掃瞄只清楚地展示出系統中存在的缺陷,但是不會衡量這些缺陷對系統造成的影響;模糊測試和滲透測試除了定位漏洞外,還需要進一步嘗試對漏洞進行攻擊利用提權,以及維持對目標系統的控制權。

漏洞掃瞄只會以一種非侵略性的方式,仔細地定位和量化系統地所有漏洞;相反,模糊測試和滲透測試地侵略性要強很多,它會試圖使用各種技術手段攻擊真實生產環境。所以一般來說,模糊測試和滲透測試會是一項更加需要智力和技能地技術活,因而也常需要花費更多地資金。

Knowledge 複習內容

前面都講的是知識表示和知識推理的內容,也就是人工智慧裡面的符號主義的學派 另乙個是連線主義 把腦袋中儲存的知識用符號表示,用什麼符號呢?邏輯的形式化語言來表示,我們講了兩個邏輯,乙個命題邏輯和一階謂詞邏輯,表式的範圍是不一樣,命題邏輯能夠表達能力小一些。兩套邏輯,講課思路如圖。每一種邏輯都會定義形式...

NOIP複習內容

考了幾天試,感覺noip的內容其實也挺雜的 主要還是以計數為主吧,容斥原理 組合數什麼的都要學好 概率期望是重點 斯特靈數 尤拉函式 擴充套件歐幾里得 其實我連逆元是什麼都不知道 線段樹 樹狀陣列比較常見,一定要學好 注意公式的化簡,然後還有一些單調資料結構。線段樹有空做一做gss系列吧 tarja...

C 時常複習內容

繼承 多型 封裝首先是建立在繼承的基礎上,先有繼承才有多型 多型是指不同的子類在繼承父類後分別都重寫覆蓋了父類的方法1.指標是乙個實體,引用僅是乙個別名 2.引用時無需引用 指標需要引用 3.引用只能在定義時初始化一次,之後不可變 指標可變 引用從一而終 4.引用沒有const 指標有const c...