CBK-D5-安全测试与开发.md

CBK-D5-安全测试与开发

安全评估与测试

构建安全评估和测试方案

安全测试
旨在验证某项控制措施是否正常运行。
包括自动化扫描、工具辅助的渗透测试、破坏安全性的手动测试。
渗透测试可以每年开展一次,以最大限度地降低费用并减小业务中断的影响。
仅简单执行测试是不够的,还必须仔细审查测试的结果,确保测试成功。
其他审查可依托安全测试工具自动执行,验证测试是否顺利完成,记录结果并在未出现重要发现时保持沉默。
安全评估
是指对系统、应用程序或其他待测环境的安全性进行全面审查。
主要成果是向管理层提交评估报告,报告包括以非技术性语言描述的评估结果,并往往以提高待测环境安全性的具体建议作为结论。
评估可由内部团队执行,也可委托在待评估领域具备经验的第三方评估团队进行。
NIST SP 800-53A描述了实施安全和隐私评估的最佳实践。
安全审计
内部审计
由组织内部审计人员执行,通常适用于组织内部。
审计负责人直接向总裁、首席执行官或其他类似的角色汇报。审计负责人也可直接向组织的董事会报告,
外部审计
通常由外部审计公司执行。
四大审计公司

####### 安永、德勤、普华永道、毕马威

第三方审计
由另一个组织或以另一个组织的名义进行的审计。
比如监管机构可依据合同或法律对被监管公司进行审计。执行审计的组织通常挑选审核员,并设计审计范围。
向其他组织提供服务的组织经常被要求进行第三方审计。
服务组织控制审计SOC

####### SOC1声明:评估可能影响财务报告准确性的组织控制措施。

####### SOC2声明:评估组织的控制措施,包括影响存储在系统中的信息的安全性CIA和隐私的。 其审计结果是保密的,根据保密协议对外共享。

####### SOC3声明:评估组织控制措施中会影响存储信息的安全性CIA和隐私。但是SOC3审计结果旨在公开披露。

####### I类报告:提供的审计员的意见仅涉及管理层提供的描述和控制措施的设计适用性。报告仅涵盖特定时间点,而不是一段持续的时间。视为文件审查,以书面形式检查为主

####### II类报告:进一步提供了审计员对控制措施运行有效性的意见。 实际确认了控制措施是否运行正常。涵盖更长时间,至少6个月的运行时间。不仅检查文档,还深入现场并验证控制功能的正常。

审计标准
在进行审计或评估时,审计团队应清除采用什么标准来评估组织。
信息和相关技术控制目标COBIT是一种开展审计和评估的通用框架。由ISACA负责维护。
国际标准化组织ISO还发布了一套与信息安全相关的标准。

####### ISO 27001-描述了建立信息安全管理系统的标准方法

####### ISO 27002-介绍了信息安全控制措施的更多细节。

####### 组织可以选择获得符合ISO 27001标准的官方认证。

开展漏洞评估

漏洞描述
安全社区需要一套通用标准,为漏洞描述和评估提供一种通用语言。NIST提供了安全内容自动化协议SCAP
SCAP组件包包括:
通用漏洞披露CVE:提供一种描述安全漏洞的命名系统
通用漏洞评分系统CVSS:提供一种描述安全漏洞严重性的标准化评分系统
通用配置枚举CCE:提供一种系统配置问题的命名系统
通用平台枚举CPE:提供一种OS、应用程序及设备的命名系统
可扩展配置检查表描述格式XCCDF:提供一种描述安全检查表的语言。
开放漏洞评估语言OVAL:提供一种描述安全测试过程的语言。
漏洞扫描
网络发现扫描
TCP SYN扫描、TCP Connect扫描、TCP ACK扫描、UDP扫描、Xmas扫描
常用工具是nmap
网络漏洞扫描
利用漏扫工具中数千个已知漏洞的数据库及相应测试,来确认每个系统是否受到漏洞数据库中漏洞的影响。经常会误报和漏报。
默认执行未经身份认证的扫描, 实施身份认证的扫描是另一种有效的方法可提高准确性,仅拥有系统只读权限进行读取待测系统的信息。
OWASP官网维护了完整的漏扫工具列表。OpenVAS开源扫描器也用的越来越多,无线网络进行定制化漏洞评估。常见工具是aircrack-ng,通过测试无线网络的加密算法和其他安全参数进行安全评估。
Web应用程序漏洞扫描
攻击者经常尝试使用SQL注入和其他攻击手段针对Web应用程序的安全设计缺陷攻击Web应用程序。
Web漏洞扫描器事专门检测Web应用程序中已知漏洞的工具。比如Nessus
有些情况下,需要满足合规性的要求,例如PCI DSS需要企业至少每年执行一次Web应用程序漏洞扫描,或安装专业的Web应用程序防火墙。
数据库漏洞扫描
安全人员扫描数据库和Web应用程序,以寻找影响数据库安全的漏洞。sqlmap是一种常用的开源数据库漏洞扫描工具,帮助安全专业人员检测Web应用程序的数据库漏洞。
漏洞管理工作流程
组织采用漏洞管理系统,应该形成一套工作流程来管理漏洞。包括检测、验证、修复。
漏洞修复可能包括:采用供应商提供的补丁、修改设备配置、执行规避漏洞的折中方法、安装Web应用程序防火墙、采取阻止漏洞利用的其他控制措施。
工作流程方法的目标是确保组织能有条不絮地检测和修复漏洞。
渗透测试
渗透测试过程通常包含以下几个阶段:规划阶段、信息收集和发现阶段、攻击阶段、报告阶段。经常使用Metasploit工具。
渗透测试可以是公司员工,也可以是公司聘请的外部顾问。通常分以下三种渗透测试
白盒渗透测试
灰盒渗透测试
黑盒渗透测试
渗透测试可能中断系统访问或损坏系统存储的数据,因此在测试规划期间明确指出规则,并从高管层获得充分授权,这点非常重要。
合规性检查
是被监管公司安全测试和评估计划的重要组成部分。
验证合规计划列出的所有控制措施是否正常运行并有效满足监管要求。
精明的组织创建并维护合规计划,记录每项监管义务,并将其映射到满足目标的明确的安全控制措施。定期执行合规性检查,避免不可预见的监管问题。

测试软件

代码审查与测试
是软件测试方案最关键的组成部分。在应用程序上线前,可发现应用程序在安全、性能、可靠性方面的缺陷,以免这些缺陷对业务运营产生负面影响。
代码审查
是软件评估的基础。也称同行评审
最正式的代码审查过程被称为范根检查法Fagan inspection

####### 1.规划

####### 2.总览

####### 3.准备

####### 4.审查

####### 5.返工

####### 6.追踪

大多数组织采用稍微宽松的代码审查流程,即同行评审方法

####### 开发人员在会议上与一个或多个其他团队成员走查代码

####### 高级开发人员执行手动代码审查,在将代码移植到生产环境之前签署所有代码

####### 在将代码移植到生产环境之前使用自动化代码审查工具检测常见的应用缺陷。

静态测试
SAST在不运行软件的情况下,通过分析软件源代码或编译后的应用程序来评估软件的安全性。
往往涉及自动化检测工具,用于检测常见的软件缺陷,如缓冲区溢出。
动态测试
DAST是在软件运行华宁下检测软件的安全性。
常见的是组织部署他人开发的软件,DAST是唯一选择的安全测试,因为测试人员无法接触到软件的底层源代码。
通常使用Web应用程序扫描工具来检查是否存在跨站脚本、SQL注入或其他漏洞。
模糊测试
一种特殊的动态测试技术,向软件提供许多不同类型的输入来测试其边界,以发现之前未检测到的缺陷。
主要是两大类:突变或模糊测试、预生成模糊测试。zzuf工具可通过操纵软件输入实现突变模式测试自动化
接口测试
是复杂软件系统开发的重要组成部分。依据接口设计规范评估模块的性能,确保模块在开发工作完成后可以协同工作。
需要测试的接口类型有三种:
1.应用编程接口API
2.用户界面UI
3.物理接口
误用案例测试
一些应用程序以清晰的示例展示软件用户可能错误使用该应用程序的方式。
测试覆盖率分析
已测用例的数量/全部用例的数量
五种常见标准
分支覆盖率
条件覆盖率
函数覆盖率
循环覆盖率
语句覆盖率
网站监测
被动监测
在流量穿越网络或抵达服务器的过程中,捕获和分析发送到网站的实际网络流量。
真实用户监控RU是被动监测的一种变体。
综合检测(或主动检测)
该方法向网站发起伪造的事务活动,从而评估网站性能。
可以在问题真正发生之前进行检测。

实施安全管理流程

日志审查
安全信息和事件管理SIEM工具包可以用于大量日志审查的常规工作自动化。
SIEM工具包利用利用许多设备、OS和应用程序提供的syslog功能来收集信息。一些设备是可能需要安装第三方客户端来实现对syslog的支持。
利用网络时间协议NTP来确保向SIEM发生日志记录的系统和SIEM的时钟是同步的。
信息安全管理者还应定期进行日志审查,特别是对于敏感功能,以确保特权用户不会滥用其职权。如可使用eDiscovery工具来检索个人用户的文件内容,确保安全团队成员不滥用其功能。
账户管理
确保用户仅保留被授予的权限,且未发生未授权的修改。
一般只适用于特权账户,审查由信息安全管理人员或内部审计员执行,具体流程可能因组织而异。
灾难恢复和业务连续性
管理人员应定期检查备份结果,确保流程可有效地运行并满足组织的数据保护需求。可能设计审查日志、审查哈希值或请求系统或文件的实际恢复。
对灾备恢复和业务连续性控制措施的定期测试可以为组织提供有效保护,使其免受业务运营中断的影响。
培训和意识
从职前培训开始,努力使员工了解当前的威胁,向员工提供最佳实践,从而保护信息和系统并抵御攻击。
全年定期开展培训和意识提升工作,提醒员工明确其责任,并让员工了解组织运营环境和威胁形势的变化。
许多组织模拟网络钓鱼来评估安全意识方案的有效性。员工点击链接或以其他方式响应模拟攻击后,将被重定向到培训资源。
关键绩效和风险指标
包括遗留漏洞的数量、修复漏洞耗时、漏洞/缺陷重现、被盗用账户的数量、代码移植到生产前扫描检测软件缺陷数量、重复审计的结果、尝试访问已知恶意站点的用户。
组织识别出期望跟踪的关键安全指标后,管理人员可能希望开发一个指示板,清晰展示这些指标的值随着时间的变化,而且管理人员和安全团队可以定期查看 。

软件开发安全

系统开发控制概述

软件开发
软件开发阶段给系统构建安全性往往比向现有系统添加安全性要容易得多。
避免和抑制系统故障
包括输入验证、限制检测和创建失效关闭或失效打开过程
系统开发生命周期
管理员利用项目管理使项目的开发遵循目标,并逐步实现整个产品的目的。在产品开发的每个阶段都嵌入安全性。
生命周期模型
实施软件开发生命周期SDLC模型的初始步骤之一包括获得管理层的批准。
选择SDLC模型通常是软件开发团队及其领导的工作。
瀑布模型:只允许开发人员在软件开发过程中后退一个阶段。
螺旋模型–侧重于迭代和强化质量控制、敏捷软件开发-强调客户需求和快速开发新功能、能力成熟度模型CMMI、IDEAL模型
甘特图与PERT
甘特图是一种显示项目和调度之间随时间变化的相互关系的条形图,提供了帮助计划、协调和跟踪项目找那个特定任务调度的图表说明。在协调需要使用相同团队成员或其他资源的任务时,比较有用。
计划评审技术PERT是一种项目调度工具。用于在开发中判断软件产品的规模并为风险评估计算标准偏差。
PERT图表清楚显示了不同项目任务之间的依赖关系。
变更和配置管理
必须有组织的方式管理所有变更。包括集中记录、以支持将来的审计、调查、故障排除和分析需求。
将变更管理作为安全工具。
变更管理流程有3个基本组件:请求控制、变更控制、发布控制
软件配置管理SCM
配置标识、配置控制、配置状态统计、配置审计
DevOps方法
将软件开发、质量保证和IT运营三种职能集中在一个运营模型中来满足业务需求。
DevOps模型与敏捷开发结合,大幅缩短开发、测试和部署软件的时间,甚至帮助组织实现持续集成/持续交付CI/CD的目标,每天部署几十甚至多达几百次。
需高度自动化,包括集成代码库、软件配置管理过程以及代码在开发、测试和生产环境之间的移动。要求同时集成安全控制。
应用编程接口
开发人员必须考虑API的身份认证。
知道何时需要身份认证,并确保验证每个API调用的凭证和授权。
通过为授权的API用户提供一个复杂API密钥来完成。
CURL开源工具通常用于API测试,也用于攻击者潜在的API攻击。
软件测试
进行测试的最佳时间是在设计模块时。
进行测试的合理性检查。确保软件可处理正常和有效的输入数据、不正确的类型、越界值以及其他边界和或条件。
使用职责分离,指定开发人员以外的人员进行软件测试。把测试计划和结果保存为系统永久性文档的一部分。
代码仓库
充当开发人员存放源代码的中心存储点。如GitHub、Bitbucket和SourceForge还提供版本控制、错误跟踪、Web托管、发布管理和可支持软件开发的通信功能。
通常与流程的代码管理工具集成,例如git工具,与GitHub和其他仓库紧密集成。
其安全风险是必须适当控制对仓库的访问。不把敏感信息放入公共代码仓库中,尤其是API密钥之类的信息。类似的避免将密码、内部服务器名称、数据库名称和其他敏感信息放到代码仓库中
服务水平协议
为保障组织的持续生存能力,应在所有的数字电路、应用程序、信息处理系统、数据库或其他关键组件中落实SLA。
SLA中通常还包括财务和其他的合约性补偿措施。
SLA涉及的问题有系统正常运行时间、最大连续停机时间、高峰符合、平均负荷、责任诊断、容灾切换时间-若冗余到位。
第三方软件采购
无论是企业购买商用现货COTS还是基于社区的开源软件OSS,无论在本地还是云中运行,都应该关注安全。安全人员必须正确配置软件以满足安全目标,关注安全动态。
在SAAS环境中,大多数安全责任由供应商承担,但组织的安全人员也不能逃避责任。负责监控供应商的安全,包括审计、评估、漏洞扫描和旨在验证供应商是否维护适当的控制措施。

创建数据库和数据仓储

数据库管理系统的体系结构
层次数据库和分布式数据库
关系数据库
数据库事务
关系数据库支持事务的显式和隐式使用,从而确保数据的完整性。
关系数据库事务都具有ACID特征,即原子性、一致性、隔离性和持久性。
多级数据库的安全性
部署可信的前端来为旧式的或不安全的DBMS添加多级安全性。使用视图限制访问
并发性或编辑控制是一种预防性安全机制。
至少保护DBMS的完整性和可用性。
未正确实现并发性的DBMS可能发生丢失更新、脏读取
检查已记录的数据时,并发性就成为一种检测性控制。
将深度防御、因需可知和最小特权原则结合起来,有助于防止访问聚合攻击。
可使用数据库分区技术来防止聚合和推理漏洞。
t通过向DBMS中插入错误的或误导性的数据,从而重定向或阻止信息保密性攻击。被称为噪声和扰动,需确保插入数据库中的噪声不会影响业务运营。
开放数据库互联
ODBC是一种数据库特性。在不必分别针对交互的每种数据库类型直接进行编程的情况,允许应用程序与不同类型的数据库通信。
扮演了应用程序和后端数据库驱动程序之间代理的角色,使开发人员能更加自由地创建解决方案,而不必考虑后端具体的数据库系统。
NoSQL
键值存储、图数据库(可用于表示任何类型的网络,如社交网络、地理位置和其他可用图形表示的数据集)、文档存储(类似于键值存储,文档类型包括xml、json)

存储器威胁

存储资源的非法访问
恰当的文件系统访问控制
防止绕过OS控制直接访问存储介质–使用加密文件系统,只有主OS才可访问
确保对共享内存和存储器资源设置适当的控制,使不可越级读
隐蔽通道攻击
隐蔽通道准许通过直接或间接地操纵共享存储介质,在两个分类级别之间传输敏感数据。

理解基于知识的系统

专家系统
试图把人类在某个特殊学科累积的知识具体化,并以一致的方式将它们应用于未来的决策。
两个主要组件
知识库

####### 包含专家系统已知的规则

推理引擎

####### 使用逻辑推理和模糊逻辑技术,基于过去的经验做出结论。

并非万无一失,决策优劣完全取决于知识库中的数据和推理引擎采用的决策制定算法。
主要优点是:决策不受情绪影响。 在一些贷款机构、紧急事件,股票交易和其他因情绪因素而难以合理决策的情况,可以起到重要作用。
机器学习
ML使用分析能力从数据集中发现知识,而不直接应用人类洞察力。
核心方法是允许计算机从数据中分析和学习,从而开发和更新活动模型。
分为两大类
监督学习技术使用标记数据进行训练
无监督学习技术使用未标记的数据进行训练
神经网络
计算单元链用于尝试模仿人脑的生物学推理过程。
神经网络是ML技术的延伸,通常也被称为深度学习或认知系统。
迄今为止设计出来的神经系统还尚未达到实际的人类推理能力。
神经网络的优点包括线性、输入-输出映射和自适应性。在语音识别、脸部识别、天气预报以及关于意识与思考模型的研究方面,优点十分明显。

恶意代码和应用攻击

恶意软件

恶意代码的来源
有经验的软件开发人员
脚本小子下载利用现成的软件并传播
APT的兴起
病毒
病毒传播技术
主引导记录病毒
文件感染病毒
宏病毒
服务注入病毒
病毒技术
复合病毒
隐形病毒
多态病毒
加密病毒
病毒恶作剧
最新病毒威胁警告
传闻的“病毒”总是那些尚未发作但极具破坏性的病毒,没有任何反病毒软件能够检测和或删除它
通过社交媒体形势的变化加剧恶作剧的流传
逻辑炸弹
感染系统并且在满足一个或多个条件前保持休眠状态的恶意代码对象
许多病毒和特洛伊木马都包含逻辑炸弹组件。或被集成到现有的系统中,而不是独立的代码对象。
特洛伊木马
也是一种软件程序,表面友好,实际包含了恶意有效载荷,可能对系统或网络造成破坏。
有些木马破坏系统存储的数据,有的可能是无害的。或者是作为远程访问木马
流氓杀毒软件也是一种木马,欺骗用户安装,窃取个人用户信息或提示用户付款以“更新”流氓杀毒软件。
或感染系统的计算能力,被控制用于挖掘比特币或其他加密货币
蠕虫
Code Red蠕虫
2001年夏,主要破坏和感染IIS Web服务器,其补丁在蠕虫攻击前1个月已经发布,但是管理员好些未及时打补丁。
震网病毒
2010年夏,利用多个以前未披露的漏洞
不会破坏系统,实际上在寻找由西门子公司制造的控制器系统,旨在针对伊朗境内的核设施系统。–纽约时报
间谍软件与广告软件
间谍软件监控用户行为,向远程系统传送重要细节。
广告软件使用多种技术在被感染的计算机上显示广告
都属于潜在有害程序PUP,用户可能会同意将此类软件安装在其系统上。其背地里执行用户不希望或未授权的功能。
勒索软件
是一种利用加密技术的恶意软件。
至少在2012年开始出现,但近年来使用和影响有所加快。
支付赎金的行为可能是违法的。
恶意脚本
恶意攻击者也同样可以利用脚本技术来提高效率,特别是APT组织经常利用脚本自动化其恶意活动的常规部分。
无文件恶意软件,或不落地恶意攻击,将恶意脚本代码从远程下载到内存中执行,未写入磁盘,可以躲避磁盘活动检测的反恶意软件控件。
零日攻击
从发现新型恶意代码,到安全社区发布补丁和反病毒库更新,期间存在延迟,称为脆弱性窗口。
系统管理员应用更新的速度缓慢
有必要采取深度防御的方法,包括补丁管理、更新反病毒软件、配置管理、app控制、内容过滤和其他保护措施,很可能至少一个措施能检测和阻止安装恶意软件的尝试。

恶意软件预防

易受恶意软件攻击的平台
大约83%的恶意软件是针对Windows平台的。
更多的移动设备和其他平台称为恶意软件的目标
Mac系统上的恶意软件数量最近增加了三倍,针对Android设备的恶意软件变体数量在同年翻了一番。
反恶意软件
反恶意软件现在是每个网络安全计划的基石。
绝大多数使用基于特征的检测方法识别潜在的病毒
还有一些使用启发式机制来检测潜在的恶意软件感染。
现代防病毒软件产品能够检测和删除各类恶意代码,然后清理系统。如果怀疑新的恶意代码正在横扫互联网,最好是联系你的防病毒软件供应商,询问如何防范新出现的威胁。
利用集中式监控和控制功能,执行监控警报和管理解决方案。
完整性监控
文件完整性监控工具,也提供辅助性的防病毒功能。
旨在提醒管理员文件遭到未授权修改,通常用于检查网页篡改和类似攻击。
通过维护存储在系统上的所有文件的哈希值,与当前的计算值进行比较,以检测两个时间段之间被修改的文件。
除非行为是可以解释的。
高级威胁保护
端点检测和响应EDR包超越了传统的反恶意软件防护方案,帮助端点抵御攻击。
用户和实体行为分析UEBA软件特别关注端点和其他设备上基于用户的活动。分析重点是用户。
下一代端点保护工具通常包含多种不同的功能。可提供传统反恶意软件保护、文件完整性监控、端点检测和响应,以及用户和实体行为分析的模块。

应用程序攻击

缓冲区溢出
当开发人员没有正确验证用户的输入以确保用户输入适当大小的内容时,就会存在缓冲区溢出漏洞。
输入太多而“溢出”原有的缓冲区,就会覆盖内存中相邻的其他数据。
最糟的情况下该数据可覆盖系统指令,使攻击者能利用缓冲区溢出漏洞在服务器上执行目标指令
软件和OS供应商提供 的补丁抑制了大多数缓冲区溢出漏洞,因此有必要使系统和软件保持最新
检查时间到使用时间
通常被称为竞态条件,因为攻击者赶在合法过程使用客体之前替换它。
TOCTOU攻击的典型案例是在验证数据文件的身份后,在读取数据前替换数据文件。
通信中断也提供了攻击者可能试图利用的小窗口。
TOCTOU攻击、竞态条件攻击和通信中断被称为状态攻击,因为攻击的是特定时间、数据流控制以及系统状态之间的转换。
后门
是没有记录到文档中的指令序列,允许软件开发人员绕过正常的访问限制。
开发和测试过程中, 常用于加快工作流程,绕过身份认证。
特权提升和rootkit
攻击者一旦在系统上站稳脚跟,通常会迅速将访问权限提升为管理员账号。
特权提升攻击的常见方法之一是使用rootkit,也可以使用无文件恶意软件、恶意脚本或其他攻击向量进行。
系统管理员采取简单预防措施来抵御特权提升攻击,比如关注OS最新补丁,持续应用补救措施

注入漏洞

SQL注入攻击
基于内容的盲注
攻击者在尝试执行攻击前会向Web应用程序发送输入,以测试该app是否会解释注入的代码。
尽管攻击者可能无法看到结果,但并不意味着攻击失败。
基于计时的盲注
可使用处理查询所需的时间作为从数据库检索信息的通道。
攻击者可以使用基于计时的攻击通过逐渐字符查看字段值数据
SQLmap和Metasploit工具会自动执行基于计时盲注的攻击
代码注入攻击
SQL注入攻击是代码注入攻击一般类别中的具体示例
攻击者试图将编写的代码插入Web APP开发人员创建的合法代码中。
输入验证和转义、以及防御性编码对于消除SQL注入、XML注入、和LDAP注入攻击至关重要
DLL注入攻击中,攻击者试图加载有恶意代码的DDL。
跨站脚本也是代码注入的示例,将编写的脚本代码插入开发人员创建的网页中。
命令注入攻击
某些情况下,APP代码可能返回到OS以执行命令。攻击者可能会利用APP中的漏洞进行攻击,从而获取直接操纵OS的能力。
例如程序调用mkdir创建目录,传值时附加删除目录命令可能删除系统其他文件。

利用授权漏洞

不安全的直接对象引用
如果APP不执行授权验证,用户可能查看超出其权限的信息。
某些情况下,Web开发人员设计的APP根据用户在查询字符串或POST请求中提供的参数直接从数据库检索信息。
目录遍历
某些Web服务器存在安全配置错误,允许用户浏览目录结构并访问本地保密的文件。
当允许使用导航目录路径的操作符,并且未正确限制访问时,目录遍历攻击会起作用。
文件包含
文件包含攻击是目录遍历攻击的提升,其不是简单的从OS检索文件并展示给攻击者。而是实际执行文件中包含的代码,从而使攻击者能欺骗Web服务器执行其目标代码。
有两种变体
1.本地文件包含攻击–试图执行存储在Web服务器上其他位置的文件中的代码。类似于目录遍历攻击。
2.远程文件包含攻击–允许攻击者进一步执行存储在远程服务器上的代码。攻击者可控制执行的代码,而不必存储在本地服务器上。
通常会利用该漏洞上传Web shell到服务器,攻击者利用Web shell在服务器上执行命令,并在浏览器总查看结果。攻击者一般通过http、https访问隐蔽通信流。
攻击者可能会修复之前为了获得服务器权限而用过的漏洞,防止其他攻击者发现。或得到攻击成功消息的安全团队发现该漏洞。

利用Web应用程序漏洞

跨站脚本
当Web APP允许攻击者执行HTML注入,将他们自己的HTML代码插入网页时,就会发生跨站脚本XSS攻击
反射XSS通常发生在APP允许反射输入时。
关键在于能将表单输入嵌入一个链接中
防御方法是必须执行输入验证,不允许用户在可反射输入字段中输入
输出编码技术,允许用户提供的输入,并使用一系列规则对其进行编码,将潜在的危险内容转换为安全性。包括HTML实体编码、HTML属性编码、URL编码、JavaScript编码和CSS十六进制编码
存储/持续XSS
在远程Web服务器上以一种名为存储XSS的方法存储跨站脚本代码。
被描述为持久性攻击,因为即使攻击者没有主动发起攻击,它们也会留在服务器上。
例如,允许用户发布包含HTML代码消息的留言板。当后来的用户加载留言消息时,会可以将用户重定向到钓鱼网站,请求敏感信息或执行其他攻击。
有些XSS攻击非常隐蔽,通过修改用户浏览器中的文档对象模型DOM环境来工作。这类攻击不出现在网页的HTML代码中,但仍相当危险。
请求伪造
跨站请求伪造CSRF/XSRF
假设用户常同时登录两个不同的网站,攻击者在第一个网站上嵌入代码,然后发送命令到第二个网站。当用户点击第一个站点上的链接时,正不知觉地向第二个站点发送命令,如果恰好同时登录了两个站点,则可能执行成功。
开发人员协助抵御XSRF攻击的方法

####### 创建Web应用程序时,在链接中嵌入攻击者不知道的安全令牌。

####### 让网站检查从最终用户接收到的请求中的引用URL,并且只接受源于他们自己站点的请求。

服务器端请求伪造SSRF
利用了类似的漏洞,诱骗服务器根据用户的输入访问URL,当Web应用程序接受用户的URL作为输入,从该URL检索信息时,就可能发生SSRF攻击。
如果服务器可以访问非公开的URL,SSRF攻击可能会无意中将该信息泄露给攻击者。
会话劫持
当恶意的个人拦截授权用户和资源之间的部分通信,然后使用劫持技术接管会话并能假冒授权用户的身份时,即发生了会话劫持攻击。
常用的技术
捕获客户端和服务器之间身份认证的详细信息,并用其假冒客户端的身份。
诱使客户端认为攻击者的系统是服务器,在客户端连接服务器的合法连接时充当中介,然后断开客户端的连接。
使用未正确关闭连接的用户的cookie数据访问Web应用程序,或使用设计糟糕的未正确管理身份认证cookie的应用程序的cookie数据访问Web应用程序。
通过管理控制如反重放身份认证技术和应用程序控制如合理的时间内使cookie过期

应用程序安全控制

输入验证
网安专业人员和应用程序开发人员可以使用多种工具来防范应用程序漏洞。其中最重要的就是输入验证。
最有效的输入验证形式是使用输入白名单,也称为允许列表
务必确认输入验证发生在服务器端,而不是客户端浏览器,因为能轻易地绕过基于浏览器的输入验证
Web应用程序防火墙WAF
WAF的功能类似于网络防火墙,但它们工作在OSI模型的应用层。位于Web服务器前面,接收所有到服务器的网络流量。
数据库安全
参数化查询和存储过程
参数化查询提供了另一种帮助抵御注入攻击的技术。即允许将用户输入作为精心定义的变量传递给开发定义的SQL语句,不允许变量中插入代码。Java使用PreparedStatement()函数,PHP中使用bindParam()函数
与存储过程类似,客户端不直接向数据库服务器发送SQL代码,而是向数据库服务器发送参数,服务器将参数插入预编译的查询模板中。
混淆和伪装
数据最小化是最好的防御措施。不收集不需要的敏感信息。
数据标记化,用查找表将可能直接显示个人身份的个人标识符替换为唯一标识符。
哈希技术,使用加密哈希函数将敏感标识符替换为不可逆的替代标识符。进行哈希运算前,使用随机数进行加盐,可使哈希值抵抗彩虹表攻击。
代码安全
代码签名
为开发人员提供了一种向最终用户确认其代码真实性的方法。
开发人员通过加密函数用自己的私钥进行数字签名,之后下载代码的用户将受到一份附带的证书副本,系统将提取公钥并进行签名验证。确保代码合法且未被非授权的人修改。
需注意的是

####### 尽管代码签名可保证代码来自真实的源且未被修改,但不能保证代码中不包含恶意内容。

####### 如果开发人员对恶意代码进行数字签名,该有意或无意的恶意代码将通过签名验证过程。

代码重用
第三方软件库是开发人员共享代码的一种常见方式。
当组织将代码开发工作外包给其他组织时,第三方代码将被引入他们的环境。安全团队应确保外包代码接受与内部开发代码相同级别的测试。
共享代码中常常出现安全缺陷,因此务必了解这些依赖关系并保持对安全更新的警惕。
软件多样性
注意组织中依赖单个源代码、二进制可执行文件或编译器的位置。虽然不可能消除所有依赖项的单点故障影响可用性,但跟踪并维护安全代码库是关键任务之一。
代码仓库
代码仓库是用于存储和管理应用程序源代码的集中位置。
主要目的是将源文件存储在一个集中的位置,以便安全存储和协调多个开发人员做出的更改。
还可执行版本控制,满足安全和审计人员的自动审计和变更日志记录。促进代码的重用。避免死代码问题,避免出现无人负责维护的代码。
完整性度量
确保通过组织批准的发布管理流程,以安全的方式提供和撤销应用程序。这个过程称为完整性度量。
通过使用加密哈希函数来验证发布到生产环境中的代码是否与先前批准的代码相匹配。任何偏差都应在在发布之前进一步调查。
应用程序韧性
可扩展性,表示应用程序设计成可以垂直扩展和水平扩展。
弹性,表示应用程序在必要时可以自行扩展或撤销资源以降低容量和成本。具有根据需要上下伸缩的能力

安全编码实践

源代码注释
注释是优秀开发人员工作流程的重要组成部分。
注释也可能向攻击者提供解释代码工作原理的路线图。某些情况下,注释甚至可能包括应该保密的关键安全细节。
已经编辑的可执行文件是不含注释的,因为编译器会自动从可执行文件中删除注释。
公开代码的Web应用程序在部署前从生产版本的代码中删除注释。将注释保留在已存档源代码供未来开发人员参考。
错误处理
攻击者利用代码中的错误进行攻击。
过于详细的错误处理例程也可能存在风险。若错误处理例程对代码的内部工作原理解释得太多,则可能会让攻击者找到利用代码的方法。
好的原则是错误信息仅向用户显示理解问题性质所需的最少信息量,以便开发人员在其控制范围内进行纠正。
硬编码凭证
某些情况下,开发人员可能会使源代码中包含用户名和密码。
存在两种变体
开发人员可以为应用程序创建一个硬编码的维护账户,该账户允许开发人员在身份认证系统失效时重新获得访问权限。被称为后门漏洞。
硬编码凭证的第二种变体发生在开发人员使其源代码包含其他服务的访问凭证时。如果代码有意或无意泄露,凭证将为外部人员所知。
第一种情况,允许任何知道后门密码的人绕过正常身份认证并访问系统。如果后门被公众或私人所知,生产环境的代码副本将会泄露。
第二种情况当开发人员意外地将包含API密钥或其他硬编码凭证的代码发布到公共代码仓库时(如Github)
内存管理
资源耗尽
应用程序通常负责管理自己使用的内存,若发生内存泄露,应用程序没有返回不再需要的内存,可能因为它无法跟踪已写入内存保留区域的对象。长时间这样将造成系统崩溃。
系统上的内存、存储、处理时间或其他可用资源都可能被耗尽。
重启系统通常会重置问题,释放内存以用于其他用途,但问题如果没有得到纠正,仍会重新开始这个循环。
指针解引用
指针是存储内存中另一个位置地址的内存区域。应用程序跟随指针并访问指针地址引用的内存。
可能的一个问题是当指针为空时,其中包含程序员所称的NULL值。如果应用程序尝试取消引用此NULL指针,则会导致称为空指针异常的情况。
最好的情况是NULL指针异常会导致app崩溃,使攻击者能访问调试信息,用于侦查app的安全性。
最坏的情况是NULL指针异常可能允许攻击者绕过安全控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值