linux設備驅動程序過濾
Ⅰ 我想深入學習一下計算機及網路知識該怎麼學起
第一部分:計算機結構及工作原理、各種零配件的性能參數及主流品牌、計算機硬體的組裝,CMOS設置,硬碟的分區,格式化、Windows98/2000/XP的安裝、硬體驅動程序和應用程序的安裝、Windows注冊表的結構,備份及應用Windows的內核:CPU、內存、硬碟等分配、軟硬體系統的優化設置,整機性能評測、計算機病毒的原理及防治、常見軟硬體故障的原因,現象及解決、正確分辨市場假貨、水貨,軟硬體產品的銷售技巧 。
第二部分:網路的基本構成,發展和拓撲設計,10BASE-T區域網的構建與實現,以及各種伺服器的結構與特徵,乙太網對等網等各種方式。TCP/IP的四層模型與OSI七層模型的異同,TCP/IP協議剖析,如何設置IP地址,子網掩碼,默認網關,區分子網和網段及集線器,交換機和路由器,RJ45網線製作和種網吧的組建及維護, NT、WIN2000server、Linux伺服器的搭建,98對等網的組建與調試和代理伺服器的設置
第三部分:Win2000配置,用戶及許可權、文件及文件夾的管理,新特性活動目錄的管理,組策略。網路資源的監控、系統環境的設置、磁碟系統的管理。Web、Ftp、DNS、DHCP、WINS等伺服器的安裝配置及管理。利用Exchange郵件伺服器軟體實現企業內部個人郵件信箱伺服器、公告欄伺服器、網站收發電子郵件伺服器、聊天伺服器的建立和管理。SQL Server中資料庫的創建、表的創建及發布、資料庫的備份及恢復、表的導入及導出等一系列維護和管理方法。代理伺服器基本原理。利用Microsoft Proxy為例實現代理伺服器的設置及管理。
第四部分:代理伺服器基本原理。利用Microsoft Proxy為例實現代理伺服器的設置及管理。流行網管軟體Cisco Work2000的配置、使用和管理技巧,在一台監控計算機上管理網路中所有的路由器和交換機,實時監控網路流量,及時發現網路問題。路由與交換技術:路由原理的講解,並通過對路由器配置實例的學習掌握Cisco路由器的常用配置命令及配置。交換原理的講解,通過對交換機配置實例的學習掌握交換機的常用配置命令及配置。
第五部分:系統進行手工定製、系統性能檢測管理、內核設置與編譯。ftp服務與Samba服務,其它服務,如,DHCP、NFS等。Web網路服務。包括:Apache服務的配置使用及安全設置。其它web服務軟體的介紹。DNS技術及應用。一些簡單的路由技術一些簡單的負載均衡技術。Mail網路服務。包括:sendmail的配置與使用,Qmail的配置與使用。一些mail客戶端程序的使用
第六部分:網路安全的基本概述,網路協議的介紹,常規加密的基本知識,公鑰密鑰加密的基本知識及數字簽名,身份難驗證,用PGP及數字證書進行郵件加密實驗,全面講述在環境下實施網路安全對策,Windows98下各種漏洞、攻擊類型和防禦方法及安全配置方案(系統安全、IE安全、Outlook的安全等)。結合黑客攻擊過程全面講述在
WindowsNT環境下實施網路安全對策。WindowsNT下各種漏洞、攻擊類型和防禦方法及安全配置方案,全面講述在Windows2000環境下實施網路安全對策,Windows系統的日誌安全、WEB安全,軟體防火牆的實施。 windows2000下各種漏洞、攻擊類型和防禦方法及安全配置方案。
第七部分:Linux管理員部分
一、 基本應用
1、 GNU/linux介紹、Redhat Linux的安裝。
2、 系統知識(shell、文件系統、管道與重定向、進程概念)、常用系統命令介紹(ls、cp、mkdir、rm 、vi、man、chmod等)
3、 基本系統管理(包括:系統啟動過程介紹、磁碟管理、用戶管理、日誌查看、tar/gz包的使用、rpm軟體包管理等。
二、 基本系統服務(包括:圖形終端、基本網路服務)(9個課時)
1、 圖形終端(即,x-window)的配置與使用。圍繞KDE和(或)GNOME,展示UNIX系統的友好界面。
2、 簡單的shell教本編寫方法,環境變數
3、 Linux下IP網路的基本配置(IP地址、網關、名字)
4、 Linux下的網路服務的配置與使用(包括ftp、DNS、Apache、Sendmail、samba的基本配置)。基於RedHat的setup和linuxconf進行介紹。Webmin管理工具的介紹。
三、 Prerequisite(背景課程)
1、 前言
2、 高級系統管理。包括:系統進行手工定製(inetd,service,ntsysv)、系統性能檢測管理(ps,top ,tail,dmesg,/proc)。
3、 內核設置與編譯。
四、 高級網路應用
1、 ftp服務與Samba服務,其它服務,如,DHCP、NFS等。
2、 Web網路服務。包括:Apache服務的配置使用及安全設置。其它web服務軟體的介紹。DNS技術及應用。
3、 一些簡單的路由技術
4、 一些簡單的負載均衡技術。
5、 Mail網路服務。包括:sendmail的配置與使用,Qmail的配置與使用。一些mail客戶端程序的使用。
五、 系統網路安全
1、 包過濾防火牆的理論與應用(NAT技術、內核構架、Ipchains/Iptable的使用),其它非核心態防火牆的介紹。
2、 系統安全。SSH的配置與使用。入侵檢測系統及Checkpoint技術與應用
3、 VPN(虛擬網關)的理論與應用。包括:Ipsec、PPTP、認證、密鑰交換協議等技術。
六、 總結
混合構建一個安全的網路服務系統
Ⅱ 如何徹底卸載3721
其實不需要網路實名等東西
你完全可以把它卸載掉
常用的網址都加入收藏收藏夾
網路實名的作用不大
換個瀏覽器,比如傲遊
在Documents and Settings\All Users\「開始」菜單\程序\網路實名\ 目錄下添加
了解網路實名詳細信息.url 86 位元組
清理上網記錄.url 100 位元組
上網助手.url 99 位元組
卸載網路實名.lnk 1,373 位元組
修復瀏覽器.url 103 位元組
在WINDOWS\Downloaded Program Files\ 下添加
assis.ico 5,734 位元組
cns02.dat 1,652 位元組
CnsHook.dll 56,320 位元組
CnsMin.cab 116,520 位元組
CnsMin.dll 179,712 位元組
CnsMin.inf 378 位元組
sms.ico" 6,526 位元組
yahoomsg.ico 5,734 位元組
在WINDOWS\System32\Drivers\ 目錄下添加
CnsminKP.sys
添加註冊表鍵值:
增加HKEY_LOCAL_MACHINE\SOFTWARE\3721 主鍵,下設多子鍵及屬性值;
在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID 主鍵下增加
{B83FC273-3522-4CC6-92EC-75CC86678DA4}
{D157330A-9EF3-49F8-9A67-4141AC41ADD4}
兩個子鍵
3.在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\主鍵下增加
CnsHelper.CH
CnsHelper.CH.1
CnsMinHK.CnsHook
CnsMinHK.CnsHook.1
四個子鍵
4. 在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\主鍵下增加
{1BB0ABBE-2D95-4847-B9D8-6F90DE3714C1}子鍵
5. 在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\主鍵下增加
{A5ADEAE7-A8B4-4F94-9128-BF8D8DB5E927}
{AAB6BCE3-1DF6-4930-9B14-9CA79DC8C267}
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\主鍵下增加
!CNS子鍵
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\ 主鍵下增加
{00000000-0000-0001-0001-596BAEDD1289}
{0F7DE07D-BD74-4991-9D5F-ECBB8391875D}
{5D73EE86-05F1-49ed-B850-E423120EC338}
{ECF2E268-F28C-48d2-9AB7-8F69C11CCB71}
{FD00D911-7529-4084-9946-A29F1BDF4FE5} 五個子鍵
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search\主鍵下增加
CustomizeSearch
OcustomizeSearch
SearchAssistant
OsearchAssistant 四個子鍵
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks\主鍵下增加
{D157330A-9EF3-49F8-9A67-4141AC41ADD4}子鍵
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\下增加
CnsMin子鍵
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\下增加
EK_Entry 子鍵 (提示,這個鍵將在下次啟動機器的時候生效,產生最令人頭疼的部分,後文會敘述)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\下增加
CnsMin 子鍵
HKEY_CURRENT_USER\Software\下增加
3721子鍵
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\下增加
CNSAutoUpdate
CNSEnable
CNSHint
CNSList
CNSMenu
CNSReset
在重新啟動計算機後,上面提到的RunOnce下的EK_Entry生效,在注冊表中多處生成最為邪惡的CnsMinKP鍵值,同時在系統盤的windows/system32/drivers目錄下生成CnsMinKP.sys文件,噩夢由此開始。
由於win2k/xp在啟動的時候(包括安全模式)默認會自動運行windows/system32/drivers下面的所有驅動程序,於是CnsMinKP.sys被載入,而這個驅動的作用之一,就是保證windows/ Downloaded Program Files目錄下的Cnshook.dll和CnsMin.dll以及其自身不被刪除;Cnshook.dll的作用則是提供中文實名功能,CnsMin.dll作用在於使其駐留在ie進程內的時候。CnsMin為了保證自己的優先順序最高,用了一個定時器函數反復安裝鉤子,因此造成系統性能下降,在天緣測試的那台機器上,使得性能大概下降了20%左右。而且由於hook強行掛接的原因,當用戶使用斷點調試程序的時候將會導致頻繁出錯,這一點與早期版本的cih導致winzip操作和無法關機類似(關於詳細的技術細節,可參看題目為《[轉載]3721駐留機制簡單研究》一文,地址為 http://www.nsfocus.net/index.php?act=sec_doc&do=view&doc_id=894 原作者Quaful@水木清華)
防刪除特性:
該病毒雖然自帶一個所謂的「卸載程序」,但事實上核心部分的程序/注冊表鍵值依然沒有刪除。而且該病毒更是利用各種技術手段,具有極其強大的反刪除特性。
windows系統啟機(包括安全模式下)便會載入windows/system32/drivers下的CnsMinKP.sys,該驅動該驅動程序過濾了對其自身及相關重要文件和注冊表的刪除操作。每當試圖刪除3721的關鍵文件和注冊表項時,直接返回一個TRUE,使Windows認為刪除已經成功,但文件和注冊表實際上還是在那裡。
技術亮點:
天緣不得不承認,3721這個病毒插件可稱我作為網管以來面對的最難清除的病毒。近幾年來病毒有幾次質的突破:cih感染可升級的bios、紅色代碼打開windows的共享擴大戰果、meliza讓我們見識了什麼是看得到源程序的病毒、mssqlserver蠕蟲讓我們留意到計算機病毒能攻擊的不光是節點還有網路設備、沖擊波病毒讓我們認識到大量使用同一種操作系統時在出現安全漏洞時的可怕、美女圖片病毒讓我們知道了將欺騙藝術與軟體漏洞結合的威力、而這次3721病毒首次展現了病毒強大的反刪除特性,可說是在windows環境下無法殺除的病毒。雖然這是個良性病毒,對系統並沒有破壞特性,但依據病毒的發展史,可以預見,這種幾近完美的反刪除技術將很快被其他病毒所利用,很快將被其他病毒所利用。屆時結合網路傳播,局網感染帶強大反刪除功能的病毒或許會讓目前windows平台下的殺毒軟體遭遇到最大的考驗。而這次經歷,也讓我意識到微軟的windows操作系統在人性化、美觀化、傻瓜化的背後的危機。作為it同行,我個人對3721病毒作者所使用的種種技術表示欽佩,但新型病毒的潘多拉魔盒,已經被他們打開:
在目前已知的病毒歷史上,之前只有幾種病毒利用過windows nt下的system32/drivers 下的程序會被自動載入的特性來進行傳播,但那些病毒本身編寫地不夠完善,會導致windows nt系統頻繁藍屏死機,象3721插件病毒這樣完美地載入、駐留其他進程,只消耗主機資源,監測注冊表及關鍵文件不導致系統出錯的病毒,國內外尚屬首次,在技術上比以前那些病毒更為成熟;
如同天緣和大家曾經探討過的沒打sp2以上patch的win2k如何上網下載sp4再安裝補丁這樣的連環套問題一樣。由於drivers目錄下的CnsMinKP.sys啟機必定載入,而欲不載入它,只有在windows啟動後,進注冊表改寫相應的CnsMinKP鍵值或者刪除該文件,但由於CnsMinKP.sys過濾了對其自身及相關重要文件和注冊表的刪除操作。每當試圖刪除3721的關鍵文件和注冊表項時,直接返回一個TRUE,使Windows認為刪除已經成功,但文件和注冊表實際上還是在那裡。使得注冊表無法修改/文件無法被刪除,讓我們傳統的殺除病毒和木馬的對策無法進行。
駐留ie進程,並自動升級,保證了該病毒有極強大的生命力,想來新的殺除方法一出現,該病毒就會立即升級。Windows上雖然還有mozilla等其他瀏覽器,但由於微軟的捆綁策略和兼容性上的考慮,絕大多數用戶一般只安裝有ie。上網查資料用ie,尋找殺除3721資料的時候也用ie,如此一來,3721搶在用戶前面將自身升級到最新版本以防止被殺除的可能性大大增加,更加增添了殺除該病毒的難度。或許在本文發出後,病毒將會在最短時間內進行一次升級。
附帶其他「實用」功能。天緣記得早年在dos下的時候曾遇到一些病毒,在發作的時候會自動運行一個可愛的屏幕保護,或者是自動替用戶清理臨時文件夾等有趣的功能;後來在windows平台上也曾見過在病毒發作時自動提醒「今天是xx節,xx年前的今天發生了xx歷史典故」這樣的帶知識教育意義的病毒;而3721病毒則是提供了一個所謂的中文域名與英文域名的翻譯功能。隨著病毒的發展,這樣帶隱蔽性、趣味性和欺騙性的病毒將越來越多。例如最近的郵件病毒以微軟的名義發信,或以re開始的回信格式發信,病毒編寫的發展從原來的感染傳播、漏洞傳播、後門傳播逐步向欺騙傳播過渡,越來越多的病毒編寫者意識到社會工程學的重要性。或許在不久的將來,就會出現以簡單的網路游戲/p2p軟體為掩飾的病毒/木馬。
極具欺騙性:該插件在win98下也能使用,但使用其自帶的卸載程序則可比較完美地卸載,而在win2k/xp平台下卸載程序則幾乎沒用。由此可以看出病毒編寫者對社會工程學極其精通:當一個人有一隻表時他知道時間;而當他有兩只表時則無從判斷時間。當在論壇/bbs上win2k/xp的用戶提到此病毒無法刪除的時候,其他win2k/xp用戶會表示贊同,而win98用戶則會表示其不存在任何問題屬於正常程序的反對意見。兩方意見的對立,影響了旁觀者的判斷。
商業行為的參與。據傳該病毒是由某公司編寫的,為的是進一步推銷其產品,增加其訪問量和申請用戶。這點上與某些色情站點要求用戶下載xx插件,之後不斷利用該插件彈出窗口進行宣傳的方式很象。天緣不由得想起一個典故。話說當年某公司公司工作人員(當然也有可能是不法者冒充該公司的工作人員)經常打電話恐嚇大型的企業單位,無外乎說其中文域名已被xx公司搶注,如不交錢將會導致xx後果雲雲。兄弟學校中似乎也有受到此公司騷擾的經歷:該公司員工打電話到某高校網路中心,起初是建議其申請中文域名,其主任很感興趣但因價格原因未果。第二次打來的時候,就由勸說變成了恐嚇,說該校中文名字已經被xx私人學校注冊,如果該校不交錢申請就會有種種可怕後果雲雲。誰想該校網路中心主任吃軟不吃硬,回話:「你既然打電話到此,想來你也知道在中國,xx大學就我們一所是國家承認的,而你們公司在沒有任何官方證明的情況下就替申請我校中文域名的私人學校開通,就這點上就可見你們的不規范性,那麼如果我私人交錢申請xxx國家領導的名字做個人站點是不是貴公司也受理?遇到類似冒用我校名義行騙及協助其行騙的公司,我們一貫的做法是尋找法律途徑解決!」回答甚妙,當然此事後果是不了了之。從相關報道中不難看到,計算機犯罪逐步開始面向經濟領域。侵犯私人隱私,破壞私人電腦的病毒與商業結合,是病毒編寫由個人行為到商業行為的一次轉變,病毒發展的歷史由此翻開了新的一章。
病毒查殺方案:
由於網管專題的欄目作用主要是「授人與漁」,天緣把病毒查殺過程經歷一並寫下,大家共同探討。
第一回合:
當初見此病毒的時候,感覺不過如此,普通木馬而已。依照老規矩,先把注冊表裡相關鍵值刪除,再把病毒文件一刪,然後重新啟動機器,等待萬事ok。啟機一看,注冊表完全沒改過來,該刪除的文件也都在。
結局:病毒勝,天緣敗
第二回合:
換了一台機器,下了個卸載幫助工具,以方便監視注冊表/文件的改變。我下的是Ashampoo UnInstaller Suite這個軟體,能監視注冊表/文件/重要配置文件。Ok,再次安裝3721插件,把對注冊表的改變/文件的改變都記錄下來。(值得注意,因為注冊表run和runonce的鍵是下次啟動的時候生效的,因此在重新啟動後,還要對比一下文件/注冊表的改變才能得到確切結果)。然後對比記錄,把3721添加的鍵全部記下來,添加的文件也記錄下來。之後我計劃是用安全模式啟動,刪除文件和注冊表,所以寫了一個save.reg文件來刪除注冊表裡的相關鍵值(寫reg文件在網管筆記之小兵逞英雄那講有介紹,等一下在文末我提供那個reg文件給大家參考),寫了一個save.bat來刪除相關文件,放到c盤根目錄下。重新啟動機器,進入安全模式下,我先用regEdit /s save.reg 導入注冊表,然後用save.bat刪除相關文件。重新啟動機器,卻發現文件依然存在,注冊表也沒有修改成功。通常對付木馬/病毒的方式全然無效,令我產生如臨大敵之感。
結局:病毒勝,天緣敗
第三回合:
重新啟動機器,這次我採用手工的方式刪除文件。發現了問題——對system32/drivers目錄下的CnsMinKP.sys,WINDOWS\Downloaded Program Files 目錄下的Cnshook.dll和CnsMin.dll都「無法刪除」。這樣說可能有點不妥當,准確地說法是——刪除之後沒有任何錯誤報告,但文件依然存在。於是上網用google找找線索——在綠盟科技找到了一則文章(名字及url見前文),於是明白了這一切都是CnsMinKP.sys這東西搞得鬼。那麼,只要能開機不載入它不就行了??但試了一下2k和xp的安全方式下都是要載入system32/drivers下的驅動,而如果想要取消載入,則需要修改注冊表,但由於在載入了CnsMinKP.sys後修改注冊表相關值無效,導致無法遏制CnsMinKP.sys這個程序的載入。當然,有軟碟機的朋友可以利用軟盤啟動的方式來刪除該文件,但如果跟天緣一樣用的是軟碟機壞掉的機器怎麼辦呢?記得綠盟上的文章所說的是——「目前無法破解」。在這一步上,天緣也嘗試了各種方法。
我嘗試著改這幾個文件的文件名,結果沒成功;
我嘗試著用重定向來取代該文件,如dir * > CnsMinKP.sys ,結果不成功;
我嘗試著用 con <文件名> 的方式來覆蓋這幾個文件,結果發現三個文件中Cnshook.dll可以用這樣的方法覆蓋成功,但是在覆蓋CnsMinKP.sys和CnsMin.dll的時候,居然提示「文件未找到」!?熟悉 con用法的朋友都該了解,無論是文件是否存在,都應該是可以創建/提示覆蓋的,但居然出來這么一個提示,看來CnsMinKP.sys著實把系統都騙過了,強!!跟它拼到這里的時候,回想到了在dos下用debug直接寫磁碟的時代了,或許用它才能搞定吧?
仔細一想,win2k/xp下似乎沒有了debug程序了,而或許問題解決起來也不是那麼復雜。再又嘗試了幾種方法後,終於得到了啟示:既然文件不允許操作,那麼我操作目錄如何?
我先把windows\system32\drivers目錄復制一份,取名為drivers1,並將其中的CnsMinKP.sys刪除(注意,因為是drivers1中的,所以可以被成功地真正刪除掉);
重新啟動機器,到安全模式下;
用drivers1目錄替代原來的drviers目錄
cd windows\system
ren drivers drivers2
ren drivers1 drivers
之後重新啟動機器,然後進到windows後先把drivers2目錄刪除了,然後慢慢收拾殘余文件和清理注冊表吧。在這里天緣提供一個reg文件,方便各位刪除注冊表:
Windows Registry Editor Version 5.00(用98的把這行改成regeidt4)
[-HKEY_LOCAL_MACHINE\SOFTWARE\3721]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B83FC273-3522-4CC6-92EC-75CC86678DA4}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D157330A-9EF3-49F8-9A67-4141AC41ADD4}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CnsHelper.CH]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CnsHelper.CH.1]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CnsMinHK.CnsHook]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CnsMinHK.CnsHook.1]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{1BB0ABBE-2D95-4847-B9D8-6F90DE3714C1}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{A5ADEAE7-A8B4-4F94-9128-BF8D8DB5E927}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{AAB6BCE3-1DF6-4930-9B14-9CA79DC8C267}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\!CNS]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{00000000-0000-0001-0001-596BAEDD1289}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CnsMin]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{00000000-0000-0001-0001-596BAEDD1289}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{0F7DE07D-BD74-4991-9D5F-ECBB8391875D}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{5D73EE86-05F1-49ed-B850-E423120EC338}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{ECF2E268-F28C-48d2-9AB7-8F69C11CCB71}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{FD00D911-7529-4084-9946-A29F1BDF4FE5}]
[-HKEY_CURRENT_USER\Software\3721]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search\OCustomizeSearch]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search\OSearchAssistant]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search\CustomizeSearch]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search\SearchAssistant]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks\{D157330A-9EF3-49F8-9A67-4141AC41ADD4}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\CnsMin]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\EK_Entry]
[-HKEY_USERS\S-1-5-21-789336058-764733703-1343024091-1003\Software\Microsoft\Internet Explorer\Main\CNSAutoUpdate]
[-HKEY_USERS\S-1-5-21-789336058-764733703-1343024091-1003\Software\Microsoft\Internet Explorer\Main\CNSEnable]
[-HKEY_USERS\S-1-5-21-789336058-764733703-1343024091-1003\Software\Microsoft\Internet Explorer\Main\CNSHint]
[-HKEY_USERS\S-1-5-21-789336058-764733703-1343024091-1003\Software\Microsoft\Internet Explorer\Main\CNSList]
[-HKEY_USERS\S-1-5-21-789336058-764733703-1343024091-1003\Software\Microsoft\Internet Explorer\Main\CNSMenu]
[-HKEY_USERS\S-1-5-21-789336058-764733703-1343024091-1003\Software\Microsoft\Internet Explorer\Main\CNSReset]
結局:病毒敗,天緣勝
(雖然是成功地刪除了它,但是感覺贏得好險,如果該病毒加一個禁止上級文件改名的功能那麼就真的沒折了,為了預防類似的情形,最後還是找到了徹底一點的辦法,見下)
第四回合:
聰明的讀者大概已經想到,既然沒有辦法在硬碟啟動對於c盤是fat32格式的機器,想到這里已經找到了解決辦法——用win98啟機軟盤啟動機器,然後到c盤下刪除相關文件,然後啟動到安全模式下用save.reg把注冊表搞定就行了。問題是——大多數win2k/xp都使用的是新的ntfs格式,win98啟機軟盤是不支持的!怎麼辦?有軟碟機的機器可以做支持NTFS分區操作的軟盤,用ntfsdos這個軟體就能做到(詳情請見http://www.yesky.com/20020711/1620049.shtml一文)。而跟天緣一樣沒有軟碟機的朋友,別忘記了win2k/xp開始加入的boot,不光是能夠選擇操作系統而已,而是跟linux下的lilo和grub一樣,是一個操作系統引導管理器——換句話說,如果我們能在硬碟上做一個能讀寫NTFS的操作系統,再用boot進行引導,那麼不是就可以在無軟碟機的情形下實現操作c盤的目的了么?在網路上找到vFloppy.exe 這個軟體,它自帶一個支持讀寫ntfs的鏡象文件,並且使用簡單,非常傻瓜化(詳情見http://www.yesky.com/SoftChannel/72350068425883648/20040226/1771849.shtml 一文,順便一提新版本的yFloppy已經自帶支持ntfs讀寫的img文件了)。然後刪除3721的相關文件,重新啟動後清理注冊表和刪除相關文件就行了。
到此,我們終於把3721這個陰魂不散地幽靈徹底趕出了我們的硬碟!!
Ⅲ 嵌入式Linux內核開發和驅動開發是不是都屬於系統開發或者都屬於底層開發謝謝了!
驅動屬於內核的一部分,但和系統開發有存在較大的區別。系統開發里,重點是理解CPU指令內以及硬體架構,然後通過容軟體程序設計出調配硬體資源的一套體系,而驅動程序通常扮演著系統與具體硬體通訊的橋梁,當然也有虛擬設備或過濾驅動這種例外的概念。從應用層來看,這種開發都屬於底層開發。但從硬體層來看,這些就不算那麼底層了。
目前的企業較多是在搞系統移植或定製硬體的驅動開發,但要做這樣的工作不是很快上手的,而且學習也要花比較長的時間,真要等到技術水平從零到能適應工作需求,估計也要個3-5年時間,而且這還要看個人的機遇和心態決定。
Ⅳ 要成為一名好的網管要學習那些知識
這要看什麼樣的網管,大網站的網管,其實也並不是一個全面手,若很全面,可能人家反而不會要你。有的精通UNIX,有的則精通WinDows,有的熟悉ASP,有的則熟悉JSP或是PHP等等。
而對於網吧的網管,一般就得具有全面的知識和動手能力,這是基本的。
不過合格的網管學的東西還是很多的 看看吧: 網路管理員的知識結構
具體看看這里吧
http://16330.net/bbs/mainframe.php?tid=1163
- 當網管具備什麼條件
Ⅳ linux前台進程獨佔shell是怎麼實現的
Linux中的kill命令用來終止指定的進程(terminate a process)的運行,是Linux下進程管理的常用命令。通常,終止一個前台進程可以使用Ctrl+C鍵,但是,對於一個後台進程就須用kill命令來終止,我們就需要先使用ps/pidof/pstree/top等工具獲取進程PID,然後使用kill命令來殺掉該進程。kill命令是通過向進程發送指定的信號來結束相應進程的。在默認情況下,採用編號為15的TERM信號。TERM信號將終止所有不能捕獲該信號的進程。對於那些可以捕獲該信號的進程就要用編號為9的kill信號,強行「殺掉」該進程。
1.命令格式:
kill[參數][進程號]
2.命令功能:
發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。如果任無法終止該程序可用「-KILL」 參數,其發送的信號為SIGKILL(9) ,將強制結束進程,使用ps命令或者jobs 命令可以查看進程號。root用戶將影響用戶的進程,非root用戶只能影響自己的進程。
3.命令參數:
-l 信號,若果不加信號的編號參數,則使用「-l」參數會列出全部的信號名稱
-a 當處理當前進程時,不限制命令名和進程號的對應關系
-p 指定kill 命令只列印相關進程的進程號,而不發送任何信號
-s 指定發送信號
-u 指定用戶
注意:
1、kill命令可以帶信號號碼選項,也可以不帶。如果沒有信號號碼,kill命令就會發出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理並釋放資源。也可以用kill向進程發送特定的信號。例如:
kill -2 123
它的效果等同於在前台運行PID為123的進程時按下Ctrl+C鍵。但是,普通用戶只能使用不帶signal參數的kill命令或最多使用-9信號。
2、kill可以帶有進程ID號作為參數。當用kill向這些進程發送信號時,必須是這些進程的主人。如果試圖撤銷一個沒有許可權撤銷的進程或撤銷一個不存在的進程,就會得到一個錯誤信息。
3、可以向多個進程發信號或終止它們。
4、當kill成功地發送了信號後,shell會在屏幕上顯示出進程的終止信息。有時這個信息不會馬上顯示,只有當按下Enter鍵使shell的命令提示符再次出現時,才會顯示出來。
5、應注意,信號使進程強行終止,這常會帶來一些副作用,如數據丟失或者終端無法恢復到正常狀態。發送信號時必須小心,只有在萬不得已時,才用kill信號(9),因為進程不能首先捕獲它。要撤銷所有的後台作業,可以輸入kill 0。因為有些在後台運行的命令會啟動多個進程,跟蹤並找到所有要殺掉的進程的PID是件很麻煩的事。這時,使用kill 0來終止所有由當前shell啟動的進程,是個有效的方法。
4.使用實例:
實例1:列出所有信號名稱
命令:
kill -l
輸出:
[root@localhost test6]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
說明:
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。 下面是常用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
實例2:得到指定信號的數值
命令:
輸出:
[root@localhost test6]# kill -l KILL
9[root@localhost test6]# kill -l SIGKILL
9[root@localhost test6]# kill -l TERM
15[root@localhost test6]# kill -l SIGTERM
15[root@localhost test6]#
說明:
實例3:先用ps查找進程,然後用kill殺掉
命令:
kill 3268
輸出:
[root@localhost test6]# ps -ef|grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@localhost test6]# kill 3268
[root@localhost test6]# kill 3268
-bash: kill: (3268) - 沒有那個進程
[root@localhost test6]#
說明:
實例4:徹底殺死進程
命令:
kill –9 3268
輸出:
[root@localhost test6]# ps -ef|grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@localhost test6]# kill –9 3268
[root@localhost test6]# kill 3268
-bash: kill: (3268) - 沒有那個進程
[root@localhost test6]#
說明:
實例5:殺死指定用戶所有進程
命令:
kill -9 $(ps -ef | grep peidalinux)
kill -u peidalinux
輸出:
[root@localhost ~]# kill -9 $(ps -ef | grep peidalinux)
[root@localhost ~]# kill -u peidalinux
說明:
方法一,過濾出hnlinux用戶進程並殺死
實例6:init進程是不可殺的
命令:
kill -9 1
輸出:
[root@localhost ~]# ps -ef|grep init
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17563 17534 0 17:37 pts/1 00:00:00 grep init
[root@localhost ~]# kill -9 1
[root@localhost ~]# kill -HUP 1
[root@localhost ~]# ps -ef|grep init
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17565 17534 0 17:38 pts/1 00:00:00 grep init
[root@localhost ~]# kill -KILL 1
[root@localhost ~]# ps -ef|grep init
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17567 17534 0 17:38 pts/1 00:00:00 grep init
[root@localhost ~]#
說明:
init是Linux系統操作中不可缺少的程序之一。所謂的init進程,它是一個由內核啟動的用戶級進程。內核自行啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,就通過啟動一個用戶級程序init的方式,完成引導進程。所以,init始終是第一個進程(其進程編號始終為1)。 其它所有進程都是init進程的子孫。init進程是不可殺的!
,
Ⅵ linux怎樣載入文件過濾驅動
文件系統過濾驅動是一種可選的,為文件系統提供具有附加值功能的驅動程序。文件系統過濾驅動是一種核心模式組件,它作為Windows NT執行體的一部分運行。
文件系統過濾驅動可以過濾一個或多個文件系統或文件系統卷的I/O操作。按不同的種類劃分,文件系統過濾驅動可以分成日誌記錄、系統監測、數據修改或事件預防幾類。通常,以文件系統過濾驅動為核心的應用程序有防毒軟體、加密程序、分級存儲管理系統等。
二、文件系統過濾驅動並不是設備驅動
設備驅動是用來控制特定硬體I/O設備的軟體組件。例如:DVD存儲設備驅動是一個DVD驅動。
相反,文件系統過濾驅動與一個或多個文件系統協同工作來處理文件I/O操作。這些操作包括:創建、打開、關閉、枚舉文件和目錄;獲取和設置文件、目錄、卷的相關信息;向文件中讀取或寫入數據。另外,文件系統過濾驅動必須支持文件系統特定的功能,例如緩存、鎖定、稀疏文件、磁碟配額、壓縮、安全、可恢復性、還原點和卷裝載等。
下面兩部分詳細的闡述了文件系統過濾驅動和設備驅動之間的相似點與不同點。
三、安裝文件系統過濾驅動
對於Windows XP和後續操作系統來說,可以通過INI文件或安裝應用程序來安裝文件系統過濾驅動(對於Windows 2000和更早的操作系統,過濾驅動通常通過服務控制管理器Service Control Manager來進行安裝)。
四、初始化文件系統過濾驅動
與設備驅動類似,文件系統過濾驅動也使用DriverEntry常式進行初始化工作。在驅動程序載入後,載入驅動相同的組件將通過調用驅動程序的 DriverEntry常式來對驅動程序進行初始化工作。對於文件系統過濾驅動來說,載入和初始化過濾驅動的系統組件為I/O管理器。
DriverEntry常式運行於系統線程上下文中,其IRQL = PASSIVE_LEVEL。本常式可分頁,詳細信息參見MmLockPagableCodeSection。
DriverEntry常式定義如下:
NTSTATUS
DriverEntry (
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
本常式有兩個輸入參數。第一個參數,DriverObject為系統在文件系統過濾驅動載入時所創建的驅動對象;第二個參數,RegistryPath為包含驅動程序注冊鍵路徑的Unicode字元串。
文件系統過濾驅動按如下順序執行DriverEntry常式:
01、創建控制設備對象:
文件系統過濾驅動的DriverEntry常式通常以創建控制設備對象作為該常式的起始。創建控制設備對象的目的在於允許應用程序即使在過濾驅動載入到文件系統或卷設備對象之前也能夠直接與過濾驅動進行通信。
注意:文件系統也會創建控制設備對象。當文件系統過濾驅動將其自身附加到文件系統之上時(而不是附加到某一特定文件系統卷),過濾驅動同樣將其自身附加到文件系統的控制設備對象之上。
在FileSpy驅動範例中,控制設備對象按如下方式創建:
RtlInitUnicodeString(&nameString, FILESPY_FULLDEVICE_NAME);
status = IoCreateDevice(
DriverObject, //DriverObject
0, //DeviceExtensionSize
&nameString, //DeviceName
FILE_DEVICE_DISK_FILE_SYSTEM, //DeviceType
FILE_DEVICE_SECURE_OPEN, //DeviceCharacteristics
FALSE, //Exclusive
&gControlDeviceObject); //DeviceObject
RtlInitUnicodeString(&linkString, FILESPY_DOSDEVICE_NAME);
status = IoCreateSymbolicLink(&linkString, &nameString);
與文件系統不同,文件系統過濾驅動並不是一定要為其控制設備對象命名。如果傳遞給DeviceName參數一個非空(Non-NULL)值,該值將作為控制設備對象的名稱。接下來,在前面的代碼範例中DriverEntry可以調用IoCreateSymbolicLink常式來將該對象的核心模式名稱與應用程序可見的用戶模式名稱關聯到一起(同樣可以通過調用IoRegisterDeviceInterface來使設備對象對應用程序可見)。
注意:由於控制設備對象是唯一不會附加到設備堆棧中的設備對象,因此控制設備對象是唯一的可安全命名的設備對象。由此,是否為文件系統過濾驅動的控制設備對象是否命名是可選的。
注意:文件系統的控制設備對象必須命名。過濾設備對象從不命名。
Ⅶ 有沒有可能在linux內核和網卡驅動中做修改簡單的實現網卡的混雜模式下抓包,並且把包給存入一個文件中
設置混雜模抄式什麼的,這些我只曉得可以做sniffer。不過具體我沒做過,所以過程我不太清楚,這個部分我沒法說。
你說創建文件的話,直接從內核創建以及讀寫文件大概會比較麻煩吧。可以使用一個用戶態程序,然後你的內核模塊中可以注冊一個可讀寫的char設備,用戶程序讀寫這個內核模塊的/dev/下面對應的char設備。可以讀這個設備文件獲得內核的數據,寫這個文件進行一些設置,比如網卡模式,抓包過濾選項等等。
當然,你也可以去找找源碼裡面文件系統那部分,open、read、write調用等是如何根據用戶的操作來創建並且實際讀寫文件的,你可以直接引用這些函數來搞定文件讀寫。這樣的話,因為沒有用戶程序的參與,從抓數據到寫文件都是內核搞定的化,不好跟你的內核模塊交互,沒法控制了...這樣做的好處是可以直接修改哪些最終提交數據的函數,提交之前拷貝一份數據就OK了。
要是想找點靠譜的答案,還是盡量去些論壇問吧...
我也在看內核,ldd3還好多沒看...
Ⅷ arm的trustzone是怎樣保證硬體安全的
Trustzone可以追溯到十多年前,ARMv7公布的時候就有了,可惜一直沒有什麼實際應用。直到近幾年開始,才真正的有廠商開始把這個方案大規模用於晶元里。目前看到的主要有四個應用領域:
第一是無人機晶元,大疆已經走在了最前面,第二名連影子都沒看見。無人機上幾大應用,圖像傳輸,圖像處理,識別,飛控,存儲,每一塊都有安全的訴求。利用Trustzone可以做到,在晶元里流動的數據,每一步都在安全系統的控制之下,哪怕飛機被人搶去,都需要極大的代價才能拿到快閃記憶體以及內存裡面的數據。如果以後上安卓或者其他操作系統,哪怕軟體系統被黑客攻破,數據和控制還是安全的。最後,如果國家或者行業出台政策,要求實施禁飛區,那麼哪怕無人機的主人自己去修改快閃記憶體和軟體,都可以被強制接管。這些功能必須在晶元設計階段就考慮到,大疆在這方面的眼光確實比別人長遠。
第二是DRM,數字版權管理,也就是內容保護。如果國內用戶要在手機上看最新好萊塢大片,那麼播放設備必須經過一個認證,這個認證可以用trustzone來實現。國內已經在積極的推動這個事情,估計再過一段時間就可以實現了。當然,這是一把雙刃劍,肯定也有用戶反而不願買支持DRM的設備,而去看盜版。用了Trustzone本身並不限制盜版,只不過多了一個看好萊塢大片的渠道。
第三是支付。把Trustzone用於支付支付在技術上沒有困難,對晶元性能要求也不高,難的是把各個利益方擺平。銀行和運營商想把支付控制權握在自己手裡,所以會去大力推廣NFC,會去和蘋果合作。而手機支付軟體廠商,比如支付寶和微信,想通過和手機晶元和硬體廠商,把所有功能都自己的平台上實現。目前的支付大多數還是基於軟體和遠端密鑰驗證。如果有人把手機破解,那還是可以讀取到支付圖層的密碼的。而trustzone做的,就是硬體上杜絕這類情況。
第四是物聯網。物聯網的安全有好幾種做法,可以把安全檢測放在伺服器端或者末端晶元上。末端通常是一個MCU加上感測器和互聯模塊,面積較小。用硬體trustzone實現的話,加解密和密鑰管理等功能會需要額外內模塊,可能比MCU本身都大,成本太高。但如果是附加值高的晶元就沒什麼問題。
讓我們從技術層面來定義Trustzone到底能做什麼:
1、防止操作系統被攻破後關鍵數據泄密,關鍵數據存放在特定內存區域,而那塊區域,只有安全操作系統才有可能讀到。
2、防止通過JTAG等調試介面讀到寄存器,緩存,內存或者快閃記憶體數據。
3、從晶元製造開始,最初的密鑰可以用晶元熔絲實現,往後啟動的每一步都需要最高特權級和密鑰驗證,建立信任鏈,杜絕軟體被替換或者被惡意讀取。
4、防止邊帶攻擊,比如量取內存顆粒的信號猜測數據,製造故障讓檢驗模塊停止工作,替換外圍器件,輸入特定數據確定電磁信號特徵,打開晶元直接量內部信號線等。
上一個典型的ARM SoC內部結構,在這個結構里,Trustzone做的事情是保護數據在晶元內部的安全,不允許非授權的訪問,哪怕這個訪問來自CPU。初看有些復雜,不過我們可以拆開慢慢分析。從硬體角度開始比軟體更清楚些,說不定哪天過認證的時候需要答辯,從頭到尾解釋系統安全設計。
首先,按照Trustzone的劃分,一個晶元內被劃分為安全世界和非安全世界。上圖中,中間黑色的部分是匯流排,匯流排上面是主設備,下面是從設備(主設備中的緩存是例外,這個以後說)。讀寫請求總是從主設備發往從設備的。
作為從設備,區分它是不是屬於安全世界相對簡單。如果一個從設備不存在成塊的空間映射,比如I2C或者PWM,那麼我只要在匯流排訪問它的時候,額外的加入一個管腳(取名為PROT),就可以告訴它本次訪問是不是來自安全世界。如果從設備本身是完全屬於被保護的安全世界,不接受非安全的訪問,那麼只要簡單的拒絕,返回錯誤或者無意義數據即可。同樣,如果從設備本身處於非安全世界,那麼對於安全和非安全訪問,都可以返回正確數據。還有,從設備所處於的世界,是可以動態配置的,且動態配置本身需要處在安全世界,這個以後討論。
對於塊設備,包括快閃記憶體,sram和內存等,它們的某些地址塊需要處於安全世界,其他的處於非安全世界。為了實現這一點,就需要在它們前面插入一個檢驗模塊(例如圖中左方,DDR上面的TZC400),來判斷某個地址是不是能被訪問。當地址被送到這個檢驗模塊,模塊會結合PROT管腳去查表,看看本次訪問是不是被允許,然後做相應措施。表本身和之前的動態配置一樣,必須是在安全世界裡面配置的。
至此,從設備就分析完了,是不是感覺特別簡單?還有些細節,在把主設備也講完後,我們會從系統角度來關注。
對於一般主設備,不考慮自帶的緩存時,其實和從設備也差不多,也分為安全和非安全,可以在安全世界動態配置。配置完成後,這些主設備會按照自己所處的世界,驅動PROT管腳和地址來訪問從設備,得到相應返回。不過這里的一般主設備不包括中斷控制器,系統MMU,調試模塊和處理器,接下來對這些例外模塊進行具體分析。
首先是處理器。
在上圖情況,接了CCI匯流排後,處理器接在緩存一致性埠ACE上(不明白的請參考以前的文章),它的緩存是可以被別人訪問的,並且這個訪問,是從主設備到主設備(當然,在處理器內部是從埠),不會經過匯流排送到內存,也不會經過檢驗模塊TZC400。這時就有個漏洞,通過操縱一個非安全世界的模塊,比如上圖的橙色主設備,假裝去讀一個被安全世界保護的內存地址。這個地址本來存在於內存,被TZC400保護,可是由於匯流排的監聽功能,讀請求有可能被發往處理器緩存,從而繞過保護。
為了防止這種情況,處理器在所有的頁表和緩存都做了特殊設計,加了一個標志位,標志本緩存行是否屬於安全世界。如果別的非安全世界主設備來監聽安全世界緩存行,由於安全位不同,處理器會認為這是兩個不同地址,哪怕它們的地址一致,返回緩存未命中。這樣,就不會把數據泄漏。
有人會問,這個標志位來源於頁表,改了頁表中的這一位不就可以訪問了?其實不行。因為安全世界頁表位於被保護的內存區域或者緩存,就算破解了操作系統也無法訪問。
又有人會說,那改了非安全世界的頁表中安全位,並偽造一個安全世界的地址,豈不是可以讓CPU模擬出一個訪問安全世界的傳輸,送到匯流排和TZC400?TZC400或者對端緩存一看地址和PROT管腳都是符合要求的,應該就會返回保密數據吧?想法是不錯,可是當CPU位於非安全世界時,它會忽略頁表中的安全位,所以不可能發出PROT為安全的傳輸。所以,我們可以對這點放心。
以上是別的主設備訪問處理器,那如果處理器本身處於非安全世界,有沒有可能訪問其他主設備的安全緩存?當然有。所以不要把其他主設備接到ACE埠,以免被監聽,一般主設備是不會做緩存上的安全與非安全區分的。接到ACE-Lite介面無所謂,反正設計上就無法被讀取緩存數據。
除此之外,還存在一個例外,就是GPU。在最新的ARM G71圖形處理器上,是支持雙向硬體一致性的。也就是說,GPU也可以被監聽緩存的。為了簡化設計,圖形處理器被設成永遠處於非安全世界,CPU盡管讀,不在乎,它使用另外一種機制來保護數據,以後介紹。
對處理器緩存熟悉的人可能會想到用跨緩存行的非安全變數來訪問被保護的數據。沒用的,處理器設計者早就想到這點,要不就是非對齊訪問異常(包含exclusive access的時候),要不就不會給你數據,具體到每個處理器有所不同。
還有一個漏洞沒堵上,那就是緩存維護,TLB和分支預測操作。ACE埠包含了DVM操作來維護它們,安全性如何保障?同樣的,地址中也有安全和非安全位。不過話說回來,DVM操作無非就是無效化某些緩存,分支預測和TLB項,不存在安全數據被讀取,TLB被篡改的情況。
到這里可能你會覺得有點暈,不少漏洞需要堵。我們可以回顧一下,需要記住的是各種緩存操作,通過安全標志位保護,避免漏洞。對比處理器設計者所要考慮的情況,這點漏洞不值一提。
杜絕了緩存漏洞後,還有別的隱患,比如模擬器。調試模塊可以被用來訪問各個從設備,也可以訪問和影響處理器內部資源。從設備側的防護很容易,把調試模塊當成一般的主設備處理就行。處理器內部的寄存器,緩存等資源,需要處理器從設計開始,就要為所有資源定義安全級別。被保護的資源對於來自調試模塊的未授權訪問會被禁止。只有通過安全啟動鏈,安全世界的軟體才能打開寄存器SDER,從而允許外部模擬器影響被保護的安全世界資源和處理器運行狀態,訪問被保護的資源。
那處理器內部的資源是怎麼劃分的?以ARMv8舉例,如下圖:
這幅圖相信很多人都看到過。ARMv8的處理器被分成四個特權等級,通常EL0跑用戶態程序,EL1內核,EL2虛擬機。EL0-1分為安全與非安全,EL3隻有安全世界,EL2不區分,兩個世界的切換必須經過EL3。我們談到的處理器內部資源,包括寄存器,緩存,異常,MMU,很多都會分組,組之間看不到或者低級不可訪問高級,從而保證安全。沒有分組的,比如通用寄存器,就需要軟體來維護,防止非安全世界的看到安全世界的數據。
引起安全切換的會有幾種可能:中斷和SMC指令。中斷分為如下幾種情況:
非安全世界下,在EL1或者EL0,當一個非安全中斷來臨,那麼系統沒必要切換安全狀態,作為一般中斷處理,切到EL1即可。
非安全世界下,在EL1或者EL0,當一個安全中斷來臨,那麼系統必須先切到EL3,不然就沒法做安全世界切換。
安全世界下,在EL1或者EL0,當一個安全中斷來臨,沒必要做安全世界切換,作為一般中斷處理,切到EL1即可。
安全世界下,在EL1或者EL0,當一個非安全中斷來臨,那麼系統必須先切到EL3,不然就沒法做安全世界切換。
當跳到EL3的Secure Monitor程序處理上下文切換時,IRQ/FIQ中斷屏蔽位不起作用,哪怕打開了也不會觸發,直到Secure Monitor處理完,向下跳到相應的安全世界EL1時,才會讓原來的中斷屏蔽恢復,從而觸發中斷。此時處理中斷的是安全世界的中斷程序,處於被保護的內存區域,杜絕非安全世界的程序篡改。
那怎樣觸發安全與非安全中斷呢?這在中斷控制器里有定義,早年的定義中只有FIQ可以作為安全中斷,後期的可配置,並且,相應的安全世界配置寄存器只有在處理器的安全世界中才可以訪問。
SMC指令和中斷觸發類似,只不過軟體就可以觸發,切換到Secure Monitor。這里,非安全軟體可以提出觸發請求,在通用寄存器填入參數,卻無法控制安全世界的處理程序做什麼,也依然看不到被保護內存數據。所以防止數據泄密的任務就靠安全操作系統了。
至此,安全啟動後的基本硬體防護已經完成,但如果你以為這就是Trustzone,那就錯了,精彩的在後面。
我們可以把Trustzone放到實際應用裡面看看是不是可行。以DRM舉例,如下圖:
在播放授權 視頻的時候,視頻流來自網路或者快閃記憶體,它們不需要在安全世界,因為數據本身就是加密過的。然後被解密並放到被保護內存,等待解碼。上圖中,密碼保護和解密是通過安全硬體模塊Crypto來完成的,這個我們以後再分析,先處理解密完成後的視頻流。此時有兩種方案:
第一中,非常自然的,可以把所有的過程在安全世界完成,那麼圖形處理器,視頻處理器和顯示模塊必須都工作在安全世界,能訪問安全世界的數據,才能完成工作。可這樣就帶來一個問題,那就是驅動。我們知道,圖形處理器的驅動是非常復雜的,並且手機上只存在Linux和windows下的圖形驅動,和OpenGL ES/DirectX配合。
而安全世界的操作系統(TEE,Trusted Execution Environment)是完全不兼容的安全系統,甚至有的都不支持SMP, 完全不存在可能性把圖形驅動移植上去,也沒有任何意義。這樣的話,就只能把圖形處理器從流程中挖掉,只留下相對簡單也不需要生態的視頻和顯示模塊的驅動,工作在安全世界,而GPU的輸出送到顯示模塊,由顯示模塊進行混合。
這是一種可行的方案,也確實有公司這么做。但是從長遠看,圖形處理器總是會參與到這個過程的,別的不說,只說VR和AR流行以後,要是虛擬個顯示屏出來,上面播放視頻,然後放在一個虛擬出的房間,那他們之間肯定是要進行互動的,此時顯示模塊就需要把視頻圖層送回GPU進行運算。如果GPU不在安全世界,那就會造成泄密。
為了解決上述問題,有了第二種解決方案,稱作TZMP1(Trustzone Media Protection 1),引入了保護世界的概念。
保護世界工作於非安全世界,這樣才能兼容圖形驅動。那安全怎麼辦?它需要添加四根管腳NSAID,類似於安全世界的PROT信號,只不過做了更細的劃分,使得GPU/視頻/顯示模塊要訪問被保護內存時,預先定義好了許可權。而這個許可權的設置,也是通過前文的TZC400來實現的,在安全啟動鏈中就完成。CPU的許可權通常是0,也就是最低。而顯示控制器許可權是只讀。
這樣一來,我們之前的老問題,惡意緩存監聽,又回來了。在新的A73和G71加CCI500/550匯流排系統里,可以支持雙向硬體一致性。這意味著GPU也能被監聽。這下大家都在非安全世界,緩存里的安全位不起作用,怎麼解決?這需要匯流排的配合。
ARM的匯流排CCI500/550,有一個保護模式,打開後,不光支持上文的NSAID管腳,還可以在監聽的時候,把監聽傳輸替換成緩存行無效化命令,直接讓目標把相應緩存行無效化。這樣一來,數據還是需要從內存讀取,保證安全。並且這個過程對軟體透明,無需做任何改動。
可是此時,辛辛苦苦設計的硬體一致性就完全起不到加速作用了,性能受到影響。好在運行OpenGL ES的時候,GPU是不會發出共享傳輸的,CPU也不會沒事去監聽GPU的數據。而下一代的圖形介面Vulkan,會開始使用GPU雙向一致性,那時候會有影響。還有一點不利的是,如果同時運行OpenCL和DRM,OpenCL也用不上雙向硬體一致性,必須重啟系統切換到非保護模式才行。
還有,在實際使用中,現有的TZC400作為內存保護模塊,有幾個致命的缺陷。
第一,它的配置只能在啟動時完成,無法動態改變,也就是說,一旦某塊內存給了安全世界,就無法再被非安全世界的操作系統使用,哪怕它是空閑的。在4K視頻播放時,需要分配幾百兆內存,還不止一塊。
如果一直被占著,這對於4GB內存手機來說是個沉重的負擔。怎麼解決?只能改成動態配置。此時,如果內存不夠了,非安全操作系統提請求給安全系統,讓它把暫時不用的物理內存設到非保護內存區,並定個時間收回。不過這樣一來內存分配機制就復雜了,說不定還得改內核,很危險。
如果忽視這點,繼續往下走,還會遇到第二個問題。TZC400和它的改進版最多隻能支持最小顆粒度為2MB的內存塊管理。為什麼不弄細些呢?很簡單,如果設成4KB,和系統頁大小一致,那麼4GB的物理內存就需要一百萬條目來管理。如果做成片上內存,比二級緩存還大,不現實。
而做內存映射,就和MMU一樣了,經過CPU的MMU後,數據訪問還要再穿越一次MMU,延遲顯然大。此外,這一層的MMU無法利用一二級緩存放頁表,效率極低。如果繼續保持2MB的顆粒,那麼在分配內存的時候,很快就會因為塊太大而用完。就算使用了上一節的方法,問題也沒法很好解決。這就是TZMP2V1。
在這種情況下,第三種基於虛擬機的方案就出現了。不過這個方案基本上推翻了Trustzone最初的設計意圖,我們來看下圖:
在這里,作為內存保護的TZC400完全移除,而系統MMU加了進來。內存保護怎麼做?靠物理地址重映射。先看處理器。在啟動鏈中,從EL3向EL2跳的過程時,就定義好保護內存,並且EL2,也就是虛擬機的頁表存放於保護內存,EL1的安全頁也同樣放在保護內存。
這樣,當處理器進入到EL1,哪怕通過篡改EL1非安全頁表的安全位,也最終會被映射到它所不能訪問的安全內存,從而起到保護作用。同樣的,給處於非安全世界的控制器也加上系統MMU,讓設備虛擬化,同樣可以控制安全。這就是TZMP2V2。有了系統MMU,頁表可以做成4KB大小了,也不用擔心CPU那裡穿越兩次MMU。這時候,也不用擔心惡意監聽緩存,因為所有穿過二級MMU的訪問里,安全位都是經過檢驗的的。
但是,不看別的,光是為設備加入這些系統MMU,就會增加很多面積。還有,光加MMU不夠,還要加入系統的三級甚至四級緩存,才能讓MMU效率更高,不然延遲太大。當然,如果設備使用的頁表並不很多,可以對MMU簡化,比如增大最小顆粒度,減少映射范圍,直接使用片內內存。這需要系統設計者來做均衡。對於GPU來說,要支持雙向一致性,還得考慮讓監聽傳輸通過MMU,不然功能就出問題了。
如果使用了TZMP2V2,那麼虛擬化就變成了一個切實需求。然後會發現,ARM的中斷和設備的虛擬化還很不完善。接下來我從硬體角度解釋下虛擬化。
說到虛擬化,先要解釋系統MMU。
如上圖所示,系統MMU其實很簡單,就是個二層地址轉換。第一層,虛地址到實地址,第二層,實地址到物理地址。請注意,沒有第二層轉換時,實地址等同於物理地址。這個模塊既可以兩層都打開,也可以只開一層,看情況而定。
上圖比較清楚的顯示了一層映射的過程。其中,設備發出的虛地址請求,會先經過TLB,它裡面存了以前訪問過的頁表項,如果有,就直接返回,沒有就往下走到第二步table walk。
第二步里,MMU會按照預設的多級基址寄存器,一級級訪問到最終頁表。如果MMU位於CPU內,那table walk過程中每次訪問的基址和表項,都可以存放於緩存中,大大提高效率。如果在設備上,只有內建的TLB表項,後面沒有緩存,那未命中TLB的都是訪問DDR,效率自然下降。
所以CPU和GPU等經常訪存的設備,都是自帶第一層MMU和緩存。而對於沒有內部MMU,切換頁表又不是很頻繁的設備,比如DMA控制器,可以在下面掛第一層MMU,此時驅動就簡單了,直接把應用程序看到的虛地址給DMA的寄存器就行,MMU會自己按照基地址去查找相應頁表並翻譯,把實地址送到匯流排。不然,驅動還要自己查找實地址再寫入寄存器。
我們前面說過,在TZMP1和TZMP2v1中,內存保護是靠TZC400來完成的。而到了TZMP2v2,取消了TZC400,這時靠虛擬化的二層地址映射。
二層映射的過程和一層映射基本一樣,不再詳述,但是性能問題會被放大。假設在一層中,經過四級基址查到最終頁,而在二層中,這每一級的基址查找,又會引入新的四級基址訪問。所以至少要經過4x4+4=20次訪存,才能確定物理地址。如果沒有緩存的幫助,效率會非常低。
其他可行的辦法是減少基址級數,比如linux只用了三級頁表,但即使如此,也需要3x3+3=12次查找。在包含緩存的ARM CPU上,虛擬機的效率可以做到80%以上。而二層MMU應用於設備實現設備虛擬化的時候,就需要小心設計了。
有了系統MMU,我們就有了全晶元虛擬化的基礎。那在對系統性能和成本做完平衡,採取合適的系統MMU設計之後,是不是就可以實現虛擬化,並且靠虛擬化實現安全了?沒那麼容易,還有其它問題需要考慮。
虛擬化脫胎於模擬器,就是在一個平台上模擬出另一個平台。在指令集相同的時候,沒有必要翻譯每一條指令,可以讓指令直接被硬體執行,這樣指令的效率算是得到了解決。當然,對於某些特殊指令和寄存器訪問,還是需要hypervisor處理的。接著第二個問題,訪存。
我們前面解釋過,對CPU來說,高效的虛擬化訪存,就是讓指令高效的經過兩層翻譯,而不是每次訪存都需要觸發虛擬機EL2的異常,切到Hypervisor,再得到最終物理地址。這一點在沒有缺頁異常的時候,ARM的虛擬化也已經做到了,而有缺頁異常時還是需要Hypervisor處理。再接著是設備訪存虛擬化,有了系統MMU,也可以高效做到。再就是處理器和設備中斷虛擬化。
最後,設備的虛擬化需要管理,那設備本身需要支持虛擬設備號和虛擬中斷號。更多內容請期待。
Ⅸ 高手進階:Linux操作系統驅動編譯與運行
一、手工載入測試
1、insmod
./key_test.ko
載入驅動模塊到內核
2、cat
/proc/moles
|grep
key_test
查看key_test模塊在內核中的地址,不加過濾器可以看到全部載入的模塊。
3、lsmod
顯示模塊,這時可以看到所有的模塊名字,後面跟的是主設備號和次設備號。
4、rmmod
key_test
把模塊從內核里卸載。
二、動態載入
1、把key_test.c源代碼放到內核源代碼的/drives/char/下,因為這是屬字元型驅動,放在這編譯到zImage中。
2、這時我們make
menuconfig
編譯內核是看不到key_test這個選項的。我們把這個選項寫到菜單裡面才行。在內核源代碼的/drives/char/下有一個Kconfig文件,打開
(1)
vi
Kconfig
加幾行到裡面:
config
ConFig_key_test
bool
"key
test"
//前面那個bool換成tristate就是支持模塊化編譯
上面句是在make
menuconfig時會出現key
test這個選項在drive/char子菜單下,bool前面是TAB鍵
------help----------
這句是出現在菜單選項下面的
This
key
test
help.
這句是你的驅動的說明會出現在help裡面
(2)在/drivers/char目錄下的Makefile文件里加上一句:
obj-$(CONFIG_key_test)
+=
key_test.o
上面這句是讓Make時把key_test編譯到內核中.
(3)
make
menuconfig
把key_test選項選取上
(4)
make
zImage
生成zImage文件,重啟動載入這個新編的內核。
3、lsmod就能看到key_test了,但是還不能用,沒有介面,也就是/dev下面沒有
4、mknod
/dev/key_test
c
121
0
這是創建設備到/dev下,使普通程序可以調用了,121是在源代碼里定義的它的主設備號,0是次設備號。
5、cat
/dev/key_test
這是相當於open這個設備了,或者寫一個程序直接調用open、write等函數。
fd=("/dev/key_test",ORW);
Ⅹ 如何開啟瀏覽器的WebGL功能
開啟瀏覽器的WebGL功能首先需要瀏覽器支持該功能,以chrome瀏覽器為例:
1、右擊chrome瀏覽器的快捷方式,點擊屬性;
2、點擊快捷方式選項卡,目標框原有內容後輸入--enable-webgl --ignore-gpu-blacklist --allow-file-access-from-files,然後點擊確定;
3、參數功能介紹:
--enable-webgl表示開啟WebGL支持;
-gpu表示忽略GPU黑名單,也就是說有一些顯卡GPU因為過於陳舊等原因,不建議運行WebGL,這個參數可以讓瀏覽器忽略這個黑名單,強制運行WebGL;
--ignore-gpu-blacklist表示允許從本地載入資源,如果你不是WebGL的開發者,不需要開發調試WebGL;
只是想要看一下WebGL的Demo,那你可以不添加這個參數:
--allow-file-access-from-files。