测试的服务器:redhat7.0,redhat7.1,mandrake7.1
本文主要讨论linux服务器的伪装,对于Sun、hp等可以查找相关资料,本文只提供思路。
前言:为什么要伪装?
动物伪装,为了逃避天敌,或为了更好的获取猎物。
人伪装,使你不知他的底细。
服务器伪装,目的是要使攻击者很难搜集到服务器真正的信息,使他的进一步攻击造成难度,进而起到一定的保护作用,当然还有更深的用法,等着你去发现。
声明:
本文只是本人研究的总结,是为了大家的学习研讨,请不要用到非法用途。
本人才疏学浅,不足及错误的地方请指出,mail地址:yuky@freemail.sx.cn。
正文:
1. Telnet信息伪装
首先看一次telnet过程:
[yxg@localhost yxg]$ telnet xx.xx.xx.xx
Trying xx.xx.xx.xx...
Connected to xxxx.
Escape character is ^].
Red Hat Linux release 7.1 (Seawolf)
Kernel 2.4.2-2 on an i686
login:
从中可以看到操作系统为Red Hat Linux release 7.1,内核版本2.4.2-2,计算机为:intel686。攻击者得到这些信息就可以用相应的攻击程序。所以我们不能告诉他们真正的情况。
telnet信息存放于/etc/issue.net
[root@database /etc]# cat issue.net
Red Hat Linux release 7.1 (Seawolf)
Kernel 2.4.2-2 on an i686
修改它成为你想要的任何字符,甚至什么也不要。
我的改为Sun的提示:
[yxg@localhost yxg]$ cat /etc/issue.net
SunOS 8.0
要注意必要的空行,改完和伪装的对象比较,直到一模一样才行。
对于本机的用户,提示信息在/etc/issue,改不改随你。
注意:如果你想重启后issue.net内容不变,修改/etc/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 reboot.
# echo "" /etc/issue
# echo "$R" /etc/issue
# echo "Kernel $(uname -r) on $a $SMP$(uname -m)" /etc/issue
# cp -f /etc/issue /etc/issue.net
# echo /etc/issue
2. ftp信息伪装
现在有很多对于wu-ftp的攻击程序,所以我就拿wu-ftp作例子。
先看一下ftp的过程:
[yxg@localhost yxg]$ ftp xx.xx.xx.xx
Connected to xxxx.
220 database FTP server (Version wu-2.6.1-16) ready.
如果想要不显示出wu-ftp,可以有多种方法。
其一:
察看in.ftpd就能发现版本号写在了程序中
[root@database /root]# strings /usr/sbin/in.ftpd
………………….
/var/log/lastlog
Could not write %.100s: %.100s
Version wu-2.6.1-16
你可以用16进制编辑器修改版本的字符串,改为proftp什么的,保准有人会上当。
其二:
/etc/ftpaccess里有两个参数
指示参数:greeting full | brief | terse
greeting text
允许控制远程用户登陆进来以后,给用户多少信息及信息内容。
banner
banner消息是在用户名和密码以前显示给用户的。
3. 修改telnet和ftp的默认端口号
有很多扫描器并不是逐个端口扫描的,所以来个乾坤大挪移来使扫描失效。
具体是修改/etc/services 或者是/etc/inetd.conf。
4. 操作系统指纹伪装
nmap等扫描器能通过操作系统指纹判断操作系统类型,所以我们要采取一些策略保护自己。现在有一些工具可以修改操作系统指纹,像fpf等,fpf可以在www.xfocus.org下载,它是一个lkm,加载到内核中,可以模拟很多操作系统。当然你可能要对源程序进行修改,也可以加入一些新的功能,如自动隐藏等。
5. 改装uname
如果不幸被一个攻击者闯入,它可以用uname来获取真正的操作系统信息,然后来个本地溢出,你就哭吧。
所以我们要修改uname的源程序,使它显示我们想要它显示的内容。
打开uname.c,找到如下行:
print_element (PRINT_SYSNAME, name.sysname);//操作系统名如linux
print_element (PRINT_NODENAME, name.nodename);//主机名
print_element (PRINT_RELEASE, name.release);//发行版本,如:2.2.16-22
print_element (PRINT_VERSION, name.version);//
print_element (PRINT_MACHINE, name.machine);//机器类型,如i686
print_element (PRINT_PROCESSOR, processor);//处理器类型
知道怎么改吧,不知道?提示一下,如果要显示操作系统为SunOS,替换第一行为:
print_element(PRINT_SYSNAME,"SunOS");
编译后,运行./uname ?s,就会显示SunOS
当然你应该把每一项都进行修改,使人看不出破绽。
最后把改好的uname拷到/bin目录。
我在修改时还加了一个-Y的参数,目的是显示真正的信息,给自己看的。默认显示修改过的信息。
6. 其他一些杂项
建议你尽量关掉不必要的服务,对于开放的其他服务要仔细检查,使它不至于有泄密的信息。
不同操作系统的shell提示符也不太一样,尽量修改的和伪装目标一致。
结束语:
当然,要想保证服务器安全,这一点是远远不够的,它只能减小被攻击成功的概率。
如果更深一些,伪装成一个蜜罐子,来诱捕黑客,则不在本文的讨论范围之内。