2009-08-10 32 views
0

例如,如果我編譯的應用程序中的套接字被設計爲連接到123.456.789.0。 如何檢查它是否連接到123.456.789.0?有沒有辦法做到這一點?如何檢查套接字連接的目的地?

的想法是這樣的:我想防止他人編輯我的程序和更改地址,例如,127.0.0.1並使其通過代理連接。

套接字連接後有沒有任何函數/方法/技巧來檢查地址?

+0

一個小挑逗:例如,最好選擇192.0.2.x地址。 http://tools.ietf.org/html/draft-iana-ipv4-examples比rfc1166更明確地定義它們。 123.456.789.0不是有效的IPv4地址。 – 2009-08-10 18:42:41

回答

4

使用getpeername函數檢索遠程主機的地址。

如果有人像你提到的那樣編輯你的程序,他們也可能會改變這樣的檢查。

3

是關於這種方法的不安全感的評論是正確的,但不完整。你甚至不需要改變程序的代碼來繞過你提出的機制。

最簡單的方法是將IP別名添加到機器的一個網絡接口。然後程序可以綁定到你的程序所連接的端口上的那個接口,並且操作系統的網絡堆棧將愉快地發送連接到攻擊者的本地程序,而不是你的遠程程序。

所以,現在你說你想知道如何列出計算機的接口,這樣你就可以檢測到這種顛覆。您的對手反擊,在安裝Winsock掛鉤後將您的程序作爲他們的子進程啓動,Winsock掛鉤通過父進程將Winsock回調路由回去。

然後,我們希望找到你詢問如何讀加載到你的進程空間中的特定DLL的可執行代碼段,這樣你就可以檢查代碼是你所期望的。現在你的對手放下Winsock墊片,切換到NDIS圖層過濾器,在他們擊中NIC之前從你的程序重寫數據包。

接下來我們找你找人來告訴如何列出安裝在Windows系統上的驅動程序,這樣你就可以檢查這些過濾器的一個不存在。你的對手會考慮約6秒鐘,並決定開始使用數據包路由選擇,從我的腦海中選擇至少三種不同的攻擊中的一種。 (不,等待,四。)

我不是安全專家。然而,我花了五分鐘的時間在這方面,而且已經讓您的安全性勝過了七種不同的方式。

你註定了嗎?也許,也許不是。

而不是你想出修復到可以看到的風險,更好地發佈新問題說的是什麼,你要保護,和對風險和可能的修復專家評論。 (不要在這裏添加它,你的問題已經被nos正確回答了,這是一個不同的問題。)

安全性很難。該專業的專業知識遠遠超過計算機科學的大多數其他領域。

+0

+1爲您的評論,但我不註定。我使用這作爲一種額外的保護。我的代碼中最重要的部分(包括winsock)被垃圾代碼混淆了,這很難被捕獲。做這個檢查的概念是,如果地址無效,那麼最近在另一個階段,程序會隨機崩潰。做這樣的事情,而不是一個愚蠢的消息框'無效地址'將需要更多的時間,我的'對手'。 :) – 2009-08-12 02:40:19

+0

等一下,我很困惑。您的問題表示您想阻止某人通過代理運行您的協議。儘管您的代碼檢查了遠程對等點的地址是您期望的,但我概述了七種不同的方式(並且在發佈後還有兩種方法)強制您的流量通過別人的代碼 - 代理 - 。所以....跆​​拳道?除此之外,通過默默無聞的安全措施從未起作用。一個業餘球員永遠不會贏得與一個積極的對手的安全鬥爭。 – 2009-08-12 02:55:10