0


【山东科技大学 软件安全 期末复习】

  1. 软件是程序、数据和文档的集合体。
  2. 网络攻击中,超过 70% 的漏洞来自应用程序软件。
  3. 移动互联网App存在安全漏洞的比例超过 90%。
  4. 软件面临的安全威胁分为三类,分别为 软件漏洞、恶意代码 和 软件侵权
  5. 漏洞利用的过程:漏洞发现 、漏洞挖掘 、漏洞验证、漏洞利用、实施攻击。
  6. 0day漏洞是指已经被发现(有可能未被公开)但官方还没有相关补丁的漏洞。
  7. 1day漏洞是指厂商发布安全补丁之后但大部分用户还未打补丁时的漏洞,此类漏洞仍然具有可利用性。
  8. //存在漏洞,x*y是int型整数,会爆int(溢出) c++和java都存在此问题long foo(int x, int y){ long result= x * y ; return result;}
  9. int i = -3;unsigned short ui=i;printf("%u",ui); //结果为65533,对65536取模
  10. char c1='a';char c2='b';char c3=c1+c2;printf("%d,",c3);//结果为-61 ---------->应改为int c3=c1+c2;
  11. 软件安全错误一般包含六个方面,分别是 需求说明错误 、设计错误、编码错误、测试错误 、配置错误 和 文档错误 。
  12. 漏洞是引发信息安全事件的根源。
  13. 软件开发过程中,人为错误称为(软件错误),软件中,软件内部的错误称为(软件缺陷 ),软件运行中,不正常的状态称为(软件故障)。
  14. 网络空间包含电子设备、基础设施、应用、数据,还有(人)
  15. 网络安全框架的核心PDRR模型中,P指( 保护 )、D指( 检测 )。
  16. unsignedshortint a =32768;shortint i=a;//-32768 ~ 32767printf("%d",i);//-32768a=65535;i= a;printf("%d",i);// -1
  17. int bigint=2147483647;printf("%d",bigint++);//2147483647unsignedint z=0;printf("%d",--z);//-1
  18. unsignedint i=ULONG_MAX;int c=-1;printf("%d", c==i);//1
  19. 栈帧是系统为进程中的每个(函数)调用划分的一个空间。
  20. 指向当前栈帧的栈顶的指针是(ESP),指向栈底的是(EBP)。
  21. 缓冲区溢出指向缓冲区写数据时,没有做(边界)检查,缓冲区的数据超过预先分配的(边界),使得一簇数据覆盖在合法数据上引起的系统异常。
  22. 数据区存储(全局)变量和(静态)变量。
  23. 栈增长方向是从(高)地址到(低)地址;堆增长方向是从(低)地址到(高)地址。 //站高
  24. Win32系统中,进程空间按功能分为4个区域,从低地址到高地址依次为(栈区)、(堆区)、(代码区)、(数据区)。
  25. 程序中所用的缓冲区可以是堆、栈、数据区。 √
  26. 代码区只存放机器代码。 ×------>存放程序汇编后的机器代码和只读数据
  27. //改错 1.char s1[5];// ---->char s1[6];2.char s2[]="abcde";3.char*p;4.int i;5.strcpy(s1,s2);6.p=(char*)malloc(strlen(s1));//----> p=(char*)malloc(strlen(s1)+1);
  28. char s[10];//----->cin.width(10) cin>>s; cout<<s<<endl;
  29. 在C语言的格式化输出中,表示十进制数输出的格式符号是%d,那么表示宽度为6,右对齐的十进制数输出的格式符号是(%6d);表示宽度为6,左补零右对齐的十进制数输出的格式符号是(%06d);输出16进制数的格式符号是(%x);输出字符串的格式符号是(%s);以小数形式输出浮点数的格式符号是(%f);输出十进制无符号数的格式符号是(%u);输出asc码字符的格式符号是(%c);以指数形式输出浮点数的格式符号是(%e);输出指针地址的格式符号是(%p);输出长整型数的格式符号是(%ld)。
  30. unsignedshort s=4;while(--s >=0)// ---->死循环,应改为while (--s>0){printf("%d",s);}
  31. 在32位系统中,size_t相当于类型 unsigned int最大值是 4294967295(2^32-1)
  32. char s1[5];//---->char s1[6]char s2[5];//---->char s2[6]char s3[10];//---->char s3[11]strcpy(s1,"12345");strcpy(s2,"abcde");strcpy(s3,s1);strcat(s3,s2); cout<<s1<<endl; cout<<s2<<endl; cout<<s3<<endl;
  33. char s[10];puts("input a string:");gets(s);// ----> fgets(s,sizeof(s),stdin) cout<<s<<endl;
  34. voidtest(char*c){short s=strlen(c);//可能会爆shortchar buf[100]; cout <<"strlen(c)="<<strlen(c)<<endl;if(s<100){strcpy(buf,c);}else{ cout<<"overflow!"<<endl;}}
  35. // n赋初值为10n=(2*++n)*(n ='a')+(n>0?1:-1);//----->答案是2135,但编译器不同意
  36. 软件生命周期由三个时期构成,分别是(软件定义)时期、(软件开发)时期和(软件维护)时期
  37. 确定软件完成总目标的是(软件定义)时期,由(系统分析员)负责完成。
  38. 软件定义时期,一般分为三个阶段,分别是(问题定义)、(可行性研究)和(需求分析)。
  39. 完成设计和实现任务的是(软件开发)时期,其中系统设计分为(总体设计)和(详细设计)阶段,系统实现分为(编码和单元测试)和(综合测试)阶段。
  40. 使软件能够满足用户长久需求的是(软件维护)阶段。
  41. 软件安全中,软件安全测试和开发过程包括:软件安全(需求分析 )、软件安全(设计 )、软件安全( 编码)、软件安全( 测试)、软件安全(部署)。
  42. 威胁建模可以在软件(设计)之初,就帮助发现安全问题,发现风险。
  43. 解决软件产品自身安全实质性的方法是(威胁建模)。
  44. 威胁建模有3种,分别是以(软件)、(安全)和(资产和风险)为中心。
  45. 测试人员使用(威胁模型)来生成安全测试用例。
  46. 开发团队使用(威胁模型)来实现安全控制和编写安全的代码。
  47. 威胁建模的作用可以跨越软件生命周期,一个完整的威胁建模是软件(设计)、(开发)、(测试)、(部署)运营团队的代表性输入项。
  48. 设计阶段,由(软件架构团队)识别威胁,建立威胁模型。
  49. 威胁建模是循环反复的过程。 √
  50. 软件开发阶段,会发现所有的可能威胁。 ×
  51. FILE *file=fopen("test.txt","w");fprintf(file,"%s","hello");//后面增加fflusf(stdout)fclose(file);return0;
  52. void change (int * q) //改成int* & q{ if(q==NULL) q=new int(20); } int main(){ int *p=NULL; change(p); printf("%d\n,*p); }
  53. 威胁建模过程:确定安全目标,创建应用程序概况图,分解应用程序,确定威胁,威胁评估,确定威胁缓解计划和策略,验证威胁,威胁建档
  54. int foo(char * s){ char *d=new char[10]; if (s==NULL){ //也要释放d return 0; } strncpy(d,s,10); delete[] d; return 1; }
  55. 信息安全三大基本属性:保密性,认证性,完整性。保密性:实现保密性的方法一般是对信息加密和分配访问权限。完整性:实现完整性的方法一般为预防和检测两种机制。可用性:为了实现可用性,可以采取备份(实时备份、定时备份)和灾难恢复、应急响应、系统容侵等许多安全措施。
  56. char* s="c language";//----->char s[]="c language";s[0]='C';
  57. 函数栈帧包含的信息:前一个栈帧的栈低位置,即前栈帧EBP;该函数的局部变量;函数调用的参数;函数的返回地址RET,用于保存函数调用前指令的位置。
  58. 栈溢出:越界的数组元素覆盖相邻的局部变量,甚至覆盖前栈帧EBP和函数返回地址RET。
  59. 格式化串漏洞的根源:C语言不对数组边界进行检查的缓冲区错误。
  60. 需求分析:头脑风暴,问卷调查和访谈,策略分解,数据分类,主/客体关系矩阵…
  61. 需求分析:核心安全需求,通用安全需求(安全架构,会话管理),运维安全需求,其它安全需求。
  62. STRIDE威胁分类:假冒 认证性 攻击者能够伪装成另一个用户或身份 验证主体、验证代码或数据篡改 完整性 在传输、存储或归档过程中能够修改数据 访问控制列表、数字签名否认 不可否认性 攻击者能够否认攻击 强身份验证、数字签名信息泄露 机密性 信息泄露给未授权的用户 加密、访问控制列表拒绝服务 可用性 对于合法用户拒绝提供服务 访问控制列表、授权特权提升 授权性 攻击者能够跨越最小权限限制 访问控制列表、输入验证
  63. Java类加载器:启动类加载器,标准扩展类加载器,路径类加载器,网络类加载器。
  64. int**a =new int*[3];for(int i=0;i<3;i++){ a[i]=new int[2];} delete []a;//----->应该删除每个a
  65. char*s1="abcd";char s2[5];strcpy(s2,s1);if(s1==s2){//改为 if(strcmp(s1,s2)==0)printf("equal!");}else{printf("not equal!");}
  66. Obj * obj=new Obj[10];delete []obj //释放 OObj * obj=new Obj(10);delete obj //释放
  67. 代码静态检测:不在计算机上实际执行所检测的程序,而是采用人工审查或类似动态分析的方法。 代码动态检测:实际运行代码时进行检测的方法。

上述知识是考前整理的,考完之后发现只复习上述知识是远远不够的

标签: 安全

本文转载自: https://blog.csdn.net/qq_46184019/article/details/124759694
版权归原作者 qq_46184019 所有, 如有侵权,请联系我们删除。

“【山东科技大学 软件安全 期末复习】”的评论:

还没有评论