
Buscar segredos em volumes EBS expostos
Dufflebag é uma ferramenta que busca em snapshots públicos do Elastic Block Storage (EBS) por segredos que podem ter sido deixados acidentalmente. Você pode se surpreender com todas as senhas e segredos apenas abandonados por aí!
A ferramenta é organizada como uma aplicação Elastic Beanstalk ("EB", não confundir com EBS) e definitivamente não funcionará se você tentar executá-la em sua própria máquina.
Dufflebag tem muitas partes móveis porque é bastante não trivial ler volumes EBS na prática. Você precisa estar em um ambiente AWS, clonar o snapshot, criar um volume a partir do snapshot, anexar o volume, montar o volume, etc... É por isso que foi feito como uma aplicação Elastic Beanstalk, para que possa escalar automaticamente para cima ou para baixo conforme desejar, e para que tudo possa ser facilmente desmontado quando terminar.
Apenas fique de olho no seu console AWS para garantir que nada esteja dando errado e acumulando contas. Tentamos pensar em todas as contingências e fornecer tratamento de erros... mas você foi avisado!
Você precisará adicionar algumas permissões adicionais do AWS IAM à função: aws-elasticbeanstalk-ec2-role. Alternativamente, você pode criar uma nova função com essas permissões e configurar o EB para usar essa função, mas é um pouco mais complicado. Em qualquer caso, você precisará adicionar:
A aplicação central é escrita em Go, então você precisará de um compilador Golang. Mas a aplicação EB é na verdade construída em um arquivo .zip (é assim que o EB funciona), então o makefile gerará um zip para você.
Verifique sua região. O Dufflebag só pode operar em uma região AWS por vez. Se quiser pesquisar em todas as regiões, terá que implantar essa quantidade de instâncias. Para alterar a região, altere o conteúdo do arquivo de código-fonte region.go.
Instalar dependências: Ubuntu 18.04 x64:
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
Agora você deve ver um arquivo dufflebag.zip no diretório raiz do projeto.
dufflebag. Os nomes dos buckets S3 precisam ser globalmente únicos, então provavelmente você precisará de algum sufixo que seja um monte de letras aleatórias ou algo assim.Vá para o console AWS e encontre a opção de menu Elastic Beanstalk. Isso provavelmente também é possível via CLI, mas esta descrição usará o console. Selecione Actions -> Create Environment.

Em seguida, na próxima janela, escolha Worker environment e clique em Select.

Na próxima janela, escolha Preconfigured -> Go para a Platform.

Em Application Code, escolha Upload your Code.

Clique no botão Upload e selecione o dufflebag.zip que você acabou de construir.

Finalmente, clique em Create Environment para começar.
Levará alguns minutos para a AWS criar todas as coisas e iniciar. Uma vez criado, o Dufflebag começará imediatamente. Não é necessário fazer mais nada.
Depois de ter isso funcionando, você pode tentar novamente com a válvula de segurança removida. Por padrão, o Dufflebag pesquisa apenas 20 snapshots EBS. (Para que não saia do controle na sua primeira tentativa) Para ampliar a pesquisa para toda a região, vá para populate.go, remova a seguinte linha de código e reconstrua:
//#####################################################################
//#### Safety Valve ####
//#### Remove this line of code below to search all of your region ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
Uma das razões pelas quais o Dufflebag foi projetado como uma aplicação Elastic Beanstalk é para que você possa escalar o programa automaticamente para cima ou para baixo facilmente. Por padrão, ele será executado em apenas uma instância e será bastante lento. Mas se você quiser turbiná-lo um pouco, ajuste o escalonamento automático no Elastic Beanstalk. As opções completas disso estão um pouco fora do escopo deste documento, então deixarei você brincar com elas. Mas na prática, descobri que um simples gatilho de uso de CPU funciona muito bem.
Ao configurar o ambiente acima, você encontrará as opções no botão Configure more options (em vez de clicar em Create environment) e depois clique em Scaling.

O Dufflebag copiará quaisquer arquivos interessantes para o bucket S3 que você criou anteriormente. (Tecnicamente, o Dufflebag usará o primeiro bucket S3 que encontrar cujo nome comece com "dufflebag".)
Você pode simplesmente observar os arquivos chegarem um a um em seu bucket S3. Eles serão nomeados:
originalfilename_blake3sum_volumeid
Se tudo estiver indo bem, você não deve precisar ler os logs. Mas apenas por precaução, o Elastic Beanstalk permite que aplicativos escrevam em arquivos de log enquanto são executados, e estes são capturados navegando até a aba Logs. Em seguida, clique em Request Logs e Last 100 Lines. Isso fornecerá o lote mais recente de logs do Dufflebag. Clique no botão Download para lê-lo. Este arquivo conterá vários outros logs do sistema, mas a parte do Dufflebag está em "/var/log/web-1.log" no topo.
Para ver o histórico completo de logs, selecione Full Logs em vez de Last 100 Lines. (Observe que o EB irá rotacionar os logs de forma bastante agressiva por padrão)
Além disso, você pode ter uma noção do progresso geral observando a fila SQS do ambiente. Ambientes de trabalho do Elastic Beanstalk usam SQS para gerenciar o fluxo de trabalho. Cada mensagem na fila do Dufflebag representa um volume EBS a ser processado:

A coluna Messages Available mostra quantos volumes ainda não foram processados. A coluna Messages in Flight mostra quantos volumes estão sendo processados no momento.
O Dufflebag é programado para buscar coisas que achamos que provavelmente seriam 'interessantes'. Chaves privadas, senhas, chaves AWS, etc... Mas e se você realmente quiser buscar algo específico para VOCÊ? Como, talvez você trabalhe para bank.com e gostaria de ver o que existe por aí que referencia bank.com.
Fazer isso exigirá uma pequena quantidade de modificação no código do Dufflebag, mas não muito. Não se preocupe! A lógica do que procurar acontece em inspector.go. A função pilfer() é uma goroutine que lida com a inspeção de um arquivo. O código lá pode parecer um pouco intimidador no início, mas aqui está o que ele está fazendo. (E como você pode modificá-lo sem muita dificuldade)
Listas negras de nomes de arquivos:
blacklist_exact)blacklist_contains)blacklist_prefix)Você pode modificar a lógica de pesquisa aqui facilmente apenas alterando o que está nessas três listas. Embora eu recomende em geral deixá-las intactas. Essas listas negras foram projetadas para cobrir arquivos chatos que estão presentes em muitos sistemas de arquivos e evitam que o Dufflebag precise inspecionar em profundidade cada arquivo em toda a AWS. Dados sensíveis que você está procurando PODEM estar nesses arquivos... mas provavelmente não.
Lista branca de nomes de arquivos:
IsSensitiveFileName() verifica o nome do arquivo em relação a uma expressão regular que encontra nomes de arquivos sensíveis. (Como /etc/shadow, bash_history, etc...)Conteúdos do arquivo:
checkContentsRegex() verifica o conteúdo do arquivo em relação a um conjunto de expressões regulares. (O argumento de entrada do arquivo é linha por linha, então a entrada para esta função é uma linha de um arquivo, não o arquivo inteiro.) Então, para procurar palavras-chave relacionadas à sua organização, basta alterar as expressões regulares dentro de checkContentsRegex().