如今,網站不再僅僅是“互聯網存在”,也被用于商業(yè)交易和轉移敏感數據。如此廣泛的使用有助于破解漏洞和開發(fā)技術的知識。各種各樣的安全研究表明,攻擊網站以獲取名聲或金錢的趨勢正在上升。本文?,巗eo工程師介紹了各種Web漏洞和利用它們的攻擊。我們還將學習一些可以由系統(tǒng)管理員納入以保護公司的Web基礎設施的技術。
在討論Web服務器如何破解之前,我們先來看看構成完整Web門戶的各種組件。 首先,Web服務器是通常在端口80上偵聽的服務。客戶端軟件(通常是瀏覽器)連接到端口并發(fā)送HTTP查詢。 Web服務通過提供所請求的內容(如HTML,JavaScript等)進行響應。在某些情況下,可以將服務配置為在缺省的端口上運行,這是邁向安全的一小步。 Web服務器還可以托管諸如FTP或NNTP的服務,這些服務在自己的單獨的默認端口上運行。 下圖顯示了Web服務如何映射到OSI層。 HTTP協議在第7層工作,而HTTPS(安全套接字層)在第6層工作。
Web服務和OSI層
現代Web應用程序通常不僅僅是以簡單網頁的形式提供內容。 業(yè)務邏輯和數據倉儲組件(如數據庫服務器,應用程序服務器和中間件軟件)也用于生成并向網站用戶提供業(yè)務特定數據。 這些組件通常安裝并運行在一組單獨的服務器上,并且可能共享或不共享存儲空間。 高級Web應用程序代碼可以在內部調用托管在不同服務器上的Web服務,并將結果頁面?zhèn)鬟f給客戶端。 Web程序員還使用Cookie來維護會話,并在客戶端瀏覽器中存儲特定于會話的信息。
網頁劫持
破解一個網站是相當容易的。新手可能會試圖從網站竊取數據,而專業(yè)人士可能會因為破壞網站或使用網絡服務器傳播病毒而造成嚴重破壞。與大多數其他攻擊不同,Web攻擊所用的技術范圍從第2層到第7層,因此Web服務器很容易受到各種可能的黑客攻擊。由于防火墻端口必須為Web服務打開(默認情況下是端口80),因此它無法阻止第7層的攻擊,這使得對Web攻擊的檢測變得困難。請參考下圖,它顯示了用于形成Web門戶基礎設施的典型組件。
Web門戶基礎設施
從安全的角度來看,這些組件中的每一個都有一些弱點,如果被利用,就會導致Web內容的入侵。現在讓我們詳細討論一些常見但危險的攻擊。
DoS和嗅探
由于該網站的IP地址是開放給互聯網的,因此拒絕服務攻擊很容易使Web服務器停機。類似地,如果在Web設計過程中沒有進行加密或其他安全措施,那么可以很容易地使用包嗅探器來捕獲純文本用戶id和密碼。幾幾乎所有第2層和第3層攻擊(如數據包洪泛,SYN洪泛等)都可能在網站IP和其所在的端口上。
HTTP DoS攻擊
與基于網絡的拒絕服務攻擊不同,HTTP DoS攻擊在第7層工作。在這種類型的攻擊中,網站以編程的方式爬行獲取要訪問的頁面列表,在此期間攻擊者還記錄服務器處理每個頁面所需的時間。選擇需要更高處理時間的頁面,并將多個HTTP請求發(fā)送到Web服務器,每個請求請求其中一個所選頁面。
為了滿足每個請求,Web服務器開始消耗資源。 達到資源限制后,最終放棄并停止響應。眾所周知,攻擊者使用簡單的腳本創(chuàng)建大量的HTTP GET請求來實現此攻擊。如果網站只包含簡單的靜態(tài)HTML頁面,那么這種攻擊就不會很有效。但是,如果動態(tài)頁面從后端數據庫服務器中提取數據,那么這種攻擊就會造成相當大的損害。
雖然它可能或不會導致數據竊取,但它肯定會關閉網站,造成用戶體驗不良,并損害聲譽。必須部署智能技術來檢測和停止此類攻擊,我們將很快了解這些攻擊。
訪問控制開發(fā)
通常,在Web門戶的情況下,用戶會得到一個ID和一個密碼來登錄并執(zhí)行某些功能。門戶管理人員也為維護和數據管理提供了自己的憑證。如果Web服務和應用程序不是從編碼的角度設計的,那么就可以利用它們來獲得更高的特權。
例如,如果Web服務器未使用最新的安全修補程序進行修補,這可能導致遠程代碼執(zhí)行,攻擊者可能會編寫一個腳本來利用該漏洞,并訪問服務器并遠程控制它。 在某些情況下,可能會發(fā)生這種情況,因為沒有遵循最佳的編碼和安全實踐,在安全配置中留下空白,并使Web解決方案容易受到攻擊。
表單輸入無效
許多網站使用由網站用戶填寫的表單,并提交給服務器。 然后,服務器驗證輸入并將其保存到數據庫。 驗證過程有時委托給客戶端瀏覽器或數據庫服務器。 如果這些驗證不夠強大或沒有正確編程,他們可能會留下可以被攻擊者利用的安全漏洞。
例如,如果一個字段如PAN號碼是強制性的,并且如果重復條目的驗證不能正確完成,則攻擊者可以用偽PAN號碼以編程方式提交表單,從而以假條目填充數據庫。 這最終可以幫助攻擊者種植拒絕服務(DoS)攻擊,只需查詢頁面,詢問不存在的條目。
代碼挖掘
雖然這與之前的漏洞有點類似,但在破解它的方式上有一些不同。通常,程序員在為各種用戶輸入設置限制時,會做出假設。典型的例子是用戶名不應該超過50個字符,或者數字值永遠是正數,等等。
從安全的觀點來看,這些假設是危險的,因為駭客可以利用它們。例如,通過填充具有100個字符的名稱字段,從而對數據集施加壓力,或者通過在數值字段中提供負整數來創(chuàng)建不正確的計算結果。
上面提到的所有攻擊都是新手攻擊者使用的,遵循好的編程實踐可以幫助他們停止攻擊。現在我們來看看技術先進的攻擊,這在今天也很常見。
Cookie中毒
如前所述,cookie是駐留在瀏覽器中的小信息片段(在客戶端計算機的硬盤驅動器上),并用于存儲用戶會話特定的信息。它是一個cookie,它能記住我們的購物車內容、我們的偏好和以前的登錄信息,以便提供豐富的Web體驗。
雖然篡改cookie并不是很容易,但是專業(yè)攻擊者可以控制它并操縱其內容。 中毒是通過木馬或病毒實現的,該病毒位于后臺,并持續(xù)偽造cookies以收集用戶的個人信息并將其發(fā)送給攻擊者。
此外,病毒還可以改變cookie的內容,導致嚴重的問題,例如提交購物車內容,以便將購買的商品交付給黑客可訪問的虛擬地址,或讓瀏覽器連接到廣告 服務器,這有助于攻擊者獲得資金等。如果會話信息存儲在cookie中,專業(yè)攻擊者可以訪問它并竊取會話,從而導致中間人的攻擊。
會話劫持
Web服務器同時與多個瀏覽器進行對話,以接收請求并交付所請求的內容。當每個連接被建立時,Web服務器需要有一種方法來維護每個連接的唯一性。它使用會話令牌來生成動態(tài)生成的文本字符串,這些字符串包括IP地址、日期、時間等。
攻擊者可以通過在網絡上以編程方式或嗅探,或通過對受害者計算機執(zhí)行客戶端腳本攻擊來竊取該令牌。 一旦被盜,該令牌可用于創(chuàng)建假Web請求并竊取受害者用戶的會話和信息。
URL查詢字符串篡改
從數據庫服務器中提取數據并將其顯示在網頁上的網站經常被發(fā)現在主URL中使用查詢字符串。 例如,如果網站URL是// www.seo7.cc /,它可以使用// www.seo7.cc /showdata?field1=10&field2=15作為參數傳遞field1和field2,并將它們分別 值到數據庫,結果輸出以網頁的形式提供給瀏覽器。
使這個查詢字符串格式容易暴露,用戶可以編輯和更改超出預期限制的字段值,或者用垃圾字符填充字段值。 它可以進一步導致用戶獲得他們不應該獲得的信息。 在最壞的情況下,如果字段值是用戶名和密碼,則只能通過HTTP使用暴力字典攻擊來獲取系統(tǒng)級訪問權限。
跨站點腳本
這是Web技術中最常見的弱點,它可以吸引XSS(跨站點腳本)對所有主要站點和著名站點的攻擊。人們已經發(fā)現,即使在今天,大量的網站也很容易受到這種攻擊。這個漏洞是由于不適當的編程實踐和在Web基礎結構中無法獲得適當的安全措施造成的。
我們知道,客戶端瀏覽器維護自己的安全性,不允許任何人訪問網站內容和網站Cookie,用戶本身除外。 在這種情況下,Web應用程序中的漏洞讓破解者將客戶端代碼注入用戶訪問的頁面。 這段代碼通常使用JavaScript編寫。
要了解這一點,請考慮將用戶名作為輸入的頁面,并在屏幕上顯示“歡迎用戶名”。 讓我們假設輸入框用JavaScript替代,如下所示:
這里,Web頁面可能會最終執(zhí)行腳本標簽,顯示對話框消息“You are in trouble”。 這可以由攻擊者進一步利用,只需中斷cookie,竊取會話并將該代碼注入受害者用戶的瀏覽器。 一旦這樣做,JavaScript代碼將在受害者的瀏覽器中運行,并盡可能造成損害。
SQL注入
如前所述,Web門戶在后端使用數據庫服務器,Web頁面連接到數據庫,查詢數據,并將所獲取的數據以Web格式呈現給瀏覽器。如果客戶端上的輸入在以查詢形式發(fā)送到數據庫之前沒有經過適當的過濾,就可能發(fā)生SQL注入攻擊。這可能導致操作SQL語句的可能性,以便在數據庫上執(zhí)行無效的操作。
這種攻擊的一個常見示例是由Web應用程序訪問的SQL server,其中SQL語句沒有經過中間件或驗證代碼組件的過濾。這可能導致攻擊者能夠在后端數據庫服務器上創(chuàng)建和執(zhí)行自己的SQL語句,這可能是簡單的SELECT語句來獲取和竊取數據,或者可能像刪除整個數據表一樣嚴重。在其他情況下,數據可以通過使用惡意的和虛假的內容填充記錄集來破壞。
盡管網絡安全意識越來越高,但許多網站仍然可以進行SQL注入攻擊。
雖然在本文中不可能涵蓋所有可能的攻擊,但讓我們來看看一些不太為人所熟知的攻擊,這些攻擊越來越多地被用于攻擊網站。
緩慢的HTTP攻擊
雖然這一方法與拒絕服務攻擊類似,但該技術略有不同。它利用了一個事實,即每個HTTP請求都必須由Web服務器偵聽。每個Web請求都以一個名為content-length的字段開頭,它告訴服務器需要多少字節(jié),并以回車和換行(CRLF)字符組合結束。
HTTP請求由內容長度較大的攻擊者發(fā)起,而不是發(fā)送CRLF來結束請求,因此通過向Web服務器發(fā)送非常少量的數據來簡單地延遲。 這使得Web服務器等待尚未到來的更多數據來完成請求。 這消耗了Web服務器的資源。
如果請求延遲到一個小于服務器上會話超時設置的點,那么多個這樣的慢請求可以完全消耗資源并創(chuàng)建拒絕服務攻擊。這可以通過只從一個瀏覽器創(chuàng)建緩慢和延遲的請求來實現,這從安全的角度來看是很危險的。
加密開發(fā)
導致了一種幻覺,認為一切都是安全的,不幸的是,情況并非如此。許多購物車應用程序忘記進一步加密cookie內容,并將它們放在純文本中。盡管SSL上的數據受到SSL的保護,但運行客戶端腳本攔截cookie并讀取其內容可能會導致數據或會話被盜。
對于SSL,現代攻擊者使用工具來檢測和破壞較弱的密碼算法,從而使SSL保護失效,盡管這不是很常見。
保護開源軟件系統(tǒng)
Apache運行在centods/red Hat、Ubuntu和Debian上,在嚴重的FOSS Web基礎架構和解決方案中獲得了廣泛的歡迎。第一步是加強Apache Web服務本身;在Internet上有許多關于這方面的指南和例子--對于每個Linux發(fā)行版,以及示例。
強烈建議禁用除Web服務端口之外的其他端口,以及停止和禁用不必要的服務。部署一個配置良好的防火墻或入侵檢測設備是至關重要的。正如前面提到的,一個簡單的防火墻是不夠的;因此,需要一個能夠檢測Web層攻擊的內容過濾防火墻。
保護Web門戶不僅限于Web服務器,還可以擴展到諸如數據庫服務器,Web服務等組件。從網絡安全的角度來看,只允許從前端Web服務器到數據庫的IP連接是一個很好的 理念。 運行rootkit檢測器,防病毒工具和日志分析器必須是常規(guī)工作,以防止黑客攻擊。
對于中間件和Web服務器之間的高級安全性,還應該有一個更強大的身份驗證機制。應該對cookie進行加密和SSL部署,并使用更強的密碼算法。
從編碼的角度來看,如前所述,使用安全編程技術是至關重要的,也是遵循最佳的安全措施,如代碼審查和滲透測試。 還建議使用其他進程,如輸入代碼驗證,服務器和數據庫端驗證。
Web開發(fā)是攻擊網站的常見方式。 由于其易用的可用性和可編程性,FOSS基礎架構也容易遭受這種攻擊,因此網絡管理員必須了解技術來保護其基礎架構免遭信息丟失或被盜。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!