浅谈网络安全的经验

1 ) 一切以精准的监控为前提 (简介Prometheus)

谈安全防护和***之前, 一切的前提 先以精准的监控为准 , 采集精度 1s

无论是 企业对***的监控和预警, 还是未雨绸缪的 压力测试模拟 都必须有一个详细的参照物

在这里 给大家推荐一款强力的开源监控工具, Prometheus 普罗米修斯

它是一款开源的,基于数学命令行 和 时间序列数据库的 精密监控工具

其采集精度 理论值可以达到每秒一次采集,结合浮点数的表达形式,非常适用于瞬时突发状况的分析/监控/ 以及报警

接下来 咱们来简单展示展示一下 prometheus的实际操作 (目前搭建在 生产教学的平台上)

实际操作:
无压力后 +压力测试 曲线的快速波动

prometheus如此的强大,但是国内并不普及 原因主要有三个

第一个 要求有一定的数学基础 数学命令行的使用难度较大

第二个 要求对Linux 系统底层工作原理 有一定的认知 不然无法准确添加监控

第三个 英文的问题(国内中文资料很少,中文完整教程就更几乎没有)绝大部分细节资料 都要取自官方站点

CPU时间片分布的理解, 时间片占用的累积

COUNTER类型数据的理解

微分+二分法 得出单位时间速率 , 以比例的形式获取CPU使用率 (理解prometheus提供的数学函数)



2) 谈一谈 从运维的角度 看服务器资源

***的本质是什么? 其实说到底 就是 对服务器现有资源的强力打击 或者说是消耗

那么从我们运维架构的角度出发, 企业中的服务器资源的又有哪些分类呢?

第一类:服务器物理层面的 资源

这个是最好理解的,无非就是 CPU / 内存 / 硬盘 /,这些都是作为计算机物理层面上的 有限资源

第二类:OS操作系统层面的 资源

我们就以运维的核心OS Linux为基准

那么操作系统的资源 简单举几个例子 , 端口数量,连接数 , TCP列队数, 文件句柄数 , 进程调度/优先级 , 等等

第三类: 网络资源

这里主要指的是网络带宽,这是非常珍贵的资源,后面也会具体的讲解

上面提到的三种类型的资源 都是作为一个集群架构的有限资源 ***的本质其实就是对资源的消耗

资源的消耗殆尽 最终会致使服务器无法再响应用户的请求,这也就是 咱们常说的 Dos 拒绝服务***

另外,如上提到的三大类的资源 彼此并不是独立的 之间实际上都有着 大量的连带关系

现如今都是互联应用时代,一切都走网络,所以 网络资源的消耗 自然是不言而喻的

就算我们暂时忽略掉 IP包在路由途中的过程, 就算是直接到达了 我们的服务集群

在我们的集群中 也会发生一些列的 连带其他资源的消耗

如下图(01)所示, 比如 一个HTTP的请求到达之后,按照标准七层协议的框架 由下至上 从物理层一直到应用层 都会串联起来

网卡会进行IP包重组,TCP/UDP会进行传输层的连接建立,连接的建立必定又会继续向上 消耗系统的 CPU/RAM/IO , 端口,连接数,列队数 , 文件句柄数 ,等等

任何一种资源 如果出现瓶颈 都会牵制其他的资源

3)谈一谈 随着年代时间的变迁 ***方和防守方的变化

方来说, 逐渐由高难度的 4层 , 逐渐转变为 傻瓜式的 7层
例如:后面要讲到的 基于4层的 系统漏洞
(主要指的是TCP/IP 三层和四层协议)
这种 要求者 不但要精通TCP/IP协议,还要掌握系统底层知识,以及代码的功底

从流量要求很小的Dos, 逐渐变成并发量大的Ddos (Distributed dental of service)
原本 在操作系统(主要指的是Linux)内核较低时,服务器性能较低时 , 少量的即可造成系统瘫痪
随着OS和服务器的提升,
流量 有着越来越高的要求

从早期的 物理层 系统层,造成第一类 第二类资源的消耗,逐渐过度到 网络带宽的消耗

另外就是费用问题,攻方和守方的费用 其实都是一直在增长的



4) 谈一谈老式的四层*** 以及简单的模拟实验 (以著名的 Death Ping 和 SYN Flood)

  • OSI七层模型 简单介绍 图(02)

经典的OSI七层模型 , 我在教学中 又把它称为 U型结构的七层模型

因为数据流的走势 是从右到左, 从上到下, 从下到上 , 从打包 到 拆包的过程

我们后面要介绍的几种,主要是集中在 第三层,第四层 (统一称为四层), 第七层(5 6 7可以合并为一层 统一为应用层***)

Distributed Dos

  • PING***基本原理

一个ping命令也能发起? 感觉有点不可思议, 其实在早期 这个并不稀奇 (早期的中美大战 主要就是采用这样的方法)

我们平时使用ping 不过就是为了检查网络通不通而已, 其实PING到了底层之后,有很多的细节 只不过没有看到而已

根据IP协议的规定,IP包在送出时会被分包,中间经过的路由器也会分包,但是包的重组需要由接收端完成

IP协议包头中 有对IP包大小的限制(65535 TL字段, 包头+数据实体) ,包的重组 又需要借助Linux的内核才能完成

早期的内核 是假设IP包的大小 不会超过最大限制, 当***者 发送一个超过TL最大限制的IP包后,在分片重组的时候,系统给包重组所分配的内存区域是固定的

且只有在所有包重组之后,才能识别其整个的大小,所以说中途在重组过程中 每一个包看上去 都很正常(分片包各自有包头,只标记这个分片的大小)

一旦超过最大分配,系统只能将多出来的分片 临时写入到 内存当中的其他正常区域, 这个就是所谓的 内存溢出方式的***, 这种溢出 并不是借用 而是一种病态的占用

会把正常区域内的数据 磨掉, 如果是关键的数据,就有很大可能性 会造成系统的崩溃

但是随着 Linux内核的不断更新,这种致命的漏洞已经被填补起来了, 现如今如果你想简单通过PING命令 或者基于IP/ICMP协议的程序 发起这样的*** 很难突破内核的保护

另外:有的朋友 曾经问过我 这样的一个问题, 你说 IP包超过最大限制 就会出问题,那么平时我们传一个文件 动不动就是几百兆上G,也没看到出问题啊?
这个问题提的很好,请看上面的 第二张图

实际操作:

[[email protected] ~]# ping server02 -A -s 65550

  • SYN半连接***

TCP的三次握手 , 这个我们都很熟悉, 所谓的SYN半连接***

就是当接收方 单方向确认了ACK后(接收方准备好数据传输了),发起方不再发送最后一次的确认 致使接收方无法继续推进握手的流程

接收方在收不到最后一次确认的情况下,会进行重试,进行等待 ,另外如果***方加上了IP欺骗,那接收方连接会阻塞

其实 不管是 接收方的 重试/等待/阻塞 这些其实都不是真正造成 Dos拒绝服务的本质

真正造成拒绝服务的,是接收方所能发起的 SYN连接数量的列队限制

在尚未进行内核调优的Linux系统中,默认能开启的SYN连接数 最大是256个

一旦超过了这个限制,就很难再开启SYN,而正常的用户HTTP请求(或者其他的四层请求)又必须建立在以SYN开头的连接之中

那么这个时候,***者的目的就达到了,正常用户的大量请求 接收端都不能再分配SYN 最终造成 拒绝服务

实际操作: (SYN被轻易打满了以后 也并不会出现 拒绝服务的状况)

5) 谈一谈现如今的七层*** Ddos

我们之前说过了, 高难度的抓系统漏洞的四层, 效果越来越不明显了,因为对者本身有着很高的要求

于是乎,一种傻瓜式的DDos方式应运而生, 这就是基于七层(应用层)的Ddos, 也就是现在 沸沸扬扬的CC***

CC 其实也是DDos的一个分支,其原理并不复杂,通过大量发送模拟正常用户的请求(一般HTTP请求 居多) ***接收端的资源
带宽资源严重被消耗,网站瘫痪,CPU、内存利用率飙升,主机瘫痪 瞬间快速打击,无法快速响应

除此之外,我们也知道,对于的发起方,也有很高的资源要求,包括主机配置,网络带宽,系统优化 等等
这些都是要钱的,所以
方如果自己建立集群发起*** 是赔本赚吆喝

所以,现如今的CC Ddos,更多的是寻找各种宿主机,侵入之后,以它们作为自己的跳板 对目标发动***
这也就是 俗称的 肉鸡

6) 从运维架构师的角度 提出 埋点式七层握手 尽力免费防御DDOS***

  • 先从线上架构说起

如上图所示 这就是比较经典的 线上五层架构, 虽说不是所有互联网企业 都是按照100%的方式搭建

但是 基本的线上框架 现阶段始终逃不出这种布局

不管是正常请求,还是***请求, 都是从左至右进入

图中越向右 各种资源的开销越大,连带性也越多,反之则否

所以 我们需要尽可能的 不让***流量 向右打过来,控制在第一层 第二层的范围

这就是左推式 优化方案(一样适用于 安全防护)

  • 反向代理的重要性

很多朋友 都知道反向代理的概念, 但是并不是十分清楚其实质作用

我们就基于LNMP的环境进行讲解, HTTP的请求道来后,需要先经过 nginx 处理HTTP协议 以及静态内容

如果请求中有动态内容,则反向代理到 PHP(代码层)进行处理

关键也就在于此处

Nginx可以做七层负载均衡,其实负载均衡的基本功能 也是归属在反向代理之中

反向代理的资源消耗 要远远小于 PHP代码层的资源消耗 (Nginx高并发处理,资源开销很小)

所以,我们希望的就是 当***请求到来时,最多控制在反向代理为止,不让其连带到 PHP代码层

尽可能切断这种 关联

但是 这种切断 需要判断请求的真伪 这是一个疑难问题

  • 如何甄别CC Ddos*** 值得我们去考虑

首先,之前也说过 CC Ddos*** 是模拟真实用户请求

想通过很简单的方法,例如 用防火墙加个 IP黑名单的做法 是行不通的

IP数量庞大,且动态改变 或者IP伪装

既然CC***处在七层,那么我们应对的方案 也需要在七层中 去想办法

我这里分享的一种 甄别的方法 ,叫做 埋点七层摸手

什么意思呢?

请参考如下这张图

我们在七层的基础上(也就是HTTP) 订制特定的URL参数来达到防御***的目的

URL的参数在客户端产生,而用户其实是不知情的

客户端的开发人员 和 服务端的运维开发人员 是先商量好几个参数 并且通过几个参数之间的运算得到一个md5值

这个md5值 会在URL中附带上,并在服务端检验

另外,参数需要实时变化,不可以一直使用一个死的固定的值(不然 一旦被***截取到一次 就无效了啦)

除此之外,还可以在URL参数中 额外再增加一项"暗扣"的参数, 这个参数不会直接出现在URL中,但是会加入到最终md5值得计算里
这个"暗扣" 客户端开发人员 和运维开发可以事先商量好 放在自己的代码里

一些优化 , 轮询取值 适应大量API参数位置 也防止***者猜出参数
缺点: LUA代码越多 消耗理论上也越多

那么今天的网络安全分享 就到这里啦 ^_^
更多的 还请关注大米的博客后续哦 谢谢

原文地址:http://blog.51cto.com/13529208/2331907

时间: 2024-10-09 08:07:20

浅谈网络安全的经验的相关文章

浅谈APP测试经验

近年来,随着智能手机兴起,很多App软件不断涌起.那今天我浅谈一下本人在工作如何测试App软件与经验. 一.App三种开发模式介绍(测试App时,必须要先了解您测试的App是用什么模式开发的) 1.Native APP 2.Web APP 3.Hybrid AP 对App开发模式不清楚的人.请自行百度. 二.通用App测试点(这些点必须测试) 1. 使用App时,手机耗电情况: 2 .App占用手机内存情况: 3 .App安装包的大小: 4. 使用App时,流量消耗情况: 5 .App在WiFi

浅谈电子政务门户建设选型经验

我县是河北东北部的一个县城,经济不发达,信息化建设很靠后,两年前刚到政府单位上班的时候,政府的门户网站很单调,数据基本上也是空的,作为一个旅游大县,门户的网站建设是很有必要的,是宣传旅游和招商的重要途径.虽然河北整体的信息化水平就不高,但是信息化建设肯定是以后各级政府发展的重要方向,通过向上级领导汇报信息化建设的重要性以及门户网站现有的不足和以后的发展趋势,最终确定要把门户的信息化建设提上日程. 通过网上查找资料以及实地考察公司和产品,最终选定了西部动力的产品,主要考虑到以下几方面很符合我们将来

经验浅谈,新人如何快速上手一个新项目

经验浅谈,总结下自己如何接手一个新项目: 1.向同事问清楚当前的开发环境,而且现今的发展,要区分64位和32位2.搞明白当前项目的运行环境,如果是多项目的话,要搞清楚依赖关系3.让同事帮忙搞定本机可运行项目的环境4.当环境都弄好.项目能启动后,开始代码之旅,也是最重要的一步. a)看配置.通看一遍配置文件,了解当前项目用了哪些框架,做到心中有数 b)学业务(重点*).了解各页面间的跳转及异步请求,写一个临时Filter,拦截/*的所有请求,在doFilter()方法中,打印出每次请求的路径( S

浅谈c语言typedef 与结构体指针(个人小经验)

 #include<stdio.h> #include<string.h> typedef struct emp{ char sex[8]; char name[15]; int age; }*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针 /*typedef struct emp{ char sex[8]; char name[15]; int age; }pi,*emp;//为了程序的可读性最好不要这样声明*/ int m

[Android] [Java] Process 创建+控制+分析 经验浅谈

无论是Android亦或者Java中或多或少需要调用底层的一些命令,执行一些参数: 此时我们需要用到Java的Process来创建一个子进程,之所以是子进程是因为此进程依赖于发起创建请求的进程,如果发起者被Kill那个子进程也将Kill. 对于Process相信使用过的朋友一定不会陌生,它具有如下特点: 1.创建简单 2.控制难 3.容易导致无法创建子进程 4.如果是多线程那么很有可能造成内存溢出 以上现象如果你只是偶尔使用一次,创建一个进程或许你什么都没有感觉到,但是如果你使用了多线程,进行了

浅谈安全性攻击人为攻击的主要形式和防御

0x01 安全性攻击主要的两种方式 当前,对信息系统(包括硬件.软件.数据.人.物理环境及其基础设施)的攻击来自多方面,这些攻击我们可以宏观地分为人为攻击(主观因素)和自然灾害攻击(客观因素),这两大类的攻击都会对信息安全构成威胁.造成自然灾害攻击的自然因素包括各种自然灾害:如水.火.雷.电.风暴.烟尘.虫害.鼠害.海啸和地震等:系统的环境和场地条件,如温度.湿度.电源.地线和其他防护设施不良造成的威胁:电磁辐射和电磁干扰的威胁:硬件设备自然老化,可靠性下降的威胁等.因为自然灾害往往不可预知和抗

浅谈局域网ARP攻击的危害及防范方法(图)

浅谈局域网ARP攻击的危害及防范方法(图)   作者:冰盾防火墙 网站:www.bingdun.com 日期:2015-03-03   自 去年5月份开始出现的校内局域网频繁掉线等问题,对正常的教育教学带来了极大的不便,可以说是谈“掉”色变,造成这种现象的情况有很多,但目前最常见的是 ARP攻击了.本文介绍了 ARP攻击的原理以及由此引发的网络安全问题,并且结合实际情况,提出在校园网中实施多层次的防范方法,以解决因ARP攻击而引发的网络安全问题,最后介 绍了一些实用性较强且操作简单的检测和抵御攻

【转】【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

ASP.NET MVC系列文章 原文地址:https://www.cnblogs.com/wangjiming/p/6275854.html [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP.NET框架 [05]浅谈ASP.NET MVC运行过程 [06]浅谈ASP.NET MVC 控制器 [07]浅谈ASP.NET MVC 路由 [08]浅谈AS

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化