为什么我的程序会发出正在远程更改线程上下文的安全警告?

问题描述 投票:0回答:1

我正在开发一个在 Windows 上运行的 Fortran 应用程序。我们使用 Win32 API 来实现很多功能。特别是,我们大量使用

CreateThread
在后台启动计算量大的子例程,以便用户可以同时与 GUI 进行交互。调用看起来像这样:

my_thread = CreateThread(NULL_SECURITY_ATTRIBUTES,0,LOC(my_subroutine),NULL,0,NULL)

最近,一些用户报告说,每当我们的应用程序运行时,Windows 安全都会向他们发出警告。特别是,它告诉他们“application.exe 远程更改了线程上下文以将代码注入到 application.exe 中”。我不明白为什么会抛出这个警告。

我们使用这些线程类型 API 函数的其他地方是对

CloseHandle
WaitForSingleObject
的调用。我们还有这样的代码:

TYPE (T_STARTUPINFO)         :: sival
TYPE (T_PROCESS_INFORMATION) :: pival

call ZeroMemory(LOC(pival),SIZEOF(pival))
call ZeroMemory(LOC(sival),SIZEOF(sival))
sival%cb          = SIZEOF(sival)
sival%dwFlags     = STARTIF_USESHOWWINDOW
sival%wShowWindow = SW_SHOWNORMAL

iret = CreateProcess(path_to_executable,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,sival,pival)
iret = WaitForSingleObject(pival%hProcess,INFINITE)

我们从未使用过

SuspendThread
WriteProcessMemory
SetThreadContext
等函数。

我们如何导致此安全警告以及如何修复它?这是我们在

NULL_SECURITY_ATTRIBUTES
通话中使用
CreateThread
的问题吗?

我对简单地绕过或抑制警告不感兴趣。我想确保我正在创建一个用户可以信任的安全应用程序。

windows security winapi
1个回答
0
投票

您在 Fortran 应用程序中遇到的安全警告可能是由于您使用

CreateThread
函数创建线程以及使用
NULL_SECURITY_ATTRIBUTES
的方式造成的。以下是该问题的详细信息以及解决方法:

警告原因:

  • 当您将
    NULL_SECURITY_ATTRIBUTES
    CreateThread
    一起使用时,Windows 会分配一个默认安全描述符,该描述符允许对新创建的线程进行完全访问(读、写和执行)。
  • 这种广泛的权限级别会触发安全警告,因为它会引起对潜在代码注入或操纵的担忧。

解决警告:

这里有两种解决此问题的方法:

  1. 指定安全属性:

    不要使用

    NULL_SECURITY_ATTRIBUTES
    ,而是创建一个自定义安全描述符,仅授予线程必要的权限。这涉及使用
    SECURITY_ATTRIBUTES
    结构并设置
    lpSecurityDescriptor
    字段。

    这是一个例子:

    TYPE (SECURITY_ATTRIBUTES), POINTER :: sa
    ALLOCATE(sa)
    
    ! Set up security descriptor with limited access
    InitializeSecurityAttributes(sa)
    ! ... (Configure security descriptor)
    
    my_thread = CreateThread(sa, 0, LOC(my_subroutine), NULL, 0, NULL)
    
    DEALLOCATE(sa)
    

    重要提示:确保安全描述符仅授予线程有效运行所需的最低权限。您可能需要查阅 Windows 安全文档以获取特定权限。

  2. 考虑线程池:

    如果您的应用程序频繁创建和销毁线程,请考虑使用线程池。线程池管理具有定义的安全属性的预先创建的线程池。这种方法减少了每次创建新线程的开销,并避免了单独管理每个线程的安全属性的需要。

其他注意事项:

© www.soinside.com 2019 - 2024. All rights reserved.