Pular para o conteúdo

Operação e conformidade

DevSecOps, cadeia de suprimentos, contêiner, nuvem, testes de segurança, privacidade e LGPD — o que a linguagem gera, o que ela verifica e o que é infraestrutura.

As frentes desta página têm uma coisa em comum: elas não são código da aplicação. São o que roda em volta dele — a esteira, a imagem, o cluster, o processo. A linguagem participa de duas formas: gerando artefato e verificando o que dá para verificar.

DevSecOps: as cinco que reprovam#

dataforge
// A esteira, e o que cada linha cobra
//
//   dataforge check . --strict        nome, aridade, tipo — entre arquivos
//   dataforge lint .                  estilo e higiene
//   dataforge seguranca . --strict    segredo e dez regras (SAST)
//   dataforge test tests/ --minimo=80 suite, com piso de cobertura
//   dataforge devops doctor           o que falta para levar ao ar
//
// E o gancho local, que pega antes de o segredo sair da maquina:
//
//   # .git/hooks/pre-commit
//   dataforge seguranca . --strict || exit 1
SiglaO que éAqui
SASTanálise estática do seu códigodataforge seguranca + check + lint
SCAanálise das dependênciasforge.lock com sha256; dataforge outdated
SBOMinventário do que compõe o artefatodataforge devops sbom
Secret scanningsegredo no repositóriodataforge seguranca, em qualquer tipo de arquivo
DASTteste contra a aplicação rodandonão existe — é uma ferramenta externa (ZAP, Burp)
Fuzzingentrada aleatória em massanão existe como ferramenta; Crucible tem teste por propriedade

Cadeia de suprimentos#

O código que você não escreveu roda com a mesma autoridade do que você escreveu. É hoje um dos vetores mais explorados, e a defesa é chata: saber exatamente o que entrou.

ControleComo aqui
zero dependência no runtimedataforge/ usa só a stdlib do Python — a superfície de terceiros é zero
lockfile lidoinstall instala o que o lock fixa; update é que reescreve
integridade conferidao sha256 do lock é comparado com o que chegou
tarball reprodutívelmtime=0, uid/gid zerados — sem isso o sha256 mudaria a cada empacotamento e a verificação não significaria nada
extração recusa ../ e link simbólicoum pacote não escreve fora da própria pasta
conflito de versão é erroduas cópias em versões diferentes geram bug irreproduzível
assinatura do pacotenão existe — o que há é integridade por hash no lock

Contêiner e nuvem#

dataforge devops gera e sai da frente. Um deploy que falasse com Docker e Kubernetes por dentro esconderia o que a imagem é, e no dia em que alguém precisa mudar uma camada não haveria onde mexer.

No artefato geradoSem ele
USER forgeum escape de contêiner vira root no host
.env no .dockerignoreo segredo fica na camada, e docker history o mostra
o manifesto copiado antes do códigoum commit numa linha reinstala tudo
resources + as duas sondas no Deploymentum pod come o nó; o Service manda tráfego antes da hora
depends_on: service_healthya app falha na primeira consulta, de forma intermitente

Segurança de nuvem e de Kubernetes — IAM, políticas de rede, admission control, varredura de imagem — é configuração da plataforma, e não há nada a implementar numa linguagem. O que a linguagem faz é gerar manifestos que já nascem com o mínimo certo.

Testes de segurança#

dataforge
adopt Arcane.Seguranca as Seg

// Um teste de seguranca e um teste que cobra a RECUSA. O caminho
// feliz ja tem dono; o que ninguem escreve e o outro.
action test_caminho_de_arquivo_nao_sai_da_pasta():
    monitor:
        Seg.caminho_seguro("/tmp/uploads", "../../etc/passwd")
        assert no
    handle UnsafeInputError as e:
        assert yes

action test_o_token_de_um_proposito_nao_serve_a_outro():
    chave := Seg.chave_de_assinatura()
    t := Seg.assinar({"id": 1}, chave, proposito := "confirmar-email")
    monitor:
        Seg.ler_assinado(t, chave, proposito := "trocar-senha")
        assert no
    handle SignatureError as e:
        assert yes

test_caminho_de_arquivo_nao_sai_da_pasta()
test_o_token_de_um_proposito_nao_serve_a_outro()
out "dois testes que cobram a recusa"

Privacidade, LGPD e GDPR#

Segurança pergunta quem pode acessar. Privacidade pergunta se esse dado deveria existir. Um sistema pode ser impecável na primeira e ilegal na segunda.

ObrigaçãoO que ela exigeA peça
minimizaçãonão coletar o que não se usanenhuma ferramenta substitui a decisão de desenho
finalidadeusar só para o que foi declarado
mascaramentolog e relatório sem dado pessoalSeg.mascarar_pii — CPF, CNPJ, cartão com Luhn, e-mail, telefone
retençãoapagar quando o prazo venceCrypto.apagar_seguro; a política é sua
acesso e portabilidadeentregar o que se tem sobre a pessoasua consulta
eliminaçãoapagar a pedidoe nas cópias de segurança também — é aí que quase todo mundo falha
registro de tratamentoprovar o que foi feito`Seg.auditoria`
notificação de incidentecomunicar em prazoprocesso, e não código

Continue em As ferramentas e Detecção.