Public/falconx-rules.ps1
function Get-FalconRule { <# .SYNOPSIS Search for Falcon X rulesets .DESCRIPTION Requires 'Rules (Falcon X): Read'. .PARAMETER Id Ruleset identifier .PARAMETER Type Ruleset type .PARAMETER Name Ruleset name .PARAMETER Description Ruleset description .PARAMETER Tag Ruleset tag .PARAMETER MinCreatedDate Filter results to those created on or after a date .PARAMETER MaxCreatedDate Filter results to those created on or before a date .PARAMETER Query Perform a generic substring search across available fields .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/Intel #> [CmdletBinding(DefaultParameterSetName='/intel/queries/rules/v1:get',SupportsShouldProcess)] param( [Parameter(ParameterSetName='/intel/entities/rules/v1:get',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName)] [ValidatePattern('^\d{4,}$')] [Alias('Ids')] [string[]]$Id, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Mandatory,Position=1)] [ValidateSet('snort-suricata-master','snort-suricata-update','snort-suricata-changelog','yara-master', 'yara-update','yara-changelog','common-event-format','netwitness',IgnoreCase=$false)] [string]$Type, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=2)] [string[]]$Name, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=3)] [string[]]$Description, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=4)] [Alias('tags')] [string[]]$Tag, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=5)] [Alias('min_created_date')] [int32]$MinCreatedDate, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=6)] [Alias('max_created_date')] [string]$MaxCreatedDate, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=7)] [Alias('q')] [string]$Query, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=8)] [string]$Sort, [Parameter(ParameterSetName='/intel/queries/rules/v1:get',Position=9)] [ValidateRange(1,5000)] [int32]$Limit, [Parameter(ParameterSetName='/intel/queries/rules/v1:get')] [int32]$Offset, [Parameter(ParameterSetName='/intel/queries/rules/v1:get')] [switch]$Detailed, [Parameter(ParameterSetName='/intel/queries/rules/v1:get')] [switch]$All, [Parameter(ParameterSetName='/intel/queries/rules/v1:get')] [switch]$Total ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Query = @('sort','limit','max_created_date','ids','offset','min_created_date','tags', 'name','description','type','q') } } [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 Receive-FalconRule { <# .SYNOPSIS Download the most recent ruleset,or a specific ruleset .DESCRIPTION Requires 'Rules (Falcon X): Read'. .PARAMETER Type Ruleset type, used to retrieve the latest ruleset .PARAMETER Path Destination path .PARAMETER Id Ruleset identifier, used for a specific ruleset .PARAMETER Force Overwrite an existing file when present .LINK https://github.com/crowdstrike/psfalcon/wiki/Intel #> [CmdletBinding(DefaultParameterSetName='/intel/entities/rules-files/v1:get',SupportsShouldProcess)] param( [Parameter(ParameterSetName='/intel/entities/rules-latest-files/v1:get',Mandatory,Position=1)] [ValidateSet('snort-suricata-master','snort-suricata-update','snort-suricata-changelog','yara-master', 'yara-update','yara-changelog','common-event-format','netwitness',IgnoreCase=$false)] [string]$Type, [Parameter(ParameterSetName='/intel/entities/rules-files/v1:get',Mandatory,Position=1)] [Parameter(ParameterSetName='/intel/entities/rules-latest-files/v1:get',Mandatory,Position=2)] [ValidatePattern('\.(gz|gzip|zip)$')] [string]$Path, [Parameter(ParameterSetName='/intel/entities/rules-files/v1:get',Mandatory,ValueFromPipeline, ValueFromPipelineByPropertyName,Position=2)] [int32]$Id, [Parameter(ParameterSetName='/intel/entities/rules-files/v1:get')] [switch]$Force ) begin { $Accept = if ($PSBoundParameters.Path -match '\.(gz|gzip)$') { $PSBoundParameters['format'] = 'gzip' 'application/gzip' } else { 'application/zip' } $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Headers = @{ Accept = $Accept } Format = @{ Query = @('format','id','type') Outfile = 'path' } } } process { $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 } } } } |