2020-09-23

安全测试的流程:
转:https://www.cnblogs.com/blogst/p/9241952.html
1.安全测试在做什么?
扫描?在很多人的眼中,做安全的就是整天拿个工具在哪里做扫描操作,使用各种不同的工具做扫描。是的,扫描是安全测试的很重要的一部分,扫描可以快速有效的发现问题。扫描工具的易用性、方便性决定了重要地位。但是扫描工具的局限性、程序的不够灵活等缺点也是显而易见的。不管是扫描报告的分析、漏洞的深度挖掘、测试的组织等等的工作都离不开安全测试人员,所以只能说扫描工具减轻了测试人员的工作量,是安全测试的一种手段。
2.安全测试者是怎样定位自己的?
我们经常可以从身边的朋友口中听到一些有关安全的名称,向什么软件安全、信息安全、网络安全、计算机安全等一些词组,这些领域都是做安全的,那么我们是属于哪一个呢?
大家可以上百度百科查看下这些词组的概念。软件安全往小了说就是某一个软件产品,说大了除了硬件就是软件了啊。信息安全看名字我们就知道关键是信息两个字,但是什么是信息呢,客户的数据还是一切有用的数据?网络安全,什么是网络,网络系统硬件、软件这都是写模糊的可大可小的概念。在看计算机安全,PC?服务器?路由器?好吧我们可以看到这些概念往大了说就成了组成我们今天互联网的各种设备包括各种的嵌入式机器、外接USB、浴室柜尺寸价格专卖蓝牙等设备的共同体的硬软件,以及使用、维护、木桶箱子专卖厂家价格管理等这些东西的人的整个的安全问题。在看他们的区别,他们已不同的地方作为其主要关注点,或者说出发点,他们并没有明显的界线却有着自己的侧重点。而我们的侧重点是什么呢,我们产品是一个什么样的产品呢?我们有WEB服务、接口服务、文件服务、视屏等服务等我们把它们统一称为我们的系统,那么我们就是在做这个系统的安全测试,所以我觉得我们应该定位为系统安全测试。
当然我们的系统运行中也涉及到人、涉及到硬件,比如这些站安全比较好 此处都不是我们的关注点,我们只从软件技术的角度来识别它。那么,系统安全测试就成了区别于功能测试,和性能测试一样,单独列出来的专项测试了。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.敏感数据保护
识别敏感数据:密码、秘钥、会话标识;个人信息、商业机密、客户信息等
保护:加密、存储位置、传输方式;获取数据脱敏、匿名化
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,注意配置文件中的KaTeX parse error: Expected 'EOF', got '#' at position 2: 和#̲的使用,使用可能导致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”标识。
因为“\n”是新行,如果在subject中输入“hello\ncc:spamvictim@example.com”,可能会形成以下
Subject: hello
cc: spamvictim@example.com
如果允许用户使用这样的subject,那他可能会给利用这个缺陷通过我们的平台给其它用户发送垃圾邮件。
*/
5.2.8.4.代码执行
代码执行是指应用程序对传入命令的参数过滤不严导致恶意用户能控制最终执行的命令,进而入侵系统,导致严重破坏的高危漏洞。
https://help.aliyun.com/knowledge_detail/37446.html?spm=5176.7837442.2.2.nCzE5s5.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.CSRFCSRF【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.425.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.nCzE5s5.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加密密文存储在配置文件中,密钥在代码中硬编码,这种场景的密钥硬编码就是没有问题的,他的密钥在配置文件和代码中其实没有多大区别。)
5.3.4.源代码敏感信息检查
使用search and replace搜索代码中的关键字、敏感字,查看是否有不当使用的地方
1、passwd、password、pword等
2、使用过的密码111111,123456,admin,amol等
5.4.协议与接口攻防
5.4.1.端口扫描
1、远端扫描工具Nmap
端口扫描命令
TCP,Nmap -sS -T4 -p 1-65535 -oX filename.xml IP
UDP,Nmap -sU -T4 -p 1-65535 -oX filename.xml IP
2、系统检测
检查服务器的操作系统类型及版本
Nmap –O IP
3、近端端口信息检查
登录服务器,查看端口详细信息
lsof –i:port
ps –ef|grep pid
4、整理系统开放端口的详细列表
5.4.2.端口服务探测
1、使用命令nmap -sV -Pn -p port IP,探测端口的详细服务及版本
-Pn:在扫描之前,不发送ICMP echo请求测试目标是否活跃。
-sV:探索开放的端口,确定服务器/版本信息
5.4.3.REST WEB Service(接口协议)
5.4.4.SOAP
Soap注入5.4.5.SSH协议
放到操作系统部分,这个组件和操作系统强相关
5.4.6.IM服务-XMPP协议
http://wiki.xmpp.org/web/Securing_XMPP
IM服务检查:https://xmpp.net
Tigase用户指南:http://docs.tigase.org/tigase-server/snapshot/Administration_Guide/html_chunk/index.html
Tigase XMPP (Jabber) server ver 7.0.2
IM服务器如何测试???
http://my.oschina.net/greki/blog/210393
Tigase-server
Tigase-client
http://localhost:8080/setup/进入tigase后台
5.4.7.外部接口安全
获取token:http://192.168.1.120:8080/amol-back/oauth/token?client_id=amol_client_mbox&client_secret=amol_secret_mbox&grant_type=password&username=mbox&password=1234561、链路加密
2、参数校验 -
3、访问数限制-
参数:
使用burp遍历用例payload
1)特殊字符
英文字符
~!@#$%^&()____+{}|:”<>?-=;’,./`
中文字符
~!@#¥%……&
()——+:“《》?,。、‘;、】【·
中文汉字
哈哈
2)sql注入
3)XSS
4)纯数字、纯英文、组合、大小写、
5)换行
6)超长
7)空
5.4.8.SSL/TSL
https等其他协议使用的加密协议SSL/TSL是否是安全的,使用开源工具sslsplit检测,工具下载地址https://github.com/droe/sslsplit/tree/7677fe06557509e95e548318909c1a328b6f6069。
检查加协议版本及套件的办法Nmap -sV -p port --script ssl-enum-ciphers ip1、加密协议SSLv2v3需要全部禁用
2、TSL的加密密套件部分已经不安全需要配置删除
5.4.9.WiFi安全
对象(Wep、Wpa)、原理、工具5.5.操作系统安全
http://www.centoscn.com/CentosSecurity/工具:openvas、nessus测试方式:可在本地安装nessus home版完来测试
影响较大的漏洞
CVE-2016-5195:Linux系统本地提权漏洞,脏牛漏洞。(2016-10)【通吃型】。
5.5.1.本地提权
1)Windows下提权(我们是linux服务器,这个暂时不关注)
2)Linux下提权----
利用系统漏洞提权(主动提权)
配置不当提权(被动提权)
Sudo提权—/etc/sudoers文件配置
Crontab提权–定时执行的脚本的权限配置
Init.d提权–/etc/init.d此目录下的文件的写权限要严格禁止
Environment提权–用户的profile、environment等的权限设置、还有su命令而不是su - 方式切换到root用户
Setuid提权–通过给脚本或者bash添加s权限获取root权限 5.5.2.各种木马
键盘记录木马
绑定端口木马
回连木马
端口复用木马
远程控制木马5.5.3.密码破解
本地破解–md5、linux shadow、ntlm/lm
远程破解–ssh、httpauth、webform、pop/Smtp
5.6.数据库安全
Mysql
http://www.w3resource.com/mysql/mysql-security.php
Redis影响较大的漏洞:
CVE-2016-6662 mysql本地提权漏洞。(2016-9)
5.7.软件的发布与安装安全
1、下载的软件有没有提供签名
2、下载后安装是否有校验机制5.8.手机端的安全
1、app的签名、反逆向
(apk加固步骤:http://jingyan.baidu.com/article/b2c186c8cd1a71c46ef6ffcd.html,数字签名:http://blog.csdn.net/kickxxx/article/details/18252881)
2、用户隐私
本地保存用户密码、无论加密与否
敏感信息隐私信息,如聊天记录、关系链、银行卡号等是否加密保存
配置文件等是否保存到外部设备上
保存到外部设备的信息加载前判断是否被篡改
3、文件权限
App所在目录不允许其他组成员读写
4、网络通讯
重要敏感数据传输加密
5、运行时解释保护
嵌有解释器的软件XSS、SQL注入等
外部连接的是否有URL欺骗等漏洞
6、组件权限保护
禁止App内部组件被任意第三方程序调用
调用外部组件先验证签名
7、升级
升级包完整性、合法性校验,避免被劫持
8、3rd库
跟进第三方库的更新
http://blog.nsfocus.net/mobile-app-security-security-test/
http://www.zhihu.com/question/240833625.9.静态代码分析(纯白盒)
1、危险函数、方法、关键字
2、工具检测 findbugs
3、逻辑漏洞
5.10.抓包走读代码(灰盒测试)
1、前台功能执行、中间工具抓包、后端代码走读的形式(过程:结合业务思路查看中间参数、走读后端代码跟踪参数处理,结合常见WEB安全漏洞形式匹配问题,抓包重放验证问题。)
2、可发现的常见漏洞形式:越权、XSS、sql注入、参数合理性等6.安全测试的原则
攻击面最小化
默认安全
最小权限原则
深度防御原则(多角度、冗余的)
安全的失败
外部系统是不安全的
职责分离(权值分离)
不依赖隐晦的安全性
简单
正确的修复安全性问题
客户端的输入是不可信的我的理解的判断依据:
1、我们设计的程序的动作是确定的,而程序运行中产生了超出这个预期动作的部分,我们都可认为它是不安全的,需要改正的。
2、问题产生在我们的设计得程序动作本身就是不符合现有的大环境下的安全标准。
7.参考资料
http://www.owasp.org.cn/ OWASP 测试指南
http://www.wooyun.org/
http://bbs.51cto.com/thread-1039046-1.html
8.系统结构简图9.涉及的常用工具
1、Burpsuit
2、Watchweb
3、Httprint
4、Httpwatch
5、Appscan
6、Awvs
7、Nmap
8、Search and replace
9、Sqlmap
10、secureCAT
11、–验证码识别工具
12、–Whois查询
13、DirBuster
14、Fiddler
15、Wireshark
16、Firefox hackbar
17、在线js执行(http://js.do/)
9.1.文件名上传XSS
1、此种问题的特点:首先,是上传点;第二,在上传后使用了上传的文件名(可能又改名,但是记录了文件名);
2、系统问题发生点医生系统-终审报告-附件3、此处符合了1,查看显示文件名的界面的代码
aaa.gif
以上语句2处出现了文件名,即有两个地方是我们可能注入代码的地方
先看后一个位置,超链接内的文字,普通文本
考虑尝试最简单的b.gif,确认/失败,什么原因?再尝试a/b.gif确认/是有特殊处理的,会被截断,那么其他编码试试?

前的所有代码,其实这里可以说已经是有问题了,改变了原来界面的语义这个位置的文件名貌似行不通啊,我们再来看原始的代码,再看看第一处

aaa.gif
两种思路:A)闭合a,在后面形成代码;B)在标签内形成属性事件
先看B思路,οnclick=“downloadFile(‘hospital/0100101/2016/06/03/DR/369/20160603140244.gif’,‘aaa.gif’)”,着力点在这里,要闭合’)”,再给一个事件属性如οnmοuseοver=””
试试文件名’)”οnmοuseοver=”alert(1)”,尝试后发现”和’,都是问题啊会被处理,这个没办法规避啊
再看看A思路同样避不开’”啊
在回头看看,谁说执行脚本不需要标签啊
aaa.gif
文件名不包含’”/ \,可以考虑的还是标签的属性,于是看二位置换成a.gif如何再看界面OK,XSS成功,所有查看这份报告的,点击了这个附件的都会执行这个事件。
当然也可以换成其他属性触发事件啦,有兴趣可以试试。
请不要忽略这个断字符的仅能alert(1)的问题,这个问题也可能和其他漏洞结合发挥大的威力哦(比如值同域然后钓鱼)
9.2.XXE漏洞详解
什么是XXE ? 就是我们所说的所谓xml实体注入。entity翻译为"实体"。它的作用类似word中的"宏",也可以理解为DW中的模板,你可以预先定义一个entity,然后在一个文档中多次调用,或者在多个文档中调用同一个entity(XML定义了两种类型的entity。一种是我们这里说的普通entity,在XML文档中使用;另一种是参数entity,在DTD文件中使用。)。

参考:
http://blog.csdn.net/dongfengkuayue/article/details/50240157
http://drops.wooyun.org/papers/1911
9.2.1.XXE任意文件读取
构造如下xml文件

<?xml version="1.0" encoding="UTF-8"?>

]>

&file; &file; 1、使用最原始的javax.xml.parsers,标准的jdk api 在解析结果总解析出了hosts文件的内容。 2、使用dom4j后程序变得更简单3、使用JDOM9.2.2.XXE拒绝服务攻击 1、sax解析类已经做了处理 2、循环调用10.名词解释 WAF Web应用防护系统(也称:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 单点登陆 单点登录(Single Sign On),简称SSO,是目前比较流行的企业业务整合解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有有相互信任的应用系统。 PR7 PR值全称为PageRank(网页级别),取自Google的创始人LarryPage。它是Google排名运算法则(排名公式)的一部分,是Google用于用来标识网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title标识和Keywords标识等所有其它因素之后,Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中令网站排名获得提升,从而提高搜索结果的相关性和质量。级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要) OAuth授权 OAuth(开放授权)是一个开放标准。 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息。 而这种授权无需将用户提供用户名和密码提供给该第三方网站。 OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源. 详细参考:http://justcoding.iteye.com/blog/1950270REST WebService REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。 隐写术 隐写术是关于信息隐藏,即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。隐写术英文作“Steganography”,来源于约翰尼斯·特里特米乌斯的一本看上去是有关黑魔法,实际上是讲密码学与隐写术的一本书Steganographia中。此书书名来源于希腊语,意为“隐秘书写”。 CTF CTF(Capture the Flag)夺旗比赛。 MIME编码 MIME(Multipurpose Internet Mail Extensions)多部分(multi-part)、多媒体电子邮件和WWW超文本的一种编码标准,用于传送诸如图形、声音和传真等非文本数据。 PKCS The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。 PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。 WASC Web Application Security Consortium(WASC),是一个由安全专家、行业顾问和诸多组织的代表组成的国际团体。WASC 组织的关键项目之一是“Web 安全威胁分类”,也就是将 Web 应用所受到的威胁、攻击进行说明并归纳成具有共同特征的分类。该项目的目的是针对 Web 应用的安全隐患,制定和推广行业标准术语。 OWASP Open Web Application Security Project(OWASP),该组织致力于发现和解决不安全 Web 应用的根本原因。它们最重要的项目之一是“Web 应用的十大安全隐患”,总结了目前 Web 应用最常受到的十种攻击手段,并且按照攻击发生的概率进行了排序。这个项目的目的是统一业界最关键的 Web 应用安全隐患,并且加强企业对 Web 应用安全的意识。 CORS CORS(Cross Origin Resourse-Sharing),跨域资源共享。 Node.js Node.js是一个Javascript运行环境(runtime)。 实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更 好。 [1] Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。 SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) 渗透攻击、攻击载荷payload、shellcode CWE CWE(Common Weakness Enumeration),通用弱点枚举。软件弱点分类,更好地识别缺陷、修复阻止缺陷实现自动化。 CDN CDN(ConTent Deliver network)内容分发网络。以负载均衡为核心。 Maven Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 WebRTC WebRTC(Web Real-Time Commutication)Web实时通讯的缩写,就是使用Web浏览器完成实时的语音对话和视屏对话的技术。 APT APT(Advance Persistent Thread)高级可持续性攻击。APT是黑客以窃取核心资料为目的,针对客户所发动的网络攻击和侵袭行为,是一种蓄谋已久的“恶意商业间谍威胁”。这种行为往往经过长期的经营与策划,并 具备高度的隐蔽性。APT的攻击手法,在于隐匿自己,针对特定对象,长期、有计划性和组织性地窃取数据,这种发生在数字空间的偷窃资料、搜集情报的行为, 就是一种“网络间谍”的行为。 CVSS Common Vulnerability Scoring System,即“通用漏洞评分系统”,是一个“行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度”。 CVSS是安全内容自动化协议(SCAP)[2]的一部分,通常CVSS同CVE一同由美国国家漏洞库(NVD)发布,由美国国家基础建设咨询委员会(NIAC)委托制作,是一套公开的评测标准,经常被用来评比企业资讯科技系统的安全性,并受到eBay、(Symantec)、思科(Cisco)、甲古文(Oracle)等众多厂商支援。 CVSS的目标是为所有软件安全漏洞提供一个严重程度的评级 这就意味着CVSS旨在为一个已知的安全漏洞的严重程度提供一个数值(分数),而不管这个安全漏洞影响的软件类型是什么,不管它是操作系统、杀毒软件、数据库、邮件服务器、桌面还是商务应用程序。由于这个评分范围非常广,这个评分系统把能够完全攻破操作系统层的已知安全漏洞评为基准分数10.0分。换句话说,CVSS基准分数为10.0分的安全漏洞一般指能够完全攻破系统的安全漏洞,典型的结果是攻击者完全控制一个系统,包括操作系统层的管理或者“根”权限。例如,国家安全漏洞数据库中一个第三方产品中的这种安全漏洞被解释为,攻击者能够安装程序;观看、修改或者删除数据;或者创建拥有用户全部权利的新账户。 它的主要目的是帮助人们建立衡量漏洞严重程度的标准,使得人们可以比较漏洞的严重程度,从而确定处理它们的优先级。CVSS得分基于一系列维度上的测量结果,这些测量维度被称为量度(Metrics)。漏洞的最终得分最大为10,最小为0。得分7~10的漏洞通常被认为比较严重,得分在4~6.9之间的是中级漏洞,0~3.9的则是低级漏洞 CVSS系统包括三种类型的分数   - 基准分数,暂时的和环境的。每一个分数都要衡量这个安全漏洞的不同属性。甲骨文在严重补丁更新文件中提供这个“基准分数”。这个基准分数有如下特点:  - 这个基准分数具体指一个指定的安全漏洞。   - 这个基准分数是不变的。   - 它不是具体针对一个客户的技术IT环境的11.那些网络大牛们的语句 以安全防御方的角度来看,防御的广度比深度更具优先级,这也是信息安全中木桶原理的体现。 网络世界如此的年轻,还没有发展出自己独立的行为规范。 我认为安全的核心理念只有两种: 一是对无序的内外环境执行线性秩序化策略,构建强韧的防护体系,为系统提供“免疫”能力。 二是对无序的内外环境执行非线性秩序化策略,构建反脆弱性防护体系,为系统提供“进化”能力。 --------安在 安全的三要素:机密性、完整性、可用性 防御的一些思想: 白名单思想、深度防御、数据与代码分离、不可预测性、缩小攻击面 12.其他 我的一些理解: 1、安全中总谈到做安全需要首先确认信任域与信任边界,信任边界的概念主要是从这个网络物理结构体系的形式来体现的,比如一般在网闸或者防火墙之类的的设备处作为边界,内部形成一个个安全域。而我们的互联网系统是以云为依托,打破了原来的那种概念。物理层对我们来说是不透明的,以服务提供商的逻辑服务形式体现为8台服务器,2台数据库服务器,2台负载均衡服务器。并且这些服务器之间并没有配置相互的信任关系,这就形成了我们的安全实际形态为多处单点形式。 仔细来看这12个单点,首先2台负载均衡,只提供负载均衡服务其他均不需要我们看护,其做了哪些措施除了分配连接外一概不知,所以可以从我们的安全形态圈摒弃掉。剩下的10台服务器,彼此独立,互相不应该信任,彼此交互均应该有有效认证行为。 当然,其彼此的交互也被分为了两种,一是大网交互,二是内网交互。这里的大网内网我们就需要和阿里的网络相结合。内网交互就在阿里的相对安全的一个域,不防叫内域,相对的大网交互就在阿里的相对不安全的域和互联网上了,这是一个不可信的不安全的区域,不防叫外域。这种结构就应该和我们的业务相结合,比如我们的10台服务器要彼此访问,同时此访问服务不需要提供给互联网,我们就可以把业务单独配置到内域,如果业务是提供给互联网的,那么配置到外域或者内域和外域。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TCP拦截和网络地址转换 本书将讨论与访问表相关的技术,而非访问表本身。这些技术提供了控制网络中数据流 量的附加功能。这些功能特性会使读者能够加强进出网络报文的附加功能。通过智能地对数 据本身进行操作,例如,可以操纵 I P报文中的源和目的地址,或者给某种通信报文分配较多 的带宽,读者就能够进一步加强进出网络的报文的安全性和控制能力。本章将讨论两种特性: T C P拦截和网络地址转换(Network Address Tr a n s l a t i o n,N AT),它们可以大大加强对网络中 数据流量的控制能力。先介绍 T C P拦截,并讨论其特性以及它是如何在网络中实现的。还将 介绍有关T C P拦截的所有配置和调试命令。在 T C P拦截这一部分,最后给出几个使用该特性的 示例。之后,介绍 N AT的整体概念,包括 N AT的引入、 N AT特性以及如何将其用于网络中。 最后将讨论有关N AT的配置和调试命令,并介绍许多详细的示例。 8.1 TCP拦截概述 T C P拦截(TCP intercept)从IOS 11 . 3开始引入,现在的所有路由器平台都有该功能。设 计该特征的目的是防止 S Y N攻击内部主机(第 7章已简要地讨论了 S Y N攻击)。S Y N泛洪攻击 是简单的。 T C P三路握手的第一个报文设置了 S Y N位。当某台设备接收到一个请求服务的初 始报文,该设备响应这个报文,发回一个设置了 S Y N和A C K位的报文,并等待源端来的 A C K应答。如果请求的发出者不作响应,主机就会因为超而结束连接。当主机在等待这个 事务完成,这种 h a l f - o p e n的连接消耗了主机的资源。在等待三路握手资源被耗尽就是攻 击的本质所在。 成千上万个设置了 S Y N位的报文被发往一台主机,以便在设备的侦听端口上建立一个 T C P连接。但是,这些报文中的源 I P地址是伪造的。这些报文中所设置的源地址都是不可达 的地址;在大多数情况下,源地址要么是来自 R F C 1 9 1 8(即,1 0 . 0 . 0 . 0 / 8,1 7 2 . 1 6 . 0 . 0 / 1 5以及 1 9 2 . 1 6 8 . 0 . 0 / 1 6)的未注册地址,要么是不存在的主机地址。从被攻击的主机到初始源 I P地址 主机的返回报文就永远不能到达一个真实的主机。这样,被攻击的主机就永远也收不到完成 三路握手的应答报文。因此,它必然因为成千上万个连接的超而要关闭这些连接。最终, 被攻击的主机资源被耗尽,主机也就没什么用处了。如果发送有足够数量的 S Y N报文,则某 些操作系统也会崩溃,并且需要重启系统。 这就是常见的D o S攻击,这种攻击本身破坏性极强,而且它有也作为更复杂的攻击的一 部分。例如,攻击者知道用户的某台服务器信任来自防火墙外面另一台服务器的报文,则他 会先攻击防火墙外面的那台服务器,并设置一个嗅探程序来查看用户网络报文。如果攻击者 不能攻破防火墙外面的这台服务器,他就无法打破防火墙,或者这他就会尝试获取这两台 主机之间的信任关系。 第一步就是对防火墙外面的这台可信主机发起 S N Y泛洪,以阻止其响应任何新的网络会 话。攻击者而后使用外部服务器的源 I P地址向内部服务器发送报文。内部服务器就会响应该 可信外部服务器的I P地址,但外部服务器会由于 D o S攻击而不能响应内部服务器。攻击者的机 92 C i s c o访问表配置指南 下载 92 C i s c o访问表配置指南 下载 器可能看不到报文,但如果攻击者能够预测内部服务器所用的.. T C P顺序号,就会成功地完成.. T C P的三路握手,从而进一步地攻击到了内部服务器。根据所允许通过防火墙的服务类型,攻 击者可以将对外部可信主机的.. D o S攻击和I P欺骗结合起来,从而对内部主机实施攻击。图.. 8 - 1 说明了这种攻击。 中心问题是.. S Y N泛洪的危险性远不止只是攻破一个单一主机,它可以与其他攻击方法相 结合来攻破网络中的其他主机。 已攻陷的主机 使用源IP地址171.10.1.1 发送报文 信任主机 泛洪 路由器 内部主机 图8-1 对外部主机的DoS攻击。攻击过程分为两个阶段:(1) 用SYN泛洪“麻醉”主机使其不能响应;.. (2) 发送报文到内部主机,并欺骗源IP地址,这样内部主机就会相信来自可信主机的报文 在T C P连接请求到达目标主机之前,.. T C P拦截通过对其进行拦截和验证来阻止这种攻击。 这个特征可以在两种模式上工作:拦截和监视。在拦截模式下(.. intercept mode),路由器拦截 所有到达的.. T C P同步请求,并代表服务器建立与客户机的连接,并代表客户机建立服务器 的连接。如果两个连接都成功地实现,路由器就会将两个连接进行透明的合并。路由器有更 为严格的超限制,以防止其自身的资源被.. S Y N攻击耗尽。在监视模式下,路由器被动地观 察h a l f - o p e n连接(没有完成.. T C P三路握手的连接)的数目。如果超过了所配置的间,路由 器也会关闭连接。访问表则用来定义要进行.. T C P拦截的源和目的地址。.. 8.1.1 开启TCP拦截 开启T C P拦截,有两个步骤是必需的:.. 1) 配置访问表,以开启需要保护的 I P地址。.. 2)开启.. T C P拦截 在第1步中,读者可以使用一个扩展的.. I P访问表。通常指定a n y作为源I P地址,因为我们一.. 第 8章 TCP拦截和网络地址转换 93 下载 般都希望T C P拦截检查所有到达脆弱主机的向内连接。在第 2步中,则真正地开启 T C P拦截特 性。如果第 2步中的访问表没有定义,则 T C P拦截将不会检查任何向内连接。 8.1.2 设置模式 T C P拦截可以在拦截和监视两种模式下工作,缺省为拦截模式。在这种模式下,路由器 响应到达的S Y N请求,并代替服务器发送一个响应初始源 I P地址的S Y N - A C K报文,然后等待 客户机的A C K。如果收到A C K,再将原来的 S Y N报文发往服务器,路由器代替原来的客户机 与服务器一起完成三路握手过程。这种模式增加了路由器的内存和 C P U的额外开销,并且增 加了一些初始会话的延。 在监视模式下,路由器允许 S Y N请求直接到达服务器。如果这个会话在 3 0秒钟内(缺省 值)没有建立起来,路由器就给服务器发送一个 R S T,以清除这个连接。路由器等待的间 是可以配置的。其模式可以使用下面的命令设置: 缺省模式是i n t e r c e p t。 8.1.3 主动门槛值 当一个路由器因为其所定义的门槛值而确认服务器正遭受攻击,路由器就主动删除连 接,直到 h a l f - o p e n的连接值降到小于门槛值。首先关闭的是最早的连接,除非使用了“ ip tcp intercept drop-mode random”命令。当所设置的门槛值被超,路由器进行下面的动作: 1) 每一个新的连接导致一个最早的(或随机的)连接被删除。 2) 初始的重传超间被减少一半,直到 0 . 5秒。 3) 如果处于监视模式,则超间减半,直到 1 5秒。 有两个因素用来判断路由器是否正在遭受攻击。如果超过了两个高门槛值中的一个,则 表明路由器正遭受攻击,直到门槛值已经降至两个低门槛值以下。下面显示了有关的参数及 其缺省值,并对其加以简单描述。 1) ip tcp intercept max-incomplete high number 11 0 0 在路由器开始删除连接之前,能够存在的 h a l f - o p e n连接的最大数目。 2) ip tcp inercept max-incomplete low number 900 在路由器停止删除h a l f - o p e n连接之前,能够存在的最大 h a l f - o p e n连接数目。 3) ip tcp intercept one-minute high number 11 0 0 在路由器开始删除连接之前,每分钟内能存在的最大 h a l f - o p e n连接数目。 4) ip tcp intercept one-minute low number 900 在路由器停止删除连接之前,每分钟内能存在的最小 h a l f - o p e n连接数目。 h a l f - o p e n连接总数与每分钟 h a l f - o p e n连接的数量比率是相联系的。任何一个最大值到达, T C P拦截就被激活并且开始删除 h a l f - o p e n连接。一旦T C P拦截被激活,这两个值都必须下降到 T C P拦截的低设置值,以便停止删除连接。 8.1.4 其他命令 还有一些其他有用的命令可用于检查有关 T C P拦截的信息。下面给出了这些命令,并附 94 C i s c o访问表配置指南 下载 94 C i s c o访问表配置指南 下载 带了一个T C P拦截的简单示例: 下一节将介绍使用上述格式的.. T C P拦截的详细示例。.. 8.2 TCP拦截应用:示例1 在本例中,某公司使用一台路由器,将其一个E t h e r n e t连接到内部.. L A N,并将一个串行接 口连接到一个I S P。在E t h e r n e t上有一台.. We b服务器,其所用的.. I P地址为1 9 8 . 5 0 . 1 . 1 0 0,并且希 望使用.. T C P拦截功能来保护该服务器。该路由器是一个低端服务器,所以我们希望:在能够 监视进来的T C P连接的同,尽可能多地保留资源(见图.. 8 - 2)。 服务器 工作站 内部网络 客户路 由器 提供者的 路由器 拥有198.50.1.100目的地址的 报文被TCP拦截所监视 图8-2 网络方案:示例1 8.2.1 解决方案 8.2.2 分析 在本方案中,先定义访问表.. 1 0 1,用以指出需要查看的报文,这些报文是到达.. 1 9 8 . 5 0 . 1 . 1 0 0的报文。而后定义.. T C P拦截命令,并将访问表.. 1 0 1用于匹配被监视的报文。还定 义了T C P拦截的操作模式是监视模式,这会比缺省的拦截模式使用更少的路由器资源。这些.. 第 8章 TCP拦截和网络地址转换 95 下载 步骤就是启用T C P拦截保护We b服务器的所有操作。 8.3 TCP拦截应用:示例2 在本例中,公司与示例 1中的公司相同,使用一台路由器,将其一个 E t h e r n e t接口连接到 内部L A N中,并将一个串行接口连接到一个 I S P。但本例中公司不是使用一个简单的 We b服务 器,而是使用一组 We b服务器,其 I P地址从1 9 8 . 5 0 . 1 . 1到1 9 8 . 5 0 . 5 0 . 1 0 0。在本网段中不再使用 其他的I P地址。我们希望使用 T C P拦截来保护所有的 We b服务器。由于使用了一台高性能路由 器,所以路由器资源并不是关键因素,我们有 1 0 0台We b服务器,并且期望有大量的 T C P请求 进来(见图8 - 3)。 目的地址198.50.1.1到198.50.1.100 的报文被TCP拦截所监测。 图8-3 网络方案:示例2 8.3.1 解决方案 8.3.2 分析 在这个方案中,定义了访问表 1 0 1,用来指定匹配目的 I P地址的范围在 1 9 8 . 5 0 . 1 . 0到 1 9 8 . 5 0 . 1 . 1 2 8之间的所有报文。注意到匹配上的地址比实际使用的地址要多,因为 We b服务器 的I P地址只用到 . 1 0 0,但这也不会产生任何问题。而后我们定义 T C P拦截命令来指定访问表 1 0 1用于匹配 T C P所监视到的报文。我们还改变了 T C P拦截的缺省阈值设置,因为我们期望在 大量的 We b服务器中应能够在任何刻都有大量的 S Y N请求。我们保留拦截模式的缺省值, 因为有足够的资源来管理每个 T C P连接。 至此已介绍完了T C P拦截。下一节将讨论网络地址转换( N AT)。 8.4 网络地址转换概述 网络地址转换可以动态改变通过路由器的 I P报文的内容,以便修改报文的源 I P地址和 96 C i s c o访问表配置指南 下载 96 C i s c o访问表配置指南 下载 (或)目的I P地址。离开路由器的报文的源地址或目的地址会转换成与原来不同的地址。这种 功能使得管理员可以隐藏内部网络的 I P地址,并要求路由器可以执行 N AT。这项对于那些使 用来自 R F C 1 8 1 9的未注册地址空间的公司是必需的,或者对于那些为其他公司进行 I P注册的 组织也十分有用。 8.4.1 特征 N AT可以用来修改I P报文头中的源 I P地址和目的 I P地址。I P校验和由N AT处理过程自动进 行修改。有些应用程序将源 I P地址嵌入到了I P报文的数据部分中,所以需要对报文进行修改。 对于这些应用程序, N AT进程也必须修改报文的数据部分,以匹配 I P头中已修改过的源 I P地 址。N AT的C i s c o版本可以处理许多的应用,这些应用的报文数据部分包含 I P地址。C i s c o版本 也允许共享负载的T C P流量,这可以通过允许对单个 I P地址的T C P请求来实现。这些特性将在 本章后面介绍。 在诸如I n t e r n e t,或不同组织互连的管理域边界上, N AT使用得十分普遍。某些组织虽然 申请了一些地址空间,但上网主机的数目超过了 I P地址的数目,此 N AT就十分有用。没有 注册的地址可以在内部使用,而注册地址只用于报文与外部网络通信。 N AT处理过程对于源 端和目的端主机都是透明的。 8.4.2 局限性 尽管N AT是一个很有用的工具,它还是有一些缺陷。 N AT所面临的最主要的困难在于: 有些应用程序将源I P地址嵌入到了I P报文的数据部分中。这样,报文的源 I P地址在经过N AT的 转换之后,就与报文数据部分的 I P地址不匹配。如果I P头中的源I P地址不匹配报文数据部分的 源I P地址,则这些在报文的数据部分嵌入 I P地址的应用程序不能正常工作。 C i s c o实现的N AT 能够处理许多将 I P地址包含在报文数据部分的应用程序。一个特别例子是 N e t B I O S会话服务。 N e t B I O S服务用于 Windows NT,所以它在数据网络中应用得很普遍。 C i s c o可以支持全部的 N e t B I O S服务。表8 - 1列举了C i s c o目前所支持的应用。 表8-1 Cisco NAT所支持的应用 任何非源和目的的T C P / U D P报文 在I P报文的数据部分中的I P地址 I C M P F T P T C P上的N e t B i o s(除了会话服务) R e a l A u d i o White Pines CUSeeMe S t r e a m w o r k s DNS “A”和 “ P T R”查询 H . 3 2 3① N e t M e e t i n g① V D O L i v e V x t r e m e ①在IOS 12.0.1或更高版本中支持。 Cisco NAT不支持表 8 - 2中的应用。如果读者要使用这些应用,就要知道当路由器执行 下载下载 第 8章 TCP拦截和网络地址转换 97 N AT它们很可能工作不正常。 表8-2 Cisco NAT不支持的应用 I P组播 路由表更新 D N S域的迁移 B O O T P Talk, ntalk S N M P N e t S h o w 8.5 NAT的术语 讨论N AT,要用到几个术语: 1) 内部本地地址( inside local address)——分配给内部网络上主机的 I P地址。这些地址 通常只有内部主机知道。 2) 内部全局地址(inside global address)——分配给内部主机的以用于 N AT处理的地址; 这种内部主机的地址可以被外部主机看到。 3) 外部本地地址( outside local address)——分配给外部主机的以用于 N AT处理的I P地 址;这些外部主机的地址可以被内部主机看到。 4) 外部全局地址(outside global address)——分配给外部网络上主机的 I P地址。这类地 址可以被外部主机知道,但不能被内部主机知道。 内部地址被内部网络所使用,这些地址可能要进行转换。外部地址被外部网络所使用, 也可能需要进行转换。术语“本地( l o c a l)”指的是其地址可以被内部主机看到。而术语“全 局(g l o b a l)”指的是地址可以被外部主机看到。注意,如果外部地址没有经过 N AT转换的话, 外部本地地址和外部全局地址可能是一样的。也就是说,外部主机地址在外部网络和内部网 络上可能是相同的,而实际情况也是如此。 理解这些术语的简单方法是抓住其第一个词语:内部或外部,它反映了报文的来源。内 部本地地址(inside local address)和内部全局地址(outside global address)这两个术语都表 明报文是来自内部网络的。第二个词语,本地或全局,则表明地址的可见范围。本地地址是 在本地网络中可见。全局地址则在外部网络上可见。这样,一个内部本地地址来自内部网络, 并且只在内部网络中可见。由于这些地址是在内部网络中,并且只对内部设备可见,因此不 需要进行 N AT操作。相反地,内部全局地址来自内部网络,但却在外部网络中可见。这些地 址一般都要进行N AT操作。 8.6 启用NAT 在路由器上启用 N AT功能需要了解几个命令。首先,读者需要确定在哪个接口上启用 N AT,以及该接口是内部接口还是外部接口。通常,连接到用户内部网络的接口是 N AT内部 接口,而连接到外部网络,例如 I n t e r n e t的接口,是N AT外部接口。这些约定很重要,因为在 后面将要介绍的其他N AT命令配置过程中要参考这些约定。每种接口命令的语法如下: 98 C i s c o访问表配置指南 下载 98 C i s c o访问表配置指南 下载 示例: 在确定启用 N AT的接口之后,接下来就要确定内部全局地址。根据已有的定义,具有这 些地址的报文从内部网络流出到外部网络以后,报文的地址在外部网络上是可见的。这通常 是转换地址。 地址转换可以是动态的或静态的。如果我们不关心哪些内部本地址应该转换为哪些内部 全局地址,则可以允许路由器从地址缓冲池中选取一个可用的地址。使用 ip nat pool命令来定 义该地址缓冲池: 示例: 注意,上述这些命令是等价的。另外我们已定义了将从 . 1到. 5 0的地址放在内部全局地址 缓冲池中。即使我们指定将掩码用于整个子网, < s t a r t - i p >和< e n d - i p >将地址范围限制在 . 1 到. 5 0之间。 定义了 N AT池之后,当需要将一个内部本地地址映射为内部全局地址,路由器就从池 中取出第一个地址项。用户不能事先指定取池中的哪个地址。如果需要指定映射的 I P地址, 则需要使用静态映射。我们在后面提供了相关的示例。 在ip nat pool命令的语法中, r o t a r y关键字用于一个可用的内部本地 I P地址池,以将其中 的内部本地 I P地址映射到相同的内部全局地址。该关键字是很有用的,例如,读者拥有一个 繁忙的We b站点,并且希望多个服务器响应对同一 I P地址的We b请求,就应该使用该关键字。 我们将在后面给出示例。 一旦创建了内部全局地址池,读者就需要指定允许哪些报文获得池中的地址。这可以使 用ip nat inside source命令来完成。读者也可以在内部本地和内部全局地址间指定静态映射。 这两种方法都可用命令 ip nat iside source来实现,如下所示: 示例: 当使用 l i s t关键字,该命令允许那些匹配访问表 l i s t的报文可以从名为 n a m e的N AT池中 获取地址。o v e r l o a d关键字启用端口地址转换( Port Address Translation, PAT)。通过在N AT转 换表中维持 T C P / U D P端口信息和 I P地址信息, PAT允许将多个内部本地地址转换为一个单一 的内部全局地址。当内部全局地址数目有限,这种特性十分有用。单一的 PAT地址可以与 第 8章 TCP拦截和网络地址转换 99 下载 N AT外部接口的I P地址相同,这在公司只有一个来自 I S P的可用地址十分有用。在大多数的 配置中,路由器所连接的 I n t e r n e t必须具有一个全局可路由的 I P地址,因此使用与 PAT相同的 地址是有用的。这种情况下还可以使用一种语法格式: 读者也可以将外部全局地址转换为外部本地地址,这在相互连系的公司之间各自所使用 的外部地址存在重叠是十分有用的。例如,如果两个公司使用 RFC 1918中重叠的地址,例 如1 0 . 0 . 0 . 0 / 2 4网络,则转换外部全局地址的语法如下: 示例: 这些命令的示例,将在后面介绍。 8.7 其他命令 在路由器上配置 N AT,应该了解一些其他命令。首先,可以使用命令来配置几个超 值,用以节省地址和路由器内存空间。这里每个 N AT转换都需要一定的内存空间。如果不使 用端口地址转换,只使用如下的一个命令即可: 超间的单位是秒,缺省值是 2 4小或者3 6 4 0 0秒。在需要大量 N AT转换的环境中,最 好将此超值设为 1 ~ 2小,或者更小,因为路由器可能没有足够的内存来使用。如果使用 PAT,则还需要其他的命令,这路由器要查看其 N AT表中的端口号和I P地址(注意,如果不 使用PAT,则不会查看N AT表中的端口号)。要启用PAT功能,可使用如下的定器: 这些值大多数都是含义自明的。 f i n r s t - t i m e o u t表示在路由器看到 F I N或RST TCP报文之后 的超值。p o r t - t i m e o u t值用于T C P和U D P。s y n - t i m e o u t值在看到SYN TCP报文启用。这些 超值中绝大多数都很小,一般是几分钟,可以使用其缺省值。例外的是 T C P,其超值为 2 4小。如前面所述,我们希望 T C P超值是1 ~ 2小,或者更低。 如果使用PAT,随着计数器的增值计数, N AT表中的不活跃表项只能存在很短一段间。 例如,即使 T C P超值为2 4小,如果在 N AT转换中出现了 F I N或R S T报文,则表项会在 1分 钟内被删除。由于正常终止的会话能看到一个 F I N或R S T报文,因此只有那些非正常结束的 T C P连接才会在N AT表中保留一段间。这就是我们建议使用较低的 T C P超值的原因。非正 常结束的连接在N AT表中转换使用较小的超值。 100 C i s c o访问表配置指南 下载 100 C i s c o访问表配置指南 下载 除了超命令外,还有其他一些有用的命令。下面给出每个的简短描述和示例输出: 另一个极有用的其他N AT命令是: 该命令用于消除.. N AT表中的转换,这对于调试诊断有用。在后面的示例中,将不再提及 这睦命令,以免重复,但读者最好熟悉它们并在自己的应用中查看其输出。下一节将给出使 用N AT的几个详细示例。.. 8.8 NAT应用:示例1 在本例中,某公司使用一台具有两个E t h e r n e t的路由器。.. E t h e r n e t 0连接到内部网络,而.. 第 8章 TCP拦截和网络地址转换 101 下载 E t h e r n e t 1则连接到一个L A N网段。公司与其I S P的路由器共享该网段。在内部网络中,公司使 用1 0 . 0 . 0 . 0 / 2 4地址空间中的地址。公司为自己提供一个 I P地址或1 7 1 . 1 0 0 . 1 . 0 / 2 4。公司路由器 的接口使用 I P地址 1 7 1 . 1 0 0 . 1 . 1,而 I S P路由器接口则使用 I P地址 1 7 1 . 1 0 0 . 1 . 2,而将那些从 1 7 1 . 1 0 0 . 1 . 0 / 2 4开始的其余地址留给 N AT转换。公司希望在路由器上使用必要的命令,以使其 内部用户能够使用 I S P所提供的地址空间中的有效,全局可路由的地址,以访问 I n t e r n e t(见图 8 - 4)。 外部网络 内部网络 客户路由器 提供者的 路由器 图8-4 NAT应用方案:示例1 8.8.1 解决方案 8.8.2 分析 在该方案中定义了用于 N AT的接口。通过将相应的命令放在每个接口下面,指定该接口 是一个 N AT外部接口或内部接口。这是配置 N AT的第一步。如果读者不将接口指定为一个 N AT内部或N AT外部接口,或者指定的不正确,则 N AT就不能正确工作。如果不定义 N AT接 口,N AT根本不工作,并且debug ip nat detail命令也不会输出任何结果。如果读者已定义了所 有其他的N AT命令,但N AT还是不工作,则确认每个接口下面的所放的 N AT命令是否合理。 在每个接口下面定义了合适的 N AT命令之后,就可以定义存放内部全局地址的 N AT池。 我们定义的起始 I P地址是1 7 1 . 1 0 0 . 1 . 3,而结束地址为 1 7 1 . 1 0 0 . 1 . 2 5 4。我们不使用. 1和. 2地址是 因为这两个地址分别用于用户路由器和 I S P路由器。由于这两个地址也与用户路由器上的 E t h e r n e t 1接口所在的子网是同一子网地址,用户路由器将使用自己的 M A C地址回答来自 I S P 路由器的 A R P请求。这允许I S P路由器从N AT池中解析出I P地址,并使用从 N A P池中取出的目 的I P地址将报文发送用户路由器。 102 C i s c o访问表配置指南 下载 102 C i s c o访问表配置指南 下载 注意,M AT地址池并非必须来自与用户路由器接口上所配置的子网相同。下一个示例显 示了一个类似的配置,其中 N AT池不是该用户路由器地址空间的一部分。 8.9 NAT应用:示例2 在本例中,公司使用一台具有两个接口的路由器,分别是以太网和串行接口。 E t h e r n e t 0 连接到内部网络,而串行接口则通过点到点协议( P P P)链路连接到 I S P路由器。在内部网络 中,公司使用的地址来自地址空间 1 0 . 0 . 0 . 0 / 2 4,该地址空间在 I n t e r n e t上是不可路由的。公司 自己使用I P地址范围1 7 1 . 1 0 0 . 1 . 0 / 2 4。到I S P的P P P链路使用来自 1 9 8 . 5 0 . 1 . 0 / 3 0子网的地址。公 司希望在路由器上配置合适的命令,以便内部用户可以通过使用有效的、全局可路由的地址 访问I n t e r n e t。这些地址应该是来自 I S P所提供的地址空间 1 7 1 . 1 0 0 . 1 . 0 / 2 4。我们打算与上游的 I S P路由器交换O S P F(开放式最短路径优先)更新信息。从而可以从该路由器接收缺省路由, 并将其通知I S P路由器,该路由正在公司路由器上使用(见图 8 - 5)。 池 串行链接 提供者的路由器 内部网络 用户路由器 图8-5 NAT应用方案:示例2 8.9.1 解决方案1 8.9.2 解决方案2 第 8章 TCP拦截和网络地址转换 103 下载 8.9.3 分析 在解决方案1中,先定义了用于 N AT的接口,并通过将合适的命令放在每个接口下面,来 指定该接口是一个 N AT内部或外部接口。在每个接口下面定义了适当的 N AT命令之后,再定 义内部全局地址所在的 N AT池。定义全局地址的起始 I P地址为 1 7 1 . 1 0 0 . 1 . 1,结束 I P地址为 1 7 1 . 1 0 0 . 1 . 2 5 4。我们使用除. 1和. 2地址之外的所有主机地址,是因为这些主机地址都不用于路 由器接口。通过在 N AT池中使用与用户路由器接口所用子网不同的子网,可以获得一些主机 地址。但这又引入了一个新的问题。 在前一个示例中, I S P路由器直接连接到分配给 N AT池的子网上。这种情况下, I S P路由 器只发出一个 A R P请求,以请求 N AT池中的单个 N AT地址,而用户路由器则使用自己的 M A C 地址来响应,此工作正常。但是,上游的 I S P路由器并不直接连接到 N AT地址池子网 1 7 1 . 1 0 0 . 1 . 0 / 2 4,所以必须告诉它如何通过路由协议或静态路由的方法到达 N AT池所在的子网。 在解决方案1中,我们启用了O S P F并且为1 7 1 . 1 0 0 . 1 . 0 / 2 4重新分配一个静态路由到 O S P F中。上 游的I S P路由器会接收到该路由,并且将所有目的地址为 N AT池中地址的报文转发到我们的路 由器中。 可选地,I S P可以在其路由器上安装一个静态路由,用来将所有 1 7 1 . 1 0 0 . 1 . 0 / 2 4网络的报文 指向我们的路由器。但是,我们希望:当 N AT池地址不是直接从相连的子网上取出,能够 显示出路由信息的传播路径。注意,我们将整个 1 7 1 . 1 0 . 1 . 0 / 2 4子网的 N AT地址表置为 n u l l 0。 由于我们要指定 N AT地址表中的某些表项,而非整个 1 7 1 . 1 0 0 . 1 . 0 / 2 4子网,这路由器并不丢 弃这些报文,而是将它们转发到 N AT表中所定义的内部主机上。 在解决方案 2中,我们使用了另一种方法来通知 I S P路由器有关 N AT池的信息。这种方法 是创建一个闭环( l o o p b a c k)接口,并给其分配一个 N AT池中的 I P地址。通过将 n e t w o r k 171.100.1.0 0.0.0.255 area 0语句包含在我们的 O S P F路由进程下面,可以将该闭环地址作为 O S P F路由的一部分。注意,我们将 . 1地址从N AT池中删除,而使用主机地址 . 2作为N AT池的 起始地址,这样就减少了 N AT池地址和用于闭环接口上的 I P地址重叠的可能性。另外,我们 在闭环接口下面使用接口命令 ip ospf ntwork point-to-point。一般地,O S P F将闭环接口看成是 一个 O S P F桩( s t u b)网络,并且将接口的 3 2位表项作为路由,而非整个子网。在本例中, O S P F进程会发送 1 7 2 . 1 0 0 . 1 . 1 / 3 2而非表 1 7 2 . 1 0 0 . 1 . 0 / 2 4。在这种情况下,由于需要将整个 104 C i s c o访问表配置指南 下载 104 C i s c o访问表配置指南 下载 1 7 1 . 1 0 0 . 1 . 0 / 2 4子网信息传送给上游的 I S P路由器,所以该地址转换过程不能工作。 O S P F接口 命令告诉 O S P F传送该接口的路由,就像该网络是点到点网络一样,而不像是一个桩( s t u b) 网络。这意味着它将通过 O S P F传送整个 1 7 1 . 1 0 0 . 1 . 0 / 2 4子网信息( ip ospf network point-top o i n t命令在I O S版本11 . 3或更高版本中使用),这两种方法都能正常工作,但使用哪一种则是 读者的偏好问题了。 注意:我们知道一个公司通常会在其路由器和 I S P路由器之间运行边界网关协议 (Border Gateway Protocol, BGP)。在本例中,我们选择了O S P F路由协议,目的是为了 分析ip ospf network point-to-point命令。 8.10 NAT应用:示例3 在本例中,公司与示例 2中的公司相同,但情况稍有不同。这里公司处于 I n t e r n e t环境中, 它决定提供一个能从 I n t e r n e t访问的We b服务器,以便那些浏览 We b的用户能够了解公司。该 服务器位于内部网络中,并且能够从 I n t e r n e t上的主机访问该服务器。这样它将拥有 I P地址 1 0 . 1 . 1 . 1 0 0。由于 We b服务器必须能够通过 I n t e r n e t来访问,所以这个源 I P地址在转发给 I S P路 由器之前,必须被转换成内部全局缓冲池中的地址。我们为公司 We b服务器选择 1 7 1 . 1 0 0 . 1 . 1 0 0作为其转换成的内部全局地址。 如示例2那样,E t h e r n e t 0连接到内部网络,而串行接口则通过 P P P链路连接到I S P路由器。 在内部网络中,公司使用 1 0 . 0 . 0 . 0 / 2 4中的地址,而全局池中的 I P地址范围是 1 7 1 . 1 0 0 . 1 . 0 / 2 4。 在本例中,我们将假定 I S P使用静态路由来找到我们的路由器,其中路由器地址在 1 7 2 . 1 0 0 . 1 . 0 / 2 4地址范围内。并且I S P将该路由传送到I n t e r n e t上(见图8 - 6)。 服务器 内部网络 客户路 由器 串行链接提供者的 路由器 拥有171.100.1.100目的地址的 报文被传输到10.1.1.100 图8-6 NAT应用:示例3 8.10.1 解决方案 第 8章 TCP拦截和网络地址转换 105 下载 8.10.2 分析 如其他示例那样,我们在使用任何其他 N AT命令之前,应先定义 N AT内部和外部接口。 而后需要配置N AT池地址和N AT源列表,以允许能够从池中获得地址。本例与示例 2的不同之 处在于:我们需要为 We b服务器设置I P地址1 7 1 . 1 0 0 . 1 . 1 0 0。另外,必须在内部全局地址和内部 本地地址之间给出静态映射关系。不然的话,就不能保证 N AT表中的 N AT转换会将N AT池中 的特定I P地址映射到 We b服务器。这也意味着无法从 I n t e r n e t上知道应该使用哪个地址才能到 达We b服务器,显然这是毫无用处的。 注意,我们在配置中使用 ip nat inside source static命令,以建立 1 0 . 1 . 1 . 1 0 0和 1 7 1 . 1 0 0 . 1 . 1 0 0之间的静态映射。注意到在本例中 N AT池的语法有些不同。 C i s c o已扩展了 N AT 语法,所以可以拆分 N AT池所用的 I P地址范围。我们定义了两个不同的地址范围:从 1 7 1 . 1 0 0 . 1 . 1到1 7 1 . 1 0 0 . 1 . 9 9,以及从 1 7 1 . 1 0 0 . 1 . 1 0 1到1 7 1 . 1 0 0 . 1 . 2 5 4。所以我们可以将 I P地址 1 7 1 . 1 0 0 . 1 . 1 0 0从N AT池中排除出去,因为我们使用该地址进行静态转换。我们使用 ip nat inside source list命令来定义I P地址,以允许该I P地址从N AT池中获取相应的I P地址。注意,至 此,只使用了标准I P访问表来定义I P地址。也可以使用一个扩展的 I P访问表,在本章后面的示 例中会涉及到。 8.11 NAT应用:示例4 在本例中,公司有一台三端口路由器、一个以太网端口和两个串行端口。每个串行端口 连接到不同的 I S P,而每个 I S P给本公司分配一个独立的 C类地址。 I S P 1为公司分配 1 7 1 . 1 0 0 . 1 . 0 / 2 4;而I S P 2则为公司分配1 9 8 . 5 0 . 1 . 0 / 2 4。公司通过B G P路由协议实现从每个 I S P的 完全路由过程,并且允许路由器将报文转发到具有到达目的地的最佳路由的 I S P上。为了报文 能够从原来发出报文的同一个 I S P路由回来,路由器在发送报文到相应 I S P之前,需要从每个 提供者的地址空间转换外出报文的源 I P地址。发送给 I S P 1路由器的报文,其源地址将被转换 为I S P 1地址空间中的地址;而发送给 I S P 2路由器的报文,其源地址则被转换为 I S P 2地址空间 中的地址。 除了允许内部主机能够从每个相应的提供者地址空间中获得地址,根据所选择的路由器 不同,该公司希望可以从任何一个提供者都能够访问内部的 We b服务器。这样所需的就是将 每个提供者的地址空间中的一个静态 I P地址分配给We b服务器,以便每个提供者都可用于到达 We b服务器的I P地址。换句话说, I S P 1的用户使用来自I S P 1的地址到达We b服务器;而I S P 2的 用户则使用来自 I S P 2的地址到达该服务器。如前面的示例那样,内部 E t h e r n e t使用1 0 . 0 . 0 . 0 / 2 4 地址空间,而 We b服务器的内部本地地址是 1 0 . 1 . 1 . 1 0 0。从I S P 1来看其地址是 1 7 1 . 1 0 0 . 1 . 1 0 0, 而从I S P 2来看则为1 9 8 . 5 0 . 1 . 1 0 0。每个I S P将保证能够使用合适的 D N S表项来将We b服务器名称 106 C i s c o访问表配置指南 下载 106 C i s c o访问表配置指南 下载 解析为每个相应的 I P地址(见图 8 - 7)。 服务器 静态: 静态: 池 池 提供者1的 路由器 客户路 由器 提供者2的 路由器内部网络 图8-7 NAT应用方案:示例4 8.11.1 解决方案 第 8章 TCP拦截和网络地址转换 107 下载 8.11.2 分析 该示例应该是比前面的几个示例要更加复杂些,并且有一些很吸引人的地方。先定义.. N AT内部和外部接口。在本例中,路由器有两条.. I n t e r n e t连接,每条连接分别位于一个串行接 口上,这样我们就需要两个外部接口。接下来是.. N AT池,内部客户使用该池获取内部全局地 址。如前所述,我们有两池地址,每个地址池来自一个提供者。这样我们就创建两个独立的.. N AT池,分别称为.. I S P 1和I S P 2。注意,由于我们使用每个.. N AT池中的。.. 1 0 0来创建We b服务器 的静态N AT映射,每个N AT池都不包含。.. 1 0 0主机。在前面的示例中已经介绍了.. N AT池语句的 语法。 在创建了.. N AT池之后,就需要定义源列表,用以告诉路由器我们允许哪些.. I P地址能够从 池中获取地址。注意,这里使用.. ip nat source route-map命令,而非ip nat source list命令。我们 使用一个路由映射,而不单单使用访问表。这样不仅能够使用.. I P地址来选择.. N AT池,而且还 可以使用诸如下一跳.. I P地址以及路由器的输出接口等此类内容来选择.. N AT池。我们定义了两 个路由映射语句,i s p - 1和i s p - 2。i s p - 1路由映射匹配访问表1和接口serial 0。这意味着如果I P报 文匹配列表1并且目的接口是serial 0,则表明匹配了i s p - 1路由映射。从接口serial 0上离开路由 器的报文流向.. I S P 1,这样就符合了我们的要求。.. i s p - 2路由映射的定义类似。我们的路由器持 有一组来自每个提供者的路由,这将告诉路由器:报文应从哪个接口离开。根据我们的.. B G P 配置,可以从向外的报文中获得一些负载平衡。注意我们定义.. N AT池的方法。.. ip nat inside source route-map语句允许路由器在将报文发送到.. I S P路由器之前,从每个.. I S P地址空间中选择 一个地址。这将会保证当报文返回,它们将沿着原先离开内部网络所用的.. I S P返回。通常 每个I S P只将自己地址空间中的.. I P地址通告给其他提供者。来自.. I S P 1的地址空间的报文将流回.. I S P 1;而来自I S P 2地址空间的报文也将流回到.. I S P 2。 配置的最后一步是允许.. I n t e r n e t上的设备访问公司的.. We b服务器。我们需要在一个内部全 局地址和内部本地地址之间建立一个静态的.. N AT映射。但是,这种情况下,我们需要定义两 个映射,分别用于从两个不同的内部全局地址映射到公司的.. We b服务器。该过程的关键是使 用可选的关键字e x t e n d a b l e。.. e x t e n d a b l e关键字告诉路由器将创建一个扩展的.. N AT映射,该映射是从每个内部全局地址 到单一的内部本地地址的映射;并且它不仅使用.. I P地址,而且还使用源和目的端口。对于从.. N AT内部接口流到.. N AT外部接口的报文而言,动态路由映射表将用于创建扩展的转换操作。 如果不使用e x t e n d a b l e关键字,路由器将不会允许我们将多个内部全局地址映射到一个单一的 内部本地地址。.. 8.12 NAT应用:示例5 在本例中,公司使用一台两接口路由器,一个E t h e r n e t和一个串行接口。其中.. E t h e r n e t 0连 接到内部网络,而串行接口则通过.. P P P链路连接到.. I S P路由器。在内部网络中,公司使用.. 1 0 . 0 . 0 . 0 / 2 4地址空间中的地址,该地址在.. I n t e r n e t上不能路由。公司还提供了.. I P地址范围.. 1 7 1 . 1 0 0 . 1 . 0 / 2 4,用以创建全局可访问的.. We b服务器。公司认为他们将有大量的.. We b服务器连 接,但服务器只是一个低端服务器。并且公司并不打算买更多的机器,因为公司已经花费了 大量资金来购买硬件设备。公司希望只使用少数几台服务器,并且对于外界看来应该就像是 108 C i s c o访问表配置指南 下载 108 C i s c o访问表配置指南 下载 一台服务器一样。换句话说,公司希望发送到一个内部全局地址上的报文能被转换成多个内 部本地地址(见图8 - 8)。 服务器 服务器 服务器 内部网络 客户路 由器 提供者的 路由器 拥有171.100.1.100为目的地址 的报文采用轮循的方法发送到 10.1.1.2-10.1.1.4的机器上 图8-8 NAT应用方案:示例5 8.12.1 解决方案 8.12.2 分析 我们先定义用于 N AT的接口,并通过将合适的命令放在每个接口下面,来确定这些接口 是N AT内部接口,还是外部接口。在每个接口下面定义了合适的 N AT命令之后,接着定义 N AT池。在非本例的情况下,N AT池的We b地址标识了公司所有的 We b服务器的内部本地地址。 注意,在本例中我们使用参数 p r e f i x - l e n g t h而非n e t m a s k。值为2 9的p r e f i x - l e n g t h等价于掩码参 数值2 5 5 . 2 5 5 . 2 5 5 . 2 4 8。再注意 r o t a r y关键字的使用。这表明了我们打算使用 r o u n d - r o b i n策略从 N AT池中取出相应的I P地址用于转换进来的I P报文。 在定义了N AT池之后,我们继续定义将从 r o t a r y池中选中的 I P地址。我们定义一个 i n s i d e 第 8章 TCP拦截和网络地址转换 109 下载 destination list语句,而不使用inside source list语句。其中.. inside destination list语句定义了其.. I P的地址匹配访问表.. 1的报文将使用.. r o u n d - r o b i n策略,将其目的地址转换成.. r o t a r y池中定义的 池地址。在这种情况下访问表.. 1将匹配一个单一的.. I P地址.. 1 7 1 . 1 0 0 . 1 . 1 0 0。这样,具有.. 1 7 1 . 1 0 0 . 1 . 1 0 0目的地址的报文会将其目的.. I P地址修改为:路由器使用轮询策略从.. r o t a r y池中所 取出的地址。这允许使用.. 3个内部服务器来接收目的地址为.. 1 7 1 . 1 0 0 . 1 . 1 0 0的向内报文。所有这 三个内部.. We b服务器将分担发送到该单一全局地址上的请求。着重指出的是路由器不会保证 三台We b服务器都是正常的。如果某台服务器故障,路由器仍会向该服务器发送报文。如果 需要功能更完善的解决方案,则.. C i s c o有一种称为本地导向器(.. Local Director)的产品,它可 以用来确定池中的服务器是否正常工作。对本地导向器的讨论已超出了本书所讨论的范围, 不过读者可以查看.. C i s c o文档,或者与本地的供应商联系来获得这方面的更多信息。.. 8.13 NAT应用:示例6 在本例中,公司使用一台两接口路由器,一个是E t h e r n e t,另一个是串行接口。.. E t h e r n e t 0 连接到内部网络,而串行接口则通过.. P P P链路连接到.. I S P路由器。在内部网络中,公司使用.. 1 0 . 0 . 0 . 0 / 2 4地址范围内的地址。公司已从其供应商那里获得了一个单一的全局可路由的.. I P地址.. 1 7 1 . 1 0 0 . 1 . 1,并且该地址用于路由器的串行接口上。公司使用.. PAT将其所有的内部本地地址转 换成单一的内部全局地址.. 1 7 1 . 1 0 0 . 1 . 1。公司希望提供可以从.. I n t e r n e t访问的F T P和We b服务器, 并且对We b服务器的请求应被送到.. We b服务器所在的地址.. 1 0 . 1 . 1 . 1 0 0,而F T P请求则被送到F T P 服务器所在的地址1 0 . 1 . 1 . 1 0 1(见图8 - 9)。 服务器 服务器 内部网络 客户路 由器 串行链接提供者的 路由器 拥有171.100.1.1为目的地址的 报文基于不同的部分被传输 图8-9 NAT应用方案:示例6 8.13.1 解决方案 110 C i s c o访问表配置指南 下载 110 C i s c o访问表配置指南 下载 8.13.2 分析 先定义.. N AT所用的接口,并通过将合适的命令放在每个接口下面来定义接口是.. N AT内部 或外部接口。通常,在定义.. N AT接口之后,就要定义.. N AT池来指定所用的内部全局地址。但 是,在本例中只使用了一个单一的内部全局地址,并且将该单一内部全局地址用于路由器的.. serial 0接口上。由于只有一个单一内部全局地址并且用于路由器自己的接口上,所以我们不 需要定义N AT池。我们只简单地使用示例中所示的.. inside source list语句即可。所定义源列表 使用路由器接口的.. I P地址,并且超载该单一.. I P地址。该命令允许来自.. 1 0 . 0 . 0 . 0 / 2 4网络的内部主 机访问I n t e r n e t。路由器执行.. PAT来创建T C P / U D P端口的N AT映射。完成该步以后,接下来需 要为内部We b和F T P服务器创建静态映射。 由于只有一个单一的内部全局.. I P地址,因此要根据I P地址以及T C P或U D P端口来定义静态 映射。在本例中,将目的地址为.. 1 7 1 . 1 0 0 . 1 . 1和目的T C P端口为8 0的报文地址转换成.. T C P端口8 0 上的1 0 . 1 . 1 . 1 0 0内部主机地址。我们还将目的地址为.. 1 7 1 . 1 0 0 . 1 . 1和目的T C P端口为2 1的报文地 址转换成T C P端口2 1上的1 0 . 1 . 1 . 1 0 1内部主机地址。这样我们就在不同的内部服务器上提供了.. We b和F T P服务,虽然我们只有一个单一的内部全局地址。注意,由于该命令语法允许指定内 部服务器的I P地址和端口,所以可以在内部提供多个.. We b和F T P服务器。例如,可以创建如下 的静态映射: 该转换操作将所有目的地址为.. 1 7 1 . 1 0 0 . 1 . 1且目的端口为2 7的向内报文的地址转换为.. F T P端 口上的地址1 0 . 1 . 1 . 1 0 2。当然,我们必须保证,外部用户能够知道我们的.. F T P服务器使用非标 准的端口,而大多数的.. F T P客户机都提供这一能力。显然公司可以使用各种不同的端口转换方 法来提供服务,即使公司只有一个全局可路由的.. I P地址。这些方法使Cisco NAT的功能更加强 大。..
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值