网络安全在不同的应用环境下有不同的解释。针对网络中的一个运行系统而言,网络安全就是指信息处理和传输的安全。它包括硬件系统的安全、可靠运行,操作系统和应用软件的安全,数据库系统的安全,电磁信息泄露的防护等。狭义的网络安全,侧重于网络传输的安全。
由于网络是信息传递的载体,因此信息安全与网络安全具有内在的联系,凡是网上的信息必然与网络安全息息相关。信息安全的含义不仅包括网上信息的安全,而且包括网下信息的安全。现在谈论的网络安全,主要是是指面向网络的信息安全,或者是网上信息的安全。
Web安全风险说明
- SQL注入
- XSS脚本
- 命令执行
- 权限绕过
- 任意文件操作
- 文件包含
- 敏感信息泄露
- 文件上传
- 存在后门
- 页面篡改
- 访问控制不当
- 默认配置不当
- 权限提升
- 拒绝服务
SQL注入
描述
SQL注入就是把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全风险的网站上的数据库,而不是按照设计者意图去执行SQL语句。
危害
- 数据库信息泄露,被拖库
- 数据库被修改、删除
- 网站页面被篡改、挂马
修复建议
建议过滤出所有以下字符
- |(竖线符号)
- & (逻辑 and 符号)
- ;(分号)
- $(美元符号)
- %(百分比符号)
- @(at 符号)
- ‘(单引号)
- “(引号)
- '(反斜杠转义单引号)
- "(反斜杠转义引号)
- <>(尖括号)
- ()(括号)
- +(加号)
- CR(回车符,ASCII 0x0d)
- LF(换行,ASCII 0x0a)
- ,(逗号)
- \(反斜杠)
以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符:
SQL 注入和 SQL 盲注:
A. 确保用户输入的值和类型(如 Integer、Date 等)有效,且符合应用程序预期。
B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利用 ADO 命令对象来实施它们,以强化变量类型。
C. 清理输入以排除上下文更改符号,例如:
- ‘(单引号)
- “(引号)
- '(反斜线转义单引号)
- "(反斜杠转义引号)
- )(结束括号)
- ;(分号)
跨站点脚本编制:
A. 清理用户输入,并过滤出 JavaScript 代码。
我们建议您过滤下列字符:
- <>(尖括号)
- “(引号)
- ‘(单引号)
- %(百分比符号)
- ;(分号)
- ()(括号)
- &(逻辑 and 符号)
- +(加号)
B. 如果要修订 <%0script> 变体,请参阅 MS 文章 821349
C. 对于 UTF-7 攻击:[-] 可能的话,建议您施行特定字符集编码(使用 Content-Type 头或 标记)。
HTTP 响应分割:
清理用户输入(至少是稍后嵌入在 HTTP 响应中的输入)。
请确保输入未包含恶意的字符,例如:
- CR(回车符,ASCII 0x0d)
- LF(换行,ASCII 0x0a)
远程命令执行:
清理输入以排除对执行操作系统命令有意义的符号,例如:
- |(竖线符号)
- &(逻辑 and 符号)
- ;(分号)
执行 shell 命令:
A. 绝不将未检查的用户输入传递给 eval()、open()、sysopen()、system() 之类的 Perl 命令。
B. 确保输入未包含恶意的字符,例如:
- $(美元符号)
- %(百分比符号)
- @(at 符号)
XPath 注入:
清理输入以排除上下文更改符号,例如:
- ‘(单引号)
- “(引号) 等
LDAP 注入:
A. 使用正面验证。字母数字过滤(A..Z,a..z,0..9)适合大部分 LDAP 查询。
B. 应该过滤出或进行转义的特殊 LDAP 字符:
- 在字符串开头的空格或“#”字符
- 在字符串结尾的空格字符
- ,(逗号)
- +(加号)
- (引号)
- (反斜杠)
- <>(尖括号)
- ;(分号)
- ()(括号)
MX 注入:
应该过滤出特殊 MX 字符:
- CR(回车符,ASCII 0x0d)
- LF(换行,ASCII 0x0a)记录伪造:
应该过滤出特殊记录字符:
- CR(回车符,ASCII 0x0d)
- LF(换行,ASCII 0x0a)
- BS(退格,ASCII 0x08)
ORM 注入:
A. 确保用户输入的值和类型(如 Integer、Date 等)有效,且符合应用程序预期。
B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。
C.使用参数化查询 API D. 清理输入以排除上下文更改符号,例如: (*):
- ‘(单引号)
- “(引号)
- '(反斜线转义单引号)
- "(反斜杠转义引号)
- )(结束括号)
- ;(分号)
如下一些方法能够防止注入攻击:
- 在网页代码中需要对用户输入的数据进行严格过滤。
- 部署Web应用防火墙
- 对数据库操作进行监控
建议过滤用户输入的数据,切记用户的所有输入都要认为是不安全的。
- phpinfo()信息泄漏
http://[ip]/test.php
http://[ip]/phpinfo.php- 测试页面泄漏在外网
test.cgi、phpinfo.php、info.php等- 编辑器备份文件泄漏在外网
http://[ip]/.test.php.swp
http://[ip]/test.php.bak
http://[ip]/test.jsp.old
http://[ip]/cgi~
常见编辑器备份后缀- 版本管理工具(如git)文件信息泄漏
http://[ip]/.git/config
http://[ip]/CVS/Entriesp
http://[ip]/.svn/entriesp- HTTP认证泄漏风险
http://[ip]/basic/index.php
Web目录开启了HTTP Basic认证,但未限制IP,导致可暴力破解账号、密码- 管理后台地址泄漏
http://[ip]/login.php
http://[ip]/admin.php
http://[ip]/manager.php
http://[ip]/admin_login.php- 泄漏员工邮箱、分机号码
泄漏邮箱及分机号码可被社工,也可生成字典- 错误页面暴漏信息
面熟sql错误、php错误、暴漏cms版本等- 探针文件
- robots.txt
- phpMyAdmin
- 网站源码备份文件(
www.rar/sitename.tar.gz/web/zip
等)- 其他。
- 对敏感文件删除
- 隐藏错误信息、返回信息等
XSS脚本
描述
跨站脚本攻击就是指恶意攻击者向网页中插入一段恶意代码,当用户浏览该网页时,嵌入到网页中的恶意代码就会被执行。
危害
1.恶意用户可以使用该安全风险来盗取用户账户信息、模拟其他用户身份登录,更甚至可以修改网页呈现给其他用户的内容;
2.恶意用户可以使用JavaScript、VBScript、ActiveX、HTML语言甚至Flash应用的安全风险来进行攻击,从而来达到获取其他的用户信息目的。
修复建议
对输入参数进行转义过滤
命令执行
描述
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。
危害
攻击者利用该安全风险可导致:
- 网站被拖库;
- 网站被shell;
- 核心数据被窃取;
- 数据库所在服务器被攻击变成傀儡主机。
修复建议
- 尽量少用执行命令的函数或者直接禁用;
- 参数值尽量使用引号包括;
- 在使用动态函数之前,确保使用的函数是指定的函数之一;
- 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义。
权限绕过
描述
权限绕过安全风险是一种很常见的逻辑安全风险。可以理解为: 服务器端对客户提出的数据操作请求认证不严格,忽略了对该用户操作权限的判定,导致攻击账号拥有了其他账户的权限,甚至拥有后台管理员功能。
危害
- 威胁在于一个账户即可控制全站用户数据;
- 一个普通用户,具有管理权限。
修复建议
- 完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作;
- 鉴权,服务端对请求的数据和当前用户身份做校验;
- 对用户的操作请求验证流程严格校验。
任意文件操作
描述
攻击者可以通过访问下载删除服务器上的任意文件,导致服务器中敏感信息泄漏。
危害
- 导致网站敏感信息泄露,被攻击者进一步利用等危害;
- 读取网站的敏感文件信息;
- 删除修改服务器敏感数据。
修复建议
- 对带有../的参数进行过滤;
- 限定可下载的文件的目录;
- 对web服务使用低权限用户运行。
文件包含
描述
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为包含。所以通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含安全风险。
危害
- 网站被拖库;
- 网站被shell;
- 核心数据被窃取;
- 数据库所在服务器被攻击变成傀儡主机。
修复建议
- 严格判断包含的参数是否外部可控,因为文件包含安全风险利用成功与否的关键点就在于被包含的文件是否可被外部控制;
- 路径限制: 限制被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符
- 包含文件验证: 验证被包含的文件是否是白名单中的一员;
- 尽量不要使用动态包含,可以在需要包含的页面固定写好。
敏感信息泄露
描述
敏感信息指不为公众所知悉,具有实际和潜在利用价值,丢失、不当使用或未经授权访问对社会、企业或个人造成危害的信息。
危害
- 敏感信息泄露,被攻击者进一步利用等危害
- 数据库信息泄露,直接导致核心数据被窃取
修复建议
- phpinfo()信息泄漏
http://[ip]/test.php
http://[ip]/phpinfo.php- 测试页面泄漏在外网
test.cgi、phpinfo.php、info.php等- 编辑器备份文件泄漏在外网
http://[ip]/.test.php.swp
http://[ip]/test.php.bak
http://[ip]/test.jsp.old
http://[ip]/cgi~
常见编辑器备份后缀- 版本管理工具(如git)文件信息泄漏
http://[ip]/.git/config
http://[ip]/CVS/Entriesp
http://[ip]/.svn/entriesp- HTTP认证泄漏安全风险
http://[ip]/basic/index.php
Web目录开启了HTTP Basic认证,但未限制IP,导致可暴力破解账号、密码- 管理后台地址泄漏
http://[ip]/login.php
http://[ip]/admin.php
http://[ip]/manager.php
http://[ip]/admin_login.php- 泄漏员工邮箱、分机号码
泄漏邮箱及分机号码可被社工,也可生成字典- 错误页面暴漏信息
面熟sql错误、php错误、暴漏cms版本等- 探针文件
- robots.txt
- phpMyAdmin
- 网站源码备份文件(
www.rar/sitename.tar.gz/web/zip
等)- 其他。
- 对敏感文件删除
- 隐藏错误信息、返回信息等
文件上传
描述
文件上传安全风险是指攻击者上传了一个可执行的文件到服务器,这里上传的文件通常是指可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式的最为直接和有效的,“文件上传”功能本身是没有问题,有问题的是文件上传后,服务器怎么处理、解释文件,如果服务器做的处理逻辑不够安全,则会导致攻击者直接通过上传的文件控制服务器。
危害
- 服务器被Shell,攻击者控制服务器。
- 服务器数据被获取、篡改,网站被拖库。
修复建议
- 文件上传的目录设置为不可执行
- 判断文件类型,在判断文件类型中,建议使用白名单的方式,黑名单的方式已经被无数次证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者是resize函数,在处理图片的同时破坏图片种可能包含的HTML代码
- 使用随机数改写文件名和文件路径
- 强制修改上传到服务器的文件的格式
存在后门
描述
在软件或程序开发阶段,程序员或多或少在软件或程序内创建后门以便可以方便的修改程序设计中的缺陷,但在软件或程序正式发布之时,没有删除创建的后门程序,那么这就形成了安全风险,容易被黑客当成安全风险进行攻击。也有部分软件或程序存在后门是因为软件厂商受到黑客攻击,黑客再未完成或已发布的正常程序中加入或推送后门程序。
危害
- 服务器被Shell,攻击者控制服务器
- 服务器数据被获取、篡改,网站被拖库
修复建议
清除存在的后门程序,安装杀毒软件对服务器进行杀毒。
页面篡改
描述
页面篡改通常是指正常的Web页面被篡改,不易被发现的篡改是页面存在了暗链,容易被发现的是网站页面大幅度被修改或直接跳转到其它网站。
危害
- 网站被黑帽SEO
- 正常用户可能会因网站页面被篡改而出现的假消息或新闻干扰,造成经
- 搜索引擎发现网站存在页面篡改情况,会标记网站域名为“危险网站”,对网站的发展不利
修复建议
- 清理Web页面中存在篡改的代码
- 清理服务器上可能存在的后门程序
- 清理用途或来源不明的js文件,js文件在网页篡改中担任及其重要的角色
访问控制不当
描述
访问控制几乎是所有系统都需要用到的一种技术,是按用户身份及其所归属的某项定义组来限制用户对某些信息项的访问,或限制对某些控制功能的使用的一种技术。当访问控制策略设置不当时,会发生安全风险。
危害
攻击者未被授权的情况下,访问未被允许访问的页面,如网站后台管理页面、数据库配置文件等。
修复建议
在需要做严格访问控制的页面对访问者的权限做审核,若不通过则禁止其访问该页面。
默认配置不当
描述
默认配置不当可细分为很多种类,如软件版本过低(开源CMS,PHPMYADMIN,ZABBIX等等)、弱口令、Nginx+Apache+IIS配置不当、OpenSSL心脏滴血、备份文件下载、目录遍历、编辑器生成的临时文件或备份文件(.bak,.vim,~)、SVN泄露、DNS域传送安全风险等等,诸多程序或软件配置不当,可造成或大或小的安全风险。
危害
- 服务器被Shell
- 网站被篡改
- 网站数据泄露
- 网站被黑帽SEO
修复建议
- 及时升级或对程序安装补丁(如开源CMS或服务器中间件等等)
- 对操作系统进行打补丁操作
- 对已知的默认配置不当安全风险但却无法修复的安全风险,做好访问控制;
- 删除或转移不必要的文件(如SVN文件,备份文件)
权限提升
描述
权限提升安全风险就是通常说的提权,攻击者通过其它安全风险获取了网站Shell,但Shell可能是权限非常小的Network之类的权限,攻击者想进一步完全控制服务器,拿到root或system权限,这个时候就需要利用权限提升安全风险。通常提权使用的是Windows或*nix的权限提升安全风险,也有些使用第三方软件存在的权限提升安全风险(如MySQL、SQL、Server、第三方FTP软件等等)。
危害
- 攻击者控制服务器,执行任意操作
- 服务器数据被泄露、篡改
- 网站被拖库
修复建议
- 及时安装操作系统补丁
- 对第三方软件进行降权处理,如Windows上的MySQL数据库,默认root是以SYSTEM权限启动的,让其以普通User权限启动
拒绝服务
描述
拒绝服务状态就是指网站或服务器对外停止服务,用户无法访问网站或服务器。造成这种状态的原因有多种,网站自身存在拒绝服务安全风险,极易被攻击者攻击而宕机(较常见的为HTTP慢连接攻击安全风险);攻击者出于某种目的对服务器进行DDOS攻击,导致服务器拒绝服务状态。
危害
- 无法对外提供服务
- 服务器死机
修复建议
- 及时安装操作系统补丁
- 购买或配置抗DDOS攻击设备
- 服务器接入云,购买云厂商的防DDOS的服务
