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