[转帖]常见Unix安全设置方案(3)--Solaris 系列_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3458 | 回复: 0   主题: [转帖]常见Unix安全设置方案(3)--Solaris 系列        下一篇 
liulin_2
注册用户
等级:少校
经验:1143
发帖:85
精华:5
注册:2012-12-10
状态:离线
发送短消息息给liulin_2 加好友    发送短消息息给liulin_2 发消息
发表于: IP:您无权察看 2012-12-10 16:54:30 | [全部帖] [楼主帖] 楼主

3.1.9.2 ARP
有关ARP协议的细节,在这里我们就不再详细介绍了。对于sun的系统,核心默认的ARP表过期
的时间是5分钟,并且可以调节.另外一张表是ip层的路由表,它和arp表配合记录动态路由信
息,20分钟过期,最后一个特性是”无偿ARP” ,即系统广播自己的硬件地址。这个特性用来
诊断是否存在相同的硬件地址,另外也用来生成硬件地址的变动通知。
1)ARP攻击
针对ARP的攻击主要有两种,一种是DOS,一种是Spoof。ARP欺骗往往应用于一个内部网络,我
们可以用它来扩大一个已经存在的网络安全漏洞。
如果你可以入侵一个子网内的机器,其它的机器安全也将受到ARP欺骗的威胁。同样,利用A
PR的DOS甚至能使整个子网瘫痪。
2)对ARP攻击的防护
防止ARP攻击是比较困难的,修改协议也是不大可能。但是有一些工作是可以提高本地网络的
安全性。
首先,你要知道,如果一个错误的记录被插入ARP或者IP route表,可以用两种方式来删除:
a. 使用arp -d host_entry
b. 自动过期,由系统删除
这样,可以采用以下的一些方法:
1). 减少过期时间

#ndd -set /dev/arp arp_cleanup_interval 60000
#ndd -set /dev/ip ip_ire_flush_interval 60000


60000=60000毫秒 默认是300000
加快过期时间,并不能避免攻击,但是使得攻击更加困难,带来的影响是在网络中会大量的
出现ARP请求和回复,请不要在繁忙的网络上使用。
2). 建立静态ARP表
这是一种很有效的方法,而且对系统影响不大。缺点是破坏了动态ARP协议。可以建立如下的
文件:

test.cnns.net 08:00:20:ba:a1:f2
user. cnns.net 08:00:20:ee:de:1f


使用arp -f filename加载进去,这样的ARP映射将不会过期和被新的ARP数据刷新,除非使用
arp -d才能删除。但是一旦合法主机的网卡硬件地址改变,就必须手工刷新这个arp文件。这个方法,不适合于经常变动的网络环境。
3).禁止ARP
可以通过ifconfig interface -arp 完全禁止ARP,这样,网卡不会发送ARP和接受ARP包。但
是使用前提是使用静态的ARP表,如果不在apr表中的计算机 ,将不能通信。这个方法不适用
与大多数网络环境,因为这增加了网络管理的成本。但是对小规模的安全网络来说,还是有
效和可行的。
3)IP Forwarding (IP转发)
IP是用来传输数据的底层协议。IP 转发是在不同网卡之间路由包数据的过程。一般是用路由
器来实现,但是拥有多网络接口的主机也可以实现。当有两个网络接口的时候,Solairs系统
默认打开ip转发。
1) 关闭IP转发
对于多宿主主机,存在可能的安全问题是,攻击者可能通过ip转发的方式访问到私有网络。
solaisr系统中,包转发能很的容易关闭。简单的生成一个文件 /etc/notrouter,就能在
下次启动的时候关闭ip转发。另外通过ndd命令也能在系统运行的时候关闭ip转发:

#ndd -set /dev/ip ip_forwarding 0


2) 严格限定多主宿主机
如果是多宿主机,还可以加上更严格的限定防止ip spoof的攻击

#ndd -set /dev/ip ip_strict_dst_multihoning 1


默认是关闭的(值为0)
3) 转发包广播
由于在转发状态下默认是允许的,为了防止被用来实施smurf攻击,关闭这一特性。 (参见c
ert-98.01)

#ndd -set /dev/ip ip-forward_directed_broadcasts 0


4)路由
路由的过程就是检查路由信息,从而决定如何从哪个接口传输数据包的过程。即使一个桌面
系统,也要有路由设置。路由表需要实时的升级。现在有多种路由协议可以用来路由数据。
Solaris系统使用in.routed守护程序支持RIP version 1,使用in.rdisc守护进程支持ICMP路
由更新。当solairs系统配置成为一个路由设备来转发数据包的时候,它通过上面的两种方式
动态更新路由信息。
5)攻击
有多种方法能威胁动态路由协议。攻击者能伪造虚假的路由更新信息发送过来,从而达到DO
S的效果;同样的方法,还能使数据报文转发到其他的网络上,使攻击者能监听数据。
默认的solairs系统使用系统守护程序动态管理路由信息。静态路由很好的防止路由信息被远
程动态改变。使用/etc/defaultrouter来设置本地子网的路由。使用route命令来设置其他路
由信息。
但是对于一个简单网络来说,使用静态路由是合适的,一旦网络中有较多的路由设备,必须
使用动态路由。Solairs系统将来也会继续支持动态路由协议。
l 转发源路由包
源路由包中包含了了指定数据如何路由的信息。因此攻击者可能使用源路由包绕过某些特定
的路由器和防火墙设备,也可能用来避开一个已知的IDS系统的监控范围。在大多数solairs
的应��系统上,是不需要这个特性的。由于solairs在打开ip转发以后默认支持源路由转发,
所以我们必须手动关闭它:

#ndd -set /dev/ip ip_forward_src_routed 0
6)ICMP


ICMP:网络控制信息协议。下面讨论在IP驱动上配置solaris的ICMP特性。
1) 广播:
ICMP广播经常会带来麻烦,这里有一条原则来防止广播风暴-控制ICMP的错误信息不被生成
。为来防止攻击者利用ICMP实施DOS攻击,最好禁止本地网络对ICMP广播的响应。Solairs系
统能调节三种ICMP广播的参数。
2)响应Echo广播:
Echo广播通常用来诊断网络主机的存活情况,一旦主机收到一个对广播地址的echo请求,默
认情况下所有系统会回复这个广播要求。当有人恶意定制过量的echo包,系统中的流量将大
为增加。因此我们可以关闭对echo广播的响应

#ndd -set /dev/ip ip_respond_to_echo_boadcast 0


3)响应时间戳广播
时间戳通常用来同步两个不同系统的时钟,但是系统没有必要回复对广播地址发送的时间戳
请求,所以我们可以关闭这种回应。

#ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0


4)地址掩码广播
地址掩码请求被用来确定本地掩码,通常是网络中无盘工作站在启动的时候发送。用下面的
命令能禁止对这样请求的应答

#ndd -set /dev/ip ip_respind_to_address_mask_broadcast 0


7)重定向错误
1)重定向错误
通常是路由器用来通知主机使用另一个路由器来传输数据的指示报文。报文重指定的路由器
必须和发送路由器一样连接同一个子网,而收到报文的主机必须在自己的路由表里新增一条
到那个子网的路由。不像ARP的包,这个路由不会过期也不会自动删除。很多系统检测这样的
报文用来发现错误和潜在的问题,从而优先更改自己的路由表。
2)接受重定向错误
一个攻击者能伪造重定向错误的报文从而给目标主机装载一个新的路由,而这个路由也许更
本就是错误的,这样主机就不会和一些特定的主机或网络通信,这是一种DOS攻击。虽然重定
向报文本身有一些校验规则,但是这些规则能很容易的被欺骗。而且目前存在大量的工具来
达到这个目的。大多数只有一条默认路由主机系统是不需要理会这种报文的,因此我们可以
使用ndd命令忽略ICMP重定向错误报文。(solairs默认是不忽略的)

#ndd -set /dev/ip ip_ignore_redirect 1


3)发送重定向错误报文
只有路由器才需要重定向错误,任何主机即使是多宿主主机也不需要发送这种报文,因此我
们可以使用ndd来禁止本机发送错误重定向报文。

#ndd -set /dev/ip ip_send_redirects 0


4)时间戳响应
就像前面提到的,时间戳广播报文在大多数环境下是不需要的。而solaris系统还能够完全不
接受这种报文。

#ndd -set /dev/ip ip_respond_to_timestamp 0


关闭这个特性以后,有些使用rdate系统命令的unix主机将不能再同步时钟。但是solaris 2
.6和7使用更好的时钟同步方式-NTP(网络时间协议),请参见xntpd的帮助。
8)SYN_flood攻击
TCP-SYN flood又称半开式连接攻击,每当我们进行一次标准的TCP连接(如WWW浏览,下载文
件等)会有一个一个三次握手的过程,首先是请求方向服务方发送一个SYN消息,服务方收到
SYN���,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后则再次向服务方发送
一个ACK消息,一次成功的TCP连接由此就建立,可以进行后续工作了,如图所示:
请求方 服务方

---------------------> SYN
SYN-ACK <----------------
----------------------> ACK


TCP-SYN flood在它的实现过程中只有前两个步骤,当服务方收到请求方的SYN并回送SYN-
ACK确认消息后, 请求方由于采用源地址欺骗等手段,致使服务方得不到ACK回应,这样,服
务方会在一定时间处于等待接收请求方ACK消息的状态,一台服务器可用的TCP连接是有限的
,如果恶意攻击方快速连续的发送此类连接请求,则服务器可用TCP连接队列很快将会阻塞,
系统可用资源,网络可用带宽急剧下降,无法向用户提供正常的网络服务。
对于solaris 2.5.1,只有安装了patch 103582-1(或以上)才能防止syn_flood.在synflood没
有流行以前,连接队列和backlog队列是相同的,solairs 2.6/7和安装了patch以后的2.5.1
系统,现在存在两条队列,一个是已连接的队列,一条是未连接完成的队列。SYN攻击时只能
填充后一条队列,而且,一旦队列满,将随机丢弃老的syn包。系统还会监控这个队列被短时
间填充的情况,一旦怀疑是syn_flood,将在系统的messages中记录下来。

Mar 8 19:24:01 example unix: WARNING: High TCP connect timeout rate!
System (port 80) may be under a SYN flood attack!


新队列的大小也是可以调节的,繁忙的web服务器需要提高未连接队列的大小。默认的大小是
1024,我们可以提高到4096。

#ndd -set /dev/tcp tcp_conn_req_max_q0 4096


当然,一般情况下,核心的队列增大,系统的内存最好也应有相应的增加。
9)连接耗尽攻击
SYN flood攻击不同,连接耗尽攻击不太常见。因为这种攻击必须使用真实IP,攻击的目标
是已连接队列。许多系统有一个同时连接的上限,取决于核心参数和系统内存情况。作为通
常的web服务器,这个上限值很难达到,因为http的连接是典型的短时连接。但是一个攻击者
可能快速发送大量的连接请求,同时保持连接,这样正常访问者的连接就可能被服务器拒绝

我们可以通过优化系统核心和增加内存来缓解,但不是根本的方法。因为攻击者可能同时调
动多台机器同时攻击。当然,我们可以在发现攻击以后,在防火墙或路由器上拒绝这些IP
源的连接。
如果不通过网络设备,仅仅通过调节系统参数来缓解攻击。一方面,可以调节web server,
apache的timeout参数,减短连接保持时间,另一方面,我们可以将核心以连接队列参数增大

(默认是128)。
#ndd -set /dev/tcp tcp_conn_req_max_q 1024


以上的方法能阻止大多数连接耗尽的攻击企图,除非攻击者调动更多的资源,发动大规模的D
DOS,但这样会使攻击者更容易暴露。
10)IP 欺骗
IP欺骗基本原理:
TCP连接的建立 :为了利用TCP连接交换数据,主机间首先必须建立一个连接。TCP建立连接时
可以分为3个 步骤,称为三步握手法。如果主机A运行rlogin客户程序,并且希���连接到主机
B上的rlogin daemon 服务器程序上,连接过程如图二所示。

1 A ---SYN---> B
2 A <--SYN/ACK--- B
3 A ---ACK---> B


需要提醒大家的是,主机A和B的TCP模块分别使用自己的序列编号。在时刻1时,客户端 通过
设置标志位SYN=1告诉服务器它需要建立连接。同时,客户端在其TCP头中的序列号域SEQ放置
了它的初始序列号(ISN),并且告诉服务器序列号标示域是有效的,应该被检查。在时刻2
时,服务器端在接收了上面的SYN后,作出的反应是将自己的ISN和对客户端的ACKA发向客户
端并且告知下一个期待获得的数据序列号是(ISN+1)。客户端在第一流时刻,对服务器的I
SN进行确认。这时,数据传输就可以进行了。ISN与序列号的递增了解序数编号如何选择初始
序列号和如何根据时间变化是很重要的。似乎应该有这种情况,当主机启动后序列编号初始
化为1,但实际上并非如此。初始序列号是由tcp_init函 数确定的。ISN每秒增加序列号128
000,如果有连接出现,每次连接将反计数器的数值增加 64000。很显然,这使得用于表示I
SN的32位计数器在没有连接的情况下每9.32小时复位 一次。之所以这样,是因为这样有利于
最大限度地减少旧有连接的信息干扰当前连接的 机会。这里运用了望2MSL等待时间的概念(
不在本文讨论的范围之内。)如果初始序列 号是随意选择的,那么不能保证现有序列号是不
同于先前的。假设有这样一种情况,在 一个路由回路中的数据包最终跳出了循环,回到了“
旧有”的���接(此时其实是不同于 前者的现有连接(,显然会发生对现有连接的干扰。 端
口号 为了提供对TCP模块的并行访问,TCP提供了叫做端口的用户接口。端口被操作系统内核
利用来标示不同的网络进程,也就是严格区分传输层入口的标示(就是说,IP不关心他 们
的存在)。TCP端口与IP地址一起提供网络端到端的通信。事实上,在任何时刻任何I ntern
et连接都能由4个要素来措述:源IP地址、源地址端口号、目的IP地址和目的地址。采样目标
主机发出的TCP序列号,猜测出它的数据序列号。然后,伪装成被信任的主机, 同时建立起
与目标主机基于地址验证的应用连接。如果成功,黑客可以使用一种简单的命令放置一个系
统后门,以进行非授权操作。
目前,RFC 1498定义了更好的随机ISN生成方法,使得这种攻击很难成功。对于solaris系统
ISN生成有三种方式。
0: 可预测的ISN
1: 增强的ISN 随机生成
2: RFC 1948描述的ISN生成方式
所有版本的solaris默认生成方式值是1。2.5.1只有 0,1两种方式,2.6/7拥有0,1,2三种ISN
生成方式。
我们可以修改/etc/default/inetinit文件来提高ISN的生成强度。将 TCP_STRONG_ISS=1改为
TCP_STRONG_ISS=2重起系统

他生效。对于solair 2.5.1,此方法无效。
11)增加私有端口
一般的情况下,1-1024端口被称为私有端口,只允许具有根权限的进程连接。但是有些大于1
024的端口,即使需要这样的限制,却无法定义,如NFS的服务器端口2049,当然还有一些其
他定义的高于1024的私有端口。
solairs2.5.1/2.6/7下使用如下方式,可以自定义最小的非私有端口

ndd -set /dev/tcp tcp_smallest_nonpriv_port 205


这样以来,0-2049都被定义为私有端口。在solaris 2.6/7下,还能使用另一个参数单独指
定私有端口。

#ndd /dev/tcp tcp_extra_priv_ports
2049
4045


用来显示已经定义的扩展私有端口

#ndd -set /dev/tcp tcp_extra_priv_ports_add 6112


来增加新的私有端口定义。
使用 ndd -set /dev/tcp tcp_extra_priv_ports_del 来删除定义。
要注意的是,不要随便定义私有端口,因为有些非根权限的进程会使用这些端口。特别是改
变最小非私有端口这个参数,经常会引起问题。应仔细分析你的需求再用扩展私有端口定义
的方式单独增加。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论