目录
1 前言
安全加固资料请前往https://pan.baidu.com/s/1-4c0PZHg8f4Zs-JRFy_S9w(提取码:7ljw)
安全工具及使用方案请前往https://pan.baidu.com/s/1KrGYbJ4IxgbwFGHgvrYPAg(提取码:tbod)
2 基础安全要求
2.1 口令安全
针对web应用登录账号、中间件管理页面登录账号(如tomcat、weblogic管理页面)、web应用后台管理账号、数据库账号、操作系统登录账号、网络设备登录账号(防火墙、核心交换机管理页面)设置强密码,强密码要求包括:
(1) 至少8位,数字、大小写字母、特殊字符中至少3种组成;
(2) 口令必须与用户名无关,不可包括用户名的完整字符串、大小写变换的字符串;
(3) 口令不可设置键盘序列码,需要避免“1qaz”、“2wsx””qwerty”等键盘序列码;
(4) 应更换系统和设备的出厂默认口令,如oracle及weblogic默认出厂口令应更换;
(5) 口令避免出现简单易猜测字符串的组合,如admin、test、aisino、manager、123、123456、111111、888、abc、password等;注意,常见易猜测短语的变形也是弱密码,如“PassW0rd”为常见弱密码;
(6) 若应用系统用户被分配了初始密码,则要求用户首先修改密码后才可执行其它操作;
(7) 密码信息在数据库中加密存储,不可为base64加密等弱加密方式,建议使用md5+salt方式加密;
附:常见弱密码参考,应避免出现如下弱密码:
2.2 敏感信息泄露自查
2.2.1 中间件管理页面泄露
(1) tomcat管理页面、examples等危险文件删除及版本信息隐藏
检查方法:检查“IP:[端口]/manager”” IP:[端口]/examples”文件是否存在;
修复建议:
1) 删除危险文件:
- 针对所有的tomcat安装目录,删除如下文件:
【tomcat_path】/webapps/examples
【tomcat_path】/webapps/manager
【tomcat_path】/webapps/host-manager
【tomcat_path】/webapps/docs
【tomcat_path】/webapps/sample
- 检查tomcat默认页面是否删除,若打开url“IP:【tomcat端口号】”后发现tomcat默认页面,将tomcat安装目录下/webapps/ROOT/index.jsp 重命名为其它不可猜测名称(不要设置为index.jsp.bak);
2) 隐藏tomcat版本,针对所有tomcat安装目录:
- 备份 [tomcat_path]/lib/catalina.jar文件,可通过如下命令备份:
cp [tomcat_path]/lib/catalina.jar [tomcat_path]/lib/catalina.jar.bak
- 打开[tomcat_path] /lib/catalina.jar文件,找到jar包中如下文件
“/org/apache/catalina/util/ServerInfo.properties”文件,修改”server.info”变量和”server.number”、“server.build”变量为”unknown”;
(2) weblogic管理页面泄露自查:
说明:weblogic管理页面应禁止外网访问,仅允许内网访问或特定IP访问;
自查方法:从外网的访问“ip:端口/console”,检查是否可打开管理页面;
修复建议:开启管理页面端口,从防火墙层面禁止weblogic管理页面端口对外开放;具体修复建议参考附件《weblogic控制台访问控制》;
2.2.2 后台管理页面泄露及未授权访问检查
(1) 开发人员或项目经理自查:应用是否存在后台管理页面,若存在,后台管理页面应满足:页面禁止外网访问;账户设置强密码;
(2) 在步骤(1)问询的基础上,使用御剑工具检查暴露的后台管理页面及未授权访问页面;御剑工具及使用方法见附件《御剑工具及使用简介》;
2.3 端口开放情况自查
1、端口开放基础要求:
(1) 在对外硬件防火墙上设置,对外网只开放必要的业务端口,不可开放数据库连接端口及远程连接端口;
(2) 对于本机,只开放必要的端口,关闭默认开放的、无用的端口:
若系统中开启了telnet服务,则关闭telnet服务,使用其它远程连接方式如ssh替代;
对于windows系统,使用IP安全策略,关闭危险的135、137、139、445端口;
注意:若开启防火墙来禁用端口,注意防火墙的开启可能影响应用系统正常运行,如oralce及mongodb需要随机端口,不可开启防火墙;
2、端口开放情况自查:
检查方法:使用nmap工具检查,注意检查主机端口开放详情,请将nmap工具设置于同一网段,检查外网上该主机端口开放情况,请将nmap工具设置于外网网段;
Nmap工具及使用方法请见附件;
3、修复建议:
(1) 对于不必要的服务,可关闭服务;
(2) 对于linux系统,centos7/redhat7可开启firewall防火墙来允许必要的端口开放,命令示例如下:
systemctl start firewalld
firewall-cmd –permanent –add-port=【开放的端口号】/tcp
firewall-cmd –reload
firewall-cmd –list-all
(3) 对于windows系统,请参考附件《Windows系统采用IP安全策略禁用端口方案.docx》关闭默认开放的危险端口(135、137、139、445)端口及不必要开放的端口;
(4) 在内外网之间的防火墙上做策略,只允许内网的业务端口开放,禁止远程连接端口(22、3389等)、数据库端口开放;
2.4 安全漏洞修复
1、使用nessus工具做主机安全扫描
Nessus工具包、安装及使用方法见附件,对于扫描到安全漏洞及时修复
2、检查操作系统中安装的zookeeper、openssh、tomcat、ntp、mysql是否是最新版本(若系统不需要使用ntp做时间同步则忽略该软件),若非最新版本,需升级至最新版本;检查操作系统中oracle database是否已安装最新补丁(2018年10月补丁),weblogic是否已安装最新补丁(2019年4月补丁);
Tomcat、openssh、mysql、weblogic、oracle db软件升级或打补丁方法参考附件(仅供参考,请提前在测试环境做好部署验证及功能验证);
3、注意事项:请优先针对中间件软件、数据库软件做升级及补丁安装;若时间紧急,其它漏洞修复可延后修复;
应在测试环境做好升级验证、功能复测后,再在生产环境实施;
生产环境做好应用文件、数据库及配置文件备份;
3 使用Appscan完成web应用扫描
说明:注意请在测试环境中使用appscan工具,因appscan工具可能向数据库中写入脏数据或执行漏洞利用行为,影响应用正常运行;appscan完成web应用漏洞扫描,可发现sql注入漏洞、跨站脚本漏洞(xss)、跨站点脚本伪造漏洞(csrf)等,无法发现逻辑漏洞;
Appcan工具及使用方法见附件;
4 使用burpsuit完成手工渗透测试
Burpsuite工具为最常用的代理类工具,利用它可拦截、查看和修改浏览器与服务器之间的原始数据报文,是进行手工渗透测试所必备的工具。
4.1 工具安装及代理配置方法
a、安装与运行:系统中提前配置好jdk环境即可直接运行BurpLoader.jar,开启过程中在弹出的对话框选择“I accept”,后续对话框选择默认项直至点击“start burp”开启burpsuite;
- 代理配置:打开上方工具栏中的“proxy”-“options”标签,在“Proxy Listeners”设置中,点击“add”,弹出proxy设置对话框,设置本地ip 127.0.0.1的某端口为代理端口,如图设置8888为中间人代理端口,需确保该端口未被其它服务占用,设置完成后保存,并在“interface”列表中选中“127.0.0.1:8888”;若要截取的是https协议报文,还需下载点击如下截图中“CA certificate”按钮弹出证书生成界面,将生成证书导入浏览器中;
在浏览器中设置代理,以IE浏览器为例,选择“工具”-“Internet选项”,在弹出的“Internet属性”对话框中,选择“连接”-“局域网设置”,在弹出的“局域网设置”对话框中,设置代理服务器,选中“为Lan使用代理服务器”前的checkbox,然后点击“高级”按钮,弹出“代理设置对话框”,做如图设置,将代理服务器设置为“127.0.0.1”,将端口设置为“8888”。
- 截取报文:在“Proxy”-“intercept”标签中,点选“Intercept is on”按键可进入截包模式,此时浏览器端与客户端之间的请求报文可在burpsuite中进行任意修改,修改完成后通过点击“forward”按键完成发送(在“intercept is off”的状态下,报文不被截断,可在“proxy”-“history”模块查看历史报文详情)。
4.2文件上传漏洞测试
针对web系统中所有涉及文件上传的功能点(如用户头像编辑,附件提交等)进行测试,在本地选择jsp、asp、php等类型脚本文件尝试上传,正常情况下系统应拒绝上述类型文件,若系统对文件类型做了基本校验,则利用burpsuite工具针对上传请求进行拦截,尝试修改如下参数(每次截包修改一个参数后发送):
(1) 将请求报文中的content-type 参数修改为image/gif、image/jpeg等合法文件格式;
(2) 将请求报文中的文件名后缀改为 .PhP .php3 .php5 .asa .cer 等文件类型(可绕过黑名单检测但服务器可正常解析)
(3) 将请求报文中的文件名后缀修改为xxx.asp;jpg(添加分号以实现文件名截断);
(4) 在上传的脚本文件首行手动添加GIF89a或JFIF(以绕过文件幻数检查)
依次完成上述截包改包操作后发送请求,若系统提示文件上传成功则表明存在文件上传相关漏洞,攻击者可利用该漏洞上传webshell后门以实现对服务器的完全控制。
4.3 任意文件下载/文件包含漏洞测试
针对web系统中所有涉及服务器本地文件系统路径用户可控的功能操作点(如文件下载、文件内容引用等)进行测试,利用burpsuite工具针对请求进行拦截,将用户可控的本地文件路径替换为系统密码存储文件、中间件配置文件等敏感文件路径,修改后发送请求查看是否可以正常访问。
敏感文件示例如下:
敏感文件路径可尝试绝对路径和相对路径,利用./ 或 ../ 针对目录层级进行转换遍历,若能获取到敏感信息则表明系统存在文件下载漏洞。
4.4 越权访问漏洞测试
针对web系统中所有涉及通过请求报文中id参数进行用户身份鉴别的功能操作点(如用户资料编辑,用户密码重置、用户订单信息查看等)进行测试,利用burpsuite工具针对访问请求进行拦截,将相关id参数修改为其他可用标识号(顺序递增或递减遍历),修改后发送请求查看是否能够通过伪造id信息获取到其他用户的操作权限。
如上图,修改id标识号后返回操作成功报文,证明系统存在水平越权访问漏洞。
4.5 CSRF(客户端跨站点请求伪造)漏洞测试
针对web系统中所有的关键和敏感操作点(如修改账户密码,删除重要资料,转账交易等)进行测试,若关键功能不存在验证码确认或弹窗确认等机制,则尝试利用burpsuite工具针对关键操作请求进行拦截,在拦截到的请求中点击右键“Engagement tools”-“Generate CSRF PoC”,将弹框中自动生成的CSRF HTML代码段复制出来,转存为HTML网页并将其部署在模拟应用环境下(可实际访问并执行),在保持敏感操作页面不动的情况下通过新建浏览器窗口访问HTML页面,若访问后相关敏感操作执行成功,则表明系统存在客户端跨站点请求伪造CSRF漏洞,攻击者可通过社工等方式利用该漏洞在用户不知情的状况下执行伪操作。
4.6 业务逻辑漏洞测试
业务逻辑漏洞常出现在用户密码重置及金额支付等场景中,需针对以下几点进行检查:
- 检查重置操作中用于身份鉴别的验证码是否直接回显在返回报文中,存在于某个参数字段或仅用base64等方式进行弱编码、验证码是否在使用过后未刷新可重复利用、验证码是否过于简易或过期时间过长,如纯数字的4-6位数,失效时间10分钟以上等可被枚举攻击;
- 检查重置操作中用于接收验证码的手机号码是否有做绑定认证,还是可通过截包修改成任意号码接收;
- 检查重置操作的成功状态是否取决于返回报文中的参数字段,如通过截包将返回报文中的fail/false状态位手动修改为success/true,查看应用是否会根据状态位的不同进行后续跳转操作。
- 检查是否存在0元购物或负值购物的情况,即通过截包改包方式将付款金额和购买数量等相关数值手动调整为0或负值,如支付操作仍可正常进行则存在逻辑漏洞。
5 web应用安全测试项目补充
为避免出现遗漏,请在使用appscan扫描的同时,请开发人员在代码层面执行如下步骤完成部分安全漏洞自测:
(1) sql注入:检查程序中所有涉及到sql语句执行功能,若sql语句中参数从前端发来的http报文中获取,是否进行了预处理(参数化),即参数是否以纯数据形式插入sql语句中;注意若后端执行的sql语句中排序相关参数(dsc、asc)由前端发的报文获取,注意做好字符串检查,仅允许dsc或asc,其它字符串则拒绝;
(2) xss:若前端输入的数据若直接展示到前端html中,或先保存到数据库后再展示到前端(如输入个人信息后保存到数据库后再展示到前端),此类处理应满足如下至少一项:
a、前端后端做白名单限制:如特定输入类型,手机号、身份证号、税号、银行卡号等;
b、危险字符过滤:左右尖括号、单双引号、左右括号;
c、此类数据展示到前端前做html编码,作为纯数据展示到前端;
(3) 防止暴力破解:
a、应用登录尝试次数限制,如错误登录5次后,限制10分钟后再登录;
b、验证码不可重复使用,使用burpsuite将验证码报文重发不可重复使用验证码;
c、登录错误后,错误信息不可精确到“用户名错误”或“密码错误”,应为“用户名或密码错误”;
(4) 注册或找回密码功能注意事项:
a、收取手机验证码功能中,使用burpsuite尝试修改报文中收取验证码的手机号,频繁发送收取验证码请求,后端应判断出此类请求时间间隔不合法,拒绝请求;删除报文中cookie信息,再次尝试遍历收取手机验证码相关报文中手机号信息,后端应判断请求间隔不合法,拒绝请求;
b、若注册或找回密码时,需要验证手机验证码,则相关报文中需要将手机号及手机验证码一同绑定验证,避免验证码绕过漏洞;
c、返回报文中不可包括图片验证码信息或短信验证码信息;