软件安全基础知识

       什么是安全

什么是 Bug
什么是漏洞
SRIDE 威胁模型
安全设计原则
OWASP TOP 10

1.什么是安全

1955年,美联航629号航班在空中爆炸,凶手将炸弹放在行李。之后机场增加行李检查。

1970年,道森机场恐怖分子带枪劫机。之后机场增加金属探测门。

1988年,恐怖分子利用行李中炸弹制造洛克比空难。之后机场增加行李X光检查。

2006年,恐怖分子企图使用隐形眼镜清洁液制造的炸弹炸毁一架大西洋航班。之后机场禁止旅客携带100ml以上液体。

911事件其中一架飞机因恐怖分子带刀劫持。之后机场禁止随身携带任何刀具,驾驶舱门改为只能从驾驶舱打开。

2.什么是安全(续)

利用iOS系统漏洞伪造短信来源

利用2G协议漏洞窃听周边短信

利用SMTP协议漏洞伪造邮箱

3.什么是安全(续)

安全的目标

保密性、完整性、可用性、可审计性、不可抵赖

达成目标的手段

加密/解密访问控制流量监测身份认证

激励人员遵守

人员培训、人员奖励、易用考量

确保机制有效

可信计算、纵深防御、输入验证、配置安全

以小于潜在危害的代价,最大程度降低网络攻击对关键资产的影响。

4.什么是Bug

小李与老婆结婚十年,始终没怀上孩子,不得不去和谐医院挂号。

什么是Bug——应该发生却没发生的根源。

小李要解决——自己/老婆的身体问题。

5.什么是漏洞

老王在外地出差一年多,老婆怀了孩子,不得不去民政局办离婚。

什么是漏洞——不该发生却发生的原因。

老王要应对——更多的老王。

6.如何防护一辆汽车

奔驰专利电机车1号

定义:要防护的系统具体指什么?

目标:防护的目标是什么?什么损失无法接受?

敌人:防护的敌人是谁?人/非人,恶意/好意。

控制:哪些控制措施可以防御?

7.奔驰CLA级轿跑

车辆本身、车内人员;

车辆完好无损、无丢失;人员完好无损、无丢失;

手摇发动机把手、碰撞、打滑、小偷、强盗、陨石、熊孩子……

自启动发动机、三点式安全带/气囊/防撞车架、ESP、钢化玻璃/发动机防盗、全车盗抢险、车损险、无钥匙启动……

8.STRIDE威胁模型——欺骗Spoofing

缺乏任何形式的身份/认证;
依赖URL的访问,如以为没人能记住的网址;
用户界面未隐藏输入的认证信息;
未防止用户创建弱认证信息;
未防止在共享计算机上缓存凭证信息;
可以暴力攻击的身份认证机制;
可以使用从其他漏洞中获取的凭证进行验证,如密码泄漏;
不允许使用密码管理器或高强度密码;
依靠单一因素进行认证,如只有用户名和密码;
重置凭证过程中存在漏洞;
认证过程使用可猜测的信息,如身份证后四位;
在创建新账户时缺乏身份或权限检查;
使用共享账户或凭证信息;
人员离职时未撤销访问权;
退出认证会话后未清除凭证信息;
身份验证、授权或会话管理使用连续编码;
会话在合理时间后未能超时;
未配置合理授权,即基于角色和最低权限的授权;
当采取破坏性动作时,未重新认证,如删除账户;

9.STRIDE威胁模型——篡改(Tampering

不能防止反射型/存储型跨站脚本攻击(XSS);
不能防止注入攻击,如SQL、LDAP、命令注入;
不能防止重定向攻击;
不能防止跨站请求伪造(CSRF),如未验证请求来源;
不能防止点击劫持;
使用其他字符编码可以绕过防御,如黑名单;
文件上传功能无法阻止恶意文件,如文件后缀白名单;
不能防止DOM型跨站脚本攻击(XSS);
依靠基于浏览器的业务逻辑进行验证;
显示广告的脚本包含恶意代码;
可以通过从服务器接收的JSON响应进行代码注入;
在DOM上下文之间的传输会受到代码注入的影响;
攻击者可以篡改cookie中的有效信息;

10.STRIDE威胁模型——否认(Repudiation

缺少显示用户访问敏感数据的日志记录;
缺乏对用户敏感行为的记录,如删除账户;
缺乏对管理员操作的记录;
缺乏对会话管理或认证失败的记录;
缺乏对验证错误的记录;
没有将日志集中到一个中央存储库中;
缺乏显示用户在交付过程中行为的审计日志;
缺乏对日志文件的访问控制,使攻击者得以掩盖行踪;
敏感行为的日志缺乏完整性签名;
交付过程的日志缺乏完整性签名;
缺乏对审计和访问策略的认识;
缺乏向用户传达审计和滥用政策的宣传;
缺乏应对可疑事件响应的团队或流程;

11.STRIDE威胁模型——信息泄漏(Information disclosure

缺乏防止将敏感配置信息推送到版本控制;
敏感信息以纯文本形式存储在版本控制;
恶意程序可能会读取明文凭证;
通过网络或系统组件传输明文数据,造成中间人攻击;
TLS加密配置较弱;
缺乏防止域名HTTP访问的措施,如HSTS;
敏感信息存在于日志文件中;
不必要的系统信息泄漏,如Web服务版本号;
触发异常会泄露不必要的信息,如Flask框架的debug模式;
对不打算让用户访问的资源缺乏访问控制;
敏感数据存储在未加密的存储空间中;
恶意程序可能从日志中读取敏感信息;
敏感数据存储在内存中可预测的位置;
缺乏反缓存头,以防止缓存敏感的HTTP请求或响应;
缺乏速率限制,允许无限制访问有价值的数据;

12.STRIDE威胁模型——拒绝服务(Denial of service

未对不需要联网的服务应用进行网络隔离;
将不必要的服务暴露在互联网;
未过滤OSI网络第2层或第3层的网络泛洪攻击;
未使用CDN(内容分发网络);
系统设计不能满足网络需求;
面向互联网的用户界面缺乏访问速率限制;
缺乏确定DDos来源的记录;
缺乏应对计划,无法阻断来自特定源头的DDos攻击;
缺乏向上游基础设施供应商报告问题的应对计划;

13.STRIDE威胁模型——权限提升(Elevation of privilege

由于未打补丁,导致基础设施/系统/组件的已知漏洞被利用;
不需要暴露在互联网上的服务包括;
可以从其他系统提升权限;
可以通过网络对其他系统组件进行攻击;
开发者模式或默认的管理员凭证被启用;
未部署的环境中暴露的不必要的服务;
能通过云厂商侧信道攻击升级权限;
没有检查对较敏感资源的授权情况;
未能防止点击劫持;
缺乏客户端安全策略(CSP)配置,允许加载不受信任的资源;
安全功能存在漏洞,如认证、授权、会话管理;

14.安全设计原则——减小攻击面

家用汽车减小攻击面的体现:
封闭式车厢
防撞车架
钢化玻璃
橡胶轮胎:充气轮胎、实心轮胎
油箱盖:开关式/按钮式
……

15.安全设计原则——权限划分

教练车的权限划分体现:
副驾驶刹车
油门垫砖
……

16.安全设计原则——最小权限

家用汽车的最小权限体现:
车载系统
CAN总线
车窗锁开关
后视镜调整按钮
……

17.安全设计原则——默认安全

911之后,机场的安全门升级:
50多道门进行了升级;
三道身份验证:
安全徽章
安全代码
指纹扫描

18.OWASP TOP 10

注入(Injection)
失效的身份认证和会话管理(Broken Authentication)
敏感信息泄漏(Sensitive Data Exposure)
XML外部实体攻击(XML External Entities)
失效的访问控制(Broken Access Control)
安全配置错误(Security Misconfiguration)
跨站脚本(Cross-Site Scripting)
不安全的序列化(Insecure Deserialization)
使用有已知漏洞的组件(Using Components with Known Vulnerabilities)
日志和监控不足(Insufficient Logging & Monitoring)