【转】反病毒攻防研究第002篇:利用缝隙实现代码的植入
聲明
因為在評論區看到原博主說要把文章刪掉。。。心想這么好的文章刪了真的可惜,所以就先轉一份。。。
一、前言
? ? ? ? 現在很多網站都提供各式各樣軟件的下載,這就為黑客提供了植入病毒木馬的良機。黑客可以將自己的惡意程序植入到正常的程序中,之后發布到網站上,這樣當用戶下載并運行了植入病毒的程序后,計算機就會中毒,而且病毒可能會接著感染計算機中的其他程序,甚至通過網絡或者U盤,使得傳播面積不斷擴大。而本篇文章就來剖析病毒感染的實現原理,首先需要搜索正常程序中的縫隙用于“病毒”(用對話框模擬)的植入,之后感染目標程序以實現“病毒”的啟動。當然,討論完這些,我依舊會分析如何應對這種攻擊方法,這才是本篇文章討論的重點。
?
二、搜索程序中存在的縫隙。
? ? ? ? 病毒木馬如果想對一個正常的程序寫入代碼,那么首先就必須要知道目標程序中是否有足夠大的空間來讓它把代碼植入。一般來說,有兩種方法,第一種就是增加一個節區,這樣就有足夠的空間來讓病毒植入了,但是這樣一來,不利于病毒的隱藏,如同告訴反病毒工程師“我就是病毒”一樣,即便如此,我依舊會在后面的文章中討論這種方法。第二種方法就是查找程序中存在的縫隙,然后再植入代碼。因為在PE文件中,為了對齊,節與節之間必然存在未被使用的空間,這就是程序中存在的縫隙。只要惡意代碼的長度不大于縫隙的長度,那么就可以將代碼寫入這個空間。這里討論的就是這種方法的實現。
? ? ? ? 為了討論的簡單起見,我這里依舊使用在上一篇文章中所編寫的ShellCode。和上一篇文章中所討論的方法不同的是,上次是將ShellCode寫入了密碼文件,密碼驗證程序讀取密碼文件后,產生溢出,執行了ShellCode,然后再執行“病毒”程序。而這次是省去了中間環節,直接將ShellCode寫入正常的程序中,運行程序就直接運行了“病毒”,這樣就更加隱蔽,更容易被觸發。提取出之前的ShellCode,并進行一定的修改,定義如下:
? ? ? ? 這里需要說明的是,由于我們接下來要將程序的入口點修改為ShellCode的入口點,在ShellCode執行完后,又需要跳回原程序的入口點,因此在原始ShellCode的后面添加上了mov和jmp eax的指令。mov后面留有四個字節的空間,用于原始程序OEP的寫入,下一步就是跳到原始程序去執行。由于原始ShellCode中包含有退出代碼,所以也需要將調用ExitProcess的ShellCode代碼去掉。
搜索程序中縫隙的代碼如下:? ? ? ? 上述代碼是在代碼的節區與緊挨著代碼節區之后的節區的中間的位置進行搜索,從代碼節區的末尾開始反向搜索。
?
三、將ShellCode植入目標程序
這里我們需要編寫一個main函數來調用上面的函數,代碼如下:? ? ? ? 由于我需要把ShellCode植入可執行文件,只有可執行文件才能啟動ShellCode,因此有必要提前對目標文件進行格式檢測。而檢測的方法,一般就是檢測MZ與PE標志位是否存在。這里有一件事需要說明,就是在將ShellCode拷貝到縫隙中的那條語句中,使用了memcpy函數,它的第三個參數是strlen(shellcode)+3,這里之所以加上3,是因為strlen這個函數當遇到字符串中出現的\x00時,就會認為字符串已經結束,那么它的字符長度的計數就會停在\x00處。而一個程序的OEP往往是0x004XXXXX,小端顯示,它的存儲方式就是XXXXX400,在我的ShellCode中,由于00后面還剩下三個字節(\xff\xe0\x90),但是被00所截斷了,導致這最后的三個字節不被strlen認可,因此需要再加上3。
?
四、程序的“感染”
? ? ? ? 為了測試我們的“感染”程序,在此我再編寫一個HelloWorld程序,代碼如下:圖1 用Hex Editor查看植入代碼
? ? ? ? 再用OllyDbg查看植入代碼:
圖2 用OllyDbg查看植入代碼
圖3 被“感染”前
圖4 被“感染”后
? ? ? ? 此時我們就可以確定,helloworld.exe已經被“感染”了,為了驗證“被感染”程序是否能夠啟動我們的對話框程序,需要將Hack.exe(注意這里改了名字)放到與helloworld.exe的同一目錄下,然后執行helloworld.exe,如下圖所示:
圖5 運行“被感染”的程序
? ? ? ? 可見,用于模擬病毒的提示對話框以及helloworld.exe自身的程序都得到了運行,這也說明了“感染”是成功的。
? ? ? ? 這里是直接將程序的入口點修改為我們的ShellCode的入口地址,其實這是不利于“病毒”的隱藏的,為了起到迷惑的作用,可以將ShellCode程序植入到helloworld的代碼中,甚至將ShellCode拆分為幾個部分再植入,這樣就很難被發現了,這里就不再詳細討論。
?
五、防范方法的討論
? ? ? ? 由于惡意程序的這種“感染”方法是在程序的縫隙將自身代碼植入,因此它是不會對原始程序的大小產生任何改變的,當然也是由于我所舉的這個例子比較簡單,ShellCode也比較短的緣故。這或多或少也實現了病毒的隱藏,不過防范的方法還是有的。一般來說,軟件公司都會對自己的軟件產品進行校驗,比如運用MD5、Sha-1或者CRC32等。校驗的結果是唯一的,也就是說,即便原始程序改動很小(如這次僅僅修改了32個字節的內容),那么校驗的結果也會很不相同。很多安全類軟件都能夠提供校驗的功能,而校驗也總被運用在手工查殺病毒中,因為黑客往往會對系統中的svchost.exe或者一些DLL文件做手腳,而這樣的一些重要文件,官方都會給出真正的校驗值,那么對比一下就能夠很容易發現這些文件是否被篡改過了。回到上面的helloworld.exe,在“感染”前后,用火眼進行校驗檢測:
圖6 “感染”前
圖7 “感染”后
? ? ? ? 這里的建議是多采用幾種校驗方式進行校驗,因為像MD5這種校驗方式有可能會被做手腳,使得“感染”前后的結果可能是一樣的,而目前的技術還無法使在修改了原始文件的前提下,所有校驗方式的校驗結果不變。所以善于利用校驗的方式,可以使自己的計算機免受很多的威脅。
? ? ? ? 針對于這種攻擊方式,我這次并不打算寫出專殺工具,畢竟依靠之前的專殺工具就足夠了。而對于文件被“感染”,去除感染是一件比較麻煩的事情,在這里先不進行討論。以后的文章中可能會專門論述這個問題。
?
六、小結
? ? ? ? 這次簡單討論了一下利用PE結構中的縫隙實現ShellCode的植入。在我看來,PE知識是許多高級技術的基礎,是必須要掌握的。以后的文章,會從更多的角度來講解利用PE格式實現“病毒”的攻擊與防范。再次強調的是,我在這里討論的目的是為了讓大家了解更多的計算機安全的知識,而不應將這些運用于歪門邪道。我所講的這些方法,是無法通過殺軟的檢驗的,即便是這次被感染的程序,“火眼”依舊將其列為重點懷疑對象。所以不應為了一時之快,而做出讓自己后悔的舉動。
- <li class="tool-item tool-active is-like tool-clicked"><a href="javascript:;"><svg class="icon" aria-hidden="true"><use xlink:href="#csdnc-thumbsup"></use></svg><span class="name">點贊</span><span class="count">3</span></a></li><li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-csdnc-Collection-G"></use></svg><span class="name">收藏</span></a></li><li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-csdnc-fenxiang"></use></svg>分享</a></li><!--打賞開始--><!--打賞結束--><li class="tool-item tool-more"><a><svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg></a><ul class="more-box"><li class="item"><a class="article-report">文章舉報</a></li></ul></li></ul></div></div><div class="person-messagebox"><div class="left-message"><a href="https://blog.csdn.net/ioio_jy"><img src="https://profile.csdnimg.cn/D/5/F/3_ioio_jy" class="avatar_pic" username="ioio_jy"><img src="https://g.csdnimg.cn/static/user-reg-year/2x/7.png" class="user-years"></a></div><div class="middle-message"><div class="title"><span class="tit"><a href="https://blog.csdn.net/ioio_jy" data-report-click="{"mod":"popu_379"}" target="_blank">ioio_jy</a></span><span class="flag expert"><a href="https://blog.csdn.net/home/help.html#classicfication" target="_blank"><svg class="icon" aria-hidden="true"><use xlink:href="#csdnc-blogexpert"></use></svg>博客專家</a></span></div><div class="text"><span>發布了121 篇原創文章</span> · <span>獲贊 670</span> · <span>訪問量 65萬+</span></div></div><div class="right-message"><a href="https://bbs.csdn.net/topics/395526389" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-messageboard">他的留言板</a><a class="btn btn-sm attented bt-button personal-watch" data-report-click="{"mod":"popu_379"}">已關注</a></div></div></div>
總結
以上是生活随笔為你收集整理的【转】反病毒攻防研究第002篇:利用缝隙实现代码的植入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习在医学影像中的研究进展及发展趋势
- 下一篇: 【2017年第1期】基于外卖物流配送大数