Public/falconx-sandbox.ps1
function Get-FalconReport { [CmdletBinding(DefaultParameterSetName = '/falconx/queries/reports/v1:get')] param( [Parameter(ParameterSetName = '/falconx/entities/reports/v1:get', Mandatory = $true, Position = 1)] [Parameter(ParameterSetName = '/falconx/entities/report-summaries/v1:get', Mandatory = $true, Position = 1)] [ValidatePattern('^\w{32}_\w{32}$')] [array] $Ids, [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)] [int] $Limit, [Parameter(ParameterSetName = '/falconx/queries/reports/v1:get', Position = 4)] [int] $Offset, [Parameter(ParameterSetName = '/falconx/entities/report-summaries/v1:get', Mandatory = $true)] [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 ) process { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = $PSBoundParameters Format = @{ Query = @('filter', 'offset', 'sort', 'ids', 'limit') } } Invoke-Falcon @Param } } function Get-FalconSubmission { [CmdletBinding(DefaultParameterSetName = '/falconx/queries/submissions/v1:get')] param( [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:get', Mandatory = $true, Position = 1)] [ValidatePattern('^\w{32}_\w{32}$')] [array] $Ids, [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)] [int] $Limit, [Parameter(ParameterSetName = '/falconx/queries/submissions/v1:get', Position = 4)] [int] $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 ) process { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = $PSBoundParameters Format = @{ Query = @('filter', 'offset', 'sort', 'ids', 'limit') } } Invoke-Falcon @Param } } function Get-FalconSubmissionQuota { [CmdletBinding(DefaultParameterSetName = '/falconx/queries/submissions/v1:get')] param() process { $Request = Invoke-Falcon -Endpoint $PSCmdlet.ParameterSetName -RawOutput 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 { [CmdletBinding(DefaultParameterSetName = '/falconx/entities/submissions/v1:post')] param( [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Mandatory = $true, Position = 1)] [ValidateSet('android', 'ubuntu16_x64', 'win7_x64', 'win7_x86', 'win10_x64')] [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)] [string] $SubmitName, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 5)] [ValidateSet('default', 'default_maxantievasion', 'default_randomfiles', 'default_randomtheme', 'default_openie')] [string] $ActionScript, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 6)] [string] $CommandLine, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 7)] [ValidatePattern('^\d{4}-\d{2}-\d{2}$')] [string] $SystemDate, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 8)] [ValidatePattern('^\d{2}:\d{2}$')] [string] $SystemTime, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 9)] [string] $DocumentPassword, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 10)] [ValidateSet('default', 'tor', 'simulated', 'offline')] [string] $NetworkSettings, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 11)] [boolean] $EnableTor, [Parameter(ParameterSetName = '/falconx/entities/submissions/v1:post', Position = 12)] [array] $UserTags ) begin { $Fields = @{ ActionScript = 'action_script' CommandLine = 'command_line' DocumentPassword = 'document_password' EnableTor = 'enable_tor' EnvironmentId = 'environment_id' NetworkSettings = 'network_settings' SubmitName = 'submit_name' SystemDate = 'system_date' SystemTime = 'system_time' UserTags = 'user_tags' } } process { if ($PSBoundParameters.Url -and $PSBoundParameters.Sha256) { throw "Url and Sha256 cannot 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 } } $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = Update-FieldName -Fields $Fields -Inputs $PSBoundParameters 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') } } } Invoke-Falcon @Param } } } function Receive-FalconArtifact { [CmdletBinding(DefaultParameterSetName = '/falconx/entities/artifacts/v1:get')] param( [Parameter(ParameterSetName = '/falconx/entities/artifacts/v1:get', Mandatory = $true, ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Position = 1)] [ValidatePattern('^\w{64}$')] [string] $Id, [Parameter(ParameterSetName = '/falconx/entities/artifacts/v1:get', Mandatory = $true, Position = 2)] [ValidateScript({ if (Test-Path $_) { throw "An item with the specified name $_ already exists." } else { $true } })] [string] $Path ) process { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = $PSBoundParameters Headers = @{ Accept = 'application/octet-stream' } Format = @{ Query = @('name', 'id') } } Invoke-Falcon @Param } } function Remove-FalconReport { [CmdletBinding(DefaultParameterSetName = '/falconx/entities/reports/v1:delete')] param( [Parameter(ParameterSetName = '/falconx/entities/reports/v1:delete', Mandatory = $true, Position = 1)] [string] $Id ) begin { $Fields = @{ Id = 'ids' } } process { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = Update-FieldName -Fields $Fields -Inputs $PSBoundParameters Format = @{ Query = @('ids') } } Invoke-Falcon @Param } } |