浦东网警
今天我们要聊聊关于会话劫持的话题
想象一下,在现实生活中,你有一张某商场的礼品卡,但是它不幸被偷了!偷卡的人拿着你的礼品卡去商场消费,商场还是会认的。认卡不认人,这就是会话劫持的道理。所谓会话,就是两台主机之间的一次通讯。
例如你远程登录到某台主机
这就是一次Telnet会话
你浏览某个网站
这就是一次HTTP会话
而会话劫持(SessionHijack)
就是结合了嗅探以及欺骗技术在内的攻击手段
(会话劫持示意图)
例如,在一次正常的会话过程当中,攻击者作为第三方参与到其中,
他可以在正常数据包中插入恶意数据;
也可以在双方的会话当中进行监听;
甚至可以是代替某一方主机接管会话。
1
攻击原理
会话劫持利用了TCP/IP工作原理来设计攻击。TCP使用端到端的连接来唯一标识每一条已经建立连接的TCP链路。
TCP会话劫持的攻击方式可以对基于TCP的任何应用发起攻击,如HTTP、FTP、Telnet等。
对于攻击者来说,所要做的就是窥探到正在进行TCP通信的两台主机之间传送的报文,这样攻击者就可以得知该报文的信息。
在合法主机收到另一台合法主机发送的TCP报文前,攻击者根据所截获的信息向该主机发出一个TCP报文,如果该主机先收到攻击报文,就可以把合法的TCP会话建立在攻击主机与被攻击主机之间。
TCP会话劫持攻击方式的好处在于使攻击者避开了被攻击主机对访问者的身份验证和安全认证,从而使攻击者直接进入对被攻击主机的的访问状态,因此对系统安全构成的威胁比较严重。
2
劫持方式
1
会话固定
攻击者访问你的站点并取得你分配给他的SessionID。比如你给的ID是。如果他使用某种手段欺骗其他用户使用同一ID,他就完全接管了用户的账户。Java项目通常通过URL传递sessionID。你可能也看到过某些网站的URL中有JSESSIONID这个参数。URL传递sessionID是实现会话固定最简单的方式。攻击者要做的仅仅是让用户点击一下有JSESSIONID=这个参数的链接。
2
SideJacking
跟中间人攻击类似,攻击者截取用户与服务器(通常通过公共Wi-Fi接入)之间的通信数据。与主动修改请求数据不同,SideJacking攻击是被动监听并记录数据。Cookie在HTTP头部以明文传输,因此攻击者窃取SessionID很容易。
3
跨站脚本攻击
即使使用了HTTPS协议和安全cookie机制,站点仍可能会被会话劫持。会话劫持的第三种方式是XSS跨站脚本攻击。(详见:网络安全涨姿势第4期:基础网络攻防之跨站攻击)
4
恶意代码
会话劫持的最后一种方式跟其他三种有点不一样。攻击者可以利用任何漏洞,注册恶意程序或者获取用户计算机的物理访问权限。这时,攻击者可以直接从文件系统或者内存里面复制SessionID。
3
预防检测
1、更改Session名称
PHP中Session的默认名称是PHPSESSID,此变量会保存在Cookie中,如果攻击者不分析站点,就不能猜到Session名称,阻挡部分攻击。
2、关闭透明化SessionID
透明化SessionID指当浏览器中的Http请求没有使用Cookie来存放SessionID时,SessionID则使用URL来传递。
3、设置HttpOnly
通过设置Cookie的HttpOnly为true,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。
4、关闭phpinfo
关闭所有phpinfo类dumprequest信息的页面。
5、验证HTTP头部信息
在