2017-08-03 66 views
0

目的: 正如標題所示,我想找回的情況下在Microsoft Windows服務器上運行的進程的命令行參數的監測工具。檢索命令行參數通過WMI由其他用戶擁有的進程(Windows管理規範)

因爲該工具用於監視關鍵系統,也有一些限制(我們不要爭論他們,他們不能更改):

  • 用於監視的協議必須是WMI。
  • 監控工具必須使用專用用戶mon-user
    • 此用戶在任何情況下都不會在機器上獲得(完整)管理員權限;但是,如果需要,可能會授予特定的個人權限。
  • 該工具應當檢索由發起任何用戶,不僅週一用戶(Java)的過程的命令行參數。

進展:當我登錄到監控系統週一用戶,我能夠檢索使用PowerShell的通過週一用戶推出進程的進程名和命令行參數命令Get-WmiObject Win32_Process | Select Name,CommandLine。這顯示所有進程(包括其他用戶啓動的進程)的名稱,但僅顯示由mon-user本身啓動的進程的命令行參數。

當我從啓動進程的用戶帳戶使用相同的命令時,我看到該用戶的進程的命令行參數,但不是mon-user

我無權訪問管理員帳戶,因此我無法驗證管理員是否能夠看到兩個用戶啓動的進程的命令行參數。

問題:從上面的觀察得出的結論是,檢索命令行參數與流程所有權(或各種其他論壇討論中建議的管理權限)相關。我想知道,如果有一些特權,權限或用戶權限,我可以授予mon-user以獲得所需的信息。

在此先感謝您的答覆。

+0

進程命令行是其進程參數中的一個字段。你需要閱讀它的虛擬內存,即'PROCESS_VM_READ'。此權利通常不會被其他用戶進程的自由訪問控制列表(DACL)授予標準用戶。此外,如果進程在高端或系統完整性升級且不允許讀取,則中等完整性的標準用戶進程也將被拒絕讀取訪問。也就是說,具有「SeDebugPrivilege」的帳戶允許讀取大多數其他進程的內存 - 除* * protected *進程外。 – eryksun

+0

如果我理解正確,'SeDebugPrivilege'是用戶權限,可以給予用戶並允許該用戶調試(訪問和修改內存)任何進程;從安全的角度來看,這相當於將該用戶提升爲管理員(從安全的角度來看,這不是)。另一方面,'PROCESS_VM_READ'是一個進程特有的屬性,所以只能在進程運行時才能設置。我想監視的流程是通過不同的流程啓動的;當創建子進程時,是否可以授予'PROCESS_VM_READ'權限給* mon-user *? – Roegel

+0

'SeDebugPrivilege'被認爲是'超級'特權。如果您將此特權授予標準用戶,則登錄將受到UAC限制,並且通常需要提升才能在訪問令牌中實際獲得「SeDebugPrivilege」 - 除非您使用的服務或計劃任務可以登錄用戶擁有「最高特權」。 – eryksun

回答

0

經過一些(管理)工作後,我設法找出了一個解決方案: 作爲我感興趣的流程啓動的一部分(我的團隊可以訪問源代碼),我們實施了對DACL由處理本身給予單用戶附加許可PROCESS_VM_READPROCESS_QUERY_INFORMATION

非常感謝和+1給eryksun的有用評論。

相關問題