KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然利用论

[ 19936 查看 / 70 回复 ]

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

以下引用zhangmdk在2004-10-8 16:52:30的发言:


不用...全文加密只是提供一种更好的保密性而已,使脚本使用的存取变量名都不可见,加大伪造的难度。事实上根本不需要使用全文加密就可以达到不可更改的效果。(参见以下对SHash的说明)


"如果使用了不可逆算法,不在服务器端保存数据是不现实的"

不正确。我提到了SHash算法,这种算法早就被应用到身份验证协议中了。所谓的SHash就是把一段需要签名的内容和一组密码一起通过Hash算法(MD5/SHA-1)获得指纹,这样得到得指纹同时具有两个部分的特征。更改其中的一个部分就会造成检验无法通过,但是要重新生成指纹,则必须得到另一部分,而这部分在服务器端,你是拿不到的。因此服务器端只需要一个预设定的密码,就可以处理所有的Cookie签名了,而且使用快速的不可逆算法,根本不会增加负担。


这个……好像扯远了一些…… = =
不,是越扯越远了,你提到SHARH算法保留KEY的时候我才反应过来,怎么开始讨论算法安全性了?
明明开始是讨论COOKIE伪造的可能性来着 - -

恩,来看看通常的伪造方式吧。(还是破坏性思维啊  XD)
大概分为两个部分:1、暴力破解  2、算法破解  3、投机取巧
1、强行碰撞HASH算法,无视所有的KEY以及其他内容…………(爆,这基本上是不可能的,玩MU的例外
2、算法破解,已知你的HASH算法以及KEY,这样的话自己生成自己需要的指纹。(-O-,说实话我讨厌这类看得莫名其妙的术语
3、投机取巧……
  啊,这个才是真正用的最多的啦~

看看COOKIE数据与数据库内数据的分类与验证方式:(算法以及安全性放一边先)
COOKIE明/数据库明 -》 直接验证/签名验证
COOKIE密/数据库明 -》 COOKIE逆运算后对照/数据库运算后对照
COOKIE明/数据库密 -》 COOKIE运算后对照/数据库逆运算后对照/COOKIE运算后与数据库二次运算后算法逻辑对照(这人是BT)
COOKIE密/数据库密 -》 直接验证/双方逆运算对照/双方二次运算对照(也是BT)

可以看出现在大部分使用的是第四类的前面那种验证方式。
就是COOKIE加密内容直接和数据库加密内容对照。(KFC现在就是这种形式。)
投机取巧的伪造方式就是直接得到你的密文,然后伪造。
我完全不用管SHASH算法的KEY内容,以及算法的指纹结果是否正确。
因为我得到的就是数据库内存储的数据(例如SQL注入后得到的PASSWORD、USERNAME等,也许经过了MD5加密,但是我完全不用去管)
我需要知道的是你的密文,而不是算法也不是KEY。
因为提交对照的只是内容。
(也就是说,排除了我在两手空空情况下来强制伪造的情况,这种情况也是很少的,除非特殊目的)
例如这次我伪造你的ID,我只需要通过某种方式得到你的SESSION ID,SESSION PASS,USER ID,MD5签名后的PASSWORD。
然后就可以伪造成功。而关于MD5签名的算法,SESSION PASS的随机算法,和我无关……

解决方法其实也有一些:
就如你说的签名内容中加入IP段,这样伪造的话就难了。
还有一个方法就是采用随机KEY的形式,数据库中加入一个KEY表,对应每个人的COOKIE使用的随机KEY。
不过,这样的话就只能使用一个COOKIE了,解决方法是追加一个多个COOKIE列,用COOKIE中的某个数据(例如0-9)来保证COOKIE列的对应,以读取到正确对应的KEY。(不过这样会增大一些数据库就是了 - -)

PS:远了……远了………………茶


解决这个问题的办法:
1 封装数据库部分,使得无法进行SQL注入。例如完全封装到WebService内。
2 封装核心算法,使用编译了的程序,而不是ASP等解释执行的脚本。
3 对于客户段程序,彻底方式COOKIE,而转用其它的保存方式。
個人站:Secret Nest
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

以下引用zhangmdk在2004-10-8 16:52:30的发言:

不,是越扯越远了,你提到SHARH算法保留KEY的时候我才反应过来,怎么开始讨论算法安全性了?
明明开始是讨论COOKIE伪造的可能性来着 - -

例如这次我伪造你的ID,我只需要通过某种方式得到你的SESSION ID,SESSION PASS,USER ID,MD5签名后的PASSWORD。
然后就可以伪造成功。而关于MD5签名的算法,SESSION PASS的随机算法,和我无关……


算法安全性..........看来你还是缪能理解SHash (不是SHarh)的功能.......Hash算法并不是保证数据的安全的,算法安全更是无从谈起,SHash用的都是公开算法(MD5,SHA-1),不用保证安全,保证的是数据的完整和数据源的正确。

就拿你这次偷我的Cookie冒充我的Session来说吧,如果服务器端需要的内容为:
SESSION ID
SESSION PASS
USER ID
MD5签名后的PASSWORD
(再增加两项)
提交者的IP
SHash以上内容得到的签名

除非同时使用IP欺骗和得到Cookie,你完全无法伪造我的Session了。
因为你的提交IP和我的不同,因此服务器端重新SHash得到的新指纹就和旧的不同,而你也不可能先在客户端生成一个合法的签名,因为只有服务器知道SHash的密文。

BTW,IP欺骗在没有垮子网的情况下可以很困难的实现,在Internet环境下........除非你先干掉从你的机器到服务器一路上所有的路由......
飛べない翼に、意味はあるんでしょうか?
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

彻底放弃Cookie.......Cookie现在还存在于世,是有它的目的地........只要好好利用,是不会有问题的.... -_-
飛べない翼に、意味はあるんでしょうか?
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

以下引用Misha在2004-10-8 23:21:34的发言:
彻底放弃Cookie.......Cookie现在还存在于世,是有它的目的地........只要好好利用,是不会有问题的.... -_-

客户端读取COOKIE比较困难(不是WEB客户),还不如直接去写一个安全的管理文件。
個人站:Secret Nest
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

哦,我忘了你是要开发不基于Web的 ^^ 嘿嘿 那就更简单了,干脆把客户端做成服务,一直在线,可以及时返回别人对自己帖子的回复,多好。
飛べない翼に、意味はあるんでしょうか?
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

服务啊,那样强制性是不是太多了点,而且对98/ME等老用户无法支持了。
個人站:Secret Nest
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

M$ 已经放弃95了,再过两三年就是98 ME了....要从长计议.....
现在流行的就是Service Oriented Programming, 好处多多啊
飛べない翼に、意味はあるんでしょうか?
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

恩,好的。
目前的KFC2的设计是分层进行的。所以说,如果要转换最终实现形式,需要改动的代码量是很少的。不如先做成Windows Application,待到时机成熟再转移到Windows Service或者别的什么技术。
個人站:Secret Nest
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

以下引用Misha在2004-10-8 23:19:23的发言:
就拿你这次偷我的Cookie冒充我的Session来说吧,如果服务器端需要的内容为:
SESSION ID
SESSION PASS
USER ID
MD5签名后的PASSWORD
(再增加两项)
提交者的IP
SHash以上内容得到的签名

除非同时使用IP欺骗和得到Cookie,你完全无法伪造我的Session了。
因为你的提交IP和我的不同,因此服务器端重新SHash得到的新指纹就和旧的不同,而你也不可能先在客户端生成一个合法的签名,因为只有服务器知道SHash的密文。

BTW,IP欺骗在没有垮子网的情况下可以很困难的实现,在Internet环境下........除非你先干掉从你的机器到服务器一路上所有的路由......


签名的确是用来保证数据完整性的,但是我们开始的确在讨论算法如何防止破解与数据伪造方面的内容,这就是算法的安全性了……  = =

以你的例子,那么提交的IP数值是从什么地方提交的呢?是从COOKIE里面提交?还是直接从提交客户端读取?
从COOKIE提交的话,那还是一样的伪造……说白了把你机器里的COOKIE完整COPY过来我就可以用。
从提交客户端读取的话,理论上可以通过修改提交数据包来实现伪造。不过具体的伪造方法貌似需要看程序怎么写了……

而且,这个又涉及到IP段变化后全部COOKIE失效的问题了 - -|||
悼念老陈……
南无阿弥多婆夜 哆他伽多夜 哆地夜他 阿弥利都婆毗 阿弥利哆 悉耽婆毗 阿弥唎哆 毗迦兰帝 阿弥唎哆 毗迦兰多 伽弥腻 伽伽那 枳多迦利 娑婆诃
TOP

回复:[严重警告] 从现在开始不要看MDK的帖子,并安装弹出窗口杀除器....MDK居然

以下引用zhangmdk在2004-10-9 10:37:49的发言:


签名的确是用来保证数据完整性的,但是我们开始的确在讨论算法如何防止破解与数据伪造方面的内容,这就是算法的安全性了……  = =

以你的例子,那么提交的IP数值是从什么地方提交的呢?是从COOKIE里面提交?还是直接从提交客户端读取?
从COOKIE提交的话,那还是一样的伪造……说白了把你机器里的COOKIE完整COPY过来我就可以用。
从提交客户端读取的话,理论上可以通过修改提交数据包来实现伪造。不过具体的伪造方法貌似需要看程序怎么写了……

而且,这个又涉及到IP段变化后全部COOKIE失效的问题了 - -|||




看来你的网络开发经验还是太少......居然会说IP是靠cookie提交的......-_-||||||||||||||||||
IP作为建立网络连接的最基本条件,可以说只要有连接建立,就必然有IP参与,获得客户端的IP简直是容易得不能再容易的事情了。打一个浅显的比方: 现今绝大多是电话都开通了来电显示,你打电话给我,我这里自然而然就显示出了你的电话号码,不用你再报给我一个电话号码.....-_-





"但是我们开始的确在讨论算法如何防止破解与数据伪造方面的内容,这就是算法的安全性了"

.....终于明白你的意思了....不过不要乱用术语, 算法的"安全性"是指算法本身内容的不可知性,对于一个功能就是防止伪造的算法,它的防伪性只能叫做它的"可靠性".





"理论上可以通过修改提交数据包来实现伪造"

这就是我说的IP欺骗嘛。建议你阅读一下相关的文章,你就会明白这有多么困难了。再给你一个简单的说明,我已经说过IP是网络连接的基本条件,有连接数据的传输几乎都是依赖IP进行的。你的主机C要欺骗主机A让它认为你是主机B,需要做的有两件事:
1. 攻击主机B,使其在你欺骗的时间段内无法相应网络请求
2. 伪造主机B的数据包,发送给主机A

要做到1,2都不容易:
首先1要求你能够有进行DoS主机B的条件,或者有掌握主机B的某个和网络相关,可以利用的漏洞;
其次2则要求你首先能够监听网络,获得A-B之间正在进行的连接的数据包。

接下来你需要分析并修改数据包,更改IP报头并猜测其中的递增量,然后发给主机A。但是,因为你是伪造的主机B,是不可能收到主机A的相关回复包的,也就是说到底是对是错,你也不知道,一切全盲。

不过就算这样,在Internet范围内伪造IP进行HTTP通讯也是不可行的,因为:
1. 从你的主机C到主机A有无数个网关和路由,如果正确配置,他们是不会转发一个可疑的IP包的 (比如你的伪造IP包就可疑,因为其IP报文的源地址不对应其子网内任何一台主机)
2. 以上的过程是在A-B连接已经建立的情况下讨论的,而HTTP协议的连接不会持续进行,特别是浏览论坛这种小文件的请求。也就是说,你必须从头到尾伪造主机B与主机A建立连接,而这,基本是不可能的.... (TCP连接的建立需要3次来回的握手,包含有需要互换的信息,而你的伪造主机B是不可能接受到的)

再次,就算你能够成功的实行IP欺骗.......其性质是和单单偷一个cookie完全不同的. -_- 首先你非法监听网络,然后实行了DoS攻击,最后又涉及了信息欺诈,这就是三重罪.......数罪并罚,足够判你20年不准接触任何电脑设备了.....




"这个又涉及到IP段变化后全部COOKIE失效的问题了"

你的IP段一年变化几次?现在网络发展的趋势就是ISP的大规模化和IP的固定化,等IPv6正式应用以后,全球每一颗沙子都会有一个IP(好像有点夸张,不过不是我原创的,据说有理论计算依据),到时候固定IP就是基本条件了。
飛べない翼に、意味はあるんでしょうか?
TOP