




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UNIX系统安全培训手册一. 操作系统3二. UNIX起源/发展/分支3三. UNIX系统基础知识/命令/安全配置51. 有用的命令5(1) lsof5(2) chattr6(3) Netstat /sockstat6(4) md5sum7(5) acct7(6) Last/lastlog82. 用户环境变量/控制文件8(1) profile8(2) history93. 文件系统(fs)9(1). 一般文件系统:10(2). 其它平台文件系统:11(3) 日志式文件系统:11(4) 网络文件系统:12(5) 虚拟文件系统:12(6) 特殊用途文件系统:13(7) 文件系统目录结构134. 堆栈溢出/non-exec stack14(1) 什么是堆栈溢出14(2) 堆栈溢出的危害14(3) 如何防止堆栈溢出145. 日志记录15(1) 由syslog记录的日志15(2) 由login记录的日志文件16(3) 由程序自己记录的日志文件16(4) core dump记录166. 安全配置16(1) 用户帐号的安全配置16(2) 用户环境的安全配置17(3) 系统提供程序的安全配置18四. UNIX服务进程介绍/安全配置181. SYSTEM V结构的启动控制182. BSD 结构的启动方式203. 常用服务进程的配置要点21(1). Apache的配置要点21(2). ftp 的配置要点23(3). DNS的配置要点24五. 第三方安全软件/Module介绍251. SSH25(1) 什么是SSH ?25(2) SSH协议的内容25(3) SSH的安全验证26(4) SSH的应用262.tcp_wrapper273. tripwire284. non-exec stack28(1). Libsafe:28(2). PAX: non-exec stack module29(3). RSX: non-exec stack/heap module30(4). kNoX:non-exec stack/heap module30六. 了解系统入侵301. 特征30(1) 明显特征30(2) 其他特征302. 处理方法31(1) 断开网络,切换到安全的环境。31(2) 检查系统31七. Linux系统配置经验.321. 关于系统分区划分322. 关于机器的启动密码323. 用户管理32(1) 帐号和密码管理32(2) 用户环境334. 系统文件,安全34(1) 关于SUID程序34(2) 关于系统配置文件34(3) 关于系统日志34(4) 关于补丁355.网络服务,响应35(1) 关闭不需要的服务35(2) 针对TCP/IP层的保护36一. 操作系统一般情况下,我们不能直接操作裸机,必须通过一个叫做基本输入输出系统的软件系统(英文为Basic Input/Output System,简称BIOS),才能操作控制裸机,之所以这样称呼它,是因为它提供了最基本的计算机操作功能,如在屏幕上显示一点,接收一个键盘字符的输入等。在基本输入输出系统的外面,操作系统(Operating System),专门负责管理计算机的各种资源,并提供操作电脑所需的工作界面。有了它们,人们才可以方便自如地使用电脑。 应用软件一般都运行在操作系统之上,由专业人员根据各种需要开发。我们平时见到和使用的绝大部分软件均为应用软件,如杀毒软件,文字处理软件,学习软件,游戏软件,上网软件等等。下图为一套完整的电脑系统示意框图。二. UNIX起源/发展/分支UNIX的历史开始于1969年ken Thompson,Dennis Ritchie(即著名的K&G,C语言的发明人)与一群人在一部PDP-7上进行的一些工作,后来这个系统变成了UNIX。它主要的几个版本为: V1(1971):第一版的UNIX,以PDP-11/20的汇编语言写成。包括文件系统,fork、roff、ed等软件。 V4(1973):以C语言从头写过,这使得UNIX修改容易,可以在几个月内移植到新的硬件平台上。最初C语言是为UNIX设计的,所以C与UNIX间有紧密的关系。V6(1975):第一个在贝尔实验室外(尤其是大学中)广为流传的UNIX版本。这也是UNIX分支的起点与广受欢迎的开始。1.xBSD (PDP-II)就是由这个版本衍生出来的。 V7(1979):在许多UNIX玩家的心目中,这是“最后一个真正的UNIX,”这个版本包括一个完整的K&RC编译器,Bourne shell。V7移植到VAX机器后称为32V。 目前开发UNIX(System V)的公司是Unix System Laboratories (USL)。USL本为AT&T所有,1993年初被Novell收购。Novell于1993年末将UNIX这个注册商标转让给X/Open组织。 目前为止,UNIX有两大流派:那就是AT&T发布的UNIX操作系统System V与美国加州大学伯克利分校发布的UNIX版BSD(Berkeley Software Distribution)。SVR4是两大流派融合后的产物。1991年底,与System V针锋相对的开放软件基金会(Open Software Foundation)推出了OSF/1。 现在几种主要的UNIX版本: * AIX:IBM的UNIX,是根据SVR2(最近已经出到SVR3.2)以及一部分BSD延伸而来,加上各种硬件的支持。具备特有的系统管理(SMIT)。 * 386BSD:Jolitz从Net/2 software移植过来的。支持Posix,32位。 * FreeBSD:1.x从386BSD 0.1而来,FreeBSD 2.x版是用4.4BSD lite改写。 * HP-UX(HP):旧系统是从S III(SVRx)发展面来,现在是由SVR2(4.2BSD)发展而来,目前是10.x版。 * Linux(x86):遵从POSIX,SYSV及BSD的扩展,这一点从上页表中即可看出。 * OSF/1(DEC):DEC对OSF/1的移植。 * SCO UNIX(x86):SVR3.2,目前影响较大的PC UNIX。 * SunOS(680x0,Sparc,i386):根据4.3BSD,包含许多来自System V的东西。Sun的主要成果在于:NFS,OpenLook GUI标准,现演变为Solaris 。 * Ultrix(DEC):根据4.2BSD再加上许多4.3BSD的东西。 * Xenix(x86):Intel硬件平台上的UNIX,以SVR2为基础,由微软推出。在中国使用较广泛。以下是发展结构图:三. UNIX系统基础知识/命令/安全配置1. 有用的命令(1) lsof 下载地址: /projects/lsof/ 用途: 列举打开的文件(list open files).由于在UNIX中文件的多样性,一个socket连接也可以理解为一个文件句柄描述符. 基本命令: 1). 查看当前连接,类似于netstat 2) 查看某个进程打开或者使用了哪些文件:从上面可以看出来21端口ftp是由xinetd提供服务,如果我们想看关于ftp进程打开了哪些文件,可以运行命令如图: 还有其他操作引用请参看lsof 的man page(2) chattr 给ext2系统上的文件设置属性.比如设置成只读,这样即使是root,也不能使用rm 命令删除掉. Chattr是为linux的ext2文件系统服务的,在BSD下,可以用chflags命令.比如:锁定文件1,不允许删除:rootmobile test# ls1rootmobile test# lsattr- ./1rootmobile test# chattr +i 1 /*设置不能更改属性 */rootmobile test# lsattr-i- ./1rootmobile test# rm 1rm: remove write-protected file 1? yrm: cannot unlink 1: Operation not permitted /*已经不允许删除了 */rootmobile test# chattr -i 1rootmobile test# rm 1rm: remove 1? yrootmobile test# lsrootmobile test#具体详细帮助请参考man chattr(3) Netstat /sockstatNetstat 查看网络连接命令,可以知道当前系统有那些连接,那些端口是listen状态等。Sockstat是BSD下的程序,可以用来查看网络进程的PID号(对应linux下netstat p参数)。Linux下查看TCP连接:rootmobile test# netstat -antActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 :139 :* LISTENtcp 0 0 :80 :* LISTENtcp 0 0 :22289 :* LISTENtcp 0 0 :21 :* LISTENtcp 0 0 :22 :* LISTENtcp 0 0 :443 :* LISTENtcp 0 20 14:22 10:1055 ESTABLISHED详细应用请参看man netstat(4) md5sum 文件校验和,主要用来检查文件大小,内容等是否更改。在系统被入侵后,可以很方便的用这个命令来检查一些常用命令是否被更改。 我们可以在刚安装完系统后备份一些重要命令的md5校验和,再备份结果到其他介质上,定期检查看校验和是否正确。比如:rootmobile test# md5sum /bin/netstat /bin/ps /bin/su /bin/ls result.txtrootmobile test# lsa.txt id.txt ls.txt result.txtrootmobile test# md5sum -c result.txt/bin/netstat: OK/bin/ps: OK/bin/su: OK/bin/ls: OKrootmobile test#监视文件大小变化,操作等还可以使用第三方程序:Tripwire,Swatch等。(5) acctacct是用来记录和统计用户命令执行情况以及其他有关用户的信息。不过很少有人使用。这一系列的工具可以在psacct的rpm包里面找到。rootmobile log# rpm -ql psacct/etc/logrotate.d/psacct/etc/rc.d/init.d/psacct/sbin/accton/usr/bin/ac/usr/bin/lastcomm/usr/sbin/accton/usr/sbin/dump-acct/usr/sbin/dump-utmp/usr/sbin/sa/usr/share/info/.gz/usr/share/man/man1/ac.1.gz/usr/share/man/man1/lastcomm.1.gz/usr/share/man/man8/accton.8.gz/usr/share/man/man8/sa.8.gz/var/account/var/account/pact具体使用可以参看man 8 sa ,man 8 accton ,man lastcomm,man ac(6) Last/lastlog 用来查询用户登陆情况以及用户最后登陆时间。 系统文件:/var/log/utmp以及/var/log/lastlog用来记录用户登陆情况和最后登陆时间。注意:如果这两个日志被擦除,这两个命令将显示无结果。2. 用户环境变量/控制文件(1) profile每一个用户登陆进来的时候,如果有特殊需要,会在用户目录里面产生一些配置文件,比如inux下默认bash shell的就有.bash_profile .bashrc等文件,这些文件主要用来控制用户在整个登陆会话中的一些环境变量,alias命令别名,umask值,以及初始化命令等。比如:linux下的bash_profile文件:rootmobile root# cat .bash_profile# .bash_profile# Get the aliases and functionsif -f /.bashrc ; then . /.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/binBASH_ENV=$HOME/.bashrcUSERNAME=rootexport USERNAME BASH_ENV PATHrootmobile root# cat .bashrc# .bashrc# User specific aliases and functionsalias rm=rm -ialias cp=cp -ialias mv=mv -i# Source global definitionsif -f /etc/bashrc ; then . /etc/bashrcfirootmobile root#针对所用用户的设置文件是/etc/bashrc,有兴趣的可以打开/etc/bashrc看看。(2) history 用户的命令记录会在history文件里面记录起来,比如,linux下用bash shell的用户,命令会缺省记录在.bash_history文件里面:rootmobile root# tail .bash_historylsof -iTCP -mlsof -iTCP -nlsof -iTCP -n -Plsof -iTCP -n -P -slsof -iTCP -n -P -Tlsof -iTCP -n -P -Ulsof -iTCP -n -P -U -X nameslsof -iTCP -n -P -U -nameslsof -iTCP -n -P -U -rnetstat -antprootmobile root#在系统被入侵后,如果运气好的话,还会留下入侵者使用的一些命令哦。3. 文件系统(fs)文件系统是建置于硬盘分区之上,用以储存文件数据。一个文件系统在使用之前必须先挂上 (mount),将它挂在系统树状目录结构的某个点上。同理,当某个分区的文件系统不使用时,可以将它卸下 (umount),如此系统会将尚未写入的数据写回去,并将它从系统的树状目录中除去。 所谓树状目录结构意指系统文件放置的位置整个看起来就像一棵倒过来的树一样,由最上层的根目录开始,其下可以有文件,也可以有目录,而各目录下还可以有子目录与文件,如此一路繁衍,形成状似枝叶茂密的大树。而每个文件在目录树的位置,就称之为路径 (path)。此树状目录结构的文件配置方式是 UNIX 的一大创举,之后影响深远,有许多操作系统都采取这样的设计方式,包括微软的操作系统。而与微软操作系统不同的是,在微软系统中每个分区都以一个英文字母来做代表,例如 A: 是软盘,C: 是硬盘的第一个分区,而光盘可能是 D: 等等。在 UNIX 的世界中并不采用这样的方式,如前所述,所有在分区上的文件系统都是以挂上的方式连上整个目录树,因此,目录树上任何一个子目录都可以是一个挂入点,而此后系统在做数据存取时,就与系统其它的目录文件存取方式一致。 由于使用前挂上与使用后卸下的动作在微软的操作系统中都没有,可能造成已用惯windows系统的用户不适应。故在 Linux 核心中还支持自动挂上与自动卸下 (automount) 的功能,在经过适当的设置后,所有的挂上与卸下的动作都可以自动进行,使用上就与windows系统一般无异。 在 Linux 核心中支持各式各样的文件系统,使得 GNU/Linux 在各种平台间的整合能力最强。而这些为数众多的文件系统,全部由虚拟文件系统 (Virtual File System)管理,它提供了统一的接口供系统调用,所以系统不需要因操作的文件系统不同而改变其操作方式。在这些文件系统中,属于 UNIX 类的多半都有完整的功能,例如文件属性、文件所有人与使用权管理、以及使用者可使用的容量管制 (Quota) 等等。而不属于 UNIX 类 (如微软平台的) 可能就会欠缺某些功能,这是因为该文件系统原本设计上的限制。 Linux 核心所支持的文件系统大至分类如下: (1). 一般文件系统: 这些文件系统很多是在早期的 Linux 核心版本中就有支持的,这里面包含了许多其它操作系统平台的文件系统,包括: 1). ext2: Ext2 是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的效能极好,对于中小型的文件尤佳,这主要得利于其数据区块内存的优良设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的数据区块大小有关,在一般常见的 x86 计算机系统中,数据区块最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 16384GB。但由于目前核心 2.4 所能使用的单一分区最大只有 2048GB,因此实际上能使用的文件系统容量最多也只有 2048GB。 2) ufs文件系统: BSD 平台是另一类的自由 UNIX 操作系统,包括 FreeBSD、NetBSD、OpenBSD 等,其中 FreeBSD 最为常见。其所采用的文件系统称之为 ufs。除了各种 BSD 平台以外,此类的文件系统也用于 SunOS、NextStep 等系统中,但格式稍有不同。以 FreeBSD 的为例,其 ufs 文件系统最大的特色是可以在分区上在分割子区块,称之为 Slice,每个 Slice 可分别用来建置文件系统,其使用方式就和我们平常在使用分区一样。此特色使得我们只需准备单一一个磁盘分区,就可以安装一个完整的 FreeBSD 系统。 3) msdos/vfat/ntfs 微软平台的文件系统包括 msdos (使用于 MS-DOS), vfat (使用于 Win95, Win98, WinMe 等), 与 ntfs (使用于 WinNT 等)。其中 vfat 与 msdos 相当类似,差别只在于 vfat 支持长文件名而已。除此之外,Linux 核心还支持 umsdos 文件系统,它可以直接在 msdos 文件系统中规划一块区域来安装 GNU/Linux 操作系统,而无须额外划分区,这在早期很常见,特别是当计算机的硬盘很小,已安装了 MS-DOS,而无法再重新分割其它分区时。然而,使用 umsdos 其文件读写效率不好,故不建议将 GNU/Linux 操作系统安装在其上,最好还是使用 ext2。 msdos 与 vfat 很早以前就已支持完整的读写功能,但 ntfs 截至目前为止还只有读的功能而已,写的功能仍在发展中。值得一提的是 vfat 中的 codepage 支持,它可以让 vfat 长档名中使用各国的文字,包括台湾常用的 Big5 (其为 cp950)。 4). iso9660: 此类文件系统包括 iso9660 以及最近新开发的 udf, 前者用于一般的 CDROM,后者用于 DVD 片,二者都是只读文件系统。其中 iso9660 还支持了微软的 Joliet 的延伸规格,它可以让 CDROM 的长档名可以内含 Unicode 格式。 (2). 其它平台文件系统: 以下的文件系统在一般情况下可能较不常用,兹简述如下: 文件系统描述minix此操作系统是由阿姆斯特丹的 Andrew S. Tanenbaum 教授为教学用所发展的类 UNIX 操作系统。由于是为了教学用,故其功能较为简单。而 Linux 核心在最早期草创阶段,就是在此操作系统上的hpfsOS/2 平台的文件系统hfsapple计算机的文件系统adfsAcorn Disc 文件系统,用于 ARM Risc PC 的 RiscOS 操作系统上affs:用于 Amiga 的 AmigaOS 操作系统上bfs:用于 SCO UnixWare 操作系统上,在开机时载入核心文件用efs用于旧的 SGI IRIX 操作系统上vxfs此为 Veritas VxFS 文件系统,用于 SCO UnixWare,也见于 Solaris、HP-UX 及其它操作系统上qnx4fs用于 QNX 4 操作系统sysv用于 SCO, Xenix 及其它商业版 UNIX 操作系统(3) 日志式文件系统: 在之前已提过,由于文件系统都有内存参与运作,如不使用时必须将文件系统卸下,以便将内存的数据写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部卸下后才能进行关机。 如果在文件系统尚未卸下前就关机 (如停电) 时,下次重开机后会造成文件系统的数据不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的数据都不会流失。故这在大型的服务器上可能会造成问题。 为了克服此问题,业界经长久的开发,而完成了所谓日志式文件系统 (Journal File System) 。此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回朔追踪。由于数据的写入动作包含许多的细节,像是改变文件标头数据、搜寻磁盘可写入空间、一个个写入数据区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回朔并重整被中断的部分,而不必花时间去检查其它的部分,故重整的工作速度相当快,几乎不需要花时间。 目前在 GNU/Linux 上的日志式文件系统,除了 ext3 之外,其余均为来自业界的贡献: ext3: 顾名思义,它就是 ext2 的下一代,也就是在保有目前 ext2 的格式之下再加上日志功能。目前它离实用阶段还有一段距离,也许在下一版的核心就可以上路了。 reiserfs: 此文件系统为 Threshold Networks、E、B 等公司所支持开发,它目前已完整地与核心 2.4 整合在一起,且发展已接近成熟。其特色除了日志功能以外,其在数量庞大的小文件存取效率相当惊人,在某些情况下可以达到 ext2 文件系统的三至四倍以上。 xfs: 此文件系统为 SGI 公司所开发,已移植到 GNU/Linux 系统上,但尚未整合到 Linux 核心中。除了日志功能以外,其最大的特色是高延展性,可以有效率地处理超大型文件。 jfs: 此文件系统为 IBM 公司所开发,已移植到 GNU/Linux 系统上,但尚未整合到 Linux 核心中。其主要特色与 xfs 相似。 这些新开发的文件系统如 reiserfs、xfs、及 jfs 除了日志功能较传统的文件系统 (如 ext2、ufs . 等) 较为进步外,通常还拥有传统文件系统难以达到的能力,例如高处理效率、高延展性等等,这些额外的特色主要来自文件系统内部的数据结构与算法的改进。这类文件系统都使用了平衡树 (balanced tree) 来管理文件数据区块以及硬盘未使用的区块,使得在数量庞大的运作环境下可以显著提升效率,故相当适于大型数据库与数据搜寻的应用场合上。然而 ext3 在设计时就没有使用这些先进的设计,主要是为了与目前的 ext2 兼容之故。 (4) 网络文件系统: 网络文件系统并非建置在机器本上的硬盘上,而是用以将远程机器的文件系统经由网络联机挂到本身的机器上,使其使用上就与一般的文件系统无异。Linux 核心支持了数种网络文件系统,包括: NFS: NFS 是此类文件系统的代表,它是由 Sun Microsystems 公司设计发表的,现已成为各 UNIX 系统的标准配备之一。 Code文件系统: 此文件系统与 NFS 类似,但拥有较 NFS 还先进的特色,例如断线操作、安全性认证等。 SMB: 此文件系统可以和微软操作系统的网络邻居共享数据NCP: 此文件系统可以和 Novell NetWare 的 IPX 共享数据通讯(5) 虚拟文件系统: 在 Linux 核心中,有许多文件系统并不是用来存取实际的文件数据。这些文件系统在挂上后,我们可以见到其内部的文件目录,但实际上这些文件目录都不占任何储存设备的储存空间,因为它们根本不是来自任何储存设备,它们都是系统核心所制造出来的文件影像。 这么做的目的主要有两个,其一就是用以方便存取系统内部信息。由于UNIX 世界对文件的定义相当广泛,只要它们的操作方式与一般文件一样或相近即可。因此,就利用这样概念,将一些系统信息以文件的方式出现在文件系统中,让应用程序可以随时存取使用。由于它们的内容来自核心内部的数据镜像,故只要核心状态改变,它们的内容也会立即改变。 另一个目的为有效率配置系统资源,供应用程序使用。由于应用程序要使用系统资源时,传统的 UNIX 的做法都是去操作系统的设备文件 (device files),因此系统各装置的设备文件必须存在,其对应的装置才能驱动。然而,很多时候我们无法预知系统会有那些装置存在,在大型的系统中会有相当多的装置,但小型的桌面系统则没有。如果要考虑所有可能的情况而将所有的系统设备文件都准备好,显然不是件经济的做法。因此,此问题就可以考虑由虚拟文件系统来处理,当系统真的有该项装置并且系统核心也侦测到时,系统核心就会自动产生一个虚拟的设备文件以代表该项装置,如果该装置移除了,该文件就会消失。 虚拟文件系统随着未来的系统装置越来越复杂、应用越来越多样化而不断增加其种类与普及率。目前 Linux 核心中包含了如下的虚拟文件系统: proc: 用以存取系统核心状态信息。此文件系统同时也出现在许多新设计的 UNIX 系统上,使用相当广泛。其内含的信息包括: 系统资源分配状况、机器硬件状态、各设备目前的状态、网络系统状态与可调整选项、以及所有执行中的行程 (process) 状态等等。 devfs: 用以取代传统的设备文件,使用此文件系统时所有的系统设备文件都会依一定的规则存在于树状目录群中,而且只有该装置存在时才会存在。此为核心 2.4 的新设计,对于大型系统的延展性有相当大的帮助。目前此文件系统尚在开发阶段,在不久的将来将会被广泛使用。 devpts: 用于接受外部网络登陆(telnet,ssh等) 的虚拟终端机端口。每一个外来的网络连接都必须要准备一个虚拟终端机端口来处理它,而每个虚拟终端机端口就是一个文件,故在此情况下使用虚拟文件系统是最佳的解决方式。未来当 devfs 被广泛采用时,devpts 的功能将完全由 devfs 取代。 (6) 特殊用途文件系统: 此类文件系统在一般应用上的使用机会不大,多半只会在特殊的场合上才会使用,例如嵌入式系统上。目前有越来越多的厂商以 Linux 核心为基础来开发嵌入式装置,而这类装置由于所拥有的储存设备很小 (或甚至完全没有),同时主存储器的容量也相当有限,故往往需要特别设计的文件系统。 目前 Linux kernel 支持下列的特殊用途文件系统: cramfs: 此为 Compressed ROM File System,为只读文件系统,其容量上限只有 256MB,用于嵌入式装置。 romfs: 此为非常小的只读文件系统,用于只读的储存媒体。 jffs: 此为日志式快闪 (Flash) 文件系统,用于嵌入式装置。 tmpfs: 此文件系统可以用来将文件暂时保存在主存储器 (RAM) 中,而且其容量可以随着保存文件的量而增减。 ramfs: 此文件系统也用于将文件暂时保存在主存储器中,与 tmpfs 类似。 (7) 文件系统目录结构目录描述/bin用户命令可执行文件/dev特殊设备文件/etc系统执行文件、配置文件、管理文件/home用户的起始目录/lib引导系统及在 root 文件系统中运行命令所需共享/lost+found与特定文件系统断开连接的丢失文件/mnt临时安装的文件系统/proc文件系统镜象,是到内核数据结构或运行进程的接口/sbin为只被root使用的可执行文件及引导系统启动的文件/usr分成许多目录,包含可执行文件、头文件、帮助文件/var用于电子邮件、打印、cron等的文件,统计、日志文件4. 堆栈溢出/non-exec stack(1) 什么是堆栈溢出在谈到堆栈溢出的时候,我们不得不提到Unix系统的一大特色:SUID和SGID程序。UNIX中的SUID(Set User ID)/SGID(Set Group ID)设置了用户id和分组id属性,允许用户以特殊权利来运行程序, 这种程序执行时具有宿主的权限. 如passwd程序,它就设置了SUID位-r-s-x-x 1 root root 10704 Apr 15 2002 /usr/bin/passwd SUID程序标志passwd程序执行时就具有root的权限SUID程序是为了使普通用户完成一些普通用户权限不能完成的事而设置的.比如每个用户都允许修改自己的密码, 但是修改密码时又需要root权限,所以修改密码的程序需要以管理员权限来运行.堆栈溢出(又称缓冲区溢出)攻击是最常用的黑客技术之一。这种攻击之所以存在是由于某些代码程序没有考虑边界条件,没有考虑用户输入的数据大小,数据内容. 我们知道,Unix本身以及其上的许多应用程序都是用C语言编写的,C语言不检查缓冲区的边界。在某些情况下,如果用户输入的数据长度超过应用程序给定的缓冲区,就会覆盖其他数据区,包括用户堆栈。这称作堆栈溢出或缓冲区溢出。一般情况下,覆盖其他数据区的数据是没有意义的,最多造成应用程序错误,但是,如果输入的数据是经过黑客精心设计的,覆盖堆栈的数据恰恰是黑客的入侵程序代码,而且还覆盖程序的返回地址, 黑客就获取了程序的控制权,轻松获得一个shell.对于一个SUID/SGID程序或者其他网络应用程序,如果没有正确检验用户提交数据,很容易导致堆栈溢出攻击。对于一个SUID程序来说,由于运行进程属主是设置S位的用户UID,那么一旦缓冲区发生溢出,程序流程就会发生跳转,就会以设置S为用户权限来执行某些操作。而对于网络应用程序来说,结果更可怕,会让用户得到一个可以远程执行命令的shell, 通过这个shell,再本地提升权限不是难事。(2) 堆栈溢出的危害 通过上面的了解, 我们就知道一个存在堆栈溢出的程序是多么的不安全, 一旦被黑客利用, 他就可以轻松获得一个shell, 对于一个真正的黑客来说, 无论这个shell的权限是什么, 都等同与管理员(root)权限, 可以轻松接管整台机器的控制权, 可以安装后门, 安装sniffer嗅探其他机器、用户的密码,进而危害到整个他可以到达的网络,比如内网等。(3) 如何防止堆栈溢出1) 及时发现系统和应用程序存在的问题用户和管理员可以订阅bugtraq邮件列表,定事检查和注意已经发现漏洞的程序列表。2) 及时下载并修补最新的程序和补丁 用户和管理员应该时常注意自己使用操作系统生产厂家的漏洞公告以及补丁下载. Sun(Solaris)/pub-cgi/show.pl?target=patches/patch-access IBM(AIX)/services/continuity/recovery1.nsf/advisories HP(HP-UX) SGI(IRIX)/support/security/index.html Compaq (Tru64 UNIX, OpenVMS, Ultrix)/public Linux(RedHat Linux)/apps/support/errata/ Freebsdhttp:/www.FreeBSD.org/security/ 美国国家安全局发布的SE-Linux补丁/selinux(3) 去掉不必要或者发生问题的SUID程序s位 管理员应该仔细检查机器上具有SUID位的程序, 并且检查这些程序是否有必要设置SUID位. 查找机器具有SUID位程序的命令是:find / -type f ( -perm +4000 -or -perm +2000 ) -exec ls -alF ; (4) 养成良好的编程习惯 编写程序的时候,尽量不要使用危险的函数,比如:strcpy等。 在使用printf,vfprint,syslog等函数的时候,尽量在程序中给出format格式。 (5)使用第四章提到的第三方软件/Module5. 日志记录(1) 由syslog记录的日志由系统进程syslogd记录的日志一般有:/var/log/messages/var/log/secure/var/log/maillog/var/log/cron/var/log/boot.log /var/log/spooler 这些日志记录什么内容,以及记录的标准都在/etc/syslog.conf里面定义和配置,具体内容请参看man syslog.conf,man syslogd(2) 由login记录的日志文件 login主要记录用户登陆情况以及退出登陆的时间,使用时间,使用的虚拟终端等信息。一般存放在:/var/run/utmp /var/log/wtmp /var/log/lastlog /var/spool/mail/* .hushlogin用户可以用last、who、lastlog等命令来读取这些文件。(3) 由程序自己记录的日志文件 这个是由程序自己控制记录下的某些日志文件,比如:httpd 等。比如linux下缺省安装的apache日志文件就存放在/var/log/httpd目录下面。 前面提到的acct日志记录也归纳在这里(4) core dump记录 用户程序发生程序错误,比如内存指针越界、特权进程对文件的不正确处理等都会导致程序崩溃,这个时候,系统就会根据配置文件决定是否产生一个core dump文件,通过这些文件我们可以找到程序发生错误的地点,并且可以知道程序崩溃时候CPU各个寄存器的值,通过这些信息我们可以知道程序是在哪个函数发生错误,引起错误发生的原因等信息。6. 安全配置(1) 用户帐号的安全配置 1) root帐号管理l 除非必要,避免以超级用户登录。l 严格限制root只能在某一个终端登陆,远程用户可以使用/bin/su -l来成为root。l 不要随意把root shell留在终端上。l 若某人确实需要以root来运行命令,则考虑安装sudo这样的工具,它能使普通用户以root来运行个人命令并维护日志。l 不要把当前目录(“ . /”)和普通用户的bin目录放在root帐号的环境变量PATH中。l 永远不以root运行其他用户的或不熟悉的程序 2) 其他用户帐户权限控制l 伪用户帐号 通常不被登录,而是进程和文件所有权保留位置,如bin、daemon、mail和uucp等,这些用户应该不能ftp和登陆。l 单独命令帐号 如date、finger 、halt等帐号。l 相应策略 检查/etc/passwd文件,确保口令域中是 “*”,而非空白字符。 在linux下检查/etc/shadow文件,也应该确保口令域中是“*”或者“!”符号。l 公共帐号 原则上每个用户必须有自己的帐号,若一个系统必须提供guest帐号,则设置一个每天改变的口令。最好是设置受限shell,并且做chroot限制.l 删除其他不必要用户的帐号 a) 杀死任何属于该用户的进程或打印任务。 b) 检查用户的起始目录并为任何需要保存的东西制作备份。 c) 删除用户的起始目录及其内容。 d) 删除用户的邮件文件(/var/spool/mail)。 e) 把用户从邮件别名文件中删除(/etc/sendmail/aliases)。3)选择强壮的用户密码l 严禁使用空口令和与用户名相同的口令l 不要选择可以在任何字典或语言中找到的口令l 不要选择简单字母组成的口令 l 不要选择任何和个人信息有关的口令l 不要选择短于6个字符或仅包含字母或数字l 不要选择作为口令范例公布的口令l 采取数字混合并且易于记忆在保存口令方面,建议:l 不要把口令写在纸上l 不要把口令贴到任何计算机的硬件上面l 不要把口令以文件的形式放在计算机里l 不要把口令与人共享l 防止信任欺骗(电话,E-mail等)(2) 用户环境的安全配置1) 受限制的shell目的:l 不能用cd命令切换到其它工作目录l 不能改变PATH环境变量l 不能执行包含“ / ” 的命令名l 不能用“”和“”重定向输出 以linux为例,我们可以通过为用户指定一个受限制的shell(bash r),来达到如上目的.具体配置请参看man bash里面的RESTRICTED SHELL一节。2) 一个chroot的环境什么是chroot?chroot基本上重定义了一个程序的运行环境。更确切地说,它重定义了一个程序(或登录会话)的“ROOT”目录或“/”。 也就是说,对于chroot了的程序或shell来说,chroot环境之外的目录是不存在的。这样做的目的是为了限制用户和用户进程不能接触chroot目录以外的其他目录,如果该用户的密码或者程序出了问题,即使被黑客利用,他们也不能看见你系统里所有的文件了。 这样,就限制了入侵者可能执行的命令,从而禁止了他们溢出不安全文件的机会。具体配置请参照man chroot帮助。(3) 系统提供程序的安全配置默认系统提供了很多SUID/GUID程序,我们应该严格限制执行和运行这些程序的用户身份,通常的做法是给SUID程序设置一个可以运行的用户组,然后把需要运行该程序的用户加到该组里面去,这样可以有效控制用户执行SUID/GUID程序,避免不必要的麻烦。通过前面的chattr类工具,我们可以控制文件的修改、覆盖、删除等权限。比如设置/var/log/messages等日志文件只能被追加(+a)而不能被删除,修改等。前面提到文件系统都是mount上去的时候,这个时候我们可以通过给mount传递一些参数来控制一些文件系统的权限控制。可以传递的参数有:noodev、noexec、nosuid、rdonly等。具体使用请参考man mount帮助文件。四. UNIX服务进程介绍/安全配
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业智能化与人力资源的变革
- 工业安全与智能制造的关系
- 工业污染源监测的新技术动态
- 工业物联网在生产车间的应用实践
- 工业自动化中机器视觉算法优化探讨
- 工业能源管理与节能减排技术应用
- 工业绿色化与节能减排技术
- 工业级智能硬件产品的设计要求与标准
- 工业火灾防控策略与方法
- 工业设计在制造业的未来应用
- 老物业接管方案
- 联合排水试验报告
- 2023江西管理职业学院教师招聘考试真题汇总
- 自动焊锡机方案
- 银行固定资产自查报告
- 最完整工资条模板-工资条模版
- 精通五年级下册英语教材解读课件
- 23秋国家开放大学《小学语文教学研究》形考任务1-5参考答案
- 《化妆品监督管理条例》解读
- 易导致患者跌倒的药品目录
- 普外科科室规章制度模板
评论
0/150
提交评论