題:
為什麼TCP比UDP更安全?
Philipp
2014-10-08 16:56:49 UTC
view on stackexchange narkive permalink

不是真的。

這兩個協議都沒有任何旨在提供機密性的內置功能。上面的協議層(或下面的下面的)應該提供任何安全性。

TCP是比UDP更複雜的協議,這使得它很難被欺騙,但是這些並發症很少會成為嚴重的障礙。

當人們說TCP比UDP“更可靠”時,他們並不是在指安全性。 TCP更可靠,因為它確保按順序接收所有段,並重新傳輸所有丟失的段。 UDP不能保證這一點。當連接不良時,UDP段可能會丟失而無法跟踪或到達錯誤的順序。如何解決此問題取決於應用程序。

您能否在最後一段進行擴展? “欺騙”到底是什麼意思?據我所知,TCP不僅在欺騙上有點困難,而且在欺騙上實際上要困難得多。
@Adnan我不想在此進行擴展,因為無論如何這並不是真正的話題(欺騙是在侵犯完整性,而不是在保密)。但是,如果您對此主題感興趣,可以隨意打開一個新問題。
哦,對不起。也許我不清楚。我客氣地說,您的最後一段措辭不佳,質量低下,並可能說明了不正確的信息(除非您詳細說明)。我不是在要求其他信息,而是告訴您解決問題(以防萬一,這只有在您詳細說明“欺騙”是什麼意思的情況下才能明確)。
據我所知,如果我錯了,請糾正我,一旦您談論TCP / UDP和欺騙,就會自動假定您正在談論建立連接(如果是TCP)似乎來自不是真正的來源。當然,除非您是指網絡工程流程協議欺騙https://en.wikipedia.org/wiki/Protocol_spoofing#TCP_spoofing(我認為您不是在談論這個問題)
哦,看來我不是唯一的措辭不佳的段落,http://security.stackexchange.com/questions/69181/what-is-tcp-spoofing
十一 答案:
Steve Sether
2017-07-20 19:39:54 UTC
view on stackexchange narkive permalink

要使用TCP將數據發送到應用程序,首先必須建立一個連接。在建立連接之前,數據包僅到達OS層,而不到達應用程序。建立連接要求您將數據包接收回初始端。如果要偽造不在自己網絡上的IP地址並建立TCP連接,則需要能夠攔截另一側發出的數據包。 (您需要位於端點之間,以及到達偽造IP地址的數據包通常可以到達的位置,或執行其他一些巧妙的路由技巧。)

UDP沒有連接,因此您可以偽造具有任意IP地址的數據包,它應該到達應用程序。當然,除非您在正確的“位置”,否則您仍然不會取回數據包。這是否重要取決於您放置在應用程序中的安全性。如果您比應用程序內部的其他IP地址更信任某些IP地址,則可能是一個問題。

因此從這個意義上講,TCP比UDP更“安全”。取決於應用程序,這可能與安全性相關或無關。就其本身而言,用TCP代替UDP並不是一個很好的理由,因為這兩個協議之間還涉及其他折衷。

*“ UDP沒有連接,因此您可以偽造具有任意IP地址的數據包,並且該數據包應到達應用程序。” *應該嗎?由於ISP方面的出口/入口過濾,我感到這是一個城市神話。
@Merhdad不。這是DNS反射器DDoS攻擊問題的一個主要因素。入口過濾僅意味著ISP會檢查數據包的聲明來源是否與它進入的接口/ BGP鄰居相匹配,並且出口過濾的發生頻率不像我們希望的那樣頻繁。
我同意@Shadur,和大多數答案,並補充稱讚“更安全”不是設計使然,但是它可以為欺騙提供一定的保護,但它不是水密的。我認為它類似於NAT既不是設計為安全功能,也確實增加了攻擊者必須跳過的障礙。適當的安全性意味著在UDP或TCP協議中使用身份驗證功能,或添加身份驗證標頭(IPsec AH)。
無論如何,不能僅僅用TPC隨意替換UDP。數據包丟失時的傳遞延遲,冗長的連接建立,無多播... UDP vs TCP的選擇與安全性無關,而與應用程序要求有關。
sluge
2017-07-20 17:27:21 UTC
view on stackexchange narkive permalink

在閱讀MS SDL(Microsoft安全開發生命週期)演示文稿時,我發現建議在應用程序中用TCP替換UDP,因為TCP比UDP更安全。但是它們都只是傳輸層,僅此而已。

那麼,為什麼TCP比UDP更安全?

評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/70130/discussion-on-question-by-sluge-why-is-tcp-more-secure-than-udp)。
domen
2017-07-20 17:46:55 UTC
view on stackexchange narkive permalink

普通UDP不會保持狀態,沒有握手等。這意味著除非其他層上沒有保護措施,否則攻擊者可以輕鬆發送欺騙性的數據包。

另一方面,發送欺騙性的TCP數據包需要攻擊者猜測已建立連接的序列號和客戶端端口。

或者只是在同一個局域網中,毒害ARP表以獲取所有通信,然後在他想要插入數據包時增加序列,這會使“合法”數據包作為不良重傳而被丟棄...
值得一提的是,任何中途安全的應用程序本身都應保持狀態,實現握手等,因此,TCP的額外功能應該是多餘的。
@Nat值得比較將TCP包裝在TLS中,並且不注意到更高級別的握手,而重新實現IKE以使其具有安全的UDP交互功能可以處理握手丟失的情況,從而使事情變得多餘。
TheJulyPlot
2017-07-20 17:37:20 UTC
view on stackexchange narkive permalink

TCP並不比UDP更安全,它是有狀態的,並且需要每個段的確認,因此它更加“可靠”。 UDP是無狀態的,只發送段就不知道客戶端是否獲得它們。

兩者都沒有其他定制的安全功能,差別在於每種協議的不同要求,任何可感知的安全利益是協議功能性的副產品,而不是故意的安全功能。

編輯:UDP和TCP具有特定用途,這些用途均與安全性無關。

兩者協議依賴於其他協議來提供安全性。因此,儘管TCP的受攻擊面可能稍小,但這對於確保您需要以安全性為導向的協議的安全性而言,確實是無關緊要的。像DTLS或googles QUIC之類的協議。

選擇針對更適合UDP的用例實現TCP,而不是正確地保護UDP(在大多數用例中TCP也需要保護)。使用9桿鐵桿進行推桿是因為您認為9桿鐵桿是在戰鬥中捍衛自己的更好武器……當口袋裡有槍時。

幸運的是,安全性仍然是安全性。它可能不是“偉大的”安全性,但仍然比其他情況“更安全”。
是的,我可以看到這種觀點。但是,選擇TCP替代UDP是基於副作用的設計決策。就個人而言,如果我有一個更適合UDP的用例,我將使用UDP並使用為安全性而設計的協議對其進行保護。
由於按照定義,完整性是安全性的基礎,而UDP的更大攻擊面主要包括通過欺騙數據包來攻擊完整性,因此我可以肯定地說TCP更安全。
@PanosK。完整性意味著數據值得信賴。TCP中的簡單錯誤檢測不提供此功能。它不應該也沒有為此設計。說TCP比UDP更安全,就像在談論什麼是更好的戰車時,大眾汽車比福特汽車是一輛更好的家用汽車。是的,大眾汽車可能具有5星安全評級,而福特可能只有4星,但它仍然不是更好的坦克,也不會在坦克大戰中為您辯護。
@TheJulyPlot:D我並不是說TCP更加安全,但是更像是我了解MS SDL中的那些人是如何得出這個結論的。
迄今為止最好的解釋。
WhiteWinterWolf
2017-07-21 14:14:40 UTC
view on stackexchange narkive permalink

TCP比UDP更安全嗎?

是的,但是當我們談論“安全性”時,我們必須非常清楚所談論的內容,而不是將此語句概括為上層協議。

當前,安全性通常與 CIA 三合會相關:

  • C
  • 完整性。
  • A 可用性。

版本4 IP協議(至今仍是最常用的協議)是一種非常古老的野獸,它是在70年代和80年代開發的。

當時,機密性並不是真正的主題,而真正的目標是為了實現完整性和可用性(Arpanet網絡是Internet的始祖,它誕生了IP協議,旨在即使在發生核戰爭的情況下也能確保服務的連續性,而不是保護傳輸中的數據)。

在這種光纖中,在IP層上開發了兩種傳輸協議:TCP和UDP。

TCP wa旨在確保完整性可用性屬性的一種。它包括當時的先進技術,例如三向握手,參數協商,各種連接狀態處理,透明的數據包重新排序,確認窗口和重試機制。這為發送方提供了很好的保證,即發送方發送的數據已以完整無損的形式(即沒有丟失,更改或無序的部分)被接收。

提醒該協議所針對的是技術災難,而不是惡意篡改傳輸中的數據。當時這個問題完全不在討論之列。

相反,

UDP被設計為快速協議。它沒有上述功能,因此也沒有任何開銷。特別是,當發送方使用UDP發送某些數據時,接收到的數據可能是不完整的,無序的或根本沒有接收到:UDP協議本身不提供任何機制來防止或檢測到這兩個發送方或接收方。 / p>

這樣,當關注安全的數據完整性和可用性屬性時,TCP確實比UDP更安全。

是一種依賴TCP的應用協議比依賴UDP的應用協議更安全UDP嗎?

當然不是。

這僅意味著開發依賴UDP的應用協議的人們將有更多工作,因為他們可能需要在應用協議中解決缺少的功能在UDP協議中。他們將必須考慮到發送的數據不一定會被接收,接收的數據可能未按正確的順序等等。這些都是眾所周知的問題。例如,

OpenVPN支持TCP主要是為了與限制性防火牆兼容,默認情況下運行,並且在UDP上運行效果最佳。可以將其切換到TCP,但不會以任何方式提高其安全性,因為兩個傳輸層協議UDP和TCP之間的差異完全由OpenVPN自己處理。將其切換為TCP只會增加OpenVPN協議的TCP開銷,從而降低其性能。

TCP是否比UDP更好?

否,這完全是應用程序協議設計的選擇

UDP是更原始的協議。如果正確,謹慎地使用它,則 可能會比TCP獲得更好的性能,但代價是應用協議的開發和維護更加困難。

  • 當應用程序不是時候敏感的是,由於不需要重新發明輪子,TCP將自身強加為自然選擇。
  • 當應用程序對時間敏感時,必須進行討論,以便在知道每個應用​​程序都有其缺點的情況下進行選擇:TCP對肯定地潛在性能損失

大多數協議都不是時間敏感的,因此TCP是使用最廣泛的協議。確實,當您加載網頁或接收電子郵件時,遲早接收10毫秒也沒有什麼區別。

除了先前引用的OpenVPN之外,還有兩個使用UDP的經典協議示例,是媒體流和DNS。

使用媒體流,只要視頻或音頻流暢且同步地播放,您就不會真正在乎是否缺少一個視頻幀或幾毫秒的視頻或音頻。在這種情況下,您不想引起重複的暫停,因為TCP檢測到一個丟失的數據包並要求發送方重新發送最後一個確認窗口的內容。

對於DNS,請求和答复通常非常短並且您希望名稱解析過程盡可能快(請注意,時間敏感度越來越低的答案,例如DNS區域傳輸通常仍會在TCP上發生)。與處理每個請求的成熟的三向握手相比,在請求或其答案丟失的機會很少的情況下,重新發送名稱解析請求到DNS服務器的速度要快得多。

關於機密性和保密性惡意嗅探/篡改(和IPv6)?

到目前為止,我們所關心的只是,按照舊的IPv4的精神,是傳輸速度與數據完整性+可用性之間的平衡。現在,如果我們想在此之上添加機密性,我們可以做到這一點,但是它必須在應用程序層完成,因為如前所述,IPv4不受機密性問題的關注。

可以在應用程序層上實現現代的,完整的安全性實現,並且依賴於TCP或UDP(或兩者)協議,而對應用程序協議安全性本身沒有任何影響(請參見上面的OpenVPN示例)。 / p>

但是,如開頭所述,IPv4確實來自另一個計算時代。如果它是IPv6的名稱的後繼者,它本身就在IP層支持IPSec,從而在傳輸協議(例如UDP和TCP)下面提供了更現代的安全服務。負責將應用程序中的傳輸中數據加密委派給網絡層,並允許UDP和TCP提供完全相同的安全性保證。但是,在大多數情況下,UDP性能的提高將被IPSec的開銷所抵消,因此,只要使用IPv6 IPSec,我不確定使用UDP代替TCP是否會有任何優勢。

Joshua Faust
2017-07-20 18:12:40 UTC
view on stackexchange narkive permalink

TCP是“基於連接的”,這意味著它以序列號的形式內置了可靠性。因此,例如,我通過TCP向您發送了一個圖像,但是有1/4的數據包丟失了。由於我們有一個基於序列號的基於連接的協議,因此您的計算機將知道您缺少該數據,因此向我請求該數據以確保數據完整性。這比較慢,但是更安全。另外,為了欺騙TCP / IP數據包,您必須捕獲該序列號並發送惡意數據包。沒有中間人,這幾乎是不可能的!

UDP是“無連接”協議,這意味著它只是發送數據而忘記了。沒有數據的可靠性或完整性,但是對於某些應用程序它更快,更高效。

這不是不可能用tcp syn / ack / syn-ack數據包淹沒一台機器...偵聽比較困難,但是序列可以通過在arp中毒後進行嗅探來猜測(例如,不是在Internet上,而是在一方的本地網絡上))。因此,本身並沒有真正增加的安全性。
我仍然認為它更安全,因為危害包含更多有價值數據的TCP的步驟更加困難且麻煩。本質上,您需要破壞網絡,通過ARP中毒以及隨後的(可能是)DNS中毒來設置MiTM,然後從那裡註入所有正在通過您的流量的東西,即“假網關”。或者,您可以設置一個偽造的AP,然後等待人們連接,這很容易哈哈。無論哪種方式,TCP劫持=都需要更多步驟來進行黑客入侵,而UDP劫持=則需要進行更多黑客入侵。大聲笑
如果目標是代表原始用戶發送數據包,則只需響應用戶側網關或服務器側目標服務器的arp請求即可獲得數據包的副本以進行猜測序列號。這僅比udp多了一步。如果您希望雙向,是的,您必須獲得MITM,但對於UDP也是如此。增加的安全性很小
rackandboneman
2017-07-21 13:53:48 UTC
view on stackexchange narkive permalink

在實踐中,TCP在防火牆網絡中更容易監控:與外部連接與內部建立的連接有關的流量,以及與服務器角色相對應的流量,可以通過單獨的策略加以區分和處理。例如,您可以輕鬆確保受保護的網絡上的主機可以訪問外部Web服務器,但不能充當外部客戶端的Web服務器。對於UDP服務(例如DNS),實施此類策略需要更多的情報和猜測,因為您必須考慮傳輸層上下的信息。

Arnaud Bouchez
2017-07-24 13:12:12 UTC
view on stackexchange narkive permalink

TCP不比UDP“更安全”:

  • TCP本身沒有加密功能
  • TCP數據包傳輸可靠,但是您可以在UDP上進行仿真。

UDP只是IP數據包之上的一個薄層,而TCP具有復雜的和標準的其他機制,這些機制是IP包的一部分。

值得一看的是QUIC項目,以了解有關TCP / UDP差異的更多信息,以及Google為什麼要在UDP而非TCP之上創建自己的安全HTTP / 2傳輸層。

讓我們引用 https://www.chromium.org/quic

QUIC與TCP + TLS + HTTP2相比的主要優勢包括:

  • 連接建立等待時間
  • 改善的擁塞控制
  • 沒有線頭阻塞的多路復用
  • 前向糾錯
  • 連接遷移
Shaboti
2019-11-30 09:50:29 UTC
view on stackexchange narkive permalink

讓我們從安全性的角度為每個對象設置一些優點/缺點,然後查看:

UDP

  • (+)相對較難掃描UDP開放的端口,並且不存在秘密掃描(通過發送SYN在TCP中建立半連接)。上。
  • (-)由於沒有連接,因此反射攻擊更為常見。
  • (-)欺騙IP很容易,並且可用於DoS攻擊。

TCP

  • (-)秘密掃描可以檢測到打開的TCP端口(僅發送SYN來檢測打開的端口)
  • (+)網絡設備(例如,狀態防火牆)可以輕鬆跟踪和控制TCP連接。
  • (+)偽造數據包並不容易,因為它需要提供正確的`序列號和確認號。
  • (+)由於最初的握手,不如UDP欺騙IP那樣容易。
morris hoodye
2017-07-21 08:26:47 UTC
view on stackexchange narkive permalink

當前,TCP不比UDP更安全。 TCP比UDP更可靠,因為TCP可以檢測並重新傳輸錯誤數據包。

如果希望進行安全的數據傳輸,那麼您正在考慮使用諸如TLS或IPSec之類的格式加密。

David Trott
2017-07-22 23:08:20 UTC
view on stackexchange narkive permalink

TCP具有連接的概念,而UDP沒有。但是,從安全角度來看,連接概念既是優點也是缺點。連接的主要安全強度是標準化的,應用程序開發人員,網絡設備和防火牆都可以依靠固定的方法來建立連接,處理數據包分段,重傳等。此外,連接概念使在頂部建立其他安全性層(例如SSL)變得更加容易。

但是,TCP連接並不能為直接針對傳輸層的攻擊提供很多保護,例如SYN洪水攻擊。理論上,使用UDP可以對每個數據包進行身份驗證以減輕其中的某些風險。

因此,我認為UDP從理論上講比TCP更安全,但是我們生活在一個安全性不高的世界中所以理論上的力量是沒有意義的。在現實世界中,可以找到兩種方式的示例-一種協議以另一種協議不易受到攻擊的方式失敗。

總而言之,我認為沒有答案要使哪種協議更“安全”,您需要使問題符合您所關注的威脅以及您願意花費多長時間來緩解這些威脅。如果是所有威脅,而您又有無限的時間和金錢,那麼我的理論答案就成立了。

[UDP也有洪氾攻擊](https://www.juniper.net/documentation/en_US/junos12.1x44/topics/concept/denial-of-service-network-udp-flood-attack-understanding.html)。您的答案需要更多關於UDP為什麼“理論上”比TCP更安全的支持。
@user2320464可以通過永不發送“目標不可達”數據包來關閉rfc792孔。 對基於UDP的服務也有許多非對稱攻擊;但是我只是將它們歸類為應用程序中的缺陷(或應用程序實現的協議,DNS,ntp等)。 我為TCP遇到了一個問題(接收到第一個數據包後需要分配資源)。請注意UDP中的任何協議級別(非特定於應用程序和非特定於實現)的漏洞,該漏洞也不適用於TCP,並且在我們的理論世界中無法解決。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...