Public/ioc.ps1
function Edit-FalconIoc { [CmdletBinding(DefaultParameterSetName = '/iocs/entities/indicators/v1:patch')] param( [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Mandatory = $true, ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Position = 1)] [ValidatePattern('^\w{64}$')] [string] $Id, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 2)] [ValidateSet('no_action', 'allow', 'prevent_no_ui', 'detect', 'prevent')] [string] $Action, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 3)] [ValidateSet('linux', 'mac', 'windows')] [array] $Platforms, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 4)] [ValidateRange(1,256)] [string] $Source, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 5)] [ValidateSet('informational', 'low', 'medium', 'high', 'critical')] [string] $Severity, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 6)] [string] $Description, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 7)] [string] $Filename, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 8)] [array] $Tags, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 9)] [ValidatePattern('^\w{32}$')] [array] $HostGroups, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 10)] [boolean] $AppliedGlobally, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 11)] [ValidatePattern('^(\d{4}-\d{2}-\d{2}|\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)$')] [string] $Expiration, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 12)] [string] $Comment, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 13)] [boolean] $Retrodetects, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:patch', Position = 14)] [boolean] $IgnoreWarnings ) begin { $Fields = @{ AppliedGlobally = 'applied_globally' Filename = 'metadata.filename' HostGroups = 'host_groups' IgnoreWarnings = 'ignore_warnings' } } process { if (!$PSBoundParameters.HostGroups -and !$PSBoundParameters.AppliedGlobally) { throw "'HostGroups' or 'AppliedGlobally' must be provided." } $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = Update-FieldName -Fields $Fields -Inputs $PSBoundParameters Format = @{ Query = @('retrodetects', 'ignore_warnings') Body = @{ root = @('comment') indicators = @('id', 'tags', 'applied_globally', 'expiration', 'description', 'metadata.filename', 'source', 'host_groups', 'severity', 'action', 'platforms') } } } Invoke-Falcon @Param } } function Get-FalconIoc { [CmdletBinding(DefaultParameterSetName = '/iocs/queries/indicators/v1:get')] param( [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:get', Mandatory = $true, Position = 1)] [ValidatePattern('^\w{64}$')] [array] $Ids, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get', Position = 1)] [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get', Position = 1)] [ValidateScript({ Test-FqlStatement $_ })] [string] $Filter, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get', Position = 2)] [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get', Position = 2)] [ValidateSet('action.asc', 'action.desc', 'applied_globally.asc', 'applied_globally.desc', 'metadata.av_hits.asc', 'metadata.av_hits.desc', 'metadata.company_name.raw.asc', 'metadata.company_name.raw.desc', 'created_by.asc', 'created_by.desc', 'created_on.asc', 'created_on.desc', 'expiration.asc', 'expiration.desc', 'expired.asc', 'expired.desc', 'metadata.filename.raw.asc', 'metadata.filename.raw.desc', 'modified_by.asc', 'modified_by.desc', 'modified_on.asc', 'modified_on.desc', 'metadata.original_filename.raw.asc', 'metadata.original_filename.raw.desc', 'metadata.product_name.raw.asc', 'metadata.product_name.raw.desc', 'metadata.product_version.asc', 'metadata.product_version.desc', 'severity_number.asc', 'severity_number.desc', 'source.asc', 'source.desc', 'type.asc', 'type.desc', 'value.asc', 'value.desc')] [string] $Sort, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get', Position = 3)] [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get', Position = 3)] [ValidateRange(1,2000)] [int] $Limit, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get', Position = 4)] [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get', Position = 4)] [int] $Offset, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get', Position = 5)] [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get', Position = 5)] [string] $After, [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get', Mandatory = $true)] [switch] $Detailed, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get')] [Parameter(ParameterSetName = '/iocs/combined/indicator/v1:get')] [switch] $All, [Parameter(ParameterSetName = '/iocs/queries/indicators/v1:get')] [switch] $Total ) process { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = $PSBoundParameters Format = @{ Query = @('ids', 'filter', 'offset', 'limit', 'sort', 'after') } } Invoke-Falcon @Param } } function New-FalconIoc { [CmdletBinding(DefaultParameterSetName = '/iocs/entities/indicators/v1:post')] param( [Parameter(ParameterSetName = 'array', Mandatory = $true, Position = 1)] [ValidateScript({ foreach ($Object in $_) { $Param = @{ Object = $Object Command = 'New-FalconIoc' Endpoint = '/iocs/entities/indicators/v1:post' Required = @('type', 'value', 'action', 'platforms') Content = @('action', 'platforms', 'severity', 'type') Pattern = @('expiration', 'host_groups') Format = @{ host_groups = 'HostGroups' } } Confirm-Parameter @Param } })] [array] $Array, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Mandatory = $true, Position = 1)] [ValidateSet('domain', 'ipv4', 'ipv6', 'md5', 'sha256')] [string] $Type, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Mandatory = $true, Position = 2)] [string] $Value, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Mandatory = $true, Position = 3)] [ValidateSet('no_action', 'allow', 'prevent_no_ui', 'detect', 'prevent')] [string] $Action, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Mandatory = $true, Position = 4)] [ValidateSet('linux', 'mac', 'windows')] [array] $Platforms, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 5)] [ValidateRange(1,256)] [string] $Source, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 6)] [ValidateSet('informational', 'low', 'medium', 'high', 'critical')] [string] $Severity, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 7)] [string] $Description, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 8)] [string] $Filename, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 9)] [array] $Tags, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 10)] [ValidatePattern('^\w{32}$')] [array] $HostGroups, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 11)] [boolean] $AppliedGlobally, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 12)] [ValidatePattern('^(\d{4}-\d{2}-\d{2}|\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)$')] [string] $Expiration, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 13)] [Parameter(ParameterSetName = 'array', Position = 2)] [string] $Comment, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 14)] [Parameter(ParameterSetName = 'array', Position = 3)] [boolean] $Retrodetects, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:post', Position = 15)] [Parameter(ParameterSetName = 'array', Position = 4)] [boolean] $IgnoreWarnings ) begin { $Fields = @{ AppliedGlobally = 'applied_globally' Array = 'indicators' Filename = 'metadata.filename' HostGroups = 'host_groups' IgnoreWarnings = 'ignore_warnings' } } process { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = '/iocs/entities/indicators/v1:post' Inputs = Update-FieldName -Fields $Fields -Inputs $PSBoundParameters Format = @{ Query = @('retrodetects', 'ignore_warnings') Body = @{ root = @('comment', 'indicators') indicators = @('tags', 'applied_globally', 'expiration', 'description', 'value', 'metadata.filename', 'type', 'source', 'host_groups', 'severity', 'action', 'platforms') } } } Invoke-Falcon @Param } } function Remove-FalconIoc { [CmdletBinding(DefaultParameterSetName = '/iocs/entities/indicators/v1:delete')] param( [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:delete', Position = 1)] [ValidatePattern('^\w{64}$')] [array] $Ids, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:delete', Position = 2)] [ValidateScript({ Test-FqlStatement $_ })] [string] $Filter, [Parameter(ParameterSetName = '/iocs/entities/indicators/v1:delete', Position = 3)] [string] $Comment ) process { if ($PSBoundParameters.Filter -or $PSBoundParameters.Ids) { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Inputs = $PSBoundParameters Format = @{ Query = @('ids', 'filter', 'comment') } } Invoke-Falcon @Param } else { throw "'Filter' or 'Ids' must be provided." } } } |