1、Longjilongjilongjilongjilongjilongji机恐惧感开通过Linux系统伪装方法加固系统安全网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击。 通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。 针对HTTP服务 通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来提供HTTP 服务,而 Linux中最常见的
2、是Apache。 默认的Apache 配置里没有任何信息保护机制,并且允许目录浏览。通过目录浏览,通常可以获得类似“Apache/1.3.27 Server at Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。 通过修改配置文件中的ServerTokens参数,可以将Apache 的相关信息隐藏起来。但是,Red Hat Linux运行的 Apache是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替换里面的提示内容。 以Apache 2.0.50为例,编辑 ap_release.h
3、文件,修改 “#define AP_SERVER_BASEPRODUCT “Apache“”为“#define AP_SERVER_BASEPRODUCT “Microsoft-IIS/5.0“”。编辑 os/unix/os.h文件,修改“#define PLATFORM “Unix“”为“#define PLATFORM “Win32“”。修改完毕后,重新编译、安装 Apache。 Apache安装完成后,修改httpd.conf配置文件,将“ServerTokens Full”改为 “ServerTokens Prod”;将“ServerSignature On”改为“ServerSign
4、ature Off”,然后存盘退出。重新启动 Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows。 针对FTP服务 通过FTP服务,也可以推测操作系统的类型,比如,Windows下的FTP服务多是Serv-U,而Linux下常用vsftpd、proftpd 和pureftpd等软件。 以proftpd为例,修改配置文件proftpd.conf ,添加如下内容: ServerIdent on “Serv-U FTP Server v5.0 for WinSock ready.“ 存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试: C:
5、ftp 192.168.0.1 Connected to 192.168.0.1. 220 Serv-U FTP Server v5.0 for WinSock ready. User (192.168.0.1:(none): 331 Password required for (none). Password: 530 Login incorrect. Login failed. ftp quit 221 Goodbye. 这样从表面上看,服务器就是一个运行着Serv-U的Windows了。 针对TTL返回值 可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没
6、有经过任何网关和路由的网络,直接ping对方系统得到的TTL值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL 为0 时,这个数据包就会被丢弃。 通常情况下,Windows的 TTL的基数是128,而早期的Red Hat Linux和 Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的 TTL基数是 64。比如, ping一个Red Hat系统,显示如下: Pinging 192.168.0.1 with 32 bytes of data: Reply from 192.168.0.1: bytes=32 time /pro
7、c/sys/net/ipv4/ip_default_ttl 若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行: net.ipv4.ip_default_ttl = 128 保存退出后,再ping 192.168.0.1,TTL 基数就变为128了。 针对3389端口和22端口 有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而 Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。 为了安全,可以利用iptables来限制22 端口的SSH登录,让非授权的IP扫描不到T
8、CP 22端口的存在: #iptables -I INPUT -s ! xx.xx.xx.xx -p tcp -dport 22 -j DROP 利用iptables ,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下: #echo 1 /proc/sys/net/ipv4/ip_forward #iptables -t nat -I PREROUTING -p tcp -dport 3389 -j DNAT -to xx.xx.xx.xx #iptables -t nat -I POSTROUTING -p
9、tcp -dport 3389 -j MASQUERADE 第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。 这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。 针对netcraft netcraft是一个很厉害的扫描引擎,它通过简单的TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime )等信
10、息。 上面介绍的几种方法对netcraft来说,均不奏效。针对netcraft,可利用iptables 进行系统伪装,使netcraft错误判断操作系统: #iptables -t nat -I PREROUTING -s 195.92.95.0/24 -p tcp -dport 80 -j DNAT -to xx.xx.xx.xx #iptables -t nat -I POSTROUTING -s 195.92.95.0/24 -p tcp -dport 80 -j MASQUERADE 由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。 小结 以上
11、方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析,在一定程度上可减少计算机被攻击的可能性,但仍然是“防君子,不防小人” ,仅是给大家提供一个活学活用的新思路。深入分析Linux 系统深度安全加固Linux 的系统安全不容忽视.然而系统加固又不是一件很容易的事 .本文作者简单介绍了一下 Linux 系统深度安全加固. Linux 系统深度安全加固 author : ayazero Personal web - http:/ Teams site - http:/ 注:以下内容可能不适用于某些场合,请对号入座 1. 安装和升级 尽量选用最新的 Linux 发行版本,安装前拔掉网线,断开物理连接
12、,安装时建议用 custom 自定义方式安装软件包,数量以少为好,一般来说服务器没有必要安装 X-windows,在 lilo/grub 引导器中加入口令限制,防止能够物理接触的恶意用户因为 Linux 安装光盘的 rescue 模式可以跳过这个限制,所以还要给bios加上密码或服务器机箱上锁 /var, /home, /usr, /root 等目录用独立的物理分区,防止垃圾数据和日志填满硬盘而导致 D.o.S 攻击. root 账号给予强壮的口令. 安装完毕立即用 up2date 或 apt 升级系统软件,有时升级内核也是必要的,因为内核出现问题同样会给攻击者提供机会Apt 是 Debian
13、 GNU Linux 下的一个强大的包管理工具,也可用于其他版本的 Linux. 2. 账号 如果系统中的用户比较多,可以编辑 /etc/login.defs,更改密码策略 删除系统中不必要帐户和组, rootayazero /# userdel -r username 如果不开匿名 ftp 则可以把 ftp 账号也删了 最安全的方式是本地维护,可惜不太现实,但还是需要限制 root 的远程访问,管理员可以用普通账户远程登录,然后 su 到 root,我们可以把使用 su 的用户加到 wheel 组来提高安全性 在 /etc/pam.d/su 文件的头部加入下面两行: auth suffici
14、ent /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel 然后把可以执行 su 的用户放入 wheel 组 rootayazero /# usermod -G10 admin 编辑 /etc/securetty,注释掉所有允许 root 远程登录的控制台,然后禁止使用所有的控制台程序,rootayazero /# rm -f /etc/security/console.apps/servicename 登录采用加密的 ssh,如果管理员只从固定的终端登陆,还应限制合法 s
15、sh 客户端的范围防止嗅探及中间人攻击 将命令历史纪录归为零,尽可能的隐藏你做过的事情 rootayazero /# unset HISTFILESIZE 3. 服务 最少服务原则,凡是不需要的服务一律注释掉 在 /etc/inetd.conf 中不需要的服务前加 “#“,较高版本中已经没有 inetd 而换成了 Xinetd;取消开机自动运行服务,把 /etc/rc.d/rc3.d 下不需要运行的服务第一个字母大写改称小写,或者由 setup 命令启动的 GUI 界面中的 service 更改 如果你希望简单一点,可以使用 /etc/host.allow,/etc/host.deny 这两个
16、文件,但是本文计划用 iptables 防火墙,所以不在此详述 . 4. 文件系统权限 找出系统中所有含 “s“ 位的程序,把不必要得 “s“ 位去掉,或者把根本不用的直接删除 rootayazero /# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg rootayazero /# chmod a-s filename 防止用户滥用及提升权限的可能性 把重要文件加上不可改变属性 rootayazero /# chattr +i /etc/passwd rootayazero /# chattr +i /etc/shad
17、ow rootayazero /# chattr +i /etc/gshadow rootayazero /# chattr +i /etc/group rootayazero /# chattr +i /etc/inetd.conf rootayazero /# chattr +i /etc/httpd.conf . 具体视需要而定,我怀疑现在的入侵者都知道这个命令,有些 exploit 溢出后往 inetd.conf 写一条语句绑定 shell 在一个端口监听,此时这条命令就起了作用,浅薄的入侵者会以为溢出不成功. 找出系统中没有属主的文件: rootayazero /# find / -
18、nouser -o -nogroup 找出任何人都有写权限的文件和目录: rootayazero /# find / -type f ( -perm -2 -o -perm -20 ) -exec ls -lg rootayazero /# find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg 防止入侵者向其中写入木马语句(诸如一个shell 的拷贝)或继承属主权限而非法访问 找出并加固那些历来被入侵者利用的文件,比如 .rhosts 编辑 /etc/security/limits.conf,加入或改变如下行: * hard core 0
19、 * hard rss 5000 * hard nproc 20 5. Banner 伪装 入侵者通常通过操作系统,服务及应用程序版本来攻击,漏洞列表和攻击程序也是按此来分类,所以我们有必要作点手脚来加大入侵的难度 更改 /etc/issue,因为 reboot 后重新加载,所以编辑 /ect/rc.d/rc.local # This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you
20、reboot. #echo “ /etc/issue #echo “$R“ /etc/issue #echo “Kernel $(uname -r) on $a $(uname -m)“ /etc/issue # #cp -f /etc/issue /etc/ #echo /etc/issue 把以上行前的 “#“ 去掉 Apache 不回显版本: apache 的配置文件,找到 ServerTokens 和 ServerSignature 两个 directive,修改默认属性: #ServerTokens Full ServerTokens Prod 。 您应该确保是以安全的方式获得密钥文
21、件,例如,通过 HTTPS 从提供商的 Web 站点上下载,这样您可以校验连接的证书。 不过,使用 SELinux 也有一些问题。首先,如果发行版本提供商不支持 MAC,那么其配置是相当困难的。可能需要打补丁和重新编译内核,并替换特定的系统管理工具(所有这些都可能影响发行版本提供商的支持策略)。第二,定义一个适当的策略是非常复杂的任务。如果没有可用的策略定义供您的应用程序选择,那么在 MAC 环境中制定并实施这个策略会非常艰难。这就使得对某些使用情形来说这样做比较困难,比如需要支持种类很多的软件包的桌面工作站。 更新和添加安全补丁为了让系统尽可能保持安全,您需要及时了解用于您的软件的新修订和补
22、丁。这些信息可以通过若干个渠道得到,不过,通常软件提供商和 Linux 发行商应该为您及时地提供这些信息。您也可以使用(几乎永远免费)CERT(Computer Emergency Response Team)的服务。他们通常会维持传达关于最新的建议、漏洞等信息的邮件列表。 当有新的更新可用时,您应该去查看它是否适用于您的系统以及您的安全需要。安装更新本身可能会导致安全问题。另外,要考虑到每个更新都可能会引入新的漏洞,或者如果更新失败,您的系统可能会停留在不可用的状态。 当在大范围的系统中安装某个更新时,您通常不能同时对它们全部进行更新 这可能会导致您的多个系统在更新期间互相不兼容。 可见,更
23、新系统会涉及到很多风险。这里是降低这些风险的一些建议: 初始安装后,不要将您的系统立即连接到网络。将所有相关的更新下载到一台单独的机器,然后手工地传输它们,以确保系统在暴露在网络上之前已经处于当前状态(current state)。 始终拥有可用的近期系统备份。 对于业务中每一个关键的系统,您都应该有一个与产品环境的硬件和软件相同的独立测试环境。首先在测试环境中获得关于更新的经验,以防止在管理产品系统时出现意外。 理想情况下,您应该已经准备好一套回归测试,在更新包括系统在内的所有程序之前和之后对适当的功能和性能进行对比。至少,要确保拥有可重复的而且文档化的质量控制检查,以保证在修改产品环境之前
24、测试环境中的主要功能和服务不会受到影响。 对于小型网络来说,手工安装更新或许可行,但规模较大时很快就难以处理了。这经常会导致更新不能被安装。使用商业的或者开放源代码的系统管理或者软件分发工作来简化更新的部署。 我们是不是提醒过您最好在手边准备一个备份?我们还要再提醒一次。 制定一个安装更新的计划,并考虑: o 更新系统的次序 o 对您的业务来说关键的系统 o 系统如何互相依赖 o 哪个系统包含机密数据 当使用完整性检查工具时(强烈建议至少对服务器使用),为了能识别出意外的更改,要记得更新系统在已知安全状态下占用内存的基线。 在安装任何修订之前,要使用密码检验和工具检查软件的完全性和真实性(尤其
25、是从 Web 站点或者 ftp 服务器上下载时)。在 Linux 领域中,通常使用 MD5 和/或 SHA-1 检验和。如果软件以 RPM 包的形式提供,那么提供商应该已经提供了一个 GnuPG 签名。您可以运行 $ rpm -v -checksig .rpm 命令来检查它。成功的响应应该是 “.rpm: md5 gpg OK“;不成功的会是 “.rpm: md5 GPG NOT OK“。 您可以使用 $ md5sum .rpm 或 $ sha1sum .rpm 来确认 MD5 或 SHA-1 检验和。如果您下载的某个文件中包含的检验和可用于多个文件(大部分情况下称为 md5sum.asc 或
26、 .md5),那么您可以使用 $ md5sum -c md5sum.asc。 最后,但不是最不重要的是,要备份您的系统。(我们是不是已经说过了?) 将您的安全计划付诸实行如本系列 第 2 部分 中所讨论的,现在来将文档化的安全计划应用到已经安装的系统。弄清楚哪些进程正在您的系统中实际地运行,并禁用不需要的那些。要定期地检查不正常的行为;未知的进程可能会提供不必要的服务,预示着系统的受损。 本节向您介绍如何找出并禁用那些不必要的(潜在危险)进程,以及如何为系统准备定期审计。 找出并禁用不必要的进程理想情况下,您应该明白在您的系统中运行的每一个进程。要获得所有进程的列表,可以执行命令 ps -ef
27、(POSIX 风格)或 ps ax(BSD 风格)。进程名有方括号的是内核级的进程,执行辅助功能(比如将缓存写入到磁盘);所有其他进程都是使用者进程。您会注意到,就算是在您新安装的(最小化的)系统中,也会有很多进程在运行。熟悉它们,并把它们记录到文档中。 网络监控工具这些工具可以帮助进行网络监控: Nmap(Network Mapper)是一个免费的开源工具,可用于网络探察和安全审计。完成安装和设置后使用它来检查您的系统。 IPTraf 是一个用于 Linux 的基于控制台的网络统计工具。它收集各种数据,比如 TCP 连接数据包和字节计数、接口统计和活动指示器、TCP/UDP 传输衰减、局域网
28、工作台数据包和字节计数。 Multi Router Traffic Grapher(MRTG)是一个用于监控网络链路上传输负载的工具。MRTG 会生成包含图形的 HTML 页面,为此传输提供生动的可视化描述。参见 MRTG 索引页 上的示例。 现在让我们来看那些开放网络连接的进程;它们受到攻击的潜在可能最大。要获得所有 TCP 或 UDP 连接的列表,执行命令 netstat -atu(附带名字解析,易读)或者 netstat -atun (没有名字解析,更快)。在这个列表中,特别要注意状态为 LISTEN 的 TCP 连接和所有的 UDP 连接,因为服务器通过这些连接来接收到来的连接。 如果
29、服务器侦听 127.0.0.1/localhost,那么它只能由系统本身(环回接口)访问到。因此它的暴露程度要远低于侦听外部可达接口甚至 0.0.0.0(= *,如果打开名字解析)的服务器,后者可以由任意网络接口所访问。 如果您使用过 netstat -atun,那么您需要自己翻译端口号。可以在 /etc/services 中去查找它们。使用附加的参数 -p 来显示相应的进程,如 清单 5 所示。 在这个示例中,您可以推断出 portmapper 和 graphical user interface(X)是特定的服务器所不需要的。portmapper 为 NFS 等各种基于 RPC 的服务提供
30、标准端点(endpoint);系统并不提供 NFS 共享。当系统用作工作站时 X 窗口是有用的,但在服务器上的使用受限。 确定这些进程是如何被启动的(通过 /etc/inittab,通过引导脚本,等等)并如前所述的那样禁用它们。如果程序是由另一个程序启动的,那么这项任务可能会更具挑战性:X 服务器很有可能是由显示管理器启动的,比如 xdm、kdm 或 gdm,其本身并不会出现在 inittab 或引导脚本目录中。 netstat 所列出的连接并不是自动都可以由网络上的所有计算机来使用。在任何数据包到达开放的连接之前,基于 Linux 内置功能的防火墙可以进一步控制访问。 审计准备安装了基本的系统并安全地配置后,您的最终目标是保持系统的安全。为了识别出对系统的不必要修改,使用审计工具来记录处于希望是已知且安全的状态的系统的内存占用,并检测对它的修改。 结束语本期文章向您展示了如何加固您的 Linux 系统,即通过保护引导过程和本地文件系统、锁定服务和后台进程、强制实行配额和限制、启用强制访问控制、找出在使用新软件版本更新安全性时可能会引入的安全漏洞。当配置安全性参数时,请遵循最小权限原则的概念。另外,要了解在您的系统中运行的 所有 进程,以使得您可以禁用不需要的那些,防止它们成为进入到您的 Linux 环境安全心脏的途径。