測試的服務器:redhat7.0,redhat7.1,mandrake7.1
本文主要討論linux服務器的偽裝,對于Sun、hp等可以查找相關資料,本文只提供思路。
前言:為什么要偽裝?
動物偽裝,為了逃避天敵,或為了更好的獲取獵物。
人偽裝,使你不知他的底細。
服務器偽裝,目的是要使攻擊者很難搜集到服務器真正的信息,使他的進一步攻擊造成難度,進而起到一定的保護作用,當然還有更深的用法,等著你去發現。
聲明:
本文只是本人研究的總結,是為了大家的學習研討,請不要用到非法用途。
本人才疏學淺,不足及錯誤的地方請指出,mail地址:。
正文:
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/ftpaclearcase/" target="_blank" >ccess里有兩個參數
指示參數:greeting full | brief | terse
greeting text
允許控制遠程用戶登陸進來以后,給用戶多少信息及信息內容。
banner
banner消息是在用戶名和密碼以前顯示給用戶的。
3. 修改telnet和ftp的默認端口號
有很多掃描器并不是逐個端口掃描的,所以來個乾坤大挪移來使掃描失效。
具體是修改/etc/services 或者是/etc/inetd.conf。
4. 操作系統指紋偽裝
nmap等掃描器能通過操作系統指紋判斷操作系統類型,所以我們要采取一些策略保護自己?,F在有一些工具可以修改操作系統指紋,像fpf等,fpf可以在下載,它是一個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提示符也不太一樣,盡量修改的和偽裝目標一致。
結束語:
當然,要想保證服務器安全,這一點是遠遠不夠的,它只能減小被攻擊成功的概率。
如果更深一些,偽裝成一個蜜罐子,來誘捕黑客,則不在本文的討論范圍之內。
作者:Yuky