| 测试的服务器: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提示符也不太一样,尽量修改的和伪装目标一致。 结束语: 当然,要想保证服务器安全,这一点是远远不够的,它只能减小被攻击成功的概率。 如果更深一些,伪装成一个蜜罐子,来诱捕黑客,则不在本文的讨论范围之内。 |