
A interface de linha de comando do Sigma baseada em pySigma
Esta é a interface de linha de comando do Sigma que utiliza a biblioteca pySigma para gerenciar, listar e converter regras Sigma em linguagens de consulta.
A maneira mais fácil de instalar a CLI do Sigma é via pipx ou pip. Para isso, execute um dos seguintes comandos:
python -m pipx install sigma-cli
python -m pip install sigma-cli
no macOS, utilize
python3 -m pip install sigma-cli
brew install sigma-cli
Outra forma é executar isto a partir do código-fonte num ambiente virtual gerenciado pelo Poetry:
git clone https://github.com/SigmaHQ/sigma-cli.git
cd sigma-cli
poetry install
poetry shell
A CLI está disponível como comando sigma. Uma invocação típica é:
sigma convert -t <backend> -p <processing pipeline 1> -p <processing pipeline 2> [...] <directory or file>
Por exemplo, para converter regras Sigma de criação de processos de um diretório em consultas Splunk para logs do Sysmon, execute:
sigma convert -t splunk -p sysmon sigma/rules/windows/process_creation
Os backends necessários devem ser instalados usando o seguinte comando antes de realizar conversões.
Para listar todos os plugins disponíveis, execute o seguinte comando:
sigma plugin list
Instale um plugin de sua escolha com:
sigma plugin install <backend>
Por exemplo, para instalar o backend splunk, execute:
sigma plugin install splunk
Os backends de conversão e pipelines de processamento disponíveis podem ser listados com sigma list.
Use -O ou --backend-option para passar opções ao backend como pares chave=valor (-O testparam=123) .
Este parâmetro de opção de backend pode ser usado várias vezes (-O first=123 -O second=456).
Os backends podem suportar diferentes formatos de saída, por exemplo, consultas simples e um arquivo que pode ser importado para o sistema de destino. Esses formatos podem ser listados com sigma list formats <backend> e especificados para conversão com a opção -f.
Além disso, um arquivo de saída pode ser especificado com -o.
Exemplo de formatos de saída e arquivos:
sigma convert -t splunk -f savedsearches -p sysmon -o savedsearches.conf sigma/rules/windows/process_creation
Gera um savedsearches.conf do Splunk contendo as pesquisas convertidas.
Para cenários em que você precisa converter várias regras em arquivos separados (por exemplo, para controle de versão ou implantação seletiva), use o parâmetro --output-dir juntamente com --output-filename-template:
sigma convert -t esql -p ecs_windows --output-dir translated_rules/ rules/
Isso criará um arquivo separado para cada regra convertida no diretório translated_rules/.
Variáveis de Template:
{path}: Caminho relativo do diretório de origem (por exemplo, windows para rules/windows/rule.yml){stem}: Nome do arquivo sem extensão (por exemplo, rule para rule.yml){index}: Índice de consulta para regras que geram múltiplas consultas (vazio se houver apenas uma consulta)Exemplos:
Estrutura de saída plana (todos os arquivos em um diretório):
sigma convert -t esql -p ecs_windows --output-dir translated/ --output-filename-template "{stem}.esql" rules/
Preservar a estrutura de diretórios:
sigma convert -t esql -p ecs_windows --output-dir translated/ --output-filename-template "{path}/{stem}.esql" rules/
Lidar com regras com múltiplas consultas:
sigma convert -t esql -p ecs_windows --output-dir translated/ --output-filename-template "{stem}-{index}.esql" rules/
Dada a estrutura de entrada:
rules/
├── windows/
│ └── rule_1.yml
├── linux/
│ └── rule_2.yml
Com --output-filename-template "{path}/{stem}.esql", a saída será:
translated/
├── windows/
│ └── rule_1.esql
├── linux/
│ └── rule_2.esql
Backends e pipelines podem ser integrados adicionando os pacotes correspondentes como dependência com:
poetry add <package name>
Um backend deve ser adicionado ao dict backends em sigma/cli/backends.py criando uma tupla nomeada Backend com os seguintes parâmetros:
sigma list targets).-f) para descrições dos formatos exibidos na lista de formatos (sigma list formats <backend>). Os formatos devem ser suportados pelo backend!A chave do dict é o nome usado no parâmetro -t.
Um pipeline de processamento é definido no dict da variável pipelines em sigma/cli/pipelines.py. A variável contém um ProcessingPipelineResolver que é instanciado com um dict que mapeia identificadores que podem ser usados no parâmetro -p para funções que retornam objetos ProcessingPipeline. O texto descritivo exibido na lista de pipelines (sigma list pipelines) é fornecido pelo atributo name do objeto ProcessingPipeline.
O projeto é atualmente mantido por: