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

Posted qq_46184019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了山东科技大学 软件安全 期末复习相关的知识,希望对你有一定的参考价值。

  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. unsigned short int a =32768;
    short int i=a;	//-32768 ~ 32767
    printf("%d",i);	 //-32768
    a=65535;
    i= a;
    printf("%d",i); // -1
    
  17. int bigint=2147483647;
    printf("%d",bigint++);	//2147483647
    unsigned int z=0;
    printf("%d",--z);	//-1
    
  18. unsigned int 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. unsigned short 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. void test(char *c)
    
        short s=strlen(c);	//可能会爆short
        char buf[100];
        cout << "strlen(c)=" << strlen(c)<<endl;
         if(s<100)
             strcpy(buf,c);
        
        else
             cout<<"overflow!" <<endl;
        
    
    
  35. // n赋初值为10
    n=(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); 
    return 0;
    
  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. 代码静态检测:不在计算机上实际执行所检测的程序,而是采用人工审查或类似动态分析的方法。
    代码动态检测:实际运行代码时进行检测的方法。

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

山东大学软件学院算法设计与分析期末考试回忆版

一、考试时间

2021年12月13日上午10:10-12:10
本次考试是山东大学软件学院2019级软件工程专业大三上算法期末考试
本学期的算法课上课时间为2-7周,9-14周(实际上13周就结束了),第15周考试

考试范围:除了并查集和35章近似算法不考,其他在老师PPT上的内容都是考试范围

二、考试题目

本次算法考试一共有4道大题,每道大题中有多个小题

2.1 第一大题

(1)请解释RAM模型

详细说明见课件

(2)给定递推式:T(n)=T(3n/4) + nlogn,求T(n)的上界

(3)关于NP归约的问题(英文题)

  1. 解释“归约”的概念
  2. 证明顶点覆盖归约到集合覆盖

2.2 第二大题

(1)写出强连通算法的伪代码,证明正确性,分析时间复杂度

(2)在一个无向有权图G中,有一颗最小生成树T,在该图中,将一条边e的权值w增加,设计算法求新的最小生成树,阐述算法思想,写伪代码,证明该算法的正确性(本题为英文题)

2.3 第三大题

(1)动态规划:x的初值为1,每一步可对x进行+1或乘2的操作,求对一个大于0的整数n来说,x经过操作后等于n所需的最小步数。写出Bellman方程,伪代码

(2)分析Floyd算法的思想,写伪代码,分析时间复杂度和空间复杂度

2.4 第四大题

(1)合并砖块问题:假设有n堆砖,每堆砖都有对应的块数。需要将这n堆砖合并,只能合并两堆相邻的砖。合并的代价是这两堆砖砖数之和。设计动态规划算法,使合并代价最小,写算法思想,伪代码,分析时间复杂度

(2)求“最小代价”问题:对于一个有向图,每个点都有一个值wi,wi > 0,原点s到该点的代价为s到该点的wi之和。设计算法,求s到每个点的最小代价,写伪代码,分析时间复杂度,证明算法正确性

三、总结

总的来说,这次的算法考试还是有一定难度的,首先是题目量较大,很多题都要写思想,写伪代码,分析时间复杂度,证明等,比较复杂。但是这次的算法题中,有三道题都来自平时的作业,并且老师最后一节课还提到了RAM模型可能需要掌握。因此总的来说,在考试的时候需要安排好时间,并复习好老师布置的作业,将算法过程熟练掌握,重要的证明同样需要熟练掌握。

祝学弟学妹算法考试95+

以上是关于山东科技大学 软件安全 期末复习的主要内容,如果未能解决你的问题,请参考以下文章

山东大学 软件学院 2021-2022 春季学期 《大数据安全》期末考题

山东大学 软件学院 2021-2022 春季学期 《大数据安全》期末考题

山东大学软件学院数据仓库数据挖掘期末复习

2020山东大学软件测试期末试题

2020山东大学软件测试期末试题

「信息安全技术」期末复习宝典 整理完毕