收回我上一篇的话,这科挂人还是挺狠的,去年好像挂了四十号人 =(
老师没有划重点,这篇是我自己根据之前的博主的和课本总结的一些重点,本篇为理解性带背。(。ì _ í。)
### 第一章:软件安全基础
- **零日攻击**:未公开的软件漏洞和利用这些漏洞的攻击。
- **软件漏洞**:软件设计或实现中与安全相关的错误。
- **恶意代码**:未经授权的软件或代码片段,目的在于破坏或窃取信息。
- **软件安全**:标识、分析和控制软件中的危害和风险。
- **CIA三原则**:保密性、完整性、可用性,是信息安全的基本属性。
- **软件安全相关概念**:软件可靠性、可信软件、软件定义网络(SDN)和软件定义安全(SDS)。
### 第二章:软件漏洞
- **软件漏洞成因**:系统结构、大型化、新技术缺乏安全考虑等。
- **软件漏洞特点**:持久性、广泛性、可利用性等。
- **软件漏洞分类**:基于成因、利用位置、威胁类型等多维度分类。
- **软件漏洞分级**:根据漏洞的严重性进行分级。
### 第三章:程序运行时的结构
- **内存布局**:代码区、数据区、堆区、栈区的概念和作用。
- **缓冲区溢出**:发生在缓冲区写入数据超过其容量时。
- **栈溢出和堆溢出**:栈溢出攻击和利用分析。
- **Windows安全漏洞保护**:栈溢出检测、数据执行保护(DEP)、地址空间布局随机化(ASLR)、安全结构化异常处理(SafeSEH)。
### 第四章:Web安全
- **Web基本架构**:Web访问过程的各个阶段。
- **Web漏洞概述**:Web应用安全漏洞的概念和影响。
- **SQL注入漏洞**:原理、危害、利用方法。
- **XSS跨站脚本漏洞**:反射型和存储型XSS的原理和防范。
### 第五章:软件生命周期与安全开发模型
- **软件生命周期**:定义、开发、维护时期的各个阶段。
- **安全开发生命周期SDL**:微软的SDL模型和其他相关模型。
- **软件安全开发模型**:内建安全模型BSI、美国NIST模型、OWASP的CLASP模型。
### 第六章:软件安全需求分析
- **软件安全需求分析**:与一般需求分析的区别、来源、目的和作用。
- **等级保护**:网络安全等级保护的概念、2.0时代的要求、政策体系、标准体系。
### 第七章:软件安全设计
- **软件安全设计原则**:减少受攻击面、最小授权、纵深防御等。
- **软件架构安全性设计**:逻辑架构、物理架构、系统架构的设计。
- **软件架构安全性分析**:重要性、基本过程、分析技术和方法。
### 第八章:软件安全编码
- **安全编码实践**:选择安全的编程语言、版本管理、代码检测、安全编译。
- **CERT安全编码建议**:10条最重要的编码安全建议。
- **Java语言安全编码**:语言层安全、字节码层安全。
### 课后题目与考试题型
- **题目类型**:选择题、名词解释、简答题、分析与论述题。
- **重点复习内容**:课后习题、安全模型、安全设计原则、编码实践、测试方法。
目录
6.软件安全相关概念(这一部分我认为不考简答,大概知道一下意思)
2.软件漏洞的分类(找了前几年的几个博客,太多太乱了看不懂,这里重新总结一下)
3.软件安全需求的获取(这种的大概理解一下,可能会出分析题,给个情景让写对策这种 :) 猜的)
那么现在,开始吧
标红为拿分点,灰色为通俗的理解
第一章
1.零日攻击
零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出解决方案建议,从而使攻击者能够利用这种漏洞破坏计算机程序、数据及设备。注意,零日漏洞并不是软件发布后被立刻发现的漏洞。
利用零日漏洞开发攻击工具进行的攻击称为零日攻击。零日攻击所针对的漏洞由于软件厂商还没有发现或是还未提供相应的补丁,所以零日漏洞攻击的成功率高,造成的破坏大。
想象一下,你有一个非常安全的保险箱,这个保险箱有一个密码,只有你知道。但是,如果有人发现了这个保险箱的一个秘密漏洞,比如一个隐藏的开关,可以不用密码就能打开它,那么这个漏洞就相当于一个“零日漏洞”。
“零日”这个词的意思是指,从这个漏洞被发现到被公开,这段时间是零天。也就是说,当这个漏洞被发现的时候,没有人知道它的存在,包括保险箱的制造商。所以,这个漏洞没有被公开,也就没有补丁可以修补它。
现在,如果有人利用这个未知的漏洞打开了保险箱,偷走了里面的宝贝,这种行为就叫做“零日攻击”。因为漏洞是未知的,所以这种攻击很难被防御,攻击者往往能够成功得手。
2.软件漏洞
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等
3.恶意代码
恶意代码是未在授权的情况下,以破坏硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段。
包括计算机病毒、蠕虫、特洛伊木马、后门、勒索软件等等。
4.软件安全
软件安全是软件工程与软件保障的一个方面,它提供一种系统的方法来标识、分析和追踪对危害及具有危害性功能(例如数据和命令)的缓解与控制。
5.用信息安全的基本属性理解软件安全
信息安全的三大基本属性CIA——保密性(不偷听)、完整性(不篡改)、可用性(不罢工)
6.软件安全相关概念(这一部分我认为不考简答,大概知道一下意思)
1)软件可靠性:在规定条件下,在规定时间内不引起系统失效的概率,在规定时间周期内所述条件下程序执行所要求的功能的能力。(能够正常工作,不会突然坏掉)
2)可信软件:软件的“可信”是指软件系统的动态行为及其结果总是符合人们的预期,在受到干扰时仍能提供连续的服务。这里的“干扰”包括操作错误、环境影响和外部攻击等。(能够按照你的期望运行,结果总是符合用户预期)
3)软件定义网络(SDN):把当前IP网络互联结点中决定报文如何转发的复杂控制逻辑从交换机/路由器等设备中分离出来,以便通过软件编程实现硬件对数据转发规则的控制,最终达到对流量进行自由操控的目的。(就像是一个智能交通系统,它把控制交通的逻辑从交通灯和路标中分离出来,通过一个中央计算机来控制。这样,交通流量可以根据需要灵活调整)
4)软件定义安全(SDS):
SDS是适应SDN复杂网络的安全防护新思想,基本原理是将物理及虚拟的网络安全设备预期接入模式、部署方式和实现功能进行解耦,底层抽象为安全资源池里的资源,顶层统一通过软件编程的方式进行智能化、自动化的业务编排和管理,以完成相应的安全功能,从而实现一种灵活的安全防护。SDS可以分解为软件定义流量、软件定义资源和软件定义威胁模型。(这就像是有一个智能安全机器人,它可以自动分析网络流量和行为,发现潜在的威胁,并根据这些信息来调整安全策略,实现动态和闭环的安全防护)
5)软件定义流量/资源/威胁模型:
- 软件定义流量:就像是一个智能交通指挥系统,可以通过编程来控制哪些车辆走哪条路,SDS通过编程来控制网络流量,将特定的流量导向安全设备进行检测。
- 软件定义资源:就像是一个资源库,SDS通过管理中心来统一管理所有的安全资源,比如安全设备和策略,可以根据需要进行分配和调整。
- 软件定义威胁模型:这就像是安全系统的大脑,它通过分析网络流量和事件来识别和建模未知的威胁,然后用这些模型来指导流量控制和安全策略的调整。
7.软件安全防护的基本方法
目前有两种方法:采用多种检测、分析及挖掘技术对安全错误或是安全漏洞进行发现、分析与评价,然后采取多种安全控制措施进行错误修复和风险控制(类似于亡羊补牢,羊死了才发现问题去修栅栏);分析软件安全错误发生的原因,将安全错误的修正嵌入到软件开发生命周期的整个阶段(在建栅栏时候就考虑好各种问题)
8.软件安全防护的主要技术
软件安全属性的认知,系统安全工程,软件安全开发
9.软件安全开发关注了什么
软件安全需求分析、软件安全设计、软件安全编码、软件安全测试、软件安全部署
第二章
1.软件漏洞
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等
软件漏洞的成因有很多:计算机系统结构决定了漏洞的必然性、软件趋向大型化,第三方扩展增多等
软件漏洞具有:持久性与时效性(会不断造成影响,但一段时间后漏洞威胁也会逐渐消失)、广泛性与具体性(影响范围很大,但总是存在于具体的环境或条件中)、可利用性与隐蔽性(攻击者可以利用这些漏洞,不容易被发现)
2.软件漏洞的分类(找了前几年的几个博客,太多太乱了看不懂,这里重新总结一下)
1)输入验证错误:在软件中,如果输入数据没有得到正确的验证,攻击者就可能通过发送恶意数据来执行未授权的操作(好比是门卫没有仔细检查访客的身份,导致任何人都可以进入)
2)缓冲区溢出:在软件中,如果程序试图在一个小的存储空间里存入过多的数据,超出的部分就会溢出到相邻的内存区域,可能会覆盖重要的数据或指令,导致程序崩溃或执行攻击者的代码(一个只能装一定量水的杯子,但你往里面倒的水超出了它的容量,结果水就溢出来弄湿了桌子)
3)权限提升:在软件中,如果存在权限提升的漏洞,攻击者可能利用这些漏洞获得更高级别的访问权限,比如从普通用户变成管理员(这就像是有人拿到了不应该属于他的钥匙,可以打开更多的门)
4)跨站脚本攻击(XSS):XSS漏洞允许攻击者将恶意脚本注入到网页中(这也是为什么XSS漏洞多于前端相关),当其他用户访问这个页面时,脚本就会在他们的浏览器上执行(你在网站上看到一个有趣的链接,点击后却发现它在你的浏览器上执行了一些恶意操作)
5)SQL注入:SQL注入允许攻击者在输入框中输入恶意的SQL命令,如果数据库没有进行适当的过滤,这些命令就会被执行,导致数据泄露或被篡改(你向数据库管理员提问,但你的提问中包含了一些特殊指令,管理员没有意识到这些指令,就按照你的问题去操作数据库了)
6)拒绝服务攻击(Dos/DDos):让目标系统无法响应合法用户的请求,通常是通过发送大量的请求来消耗系统资源(攻击者堵住了你家门口的路,让你无法正常进出)
第三章
1.程序运行时的结构(这个好好理解一下,可能出道分析题)
在Win32环境下,由高级语言编写的程序经过编译、链接,最终生成可执行文件,即PE 文件。在运行PE文件时,操作系统会自动加载该文件到内存,并为其映射出4GB的虚拟存储空间,然后继续运行,这就形成了所谓的进程空间
1)代码区:这部分内存存放的是程序的机器代码,也就是高级语言代码编译后的结果(你可以把它想象成一本已经写好的剧本,包含了所有的指令和只读数据。如果有人试图修改这些指令,就像试图在演出中改变剧本一样,是不被允许的,会引发错误。)
2)数据区:这里存放的是程序中的全局变量和静态变量,它们在整个程序的运行期间都存在(你可以将数据区想象成舞台布景,为整个演出提供了持续的背景)
3)堆区:堆区是程序运行时动态申请和释放内存的地方(这就像是一个道具仓库,演员(函数)在需要时可以从这里借道具(内存),用完后归还)
4)栈区:栈区是用于存储函数调用时的局部变量和函数调用的上下文信息,比如参数和返回地址(你可以把它想象成一叠盘子,每个函数调用就像是往盘子上放东西,当函数执行完毕后,这些东西就会被取走,盘子也被清空,为下一个函数调用做准备)
2.堆和栈的概念
堆:堆是一块用于动态内存分配的内存区域。当你的程序在运行时需要额外的内存空间时,他可以从堆上申请内存(当你需要存储的数据量在程序运行前无法确定,或者数据需要在多个函数之间共享时,可以使用堆)
栈:栈是一块用于存储函数调用时的局部变量和调用上下文的内存区域。每当一个函数被调用,它的局部变量和返回地址就会被推入栈中(用于存储函数的局部变量、函数参数、返回地址等,这些数据在函数调用结束后就不再需要了)
- 堆:可以想象成一家自助餐厅的自助餐区,顾客(程序)可以根据自己的需求,随时去拿取食物(申请内存),吃完后需要自己把盘子放回回收区(释放内存)。
- 栈:就像餐厅里的服务员,每当顾客点菜(函数调用),服务员就会把菜(局部变量和上下文信息)放到顾客面前的桌子上(栈中),顾客吃完后,服务员会自动清理桌面(函数返回,栈自动清理)
3.缓冲区
缓冲区是一块内存空间,用于存储临时数据。它通常用于处理输入/输出操作,或者在函数调用中存储数据
4.缓冲区溢出
在函数的栈帧中,局部变量是顺序排列的,局部变量下面紧跟着的是前栈帧EBP及函数返回地址RET。如果这些局部变量为数组,由于存在越界的漏洞,那么越界的数组元素将会覆盖相邻的局部变量,甚至覆盖前栈帧EBP及函数返回地址 RET,从而造成程序的异常。就像水桶里的水溢出,如果水桶满了还继续倒水,水就会溢出来,可能会损坏周围的物品(影响程序的其他部分或安全)
5.格式化字符串漏洞及利用分析
格式化字符串漏洞是一种常见的安全漏洞,主要出现在使用C语言编程时,如果不正确地处理用户输入的字符串用于格式化输出,就可能引发这种漏洞。
利用:通过改变格式化串中输出参数的个数实现修改指定地址的值,通过改变格式化串中格式符的个数,调整格式符对应参数在栈中的位置,从而实现对栈中特定位置数据的修改。
6.Windows安全漏洞保护分析
1)栈溢出检测选项/GS:(相当于是房子的门锁,确保只有授权的人才可进入,但是小偷也有可能翻窗户进去)
- /GS保护机制:这是一种安全特性,用来防止栈溢出攻击。通过在编译时添加特定的指令来确保程序在处理栈数据时,能够检查数据是否超出了预定的边界;
- 对抗/GS保护:尽管/GS可以提供保护,但攻击者可能会尝试找到方法来绕过这些检查,例如通过精心构造的输入来覆盖保护机制。
2)数据执行保护DEP:(像是保安一样,确保他们保护的区域不被入侵)
- DEP机制:DEP是一种安全技术,用于防止恶意代码在不应该执行代码的内存区域(如数据段)执行。它通过监视程序的执行流程,确保只有可执行的内存区域才能运行代码。
- 对抗数据执行保护DEP:攻击者可能会尝试绕过DEP,例如通过找到程序中允许执行的区域来放置恶意代码。
3)地址空间布局随机化ASLR:(搬家了以后重新安排了房子的布局,所以你家的惯偷没法一下就找到保险柜的位置了,因为已经变化)
- ASLR保护机制:ASLR通过随机化程序和库的内存加载位置,增加攻击者预测内存地址的难度。这样,即使攻击者发现了漏洞,也很难准确地利用它,因为每次程序运行时的内存布局都可能不同。
4)安全结构化异常处理SafeSEH:(像是一份授权名单,只有名单上的人才可以在紧急情况下进入特定房间,但如果找到了后门也可以偷偷进入)
- SafeSEH机制:SafeSEH是一种防止攻击者滥用结构化异常处理(SEH)的技术。它通过维护一个安全的异常处理函数列表,确保只有列表中的函数可以被用作异常处理程序;
- 对抗SafeSEH机制方法:尽管SafeSEH提供了额外的保护,但攻击者可能会寻找不支持SafeSEH的模块或内存区域来绕过这一机制,例如通过覆盖异常处理指针来指向他们控制的代码。
第四章
1.Web基本架构
Web三层架构:
一次Web访问过程分析:在这整个过程中,大致可以分为以下几个阶段:DNS域名解析、TCP连接、HTTP请求、处理请求返回HTTP响应、页面渲染和关闭连接。
2.Web漏洞概述
Web应用安全漏洞是Web应用程序在需求、设计、实现、配置、维护和使用等过程中,有意或无意产生的缺陷,这些缺陷一旦被攻击者所利用,就会造成对网站或用户的安全损害,从而影响构建于Web应用之上正常服务的运行,危害网站或用户的安全属性
3.SQL注入漏洞
攻击者能够利用现有Web应用程序,将恶意的数据插入SQL查询中,提交到后台数据库引擎执行非授权操作。(你在和一个自动售货机交互,你输入一些指令(比如“可乐”或“1”),售货机就会给出相应的商品。如果售货机没有正确地检查你的指令,你可能会输入一些特殊的指令(比如“给我所有商品”),这样你就能得到不应该得到的东西)
主要危害:非法查询、修改或删除数据、执行系统命令、获取访问权限
利用方法:
- 注入点选择:攻击者需要找到Web应用程序中可以输入数据的地方,如表单、URL参数、Cookie等
- 数字型和字符型注入:当输入的是数字和字符串时,可能包含SQL注入攻击;
- 注入途径:通过Web端注入,直接访问数据库注入。
4.XSS跨站脚本漏洞
XSS,全称跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到其他用户会浏览的页面中。主要分为反射型XSS和存储型XSS。
原理这里只做理解,原话自己看书吧:
反射型XSS:当用户“做出动作”如点击链接等时候,恶意脚本才会触发
- 攻击者发现网站漏洞,构造包含恶意脚本的URL。
- 受害者点击链接,浏览器向服务器发送请求。
- 服务器将恶意脚本返回给受害者的浏览器。
- 浏览器执行恶意脚本,攻击者可能获取受害者的Cookie等信息。
存储型XSS:就像是在社交媒体上发表的帖子,发表后只要不处理一直在那,其他人只要浏览就会触发
- 攻击者发现网站漏洞,将恶意脚本上传到网站的数据库。
- 用户正常访问网站,请求查看帖子或信息。
- 服务器将包含恶意脚本的内容返回给用户。
- 用户浏览器执行恶意脚本,攻击发生。
第五章
1.软件生命周期
概括地说,软件生命周期由定义、开发和维护3个时期组成,每个时期又可进一步划分成若干个阶段。
2.软件安全开发模型(认真看一下)
SDL模型由软件工程的瀑布模型发展而来。包括七个阶段:安全培训、安全需求分析、安全设计、安全实施、安全验证、安全发布、安全响应。
第六章
1.软件安全需求分析与软件需求分析的区别
1)软件安全需求的特点:客观性(安全需求不是用户主观愿望,而是系统固有的安全属性决定的),系统性(要全面考虑软硬件等等因素,不止是软件本身),经济性和适用性(要根据重要性和成本效益来,不能“花一万元去保护十块钱”)
2)软件安全需求分析的目的和作用:确保软件系统能够有效地提高安全性,减少安全漏洞;安全需求分析有助于保护信息的保密性、完整性和可用性,防止软件被攻击。
2.软件安全需求的来源
- 外部安全需求:通常指法律要求,如安全技术和管理的国家标准和法规;
- 内部安全需求:包括组织内部政策和软件业务功能相关的安全需求。
等级保护(记不住,感觉不考):
- 等级保护要求:信息系统应根据其重要性分级,实施相应的安全保护措施。
- 等级保护2.0:随着法规升级,等级保护对象扩展,体系升级,包括更多方面的网络安全措施。
- 基本概念:网络安全等级保护是按照网络重要性分等级进行保护和监管的制度。
- 工作流程:包括定级、备案、等级测评、安全建设整改和监督检查等环节。
- 政策体系:由多个部门出台的一系列文件组成,指导等级保护的具体实施。
- 标准体系:制定了一系列的国家标准,确保等级保护工作有标可依。
信息安全管理体系与等级保护的联系与区别(也乱七八糟的,感觉不考):
- 联系:等级保护是信息安全管理体系的一部分,两者管理目标一致,相辅相成。
- 区别:
- 工作重点:信息安全管理体系注重构建管理制度,等级保护注重分类、分级保护。
- 依据标准:信息安全管理体系依据如GB/T22081—2016等标准,等级保护依据地区实际情况确定测评规范。
- 实施对象:信息安全管理体系主要面向企业,等级保护主要面向政府部门。
3.软件安全需求的获取(这种的大概理解一下,可能会出分析题,给个情景让写对策这种 :) 猜的)
相关方:
- 业务负责人、最终用户、客户:他们对业务风险和可接受的风险阈值有深刻理解,应积极参与安全需求的采集和分析。
- 安全需求分析人员:负责收集和分析安全需求,帮助开发团队理解并实现这些需求。
- 安全技术支持:如运维和信息安全小组,提供专业支持和帮助。
挑战:
- 非技术/业务人员可能对安全技术了解不足,需要通过培训提高他们的安全意识和知识。
方法:
- 调查:通过问卷或访谈形式,直接从相关方获取安全需求信息。
- 问题设计:调查问题应涵盖数据敏感性、用户权限、系统恢复时间、错误处理等方面。
调查示例问题:
- 数据类型和敏感度。
- 是否处理个人身份或隐私信息。
- 用户变更操作的权限和审计需求。
- 系统的最大可容忍宕机时间和数据损失量。
- 单点登录认证需求。
- 用户角色和权限设置。
- 错误消息和条件处理。
第七章
1.软件设计的主要工作
将需求分析得出的规格说明书转化为具体的软件架构和设计方案。
2.软件安全设计的主要工作
架构安全性设计、安全性分析、安全功能设计
3.软件架构安全性原则
软件架构可分为三类:逻辑架构(描述软件系统中组件之间的关系,如用户界面、数据库和外部系统接口等)、物理架构(描述软件组件在硬件上的部署方式)、系统架构(说明系统的非功能性特征,如可扩展性、可靠性、灵活性和性能等)
软件架构安全设计首先需要进行系统描述,包括系统功能、安全要求、系统部署和技术需求,确定软件系统的安全级别。接着,设计软件网络、数据库等应具备的安全功能,根据软件具体安全需求的不同,设计的安全功能包括加密、完整性验证、数字签名、访问控制及安全管理等。在架构安全设计过程中,还需要解决软件安全功能的易用性、可维护性和独立性问题。
4.软件架构安全性分析
重要性:
- 在设计阶段结束前,检查软件架构是否融入了安全属性,确保满足安全需求。
- 验证设计是否符合安全政策,减少后期重设计的需求。
基本过程:
- 架构建模:创建软件架构的模型。
- 需求检查:根据安全需求和标准,检查架构模型。
- 设计修改:如果发现问题,修改设计直至满足所有安全需求。
分析方法:
- 形式化分析:使用精确的数学方法,自动化程度高,但实用性较低。
- 工程化分析:从攻击者角度考虑问题,实用性强,自动化程度较低。
主要内容:
- 软件安全设计原则:有效的开发经验总结,关注软件安全性。
- 软件安全功能设计:将安全需求转化为具体的功能组件。
- 威胁建模:系统地识别和评估影响软件系统的威胁。
5.软件安全设计原则(第七章里我认为5、6比较重要)
这里只说MH 13条设计原则:
- 从错误中学习:分析并吸取以往安全错误的教训,防止重复发生。
- 减少攻击面:简化软件,减少潜在的攻击入口。
- 纵深防御:多层次的安全措施,提供多重防护。
- 最小特权:限制程序和用户仅拥有完成任务所需的最小权限。
- 安全默认设置:默认配置应安全,避免开放性风险。
- 避免向下兼容不安全:随着时间推移,不断更新产品以消除旧的安全问题。
- 假设外部系统不安全:对所有外部输入进行严格过滤,假设它们可能包含攻击。
- 失败计划:为可能的安全问题准备应急响应计划。
- 安全模式:系统失败时不泄露敏感信息。
- 安全特性不等同于安全:拥有安全特性并不意味着程序整体安全。
- 不依赖隐匿:安全设计不应仅仅基于保密性。
- 分离代码和数据:避免将用户输入作为代码执行。
- 正确解决问题:彻底解决安全问题,避免引入新问题
6.安全设计原则
-
减少受攻击面:移除或限制不必要的功能、服务和协议,减少潜在的攻击点(可被攻击的方面少了,被攻击的可能也就少了)。
-
最小授权原则:仅授予用户或系统执行任务所需的最小权限,减少权限滥用风险(不会用就别用,省的用错)。
-
权限分离:将关键功能分散至多个条件或角色,避免单一故障点(新中国不能只有一个皇帝)。
-
纵深防御:多层次安全措施,确保即使一层防御失败,系统仍受保护(老千层饼了)。
-
完全控制:对所有访问受保护资源的行为进行细粒度的权限检查(不错杀,不放过)。
-
默认安全配置:系统默认设置应安全,减少用户配置需求(这样就好了!每次配置东西累死!)。
-
开放设计:安全性不应依赖于设计的保密性,而应基于公开、标准化的机制(给日记上锁没用的,但是你要是用火星文写,咱妈就读不懂了,“不保密”才是最牛逼的保密)。
-
保护最弱环节:识别并加固系统中的薄弱部分,提高整体安全性(水桶中最短的木板)。
-
最少共用机制:减少共享机制,根据角色划分功能或隔离代码(重要的秘密别跟别人说)。
-
经济性原则(KISS原则):简单设计减少复杂性,降低成本,提高安全性(甭用个金锁锁个铁盒)。
-
心理可接受原则:安全机制应用户友好,易于接受和使用(甲方最重要原则)。
-
平衡安全设计:在不同的安全原则之间找到平衡,根据业务需求做出合理折衷(不能坡脚,各方面都得均衡)。
7.威胁建模(重点,好好看)
威胁建模是一种系统化的方法,用于识别、评估和缓解系统中的潜在安全威胁
- 资产识别:确定系统中哪些资产(如数据、功能等)需要保护。
- 威胁识别:列出可能威胁这些资产的安全问题和攻击手段。
- 脆弱性评估:分析系统可能存在的脆弱性,即攻击者可能利用的漏洞。
- 影响分析:评估如果威胁实现,对系统和资产可能造成的影响。
- 风险评估:基于威胁的可能性和影响,确定风险等级。
- 缓解措施:为每个已识别的风险制定缓解措施或对策。
- 策略制定:根据风险评估结果,制定安全策略和控制措施。
- 实施和验证:执行安全措施并验证其有效性。
第八章
1.软件安全编码
选择安全的编程语言、版本(配置)管理、代码检测、安全编译
2.CERT安全编码建议
- 验证输入:对所有不可信输入进行严格验证,减少漏洞。
- 留意编译器警告:启用并重视编译器的警告和错误提示,确保代码无警告。
- 安全策略的架构和设计:设计软件架构以支持和加强安全策略。
- 保持简单性:简化程序,减少复杂性,避免不必要的功能。
- 默认拒绝:默认设置应为拒绝访问,仅在明确允许时开放权限。
- 最小权限原则:确保进程仅拥有完成任务所需的最小权限,减少权限滥用风险。
- 清洁发送给其他系统的数据:净化数据,防止注入等攻击。
- 纵深防御:采用多层次安全措施,即使一层防御失败也有其他防护。
- 使用有效的质量保证技术:运用渗透测试、模糊测试和源代码审计等技术发现和修复漏洞。
- 采用安全编码标准:制定并遵循安全编码规范,避免常见漏洞。
3.Java语言安全编码(没想出来咋记,死记硬背吧)
语言层安全:
- 访问控制:使用
private
、protected
等关键字限制代码的可见性,增强封装性。 - 类型安全:通过静态类型检查和运行时类型校验确保变量和函数调用的类型匹配。
- 内存管理:自动内存管理和垃圾回收机制减少内存泄漏和指针错误。
- 数组和字符串检查:内建的数组边界和字符串操作检查,防止越界和非法访问。
字节码层安全:
- 类加载器:作为安全防线,负责从外部加载类文件,防止恶意代码干扰,确保类的安全加载。
- 字节码验证器:确保加载的字节码结构正确,执行时不会破坏JVM的运行环境。
验证过程:
- 类文件结构检查:确保类文件格式正确,包括方法定义和属性长度等。
- 类型数据语义检查:进行语法级检查,如final类不能被继承,常量池的合法性等。
- 字节码验证:使用字节流分析法确保字节码的正确性,包括栈大小、寄存器存取和操作码参数等。
- 符号引用验证:在动态链接过程中,验证类是否允许引用其他类,确保运行时类的合法性和性能。
看着多其实真的还好,自己顺一遍,结合上一篇课后题,名词解释和简答差不多就能答个七七八八了,明天再出实验里的东西和大题。
另外别再问我考啥了,我又不是出题我是真不知道 :-D 我上课又不听,说不定还不如你们