软件安全与设计实例解析
1. 软件安全技术
1.1 安全编程的重要性
软件测试和消除漏洞是生成安全代码的重要方面,但安全软件的一些方法超出了测试范畴,一些与安全相关的漏洞值得特别关注。
1.2 关键安全技术
1.2.1 缓冲区溢出
缓冲区溢出是一种常见的攻击途径。如果程序从外部源读取数据时导致缓冲区空间溢出,外部源就可以更改内存的其他部分。攻击者可以利用这些更改向程序中插入指令,进而控制程序。因此,向数组传输数据时应始终检查缓冲区边界并强制执行其限制。
1.2.2 缓冲区初始化
未初始化为已知值(如零)的缓冲区也可能导致安全漏洞。缓冲区使用的内存通常在执行过程中从其他用途回收,该内存的先前值可能包含对攻击者有用的信息。如果在使用前未对缓冲区进行初始化,其信息可能会被攻击者获取。
1.2.3 代码签名
代码签名可用于验证一段代码是否来自可信源。数字签名可以识别代码的提供者,通过使用加密哈希函数生成程序的摘要,然后使用公钥密码学进行签名。在执行程序之前可以检查其签名,数字签名还可用于验证软件更新是否来自可信源。
1.2.4 密码管理
一些程序可能使用密码来验证用户身份,例如在允许更改某些系统参数之前要求用户登录。密码应仅以加密形式存储。
2. 软件调制解调器设计
2.1 工作原理与需求
2.1.1 频率移键控(FSK)
调制解调器将使用频率移键控(FSK)技术,该技术常用于1200波特的调制解调器。FSK方案通过