缓冲区计算

2024-08-10

缓冲区计算(精选10篇)

缓冲区计算 篇1

酸碱缓冲溶液对溶液的酸度起稳定的作用,它在化学化工生产过程中,在化学、生物和医学研究工作中都广泛应用。缓冲溶液是基础化学教学中的重要概念[1],它的p H值在一定的范围内不因稀释或外加少量的酸或碱而发生显著的变化。缓冲容量标志缓冲溶液缓冲能力的大小,而在缓冲容量的计算时,多采用近似计算,对一种弱的酸或碱组成缓冲溶液,难以理解强酸或强碱也有缓冲作用[2,3,4,5]; 如果是两种弱酸或碱组成的缓冲溶液,就不能简单采用近似计算,Excel可解决这类需要复杂计算问题[6]。

1缓冲容量计算原理

对于由H3A和H3B两种三元酸组成的缓冲溶液,三元酸的浓度分别为cA,cB,逐级离解常数分别为KAa1、KAa2、KAa3和KBa1、KBa2、KBa3,加入浓度为ca的强酸,计算它的缓冲容量,由质子等衡式

2 实际应用

柠檬酸( cit) 和磷酸氢二钠组成的缓冲溶液,柠檬酸的各级离解常数p Ka1cit= 3. 13,p Ka2cit= 4. 76,p Ka3cit= 6. 40; 磷酸的各级离解常数p KHa13PO4= 2. 12,p KHa23PO4= 7. 20,p KHa33PO4= 12. 36。在磷酸浓度均为0. 10 mol/L柠檬酸浓度分别为0. 10 mol/L,0. 20 mol/L时,通过excel计算两种缓冲溶液在不同p H时的缓冲容量,以缓冲容量为纵坐标,p H为横坐标,作图结果如图1。两种缓冲溶液在p H<8 直至强酸都有很好的缓冲作用,如果柠檬酸的浓度是磷酸的两倍,3<p H<6 缓冲容量变化更小。

3 结论

一元弱酸或弱碱单一组分组成的缓冲溶液其缓冲容量的计算在很多教科书中已有讨论[2],而多元酸或多元碱组成的缓冲溶液其缓冲容量的计算未见讨论。通过对两种三元酸组成的缓冲溶液缓冲容量的推导,给出的缓冲容量计算结果更严密,缓冲容量与p H关系曲线清楚的表明,柠檬酸和磷酸组成的缓冲溶液,在p H<8 直至强酸都有很好的缓冲作用。

摘要:缓冲溶液在工业生产和科学研究中广泛应用,是基础化学教学中的重要教学内容。推导了两种三元弱酸组成缓冲溶液缓冲容量的计算公式,用excel具体计算了柠檬酸和磷酸组成缓冲溶液在不同p H值的缓冲容量,图示了缓冲容量随p H变化曲线,直观说明了上述缓冲溶液缓冲范围。图示结果表明,柠檬酸和磷酸组成缓冲溶液在p H<8直至强酸都具有很好的缓冲作用。

关键词:缓冲溶液,缓冲容量,柠檬酸,磷酸

参考文献

[1]齐凤元,马勇.缓冲溶液教学方法探讨[J].大学化学,2010,25(1):40-42.

[2]武汉大学.分析化学.5版[M].北京:高等教育出版社,2010:135-137.

[3]李劲,沙昆岗.电脑模拟计算多种类型缓冲溶液的缓冲容量与缓冲容量曲线[J].湖南医科大学学报,1995,20(5):495-496.

[4]常湘滨.Britton-Robinson广泛缓冲溶液及其离子强度计算和控制[J].化学通报,1986,(9):54-57.

[5]韩金土,万里,杨晓炯.缓冲容量与p H的关系探讨[J].广州化工,2013,41(7):17-18,21.

[6]开小明,包翠莲.Excel回归分析解多元线性方程[J].光谱实验室,2014,31(6):743-745.

犹豫——人与鬼的缓冲区 篇2

与其他创立基业的皇帝比起来,赵匡胤确实是个不够果断的人。果断者有两种:一种是四肢发达,头脑简单,比如项羽;另外一种是刚愎自用,阴险毒辣,比如朱元璋和刘邦。朱元璋把所有的开国元勋统统杀净,孙子建文帝劝他要讲仁道,他把一根长满刺的藤条扔在地上,让孙子捡起来,孙子怕扎手,不敢捡。朱元璋说:“我现在把上面的刺都给你捋干净了,你还不感谢我?”

与这二人卸磨杀驴时的果断相比,赵匡胤就柔和得多,他把开国元勋们叫来,先喝酒,后讲道理,委婉地劝他们放弃兵权,照样可以享受荣华富贵。

我把赵匡胤的这种犹豫理解为“敬畏之心”。和家人探讨前途,显然不只是做做样子,他对自己的亲姐姐没这个必要。为什么要敬畏呢?他要寻找一个道义的着陆点,在蓬勃开放的野心上覆盖一层足够美丽的遮羞布。他从更民间、更草根的角度打量自己的行为,看它是否站得住脚。这种犹豫是一个心灵过渡区,人与鬼的缓冲区。有了这个缓冲,才有了他的与人为善,给人留出路的“铁书三誓”:永远优待自己的前领导柴氏家族;永远不杀进言的士人;子孙有违此誓者,天打雷劈。

在专制条件下,我们惟一能祈祷的就是,让掌权的人犹豫一些。我们无法要求他是个神,做个有敬畏心的人就不错了。

履带液压张紧缓冲机构的设计计算 篇3

1 张紧机构的组成及原理

钻车的张紧机构, 主要由连接架、缓冲弹簧、张紧油缸、注油阀组成。借助黄油枪将黄油压入油缸内, 油缸伸出, 使履带获得一定的张紧力, 当履带在运行中遇到冲击时, 冲击力的变化使弹簧不断伸或缩, 从而起到缓冲的作用。

2 主要设计参数分析

2.1 钻车前进时张紧机构的张紧力

如图1所示, 履带的上方区段为松边, 履带对引导轮的作用力由靠近引导轮端的履带段的下垂量来确定, 最大下垂量可认为是履带段L的中间点, 下垂量h一般取:h= (0.015~0.03) L。

式中:h为履带的下垂量, mm;

L为引导轮与拖轮之间的距离, mm;

履带对引导轮的作用力F由下垂段的履带板的重力作用下产生的拉力来确定:式中:F为履带对引导轮的作用力, N;W为单块履带板总成的重量, N;

A为链轨节距, mm;

a为下垂段履带理想方向与水平方向的夹角, (°) 。

钻车在前进时张紧机构所受的张紧力

2.2 履带行走机构后退时张紧机构的张紧力

如图2所示。除了驱动轮与支重轮之间的履带为松边外, 其余各段均为紧边, 此时的驱动力等于履带的行驶阻力

式中:f为滚动阻力系数

G为附着重量N

此时履带对引导轮的作用力为F2:

式中:T为作用在单条履带上的行驶阻力N

所以在后退时张紧机构的预设张紧力F3应为:

由式 (1) 、 (2) 、 (3) 、 (4) 比较可以得出F3>F2, 即在后退时履带将引导轮向后拉动的距离t最大, 并累积在松边, 若移动距离t过大, 则有脱链的危险, 所以为保证后退行驶, 在设计张紧机构时, 张紧力应以后退时的履带对引导轮的拉力为设计依据。

2.3 弹簧的设计选型原则

弹簧参数的选择和弹簧座、张紧轮支座的连接方式及驱动轮位置等因素有关。其主要参数如下:

(1) 弹簧的预紧力P=F3。

(2) 弹簧工作行程终了时的压缩力Pn= (1.5~2) P。

(3) 弹簧工作行程需考虑履带和驱动轮卡入石块时能脱离啮合, 即工作行程fv为:

式中:DKe为驱动轮齿顶圆直径, mm;

DKi为驱动轮齿根圆直径, mm;

tmax为引导轮向后的最大偏移量, mm;

弹簧其他参数可参考设计手册。

2.4 张紧油缸的设计

此油缸为单作用液压缸, 其主要设计参数为液压缸缸径D (mm) 和液压缸行程D (mm) 。

式中:P为液压缸额定压力, MPa;

当履带因销轴与销孔磨损而延长时, 张紧机构可以对其补偿调节, 也可以拆掉一块履带板并恢复履带的正常张紧度。因此, 液压张紧机构张紧油缸行程S必须有一定调节行程。

3 结语

履带行走机构的张紧机构的设计原则如下。

(1) 当履带行走机构受到冲击载荷或跨越障碍时, 能完全补偿履带的曲线变化, 以防止履带行走机构零件过载。

(2) 在正常工作条件下, 预紧力能保证引导轮不会因为履带跳动而后移, 因此张紧机构必须有合适的预紧力。

(3) 张紧油缸必须有一定的调节行程以使履带保持张紧度。

以上分析及设计方法为张紧机构的设计提供了依据。在钻车的履带行走机构中依据上述方法确定主要参数, 可满足设计要求, 使用实践证明上述参数的确定方法是合理的。

参考文献

[1]工程机械底盘构造与设计[M].中国建筑工业出版社, 1980.

[2]江创华.履带张紧装置预紧力的计算[J].工程机械, 2004 (6) :18~20.

缓冲区计算 篇4

关键词:描述符;DAMQ;信用管理;PIO;DMA;消息发射率;低延迟

中图分类号:TP338 文献标识码:A

An Unblocking Descriptor Injection Method

Based on Multi-VP Shared Buffer

LIU Lu, ZHANG He-ying, ZHANG Lei, CAO Ji-jun, DAI Yi

(College of Computer, National Univ of Defense Technology, Changsha, Hunan 410073, China)

Abstract: This paper proposed a novel multi-VP shared buffer named DAMQ-PD with mixed PIO and DMA for descriptor injection on NIC chip to decrease the memory and area requirement of statically allocating buffer among multiple virtual ports (VP). An address queue was used to record the address of every data in the shared buffer. Combining each VP's head pointer and tail pointer, each VP's data can be linked in the shared buffer according to input sequence. By doing so, pipelining reading and writing of the shared buffer can be implemented. A heuristic credit management method was also proposed to distribute credits according to the need of each VP, which can automatically switch descriptor injection method from PIO to DMA or vice versa, thus avoiding block execution of user process when no credit is available. Analyses and simulations show that DAMQ-PD achieves high buffer utilization, pipelining write and read, high message issue rate, thus satisfying the low latency and large capacity performance requirement of descriptor injection on NIC.

Key words: descriptor; DAMQ; credit management; PIO; DMA; message issue rate; low latency

处理器时钟频率达到4 GHz后,再依赖减小尺寸提升主频来提高处理器性能的做法变得越来越困难,业界转而利用在单处理器芯片上集成多个核,通过提高并行执行度来提升处理器的性能.VLSI工艺的进步支持这种技术路线的演进.依靠核数的堆叠,处理器的性能一直在持续攀升,并将继续按摩尔定律发展.

随着单个处理器及单个计算结点的计算性能不断提高,集成了成千上万个计算结点的HPC(High Performance Computer)的峰值性能也不断提高,但是由于技术和成本等原因,HPC的访存性能、I/O性能和互连网络性能的提升速度却远低于计算性能提升的速度,导致强大的计算能力与较低的访存能力、I/O能力和结点间通信能力之间的不匹配,实际运行的大型并行应用程序的并行效率一般不超过HPC峰值性能的20%[1],大量的计算能力和功耗白白浪费了,这就是目前制约HPC发展的“存储墙”“I/O墙”和“通信墙”问题.

近期的HPC系统中[2-6],连接结点的互连网络的点点带宽约为10 GB/s,延迟约为700 ns,远不能满足通信密集型并行应用程序的通信开销和同步开销对通信性能的要求.对比近期HPC计算结点访存带宽约为50 GB/s,访存延时约为几ns,结点的“通信/计算比”远小于结点的“访存/计算比”,互连网络成了限制HPC并行性能发挥的瓶颈.为了应对互连网络面临的严峻挑战,人们对互连网络进行了大量深入研究,使互连网络成为HPC领域的研究热点.

缓冲区计算 篇5

国调提出统一整定校核的思路,基于IEC61970标准的整定计算数据中心得到广泛关注。互联电网规模不断扩大,电网大数据的快速处理成为重要的研究课题。电网规模越大,对节点阻抗阵的操作耗时越长[1]。在全网模型下对局部区域整定计算时,文献[2]提出对计算范围之外的电网自动等值化简,从而大幅度缩小批量故障计算时的电网规模。距离整定元件越远的网络元件的变更对定值的影响越小。准确划分与研究区域定值相关的电网范围,降低节点阻抗阵的阶数,能够大幅度提高计算效率。

文献[3]提出缓冲网的概念。缓冲网指对内网性能起关键作用的外网元件集合。目前主要应用于电力系统稳定分析、潮流计算[4,5,6]。整定计算时,外网部分元件方式变化对内网定值影响较大,这些元件所在厂站的集合称为整定计算缓冲网。因此指定整定区域后,只需要对整定区域及缓冲网保留详细电网模型,外部区域采用等值模型。

本文针对整定计算工作的特点,提出了适于整定计算的缓冲网的生成方法。明确定义了整定计算缓冲网由配合区域和约束区域构成。首先根据边界支路确定配合区域。在带权电力网络中,形成边权连接矩阵。利用最短电气路径查找线路最小环网结构。利用边界节点自阻抗变化率确定厂站范围。最小环网结构和厂站范围组成了约束区域。计算机实现时利用深度搜索/回溯技术,给出了搜索终止判据,提高了搜索效率。最后,给出了缓冲网自动生成流程。

1 整定计算缓冲网相关问题

1.1 带权电力网络

根据复杂网络理论[7,8]及电力网络的实际特点,形成带权电力网络时做如下假设:

1)将厂站作为一个整体用对地阻抗等值表示。这样厂站视为网络节点,厂站间输电线视为网络的边。

2)将厂站间同杆双回线(或多回线)合并,视为一条边,此边的权值定义为等值过后的线路电抗值。

如无特殊说明,本文涉及的节点阻抗矩阵、边权连接矩阵都是基于以上假设形成。不计厂站对地阻抗,n个节点的网络边权连接矩阵W为

式中

1.2 运行方式

保护的极端运行方式通常分别考虑线路方式和厂站方式。电力网络节点之间的联系越来越紧密,构成了交错复杂的环网结构[9,10]。考虑保护线路对侧、背侧以及环网解环线路的轮断,能够满足环网整定的需求。快速判断保护线路及配合线路是否处于环网结构对于线路方式组合有重要的意义。基于2节点等值系统,线路lij位于环网结构时满足公式(3)。

其中:Zij为节点阻抗矩阵中节点i与j的互阻抗;Zii、Zjj分别为节点i、j的自阻抗;xij为lij的电抗。若线路lij构成环网,设边权连接矩阵中元素wij=∞,利用Floyd算法[11]查找节点i、j间最短电气距离,并标识最短电气路径。则最短电气路径与lij构成了节点i、j间最小环网结构。

将厂站作为一个整体,大/小方式变化转化为对地阻抗的变化[12,13,14]。厂站方式变化时,利用追加支路法,如图1。则

节点i自阻抗的相对变化量如式(5)。

根据式(4)、式(5)得距离节点i越远的厂站运行方式变化对节点i自阻抗影响越小,变化幅度越小的厂站运行方式变化对节点i自阻抗的影响越小。利用深度搜索沿网络拓扑搜索厂站组合范围,能够减少计算量。各厂站由小方式向大方式切换,即对地阻抗由较大值向较小值切换,我们保留(35)Zii³e2的厂站,由式(6)选择搜索终止判据为为系统所有厂站对地阻抗的最小值。图1显示沿拓扑结构满足终止条件。

2 缓冲网的生成方法

2.1 缓冲网

图2为典型大系统的局部电网结构示意图,利用此图来描述缓冲网生成过程中所用到的基本概念和算法术语。根据用户需求或数据中心定期更新后,需要对选定的区域重新整定计算,以保证定值可靠性。缓冲网思想即是确定外部电网中对整定区域元件定值影响较大的元件范围。

对缓冲网说明如下:

1)如图2所示,用户选定整定区域,该区域元件参与整定计算、保护配合、运行方式组合功能。

2)整定区域边界支路与外部相邻支路有保护配合关系。根据一级远后备保护典型的使用方法,配合区域定义为围绕整定范围的外一层的所有支路及所在厂站。需要注意的是,位于配合区域的元件不主动参与整定计算,而是与边界支路保护相互配合。

图中继电器(3)是(1)和(2)的后备保护,由于继电器(3)无需整定计算,因此在计算(1)(2)的一段、二段定值时需要分别与继电器(3)的保护二段、三段反配合。继电器(2)和(5)是(4)的后备保护,因此在计算(2)和(5)的二段、三段时需要分别与保护(4)的一段、二段配合。

3)查找故障电流及分支系数的极值时,不可避免地要考虑保护的极端运行方式。一方面从线路方式考虑,考虑保护线路、配合线路的最小环网结构以满足环网整定需求。另一方面,从厂站方式考虑,保留对定值有较大影响的厂站,能够提高保护定值可靠性。线路环网结构与厂站范围共同组成了约束区域。该区域元件不参与整定计算,也不参与保护配合;其功能仅包括运行方式组合。具体形成过程详见下文。

4)整定区域及缓冲网以外的电网称为外部区域,整定计算时外部区域不保留详细电网模型,仅采用等值参数模型。

2.2 生成流程

缓冲网及整定计算模型的生成流程如图3所示。

流程图中各个模块的步骤描述如下:

1)读取全网参数,形成带权电力网络。从数据中心读取全网的电气参数,依据1.1节原则形成带权电力网络及节点阻抗矩阵、边权连接矩阵。

2)根据用户需求,形成整定区域。根据用户提出的整定需求或数据中心定期更新后,需要对特定区域定值重新整定计算。

3)通过整定区域边界,确定配合区域。配合支路与边界支路有保护相互配合关系,以边界支路为研究对象,向外延伸一级支路,该支路及其末端节点构成配合区域。

4)通过边界支路及配合支路,确定约束区域。考虑线路方式组合范围时,分别以边界支路、配合支路为研究对象,基于2节点等值系统判断是否构成环网,若为环网,则基于Floyd算法查找标识最短电气路径,流程如图4。

确定厂站范围时,利用深度搜索/回溯技术查找对边界节点自阻抗变化率影响大于阈值的厂站范围。图5所示流程图进一步详细描述了此过程。需要注意的是,当前节点可能不满足(35)Zii2,但下一节点可能满足。因此搜索不能终止,若下一节点满足(35)Zii2,判断是否标记前一节点在厂站组合范围内;若不在,标识其在厂站组合范围。循环此过程至前一节点已经被标识。然后返回当前研究节点搜索下级支路,直至满足终止判据。

5)形成缓冲网。由配合区域和约束区域组成了缓冲网。

6)外部区域等值,形成整定计算模型。

3 算例分析

以图6所示系统为例说明缓冲网生成的步骤和过程。图中各元件参数均为正序网络标幺值。厂站视作节点后,图中标示了其对地支路小/大方式阻抗值。设置各厂站初始状态为小方式。

假定环网结构判定系数时,视为该支路构成了环网结构。节点自阻抗的变化率系数时,视为当前节点对节点i影响较大,则该节点在整定计算缓冲网范围内。

指定的整定计算区域为厂站5、6及双回线l5-6。根据一级远后备保护的使用方法,选择节点13、7及线路l5-13、l6-7构成配合区域。对整定区域边界支路及配合区域支路判断是否构成环网,以支路l5-13为例进行说明,判断如下:

该线路构成环网结构,在边权连接矩阵中,置w513=,利用Floyd算法查找并标识节点5与13的最短电气路径5-6-7-13。则最小环网结构为节点5-6-7-13-5。

利用深度搜索/回溯技术搜索厂站范围时,以整定区域的边界节点为研究对象,终止判据为以节点6为例进行说明。设置整定区域边界节点6,节点6未被标识,设置节点6为开始搜索节点,标识节点6已经被搜索,节点6在约束区域内,确定与该节点相连的一条线路并确定线路的另一端节点13。节点13未被搜索,判断确定与节点13相连的一条线路并确定线路的另一端节点2。节点2未被搜索,判断确定与节点2相连的一条线路并确定线路的另一端节点1。判断回溯到上一节点2,节点2未被标识,标识节点2在约束区域内;回溯到上一节点13,节点13未被标识,标识节点13在约束区域内;回溯到上一节点6,节点6已经被标识。返回当前研究节点1,标识节点1在约束区域内。节点1所有支路被搜索,回溯到节点2,节点2所有支路被搜索,回溯到节点13。同上判断节点12、14不在组合范围内,且满足终止条件。节点6为开始搜索节点,设置下一个边界节点5。最终缓冲网范围如图6所示。

大电网局部整定计算时,利用最短电气路径确定边界支路、配合支路的最小环网结构,利用边界节点自阻抗变化率确定厂站范围。缓冲网的自动生成缩小了大电网区域整定时的电网规模。

4 结论

缓冲区计算 篇6

近年来, 各地环保与节能政策日趋严格, 燃气燃烧机以其燃烧效率高、环境好、工作安全可靠、自动控制水平高等特点受到了各类工业用户的青睐, 燃气燃烧机安装数量急剧上升, 与此同时, 燃气燃烧机在投产运营中碰到的问题也逐渐增多, 亟需解决。

1 燃气燃烧机

1.1 燃气燃烧机系统组成图 (图1)

1.2 燃气燃烧机的运行周期

启动条件→验证→风机启动→前扫气→电极产生电火花→建立点火火焰→建立主火焰→正常燃烧 (自动或手动调节燃烧负荷) →主火火焰熄灭 (含主火火焰故障) →后扫气→停机

1.3 相关参数

1.3.1 切断压力

燃气燃烧机是在额定燃气压力下设计的, 允许燃气压力在一定的范围内波动, 如果超出这个范围, 燃烧将变得不稳定, 有可能发生脱火、回火或者不完全燃烧现象, 所以许多燃烧机配备了电磁阀来限定燃气的高低压力。低压切断值 (Prd) 一般为额定压力 (P额) 的80%, 高压切断值 (Prg) 一般为额定压力的150%, 当超出了限定压力范围, 电磁阀将自动关闭[3]。

1.3.2 安全时间

点火火焰建立安全时间:燃烧机在点火火焰形成前, 允许点火燃料控制阀处于开启状态的最长时间间隔。

主火火焰建立安全时间:燃烧机在主火火焰形成前, 允许主火燃料控制阀处于开启状态的最长时间间隔。

火焰熄灭安全时间:燃烧机在燃烧过程中主火火焰熄灭后, 允许主火燃料控制阀仍处于开启状态的最长时间间隔。

1.3.3 调节方式

分为连续调节和位式调节。连续调节指进入燃烧机的燃料量和助燃空气量可按比例平滑控制的调节方式;位式调节指进入燃烧机的燃料量和助燃空气量可按比例跳跃控制的调节方式。

2 调压器

2.1 调压精度 (AC)

指在调压器正常工作时, 出口压力偏离设定值的程度。一般工业用直接作用式调压器的调压精度为5%左右, 间接作用式调压器的调压精度为1%左右。

2.2 响应时间

指调压器从管道内出口压力发生变化到调压机构响应变化的时间。

直接作用式调压器出口压力变化直接反应给敏感元件薄膜, 指挥阀杆来调节阀口开度, 响应时间较短;间接作用式调压器, 出口压力的变化需先通过指挥器, 再由指挥器指挥阀杆来调节阀口开度, 所以间接作用式调压器响应时间通常比直接作用式调压器长。

2.3 切断压力

很多工业用户调压器都带有超压和欠压切断功能, 当管道压力超过超压切断压力 (Ptg) 或者低于欠压切断压力 (Ptd) 时, 调压器将自动关闭。

3 典型燃烧工况分析

3.1 点火失败

按照国标 (GB/T 19839-2005) 要求, 燃烧机在进入点火程序前, 应确保空气、燃气调节装置的开度均处于其调节范围的最低点, 否则不应进入点火程序[2]。但对于仅有全开和全关两种状态的燃烧机, 点火负荷即是其额定工作负荷。

锅炉燃烧机启动瞬间, 燃烧机燃气流量由零增大至点火负荷对应的流量, 调压器后管段中压力降低, 由于调压器的启动需要一定响应时间 (tq) , 所以在此段时间内, 调压器后管段中的压力将大幅降低。当燃气压力降至低压切断压力, 无论燃烧机是否点着, 燃气将被切断, 导致点火失败。

3.2 关机非正常切断

在正常情况下, 关闭燃烧机应该是先将其负荷调节至最小, 然后关闭。但对于仅有全开和全关两种状态的燃烧机, 关闭负荷即是其额定工作负荷。另外, 如果燃烧机火焰意外熄灭其关闭负荷就是火焰熄灭前的工作负荷。

燃烧机关闭瞬间, 燃烧机燃气流量由关闭负荷对应流量减小至零, 调压器后管段中压力升高, 由于调压器的关闭需要一定响应时间 (tt) , 所以在此段时间内, 调压器后管段中的压力将大幅升高, 当燃气压力升高至高压切断压力时, 燃气将被切断, 导致燃烧机非正常切断。

3.3 位式燃烧机负荷突变引起的切断

对于位式调节的燃烧机, 如果燃烧负荷阶跃式由低变高 (由高变低) , 负荷变化较大, 那么燃烧机的燃气流量将发生较大变化, 调压器后管段中压力将降低 (升高) , 由于调压器从一种状态过渡到另一种状态需要一定响应时间 (tb) , 所以在此段时间内, 调压器后管段中的压力将大幅降低 (升高) , 当燃气压力降低 (升高) 至低压切断压力 (高压切断压力) 时, 燃气将被切断, 导致燃烧机非正常切断。

4 解决办法

由于大功率工业燃气燃烧机用气量常出现突变情况, 在非常短的时间内流量变化非常大, 而调压器的启动、关闭以及过渡 (从一种稳定调压状态过渡到另外一种稳定调压状态) 都需要一定的响应时间, 所以调压器后管道中压力波动非常大, 当压力的波动超出了电磁阀或调压自身设定的切断压力时, 燃气将被切断。为了尽量避免燃气被切断, 可采取以下办法。

1) 选择响应时间尽可能短的调压器以适应压力的波动。对于用户应尽量选择响应时间较短的直接作用式调压器。

2) 设置缓冲管。在调压器后设置一段缓冲管, 缓解管道中燃气压力的变化, 保证燃烧机正常点火, 避免非正常切断。

5 缓冲管段的计算

由于管道中压力不高, 我们可以按照理想气体状态方程PV=nRT进行分析。

以P0为大气压力, T为温度, V0为缓冲管容量, 下面就不同情形分析缓冲管容量的计算方法。

5.1 点火

设调压器出口压力为P2s, 它应该等于用气设备所需压力与管线阻力损失之和, 若调压器的稳压精度为AC, 按照最不利的情况考虑, P2s向下偏离程度越大, 则启动瞬间管道中压力降低时越接近低压切断压力。

点火前管道中燃气的量为:

调压器的响应时间为tq, 在此段时间内流出缓冲管的标况体积为:

式中:Qq为点火负荷对应的标况流量 (Nm3/h) 流出缓冲管的燃气量为:

燃烧机启动后调压器开启前一瞬间管道内的相对压力为:

要想点火时不发生欠压切断则必须满足:

也即

式中:Pd=max (Prd, Ptd)

Prd:燃烧机的低压切断压力值。

Ptd:调压器的欠压切断压力值。

5.2 燃烧机关闭

调压器的稳压精度为AC, 按照最不利的情况考虑, P2s向上偏离程度越大, 则关闭瞬间管道中压力升高时越接近高压切断压力。

关闭燃烧机前管道中燃气的量为:

调压器的响应时间为tt, 在此段时间内流入缓冲管的标况体积为:

式中:Qt为关闭负荷对应的标况流量 (Nm3/h)

流入缓冲管的物质量为

燃烧机关闭后调压器关闭前一瞬间管道中的相对压力为

要想关机时不发生超压切断必须满足:

也即

式中:Pg=min (Prg, Ptg)

Prg:燃烧机的高压切断压力值。

Ptg:调压器的超压切断压力值。

5.3 燃烧负荷突变

用同样的方法可以推导出燃气负荷突变时, 缓冲管中的燃气相对压力计算公式如下:

式中:P实际为缓冲管中燃气的相对压力 (k Pa)

P2s:调压的出口设定压力 (k Pa)

AC:调压器的稳压精度等级 (%)

P0:大气压值, 取101.325 k Pa

Q后:突变后的负荷对应标况燃气小时用量 (Nm3/h)

Q前:突变前的负荷对应标况燃气小时用量 (Nm3/h)

t响应:调压器的响应时间 (根据实际情况应分为:启动响应时间tq、关闭响应时间tt和过度响应时间tb, 由于数据较难获得, 一般情况下可近似认为tq=tt=tb=t响应)

V0:缓冲管容量 (m3)

当燃烧机负荷降低时取“+”, 当负荷升高时取“-”。

由式 (13) 可看出, 缓冲管中的燃气相对压力只和管内净变化的燃气量即燃烧机的负荷变化情况相关。

计算最小缓冲管容量的通用公式:

式中:P切为当燃烧机负荷降低时取高压切断压力Pg, 当负荷升高时取低压切断压力Pd。

当燃烧机负荷降低时取“+”, 当负荷升高时取“-”。

由式 (14) 可看出, 如果系统出口设定压力已定, 切断压力已定, 那么缓冲管的容积只与燃烧机负荷变化情况以及调压器反应时间有关。我们近似认为, 调压器的反应时间一定, 那么就只需考虑负荷变化对缓冲管容量的影响, 所以只考虑满负荷点火及满负荷停机两种极端情况即可。在取两种极端情况下, 算出的最小缓冲管容量的较大值, 即可保证燃烧机稳定运行。也即:

根据算出的V0和即可确定现场安装的缓冲管的管径和长度。

6 工程实例

某公司现有4 t燃气锅炉、2 t燃气锅炉各一台, 分别配备百得 (Baltur) BGN350P和BGN200P燃烧机, 燃烧机前都无稳压器, 两台锅炉配备的调压器均为直接作用式, 调压器出口燃气压力均为10 kp, 调压精度为5%, 现有缓冲管长度都是1 m, 管道直径分别为DN100和DN80, 已知燃烧机起动时处于最小功率状态, 天然气低热值按照37.5 MJ/Nm3计算。

燃烧机主要技术参数如下:

BGN350P:最小功率为1 188 k W, 最大功率4 752 k W, 自带低压切断功能, 低压切断压力为3 k Pa。

BGN200P:最小功率为590 k W, 最大功率2 000 k W, 自带低压切断功能, 低压切断压力为0.7 k Pa。

投入运行后发现BGN350P燃烧机基本无法启动, 而BGP200P燃烧机偶尔启动失败。

按照式 (6) , 最小缓冲管容量应为:

在上式中, 除tq无法得知, 其余参数均可获得, 由于BGP200P燃烧机偶尔启动失败, 说明目前已有的缓冲管容量与理论最小缓冲管容量差别不大。

6.1 对于BGN200P燃烧机

目前缓冲管容量为:

设V0最小=V0原按照式 (16) 有:

由上式得出tq=0.028 s, 由于目前BGN200P燃烧机偶尔启动失败, 说明缓冲管容量仍然偏小, 故将现有值上浮20%, 设tq=1.2×0.028s=0.034 s

6.2 对于BGN350P燃烧机

由于调压器同样是直接作用式, 所以取tq=0.034 s

按照式 (6) 计算的最小缓冲管容量为:

目前缓冲管容量为:

因为V0原≤V0最小, 所以燃烧机总是起动失败, 要想启动成功必须保证:

得出l=2.14 m

即在保证缓冲管管径不变的前提下, 缓冲管管长至少为2.14 m。

考虑到尽可能的保险, 最终我公司工作人员将BGN350P燃烧机和BGN200P燃烧机前的缓冲管长度都改造成了4 m, 改造后两台燃烧机均能正常启动。

7 结语

对于燃烧负荷瞬间变化较大的燃烧机, 由于调压器响应出口压力的变化需要一定的时间, 所以调压器后管道中燃气的压力波动非常大, 为保证燃烧机正常运行, 必须保证调压器后管道中燃气的压力变化处于可控范围内。一种有效的方法就是通过计算得出调压器后缓冲管段的最小容量, 设置满足条件的最小缓冲管段即可保证燃烧机的正常运行。

参考文献

[1]李军, 姚欣.燃气锅炉和直燃机专用调压器的选型设计[J].机械工程与自动化, 2004 (2) .

[2]中国船舶工业集团公司江西航海仪器厂, 中国船舶工业综合技术经济研究院.GB/T#space2;#19839-2005工业燃油燃气燃烧器通用技术条件[S].北京:中国标准出版社, 2005.

[3]冯华仲.燃气燃烧机安全操作的自动控制[J].煤气与热力, 2000, 20 (4) .

缓冲区溢出漏洞攻击初探 篇7

1缓冲区溢出漏洞定义及原理

1996年, Aleph One在Phrack杂志发表的“Smashing the Stack for Fun and Profit”是缓冲区溢出的经典之作, 第一次详细地介绍了缓冲区溢出产生的原理和利用方法。缓冲区溢出漏洞攻击是指攻击者通过在缓冲区写入超过预定长度的数据造成所谓的溢出, 破坏了堆栈的原有数据结构, 使程序的返回地址发生变化, 使它指向溢出程序中恶意代码, 这样就达到了攻击者的目的。

常见的缓冲区溢出漏洞包括栈溢出和堆溢出漏洞, 本文主要结合实验简要分析栈溢出的攻击原理。要充分理解缓冲区溢出漏洞的基本原理, 就要从理解系统的内存结构开始。系统的内存结构主要包含有text、data、bss、heap和stack等区段。其中, 代码text区, 是由程序的代码段, 为只读数据, 任何对其写入的操作都会导致段错误 (segmentation violation) ;而bss和data都是可写的, 它们保存全局变量, data段包含已初始化的静态变量, 而bss包含未初始化的数据;heap是堆区, stack是栈区。

栈结构及溢出原理:

堆栈是操作系统中非常重要的一种结构, 系统或用户进程通过堆栈用来完成各种函数调用。对于系统中的每个进程来说, 都有其各自独立的堆栈空间, 堆栈空间随着进程的创建而被创建, 随着进程的结束而被销毁。与系统中其他内存空间的增长有所不同, 堆栈的增长方向是由内存高地址向低地址进行的, 正是由于堆栈的这个特点导致了一系列的安全问题。

当一个函数调用另一个函数的时候, 其栈帧结构如图2所示。在正常情况下, 被调函数执行完毕, 将被调函数的返回地址传给EIP寄存器, CPU从EIP寄存器取指令地址, 返回主函数继续执行。如果黑客特意构造数据, 使被调函数的局部变量越界, 这样就有可能破坏栈中的相邻变量的值, 甚至破坏栈帧中所保存的EIP、EBP值等重要数据。成功的缓冲区溢出攻击会用精心设计的数据覆盖返回地址, 使被调函数执行完后将修改后的返回地址传入EIP, 从而使CPU执行攻击代码 (shellcode) 。

2缓冲区溢出漏洞攻击的构造

通过前面的分析, 我们大致了解了构造缓冲区溢出漏洞需要考虑以下3个方面的问题。一是找出缓冲区溢出要覆盖或修改的返回地址EIP。如栈溢出中的返回地址在栈中的存储位置。二是将返回地址的值修改为何值?为了完成程序执行流程控制权的转移, 攻击者将影响程序执行流程的EIP值进行修改, 使其能够跳转至攻击者预期的代码进行执行。如何定位注入指令在目标程序中的位置, 以及在存在限制条件如何完成程序控制权的移交, 是一项重要的挑战。三是要构造合适的指令代码, 即Shellcode。在程序控制权交至攻击者注入的指令代码后, 那么这段代码具体完成什么功能是由攻击者开发的。这段代码有时被称为攻击者的payload, 由于这个payload通常为攻击者提供了一个远程shell访问, 因此也被称为Shellcode。由于受目标主机的缓冲区大小限制, Shellcode长度一般越小越好。Shellcode构造步骤一般如下:

(1) 先用C语言程序编写实现Shellcode的功能的代码。

(2) 将上面编写的代码通过编译器进行编译, 然后修改为带有Shellcode特点的汇编代码 (精通汇编语言的人可直接使用汇编语言编写程序) 。

(3) 根据汇编程序得到机器码形式的Shellcode。

3缓冲区溢出漏洞实验

在了解了缓冲区溢出攻击的原理之后, 下面给出一个远程栈溢出的例子。图1所示的程序是一个存在缓冲去溢出漏洞的服务器端程序。该程序主要功能是实现字符串接收与回显, 通过windows socket机制创建一个服务器示漏洞程序的远程渗透攻击代码示例端socket, 并在3764端口上进行监听;在接受客户端连接之后, 把客户端输入的字符串统计接收的字节数, 并进行回显。该程序的被调函数overflow在将接收字符串复制至本地局部变量s1缓冲区时, 因没有进行边界保护, 存在着栈溢出漏洞风险。

下面我们构造一个针对图1所示漏洞服务程序的远程渗透攻击程序。该攻击程序关键点在于构造一个用于溢出目标程序缓冲区的攻击数据, 这是整个攻击过程中最为关键的步骤。攻击数据缓冲区Buff类似一个“三明治”, “顶层”填充一段无效的nop指令, “夹心层”是将EIP值修改为“jmp ESP”指令的地址, 而这个指令地址在不同的目标程序所运行的操作系统平台上是不一样的, 由攻击者在不同的系统环境中调试获得。在本示例代码中, 实验的环境是windows xp环境, 并从ws2_32.dll中查找到的“jmp esp”指令地址。“底层”则填充攻击者构造的远程Shellcode。

图2所示的代码省略了580字节的shellcode二进制代码程序。下面给出Shellcode实现步骤, 具体的代码请读者根据实际需要自行编写。其大致过程如下:

(1) 创建一个服务器端socket, 并在指定的端口上监听;

(2) 通过accept () 接受客户端的网络连接;

(3) 创建子进程, 运行“cmd.exe”, 启动命令行;

(4) 创建两个管道, 命令管道将服务器端socket接收 (recv) 到的客户端通过网络输入的执行命令, 连接至cmd.exe的标准输入;然后输出管道将cmd.exe的标准输出连接到服务器端socket的发送 (send) , 通过网络将运行结果反馈给客户端。然后再将高级语言实现的shellcode代码编译, 生成汇编代码, 提取汇编代码所对应的Opcode二进制指令, 就可以创建图2所示的渗透攻击程序中所省略的shellcode指令数组。

4小结

本文详细描述和分析了缓冲区溢出攻击的原理, 然后就如何对缓冲区溢出攻击漏洞构造攻击程序进行了详细的分析。目前, 缓冲区溢出漏洞仍然是互联网和计算机系统中最普遍安全漏洞, 特别是能够实现本地提取和远程渗透攻击的缓冲区溢出漏洞威胁最大。虽然随着软件厂商不断加强了软件安全方面的建设, 但在短期之内很难彻底解决缓冲区溢出漏洞攻击的问题, 因而目前对该问题的研究工作仍具有实际意义。

参考文献

[1]韩万军.缓冲区溢出攻击代码检测与防御技术研究[D].郑州:解放军信息工程大学, 2012.

[2]付春雷.基于多阶段网络攻击模型的缓冲区溢出攻击技术研究与实践[D].重庆:重庆大学, 2006.

缓冲区计算 篇8

关键词:缓冲区,溢出,堆栈,Windows,shellcode

0 引言

近二十年来,缓冲区溢出漏洞已成为计算机系统安全漏洞的主要形式之一,利用缓冲区溢出漏洞进行的攻击占了远程网络攻击的绝大多数,这种攻击可以使一个匿名网络用户有机会获得一台主机的部分或全部控制权,可以使蠕虫病毒进行迅速高效的传播,是一种极其严重的安全威胁。

缓冲区溢出攻击之所以成为一种常见的安全攻击手段,主要原因在于,存在缓冲区溢出漏洞的系统和软件非常普遍,且一旦漏洞被成功利用,被攻击者植入的攻击代码将获得与目标程序相同的系统权限,从而得到被攻击主机的控制权。

2 缓冲区溢出原理

2.1 进程在内存中的映像

假设有一个程序,它的函数调用顺序如下:

main(...)->func_1(...)->func_2(...)->func_3(...)

即:主函数main调用函数func_1;func_1调用func_2;func_2调用func_3。当程序被操作系统调入内存运行,其对应的进程在内存中的映像如图1所示。

需要说明的是:

(1)随着进程中函数调用层数的增加,函数栈帧是逐块向内存低址方向延伸的;随着函数调用层数的减少,各函数调用的返回,栈帧会逐块被释放而向内存的高址方向回缩,各函数的栈帧大小随着函数中局部变量的不同而不等。

(2)进程对内存的动态申请发生在Heap(堆)里,随着系统动态分配给进程的内存数量的增加,Heap(堆)有可能向高址或低址延伸,取决于不同系统的实现,通常是向内存的高址方向增长。

(3)当BSS数据或Stack(栈)的增长耗尽了系统分配给进程的自由内存时,进程将会被阻塞,重新被操作系统使用更大的内存模块来调度运行。

(4)非初始化数据(BSS)区用于存放程序的静态变量,这部分内存都被初始化为零;初始化数据区用于存放可执行文件里的初始化数据。这两个区统称为数据区。

(5)Text(文本区)是个只读区,任何尝试对该区的写操作都将导致段违法出错,文本区被多个运行该可执行文件的进程所共享,用于存放程序的代码。

2.2 函数的栈帧

函数调用时建立的栈帧包含了下面的信息:

(1)函数的返回地址:返回地址是存放在父函数的栈帧还是子函数的栈帧里,取决于不同系统的实现,Windows系统是放在父函数的栈帧里;

(2)调用函数的栈帧信息,即栈顶和栈底;

(3)为函数的局部变量分配的空间;

(4)为被调用函数的参数分配的空间。

2.3 缓冲区溢出

从函数的栈帧结构可以看出:函数局部变量的内存分配发生在栈帧里,如果在某个函数里定义了缓冲区变量,则这个缓冲区变量所占用的内存空间就在该函数被调用时所建立的栈帧里。由于对缓冲区的潜在操作(如字串的复制)都是从内存低址到高址,而内存中函数调用的返回地址就在该缓冲区的上方(高地址)——这是由栈的特性决定的,这就为覆盖函数的返回地址提供了条件。当有机会用大于目标缓冲区的内容来向缓冲区进行填充时,就有可能改写保存在函数栈帧中的返回地址,使程序的执行流程发生转移,进而执行预先准备好的代码。下面是缓冲区溢出的示例:

(1)函数对字符串缓冲区的操作,方向一般都是从内存低址向高址的,如:strcpy(s,"AAA.....")。

(2)函数返回地址的复盖。

注:字符A的十六进制ASCII码值为0x41。

(3)从上图可以看出:如果用进程可以访问的某个地址,而不是0x41414141来改写调用函数的返回地址,且该地址正好是准备好的代码的入口,则进程就会执行这些代码。在Windows操作系统中,由于有地址冲突检测机制,出错时能调试查看寄存器映像和堆栈映像,使得对缓冲区溢出漏洞可以进行精确的分析,确定溢出偏移地址,也便于攻击者寻找缓冲区溢出漏洞。

3 Windows系统缓冲区溢出的利用

假设已经准备好了溢出后执行的基本shellcode代码,针对Windows系统缓冲区溢出的特殊性,还须解决如下问题:

(1)正确构造溢出字符串

前面已指出,随着进程中函数调用层数的减少,栈帧会逐块被释放而向内存的高址方向回缩。在Windows系统中,系统会用随机数据填充废弃不用的堆栈空间,因此必须用下面的方式精确构造溢出字符串,确保溢出后的shellcode不会被随机数据覆盖:

…NNNNNNNNNNNASSSSSSSSS…

其中,N为NOP指令,用于溢出占位;A为跳转指令,使执行流程跳转到shellcode,后面会分析确定A的具体内容;S为shellcode代码。在缓冲区溢出发生之后,堆栈的布局如下:

即A覆盖了返回地址,S位于父函数栈帧的顶部,A的内容,就是指向S的调用。后面会分析如何准确设置A的具体内容。

我们知道,Windows系统的用户进程空间是0—2G,操作系统所占的是2—4G,用户进程的加载位置为:0x00400000。用户进程的所有指令地址、数据地址和堆栈指针都会含有�x0字符,因此不管A中的跳转地址如何设定,也必然含有�x0字符,而�x0字符恰好也是字符串结束的标志。这样就会导致前面的溢出字符串在A处就被�x0阻断了,根本无法将shellcode植入进程。此外,shellcode中本身也可能存在�x0字符,也会影响其植入。这就需要对溢出字符串进行编码处理,处理掉所有不能在shellcode中出现的“�x0”字符,然后在基本的shellcode代码执行前,再由一个子程序对其解码。一种可行的编码方式是对溢出字符串进行xor0x99处理,用同样的程序即可完成解码过程。编解码程序如下:

(2)正确设置跳转指令地址

根据前面的分析可以知道,函数返回的时候,esp(栈顶寄存器)指向的地址,就是缓冲区溢出后shellcode的开始位置。因此函数返回后如果立即执行jmp esp指令就可以使程序执行流程跳转到shellcode上来。要实现这一点,可以把上述溢出字符串中A的内容设为内存中一个已存在的jmp esp指令地址即可。一个Windows程序运行时,内存中很多动态链接库(dll)都会有jmp esp指令,出于通用性的考虑,可以选择kernel32.dll里面的指令,因为kernel32.dll是系统核心的dll,这些dll一直位于内存中,而且对应于固定版本的Windows其加载的位置是固定的。不同的Windows系统版本,kernel32.dll中jmp esp指令地址不同:

win98第二版下(4.00.2222a),地址为:0xbff795a3

winnt4下(4.00.1381),地址为:0x77f0eac3

win2000下(5.00.2195),地址为:0x77e2e32a

等等。

以这种方式设置跳转指令地址,需要预先知道目标操作系统版本,否则jmp esp地址如果不对,目标程序就会跳出“无效页错误”对话框并退出运行。

(3)正确加载shellcode中的系统函数

实现具备一定功能的shellcode,通常会调用一些基本的win32系统函数,如Read File、Create Process等,但这些函数必须加载到目标程序的进程空间后才能被使用。如何才能实现这一点呢?可以考虑使用win32系统函数Load Library来加载相应的动态链接库,用Get Proc Address来获得所需函数的地址。在shellcode里面可以包含一个函数名表,保存每一个需调用函数的函数名,并在shellcode执行前,使用上述两个函数逐个获得这些函数的地址即可。

这个办法还必须解决一个问题,即Load Library和Get Proc Address本身如何加载并获得调用地址?研究一下这两个函数的作用可以知道,每一个win32程序都需要用它们来取得所有其他函数的地址。因此可以断定,目标程序肯定会加载这两个函数。接下来需要解决的是如何找到这两个函数在目标程序里面的加载地址,它们是否会根据操作系统的不同而变化的呢?答案是否定的,这些动态加载的函数在目标程序里设置了一个入口表,由目标程序自己加载,且该入口表地址是固定的,不会因操作系统不同而变化。这样,就可以使用wdasm32之类的工具来搜索目标程序中的Load Library和Get Proc Address,得到它们对应的入口表地址,假设为AAAA。在shellcode里面,就可以直接用call[AAAA]指令来调用了。

4 缓冲区溢出的保护方法

有四种基本的方法可保护程序免受缓冲区溢出攻击:

(1)编写正确的代码

编写正确的代码是很有意义但耗时耗力的工作,特别是使用C语言这类容易出错的编程语言,程序员往往追求性能而忽视代码的正确性和安全性。包括很多版本的C标准库都存在缓冲区溢出漏洞。尽管目前已有了很多指导性的意见和规范来指导程序员编写安全的程序,但具有安全漏洞的程序仍然不断出现。除了要求程序员尽可能编写正确的代码外,目前已出现了一些专门的工具来帮助程序员检查代码中存在的安全隐患,这些工具可以通过人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞。一些静态分析工具也可以用于侦测缓冲区溢出的存在。

(2)使用非执行的缓冲区

通过使目标程序的数据段地址空间不可执行,使攻击者即使向缓冲区植入代码也不可能被执行,这种技术被称为非执行的缓冲区技术。很多老的Unix系统都是这样设计的,但后来的Unix和MS Windows系统为了实现更好的性能和功能,往往在数据段中动态地放入可执行的代码。为了保持程序的兼容性,不大可能使所有程序的数据段不可执行,但可以设定堆栈数据段不可执行,因为任何合法的程序都不会在堆栈中存放代码,这样就可以最大限度地保证程序的安全。目前,Linux和Solaris都发布了这方面的内核补丁,Windows Vista也增加了类似的内存保护机制。

(3)进行数组边界检查

与使用非执行的缓冲区保护不同,数组边界检查完全防止了缓冲区溢出的产生和攻击。只要数组不能被溢出,溢出攻击也就无从谈起。为了实现数组边界检查,所有对数组的读写操作都应被检查,以确保对数组的操作在正确的范围内。最直接的方法是检查所有的数组操作,但是通常可以采用一些优化的技术来减少检查的次数。常见的实现数组边界检查方法包括编译器检查、存储器存取检查、使用类型安全语言等。

(4)程序指针完整性检查

程序指针完整性检查和边界检查略微不同,程序指针完整性检查在程序指针被引用之前检测它的改变。因此,即使攻击者成功地改变了程序的指针,由于系统事先检测到了指针的改变,因此这个指针将不会被使用。实现程序指针完整性检查需要操作系统或程序编译器的支持。

5 结论

本文中,我们详细描述和分析了缓冲区溢出的原理和Windows系统中利用缓冲区溢出漏洞需要解决的技术难点,并总结了缓冲区溢出保护的基本方法。由于缓冲区溢出攻击是目前出现频繁、危害极大的攻击手段,进行这方面的研究工作对于了解系统弱点、掌握攻击手段、有针对性地进行安全防护都具有积极意义。研究结果表明,对于Windows下存在缓冲区溢出漏洞的程序,需要采用适当的技术和技巧才能加以利用,同时也使Windows系统的安全防护面临挑战。

参考文献

[1]Randal E.Bryant.David O'Hallaron.Computer Systems:A Programmer’s Perspective.中国电力出版社.2004.

[2]Foster,J.C.缓冲区溢出攻击—检测、剖析与预防.清华大学出版社.2006.

[2]许治坤.网络渗透技术.电子工业出版社.2005.

[3]黑猫(virtualcat@hotmail.com).如何编写自己的缓冲区溢出利用程序.2001.

[4]ipxodi(ipxodi@263.net).Windows系统下的堆栈溢出.绿盟月刊.2000.

用兴趣缓冲情绪 篇9

一段时间,儿子的情绪就随着痘痘的多少而起伏不定。……考试成绩更是随着情绪而起伏,鸡毛蒜皮的事情也会响到他上课的状态……

于是,我只有用悠扬的世界名曲与广泛的阅读,来平静自己的心绪,以期找到对付儿子青春期荷尔蒙的最佳办法!一天,我无意中翻开了德国最伟大音乐家之一的钢琴大师——舒曼的回忆录。他写到一篇有关贝多芬的文章,让我大为震惊!舒曼回忆说:

我看到贝多芬在手稿上写着:“为丢掉一文钱而愤怒,以随想曲的形式发泄!”我忍不住放声大笑,有什么比这个“游戏作品”更有趣呢?人们一直认为贝多芬的思想只萦注于高潮的事物,他在星期间翱翔,尘世人间的俗世是与他格格不入的……谁曾想到,贝多芬竟然也会为一文钱而愤怒,并且将他化作创作灵感。……年轻作曲家和演奏者们,你们在这首曲子里首先可以学到一样东西——那就是要自然!自然!自然!!!

这段回忆给我极大的启发。在儿子学琴练琴的过程中,我一直都注重技艺的培养和乐感的熏陶。然而,我却犯了一个显而易见的错误——让艺术与生活分离了。

我的教育让儿子感受到:自己穿上燕尾服,风度翩翩地坐在舞台上弹奏钢琴,是一回事儿;然而,生活中面对自己高低起伏的情绪和一团乱麻的生活,却是另一回事儿。

我必须改变自己的教育理念:如果,连贝多芬这样的大师都会因为一文钱找不到,而百感交集,需要移情于艺术;那么,我为何不能引导儿子用艺术的方式来抚平情绪,进行“移情治疗”呢?我连忙将这篇文章拿给儿子看,并且从他厚厚的乐谱中,找到贝多芬的“回旋狂想曲Op.129”,我让儿子弹奏了一遍,他很喜欢这首主题欢快的小三段体乐曲。当他知道贝多芬“怒发冲冠为一文钱”时,哈哈笑起来。

“原来圣人也有情绪失控的时候啊!”儿子感叹。

我说:“当然了。这首作品是在贝多芬去世之后,才被后人整理出来的!当他褪下那被人神化的外衣,露出的人性是那么率真,那么可爱……所以,作为一个爱好艺术的青春期男孩,你怒发冲冠,再正常不过了。就算是为了很小的事情发脾气,也是可以理解的。”

听我这么说,儿子眼中显出温柔的眼神来,他的语气软下来,竟然承认自己这段时间情绪不好,伤害了身边的人。“其实,我也知道自己乱发脾气不对,但就是控制不住。发了火,我又后悔,纠结……”

我轻轻拍着儿子的肩膀,忽然想到最近网上流行的一句话——“没有坏人,只有没被好好爱过的人”。很多时候,我只注意到照顾儿子的衣食住行,监督他学习和练琴,我忽略了他内心的痛苦纠结,没有给予他真正到位的爱。

我鼓励儿子:“以后,当你情绪不稳定时,不妨听听大师演奏的名曲。那些伟大的音乐家和你一样,都是为鸡毛蒜皮的小事而心中波涛起伏的人,但是他们会用艺术的方式来宣泄、自我修复,甚至点燃伟大的灵感……你也可以的!”

这一招非常管用,当儿子郁闷时,他不再抱着手机和IPad了。他会把自己关在琴室里,听听CD,弹奏几支曲子。有时候,他邀我听他的演奏,并且从音乐中猜猜他遇到了什么……说来也奇怪,我们母子常常因为“青春期与更年期”的代沟而无法沟通,然而,当儿子以琴抒情时,我就能够理解他。因为,这些曲子,我在年轻时也弹奏过。我常被这些旋律带回到青葱岁月,倏然明白了儿子心中的郁闷、澎湃与哀愁……

当然,大多数时候,儿子并没时间听曲与弹琴。我必须教会他如何在学校里给自己“减压”,在紧张的学习生活中平息自己不良的情绪。

于是,我试着帮他分析并正视每件烦心事的原因,让他不要把自己的糟糕情绪归因到外部因素,故而大发脾气。相反,我让儿子意识到成功和失败属于可控因素,他可以用理智控制自己的情绪。比如“因为背不出英语背诵内容,而被老师罚站”、“因为雀斑而被嘲笑”、“因为弄脏同桌书包而被孤立”等许多问题,我都一项项耐心地帮助儿子归因,让他发现这些问题的最佳解决方案都不是怨天尤人,而是积极应对。

在儿子的钢琴训练中,我加入了人文关怀。在他学习一首新曲子之前,我一定带他了解作者当时的心态,了解作曲家的生平和性格,让他从中揣摩“艺术疗治心灵”的能力。

有时候,儿子情绪不好,我也会弹琴给他听。有时候,身边没有钢琴,我就哼出一些旋律来,并且鼓励儿子与我一起哼唱。当他考试考砸的时候,我还请他去K歌,让他歇斯底里地唱出内心的受挫感,并再度重新上阵。

我渐渐体悟到艺术的真谛——艺术可以教孩子面对自我内心,面对成长的挣扎,找到一种“与伟大心灵交流”的方式。他可以在自己荷尔蒙高涨时,用艺术来镇定自己;也可以在焦躁无奈时,用乐曲鼓励自己……他不用“讲粗口、打人、早恋、情绪冷暴力”等方式来发泄,而用“健康的、积极的、优美的”方式来自我调适。

这样的引导之后,家中再度出现了和睦温馨的氛围,我们常常说:“这件烦心事,贝多芬会怎么看?怎么弹?怎么应对呢?”

SSH缓冲区溢出漏洞与防范研究 篇10

SSH的英文全称是Secure Shell,中文意思就是“安全壳”。SSH传输层协议是底层的安全传输协议,通常都是运行于TCP/IP之上,以该协议为基础,其上可以建立起多种网络安全服务。SSH传输层协议提供高强度的数据通信加密处理、加密的主机身份认证、数据完整性校验以及数据压缩等多项安全服务。协商确定双方通信所需要的密钥交换方式、公钥密码算法、对称密钥密码算法、消息认证算法和哈希算法等。SSH传输层协议中的认证是基于主机的 (Host-based) ,并不涉及客户端用户的身份认证。该协议的设计目标是简洁、灵活,允许参数协商并力争来回握手次数最少 (争取在绝大多数情况下,只需要两个来回 (round trips) 就完成所有的密钥交换、服务器认证、服务请求及其应答等,最糟糕的情况也只需3个来回) 。

二、SSH漏洞及缓冲区溢出问题

2.1 SSH工作流程简述

协议版本协商:双方都发送“S S H-protocol version-software version”+CR (option) 十NL, 该版本信息会用于D-日密钥协商。

密钥协商: (使用SSH二进制包表示协议格式) 相互发送己方支持的算法列表 (可以直接进行猜测,从而发送与之对应的初始密钥交换包) ,服务器会从客户端支持的算法列表中依次去找,直到发现与自己支持的相吻合的某种算法。

密钥协商产生的结果包括:

共享秘密K

交换哈希值H

由此产生加密和认证用的密钥对。且还作为唯一的会话标识和签名数据的一部分。

数据包处理:数据包将按协商好的选项进行处理,如果需要压缩,则压缩完成之后才进行加密处理,计算包长度和消息认证代码。M A C计算先于加密处理。MAC=MAC (key, sequence number, unencrypted packet (除MAC外的所有内容) ) 。

服务请求:接下来客户可以向服务器方提出自己期望的服务,目前的保留服务有:用户认证 (SSH USERAUTH) 和连接服务 (SSH CONNECTION) 。

用户认证:

服务器响应认证服务请求,告诉客户使用何种认证方式 (注意处理认证超时和超次的情况) 。

随后客户端发出相应的认证起始消息,进行认证。

连接服务:认证成功结束之后,就可以提交连接服务请求,比如请求打开一个伪终端,执行一个登录shell或者命令,进行端口转发等。双方会根据不同的服务类型述方——具体和服务类型相关的逻辑信道 (Channel) 并进行数据通信。

S S H协议流程示意图如图1。

SSH协议有两种版本,即版本1和2,二者存在兼容性问题,比较如表1。

2.2 SSH存在的安全问题

尽管SSH有很多优点,如它是实现网络安全的非常轻型的工具,不占用客户及机服务器的大量资源;便于用户理解 (至少在简单应用水平上是这样) 和使用:灵活且功能强大等,但S S H仅是系统安全的一部分,也有其不足.。

主机欺骗危险:允许客户第一次连接一台主机 (服务器) 时可以直接接受其主机密钥而不检查该密钥是否真正属于该主机。可以增加主机认证.。

依赖于主机系统的安全:对主机系统的安全性没有任何提高,一旦主机系统被入侵或控制,S S H无法保证传输安全。

基于下层的可靠传输::SSH建立在假设可靠的传输之上 (如TCP) ,无法避免Wire Cuter式的Dos攻击。

没有消除隐含信道问题:因为在填充域、SHeMSGweIGNORE消息和其他一些地方都可以被利用来传递隐含消息,无法防止夹带非法的数据进出敏感区域。

用户认证协议对底层传输协议的支持要求:用户认证协议要求下面的SSH传输层提供数据加密和完整性校验保护,如果系统或者用户配置选项关闭了这些缺省的安全功能,那么其上进行的任何对用户身份的认证很可能没有达到预期的安全效果。用户认证前检验加密、完整性。令调试消息可能泄漏敏感信息,当设计调试消息的时候,要注意它们也许会泄漏大量的主机敏感信息。缺省时不显示调试消息,或屏蔽一些敏感信息。令远程执行安全:协议允许服务器向客户机、或者客户机向服务器请求远程执行一条命令或一个程序。今用户非完全透明:尽管SSH协议从应用程序的角度来说是应用无关 (只要是面向连接的应用) 的,但是对于用户来说却不是完全透明的,因为它要求使用者产生和分发自己的密钥、选择合适的客户端软件,修改相应的配置,事先知道自己要连接主机的IP地址和转发端口等。

密钥管理与分发操作复杂:协议中对用户认证用的密钥没有规定具体的产生、分发和废除等操作,大多数的实现也都是采取人为手工的方式来完成。这样做不够灵活和方便,安全性也不够。在规模加大时更是明显。

安全与管理的矛盾:端口转发可能使入侵者绕过边界安全防护例如防火墙。因为信道是加密的,不能看到其中的数据,因此很难做出反应。

三、缓冲区溢出攻击的防范措施

3.1缓冲区溢出的攻击方法

程序代码和数据的存储可以放在堆栈中,程序执行前的指令寄存器地址也暂时被放在堆栈中 (示意见图2) ,它们被依次压入堆栈。执行过程中调用参数和函数时,如果数据输入过长,就有可能把预先存储地址的代码区覆盖,在系统再次调用时也就存在错误调用的威胁,执行恶意代码,进而成为一种攻击手段。缓冲区溢出之所以成为远程攻击的主要手段,更因为它能够扰乱具有某些特权运行的程序,使攻击者取得该程序的控制权。如果该程序具有足够的权限,那么有可能控制整个主机,这对SSH而言尤其危险,因为SSH通信的安全首先取决于系统的安全。一般而言,攻击者攻击root程序,然后执行类似“exec (sh)”的执行代码来获得root的Shell。为此,攻击者必须要做的是:在程序的地址空间安排适当的代码:通过适当地初始化寄存器和存储器,让程序跳转到预定的地址空间执行。

在被攻击程序地址空间里设置攻击代码的方法有两种:一是攻击者向被攻击的程序输入个字符串,程序会把这个字符串放到缓冲区里。这个字符串包含的数据是可以在这个被攻击的硬件平台上运行的指令序列。在这里攻击者用被攻击程序的缓冲区来存放攻击代码。另一种是利用被攻击程序中已经存在的代码,攻击者所要做的只是对代码传递一些参数,然后使程序跳转到目标。比如,攻击代码要求执行“exe (“/bin/sh”) ”,而在libc库中的代码执行“exec (arg)”, 其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向”/bin/sh”,然后调转到lib库中的相应的指令序列。

跳转到攻击代码最基本的方法,就是溢出一个没有边界检查或者其他弱点的缓冲区,犹乱程序的正常执行顺序,攻击者用近乎暴力的方法改写相邻的程序空间而直接跳过了系统的检查。

最简单和常见的缓冲区溢出攻击类型就是在一个字符串里综合了代码植入和激活记录。攻击者定位一个可供溢出的自动变量,然后向程序传递一个很大的字符串, 在引发缓冲区溢出改变激活记录的同时植入了代码。代码植入和缓冲区溢出不一定要在一次动作内完成。攻击者可以在一个缓冲区内放置代码,这是不能溢出缓冲区;然后。通过溢出另外一个缓冲区来转移程序的指针。这种方法一般用来解决可供溢出的缓冲区不够大(不能放下全部的代码)的情况。

如果攻击者试图使用己经常驻的代码而不是从外部植入代码,他们通常必须把代码作为参数。例如,在libc(几乎所有的C程序都要它来连接)中的部分代码段会执行“exec (something)”,其中something就是参数。攻击者使用缓冲区溢出改变程序的参数,然后利用另一个缓冲区溢出使程序指针指向libC中特定的代码段。

3.2缓冲区溢出的防范方法

3.2.l编写正确的代码

编写正确的代码是一件非常有意义但耗时的工作,可以使用一些工具和技术编写安全、正确的程序。最简单的方法就是用grep来搜索源代码中容易产生漏洞库的调用,比如对strcpy和sprintf的调用,这两个函数都没有检查输入参数的长度,因此用strncpy和snprintf等替代函数防止缓图1 SSH协议流程示意图表1 SSH协议版本1与2的比较冲区溢出的发生;利用一些高级的查错工具,如fault injection等,还有些静态分析工具用于侦测缓冲区溢出的存在。

3.2.2非执行的缓冲区

非执行的缓冲区技术通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被植入的被攻击程序输入缓冲区的代码。事实上,很多旧的U n i x系统都是这样设计的,但是近来的Unix和MS Windows系统为实现更好的性能和功能,往往在数据段中动态地放入可执行的代码。所以为了保持程序的兼容性不可能使得所有程序的数据段不可执行。

非执行堆栈的保护可以有效地对付把代码植入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有效果。通过引用一个驻留的程序的指针,就可以跳过这种保护措施。其他的攻击可以采用把代码植入堆或者静态数据段中来跳过保护。

3.2.3数组边界检查

数组边界检查完全防止了缓冲区溢出的产生和攻击。只要数组不能被溢出,溢出攻击也就无从谈起。为了实现数组边界检查,所有对数组的读写操作都应当被检查以确保对数组的操作在正确的范围内。通常可以采用一些优化的技术来减少检查的次数。目前的检查方法包括:Compaq C编译器,Jones&Kelly C语言的数组边界存储器存取检查Purify以及安全语言等。

3.2.4程序指针完整性检查

程序指针完整性检查是在程序指针被引用之前检测它是否被改变。因此,即便一个攻击者成功地改变了程序的指针,由于系统事先检测到了指针的改变,因此这个指针将不会被使用。与数组边界检查相比,这种方法不能解决所有的缓冲区溢出问题,但是在性能上有很大的优势,而且兼容性很好。

最普通的缓冲区溢出形式是攻击活动记录然后在堆栈中植入代码。非执行堆栈可以防范所有把代码植入堆栈的攻击方法,堆栈保护可以防范所有改变活动记录的方法。这两种方法相互兼容,可以同时防范多种可能的攻击。

剩下的攻击基本上可以用指针保护的方法来防范,但是在某些特殊的场合需要用手工来实现指针保护。全自动的指针保护需要对每个变量加入附加字节,这样使得指针边界检查在某此情况下具有优势。

另外,利用一些工具检测特征代码等,及早发现:并针对不同的程序段应用动态连接检查缓冲区溢出漏洞,最大程度地防止溢出攻击的发生。

四、SSH协议的改进和实现

4.1在SSH协议中质询——响应认证方式嵌入

在SSH协议用户认证过程中,一般采用口令认证或公钥认证。口令认证比较简单,但存在传输过程中数据劫取的威胁,虽然利用SSH协议通信过程中建立起来的加密信道可以保护口令数据,但依然潜在被攻破的威胁;而公钥认证也存在两个弊端:一是公钥的生成要消耗和占用系统资源,二是公钥的管理和存储问题一直没能很好地解决。而质询—响应 (CHAP) 认证方式可以较好地解决上述问题。

所谓质询—响应认证方式,就是通过对等实体通过共享一个普通文本密钥来实现网络安全性。这个密钥不会在传输链路上发送,通过如下步骤执行:

链路建立后,主机 (认证者) 首先发送质询消息给客户 (被认证者) ,该质询消息一般包括标识符 (ID) 、随机数和本地设备的主机名和远程用户的用户名等。

客户接收到质询消息,使用单向哈希函数计算出一个质询响应值,密钥是单向哈希函数的输入。

客户发送该质询响应值,包括ID的加密版本、计算出的哈希值 (作为秘密口令) 、随机数及远程设备的主机名和用户名等。

主机接收到响应,查询响应中给定的名称并执行相同的加密操作,确认密钥是否一致,并把得到的哈希值与自己期望的哈希值比较。

如果密钥与哈希值都匹配,则认证成功,发送成功认证消息并建立连接;否则,认证失败在质询—响应认证方式中,远程和本地设备上的秘密口令必须相同,并以安全的方案得到认可、生成和交换。由于秘密口令从不进行传输,所以其他设备无法得到。通过使用一个增量变化的标识和可变质询值,质询—响应认证方式可以防止重放攻击。另外可以使用重复的质询,以限制任何一次攻击的暴露时间,认证者可以控制质询的频率和时间。

质询—响应认证方式中一般使用MD5作为单向哈希函数,而共享秘密口令通常以普通文本存储。质询响应认证方式的流程见图3。

4.2 Windows平台上SSH协议的实现

4.2.1 SSH协议应用存在的主要问题

现有S S H界面多是在U N X环境下运行,存在用户界面不友好、配置复杂等问题。而W i n d o w s是大多数用户比较熟悉的操作环境,在这一界面下完成协议的功能,将能进一步推动其获得更广泛的应用。其功能模块主要包括:

认证方式选择;

密钥产生(包括密钥选择,如D S AR S A) ;

密钥代理(选取密钥、修改、增删密钥):

SSH配置管理(协议版本(SSH 1/2)及认证方式选择,是否压缩等);

会话管理(己有连接会话的载入,新会话的建立)。

4.2.2系统设计目标及存在的问题

基于W i n d o w s平台实现S S H协议,要解决的主要问题涉及系统功能定义、终端字符支侍、用户界面设定等。关键的儿点内容包括:

系统功能包括远程连接、文件的远程传输(SCP及SFTP)、端口转发、Xll转发,以及相关的密钥生成、导入与删除管理等。

终端字符集的支持,包括终端类型、显示区域、字体与编码选择等。

用户界面的设定,主要包括功能选择、系统缺省设置,以及快捷键设置等。

4.2.3工作实施

分客户端和服务器两个实施阶段,利用已有的条件和资源,分别在客户端和服务器端实施,最后实现系统的整合。为保证接口的一致性,统一定义全局变量和局部变量,以顺利实现变量传递和保证接口的顺利衔接。考虑到为保证服务器端有较高的系统安全性,服务器端的操作系统可以使用Linux,这要在设计时考虑两种系统之间的互通。

协议环境设置完成后;进行SSH协议的具体认证过程,其流程参见图1,此处不再赘述。完成后在Windows环境下实现了基于SSH协议的安全通信,可以把命令、配置等以简捷的界面给用户提供安全通信。在实际中也证明,Windows环境下实现了SSH协议,既保证了网络的安全性,又实现了操作的简便性,达到了安全的目的。

五、结束语

根据当前网络技术推广和发展过程中遇到的安全问题,有针对性的选择应用层网络安全协议SSH作为研究对象,仔细分析了S S H协议的三个层次及其扩展协议,指出了协议本身和各种实现版本中存在的主要问题,并根据作者的研究和实践经验提出了相应的建议,嵌入了质询—响应认证方式,弥补了协议中的漏洞,消除了其脆弱性,在Windows环境下实现了SSH协议,并希望作为一种产品来应用。按照实际项目的需求,将SSH整合到目前的一些实际工程中应用,结果表明对应用后的速度影响不大,但显著增强了安全性,其效果令人满意。

摘要:安全Shell (SSH:Secure Shell) 是一种应用层的安全通信协议, 提供通信双方相互间身份的认证、通信数据的加解密处理、数据完整性校验等多种安全服务, 按照其实现的功能, 可归为一种应用层的虚拟专用网 (VPN) 协议。论文概要说明了SSH协议的基本概念, 然后对SSH会话从发起到结束的整个过程, 以及扩展协议进行了深入细致的研究和分析;归纳总结了SSH协议本身存在的若干缺陷和不足, 根据作者相关的研究和工作经验, 对这些问题进行了阐述, 并提出一系列实际操作过程中可以参考的建议;对部分安全漏洞, 特别是对缓冲区溢出漏洞, 进行了研究、分析, 修改了其脆弱性、弥补了漏洞, 并嵌入了质询-响应的认证方法。同时, 作者根据实际应用的需求, 基于Windows平台, 实现了SSH协议, 方便系统管理和提高SSH的可用性。论文最后总结与回顾全文, 介绍了SSH的应用情况, 并对未来的工作进行展望。

关键词:SSH, 网络安全,Windows,密码协议

参考文献

[1]圣安妮.卡利斯科著, 张蓬、匡巍、张建杰等译.SSH:UNIX Secure Shell工具.北京:机械工业出版社.2004

[2]戴关侠, 连一峰.正航, 系统安全与入侵检测.北京:清华大学出版社.2004

[3]李俊照, 王浩, 徐栋哲.基于SSH协议的集群构建与性能测试.计算机工程与应用.2005

[4]丁晓峰, 李周贤, 刘炳华, 顾巍, 吴楠宁.在SSH协议下的入侵检测[J].现代图书情报技术.2005

上一篇:学生公寓下一篇:构建和谐的理财社会论文

本站热搜

    相关推荐