A. DOS是什麼
Disk Operating SystemDOS是英文Disk Operating System的縮寫,意思是「磁碟操作系統」,顧名思義,DOS主要是一種面向磁碟的系統軟體,說得簡單些,DOS就是人與機器的一座橋梁,是罩在機器硬體外面的一層「外殼」,有了DOS,我們就不必去深入了解機器的硬體結構,也不必去死記硬背那些枯燥的機器命令。我們只需通過一些接近於自然語言的DOS命令,就可以輕松地完成絕大多數的日常操作。另外,DOS還能有效地管理各種軟硬體資源,對它們進行合理的調度,所有的軟體和硬體都在DOS的監控和管理之下,有條不紊地進行著自己的工作。 [編輯本段]前言本文章分"概念"和"如何"兩部分。
在"概念"中將告訴您關於該詞條的定義、背景及原理。
在"如何"中將告訴您關於該詞條的應用、技巧及可能遇上的問題。
通常所說的DOS有兩種不同的概念,即拒絕服務或一種磁碟操作系統,通常DoS(O小寫)指的是拒絕服務,DOS(O大寫)指的是一種磁碟操作系統。
隨著計算機技術的發展,網路也在迅猛地普及和發展。人們在享受著網路帶來的各種便利的同時,也受到了很多黑客的攻擊。在眾多的攻擊種類中,有一種叫做 DoS(Denial of Service 拒絕服務)的攻擊,是一種常見而有效的網路攻擊技術,它通過利用協議或系統的缺陷,採取欺騙或偽裝的策略來進行網路攻擊,最終使得受害者的系統因為資源耗盡或無法作出正確響應而癱瘓,從而無法向合法用戶提供正常服務。它看上去平淡無奇,但是攻擊范圍廣,隱蔽性強、簡單有效而成為了網路中一種強大的攻擊技術,極大地影響了網路和業務主機系統的有效服務。其中,DDoS(Distributed Denial of Service 分布式拒絕服務)更以其大規模性、隱蔽性和難防範性而著稱。 [編輯本段]DoS攻擊是網路攻擊最常見的一種。它故意攻擊網路協議的缺陷或直接通過某種手段耗盡被攻擊對象的資源,目的是讓目標計算機或網路無法提供正常的服務或資源訪問,使目標系統服務停止響應甚至崩潰,而在此攻擊中並不入侵目標伺服器或目標網路設備。這些服務資源包括網路寬頻、系統堆棧、開放的進程。或者允許的連接。這種攻擊會導致資源耗盡,無論計算機的處理速度多快、內存容量多大、網路帶寬的速度多快都無法避免這種攻擊帶來的後果。任何資源都有一個極限,所以總能找到一個方法使請求的值大於該極限值,導致所提供的服務資源耗盡。
DoS攻擊有許多種類,主要有Land攻擊、死亡之ping、淚滴、Smurf攻擊及SYN洪水等。
據統計,在所有黑客攻擊事件中,syn洪水攻擊是最常見又最容易被利用的一種DoS攻擊手法。
1.攻擊原理
要理解SYN洪水攻擊,首先要理解TCP連接的三次握手過程(Three-wayhandshake)。在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。第一次握手:建立連接時,客戶端發送SYN包((SYN=i)到伺服器,並進入SYN SEND狀態,等待伺服器確認;
第二次握手:伺服器收到SYN包,必須確認客戶的SYN (ACK=i+1 ),同時自己也發送一個SYN包((SYN j)}即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN十ACK包,向伺服器發送確認包ACK(ACK=j+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手,客戶端與伺服器開始傳送數據。
在上述過程中,還有一些重要的概念:
半連接:收到SYN包而還未收到ACK包時的連接狀態稱為半連接,即尚未完全完成三次握手的TCP連接。
半連接隊列:在三次握手協議中,伺服器維護一個半連接隊列,該隊列為每個客戶端的SYN包(SYN=i )開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於SYN_ RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。
Backlog參數:表示半連接隊列的最大容納數目。
SYN-ACK重傳次數:伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息、從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。
半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。
上面三個參數對系統的TCP連接狀況有很大影響。
SYN洪水攻擊屬於DoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火牆等網路系統,事實上SYN攻擊並不管目標是什麼系統,只要這些系統打開TCP服務就可以實施。從圖4-3可看到,伺服器接收到連接請求(SYN=i )將此信息加入未連接隊列,並發送請求包給客戶( SYN=j,ACK=i+1 ),此時進入SYN_RECV狀態。當伺服器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP地址,向伺服器不斷地發送SYN包,伺服器回復確認包,並等待客戶的確認,由於源地址是不存在的,伺服器需要不斷的重發直至超時,這些偽造的SYN包將長時間佔用未連接隊列,正常的SYN 請求
被丟棄,目標系統運行緩慢,嚴重者引起網路堵塞甚至系統癱瘓。過程如下:
攻擊主機C(地址偽裝後為C')-----大量SYN包---->被攻擊主機
C'<-------SYN/ACK包----被攻擊主機
由於C』地址不可達,被攻擊主機等待SYN包超時。攻擊主機通過發大量SYN包填滿未連接隊列,導致正常SYN包被拒絕服務。另外,SYN洪水攻擊還可以通過發大量ACK包進行DoS攻擊。
2.傳統演算法
抵禦SYN洪水攻擊較常用的方法為網關防火牆法、中繼防火牆法和SYNcookies。為便於敘述,將系統拓撲圖簡化為圖4-4。圖中,按網路在防火牆內側還是外側將其分為內網、外網(內網是受防火牆保護的)。其次,設置防火牆的SYN重傳計時器。超時值必須足夠小,避免backlog隊列被填滿;同時又要足夠大保證用戶的正常通訊。
(1) 網關防火牆法
網關防火牆抵禦攻擊的基本思想是:對於內網伺服器所發的SYN/ACK包,防火牆立即發送ACK包響應。當內網伺服器接到ACK包後,從backlog隊列中移出此半連接,連接轉為開連接,TCP連接建成。由於伺服器處理開連接的能力比處理半連接大得多,這種方法能有效減輕對內網伺服器的SYN攻擊,能有效地讓backlog隊列處於未滿狀態,同時在重傳一個未完成的連接之前可以等待更長時間。
以下為演算法完整描述:
第一步,防火牆截獲外網客戶端發向內網伺服器SYN數據包,允許其通過,抵達內網伺服器。同時在連接跟蹤表中記錄此事件.
第二步,防火牆截獲伺服器發向客戶端的SYN/ACK響應包,用連接跟蹤表中記錄的相應SYN包匹配它.
第三步,防火牆讓截獲的SYN/ACK繼續進行(發向客戶端)。同時,向內網伺服器發送ACK包。這樣,對伺服器來說,TCP連接三次握手已經完成。系統在backlog隊列中刪掉此半連接.
第四步,看此TCP連接是否有效,相應產生兩種解決方法。如果客戶端的連接嘗試是有效的,那麼防火牆將接到來自客戶端的ACK包,然後防火牆將它轉發到伺服器。伺服器會忽略這個冗餘的ACK包,這在TCP協議中是允許的.
如果客戶端的IP地址並不存在,那麼防火牆將收不到來自客戶端的ACK包,重轉計時器將超時。這時,防火牆重傳此連接.
(2) 中繼防火牆法
中繼防火牆抵禦攻擊的思想是:防火牆在向內網伺服器發SYN包之前,首先完成與外網的三次握手連接,從而消除SYN洪水攻擊的成立條件。
以下為演算法完整描述:
第一步,防火牆截獲外網客戶端發向內網伺服器SYN數據包.
第二步,防火牆並不直接向內網發SYN數據包,而是代替內網伺服器向外網發SYNIACK數據包.
第三步,只有接到外網的ACK包,防火牆向內網發SYN包.
第四步,伺服器應答SYN/ACK包.
第五步,防火牆應答ACK包.
(3) 分析
首先分析演算法的性能,可以看出:為了提高效率,上述演算法使用了狀態檢測等機制(可通過本系統的基本模塊層得以實現)
對於非SYN包(CSYN/ACK及ACK包),如果在連線跟蹤信息表未查找到相應項,則還要匹配規則庫,而匹配規則庫需比較諸多項(如IP地址、埠號等),花費較大,這會降低防火牆的流量。另外,在中繼防火牆演算法中,由於使用了SYN包代理,增加了防火牆的負荷,也會降低防火牆的流量。
其次,當攻擊主機發ACK包,而不是SYN包,演算法將出現安全漏洞。一般地,TCP連接從SYN包開始,一旦 SYN包匹配規則庫,此連接將被加到連接跟蹤表中,並且系統給其60s延時。之後,當接到ACK包時,此連接延時突然加大到3600s。如果,TCP連接從ACK包開始,同時此連接未在連接跟蹤表中注冊,ACK包會匹配規則庫。如匹配成功,此連接將被加到連接跟蹤表中,同時其延時被設置為3600s。即使系統無響應,此連接也不會終止。如果攻擊者發大量的ACK包,就會使半連接隊列填滿,導致無法建立其它TCP連接。此類攻擊來自於內網。因為,來自於外網的ACK包攻擊,伺服器會很快發RST包終止此連接(SOs>。而對於內網的外發包,其限制規則的嚴格性要小的多。一旦攻擊者在某時間段內從內網發大量ACK包,並且速度高於防火牆處理速度,很容易造成系統癱瘓。
(4) SYN cookies
Linux支持SYN cookies,它通過修改TCP協議的序列號生成方法來加強抵禦SYN洪水攻擊能力。在TCP協議中,當收到客戶端的SYN請求時,伺服器需要回復SYN-SACK包給客戶端,客戶端也要發送確認包給伺服器。通常,伺服器的初始序列號由伺服器按照一定的規律計算得到或採用隨機數,但在SYN cookies中,伺服器的初始序列號是通過對客戶端IP地址、客戶端埠、伺服器IP地址和伺服器埠以及其他一些安全數值等要素進行hash運算,加密得到的,稱之為cookie。當伺服器遭受SYN攻擊使得backlog隊列滿時,伺服器並不拒絕新的SYN請求,而是回復cookie(回復包的SYN序列號)給客戶端,如果收到客戶端的ACK包,伺服器將客戶端的ACK序列號減去1得到。cookie比較值,並將上述要素進行一次hash運算,看看是否等於此cookie。如果相等,直接完成三次握手(注意:此時並不用查看此連接是否屬於backlog隊列)。
此演算法的優點是:半連接隊列滿時,SYN cookies仍可以處理新SYN請求。缺點是:某些TCP選項必須禁用,如大窗口等。計算cookies有花銷。
/*一個IP包,其分片都被放入到一個鏈表中,作為每一個分片的鏈表節點用ipfrag結構表示。IP分片的中心組裝在此鏈表進行。*/
內核抵禦攻擊的代碼結構如下:
// From http://blog.csdn.net/ctu_85/archive/2008/01/03/2023205.aspx
/*IP分片結構體*/
struct ipfrag
{
int offset; //ip包中此分片的偏移值
int end; //此分片最後一個株距在ip包中的位置
int len; //此分片長度
struct sk_buff *skb; //分片數據包
unsigned ........
if(end<= offset)&&(i>s kb->len)
return NF_DRDP;
}
}
return NF_ACCEPT;
組成規則的三個結構體具體解釋如下:
(1)ipt......
unsigned int nfcache ; //用此位域表示數據報的哪些部分由這個規則檢查
.......
; //包含數據包及匹配此規則數據包的計算數值
以下僅列出ipt_entry_match結構體:
struce ipt_entry_match
{
union
{
struct{
u_int16_t target_size;
......
......
{
struct list_head list;//鏈表
struct
u int32 ipaddr; //地址
u_ int16 port; //埠
}src; //源端信息
struct
{
u_ int32 ipaddr;
u_ int 16 port;
} dst; //目的端信息
u_intl6 protonum; //協議號 [編輯本段]概念——磁碟操作系統</B>1.1什麼是DOS?
DOS(Disk Operation System)是一類操作系統的名稱,它主要包括Shell(command.com), IO介面(io.sys)兩個部分。
Shell是dos的外殼,負責將用戶輸入的命令翻譯成操作系統能夠理解的語言。
DOS的IO介面通常實現了一組基於int21h的中斷。
目前常用的DOS有包括:MS-DOS PC-DOS,FreeDOS,ROM-DOS等。
1.2MS-DOS簡介
Windows9x系統都是以MS-DOS為基礎的。
Windows9x以上系統都是以NT內核為基礎的
DOS在1981年問世以來,版本就不斷更新,從最初的DOS1.0升級到了最新的DOS8.0(Windows ME系統),純DOS 的最高版本為DOS7.10,這以後的新版本DOS都是由Windows系統所提供的,並不單獨存在。
DOS分為核心啟動程序和命令程序兩個部分。
DOS的核心啟動程序有Boot系統引導程序、IO.SYS、MSDOS.SYS和COMMAND.COM。它們是構成DOS系統最基礎的幾個部分,有了它們系統就可以啟動。
但光有啟動程序還不行,DOS作為一個字元型的操作系統,一般的操作都是通過命令來完成。DOS命令分為內部命令和外部命令。內部命令是一些常用而所佔空間不大的命令程序,如dir、cd等,它們存在於COMMAND.COM文件中,會在系統啟動時載入到內存中,以方便調用。而其它的一些外部命令則以單獨的可執行文件存在,在使用時才被調入內存。
DOS的優點是快捷。熟練的用戶可以通過創建BAT或CMD批處理文件完成一些煩瑣的任務,通過一些判斷命令(IF、|)甚至可以編一些小程序。因此,即使在XP下CMD還是高手的最愛。
[1]MS-DOS大事記
DOS1.0 微軟買下 86-DOS(QDOS)版權,1981年7月,成為 IBM PC上 第一個作業系統。同時微軟有為IBM PC開發專用版本 PC-DOS,但與泛用版本DOS相比,除了系統檔名以及部份針對 IBM 機器設計的核心,外部命令與公用程式之外,其餘程式碼其實差異不大。
DOS 1.25 1982年6月,支援雙面 軟盤並開始修改錯誤
不僅IBM,許多OEM也廣泛使用
DOS2.0 1983年3月,加入UNIX式的樹狀檔案系統與及硬碟支援,以低階的觀點視之,這是第一次的 DOS 重大改版。這個版本除了相容於 CP/M 的 FCB 檔案系統之外,正式採用了 FAT 格式,並大量使用具有 UNIX 特徵的 Handle 式檔案操作方式。
DOS 2.11 1984年3月,為主要的OEM版本,修正了2.01版的錯誤,增加了對非英語語言及其文件格式的國際性支援
MS-DOS 2.25 1985年10月,支援額外擴充的字元組(日文與韓文),還修正了舊版的錯誤
MS-DOS 3.0 1984年8月,引入PC/AT,它能支援1.2MB的軟盤,並加入較高容量的硬碟
MS-DOS 3.1 1984年11月,加入對微軟網路支援
MS-DOS 3.2 1986年1月,加入了3.5吋軟盤的強化支援,並開始可以透過驅動程式使用硬體 EMS。台灣的宏碁電腦在資策會與公會的支持下,與微軟在DOS3.2 的基礎上開發了符合 CMEX 標準的全中文
MS-DOS 3.3 1987年8月,修正部份內部錯誤、增加了許多關於檔案處理的外部命令、開始支援軟盤之後,DOS3.3 成為當時最穩定、暢銷的版本,可以說是DOS第二次的重大改版,一年後發行的4.0甚至還不如3.3普及。內部的 BASIC 直譯器在 3.x之後逐漸由 BASICA 改為增強繪圖能力的 GW-BASIC。此際倚天公司在前幾版本的 BASICA 基礎上開發了支援中文繪圖模式的 ETBASIC,幾乎成為當時台灣地區學習 BASIC 語言的標准配備。外部命令部分最重要的則是增加了 XCOPY 與 APPEND,增強了早就該有的檔案管理能力。
MS-DOS 4.0 電腦MS-DOS 4.0 1988年6月,主要基於IBM的代碼庫,而不是微軟自己的代碼庫。加入了最大2GB容量硬碟機支援,引入 EMM(軟體模擬 EMS)以及新規格 XMS 內存技術,令DOS操作系統可以使用1MB以上的內存。開始有 DOSSHELL 的使用。DOSSHELL 可以被視為 DOS的GUI 界面,並有切換程式作業的能力。
MS-DOS 4.01 1988年12月,對於舊版所存在的一系列錯誤進行修正
MS-DOS 5.0 1991年6月,第三次重大改版,可能也是DOS史上最重要的改版。這個版本繼承 4.0 對於內存管理的改進,是 EMM 規格最為穩定、普及的版本,也加入了許多內存管理的程式,如 EMM386、MEM 等等,為的就是與 Windows 好好搭配,連帶也使得DOS 內存管理成為當時許多軟體亟欲配合增強的方向,如何設定DOS內存配置成為熱門話題。BASIC 直譯器改為 QuickBASIC 的簡易版本 QBASIC,內建文字編輯器則由原來的行編輯 EDLIN 改為全屏幕編輯的 EDIT(其實只是對 QBASIC.EXE 多下一道參數而已)。減少外部命令對於版本的需求,而在千呼萬喚中,終於加入 DOSKEY、UNDELETE、Quick Format、UNFORMAT 等能力。另一個值得一提的是,這個版本的 CONFIG.SYS 允許有多重選項。
MS-DOS 6.0 1993年3月,加入了許多花俏的外部命令。系統檢測程式 MSD 被加入。DoubleSpace 壓縮磁碟技術開始被使用,亦開始附上微軟自家的解毒軟體 VSAFE 以及 MSAV。網路方面開始加入對 LL5 傳輸線的支援。對於磁碟,開始加入磁區整理軟體 DEFRAG以及磁碟快取程式 SMARTDRV。檔案管理方面,以豪華的 MSBACKUP 取代了陽春的 BACKUP,另外,終於加入了 DELTREE 與 MOVE 公用程式。開始正式支援光碟機。內存管理方面則加入了 MEMMAKER 組態最佳化程式。
MS-DOS 6.2 1993年11月,DoubleSpace 更名為 DrvSpace。
MS-DOS 6.21 1994年2月
MS-DOS 6.22 1994年6月,最後一個銷售版本。國喬(KC)取得微軟與IBM授權,搭配國喬中文系統發表自己的 DOS 7.0。
MS-DOS 7.0 1995年8月,Windows 95 所帶的版本,支持長文件名。
MS-DOS 7.1 1996年8月,加入對大硬碟和FAT32分區的支持等。
MS-DOS 8.0 2000年9月,DOS的最後一個版本,取消了部分功能,例如不再支持SYS命令、列印機操作。
[2]在DOS上面運行的軟體
由於 DOS 是 PC 兼容機的主要平台,有許多為 DOS 撰寫的知名軟體。其中包括了:
Lotus 1-2-3;一套在企業市場中被廣泛運用的試算表軟體。被許多人視為 IBM PC 成功的主因
WordPerfect;一套目前出在 Windows 平台的文本編輯器
dBase;最早的資料庫軟體之一
Telix; 數據機通信軟體
Arachne;一套 DOS 版的網路瀏覽器
DJGPP, gcc 的 DOS 移植版
4DOS,取代原本的命令行界面的軟體
Borland 的 集成開發環境,包括了 Turbo Pascal、Turbo BASIC、Turbo C,以及 Turbo Assembler
撥接式電子布告欄 (BBS) 架站軟體 RemoteAccess、Spitfire、Maximus、McBBS,以及TAG
BASIC 語言工具程序 BASICA 以及 GW-BASIC
許多的第一人稱射擊游戲:由 Id Software 以及 Apogee Software(後來改名為 3D Realms)合資開發的 德軍總部3D;Id Software 的 Doom 以及 Quake;3D Realms 的 Duke Nukem 3D、Shadow Warrior,以及 Rise of the Triad。3D Realms 開發的這 3 套游戲使用的都是 DOS 上的「Build 引擎」。Build 引擎的作者是 Ken Silverman,這個引擎也被用於 Silverman 的 Ken's Labyrinth 這個游戲上。