Utilisez cette section pour créer les fichiers rawProcessInfo.json, rawProcessWMIInfo.json et os.json. Ces scripts s'exécutent lors de l'introspection dans une machine virtuelle basée sur le système d'exploitation Windows pour collecter les détails du processus, du SE et du réseau.

Exemple de fichier rawProcessInfo.json

Note :
  • Vous pouvez utiliser la commande Get-Process -IncludeUserName et la convertir en fichier JSON pour collecter les détails du processus.
  • Les clés de l'exemple de fichier JSON sont importantes.
  • - peut être n'importe quel élément spécifique du processus.
  • Modifiez les chaînes entre crochets <> à l'aide des valeurs appropriées, où
    • <number> est de type entier
    • <text> est un type de chaîne
    • <boolean> est vrai ou faux
    • <?> peut également être nul
  • La parenthèse { } correspond à des objets spécifiques

  • Le crochet [ ] correspond à la liste et peut comporter plusieurs objets semblables.
[
    {
        "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>
    },
    {
    ...
    }
]

Exemple de fichier rawProcessWMIInfo.json

Note : Le fichier rawProcessWMIInfo.json doit se trouver dans le même répertoire de travail, qui contient plus de détails sur les processus en cours d'exécution. Vous pouvez utiliser la commande Get-WmiObject -Class Win32_Process dans PowerShell et la convertir dans le fichier JSON avant de l'enregistrer pour collecter les détails du processus.
[
    {
        "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>
    }
]

Exemple de fichier os.json

Note :
  • Le fichier os.json doit se trouver dans le même répertoire de travail, qui contient des détails spécifiques au système d'exploitation du dispositif. Vous pouvez utiliser la commande (Get-WmiObject -class Win32_OperatingSystem).Caption dans PowerShell.
  • Les clés de l'exemple de fichier JSON sont importantes.
  • -- peut être n'importe quel élément spécifique au système d'exploitation. Par exemple : pour Windows Server 2016, <text> peut être Microsoft Windows Server 2016 Standard.
{
    "network_detailed": [], 
    "interfaces": [
        "------"
    ], 
    "ipv6": [ 
        "-:----::----:----:----:----"
    ], 
    "ipv4": [
        "---.---.---.---"
    ], 
    "mac_address": {
        "---": "--:--:--:--:--:--"
    }, 
    "os_info": "--------------------------------------"

Exemple de fichier socketsOutFile.txt

Le fichier socketsOutFile.txt doit se trouver dans le même répertoire de travail, qui contient toutes les informations liées aux sockets. Vous pouvez utiliser la commande (netstat -bano | Out-String) -replace '(?m)^ (TCP|UDP)', '$1' -replace '\r?\n\s+([^\[])', "`t`$1" -replace '\r?\n\s+\[', "`t[" dans PowerShell.

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]
...
Note :
  • Pour afficher les journaux sous la tâche, enregistrez les journaux dans le fichier iris-agent.log sous le même répertoire de travail.
  • Le CPDA doit s'exécuter à l'aide du script PowerShell init qui accepte les arguments suivants :
    • -osOutFile os.json
    • -processOutFile rawProcessInfo.json
    • -socketsOutFile socketsOutFile.txt
      Exemple :
      C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
      C:\Windows\Temp\irisAgent\WindowsCollector.ps1 -osOutFile os.json 
      -processOutFile rawProcessInfo.json -socketsOutFile socketsOutFile.txt
  • Le CPDA doit mettre à jour les fichiers rawProcessInfo.json, os.json et socketsOutFile.txt afin de le lire dans le cadre de la tâche d'introspection.
  • Vous pouvez enregistrer les fichiers CPDA dans un fichier ZIP et ajouter une configuration CPDA personnalisée.