86123检查和备份
把系统备份在两盘磁带中,一盘放在安全的地方(最好是刻盘)。
在这阶段,我们需要对安装的文件使用安全的hashing(散列)算法进行完整性检查,
初始化它的数据库并运行合格的检查以便来监视以后的改变。如果可能,把主数据
库存放在离线的另外一台机器上,或者写入一次性媒质上。
对于数据完整性的我们需要那些项目?
--下面的意思是RPM可以用来报告文件的改变(但本人有点对这句英文不理解,
所以只好贴上原文,惭愧):
The RPM commands also be used to report changes to rpm installed
files ""poor man''s tripwire"":
for file in $(rpm -qa); do rpm -V $file; done > rpm_changes
它可以打印出一列表,指示Size, MD5 hash, Links, Time (mtime),
Device, User, Group, Mode (permissions)等是否改变:
S.5....T c /etc/host.conf
S.5....T c /etc/hosts.allow
S.5....T c /etc/motd
S.5....T c /etc/securetty
S.5....T c /etc/services
S.5....T c /etc/localtime
S.5....T c /etc/nsswitch.conf
.M...... /usr/sbin/rpcinfo
你可以存储一份拷贝并在以后作为对比的基准。
--Tripwire [5]:此程序有商业和免费两种版本。REDHAT X86是唯一正式使用
商业信息的的LINUX:
--免费的版本如果使用适当可以工作的不错,但存在一些BUG,提供源
代码,在很大的磁盘上出现过崩溃现象。
--商业版本相对来说比较贵,报告也相对来说比较冗长(你需要使用过滤
的脚本来查找你所需的东西),提供多个配置样板文件,相对于免费版本较稳定。
可以在UNIX和NT平台上很好的运行,通过一些政策化和配置化的文件提高安全性。
但售后支持不是很好(即使你付了不少钱,呵呵)。
--两个版本在定义方针化规则时都不支持正常表达式,如你不能为
""/home/*/www/cgi-bin""下的文件特定一规则。
--也可以使用PGP,通过对文件的签名来得到保护的作用,并写一有效脚本来
检查有效正确的签名。但PGP的不好之处是对文件的权限,连接,字节和修改的
日期等改变不能进行检验。
--MD5签证也可以作为文件效验,如果要更好的保护MD5,最好使用PGP签名或者
使用其他方法加密。
--在OPENBSD中可以使用mtree工具。或许这个工具不久会在LINUX上搭带。
--Aide是一新的GPL效验工具,可能不久的将来将会代替tripwire.
下面是使用免费Tripwire v1.2的例子:
--在x86存在RPM包,在SPARC中的RPM已经被编译了,下载[5]并安装RPM工具包。
--安装后Tripwire两进制程序在/usr/sbin目录下,配置文件位于/etc/tw.config,
并且其通过/etc/cron.daily/tripwire.verify由cron进行每天的检测。数据库存放
在/var/spool/tripwire下,也可以使用MAN查看使用方法:tripwire(8), twconvert(8),
tw.config(5).
--在安装后,需要保存系统的初始化状态(""initial state""),可以使用下面的方法:
/usr/sbin/tripwire -initialise
上面的命令会在/var/spool/tripwire下建立一新的数据库。
--要通知Tripwire你所改变的文件或者整个目录,可以使用下面的方法:
/usr/sbin/tripwire -update [path]
--可以由cron或者手工来每天进行系统检查:
/etc/cron.daily/tripwire.verify
--使用带""-i 2""的选项来运行Tripwire可以增加其检查速度(此选项关闭了
一个检验算法snerfu,但SHA1和MDS5还是继续使用)。
--为了增强安全性和自动检查多个系统,你可以把Tripwire存放在一绝对安全
的主机,拷贝Tripwire和它的数据库到安全主机并使用SSH远程的进行维护。在效验
某一主机后,删除目标机上的数据库,这可以让攻击者不轻易发现你在使用tripwire
进行系统检验。另外,立即更新tripwire数据库,这样可以在连续运行的情况下
知道与原来的不同之处。你可以查看下面的
Trip_linux.sh
的脚本。如果使用这个脚本,你需要使用下面的方法来关闭本地检测功能:
mv /etc/cron.daily/tripwire.verify /etc/cron.daily/.tripwire.verify
--拷贝一份备份的配置文件和数据库到软盘或者一次性介质。
8,安装,测试和更严格控制应用程序
综述
--根据服务器所需的相应功能,而采用相应的应用程序如ftpd,BIND,proxy等。
WEB SERVER和防火墙更特别,需要很复杂和小心的配置,下面是server/application
需要遵守的规则列表:
--对于重要应用程序考虑安装在独立的分区,这分区在安装和测试阶段
需要安装为读写状态,但在这些过程后最好需要把属性改变为只读属性。
--在应用程序启动或者之前使用umask设置严格的属性,如(022)。
--检查应用程序是否以最低权限的非ROOT用户运行?其本身的密码是否
""禁用""并对其设置/dev/null类的SHELL。如果确实需要使用其本身密码来运行,
是不是把其密码的标准设置为最小为8个字符并是字母,数字和符号混合的类型。
--如果某应用程序以ROOT的身份,绑定一个低点的端口,要清楚其是否
可以立即派生(fork)出一没有特权的用户来最小化减低危险程序?
--应用程序有关的所有文件的权限是否设置正确,即四否只有应用程序
可以读写,检查是否有全局可读写的文件,检查并正确设置。
--检查应用程序写LOG记录的权限是否安全?检查应用程序是否把有关的
密码写入LOG记录(这样的事情很多)。
--是否可以把应用程序设置CHROOT环境?
FTP服务(ftpd)
--如果你使用Washington University的wu-ftpd,它的LOG记录和访问控制及
其他特征有一定的独特程序,但必须要参考一些以前的BUG(请参看http://www.cert.org/
站点的关于wu-ftpd的安全建议:advisories CA-93:06, CA-94:07, CA-95:16和
Auscert AA-97.03 和 AA-1999.02). 必须使用V2.6.0以上的版本。
--在/etc/ftpusers(相当于黑名单)中加入系统帐号,使这些系统帐号不能
用来FTP(如你要求ROOT不允许FTP,你把""root""加入到/etc/ftpusers文件中)。
在一个全新的系统中,你可以使用下面的方法把所有系统帐号加入到ftpusers:
awk -F: ''{print $1}'' /etc/passwd > /etc/ftpusers
--可以先把全部帐号加入到/etc/ftpusers中,在把需要FTP的帐号挑选出来,
在进行相应设置(必须在ftpusers去掉相应的帐号)。或者使用下面的技巧:对于
那些没有FTP访问的用户,给他们一个不是标准的SHELL(如tcsh),并不要把这个
新的SHELL加入到/etc/shells中去,FTP的访问就会被拒绝,如果想要正常工作就
必须在/etc/shells里面加入相应的SHELL。
--FTP可以使用IP地址或者主机名来控制,请看/etc/hosts.allow和/etc/hosts.deny.
--如果需要匿名FTP,必须非常小心,你必须使用chroot环境,Bastille可以为
你设置这方面的环境。
--如果使用正常的""user ftp"",推荐使用chroot。
--把FTP的数据存放在一个独立的分区并把起安装为nosuid.
DNS 服务
使用最新版本的BIND(Berkeley Internet Name Server),请查看下面的站点:
http://www.isc.org/products/BIND
是哟功能8.2.2-P5或者更新的版本,在zone transfers文件中限制次级的IP地址
(在/etc/named.conf)。
可以使用Bastille来设置DNS服务器,它会自动设置下面的配置:
--建立一""dns""用户和组并使用""named -u dns""来启动DNS,这样BIND可以派生
(fork)和改变身份为dns用户。必须提供dns用户可以读BIND配置文件的权利(
然而它们原属于ROOT)。
--把BIND设置在chrooted的环境中(/home/dns)。
发现并修补故障(Troubleshooting):
--使用nslookup或者dig来检查服务器的配置结果。
--客户端:如果你有DNS客户端问题,检查/etc/nsswitch.conf和/etc/resolv.conf
文件,并使用带有""-d2""选项的nslookup来获得调试信息。
--服务器端:使用debug选项""-d""来启动named守护程序,并阅读控制台和LOG
信息,代表性的LOG可以在syslog的""daemon""部分找到。
--下面站点的工具对于测试激活的守护程序有非常大的帮助:
http://www.uniplus.ch/direct/testtool/dnstest.html
--要从name服务中获得统计信息,可以使用下面的方法:
kill -ABRT ``cat /etc/named.pid``
其中的统计文件会存放在/usr/tmp/named.stats文件中。
--最后对named发送HUP信号,使其重新读取新的配置文件:
kill -HUP ``cat /etc/named.pid``
HTTP服务
如果WEB的内容很少改变,把内容存储在CD-ROM中,这样可以很简单的防止黑客很
常见的喜好""篡改站点""。因为HTTPD服务有缓存页面的能力,必须保证其访问速度
不依靠CD-ROM的速度。
把""simple read-only""内容的服务从电子商务的服务器中分离出来。
请查看http://www.ciac.org/公告http://ciac.llnl.gov/ciac/bulletins/j-042.shtml,
其中对怎样更好的设置INTERNET WEB服务器做了很好的描述。
使用ServerAdmin设置WEBMASTER的电子邮件,在APACHE设置中不启用UserDir(
除非用户确实允许从他们的HOME目录发布页面),可以把ServerSignature设置值为
NO,这样可以避免泄露APACHE版本信息。不起用/manual/alias,除非你确实需要
发布APACHE的文档信息。不要启动server-info, server-status 或 perl-status
设置。
RedHat 下apache其设置如下(在RH6.1上是apache 1.3.9):
--配置文件存放在/etc/httpd/conf目录下
--HTML的目录根部为/home/httpd/html
--使用nobody运行apache
--服务器状态(Server-stats) 和服务器信息(server-info)连接是关闭的
------------------------------------------------
运行系统
运行整个系统前的准备
考虑安装一脚本来检查重要守护程序的运行,安装
http://www.boran.com/security/sp/linux/monitor_processes.pl脚本文件并
把其加入到cron文件中:
## Check that important processes are running during office hours:
## [If you run 7x24, modify accordingly]
0,30 8-19 * * 1-5 /secure/monitor_processes.pl inetd sshd httpd
在应用程序安装和测试阶段,如果数据分区必须安装为读写状态,现在考虑是否
安装为只读状态。
重新初始化tripwire(或者类似的完整性检查软件)。
把系统备份两个磁带中去(即两份),一份妥善保管。
在系统上运行网络扫描器,保证只有一些自己必须的服务在运行。可以使用商业
工具ISS或者免费免费工具Nessus,nmap或者Satan来进行相应的检查,打印出结果
并保存结果。
如果可能,尽量使用多个人员来进行最后的测试,以防止忘记某些东西进行设置。
可以测试下面的工作--什么运行了?什么禁止了?检查console/log条目,你的
系统按照你的设想在工作吗,在系统开头几天经常检查LOG。
开始运转系统
详细测试,检查LOG条目,系统是否正常运行的检查?
对所有应用程序进行详细测试,通过不同的人员和不同的观点和不同的网络来
进行测试。
常规维护
下面的行为必须是每月或者每天,星期或者每小时维护,其频率依据系统的
安全程度来决定:
--检查所有新出补丁的情况,更新必须的补丁,注意每个内核补丁(
在没有应用程序的机器上测试),安装一些软件确实需要的补丁,因为大多数
守护程序在主机上是关闭的。
--检查所有错误和不寻常的活动LOG记录:/var/log/* 和所有的应用程序LOG。
--写一脚本程序用于报告:重要系统PING不通,一些重要守护程序崩溃。
--经常运行tripwire(或者其他类似完整性检查)。
--订阅一些新的漏洞和安全信息的MAILLIST,可以在
http://www.cert.org/;http://www.ciac.org/;http://www.securityfocus.com
站点订阅。
-------------------------------------------------------------
附加注意信息
上面的文章用于一些系统,当然每一个安全管理员有自己的方式来配置,
也必须要考虑每一个站点的不同来安全配置自己的站点
--RedHat提供一个自动安装的设备,并提供了一安装说明的文本,可以
很好的提示用户来安装系统,可以在下面的站点找到类似的说明:
http://www.redhat.com/mirrors/LDP/HOWTO/KickStart-HOWTO.html
--Mandrake:Mandrake是一个完全兼容RED HAT的LINUX发行版本,但其中
有自己独特的地方:
--它提供更好的安装向导,有很好的GUI界面可以使安装更加
直观。
--ROOT的密码必须是8位的长度(应该指的是7.0的版本)。
--Mandrake提供MSEC工具包(Mandrake Security)允许你为
系统设置安全级别,但MSEC有些有趣的地方:
要改变安全级别,运行/et/security/msec/init.sh X,默认状态
X的级别是3,当我们把其转变为4的级别后重新启动 ,系统会询问一运行
级别的数字,如果输入3,系统会停止在那里知道一个关于找不到运行级别错误为止,
并且所有其他的TTYS将不可使用。
--MSEC:init.sh可以使用""custom""参数来运行,这样系统会提示一系列
安全问题并允许你想对什么样的安全条目进行安装。注意这个参数的运行会不允许
ROOT通过串行来进行登录,如果你确实需要通过ROOT来登录,你就在/etc/securetty
中加入ttyS0条目。
--Mandrake的硬件适应性:它不支持Sun SuperSPARCs,但支持UltraSPARC
版本已经是BETA版了,另外支持Compaq Alpha BETA版也以支持。
--如果发现某些工具包没有安装,可以在/mnt/cdrom/Mandrake/RPMS找到
工具包,并使用rpm -i进行安装。
--Mandrake提供一个非常漂亮的GUI工具--darkxconf:可以列出所有服务
并可以停止和继续运行服务。还可以adduserdrake --增加用户,diskdarke一个
非常优秀的磁盘分区GUI工具,drakesec允许低/中/高安全级别。
--命令行工具chkconfig可以用来启用/关闭服务,可以使用下面的方法来列
表服务:chkconfig --list ,如chkconfig httpd on 。
--LOG记录
--除一主要SYSLOG记录外,你需要保留一份本地的拷贝-以防止syslog
服务器不正常关闭或者被遭到拒绝服务攻击而不产生记录,如果你使用本地LOG
必须确保/var是一个独立的文件系统,这是为了避免目录被填满而是系统提高
停止工作。
--使用性能更高的syslog守护程序来代替原来syslog:
syslog-ng: http://www.balabit.hu/products/syslog-ng
(提供TCP连接,内容过滤,加密,认证等功能)
secure syslog: http://www.core-sdi.com/english/slogging/ssyslog.html
Nsyslogd: coombs.anu.edu.au/~avalon/nsyslog.html
(TCP连接和SSL功能)
--入侵检测:
--经常使用定制的脚本和工具如logcheck 和swatch 来对LOG文件
进行详细的分析。
--也可以使用下面的perl脚本:
http://www.boran.com/security/sp/linux/monitor_socket.pl
来对一系列socket进行监听并通过MAIL来通知管理员,但不需要从inetd
来运行。
--Snort是一个基于网络入侵检测很好的工具
------------------------------------------------------------------
Bastille可以在下面的站点里下载:
http://bastille-linux.sourceforge.net/