選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

網路安全 網路攻擊


網路攻擊

網路上託管的協議和應用程式的攻擊非常多。Web 應用程式在本課程中有其自己的章節介紹。

服務可能存在固有的錯誤,使其容易被攻擊者利用。這些攻擊通常涉及透過易受攻擊的服務向作業系統傳送特殊指令,以控制執行網路服務的程序。緩衝區溢位就是一類此類攻擊。

網路通常包含許多應用程式,其中一些僅提供簡單的登入,另一些則具有複雜的功能。獲得攻擊面概覽並對映容易被利用的漏洞的一種方法是埠掃描目標環境中的所有資產,然後對它們進行截圖。

像 EyeWitness (https://github.com/FortyNorthSecurity/EyeWitness) 這樣的工具就能做到這一點。該工具允許我們快速瞭解網路上存在哪些資產,然後提供每個服務的螢幕截圖。透過螢幕截圖,我們可以輕鬆快速地評估哪些系統值得我們進一步仔細檢查。

利用服務意味著濫用該服務,使其以非預期的方式執行。通常,這種利用活動意味著攻擊者能夠執行自己的程式碼,這稱為 RCE(“遠端程式碼執行”)。 


緩衝區溢位

網路服務的利用有時會涉及濫用應用程式的記憶體管理功能。記憶體管理?是的,應用程式需要將資料在計算機記憶體中移動才能使其正常工作。當程式語言賦予開發人員對記憶體的控制權時,諸如緩衝區溢位之類的問題就可能存在。存在許多類似的漏洞,在本節中我們將回顧緩衝區溢位。

C 和 C++ 程式語言允許開發人員非常精細地控制記憶體管理。這對於需要開發人員非常接近硬體進行程式設計的應用程式來說是理想的,但也容易出現漏洞。Java、JavaScript、C#、Ruby、Python 等程式語言並不輕易允許開發人員犯這些錯誤,這使得使用這些語言編寫的應用程式發生緩衝區溢位的可能性降低。 

當未經驗證的輸入被放入變數時,就會發生緩衝區溢位。這些變數在作業系統中透過稱為堆疊(Stack)的記憶體結構表示。然後,攻擊者可以覆蓋堆疊的一部分,稱為返回指標(Return Pointer)。

注意:堆疊記憶體結構只是程式儲存其執行所需的變數和資訊的地方。堆疊將位於計算機的 RAM(“隨機存取儲存器”)中。

返回指標決定了 CPU(“中央處理器”)接下來應該執行程式碼的位置。CPU 負責控制系統在任何給定時刻應執行的指令。返回指標只是記憶體中的一個地址,表示執行應該在哪裡發生。CPU 必須始終知道在哪裡執行程式碼,這就是返回指標的作用。 

當攻擊者能夠控制返回指標時,這意味著攻擊者可以控制 CPU 應該執行哪些指令!

例如,考慮以下 C 程式碼示例(不用擔心,您不必是 C 開發者,但請盡力理解這個簡單的應用程式的作用):

#include <string.h>
void storeName (char *input) {
  char name[12];
  strcpy(name, input);
}

int main (int argc, char **argv) {
  storeName(argv[1]);
  return 0;
}

在包括 C 在內的許多程式語言中,應用程式都從一個名為 main 的函式開始。這在上面的程式碼中透過 int main (int argc, char **argv) { 來表示。在大括號 {} 內,程式只是執行一個名為 storeName(argv[1]); 的函式。這將簡單地接受使用者輸入到程式中的任何內容並將其提供給 storeName 函式。

該應用程式有 11 行程式碼,但請將注意力集中在 strcpy(name, input); 這一行。這是一個嘗試將輸入中的文字複製到名為 name 的變數中的函式。如 char name[12]; 所示,Name 最多可以容納 12 個字元。程式碼中是否有任何地方阻止輸入的名稱超過 12 個字元?name 變數由使用該應用程式的使用者提供,並直接傳遞到 storeName 函式。 

在此應用程式中,沒有進行清理或驗證,以確保輸入的長度符合應用程式的預期。任何執行該程式的人都可以輕鬆輸入一個大於 name 變數最大容量的值。name 變數可以容納 12 個字元,但當 CPU 被告知寫入超過 12 個字元時會發生什麼?它只會執行被告知執行的操作,覆蓋儘可能多的記憶體!

當嘗試寫入大於預期值的值時,CPU 仍然會嘗試將該值寫入記憶體。這有效地導致 CPU 覆蓋記憶體中的其他內容,例如返回指標,從而使攻擊者能夠控制 CPU。同樣,如果攻擊者能夠覆蓋並控制返回指標,攻擊者就可以控制 CPU 應該執行的程式碼。 

一個圖形示例顯示 Alice 在我們上面使用的應用程式中輸入她的名字

Buffer Overflow

Alice 的行為很正常,她提供了一個導致應用程式正常工作的名字。她輸入了名字 Alice,它被簡單地寫入了應用程式的記憶體中。 

然而,Eve 嚮應用程式傳送了過多的字元。這時會發生什麼?CPU 實際上會將她的輸入寫入記憶體,同時也覆蓋了已經存在的其他值!

Exploit Buffer Overflow

Eve 的輸入導致 CPU 寫入的資料量遠超應用程式預期,並導致返回指標被覆蓋。當 CPU 嘗試執行下一條指令時,它現在被告知在 _AAAAAAA_... 的位置執行程式碼。

如果 Eve 控制了這個伺服器,她就不會輸入 A,而是會提供 CPU 可以理解的程式碼到記憶體中。接下來,她會將返回指標設定為一個告訴 CPU 執行 Eve 自己 CPU 程式碼的值。 

注意:簡單來說,緩衝區溢位允許攻擊者透過仔細覆蓋受害者記憶體來控制受害者的 CPU。 

漏洞掃描器

漏洞掃描器會自動查詢網路上軟體和配置中的常見漏洞。它並非設計用於查詢新類別的漏洞,而是使用一系列預定義的外掛(或模組)來掃描服務中的問題和漏洞。它不一定尋找零日漏洞!零日漏洞是一種全新的漏洞,是軟體供應商和防禦者之前不知道的;對於零日漏洞,目前沒有已知的補丁可以解決該問題。 

掃描器具有網路對映和埠掃描功能,包括探索和查詢其遇到的不同應用程式中的漏洞的方法。

漏洞掃描器通常支援使用憑證進行配置,允許它登入系統並評估漏洞,而不是從未經身份驗證的角度查詢它們。

注意:漏洞掃描器主要查詢已知漏洞和錯誤配置,而不是零日漏洞!

程式碼執行

當攻擊者找到一個他們能夠利用的漏洞時,他們需要決定要執行什麼有效載荷。有效載荷是攻擊者希望透過利用來傳遞的程式碼。

攻擊者可以決定使用許多不同的有效載荷,這裡有一些例子:

  • 使受害者註冊到一個 C2(“命令與控制”)伺服器,該伺服器接受攻擊者的命令
  • 在系統上建立一個新的後門使用者帳戶,以便攻擊者以後可以使用
  • 與受害者開啟一個 GUI(“圖形使用者介面”),以便攻擊者可以遠端控制它
  • 接收一個命令列終端,即 shell,攻擊者可以透過它傳送命令

攻擊者常用的有效載荷是繫結 shell。它會導致受害者監聽一個埠,當攻擊者連線時,他們會收到一個 shell。

Bind Shell

防火牆有助於防止攻擊者連線到受害者。防火牆將有效地拒絕到受害者的入站連線,只要該埠未被允許。一個埠只能由一個應用程式監聽,因此除非攻擊者停用該服務,否則他們無法監聽已被佔用的埠。

為了繞過這種防禦措施,攻擊者將嘗試讓受害者連線到攻擊者,從而使受害者能夠訪問有效載荷。許多防火牆不幸的是未配置為拒絕出站流量,這使得這種攻擊對攻擊者非常有威脅。

在此示例中,我們看到一名攻擊者使用反向 shell 讓受害者連線到攻擊者。

Reverse Shell

注意:程式碼執行意味著攻擊者可以在受害者系統上執行他們的程式碼。他們選擇部署什麼程式碼由他們決定,但這通常涉及到攻擊者能夠長期在受害者系統上執行命令。 

網路監控

在大多數情況下,攻擊者需要網路才能遠端控制目標。當攻擊者能夠遠端控制目標時,這透過命令與控制通道完成,通常稱為 C&C 或 C2。

存在透過預先程式設計了有效載荷的惡意軟體的妥協,這些惡意軟體不需要 C2。這種型別的惡意軟體能夠破壞甚至氣隙網路。

檢測妥協通常可以透過查詢 C2 通道來完成。C2 可以採取任何形式,例如:

  • 使用 HTTPS 與攻擊者伺服器通訊。這使得 C2 看起來像網路瀏覽
  • 使用社交網路自動釋出和讀取訊息
  • 使用 Google Docs 等系統向受害者新增和編輯命令

Network Monitoring Beacon

只有攻擊者的創造力才能限制 C2。在考慮如何阻止具有巧妙 C2 通道的攻擊者時,我們通常必須依靠檢測網路上的統計異常和差異。例如,網路監控工具可以檢測到

  • C2 使用的長連線,但這種長連線對於所討論的協議來說是不自然的。HTTP 是不常見長連線的協議之一,但攻擊者可能將其用於遠端控制。 
  • C2 使用的信標(Beacons)來指示受害者還活著並準備好接收命令。信標被許多種類的軟體使用,不僅僅是攻擊者,但瞭解哪些信標存在以及您期望哪些信標是好的實踐。 
  • 突然從網路爆發的資料脈衝。這可能表明應用程式正在進行大型上傳,或者攻擊者正在竊取資料。嘗試瞭解是哪個應用程式和使用者導致了資料脈衝,併為其新增上下文。這正常嗎? 

存在許多方法可以供防禦者嘗試查詢異常。這些異常應與傳送資料的源系統的資料進一步相關聯。

對於網路監控,應應用上下文以幫助區分噪聲和訊號。這意味著 SOC(“安全運營中心”)應嘗試豐富資料,例如源和目標 IP 地址,並新增上下文以幫助使資料更有價值。

應用上下文可以描述為以下場景:攻擊來自網際網路,但它試圖利用 Linux 漏洞攻擊 Windows 服務。這通常被認為是噪聲,可以安全地忽略;除非,如果進行攻擊的 IP 地址是來自您自己網路或您信任的提供商的 IP 地址怎麼辦?然後,我們可以應用的上下文可以為我們進一步探索攻擊提供有價值的見解。畢竟,我們不希望我們信任的系統發起任何攻擊!


點對點流量

大多數網路都配置為客戶端到伺服器的模式。客戶端訪問伺服器獲取資訊,當客戶端需要相互互動時,它們通常透過伺服器進行。

然而,攻擊者很可能希望使用點對點(即客戶端到客戶端)通訊來利用低垂的果實,例如重用憑證或利用薄弱或易受攻擊的客戶端。

例如,埠 445(SMB 使用)是檢測妥協的一個很好的指標。在大多數環境中,客戶端不應該透過 SMB 相互通訊,但在妥協期間,攻擊者很可能會嘗試使用 SMB 進一步妥協系統。

Peer-to-Peer


橫向移動和樞軸

一旦系統被妥協,攻擊者就可以利用該系統來探索該妥協系統有權訪問的其他網路。在妥協的系統透過防火牆擁有更多特權的環境中,或者系統透過例如額外的網絡卡訪問其他網路時,這將是可能的。

樞軸(Pivoting)是指攻擊者使用被妥協的主機來觸及其他網路。這裡展示了一個插圖,其中 Eve 妥協了一個系統並正在利用它來掃描和發現其他系統。

Pivoting Lateral Movement

橫向移動(Lateral Movement)是指利用樞軸並利用樞軸來攻擊另一個系統。這個新系統現在可以進一步用於樞軸和更多的橫向移動。在此示例中,Eve 使用 Server X 進一步發現 System B。

Pivoting Lateral Movement



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援