2009-08-10 89 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