이 섹션을 사용하여 rawProcessInfo.json, rawProcessWMIInfo.json, os.json 파일을 생성합니다. 이 스크립트는 Windows 운영 체제 기반 가상 시스템에서 검사 중에 실행되어 프로세스 세부 정보, OS 세부 정보, 네트워크 세부 정보를 수집합니다.

샘플 rawProcessInfo.json 파일

참고:
  • Get-Process -IncludeUserName 명령을 사용하고 JSON 파일로 변환하여 프로세스 세부 정보를 수집할 수 있습니다.
  • 샘플 JSON 파일의 키는 중요합니다.
  • -는 프로세스와 관련된 모든 항목일 수 있습니다.
  • 괄호 <> 문자열을 적절한 값으로 변경합니다. 여기서
    • <number>는 정수 유형
    • <text>는 문자열 유형
    • <boolean>은 true 또는 false
    • <?>는 null일 수도 있음
  • { } 중괄호는 특정 개체를 나타냅니다.

  • [ ] 대괄호는 목록을 나타내며 유사한 개체를 여러 개 포함할 수 있습니다.
[
    {
        "BasePriority":  <number>,
        "ExitCode":  <number>,
        "HasExited":  <boolean>,
        "ExitTime":  <time or null>,
        "Handle":  <number>,
        "SafeHandle":  {
                           "IsInvalid":  <boolean>,
                           "IsClosed":  <boolean>
                       },
        "HandleCount":  <number>,
        "Id": <number>,
        "MachineName":  <string>,
        "MainWindowHandle": <number>,
        "MainWindowTitle":  <string>,
        "MainModule":  {
                           "ModuleName":  <string>,
                           "FileName": <string>,
                           "BaseAddress": <number>,
                           "ModuleMemorySize":  <number>,
                           "EntryPointAddress": <number>,
                           "FileVersionInfo":  <string>,
                           "Site":  null,
                           "Container":  null
                       },
        "MaxWorkingSet":  <number>,
        "MinWorkingSet":  <number>,
        "Modules":  [
			<string>
],
        "NonpagedSystemMemorySize": <number>,
        "NonpagedSystemMemorySize64":  <number>,
        "PagedMemorySize":  <number>,
        "PagedMemorySize64":  <number>,
        "PagedSystemMemorySize":  <number>,
        "PagedSystemMemorySize64":  <number>,
        "PeakPagedMemorySize":  <number>,
        "PeakPagedMemorySize64":  <number>,
        "PeakWorkingSet":  <number>,
        "PeakWorkingSet64":  <number>,
        "PeakVirtualMemorySize":  <number>,
        "PeakVirtualMemorySize64":  <number>,
        "PriorityBoostEnabled":  <boolean>,
        "PriorityClass":  <number>,
        "PrivateMemorySize":  <number>,
        "PrivateMemorySize64":  <number>,
        "PrivilegedProcessorTime":  {
                                        "Ticks":  <number>,
                                        "Days":  <number>,
                                        "Hours":  <number>,
                                        "Milliseconds":  <number>,
                                        "Minutes":  <number>,
                                        "Seconds":  <number>,
                                        "TotalDays": <number>,
                                        "TotalHours": <number>,
                                        "TotalMilliseconds": <number>,
                                        "TotalMinutes":  <number>,
                                        "TotalSeconds":  <number>
                                    },
        "ProcessName":  <string>,
        "ProcessorAffinity":  <number>,
        "Responding":  <boolean>,
        "SessionId":  <number>,
        "StartInfo":  {
                          "Verb":  <number>,
                          "Arguments":  <number>,
                          "CreateNoWindow":  <boolean>,
                          "EnvironmentVariables":  <string>,
                          "Environment": “[<key1>, <value>] [<key2>,<value>]",
                          "RedirectStandardInput": <boolean>,
                          "RedirectStandardOutput": <boolean>,
                          "RedirectStandardError": <boolean>,
                          "StandardErrorEncoding": <string>,
                          "StandardOutputEncoding": <string>,
                          "UseShellExecute":  <boolean>,
                          "Verbs":  <string>,
                          "UserName":  <string>,
                          "Password":  <string>,
                          "PasswordInClearText":  <string>,
                          "Domain":  <string>,
                          "LoadUserProfile":  <boolean>,
                          "FileName": <string>,
                          "WorkingDirectory": <string>,
                          "ErrorDialog": <boolean>,
                          "ErrorDialogParentHandle":  <number>,
                          "WindowStyle": <number>
                      },
        "StartTime":  <string>,
        "SynchronizingObject":  null,
        "Threads":  [
				<string1>,
				<string2>
         		],
        "TotalProcessorTime":  {
                                   "Ticks": <number>,
                                   "Days":  <number>,
                                   "Hours":  <number>,
                                   "Milliseconds":  <number>,
                                   "Minutes":  <number>,
                                   "Seconds":  <number>,
                                   "TotalDays": <number>,
                                   "TotalHours": <number>,
                                   "TotalMilliseconds": <number>,
                                   "TotalMinutes": <number>,
                                   "TotalSeconds": <number>
                               },
        "UserProcessorTime":  {
                                  "Ticks": <number>,
                                  "Days": <number>,
                                  "Hours": <number>,
                                  "Milliseconds": <number>,
                                  "Minutes": <number>,
                                  "Seconds": <number>,
                                  "TotalDays": <number>,
                                  "TotalHours": <number>,
                                  "TotalMilliseconds": <number>,
                                  "TotalMinutes": <number>,
                                  "TotalSeconds": <number>
                              },
        "VirtualMemorySize":  <number>,
        "VirtualMemorySize64":  <number>,
        "EnableRaisingEvents": <boolean>,
        "StandardInput":  null,
        "StandardOutput":  null,
        "StandardError":  null,
        "WorkingSet": <number>,
        "WorkingSet64": <number>,
        "Site":  null,
        "Container":  null,
        "UserName": <string>,
        "Name":  "inetinfo",
        "SI": <number>,
        "Handles": <number>,
        "VM":  <number>,
        "WS":  <number>,
        "PM":  <number>,
        "NPM":  <number>,
        "Path": <string>,
        "Company": <string>,
        "CPU": <number>,
        "FileVersion": <string>,
        "ProductVersion": <string>,
        "Description": <string>,
        "Product": <string>,
        "__NounName": <string>
    },
    {
    ...
    }
]

샘플 rawProcessWMIInfo.json 파일

참고: rawProcessWMIInfo.json 파일은 실행 중인 프로세스에 대한 세부 정보가 포함된 동일한 작업 디렉토리에 있어야 합니다. PowerShell에서 Get-WmiObject -Class Win32_Process 명령을 사용하고 저장하기 전에 JSON 파일로 변환하여 프로세스 세부 정보를 수집할 수 있습니다.
[
    {
        "Scope":  {
                      "IsConnected":  <boolean>,
                      "Options":  "<text>",
                      "Path":  "<text>"
                  },
        "Path":  {
                     "Path":  "<text>",
                     "RelativePath":  "<text>",
                     "Server":  "<text>",
                     "NamespacePath":  "<text>",
                     "ClassName":  "<text>",
                     "IsClass":  <boolean>,
                     "IsInstance":  <boolean>,
                     "IsSingleton":  <boolean>
                 },
        "Options":  {
                        "UseAmendedQualifiers":  <boolean>,
                        "Context":  "",
                        "Timeout":  "<text>"
                    },
        "ClassPath":  {
                          "Path":  "<text>",
                          "RelativePath":  "<text>",
                          "Server":  "<text>",
                          "NamespacePath":  "<text>",
                          "ClassName":  "<text>",
                          "IsClass":  <boolean>,
                          "IsInstance":  <boolean>,
                          "IsSingleton":  <boolean>
                      },
        "Properties":  [
                           "<text>"
                       ],
        "SystemProperties":  [
                                 "<text>"
                             ],
        "Qualifiers":  [
                           "<text>"
                       ],
        "Site":  null,
        "Container":  null,
        "PSComputerName": "<text>",
        "ProcessName":  "<text>",
        "Handles":  <number>,
        "VM":  <number>,
        "WS":  <number>,
        "__GENUS":  <number>,
        "__CLASS":  "<text>",
        "__SUPERCLASS":  "<text>",
        "__DYNASTY":  "<text>",
        "__RELPATH":  "<text>",
        "__PROPERTY_COUNT":  <number>,
        "__DERIVATION":  [
                             "<text>"
                         ],
        "__SERVER":  "<text>",
        "__NAMESPACE":  "<text>",
        "__PATH":  "<text>",
        "Caption":  "<text>",
        "CommandLine":  null,
        "CreationClassName":  "<text>",
        "CreationDate":  "<text>",
        "CSCreationClassName":  "<text>",
        "CSName":  "<text>",
        "Description":  "<text>",
        "ExecutablePath":  null,
        "ExecutionState":  null,
        "Handle":  "<number>",
        "HandleCount":  <number>,
        "InstallDate":  null,
        "KernelModeTime":  <number>,
        "MaximumWorkingSetSize":  null,
        "MinimumWorkingSetSize":  null,
        "Name":  "<text>",
        "OSCreationClassName":  "<text>",
        "OSName":  "<text>",
        "OtherOperationCount":  <number>,
        "OtherTransferCount":  <number>,
        "PageFaults":  <number>,
        "PageFileUsage":  <number>,
        "ParentProcessId":  <number>,
        "PeakPageFileUsage":  <number>,
        "PeakVirtualSize":  <number>,
        "PeakWorkingSetSize":  <number>,
        "Priority":  <number>,
        "PrivatePageCount":  <number>,
        "ProcessId":  <number>,
        "QuotaNonPagedPoolUsage":  <number>,
        "QuotaPagedPoolUsage":  <number>,
        "QuotaPeakNonPagedPoolUsage":  <number>,
        "QuotaPeakPagedPoolUsage":  <number>,
        "ReadOperationCount":  <number>,
        "ReadTransferCount":  <number>,
        "SessionId":  <number>,
        "Status":  null,
        "TerminationDate":  null,
        "ThreadCount":  <number>,
        "UserModeTime":  <number>,
        "VirtualSize":  <number>,
        "WindowsVersion":  "<text>",
        "WorkingSetSize":  <number>,
        "WriteOperationCount":  <number>,
        "WriteTransferCount":  <number>
    }
]

샘플 os.json 파일

참고:
  • os.json 파일은 장치 운영 체제별 세부 정보를 포함하는 동일한 작업 디렉토리에 있어야 합니다. PowerShell에서 (Get-WmiObject -class Win32_OperatingSystem).Caption 명령을 사용할 수 있습니다.
  • 샘플 JSON의 키는 중요합니다.
  • --는 운영 체제와 관련된 모든 항목일 수 있습니다. 예: Windows 2016 Server의 경우 <text>는 Microsoft Windows Server 2016 Standard일 수 있습니다.
{
    "network_detailed": [], 
    "interfaces": [
        "------"
    ], 
    "ipv6": [ 
        "-:----::----:----:----:----"
    ], 
    "ipv4": [
        "---.---.---.---"
    ], 
    "mac_address": {
        "---": "--:--:--:--:--:--"
    }, 
    "os_info": "--------------------------------------"

샘플 socketsOutFile.txt 파일

socketsOutFile.txt 파일은 모든 소켓 관련 정보를 포함하는 동일한 작업 디렉토리에 있어야 합니다. PowerShell에서 (netstat -bano | Out-String) -replace '(?m)^ (TCP|UDP)', '$1' -replace '\r?\n\s+([^\[])', "`t`$1" -replace '\r?\n\s+\[', "`t[" 명령을 사용할 수 있습니다.

Active Connections	Proto  Local Address          Foreign Address        State           PID
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4	Can not obtain ownership information
TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       736	RpcSs	[svchost.exe]
...
참고:
  • 작업에서 로그를 보려면 동일한 작업 디렉토리 아래의 iris-agent.log 파일에 로그를 저장합니다.
  • CPDA는 다음 인수를 허용하는 init powershell 스크립트를 사용하여 실행해야 합니다.
    • -osOutFile os.json
    • -processOutFile rawProcessInfo.json
    • -socketsOutFile socketsOutFile.txt
      예:
      C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
      C:\Windows\Temp\irisAgent\WindowsCollector.ps1 -osOutFile os.json 
      -processOutFile rawProcessInfo.json -socketsOutFile socketsOutFile.txt
  • CPDA는 검사 작업의 일부로 읽을 수 있도록 rawProcessInfo.json, os.json, socketsOutFile.txt를 업데이트해야 합니다.
  • CPDA 파일을 .ZIP 파일로 저장하고 사용자 지정 CPDA 구성을 추가할 수 있습니다.