Segurança

A permissão antes do poder.

Um agente que pode ler os seus arquivos, rodar comandos na sua máquina, escrever nos seus bancos de dados e publicar na internet só é seguro se você decidir no que ele toca. Cada ferramenta pertence a uma categoria de permissão; é a categoria — não a ferramenta — que decide o que lhe é perguntado. Três atos nunca podem ser aprovados de antemão, em nenhum modo.

8 categoriasPermissão, não confiança
3 atosPerguntados sempre, mesmo no acesso total
1 chave de assinaturaMantida fora da API pública
O que limita o agente

Quatro coisas separam
um pedido dos seus dados.

Nenhuma delas é o bom senso do modelo. Um modelo que acerta noventa e nove vezes em cem não é um sistema de permissões.

Quatro modos

Perguntar, Auto, Plano, Total. O modo Plano é somente leitura e recusa de saída: entrega o plano e diz para trocar de modo se você quiser que seja executado. Um modo é um teto, não uma sugestão.

Oito categorias

Ler, escrever, rodar um comando, alterar um banco ou um bucket, escrever um registro DNS, enviar uma mensagem, publicar na internet, gastar créditos. Ler nunca pergunta. Uma alteração de banco ou de DNS é perguntada mesmo no modo Auto.

Três que não podem ser pré-aprovados

Enviar uma mensagem a alguém, publicar na internet pública, e gastar créditos em algo que não seja uma chamada de modelo. Perguntados toda vez, inclusive no acesso total — « permitir sempre » não existe para nenhum dos três, porque nenhum pode ser desfeito.

Um teto por resposta

Cada execução carrega um orçamento em créditos. Ela para ao atingi-lo, em vez de deixar você descobrir o custo depois — e uma ferramenta que gasta pergunta antes, independentemente do que o orçamento ainda permita.

Como é construído

Nove mecanismos,
e a razão de cada um.

Escritos a partir do código que os implementa. Quando uma medida tem um limite, o limite está mais abaixo nesta página em vez de ser omitido.

As sessões
Sua chave de API é trocada por uma sessão curta assinada com uma chave de curva elíptica. A API pública guarda apenas a metade pública: pode verificar uma sessão, não criar uma. Comprometida, ela não conseguiria fabricar uma identidade.
Suas credenciais
Uma string de conexão ou uma chave de acesso que você entrega é criptografada em repouso com AES-256-GCM e nunca sai do servidor. Ao agente são mostradas coleções, tabelas e prefixos — nunca as suas chaves. A chave de criptografia é trocada por um script que recriptografa, não editando um arquivo de configuração.
As requisições de saída
Toda URL que o servidor busca é resolvida antes da requisição e recusada se cair num endereço privado, local, link-local ou reservado — antes de tudo o ponto de metadados da nuvem, que entrega tokens de identidade. Esquemas que não são HTTP são recusados, portas de infraestrutura são bloqueadas, e redirecionamentos são seguidos à mão e reverificados, porque senão um redirecionamento contornaria a checagem. Isso importa sobretudo na única ferramenta que segue URLs encontradas no texto de um pedido.
Os erros
Uma falha inesperada responde com uma mensagem genérica e uma referência; o detalhe completo vai para o nosso log sob essa mesma referência. As mensagens que chegam até você — uma conversão que falhou, uma página que não carregou — são limpas de URIs de bancos, credenciais, chaves reconhecíveis, endereços internos, identificadores de projeto na nuvem e caminhos do servidor.
Os uploads
Um nome de arquivo vindo de uma requisição nunca vira um caminho. Ele é reduzido ao último segmento, caracteres reservados são retirados, e o caminho resolvido tem de continuar dentro do diretório de upload ou a escrita é recusada. Cinto e suspensórios, porque a primeira versão dessa checagem não bastava.
Os limites de taxa
Contados sobre o endereço do próprio visitante, e um cabeçalho de encaminhamento só é acreditado se vier de um relé local — configurar o servidor para acreditar em qualquer cliente é recusado na partida. Antes dessa correção todos os visitantes contavam como um único endereço, então vinte senhas erradas de qualquer um travavam o login para todo mundo.
Os deploys
Arquivos de ambiente, diretórios Git e dependências nunca sobem, e o que foi descartado é devolvido com um motivo. Um caminho não pode sair da raiz. O código de servidor de um aplicativo é tirado dos arquivos públicos em vez de ser servido como mais um — deixado dentro, teria publicado o código-fonte do aplicativo no próprio site dele.
Seu e-mail
A chave privada DKIM do seu domínio é criptografada, nunca sai do servidor, e é mantida em vez de regenerada — uma chave nova invalida as assinaturas do correio que você já enviou. As mensagens são assinadas com o seu domínio, não com o nosso. E o HTML de um remetente nunca é renderizado no leitor: ele é reduzido a texto, porque senão qualquer um que lhe escreva poderia rodar script na sua sessão.
Os segredos
Nenhum segredo tem um valor de reserva fixo no código — um que falte interrompe a partida em vez de usar em silêncio um padrão igual em toda parte. A API pública se recusa a iniciar se estiver com uma chave que não lhe cabe ter: é assim que a chave de assinatura fica onde deve.
O que não afirmamos

Quatro coisas que esta página
não está lhe dizendo.

Uma página de segurança que só lista virtudes é um folheto. Estes são os limites que conhecemos.

Não temos nenhuma certificação
Sem SOC 2, sem ISO 27001, sem relatório de teste de intrusão de terceiros. Somos uma empresa pequena e não vamos dar a entender o contrário com um selo. O que podemos oferecer no lugar é o mecanismo — por isso esta página descreve como as coisas funcionam em vez de quem as auditou.
A guarda de URL resolve, ela não fixa
Um endereço é checado antes da requisição, não retido durante toda ela, então um nome que responda diferente um instante depois não fica fechado. Fechar essa porta significa fixar o endereço verificado na hora de conectar, o que nem o cliente HTTP nem o motor de navegador que usamos expõem de forma simples. Preferimos dizê-lo aqui a deixar a guarda parecer absoluta.
Um terminal não é um sandbox
No seu próprio computador o agente roda com os seus direitos, e o pedido de autorização é a proteção — não uma prisão. É exatamente por isso que o modo Plano é somente leitura, que um comando aprovado o é como aquele comando e nada mais amplo, e que a versão em nuvem disso tudo está desligada e não ligada.
Aceito não é entregue
Nosso relé devolve o controle assim que a mensagem entra na fila; o que o provedor do destinatário faz depois nunca nos é informado. Dizemos de qual endereço uma mensagem realmente saiu, e recusamos enviar por um que você não escolheu — mas ninguém pode lhe prometer uma caixa de entrada.
Relatar

Encontrou alguma coisa?
Conte para nós.

Escreva para contact@iagenify.com com « Security » no começo do assunto. Inclua o que você fez, o que viu, e a referência se a plataforma lhe deu uma. Se uma prova de conceito tocou dados, diga de quem — inclusive se eram os seus.

Nós lemos

Uma pessoa, não uma fila. Se for real você saberá o que estamos fazendo a respeito.

Não temos recompensa

Não há pagamento e não vamos fingir o contrário. Dizer isso de cara é mais justo do que deixar você descobrir depois do trabalho.

Não vá além do necessário

Nada de negação de serviço, nem dados de terceiros, nem conta que não seja sua. O suficiente para mostrar, e então pare.

Perguntas

A segurança, em detalhe.

O que o agente pode fazer sem me perguntar?

Ler, delegar a um subagente e escrever as próprias notas. Todo o resto depende da categoria e do modo: escrever um arquivo é livre no Auto, uma alteração de banco ou de DNS é perguntada mesmo ali, e enviar, publicar ou gastar é perguntado toda vez, diga o modo o que disser.

Onde ficam os resultados das ferramentas do agente?

No dispositivo em que o agente rodou. Nosso banco guarda o passo — qual ferramenta, um alvo curto, se funcionou, quanto custou, quanto demorou — e nunca o conteúdo de um resultado. Essa divisão é deliberada: o registro do que aconteceu é útil para você, e o conteúdo dos seus arquivos não é nosso para guardar.

O agente consegue alcançar os seus serviços internos?

Não. A checagem de endereços fica ligada por padrão mesmo em desenvolvimento, e o único lugar em que um fluxo poderia ter sido apontado para um endereço privado tem essa saída desligada por padrão — a API é pública, e uma conveniência de desenvolvimento ali teria deixado qualquer conta ler uma resposta vinda da nossa própria rede.

O que acontece se a minha chave de API vazar?

Troque-a. As chaves são guardadas como hash, não como chave, então não conseguimos lhe mostrar uma de volta — só emitir uma nova e aposentar a antiga. Uma sessão derivada de uma chave é curta e está ligada a uma família de sessões que podemos encerrar.

Vocês têm um programa de recompensas?

Não. Escreva assim mesmo, com « Security » no começo do assunto. Preferimos de longe saber por você.

Isso tudo é auditado?

Por terceiros, não. As checagens são nossas: suítes unitárias sem rede, um script que relê cada limite de um contêiner de dentro do contêiner, outro que cria uma conta descartável e publica um site de verdade antes de apagar tudo o que criou, e mais um que percorre o login de ponta a ponta. Preferimos dizer de quem são essas checagens a deixar a palavra « verificado » fazer o trabalho.