Public/falconx-sandbox.ps1
function Get-FalconReport { <# .SYNOPSIS Search for Falcon X Sandbox reports .DESCRIPTION Requires 'Sandbox (Falcon X): Read'. .PARAMETER Id Report identifier .PARAMETER Filter Falcon Query Language expression to limit results .PARAMETER Sort Property and direction to sort results .PARAMETER Limit Maximum number of results per request .PARAMETER Offset Position to begin retrieving results .PARAMETER Summary Return a summary version .PARAMETER Detailed Retrieve detailed information .PARAMETER All Repeat requests until all available results are retrieved .PARAMETER Total Display total result count instead of results .LINK https://github.com/crowdstrike/psfalcon/wiki/Falcon-X #> [CmdletBinding(DefaultParameterSetName='/falconx/queries/reports/v1:get')] param( [Parameter(ParameterSetName='/falconx/entities/reports/v1:get',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName)] [Parameter(ParameterSetName='/falconx/entities/report-summaries/v1:get',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName)] [ValidatePattern('^\w{32}_\w{32}$')] [Alias('Ids')] [string[]]$Id, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get',Position=1)] [ValidateScript({ Test-FqlStatement $_ })] [string]$Filter, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get',Position=2)] [string]$Sort, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get',Position=3)] [ValidateRange(1,5000)] [int32]$Limit, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get')] [int32]$Offset, [Parameter(ParameterSetName='/falconx/entities/report-summaries/v1:get',Mandatory)] [switch]$Summary, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get')] [switch]$Detailed, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get')] [switch]$All, [Parameter(ParameterSetName='/falconx/queries/reports/v1:get')] [switch]$Total ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Query = @('filter','offset','sort','ids','limit') } } [System.Collections.Generic.List[string]]$List = @() } process { if ($Id) { @($Id).foreach{ $List.Add($_) } } else { Invoke-Falcon @Param -Inputs $PSBoundParameters } } end { if ($List) { $PSBoundParameters['Id'] = @($List | Select-Object -Unique) Invoke-Falcon @Param -Inputs $PSBoundParameters } } } function Get-FalconSubmission { <# .SYNOPSIS Search for Falcon X Sandbox submissions .DESCRIPTION Requires 'Sandbox (Falcon X): Read'. .PARAMETER Id Submission identifier .PARAMETER Filter Falcon Query Language expression to limit results .PARAMETER Sort Property and direction to sort results .PARAMETER Limit Maximum number of results per request .PARAMETER Offset Position to begin retrieving results .PARAMETER Detailed Retrieve detailed information .PARAMETER All Repeat requests until all available results are retrieved .PARAMETER Total Display total result count instead of results .LINK https://github.com/crowdstrike/psfalcon/wiki/Falcon-X #> [CmdletBinding(DefaultParameterSetName='/falconx/queries/submissions/v1:get')] param( [Parameter(ParameterSetName='/falconx/entities/submissions/v1:get',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName)] [ValidatePattern('^\w{32}_\w{32}$')] [Alias('Ids')] [string[]]$Id, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get',Position=1)] [ValidateScript({ Test-FqlStatement $_ })] [string]$Filter, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get',Position=2)] [string]$Sort, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get',Position=3)] [ValidateRange(1,5000)] [int32]$Limit, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get')] [int32]$Offset, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get')] [switch]$Detailed, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get')] [switch]$All, [Parameter(ParameterSetName='/falconx/queries/submissions/v1:get')] [switch]$Total ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Query = @('filter','offset','sort','ids','limit') } } [System.Collections.Generic.List[string]]$List = @() } process { if ($Id) { @($Id).foreach{ $List.Add($_) } } else { Invoke-Falcon @Param -Inputs $PSBoundParameters } } end { if ($List) { $PSBoundParameters['Id'] = @($List | Select-Object -Unique) Invoke-Falcon @Param -Inputs $PSBoundParameters } } } function Get-FalconSubmissionQuota { <# .SYNOPSIS Retrieve monthly Falcon X Sandbox submission quota .DESCRIPTION Requires 'Sandbox (Falcon X): Read'. .LINK https://github.com/crowdstrike/psfalcon/wiki/Falcon-X #> [CmdletBinding(DefaultParameterSetName='/falconx/queries/submissions/v1:get')] param() process { $Request = Invoke-Falcon -Endpoint $PSCmdlet.ParameterSetName -RawOutput -EA 0 if ($Request.Result.Content) { (ConvertFrom-Json ($Request.Result.Content).ReadAsStringAsync().Result).meta.quota } else { throw "Unable to retrieve submission quota. Check client permissions." } } } function New-FalconSubmission { <# .SYNOPSIS Submit a sample to the Falcon X Sandbox .DESCRIPTION Requires 'Sandbox (Falcon X): Write'. 'Sha256' values are retrieved from files that are uploaded using 'Send-FalconSample'. Files must be uploaded before they can be provided to the Falcon X Sandbox. .PARAMETER EnvironmentId Analysis environment .PARAMETER Sha256 Sha256 hash value .PARAMETER Url A webpage or file URL .PARAMETER SubmitName Submission name .PARAMETER ActionScript Runtime script for sandbox analysis .PARAMETER CommandLine Command line script passed to the submitted file at runtime .PARAMETER SystemDate A custom date to use in the analysis environment .PARAMETER SystemTime A custom time to use in the analysis environment .PARAMETER DocumentPassword Auto-filled for Adobe or Office files that prompt for a password .PARAMETER NetworkSetting Network settings to use in the analysis environment .PARAMETER EnableTor Route traffic via TOR .PARAMETER UserTag Tags to categorize the submission .LINK https://github.com/crowdstrike/psfalcon/wiki/Falcon-X #> [CmdletBinding(DefaultParameterSetName='/falconx/entities/submissions/v1:post')] param( [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Mandatory,Position=1)] [ValidateSet('android','ubuntu16_x64','win7_x64','win7_x86','win10_x64',IgnoreCase=$false)] [Alias('environment_id')] [string]$EnvironmentId, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=2)] [ValidatePattern('^\w{64}$')] [string]$Sha256, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=3)] [string]$Url, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=4)] [Alias('submit_name')] [string]$SubmitName, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=5)] [ValidateSet('default','default_maxantievasion','default_randomfiles','default_randomtheme', 'default_openie',IgnoreCase=$false)] [Alias('action_script')] [string]$ActionScript, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=6)] [Alias('command_line')] [string]$CommandLine, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=7)] [ValidatePattern('^\d{4}-\d{2}-\d{2}$')] [Alias('system_date')] [string]$SystemDate, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=8)] [ValidatePattern('^\d{2}:\d{2}$')] [Alias('system_time')] [string]$SystemTime, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=9)] [Alias('document_password')] [string]$DocumentPassword, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=10)] [ValidateSet('default','tor','simulated','offline',IgnoreCase=$false)] [Alias('network_settings','NetworkSettings')] [string]$NetworkSetting, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=11)] [Alias('enable_tor')] [boolean]$EnableTor, [Parameter(ParameterSetName='/falconx/entities/submissions/v1:post',Position=12)] [Alias('user_tags','UserTags')] [string[]]$UserTag ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Body = @{ root = @('user_tags') sandbox = @('submit_name','system_date','action_script','environment_id', 'command_line','system_time','url','document_password','enable_tor','sha256', 'network_settings') } } } } process { if ($PSBoundParameters.Url -and $PSBoundParameters.Sha256) { throw "'Url' and 'Sha256' can not be combined in a submission." } else { $PSBoundParameters.EnvironmentId = switch ($PSBoundParameters.EnvironmentId) { 'android' { 200 } 'ubuntu16_x64' { 300 } 'win7_x64' { 110 } 'win7_x86' { 100 } 'win10_x64' { 160 } } Invoke-Falcon @Param -Inputs $PSBoundParameters } } } function Receive-FalconArtifact { <# .SYNOPSIS Download an artifact from a Falcon X Sandbox report .DESCRIPTION Requires 'Sandbox (Falcon X): Read'. Artifact identifier values can be retrieved for specific Falcon X Sandbox reports using 'Get-FalconReport'. .PARAMETER Path Destination path .PARAMETER Id Artifact identifier .PARAMETER Force Overwrite an existing file when present .LINK https://github.com/crowdstrike/psfalcon/wiki/Falcon-X #> [CmdletBinding(DefaultParameterSetName='/falconx/entities/artifacts/v1:get')] param( [Parameter(ParameterSetName='/falconx/entities/artifacts/v1:get',Mandatory,Position=1)] [string]$Path, [Parameter(ParameterSetName='/falconx/entities/artifacts/v1:get',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName,Position=2)] [ValidatePattern('^\w{64}$')] [string]$Id, [Parameter(ParameterSetName='/falconx/entities/artifacts/v1:get')] [switch]$Force ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Headers = @{ Accept = 'application/octet-stream' } Format = @{ Query = @('name','id') } } } process { #$PSBoundParameters.Path = Assert-Extension $PSBoundParameters.Path '' $OutPath = Test-OutFile $PSBoundParameters.Path if ($OutPath.Category -eq 'ObjectNotFound') { Write-Error @OutPath } elseif ($PSBoundParameters.Path) { if ($OutPath.Category -eq 'WriteError' -and !$Force) { Write-Error @OutPath } else { Invoke-Falcon @Param -Inputs $PSBoundParameters } } } } function Remove-FalconReport { <# .SYNOPSIS Remove a Falcon X Sandbox report .DESCRIPTION Requires 'Sandbox (Falcon X): Write'. .PARAMETER Id Report identifier .LINK https://github.com/crowdstrike/psfalcon/wiki/Falcon-X #> [CmdletBinding(DefaultParameterSetName='/falconx/entities/reports/v1:delete')] param( [Parameter(ParameterSetName='/falconx/entities/reports/v1:delete',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName,Position=1)] [Alias('Ids')] [string]$Id ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Query = @('ids') } } } process { Invoke-Falcon @Param -Inputs $PSBoundParameters } } |