电信运营商系统安全

Unix高级安全设置

第一部分 Unix历史与发展1.1 UNIX简介UNIX 已有数十年的历史,在这期间,它的改变即使没有上亿次,也有数百万次了,有成千上万的个人和公司实现了上千种不同的版本,有上百万系统管理员在从微型嵌入式系统到超级计算机上都安装过它。无可争论,没有两个实际的UNIX操作系统是完全相同...显示全部
第一部分 Unix历史与发展
1.1 UNIX简介
UNIX 已有数十年的历史,在这期间,它的改变即使没有上亿次,也有数百万次了,有成千上
万的个人和公司实现了上千种不同的版本,有上百万系统管理员在从微型嵌入式系统到超级
计算机上都安装过它。无可争论,没有两个实际的UNIX操作系统是完全相同的。
  UNIX”一词是属于Open Group的一个商标,该组织是一个要求符号得到正确归属的国际
协会。在这数十年当中,该标识已经被冲淡到没有具体含义。虽然如此,Open Group仍发布
了“The Single UNIX Specification”,这可以在http://www.UNIX-systems.org/online.

html上看到。
  “Unix”是双关语,表示名字Multics,它最初被写作“Unics”,表示UNiplexed Info
rmation and Computing System。“Unix”和“UNIX”在如今都被广泛使用。曾经有一段时
间,Dennis Ritchie试图宣布用小写版本,因为“UNIX”不是开头字母组成。
  许多运行Linux等类似UNIX系统的人认为他们运行的是UNIX。正式UNIX系统和非正式UNI
X系统通常被认为属于一类----不论是书中、媒介、网上还是社会公认。
  按照UNIX FAQ的定义,UNIX是“一个用C语言编写的操作系统,它有层次文件系统并集成
了文件和设备I/O,其系统调用接口包括fork ( )和pipe ( )等服务,用户界面包括cc、tro
ff、grep、awk等工具和一个被选择的shell”。可以再加一些,UNIX为多任务提供一致的方
式,并内置有创建、同步和终止进程的操作,它可在不同种类计算机间进行移植。
1.2 UNIX发展与历史
1969年,Ken Thompson、Dennis Ritchie和其他一些人在AT&T贝尔实验室开始进行一个“li
ttle-used PDP-7 in a corner”的工作,它后来成为UNIX。10年里,UNIX在AT&T的发展经历
了数个版本。V4(1974)用C语言重写,这成为系统间操作系统可移植性的一个里程碑。V6(
1975)第一次在贝尔实验室以外使用,成为加州大学伯克利分校开发的第一个UNIX版本的基
础。
贝尔实验室继续在UNIX上工作到80年代,有1983年的System V(“五”,不是字母)版本和
1989年的System V,Release 4(缩写为SVR4)版本。同时,加利福尼亚大学的程序员改动了
AT&T发布的源代码,引发了许多主要论题。Berkeley Standard Distribution(BSD)成为第
2个主要“UNIX”版本。1984年的BSD 4.2版在大学和公司计算部门中得到广泛应用,它的一
些特征被吸收到SVR4中。
从90年代开始,AT&T的源代码许可证创造了市场的繁荣,不同开发者开发了数百种UNIX版本
。AT&T在1993年把UNIX产业卖给了Novell, Novell两年后又把它卖给了Santa Cruz Operati
on。同时,UNIX商标被转让给X/Open协会,X/Open协会后来成为了Open Group。
当UNIX的经营从一个实体到另一个实体传递时,几个长期的开发开始收获果实。传统上,要
得到一个运行的BSD系统,用户需要从AT&T得到源代码许可证。但到90年代早期,伯克利的开
发者在BSD上做了许多工作,使原始的AT&T源代码大部分被改动了。后续的程序员,从Willi
am和Lynne Jolitz开始在网络分布环境中开发BSD,后来在1992年成为386BSD 0.1版。这个最
初的“免费源代码”BSD具有三个分支,即:Net BSD、Free BSD和Open BSD,都以BSD 4.4为
基础。
1984年,程序员Richard Stallman开始开发来源于UNIX的免费GNU(GNU Not UNIX)。到90年
代早期,GNU项目出现了几个编程里程碑,包括GNU C库和Bourne Again Shell (bash)的发行
。整个系统除了一个关键因素即工作内核外基本完成。
接下来是芬兰赫尔辛基大学的学生Linus Torvalds。Linus看到了一个叫作Minix的小型UNIX
系统,觉得自己能做得更好。1991年秋天,他发行了一个叫“Linux”的免费软件内核的源代
码—是他的姓和Minux的组合。到1994年,Linus和一个内核开发小组发行了Linux 1.0版。L
inus和朋友们有一个免费内核,Stallman和朋友们拥有一个免费的UNIX克隆系统的其余部分
。人们把Linux内核和GNU合在一起组成一个完整的免费系统,该系统被称为“Linux”,尽管
Stallman更愿意取名为“GNU/Linux System”[6]。有几种不同类别的GNU/Linux:一些可以
被公司用来支持商业使用,如Red Hat、Caldera Systems和S.U.S.E;其他如Debian GNU/Li
nux,更接近于最初的免费软件概念。
Linux现已发展到内核2.2版。Linux能在几种不同体系结构的芯片上运行,并已经被各界接纳
或支持。其支持者有惠普、硅谷图像和Sun等有较长历史的UNIX供应商,还有康柏和Dell等P
C供应商以及Oracle和IBM等主要软件供应商。或许最具讽刺的是,微软承认无所不在的免费
软件的竞争性威胁,但它不愿或不能公开自己的软件源代码。
后来微软开始推出Windows NT (Windows 2000)。到90年代末,许多供应商开始放弃UNIX服务
器平台而转向Windows NT。例如Silicon Graphics 公司已决定把Intel硬件和NT作为未来的
图形平台。
第二部分 Unix典型安全隐患
2.1 RPC守护进程程序的错误使入侵者可以直接获得root权限
对Unix威胁最大可以说就是rpc上面的漏洞,远程过程调用(Remote Procedure Call)允许
一台计算机上的程序去执行另一台计算机上的程序。它们广泛的应用在各种网络服务中,如
文件共享服务NFS。有很多漏洞是RPC本身的缺陷导致的,它们正不停的涌现出来。有很明显
的证据表明,1999年末2000年初大规模的分布式拒绝服务攻击中,很多被作为攻击跳板的牺
牲品就是因为存在RPC漏洞。在Solar Sunrise事件期间,对美国陆军广为人知的成功攻击就
是因为在数百台国防部的系统中找到了一个RPC漏洞。
2.2 一些应用的远程漏洞
远程漏洞可以使远程攻击者在只对开放了有漏洞服务的应用利用的情况下,就可以得到一些
权限或者root权限。
例如:BIND程序存在的问题,利用nxt,qinv,in.named可直接得到root权限
BIND(Berkeley Internet Name Domain)软件包是域名服务(DNS)的一个应用最广泛的实现
软件--我们所有人都通过它来定位Internet上的系统,只需知道域名(如www.cnns.net
而不用知道IP地址,由此可体会它的重要性--这使它成为最受欢迎的攻击目标。
2.3 本地漏洞
本地漏洞虽然没有上面两种漏洞那么严重,但是他也是评估系统安全与否的一个重要因素,
它可以使权限地的系统用户来提升自己的系统权限,或者使一个得到了一些权限的远程攻击
者,扩大自己的战果,提升权限。
例如,ff.core缓冲区溢出漏洞,一个普通用户只要执行一个简单的脚本,就可以令缓冲区溢
出从而的到一个root shell。
2.4 暴露系统信息
严格的说这不是漏洞,但是他核你的系统安全相关。举例子来说,finger暴露了系统合法用
户名,默认shell等等信息,这就可以被攻击者利用起来猜密码。再如某个软件的版本号暴露
,就会令攻击者,针对此版本来进行攻击,这就使攻击者更容易的入侵的系统。
第三部分 常见Unix安全设置方案
3.1 Solaris 系列
3.1.1 PROM OpenBoot 和物理安全
3.1.1.1 OpenBoot安全级别
none :不需要任何口令。所有OpenBoot设置都可以修改,任何人只要物理接触到主控台,就
可以完全控制。command:除了boot和go之外所有命令都需要口令。full:除了go命令之外所
有命令都需要口令。
3.1.1.2 改变OpenBoot安全级别
首先使用eeprom security-password 命令设置OpenBoot口令,然后在root登入状态使用eep
rom security-mode=command命令改变安全级别为command或在OK状态:ok setenv security
-mode=command的密码保护来实现。
3.1.2 文件系统的安全
3.1.2.1 基础知识
文件系统是unix系统安全的核心。在unix中,所有的事物都是文件。Unix中的基本文件类型
有正规文件、目录、特殊文件、链接、Sockets等等。这些不同类型的文件以一个分层的树结
构进行组织,以一个叫"root"的目录为起始位置("/")。整个就是一个文件系统。每个文件对
应一个"i节点","i节点"包括UID(文件拥有者)、GID(文件所在组)、模式(文件的权限)、文
件大小、文件类型、ctime("i节点"上次修改时间)、mtime(文件上次修改时间)、atime(文件
上次访问时间)、nlink(链接数)。它表示了文件的基本属性。
大家注意到,"/"下有很多的目录,那么这些目录是干什么的呢?下面简要介绍一下目录结构
。如下:
/bin 用户命令的可执行文件
/dev 特殊设备文件
/etc 系统执行文件、配置文件、管理文件,主要是配置文件
/home 用户起始目录
/lib 引导系统以及在root文件系统中运行命令所需的共享库文件
/lost+found 与特定文件系统断开连结的丢失文件
/mnt 临时安装的文件系统(如光驱、软驱)
/proc 一个伪文件系统,用来作为到内核数据结构或正在运行的进程的接口(用于调试)
/sbin 只有root使用的可执行文件和只需要引导或安装/usr的文件
/tmp 临时文件
/usr 为用户和系统命令使用的可执行文件、头文件、共享库、帮助文件、本地程序(在/usr
/local中)
/var 用于电子邮件、打印、cron等的文件,统计文件,日志文件
文件系统有多种类型,unix内核支持如下文件系统:
1) ext2 固定和可移动磁盘都支持的一种高性能文件系统,用于linux
2) msdos 由MS-DOS和Windows使用
3) umsdos Linux使用的一种扩充的DOS文件系统,支持长文件名、权限设置
4) iso9660 遵从ISO9660标准的CD-ROM文件系统
5) hpfs High Performance Filesystem,高性能文件系统,OS/2使用
6) minix 在Minux OS中使用,最早的Linux文件系统
7) nfs 用来访问远程计算机中磁盘的网络文件系统
8) swap 用作交换的磁盘分区
3.1.2.2 文件权限
文件权限是unix文件系统安全的关键。Unix中的每个用户有一个唯一的用户名和UID(用户ID
号),每个用户属于一个或多个组。基本分组成员在/etc/passwd中定义,附加的分组成员在
/etc/group中定义。例如,用户tiger的UID为225,分组为11(students),此外,他还是分组
185(postgraduates)的成员。每个文件和目录有三组权限,一组是文件的拥有者、一组是文
件所属组的成员、一组是其他所有用户。"r"表示可读,"w"表示可写,"x"表示可执行。一共
9位(每组3位),合起来称为模式位(mode bits)。
模式位通常由一列10个字符来表示,每个字符表示一个模式设置,第一个指明文件类型,如
(d表示目录,-表示普通文件,l表示链接文件等等)。例如,用ls -l 命令显示如下:
drwxr-xr-x 2 root root 1024 Aug 13 09:22 backup/
-rw-r--r-- 1 root root 1824 Apr 21 18:45 client.c
-rw------- 1 root root 65536 Apr 22 17:56 core
-rw-r----- 1 root root 2351 Apr 22 14:01 cry1.bak
-rwxr-xr-x 1 root root 27492 Apr 21 18:47 crypt*
-rw-r----- 1 tiger tiger 2450 Apr 22 15:16 cryption_server.c
-rw-r----- 1 tiger tiger 1544 Apr 22 15:02 myinclude.h
-rwxr-xr-x 1 root root 8280 May 3 10:35 test*
例如最后一行以"-"开始,表示test使一个普通文件,文件拥有者可以读写执行、本组其他成
员可以读执行、其他用户可以读执行。我们可以用chmod和umask命令来改变权限,这很简单
,察看相应的帮助就知道怎么修改权限。
3.1.2.3 SUID/SGID
为什么要单独把他们从文件权限中分出来讲呢?因为,这是网络入侵者非常爱用的入侵入口
。SUID表示"设置用户ID",SGID表示"设置组ID"。当用户执行一个SUID文件时,用户ID在程
序运行过程中被置为文件拥有者的用户ID。如果文件属于root,那用户就成为超级用户。同
样,当一个用户执行SGID文件时,用户的组被置为文件的组。例如,PS命令以SUID root运行
,他从系统内存中读取,这是一般用户不能做的。SUID程序代表了重要的安全漏洞,特别是
SUID设为root的程序。
Unix实际上有两种类型的用户ID。"real user ID"是在登录过程中建立的用户ID。 "effect
ive user ID"是在登录后的会话过程中通过SUID和SGID位来修改。当一个用户运行一条命令
时,进程继承了用户登录Shell的权限,这时"real user ID"和"effective user ID"是相同
的。当SUID位被设置时,进程继承了命令拥有者的权限。例如普通用户运行passwd命令时,
他能够修改/etc/passwd文件,尽管文件是属于root的。这成为可能是因为passwd命令以roo
t的SUID权限运行。那么如何识别SUID程序呢?我们检查文件的权限模式,在它的第四位如果
不是"x",而是"s",就是一个SUID程序。例如,ls -l /bin/su命令显示:
-rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su*
表明su是一个SUID程序。
Unix系统安全的一种典型攻击就是创建一个SUID是root的shell拷贝,然后把他隐藏。通过调
用后门,攻击者就获得了root的权利。例如,某个系统管理员忘了关闭某个root的Shell,一
个坏人经过运行如下命令:
cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash
badman现在就有了一个bash的SUID root拷贝任其处理。他就有完整的root权限了。因此,系
统管理员应该定期察看系统中有哪些SUID和SGID文件。用下面的命令可以实现:find / -ty
pe f ( -perm -4000 -o -perm -2000 ) -ls
当然,攻击者可以通过修改find命令来逃避检测,所以要运行专门的检测软件(如Tripwire)
来进行检查。
3.1.2.4 加密与验证
Tripwire工具提出了使用密码校验和来确定文件是否经过了未认证的修改,加密技术可以用
来保护机密文件甚至整个文件系统。加密是通过密钥将明文转化为一堆乱码的密文,从而起
到保护文件内容的作用。Unix常用的加密算法有crypt(最早的加密工具)、DES(目前最常用的
)、IDEA(国际数据加密算法)、RC4、Blowfish(简单高效的DES)、RSA等等。具体的加密算法
这里不再阐明,需要了解请阅读Bruce Schneier的《应用密码学》一书。注意单向hash函数
,他处理任意长度的信息并返回一个固定长度的hash值(128位)。常用的有MD5、SHA、HAVAL
、Snefru等等。单向hash函数经常和公开密钥算法一起来创建数字签名,提供身份证明。与
传统的签名相比,数字签名还可以指出文件是否被修改过。
PGP是unix下用来保护信息特别是电子邮件的工具。他使用IDEA算法为数据加密,使用RSA算
法来进行密钥管理和数字签名,使用MD5来作为一个单向hash函数。其特点在于安全:不仅内
容被伪装,连发送者的签名也加密。PGP还可以用来加密本地文件。现在常用的Linux下的PG
P工具为:pgpe(加密)、pgps(签名)、pgpv(确认/解密)、pgpk(管理密钥)。请参考相应的帮
助来使用。
"特洛伊木马"的故事不知道大家听说过没有。古希腊人久攻特洛伊城不下,于是假装求和,
送了一个巨大的木马作为礼物,向城主Minerva表示和解。特洛伊人将木马拉入城内,到了夜
晚,藏在木马中的希腊士兵钻出来,里应外合,攻破特洛伊城。在计算机安全领域,这种欺
骗技巧成为攻击计算机安全的一种标准方式。他藏在你的计算机里,随时可能爆发,如果攻
击者需要的话。因此,一旦一个系统被装了特洛伊木马,他就不能在信任了,必须从新安装
。怎么避免呢,要养成良好的习惯,例如:限制下载,只从有声望的站点下载东西;检验下
载的文件;避免运行已编译好的二进制代码,从源代码开始编译;不执行不信任的电子邮件
发送的程序;不执行从非信任的Web站点得到的Java applets和Java Script。
MD5校验和有时与软件一起发行,用户可以用他来检验一个软件包。用户可以运行Red Hat L
inux中包含的md5sum工具,例如:md5sum cops.1.04.tar.gz
结果:lfa416872934e5bee99068f9989cb8b0 cops.1.04.tar.gz
和软件包自带的校验和文件比较,如果不符,则说明文件在传输过程中出了问题,最好从新
下载,本文件不可靠。md5sum还可以用来检验系统文件,在第一次安装系统之后对重要的li
lo系统二进制文件进行一下校验:md5sum lilo,其结果应该一直保持不变,除非升级。
3.1.2.5 完整性检查
完整性是安全系统的核心属性。用户需要知道昨天写的文件和今天打开的文件没有被改动。
攻击者可以用很多方法破坏文件系统,从依靠错误配置的权限获益到放置特洛伊木马和病毒
。Linux中用cksum命令对一个特定文件执行16位校验和的计算,上面的md5sum也是一个检验
的命令。
RPM(Red Hat Package manager)是由Red Hat Software开发并包含在其Linux产品之中的多功
能软件安装管理器。他可以用来建立、安装、查询、检验、升级和卸载独立的软件包。
3.1.2.6 加密文件系统
加密文件系统是文件系统安全的一个更引人注目的方法。他根据一个简单的推断:如果一个
系统保存机密数据,那么就应该以加密形式保存。加密文件系统(CFS)的核心思想是: CFS为
目录和文件提供一个透明的接口,并自动使用用户的密钥加密。一条单独的命令把一个密钥
和一个目录关联起来,从这时起,目录的内容在写时自动加密,在打开时自动解密。
一个由意大利人开发的透明加密文件系统(TCFS),用户甚至不知道他们的文件倍加密了。从
下面的地址下载:http://tcfs.dia.unisa.it/
3.1.2.7 备份
备份的重要性我想不需要多说了,那么备份有那些策略呢?常见的有:系统初装时的备份、
定期备份、增量式备份(只备份改动的)、特别备份(为某些文件备份)等等。Linux系统提供了
以下备份工具:
1) cp:拷贝,例如把dir1中的所有内容拷贝到dir2:cp -R dir1 dir2
2) tar:可以创建、把文件添加到或从一个tar档案中解开文件。档案本身也是一个文件,它
包含其他的许多文件和有关信息。Tar最初用于磁带机。
3) cpio:把文件拷贝进或拷贝出一个cpio档案或tar档案,与tar类似
4) dump:得到整个文件系统并把他拷贝到备份介质上,一个确保完整备份的正规方式是跟随
定期增量备份运行一个0级或完全备份,dump支持10个级别并能把上次备份后改动的所有文件
以更低的级别备份。缺省情况dump将备份到磁盘介质。例如,把一个SCSI硬盘(/dev/rsd0a)
以0级备份到磁带(/dev/rst0)。dump 0f0 /dev/rst0 1500 /dev/sd0a
5) restore:用来恢复整个文件系统或提取单个文件。与dump相对。注意,restore命令特别
冒险,因为他运行SUID root,像任何SUID root程序一样,可以根据自己的风险来运行rest
ore。
3.1.2.8 其他常见系统安全工具导航
1)CRYPT BREAKERS WORKBENCH一个集成多种工具的平台,帮助一个加密人员读取BSD4.2加密
的文件。
ftp://coast.cs.purdue.edu/pub/tools/unix/cbw
2)HOBGOBLIN
ftp://coast.cs.purdue.edu/pub/tools/unix/hobgoblin/
3)TRIPWIRE,强烈推荐,是一个文件系统完整性检查工具。
http://www.tripwiresecurity.com/
4)TROJAN,一个可以被任何用户运行来检查特洛伊木马的perl程序。
ftp://coast.cs.purdue.edu/pub/tools/unix/trojan/trojan.pl
5)PGP,流行的邮件和文件加密程序。
http://rufus.w3.org/linux/RPM/pgp.html
6)LIBDES,建立一个DES加密库和一个DES加密程序的工具。包括一个crypt(3)的快速实现。

ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/
3.1.3 用户账号和环境的安全
3.1.3.1 口令管理增强方法
可以使用如下命令及其参数来增强对用户密码的管理:
1)passwd -n 30 user #强迫用户每30天修改一次密码;
2)passwd -f user #强迫用户在下一次登录时修改口令;
3)passwd -n 2 -x 1 user #禁止用户修改口令;
4)passwd -l user #封锁用户账号,禁止登录。
3.1.3.2 CRACK
Crack可以找出/etc/shadow中那些容易猜测的口令,虽然运行crack将会使CPU的负载加重,
但它在第一次运行时就可以给出10%系统帐号的口令。
URL:ftp://sable.ox.ac.uk/pub/comp/security/software/crackers/
3.1.3.3 取消ROOT的远程登陆
默认在/etc/default/login里加上 "CONSOLE"行,在/etc/ftpusers里加上root。
3.1.3.4 配置ROOT的环境
1)将umask设为077或者027.
2)查看你的环境中路径设置情况,不要有./
3.1.3.5 删除不必要的帐号
移去或者锁定那些不是必须的帐号,比如sysuucpnuucplisten等等,简单的办法是在/et
c/shadow的password域中放上NP字符。
3.1.3.6 NIS的安全问题
NIS从来就不是一个安全的服务,如果配置得当的话NIS+会更好些,就象暴力破解密码一样,
NIS域名如果被猜出来,就会给入侵者提供相当丰富的信息,要关闭这个漏洞,可以将信任主
机的地址放在/var/yp/securenets中。并且考虑使用NIS+或者secure RPC。
3.1.3.7 取消rlogin/rsh服务
移去/etc/hosts.equiv和/.rhosts以及各home目录下的.rhosts,并且在/etc/inetd.conf中
把r系列服务都杀掉,然后找出inetd的进程号,重启它。
3.1.3.8 限制通过网络进入系统
Telnet和ftp守护进程是从inetd进程启动的,inetd的配置文件是/etc/inetd.conf,还包含了
其它的各种服务,所以你可以干脆移去这个文件,新建一个只包括以下两行的文件:
ftp stream tcp nowait root /usr/local/bin/tcpd /usr/local/bin/wu-ftpd
telnet stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.telnetd
当然这是基于你需要telnet及ftp的基础上的,如果你连这两个服务都不用的话,你就可以将
它注释掉或者删除,这样在系统启动的时候inetd就不需要启动了。
Tcpd的访问控制是由/etc/hosts.allow和/etc/hosts.deny文件控制的,tcpd先查找/etc/ho
sts.allow,如果你在这里面允许了某几台主机的telnet或ftp访问的话,那么deny访问就是
对其它所有机器的了。这是"默认拒绝"的访问控制策略,下面是一个hosts.allow文件的样本

ALL: 172.16.3.0/255.255.255.0
这将允许172.16.3.0网络的主机上任何用户访问你的telnet及ftp服务,记住在这里要放置I
P地址,因为域名比较容易受到欺骗攻击……
现在我们准备拒绝其余所有人的连接了,将下面的语句放在/etc/hosts.deny中:
ALL: /usr/bin/mailx -s "%d: connection attempt from %c" root@mydomain.com
这条指令不仅拒绝了其它所有的连接,而且能够让tcpd发送email给root--一旦有不允许的连
接尝试发生时。
现在你可能希望用syslog记录下所有的访问记录,那么在/etc/syslog.conf放进如下语句:
auth.auth.notice;auth.info /var/log/authlog
注意两段语句间的空白是tab键,否则syslog可能会不能正常工作。
3.1.3.9 配置S/Key
S/Key是一个用于实现安全的一次性口令方案的软件,它根据一系列信息(包括一个秘密口令
)通过MD5处理而形成的初始钥匙,该初始钥匙再交给MD4进行处理,资助将128位的数字签名
缩成64位,该64位信息再次传给MD5函数,这个过程一直持续直到达到期望值……
开始使用S/Key时,要建立一个以/usr/local/bin/keysh为shell的帐号:
在/etc/passwd中加入
access:x:100:100:Access Account:/tmp:/usr/local/bin/keysh
并且在/etc/shadow中加入
access:NP:6445::::::
然后使用passwd access命令来设定用户的访问密码。
由于/usr/local/bin/keysh不是一个标准的shell,所以你的/etc/shells文件中内容如下:
/sbin/sh
/usr/local/bin/keysh收起
参与23

查看其它 20 个回答skyzqq的回答

skyzqqskyzqq系统运维工程师中国联通河南省分公司
使用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重起系统
电信运营商 · 2009-05-11
浏览5631

回答者

skyzqq
系统运维工程师中国联通河南省分公司
擅长领域: 服务器网络Unix

skyzqq 最近回答过的问题

回答状态

  • 发布时间:2009-05-11
  • 关注会员:2 人
  • 回答浏览:5631
  • X社区推广