在计算机网络中,也需要用这样的隔离措施把不相关的主体隔离出去。隔离的目的是不允许与客体不相关的主体接触到客体,所以有时候在形式上是隔离客体。
首先,我们要介绍两个概念——主体和客体。
实际上,从字面上我们也能理解这两个概念的含义。主体肯定是行为的发起者,而客体则是行为的目标。行为的主体最初是人,客体则是最终的目标。在人和目标中间,往往还会有一些起作用的中间物体。比如,打铁时,烧红的铁块是不能用手拿的,需要用钳子夹住铁块,那么对于铁块来说,钳子是主体,铁块是客体;对于控制钳子的人来说,人是主体,钳子就变成了客体。
在计算机中,最初的主体是计算机的访问者,而客体则是计算机中的各种资源,包括相关的硬件(如各个盘符)、相关的程序(如注册表、Office工具)、各类数据(如相关的表格)等。应该说,这些数据都以文件的形式保存在计算机中。
我们介绍完了主体、客体,下面再回到隔离上来。
在计算机中,隔离的方法主要有三种:空间上的隔离;时间上的隔离;利用代码进行隔离。
1.空间隔离
空间隔离很好理解,在现实社会中,空间隔离是最主要和最基本的隔离方法。院落、房间、楼体、街道、隔断、工位等都是现实社会中的空间隔离方法。当然,隔离的强度是不一样的。在开放办公环境中,工位虽然可以将每个工作人员隔离在一定的空间中,但是相邻的人员的动作、声音还是有可能干扰他人。而领导可能在相对封闭的房间内办公,封闭房间中的隔离效果肯定好于开放式的空间。一些重要的单位还建有高墙,高墙上有电网,门口有岗哨,进入时还有门禁等。这种隔离的强度更高。
在网络中也需要这样的隔离。当然,方法不同,隔离的强度也不一样。
2.时间隔离
时间隔离在现实社会中也是很常见的。我们去看一场电影,购买的电影票给定了我们在某个时间段在电影院某个座位上观看电影的权力。当然,看不看电影是我们的事,有了电影票,座位是可以坐的。但是,只能在电影票规定的时段使用座位,在另一个时段,这个座位就不归我们使用了。
在网络中,计算机也是可以分时工作的。比如,在云计算平台中,一台物理主机会被虚拟化为多台虚拟主机,CPU就是被分时复用的。在某个时间片,CPU支持A虚拟机的运算,在下一个时间片,则支持B虚拟机的运算。
3.代码隔离
代码隔离在现实社会中并不多见。举一个例子,以前,在一些条件较差的农村学校,往往几个年级的学生在一个教室中上课,老师给高年级的学生布置了数学作业,又马上给低年级的学生讲语文课。在同一个空间里,同一个时刻,两个年级的学生用不同的教学任务(类似于我们的不同的代码)实现了隔离。当然,干扰是存在的。在计算机系统中,可以利用协议的不同、密钥的不同,以及其他代码的正交性来实现代码隔离。比如,在移动通信中,就有码分多址这种代码隔离方式。
空间隔离就如同在一张白纸上划出好多格子,我们每个人只能在自己的格子里写字;时间隔离就如同我们在不同的时间分别在纸上写字;而代码隔离相当于我们用不同颜色的笔同时在同一张纸上写字,而我们都是色盲,只能认识一种颜色,其他的颜色对于我们的眼睛来说是茫然一片。
1.计算机与网络的空间隔离
在计算机网络中,使用最多的还是空间隔离。空间隔离又包括主机内的隔离和网络隔离。
(1)主机内的隔离
首先,利用计算机主机的操作系统对内存(包括各类的缓冲区)进行隔离,使系统软件与用户程序不在一个区域里运行,即便内存空间存在空余,也不能占用。同时,不同的用户也必须在各自的空间内运行,各个用户之间不能交叉使用内存。
但是,这样的隔离也不是万无一失的。比较早的时候,有一个叫作缓冲区溢出的漏洞,入侵者就是利用每个用户的内存空间有限的这一漏洞而实现攻击的。
缓冲区是内存中存放数据的地方。缓冲区溢出是指当计算机向缓冲区内填充的数据位数超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,从而对计算机安全造成危害。理想的情况是,程序检查数据长度,并且不允许输入超过缓冲区长度的字符。但是,绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患。操作系统使用的缓冲区又称为“堆栈”,在各个操作之间,操作指令会被临时存储在“堆栈”当中,“堆栈”也会出现缓冲区溢出。
缓冲区溢出是一种非常普遍也非常危险的漏洞,在操作系统和应用软件中广泛存在。利用缓冲区溢出攻击,可导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。第一个造成缓冲区溢出攻击的病毒——蠕虫病毒发生在1988年,它曾造成全世界6000多台网络服务器瘫痪。
(2)网络隔离
除了计算机主机内的隔离之外,在网络上也可以采取多种措施进行隔离。
人为设置网络边界
任何一个网络总是可以通过一个出/入口或者几个出/入口与其他网络进行连接,连接的目的就是在更大范围内共享网络资源,为人们提供更便捷的工作、学习、游戏、娱乐等手段。但是,这也给不法之徒提供了入侵的入口。为了防范这类入侵的发生,可以在出/入口处设置一个相关的设备,用这个设备作为网络的边界,通过边界防护来抵御入侵,最典型的边界防护设备就是防火墙。防火墙不仅起到隔离的作用,而且有相当多的功能(这里我们先不介绍其他功能)。防火墙用于隔离时,最简单的措施就是关闭一些IP地址,甚至关闭一段IP地址,这样就可以封闭入侵者的IP地址,使入侵者不能再利用这个IP地址对系统进行攻击。
当然,入侵者还可以换一个IP地址实施攻击,但是,一般一个地区的IP地址是按段分配的,如果把这一段的IP地址全部封闭,就可以更加有效地抵御攻击。
采用地址封闭虽然可以抵御入侵者,但如果正常的访问者也在这个IP地址段,那么他也不能访问网络了。而且,入侵者可以在网络上寻找跳板,跳板的IP地址可能不在这个IP地址段内,防火墙还要关闭跳板的IP地址才能抵御攻击。这是一个攻与防的对抗过程。
在网络内部实现区域的隔离
只在网络边界进行隔离是不够的,在网络内部还可以通过划分网段、设置V-LAN(虚拟专用网)等方法来实现内部的隔离。内部隔离可以利用交换机来实现。
在网络内部隔离有三个目的:一是把不同的应用隔离开;二是考虑到保护策略,如不同的数据类型的保护策略是不一样的,有些数据需要进行保密性保护,有些则不需要,把需要保密的数据放在一起,就容易按照保护策略来实施保护;三是考虑到保护强度,不同数据的价值是不一样的,这就需要给予它们不同强度的保护。
当然,没有哪一项措施是完美无缺的。比如,把所有需要保密的数据放在一起,从策略上说容易操作,但是一旦保护措施被突破,保护区里的所有保密资料就面临泄露的风险,所以需要采取多种措施来进行保护。
物理隔离
空间物理隔离最有效,即信任的网络不与任何不信任的网络进行连接,但是这种做法会严重影响到应用,所以要在应用与安全之间选择一个平衡点。必须要指出的是,网络的物理隔离也不是最可靠的,有些方法能破坏这种隔离。伊朗的震网病毒事故就是在完全物理隔离的内网中发生的。任何信任的网络绝对不可能不与外部网络进行数据交换,而这种数据交换就有可能被入侵者利用。人类本身的脆弱性(比如金钱、物质的诱惑)、心理上的麻痹大意、工作中的疏忽等都有可能被人利用,进而被入侵者用于实施攻击。
计算机屏幕的辐射也可能泄露正在显示的数据。这种泄露可能是光学的泄露(如利用视频接收),也可能是电磁学的泄露(捕捉显示器扫描电路的辐射的电磁信号),为网络供电的电源线也可能感应各种信号,从而将重要的数据泄露出去。实际上,在计算机机房中的其他金属类设备也可以感应电磁信号,这也是泄露源。一些计算机机房中有供暖用的暖气设备,这很危险。一方面,供暖时暖气管可能爆裂,导致水和水蒸气在机房中跑冒;另一方面,暖气网络可能将泄露的信号传递出去。现在还有关于超声波攻击的报道。
在物理隔离时,有时候需要数据在网际间交换,通常的做法是用移动介质先在中间机器上进行操作,再将数据转移到相关的网络中。中间机的作用是,在外部连接时先断开与内部的连接,复制外部的数据后对这些数据进行安全处理,如脱去这些数据的外壳(很多恶意代码都在这些外壳中),只将裸数据传送到目标网络中。进行安全处理之后,再将外部网络断开,连接到内部网络中,将裸数据传输至内部网络,然后重新封装外壳。
这里所说的外壳是数据呈现的媒体形式,如图像、图片、声音、文本等。裸数据没有这些外壳就不能以相应的媒体形式呈现,人们也就无法识别,因为人们看到的只是二进制代码。
2.计算机网络中的时间隔离
(1)计算机主机中的时间隔离
计算机主机的时间隔离主要体现在总线和CPU上。所谓总线就是一组线,用来连接CPU、内存等相关的元器件,是计算机内部信号传输的载体。这组线是多用户、多任务共享的,为了使各用户和各任务之间互不干扰,就要进行分时复用。
要实现分时复用,在计算机中,首先要有一个标准的时钟基准,俗称主频。主频也是衡量计算机性能的一个重要指标。有相同CPU处理能力、相同内存容量的计算机,主频越高,处理速度就越快。
以这个标准的时钟作为基准,就可以把时间分成若干多个小的时间片(英文为slot,在通信领域被翻译成时隙,在有的计算机著作中则被翻译为时间小片)。每个时隙就是处理一个用户或者一个任务的时间单元。在这个时间单元中,只处理这一项任务,而不会被其他用户或者任务干扰。在同一时刻执行同一任务时,这个任务占用的所有计算机资源就是一个进程。这个说法不是特别严谨,这里不会详细介绍进程这一概念,感兴趣的读者可以参考相关教材或资料。
(2)计算机网络中的时间隔离
在当前的计算机网络中,时间隔离的作用已经不太突出了。早期的计算机网络多数是总线网,执行以太网协议。几十台(甚至更多台)计算机都连接到一条总线上,就像现在各类电器都连接到总电源线上一样。只不过我们的电源线是两条,一条是火线,另一条是0线,这样就构成了电流的回路(还有一种情况是三条线,其中一条称为保护地线)。而网线则不只两条,当然,对于不同类型的网线,线的数量是不同的。例如:同轴电缆相当于两条线,而五类线、六类线则是更多条线。
以太网协议上的各计算机之间是要通信的,否则建立网络就失去了意义。
通信的发起方必须要找到接收方才能通信。如何在总线网上找到其他计算机(这个过程叫寻址)呢?发起通信的计算机先在网络上广播,告诉所有计算机“我要找谁”,那么被找的计算机会应答,其他计算机则当作没听见。找到要通信的这台计算机后,发起方就和接收方开始进行会话了,在它们会话期间,其他计算机是不能通信的。如果另一台计算机也想发起通信,它要先到总线上听一听,如果没有其他计算机在使用网络,就可以发起通信主叫。
实际上,在一条光纤上能连接多组用户,他们的通信是分时的,即每个时隙代表一个信道,每组通信都是在各自的时隙内完成的,相邻时隙间相互不干扰。这个时隙很短,人完全察觉不到产生的延迟。
(3)代码隔离
在计算机网络中,利用代码进行隔离也是非常重要的手段。
可以在网际之间建立隔离的信道,还可以用VPN实现隔离。VPN是利用加密技术形成的隧道效应实现的以代码方式进行的隔离。还有一些代码能够让计算机不显示这些数据的存在。
在无线通信中,代码隔离的应用更为普遍,特别是从第三代移动通信开始,CDMA技术被广泛应用。码分多址就是利用各代码之间的正交性实现隔离。从数学理论上来讲,隔离就是利用正交性,电视和广播的频道的隔离(利用频率进行隔离)、光纤通信中的时隙的隔离实际上都利用了这种正交性。我们可以用相似度理解正交性,正交是两个比较物之间不存在任何的相似度,甚至同一个物体在不同的时刻也是完全不相似的。