SV.SIP.VAR

危险函数使用不安全的宏

系统中有若干 Microsoft Windows 函数可使用危险的宏作为参数,让恶意用户可以访问注册表或运行任意命令。CreateService 可以将参数设置为 SERVICE_INTERACTIVE_PROCESS,这可允许恶意用户在高权限模式下使用服务并运行任意命令。

SV.SIP.VAR 检查器可查找其中 CreateService 函数指定 SERVICE_INTERACTIVE_PROCESS 参数的实例。

漏洞与风险

使用 SERVICE_INTERACTIVE_PROCESS 参数将导致不当地放松资源访问权限。此做法将允许攻击者获取权限、访问敏感信息并可能执行多项命令,这可能威胁软件的安全。资源访问应始终使用完成作业所需的最低级别的权限。

缓解与预防

应该检查这些被标记出的漏洞,并且将所标识的参数替换为更安全的宏或代码(这些宏或代码会确保强制实施更低级别的特权)。

漏洞代码示例

复制
 SC_HANDLE foo(SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPCTSTR lpDisplayName,
               DWORD dwDesiredAccess, DWORD dwStartType, DWORD dwErrorControl, 
               LPCTSTR lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, 
               LPCTSTR lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword)
 {
    DWORD dwServiceType = SERVICE_INTERACTIVE_PROCESS;
    return CreateService(hSCManager, lpServiceName, lpDisplayName,
                         dwDesiredAccess, dwServiceType,
                         dwStartType, dwErrorControl, 
                         lpBinaryPathName, lpLoadOrderGroup, lpdwTagId, 
                         lpDependencies, lpServiceStartName, lpPassword);
 }

在第 7 行报告了缺陷,指出函数 CreateService 正在将宏 SERVICE_INTERACTIVE_PROCESS 用作其所需的访问参数。使用此宽松型访问权限宏将导致代码漏洞,该漏洞可能造成攻击者对软件的安全性带来威胁。应检查该问题,并且 SERVICE_INTERACTIVE_PROCESS 应替代为更安全的宏或可确保使用较低权限的代码。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。