Pular para o conteúdo principal

Referência do moatgator.yml

O moatgator.yml é a sua política de proteção como código. Ele fica no seu repositório, passa por revisão como qualquer outro arquivo e é validado pelo CLI, pelo console, pela API e pelo GitHub App com as mesmas regras.

Suporte no editor​

Coloque isto na primeira linha para ter autocompletar e erros no próprio editor, no VS Code (extensão YAML da Red Hat) ou no IntelliJ:

# yaml-language-server: $schema=https://api.moatgator.com/v1/schema/moatgator.json

Uma cópia do schema é publicada junto destas docs em /schema/moatgator.schema.json.

Um exemplo completo​

moatgator.yml
version: 1
extends: moatgator:recommended

app:
android: { package: com.acme.pay }
ios: { bundleId: com.acme.pay }

shield: { strings: true, assets: true, names: true }

runtime:
root: block
hooking: terminate
overlay: block_sensitive_screens

attest: { enabled: true }

pulse:
alerts:
slack: "#security"

network:
pinning:
pins:
- sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
- sha256/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=

# Valores que valem só para um ambiente. Eles vencem tudo o que está acima.
env:
staging:
runtime: { root: monitor, hooking: warn }

Chaves​

ChaveTipoO que faz
version1Versão do contrato. Hoje é sempre 1.
extendsperfil ou lista de até 3Perfil(is) de partida. Aplicados em ordem.
app.android.packagestringNome do pacote Android, por exemplo com.acme.pay.
app.ios.bundleIdstringBundle id do iOS. Só letras, dígitos, hífens e pontos (sem sublinhado).
shield.stringsbooleanoCifrar strings sensíveis.
shield.assetsbooleanoProteger os assets embutidos.
shield.namesbooleanoOfuscar nomes de classes, métodos e campos.
runtime.<detecção>respostaUma resposta por detecção.
attest.enabledbooleanoLigar a atestação de integridade do aparelho e do app.
pulse.alerts.slackstringCanal do Slack (#canal) que recebe os alertas.
network.pinningbooleano ou objetotrue ou false para ligar ou desligar o certificate pinning, ou um objeto com os pins.
network.pinning.pinslista de sha256/…Impressões digitais SHA-256 das chaves públicas que você aceita. Inclua um pin de reserva.
env.<production|staging|development>objetoSobrescritas para um ambiente. Aceita shield, runtime, attest, pulse e network.

É obrigatório ter pelo menos um entre app.android.package e app.ios.bundleId. Chaves desconhecidas são erros (um erro de digitação nunca desliga a proteção em silêncio).

Respostas​

RespostaSignificado
monitorSó reporta. O app não toma nenhuma ação.
warnReporta o evento como aviso. O usuário não é bloqueado.
blockRecusa a ação sensível.
block_sensitive_screensBloqueia só as telas que você marcar como sensíveis (pagamento, login). Pensada para as detecções de telas de pagamento.
terminateEncerra a sessão. end_session é a mesma resposta com outro nome.

Tudo o que você não listar fica em monitor. Uma detecção ou um recurso novo nunca bloqueia nada até você pedir.

O que o seu plano permite​

O plano define quais respostas e detecções você pode usar. O plano gratuito (Hatchling) permite monitor e warn; os planos pagos acrescentam block e terminate. As cinco detecções básicas (root, emulator, debugger, hooking, tamper) estão em todos os planos; as quatro detecções de tela de pagamento começam no Scale. Uma política que pede mais do que o plano permite é recusada, com uma mensagem dizendo qual plano você precisa; monitor é sempre permitido, então um arquivo gerado com todas as chaves em monitor serve em qualquer plano. Se você reduzir o plano, as entradas acima do novo plano voltam para monitor (o console avisa antes de você confirmar). Os limites atuais estão na página de preços.

Perfis​

Perfilrootemulatordebuggerhookingtamperoverlay, a11y, capture, remote_access
moatgator:recommendedwarnmonitorwarnblockblockmonitor
moatgator:strictblockblockblockterminateterminatemonitor
moatgator:pix-shieldwarnmonitorwarnblockblockblock_sensitive_screens

Ordem de aplicação: os perfis (na ordem do extends), depois o runtime do arquivo e por fim o env pedido.

Ambientes​

Para o ambiente que você nomear, os valores de env.<nome> vencem os do nível de cima; qualquer outro ambiente usa o nível de cima. Um padrão comum é afrouxar o staging e manter o production rígido.

Validar​

npx moatgator validate # moatgator.yml na pasta atual
npx moatgator validate path/to/moatgator.yml --json

Cada erro mostra o arquivo, a linha, a coluna e o caminho da chave. Nos pull requests, o check da Moatgator anota os mesmos erros nas linhas alteradas e lista as mudanças de política em linguagem simples, marcando cada uma como mais rígida ou mais frouxa.

Estado

O motor ainda não aplica esta política a um pacote protegido (prévia). O arquivo é validado, versionado, comparado e guardado hoje. Veja limites e garantias.