安全测试大全

上一篇 / 下一篇  2019-01-31 13:58:27 / 个人分类:安全测试

1.安全测试在做什么?
扫描?在很多人的眼中,做安全的就是整天拿个工具在哪里做扫描操作,使用各种不同的工具做扫描。是的,扫描是安全测试的很重要的一部分,扫描可以快速有效的发现问题。扫描工具的易用性、方便性决定了重要地位。但是扫描工具的局限性、程序的不够灵活等缺点也是显而易见的。不管是扫描报告的分析、漏洞的深度挖掘、测试的组织等等的工作都离不开安全测试人员,所以只能说扫描工具减轻了测试人员的工作量,是安全测试的一种手段。
2.安全测试者是怎样定位自己的?
我们经常可以从身边的朋友口中听到一些有关安全的名称,向什么软件安全、信息安全、网络安全、计算机安全等一些词组,这些领域都是做安全的,那么我们是属于哪一个呢?
大家可以上百度百科查看下这些词组的概念。软件安全往小了说就是某一个软件产品,说大了除了硬件就是软件了啊。信息安全看名字我们就知道关键是信息两个字,但是什么是信息呢,客户的数据还是一切有用的数据?网络安全,什么是网络,网络系统硬件、软件这都是写模糊的可大可小的概念。在看计算机安全,PC?服务器?路由器?好吧我们可以看到这些概念往大了说就成了组成我们今天互联网的各种设备包括各种的嵌入式机器、外接USB、蓝牙等设备的共同体的硬软件,以及使用、维护、管理等这些东西的人的整个的安全问题。在看他们的区别,他们已不同的地方作为其主要关注点,或者说出发点,他们并没有明显的界线却有着自己的侧重点。而我们的侧重点是什么呢,我们产品是一个什么样的产品呢?我们有WEB服务、接口服务、文件服务、视屏等服务等我们把它们统一称为我们的系统,那么我们就是在做这个系统的安全测试,所以我觉得我们应该定位为系统安全测试。
当然我们的系统运行中也涉及到人、涉及到硬件,

比如这些站安全比较好

http://www/lahuoge.cn拉货哥同城网站 http://www.qijihu.com奇迹虎网站 http://www.qijihu.cn奇迹狐网站

 

此处都不是我们的关注点,我们只从软件技术的角度来识别它。那么,系统安全测试就成了区别于功能测试,和性能测试一样,单独列出来的专项测试了。

3.安全的本质是什么?
信任、人性(网络安全的最大漏洞是人)、止损、攻防
以上是当前网上一些主要的论点,以信任或者不信任作为本质出发点的还是占据主流的。
4.概念定义
敏感数据:
敏感数据的具体范围取决于产品具体的应用场景,产品应根据风险进行分析和判断。典型的敏感数据包括口令、银行帐号、大批量个人数据、用户通信内容和密钥等。
个人数据:
指直接通过该数据或者结合该数据与其他的信息,可以识别出自然人的信息。
匿名化:
指对个人数据进行的更改(例如单向散列、截短、替换等,如需保留个人数据真实值与替换值之间的对应关系,可以使用对称加密或映射表方式,但密钥/映射表必须由数据所有者控制),使原来有关个人的信息不再能归属到一个可识别的自然人,或推理这种归属需要耗费过多、不相称的时间、费用和精力

5.我们应该如何去着手
如何着手去做这个系统安全测试呢?作为一个测试人员要保证系统整体的安全,这就需要有一个整体的结构的框架,就像盖房子一样,先造钢筋混凝土框架,然后砖块去填充它。这里的钢筋混凝土框架就是安全特性方向,其实就是从整体方向上的一个划分,可以有如下简单的划分。
5.1.测试的特性
安全特性:操作系统安全、数据库安全、WEB安全、软件的发布和安装安全、协议与接口攻防、敏感数据保护、手机端安全、静态代码分析。
5.1.1.操作系统安全
操作系统安全我们可以把它分为以下几块:
系统漏洞(操作系统补丁)、系统配置(安全加固)
业界权威工具Nessus,其他如retina、绿盟、天镜等。开源的工具可以使用OpenVAS。
5.1.2.数据库
数据库安全我们可以把它分为以下几块:
数据库漏洞(补丁)、数据库配置(安全加固)
工具可以使用Ngs
5.1.3.web安全
数据库安全我们可以把它分为以下几块:
身份验证、验证码、会话管理、权限管理、敏感信息传输、安全审计、信息泄露、输入校验、输出编码、上传下载、异常处理、注释代码等
容器的安全(tomcat)
应用软件安全(nginx、负载均衡软件、jquery等)
扫描工:appScan、awvs
5.1.4.软件的发布与安装安全
发布件的完整性校验(签名、哈希)
防病毒:需要安装的软件需要经过常用的杀毒软件(如360、卡巴斯基、金山毒霸等)的扫描,保证没有病毒特种码,以免被杀软处理掉。
5.1.5.协议与接口攻防
业务交互数据在网络中使用的协议安全性测试
协议测试工具:codenomical
对外开放的端口:系统对外开放的端口必须是必须的,禁止开放无用端口
端口扫描工具:Nmap,近端可以直接在服务器上使用命令查看
接口:接口接受的数据需要做严格的处理
接口数据严格校验测试
5.1.6.敏感数据保护
识别敏感数据:密码、秘钥、会话标识;个人信息、商业机密、客户信息等
保护:加密、存储位置、传输方式;获取数据脱敏、匿名化

这些站就做了加密http://www.hiry.cn/杏仁网站http://www.hiry.net进口商品网站http://www.lahuoge.com拉货哥
5.1.7.手机端安全
1、app的签名、反逆向
2、用户隐私
3、文件权限
4、网络通讯
5、运行时解释保护
6、组件权限保护
7、升级
8、3rd库

移动APP测试要点:http://blog.nsfocus.net/mobile-app-security-security-test/
5.1.8.静态代码分析(纯白盒)
白盒测试主要是通过对代码的浏览来发现问题,当然问题的类型可能是跟我们黑灰盒总结的一致,拿出来单独讲是因为其不同于其他的测试方式。
1、危险函数、方法
2、工具检测
3、逻辑漏洞

灰盒
结合白盒和黑盒的一些思路,在实际的代码审计中建议采用灰盒的方式,在需要的地方对代码进行动态调试查看。审计中思路可以考虑如下这些部分:
1、涉及敏感数据的时候,检查是get、post哪种形式发送数据
Get传输的数据会被记录在代理、浏览器、web容器tomcat等的日志中
2、提交铭感数据的时候是否有防止csrf的token、refer、验证码等
3、sql注入
1)Statement和preparestatement
2)mybitas框架 #和$
4、XSS
我们用的antisamy只能过滤基于标签的XSS伪造,其他的无法过滤,需要做二次过滤
5、逻辑
此处是指,逻辑思路不合理,不符合安全的一些思想,如权限最小化等等
6、参数范围是否造成dos或者影响系统性能
7、权限校验、越权
1)横、纵、多步骤关联性
2)
8、session会话管理
1)常规cookie及session形式
2)把token作为session的形式,特别注入登录用户和token的绑定关系
9、参数是否是简单形式,是否可以造成遍历
10、代码中使用的第三方插件、开源软件是否是最新、是否有安全漏洞
11、代码中所使用的加密算法,是否是安全的
12、跳转中的redirect形式中不要带敏感信息,会被发回客户端重新请求的,相当于把这些参数放在了get请求中
13、SSRF服务端请求伪造,注意url中含有另外一个url的请求
1)源码中使用urlconnection 支持的协议除了http和https以外,还有file、ftp、jar、mailto等
request、httpurlconnecttion、httpClient、URL等发起网络请求
14、加密算法的使用,是否使用的是不合场景的弱算法

15、数据插入自增Id攻击
数据传入过来做插入动作,并且使用spring自动绑定对象方法获取数据,之后使用生成的插入sql
此时自动增长id不要写到更新语句中,如果写入可能造成恶意注入integer范围最大值2147483647,使功能不可用dos
16、Spring自动绑定参数,参数扩展攻击
后台使用的对象参数自动绑定获取,相应的sql使用了自动的if是否为null和为空的判断条件,前台可以根据猜测
注入队形的相应的属性实现非预料结果
5.2.WEB安全测试
5.2.1.身份验证 
为防止密码破解和猜测:
复杂度要求,必须由大写、小写、数字等组成;
时效性要求,建议用户3个月更改一次口令;
密码长度要求,最小8位,最大?位;
管理员重置密码后密码必须在下次登录更改;
强度要求,不能跟原密码一致,不能与用户名相似(如,不能包含用户名正写反写大小写等),
(最新也有说法不建议频繁修改http://www.secdoctor.cn/html/sec/35995.html)
口令认证必须在服务端进行。
必须要有验证码机制。
登录锁定,登录需要有锁定机制即就是多次登录失败后锁定账号或者ip,在一段时间后自动解锁。
手机验证码轰炸
手机验证码超时机制
账户枚举测试

弱密码概念:https://help.aliyun.com/knowledge_detail/37509.html?spm=5176.7837442.2.5.ZotsLv
5.2.2.验证码 (普通验证码、知识验证码、无需思考的滑动验证码)
验证码字符生成算法的安全随机数
验证码字符不能被验证码识别工具识别
验证码必须是一次性的
验证码超时(验证码有效期的意义:1、增加图片处理识别的难度;2、验证码没有有效期的话导致服务器验证码堆积)
在忘记密码处做安全问答测试

 

建议的验证码形式:
当前的最流行的滑动块验证码,有点用户无需动脑,不会打断用户的思考。
(验证码的前世今生:http://www.freebuf.com/articles/web/102276.html)

5.2.3.会话管理 
登录前后会话标示要有变化
安全退出会话标示注销
会话标示安全随机
会话标示的长度适度
会话超时机制
会话标识的传输和存储
会话标识夸PC访问
5.2.4.权限管理 
通过灰化(隐藏)使功能失效
纵向越权
横向越权
权限分离
(系统管理、安全管理、审计管理
系统管理员主要负责用户管理和系统日常运作相关的维护工作;
安全管理员负责安全策略的配置和系统资源安全属性的设定;
审计管理员则对系统审计信息进行管理)
参看《关于越权》

5.2.5.敏感信息传输及存储 
敏感信息不能以get方式提交
传输通道使用https(关键数据提交服务端不接收http明文数据)
严格安全传输HSTS(确保从浏览器发出的请求就是https的)
在url中有session
对用户保密的信息不能传输到客户端
含有敏感信息的页面需要设置不缓存
5.2.6.安全审计 
登录、退出、操作等都要有日志
日志格式标准(时间、谁、做了什么操作、结果怎样)
日志访问的限制
日志中的敏感信息

他们是如何迭代的?日志是否保存足够长的时间?
日志是如何被审查的?管理员能否通过审查出发现攻击行为?
日志备份如何保存?
日志记录数据前是否进行验证(最小最大长度,字符等)?
5.2.7.信息泄露 
数据库版本泄露 
容器版本泄露
绝对路径泄露
异常信息泄露
泄露服务器路径
泄露容器版本
泄露程序详细堆栈信息
源代码泄露
检测Web网络是否存在源代码泄露漏洞,如果存在此漏洞,攻击者可直接下载网站的源代码。
管理地址泄露
网站管理地址属于内部使用的信息,公开增加了安全风险。
Bak信息泄露
搜索引擎发现和侦察信息泄露(暂时不涉及)
服务器指纹探测(使用指纹探测工具whatweb需要在linux上编译运行,httprint--最新的signatures.txt不然识别到不准确)


【其他关注项:】
枚举web服务器上存在的应用程序
Whois信息收集
识别Web应用框架
Owasp测试指南4中文:https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/zh/web_application_security_testing/review_webserver_metafiles_for_information_leakage_otg-info-003.html
拖库撞库http://blog.nsfocus.net/information-leakage-thinking-library-collision/
5.2.8.输入校验
前台后台都必须校验(“移除已知的恶意数据”不如移除“良好数据之外的所有数据”)
5.2.8.1.XSS(跨站点脚本攻击)
XSS-1反射型跨站点脚本编制
XSS-2存储型跨站点脚本编制(http://xxxxx0000sssss.lofter.com/post/14b1dc_50023e)
XSS-3 DOM型跨站点脚本编制
dom xss并不复杂,他也属于反射型xss的一种,domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM,所以在道哥的《白帽子讲Web安全里》也有详细介绍。dom - xss是通过url传入参数去控制触发的。
HPP(HTTP参数污染[同名参数]http://blog.csdn.net/eatmilkboy/article/details/6761407)
漏洞危害: 
1、钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。
2、网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
3、身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。
4、盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
5、垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
6、劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。
7、XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。
参考:
https://help.aliyun.com/knowledge_detail/37444.html?spm=5176.7837442.2.11.F8ceHg
http://blog.csdn.net/change518/article/details/51024706 隐藏域XSS(借助accesskey属性)
5.2.8.2.SQL注入
(1、java预处理preparestatement;2、正则表达式过滤参数;3、严格字符串过滤;4、参数化的sql)
例子:参数date=if(now()=sysdate(),sleep(0),0)/*'XOR(if(now()=sysdate(),sleep(0),0))OR'"XOR(if(now()=sysdate(),sleep(0),0))OR"*/
Sql语句中的/斜杠:表示执行,把之前时间内的缓存中的语句再执行一遍
\斜杠:表示语句未完换行
单行注释:--
多行注释:/* */
If(now()=sysdate(),sleep(2),0)表示如果now()=sysdate(),为真执行sleep(2),否则执行0
当前形势下,新开发的网站,大部分采用新框架都已经可以预防sql注入了,只有手动拼接的sql语句易被sql注入。
生成注入用例时注意:
1)’ 单引号闭合
2)‘OR 单引号也可以有结束开始下一元素的效果
3)-- - 注释后面跟空格实现注释不跟后面语句连接,后面实际被注释掉效果
4)Select CONCAT_WS(0x3A, USER, PASSWORD) FROM mysql.user 获取数据库用户
5)union all 连接两个select查询结果,合union的区别不去重复;两个select查询的字段一样
6)insert into mysql.user(Host,User,Password) values("%","Sectest",password("111111")) 给数据库添加用户 %:远程用户,localhost:本地用户

系统使用了MyBatis动态SQL框架组装sql,注意配置文件中的$和#的使用,使用$可能导致sql注入
拼接后的语句再放入预编译对象是徒劳的,因为在预编译之前拼接的SQL语句执行逻辑已经被破坏,原 SQL语句的本意已经被改变了。

概念:
https://help.aliyun.com/knowledge_detail/37450.html?spm=5176.7837442.2.10.ZotsLv
Sql注入常用语句:
http://www.111cn.net/database/mysql/58518.htm
http://wenku.baidu.com/link?url=sK_daSqJFJt3KsCuYQOjCkuGldDJSJQbATiRX42UEocanxFejYSjVESnyHPhvDP___hGAbKSLMhh4020TOP9wItRr1YWiq8OQ1HzYItXc6q

 

5.2.8.3.XML注入测试
(借助XXE,攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等)
日志注入(\r,\n换行,伪造日志)
命令注入(操纵系统命令)
Email Header Injection(邮件标头注入) 
/*(我们在暂时不涉及)
Email Header Injection:如果表单用于发送email,表单中可能包括“subject”输入项(邮件标题),我们要验证subject中应能escape掉“\n”标识。
<!--[if !supportLists]--> <!--[endif]-->因为“\n”是新行,如果在subject中输入“hello\ncc:spamvictim@example.com”,可能会形成以下
Subject: hello
cc: spamvictim@example.com
<!--[if !supportLists]--> <!--[endif]-->如果允许用户使用这样的subject,那他可能会给利用这个缺陷通过我们的平台给其它用户发送垃圾邮件。
*/
5.2.8.4.代码执行
代码执行是指应用程序对传入命令的参数过滤不严导致恶意用户能控制最终执行的命令,进而入侵系统,导致严重破坏的高危漏洞。
https://help.aliyun.com/knowledge_detail/37446.html?spm=5176.7837442.2.2.nCzE5s

5.2.8.5.CRLF漏洞
CRLF,carriage-return-line-feed,回车换行漏洞。
案例参考:https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html(对header进行注入)

5.2.9.上传下载 
跨目录文件下载
任意文件下载

任意文件上传(后缀)
任意目录文件上传(目录)
超大文件上传(大小)
上传文件废弃后处理(堆积)
上传文件名xss(重命名)
上传文件名截断(0x00或者0x58,burp也可以修改二进制,url中%00)
上传文件权限限制
压缩炸弹
Include包含上传(shtml)
上传zip文件名中包含../
本地文件包含的概念:
https://help.aliyun.com/knowledge_detail/37472.html?spm=5176.7837442.2.2.2NdNhY
5.2.10.CSRF

CSRF【cross site request forgery】跨站点请求伪造。
原理:利用浏览器内存共享原理,利用用户身份伪造用户动作发送到服务端。(从恶意站点模拟用户发送正常的请求携带cookie,见7.1)
5.2.10.1.URL重定向(跳转)漏洞:
(参考http://drops.wooyun.org/papers/154)
1、问题点
在页面跳转的地方,URL中包含另外的网址,例如:
第一类 简单URL过滤
www.xxx.com?a=http://www.yyy.com
第二类 底层操作类库支持其他协议导致读取本地或探测网络信息
http://h2w.iask.cn/h5.php?u=file:///etc/passwd
由于底层适用类curl库,而没有正确过滤URL导致,可以读取内网诸多信息.还有其他类似的形式:
如file://, ftp://, telnet://等
第三类 不支持其他协议但是没有设置网络边界(SSRF漏洞的姿势啊)
http://wap.sogou.com/tc?url=http%3A%2F%2Fno.sohu.com%2F
使用域之间的信任,突破到系统的内网

2、分析
理论上讲,url跳转属于CSRF的一种,我们需要对传入的URL做有效性的认证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括:
1)referer的限制
2)加入有效性验证Token
3、对跳转的地址没有做严格的校验
5.2.11.CORS漏洞
CORS【cross origin resouse-sharing】跨域资源共享。
工具:shell of the future
理解参考:http://www.2cto.com/Article/201209/154081.html
5.2.12.SSRF漏洞(服务端请求伪造)
行为特点:从其他服务器获取数据资源的功能,并且此功能获取资源的请求是从服务端发起的。
可以实现的攻击:
可以对服务器所在的内网、本地端口进行扫描、获取banner等
攻击运行在内网或者本地的应用程序(比如溢出)
对内网WEB应用进行指纹识别,访问默认文件的方式
攻击内网WEB服务器,get请求方式
利用file协议读取本地文件:例如http://192.168.1.119/pm/www/index.php?m=bug&f=view&bugID=4052


http://netsecurity.51cto.com/art/201312/424038.htm
5.2.13.Google黑客
1、搜索站点看是否能发现敏感的信息或不该公布的信息
搜索命令,例如:
site:yizhen.cn
site:yizhen.cn yizhen.cn:password
site:yizhen.cn inurl:session
site:yizhen inanchor:修改密码
cache:www.yizhen.cn

参考:http://www.cnblogs.com/xuanhun/p/3910134.html
5.2.14.其他
http开放方法测试
不安全的方法:put、delete、trace、connect
TRACE: 这个方法简单返回客户端发送给服务器的所有信息,主要用于调试目的。这个方法最初被认为没有危害,被Jermiah Grossman发现能被用于实施XST
CONNECT: 这个方法允许客户端使用web服务器作为代理。
DELETE: 这个方法允许客户端删除web服务器上的一个文件。攻击者能利用他简单直接破坏网站或者实施拒绝服务攻击。
这个方法允许客户端向web服务器上传新的文件。攻击者可以利用他来上传恶意文件(比如一个asp文件通过调用cmd.exe来执行命令),或者简单使用受害者服务器作为文件仓库。
banner信息检查
HTTP方法篡改(已验证,没有此问题;问题案例https://www.sobug.com/article/detail/25)
JavaScript. DDOS(切换https后问题解决)
缓冲器溢出漏洞,java的不涉及
管理接口暴力枚举(DirBuster)
测试HEAD访问控制绕过
跨域策略测试
数值溢出
不管整数,浮点数,长整数等都是有一个可以表示的最大值,如果一个该类型变量被赋予超过其最大值的时候就会出现溢出,而找出该变量的值异常。

5.2.15.重放攻击
重放多次请求消耗系统资源的请求,造成dos。筛选出较为消耗资源的请求,检查系统是否有防重放策略或者机制。
5.2.16.容器的安全
5.2.16.1.Apache tomcat
1)官网公布的安全漏洞补丁升级
http://tomcat.apache.org/security-7.html#Apache_Tomcat_7.x_vulnerabilities
2)运行账户
建立独立用户,用户名和组名均为tomcat,不设置密码(即禁止SSH登录),tomcat进程以此帐号身份运行,严禁以root权限运行tomcat,禁止以个人帐号或其他有shell权限的帐号运行tomcat。
3)删除Tomcat自带项目
4)检查tomcat已知的带有风险的配置
a)禁用应用程序自动部署功能(待考虑)
b)禁用webdav
c)定制Tomcat出错信息
d)关闭Tomcat的目录列表功能
e)限制http请求的消息主体的大小
f)禁止配置Tomcat的网络连接超时时间为0或-1
g)可执行文件只能由Tomcat属主用户修改
h)配置文件只能由Tomcat属主用户修改
i)日志文件只能由Tomcat属主用户修改和执行
j)配置虚拟目录,用以隐藏后台路径
k)禁用SSI和CGI功能
l)不允许使用SetUID程序,尤其是root身份的SetUID程序
m)开启Tomcat的日志功能:正常的访问日志和错误请求日志。日志文件的记录中包含访问时间、内容、结果及请求用户的ip等关键信息

影响较大的漏洞:
CVE-2016-1240 tomcat地权用户提权漏洞。(2016-10)
5.2.17.其他组件安全
5.2.17.1.Nginx
官网安全漏洞先关链接:http://nginx.org/en/security_advisories.html

影响较大的漏洞:
CVE-2016-1247 提权漏洞,借助nginx日志,提取到root。(2016-10)
5.2.17.2.Jquery
http://192.168.1.120:8080/amol-hospital/js/jquery-1.9.1.min.js
http://192.168.1.120:8080/amol-hospital/js/ueditor/third-party/jquery-1.10.2.min.js

在官网上没有找到相应的安全漏洞列表
https://blog.jquery.com/2013/02/04/jquery-1-9-1-released/

Jquery两个版本间更新日志,其中有两处vulnerable字样
https://github.com/jquery/jquery/compare/1.9.1...1.12.3
5.2.17.3.Java漏洞
(放到操作系统部分,nessus可以很好的检查这个)
5.2.17.4.百度Ueditor(1.4.3)
5.2.17.5.Node.js(超声视频使用)
node -v
v0.10.42

5.2.17.6.Spring
5.2.17.7.Mybitas
5.2.17.8.Druid
数据库连接池组件,包括四部分:DruidDriver、DruidDataSource、SQLParsr、扩展组件。
可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。
1、访问没有权限控制

5.2.17.9.Turnserver
TurnServer 是一个TURN协议的开源实现。
该协议允许一个客户端以relay方式获得IP地址和端口。这对于symmetric 类型的NAT或者防火墙两边设备的通信非常有用。
TurnServer项目旨在兼容地处理 TURN 和 STUN请求 (RFC 5766 , RFC 5389),同时也支持 RFC6156 即 TURN-IPV6 (relay between IPv4-IPv6, IPv6-IPv4 and IPv6-IPv6 addresses) 和 RFC6062 即TURN-TCP (relay data with TCP)

5.2.17.10.Terracotta(session共享)
5.2.17.11.phpMyAdmin
http://www.phpmyadmin.net/security/

5.2.17.12.Redis
1、指定redis服务使用的网卡 (需要重启redis才能生效)
在 redis.conf 文件中找到 “# bind 127.0.0.1” ,把前面的#号去掉,然后保存。注:修改后只有本机才能访问Redis。
2、设置访问密码 (需要重启redis才能生效)
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码,Redis客户端也需要使用此密码来访问Redis服务。
3、修改Redis服务运行账号 (需要重启redis才能生效)
请以较低权限账号运行Redis服务,且禁用该账号的登录权限。另外可以限制攻击者往敏感写入文件,但是Redis数据还是能被黑客访问到,或者被黑客恶意删除。
4、设置防火墙策略

如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。
参考:
https://help.aliyun.com/knowledge_detail/37447.html?spm=5176.7837442.2.10.nCzE5s

5.2.17.13.Fastjson开源jar
https://github.com/alibaba/fastjson/wiki/security_update_20170315
fastjson最新远程代码执行高危安全漏洞,当前涉及1.2.24之前版本
我们用的1.1.41
5.2.18.Web木马
常见的简单形式--诱导优化打开具有网页木马的页面,一般是写入js引用大马的代码网页,用户打开诱导网页后在电脑上实际上已经默认运行了下载大马和执行大马的操作

5.3.敏感数据保护
5.3.1.加密算法
算法列表能用,不能用
弱算法:md2,md4,md5(2004年的国际密码学会议(Crypto’2004)王小云证明了MD5可以被碰撞,至此,MD5不再安全) ,sha1,blowfish
推荐算法:sha256,aes128
可逆的加密算法:des 3des aes128
可逆加密算法又分为两大类:“对称式”和“非对称式”。
对称式加密特点:加密和解密使用同一个密钥,通常称之为“Session Key ”。
DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES
非对称式加密特点:加密和解密所使用的不是同一个密钥,而是两个密钥:一个称为“公钥”,另一个称为“私钥”;它们两个必须配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则只能由持有人本人知道。
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
不可逆加密算法:sha256 sha512 md5
不可逆加密算法的特征是,加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文。这种加密后的数据是无法被解密的,只有重新输入明文。
常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
参考:
http://www.360doc.com/content/13/0402/15/3862791_275529254.shtml
http://book.51cto.com/art/201109/294599.htm
MD5输出128bit
SHA1输出160bit
SHA256输出256bit
另外还有SHA244,SHA512
分别输出244bit,512bit

问题分析
数据库中的密码的机密算法推荐:
1、使用不可逆加密算法
2、使用加盐(避免预先计算彩虹表)

建议的用户密码加密形式:
http:若通道未加密,密码在客户端使用可逆加密算法AES-256并加盐(从服务端获取挑战码即盐值),传输到服务端再解密。
https:服务端接受到明文密码后使用不可逆加密算法对密码进行哈希加密SHA256并加盐(使用安全随机盐值,长度建议跟密码最长一致),再存入密码密文和盐值到数据库。
5.3.2.证书
我们一般说的证书都是服务端证书,即浏览器使用的验证服务器身份的证书。
我们的证书是自生成的证书。
证书:证明身份的凭据,证书中心用自己的私钥对信息发送者的公钥和一些信息一起的加密,证书可以保证公钥的安全性和有效新,公钥可以验证私钥持有方的身份。常规信息有:颁发给的通用名、组织、组织单元、序列号和颁发者的通用名、组织、组织单元,有效时间开始于、过期时间,指纹SHA-256指纹和SHA1指纹。详细信息还有证书的签名算法、公钥算法、公钥等。

签名哈希算法:证书编码完整性保证的哈希算法
签名算法:私钥对证书编码的哈希加密的算法;证书签名使用的算法是发布者自己规定的
上面两个是发布机构搞得,用来CA验证的

指纹算法:计算出指纹的哈希的算法,就是哈希算法,一般就是sha1
指纹:证书的哈希值并用私钥加密。

鉴别用户的真伪可以通过鉴别用户的私钥的真伪来确认,就是看加密的信息服务端是否可以解密。
公钥:连接建立时浏览器端加密时使用的秘钥。
私钥:连接建立时服务器端加密时使用的秘钥。
使用时:
步骤一:
1、浏览器输入网址访问yizhen.cn(应用层的)
2、浏览器底层的TSL协议发送明文的Hello信息给服务器(网络层)
3、服务器响应一个Hello信息给浏览器
步骤二:
服务器端发送它的证书给浏览器(图中的三,图中的二是之前就生成好的,存储在服务端的公钥、私钥、证书)
步骤三:
1、客户端验证服务端发来的证书
2、验证证书的签名、完整性等信息
3、去浏览器证书管理中心验证证书是否可信,是否为可信机构的证书或者子证书
4、如果不可信,浏览器抛出警告,提示用户,需要用户确认选择是否继续
步骤四:
1、浏览器产生一个随机的值,作为秘钥,对称加密的秘钥,此处就称为秘钥。
2、使用证书中的公钥对产生的秘钥进行加密生成密文串
步骤五:
1、发送密文串给服务器
2、服务器接受到密文串,使用证书的私钥进行解密,获得对称加密的秘钥。
3、服务器使用对称秘钥加密响应报文内容发送给浏览器。
步骤六:
服务器和浏览器可以通讯了。
浏览器发送的数据都是公钥加密,使用对称秘钥解密收到的数据。
服务器发送的数据都是对称秘钥加密的,收到的数据使用私钥解密。
简单示意图如下:

证书介绍和攻击
Pem格式的证书详细信息查看:
https://www.trustasia.com/tools/cert-decoder.htm
SSL证书被攻击、假冒的风险分析
http://wenku.baidu.com/link?url=LkghTfA11JWJBLFJrgBZfCrIBFJoqfcH1q4xBEbzt3xmGtkR7mdkV91mUnRobYQKYz2ekVTo7XNQdOMHIuOpWZv4TBDBVsBo52dYNeX1zRi
一个合法有效的SSL证书误签发给了假冒者(--)
破解SSL证书签发CA的私钥(关注签名算法)
SSL证书签发CA的私钥泄露(如果是自签名证书需要关注)
破解SSL证书的私钥(关注指纹算法)
SSL证书的私钥泄露(服务器端私钥的存贮)
认证机构主动为假冒网站签发合法有效的证书(--)
利用可信的SSL服务器证书进行中间人攻击(--)
在用户主机中植入伪造的根CA证书(或一个完整的CA证书链)(--)
旁路证书的可信性的验证(--浏览器操作系统漏洞)

---如果证书的跟证书没有,第一次访问会去证书网站获取根证书或者中间证书

5.3.2.1.证书加密算法的检查
1、证书的指纹算法是否安全,不安全的算法造成证书加密传输的信息可以被解密
2、证书的签名算法是否安全,不安全的签名算法可能造成证书被伪造
5.3.2.2.证书对应的秘钥保存检查
1、证书私钥在服务器端存储是否加密
2、证书私钥在服务器端的存储文件权限是否只有所有者可以访问
----浏览器端客户的CA根证书是否安全可信,这个无法保证(不涉及)
5.3.3.明文密码
客户端
1、浏览器Cookie中存储,浏览器Cookie中记录密文密码
2、浏览器记录密码保存明文密码
服务端明文密码检查
1、 配置文件明文密码
2、日志中记录明文密码
3、程序中硬编码密码、密钥
(针对秘钥场景的理解,主要针对当前的弱算法秘钥爆破的场景,原理是通过对多次的加密后的密文对比差异尝试推倒秘钥,有些场景可以认为是分问题的,如数据库密码以DES加密密文存储在配置文件中,密钥在代码中硬编码,这种场景的密钥硬编码就是没有问题的,他的密钥在配置文件和代码中其实


TAG:

引用 删除 venessa   /   2020-02-17 15:37:29
1
 

评分:0

我来说两句

Open Toolbar