假設您能夠修改操作系統/固件/設備以供服務器/客戶端在高於65535的端口上發送和偵聽,是否可以植入後門並使其偵聽端口70000? p p>
我想真正的問題是:
如果您在計算機上本地重建TCP / IP堆棧,由於 RFC 793-傳輸的方式,整體概念將無法正常工作控制協議標準
的工作原理如下所示,在某些答案中?使得無法訪問高於65535的端口上運行的服務。
關於創建後門的硬件和設備的討論太多了,只有政府可以訪問以進行監視,我只是想知道是否這可能是他們這樣做並避免被發現的方法之一?
假設您能夠修改操作系統/固件/設備以供服務器/客戶端在高於65535的端口上發送和偵聽,是否可以植入後門並使其偵聽端口70000? p p>
我想真正的問題是:
如果您在計算機上本地重建TCP / IP堆棧,由於 RFC 793-傳輸的方式,整體概念將無法正常工作控制協議標準
的工作原理如下所示,在某些答案中?使得無法訪問高於65535的端口上運行的服務。
關於創建後門的硬件和設備的討論太多了,只有政府可以訪問以進行監視,我只是想知道是否這可能是他們這樣做並避免被發現的方法之一?
否,技術上,TCP標頭中的端口號字段限制為2個字節。 (為您提供 2 ^ 16 = 65536
個可能的端口)
如果您通過為更高的端口保留更多位來更改協議,則會違反 TCP段的規範,不會被客戶理解。換句話說,您不再講TCP,“ TCP源/目標端口”中的“端口”一詞將不再適用。 UDP端口也存在相同的限制。
也就是說,後門可以通過不同於TCP或UDP的協議進行通信,從而掩蓋其通信。例如, icmpsh
是僅使用ICMP的反向shell。最終,您還可以使用原始套接字來實現自己的自定義傳輸層協議,該協議可以具有自己的端口概念,範圍大於0-65535。
否,這是數字,因為該字段的TCP字段只有16位長(65536,但從0開始),因此從根本上講,通信高於65535的端口是不可能的
如果您在計算機上本地重建TCP / IP堆棧,那麼由於RFC 793-傳輸控制協議標準的工作方式如以下某些答案中所述,整個概念是否行不通?使得無法訪問高於65535的端口上運行的服務。
高於65535的端口上沒有沒有TCP / UDP服務。如果它支持端口大於2 16 sup> -1的數字,則它不再是TCP(或UDP)。
您還能有其他東西嗎?那...?當然。並且它與TCP非常相似嗎?向後兼容?這兩個問題都是肯定的。
關於創建後門的硬件和設備的討論太多,以至只有政府也可以訪問以進行監視,我很好奇這是否可能是其中一種方法他們這樣做是為了避免被發現並被發現?
如果我開發了這樣的設備,它將依靠足夠普遍的協議而不會引起任何關注。未知/非法的協議數據包之後會產生一些額外的流量,這將是非常可疑的。
這種設備可能會做什麼例如,檢查有效負載中的某些字節。它們通常是不相關的值;然後,我可以將數據包發送到目標,或者如果它是路由器,甚至沒有自己的IP地址,也可以將數據包發送到目標之外的一些隨機主機,甚至可能不存在,偽裝成(比如) HTTPS請求或SSH登錄嘗試。
如果看到不知道的數據包,則可能會感到可疑。但是,即使您在日誌中看到類似
SSH:用戶維護失敗的嘗試SSH:用戶維護失敗的嘗試SSH:用戶維護失敗的嘗試
如果您沒有沒有用戶“維護”,則不必擔心,特別是 。您可能會假設某人在某處發現了針對默認用戶“維護”的設備的攻擊(哎呀,如果我是政府,我可以銷售這樣的設備,使其容易受到攻擊,並且僅出於證明在完全不同的設備上建立這種連接的唯一目的而沒有解決它。看到這種嘗試,您將要做的第一件事是什麼都沒有(“無害的暴力破解。白痴”),google和聳聳肩(“哦,有人認為我有CheapRouter2000。笨蛋,可能寫了防火牆規則來阻止IP-只是數據包仍然到達網卡”)。
實際上發生的是路由器,網卡,主板或您所擁有的東西中不良的固件,識別出數據包,並發送回一個答案。通過偽造覆蓋“真實”響應包的響應包。
非常糟糕的事情的唯一症狀是,如果您比較例如來自邪惡路由器:
帶有SSH服務器的主機:
-> SSH SYN --> ROUTER --> SSH SYN --> HOST<-- SSH S + A- -ROUTER <-- SSH S + A <--主機-> SSH ACK --> ROUTER --> SSH ACK --> HOST ...-- >登錄---- > ROUTER -->登錄- --- > HOST<-- FAIL2 ------ ROUTER <-- FAIL1 < ----主機數據包不同!
沒有SSH服務器的主機:
-> SSH SYN --> ROUTER --> SSH SYN --> HOST<-- SSH S + A --- ROUTER <-- SSH RST <--主機等待,WTF?-> SSH ACK --> ROUTER HOST ...-- >登錄---- > ROUTER HOST
<-- FAIL2 ------路由器主機
如果您在受感染設備的左側或右側嗅探電纜,則不會立即發現任何故障。
然後,另一個可疑的事情是發件人顯然使用了 TCP快速打開擴展名。請注意,即使沒有TCP / FO,您也可以在SYN中發送額外的數據,而對於 非FO和不受威脅的設備,它們將被忽略。
如前所述,端口號用無符號的16位整數表示,並且不能超過65535。
但是有可能使用其他協議(不是TCP或UDP)。 IP標頭中有一個稱為“協議編號”的8位字段,表示該數據包內部使用了哪種傳輸協議。
您可以在此處查看傳輸協議表: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
此列表中的某些協議為用戶廣泛使用(例如TCP或UDP),而很少使用(DCCP或UDPLite)。某些協議號尚未使用,而某些協議號已棄用(ARGUS,EMCON)。
因此,後門可以使用未使用的協議號將數據發送到其服務器。當然,這種技術很難實現(需要訪問rawsocket或將後門實現為OS內核模塊)。
這是可以實現的,但由於最大端口為65535,因此您將無法使用UDP和TCP等協議。
您需要在IP之上實現自己的協議協議。
使用原始套接字就可以實現。
關於創建後門的硬件和設備的討論太多,只有政府才能訪問以進行監視,並且我只是想知道這是否可能是他們執行此操作並避免檢測和發現的方法之一?
我認為這不會幫助使連接更隱秘,因為您仍然可以能夠看到通過網絡的數據包。
我考慮了幾天,我認為答案實際上可能是是,但是以一種奇怪的方式。
所以還有很多其他答案已經指出,TCP表示端口號是16位。那是16個1和0。限制為65535個可重複端口。對於本示例的其餘部分,由於我很懶,因此將使用4位。
使用4位,我可以表示15個端口。
您的戲劇後門必須依靠其處理格式錯誤的TCP數據包的方式。因此(記住4位而不是16位)。讓我們在端口17上發送一些流量。
標頭的格式可能為10001。TCP堆棧可能會指出,如果標頭格式錯誤,則會沿著不同的邏輯路徑,將數據附加到端口17 “最正確的”四個位。在這種情況下,端口1或0001。真正的竅門是TCP僅使用位數。它不像xml中有[port] 10001 [/ port]的端口。因此,您將需要某種方法來檢測端口標頭溢出。 SYN就在端口旁邊,因此您可以這樣做,SYN恰好為“ 1073741823”意味著您的目標端口要大一個。
然後,此不同的邏輯路徑可以在端口1處於活動狀態的整個過程中保持活動狀態。
通過這種方式,您可以在某個接受格式錯誤的數據包的地方使用TCP後門對他們做了一些特別的事情。真正的問題是,只有您特殊的TCP堆棧才能理解它們。路由器,智能交換機,甚至從理論上講,某些NIC卡都會丟棄該數據包,因為該數據包格式不正確。
但是,如果您將兩個帶有不穩定TCP堆棧的設備連接到“啞”交換機或集線器,則幾乎沒有辦法判斷數據包是否會使用該格式的標頭將其發送到目的地。
從理論上講,您可以使它起作用,但是這不在TCP規範中。
每個人都用TCP / IP數據包來解釋它:端口字段只有16位長。
但是Linux內核源代碼及其如何處理端口呢?在Linux內核的任何地方,對於TCP / IP端口,始終將其強制轉換為“短”或16位。並且當將其編譯為x86程序集時,該指令的16位版本將用於處理16位數據。
如果您對IPv6感到疑惑,則它與os IPv4相同-有關TCP和UDP。
https://stackoverflow.com/questions/186829/how-do-ports-work-with-ipv6
但是您當然可以可以設置一個奇怪的通信,例如使用兩個服務器進行通信-每個通信都有單獨的16位端口,因此當您將它們組合在一起時,您就擁有一個虛擬的32位端口。但是,只有全世界,您才知道如何與兩台服務器通信-例如,將數據分成兩半並在兩台服務器之間進行劃分,然後再在客戶端重新構造。
這確實似乎超過16位幾乎是不可能的。
來源: https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#TCPIPREPETITION
這個真正廣泛的文檔清楚地表明瞭如何通過TCP在互聯網上分配位。它顯示了源端口和目標端口彼此相鄰。
那麼您做了一個32位源端口? NOPE只要它觸摸到源端口的Internet字節3 & 4(低位),就會在目標位置對其進行處理。
目標端口帶有擦除的序列號,所有內容將被推送
現在,由於序列號已被粉碎,因此目的地將不再期望該序列號,並且它將丟棄該序列號,就像它是一個欺騙包一樣。
即使它超過了這一點,確認號也將被序列號所破壞,並且由於該編號現在無效,就互聯網而言,它永遠不會被確認。
是的,因為您指定了可以修改操作系統,但要注意的是,只有修改過的設備才能將其視為非標準端口號。
當前大多數實現都存儲該端口16位字段中的數字,因此所有可能的位組合都映射到0到65,535之間的整數。這些實現根本無法識別任何其他端口號,因為沒有位組合會映射到該端口號。
但是,如果您確實希望特定的客戶端將流量識別為不同的端口號,您可以重寫該客戶端如何在較低級別解釋數據包。您不僅可以使用16位端口號,還可以編寫OS來根據包的“選項”或“消息”部分中包含的數據識別對它的修改。這樣,系統就可以像可能存在的更大範圍的端口號一樣運行。
該技巧僅在重寫了其數據包解釋算法的設備上起作用。外部設備仍可以轉發這些數據包而不會受到損害,但它們會將這些數據包視為在標準端口號上。