_))
> * _~
`;'__-' _
____ | ) _ _____________________
____ / / `` w w ____________________
____ w w ________________AI_Goat______
______________________________________
Presented by: rootcauz
Aprenda a segurança da IA por meio de uma série de desafios vulneráveis do LLM CTF. Sem inscrições, sem taxas de nuvem, execute tudo localmente em seu sistema.
Muitas empresas começaram a construir software que se integra aos grandes modelos de linguagem (LLMs) de IA devido ao lançamento do ChatGPT e outros mecanismos. Esta explosão de interesse levou ao rápido desenvolvimento de sistemas que reintroduzem velhas vulnerabilidades e impõem novas classes de ameaças menos compreendidas. Muitas equipes de segurança de empresas podem não estar totalmente equipadas para lidar com segurança LLM, pois o campo ainda está amadurecendo com ferramentas e recursos de aprendizagem.
Desenvolvi o AI Goat para aprender sobre o desenvolvimento do LLM e os riscos de segurança que as empresas que o utilizam enfrentam. O formato CTF é uma ótima maneira para os pesquisadores de segurança adquirirem experiência prática e aprenderem como esses sistemas são vulneráveis e podem ser explorados. Obrigado pelo seu interesse neste projeto e espero que você se divirta!
O OWASP Top 10 para aplicativos LLM é um ótimo lugar para começar a aprender sobre ameaças e mitigações de segurança LLM. Eu recomendo que você leia o documento cuidadosamente, pois muitos dos conceitos são explorados no AI Goat e ele fornece um resumo incrível do que você enfrentará nos desafios.
Lembre-se de que um mecanismo LLM envolvido em um aplicativo da web hospedado em um ambiente de nuvem estará sujeito às mesmas ameaças tradicionais de segurança de aplicativos da web e da nuvem. Além destas ameaças tradicionais, os projetos LLM também estarão sujeitos à seguinte lista não abrangente de ameaças:
AI Goat usa o Vicuna LLM que derivou do LLaMA da Meta e foi acoplado aos dados de resposta do ChatGPT. Ao instalar o AI Goat, o binário LLM é baixado do HuggingFace localmente no seu computador. Este binário de aproximadamente 8 GB é o mecanismo de IA em torno do qual os desafios são construídos. O binário LLM essencialmente recebe um "prompt" de entrada e fornece uma saída, "resposta". O prompt consiste em três elementos concatenados em uma string. Esses elementos são: 1. Instruções; 2. Pergunta; e 3. Resposta. O elemento Instruções consiste nas regras descritas para o LLM. Destinam-se a descrever ao LLM como ele deve se comportar. O elemento Question é onde a maioria dos sistemas permite a entrada do usuário. Por exemplo, o comentário inserido em um mecanismo de chat seria colocado no elemento Pergunta. Por último, a seção Resposta prescreve que o LLM dê uma resposta à pergunta.
Uma imagem Docker pré-construída, ai-base, possui todas as bibliotecas necessárias para executar o LLM e os desafios. Este contêiner é baixado durante o processo de instalação junto com o binário LLM. Um docker compose que inicia cada desafio anexa o binário LLM, arquivos de desafio específicos e expõe as portas TCP necessárias para concluir cada desafio. Consulte as seções de instalação e configuração para obter instruções sobre como começar.
Foi preparado um contêiner CTFd opcional que inclui descrição de cada desafio, dicas, categoria e envio de sinalizador. A imagem do contêiner está hospedada em nosso dockerhub e é chamada de ai-ctfd junto com a imagem ai-base. O contêiner ai-ctfd pode ser iniciado em ai-goat.py e acessado usando seu navegador.
sudo apt install git -y
sudo apt install python3-pip -y
sudo usermod -aG docker $USER
reboot
git clone https://github.com/dhammon/ai-goat
cd ai-goat
pip3 install -r requirements.txt
chmod +x ai-goat.py
./ai-goat.py --install
Esta seção espera que você já tenha seguido as etapas Installation
.
O uso do ai-ctfd fornece uma lista de todos os desafios e envio de sinalizadores. É uma ótima ferramenta para usar sozinho ou ao hospedar um CTF. Usá-lo individualmente fornece um mapa dos desafios e ajuda a rastrear quais desafios você completou. Ele oferece envio de sinalizadores para confirmar a conclusão do desafio e pode fornecer dicas que o direcionam na direção certa. O contêiner também pode ser iniciado e hospedado em um servidor interno onde você pode hospedar seu próprio CTF para um grupo de entusiastas da segurança. O seguinte comando inicia o ai-ctfd em segundo plano e pode ser acessado na porta 8000:
./ai-goat.py --run ctfd
Importante: Depois de lançado, você deve criar um usuário cadastrando uma conta de usuário. Este registro permanece local no contêiner e não requer um endereço de e-mail real.
Você pode alterar os sinalizadores no código-fonte dos desafios e depois no CTFD (eles devem corresponder).
ai-goat/app/challenges/1/app.py
e altere o sinalizador na string na linha 12.ai-goat/app/challenges/2/entrypoint.sh
e altere o sinalizador na linha 3../ai-goat.py --run ctfd
e abra o navegador para http://127.0.0.1:8000
) e faça login com o usuário root
usando qVLv27Dsy5WuXRubjfII
como senha.Divirta-se!
Consulte a seção Challenges
para obter uma descrição de cada desafio ou consulte a página da web do ai-ctfd na Step 1
. O seguinte comando lança o primeiro desafio:
./ai-goat.py --run 1
O contêiner do desafio será iniciado em segundo plano e fornecerá instruções sobre como interagir com o desafio. Cada desafio tem uma bandeira, que é um barbante rodeado por chaves. Por exemplo: {eXampl3F!ag}
. Você verifica a sinalização por meio do envio ao desafio do assunto na página ai-ctfd.
Importante: Às vezes, os LLMs constituem o valor do sinalizador, portanto, certifique-se de verificar o sinalizador em ai-ctfd;)
Importante: a resposta do LLM pode levar cerca de 30 segundos
./ai-goat.py --run
. Este comando irá reiniciar o contêiner se ele já estiver em execução.docker container ps
. Para parar um contêiner: docker stop
. O branch principal sempre conterá a versão mais recente. As versões históricas serão mantidas nas respectivas filiais. Instruções de atualização:
cd ai-goat
git pull
pip3 install -r requirements.txt
chmod +x ai-goat.py
./ai-goat.py --install
Importante: o ai-ctfd começará efetivamente do zero, então certifique-se de criar um novo usuário e reenviar/refazer quaisquer desafios anteriores, se desejar.
Ataques de injeção imediata bem-sucedidos influenciam o LLM a responder com informações que não pretendem divulgar. Neste desafio, um chatbot de IA em execução na porta 9001 está armazenando a sinalização como um segredo e foi solicitado a não desistir dela. Você consegue convencer ou enganar o bot para que lhe dê a bandeira?
./ai-goat.py -r 1
LLM01: Injeções imediatas | LLM07: Vazamento de dados
A saída do sistema LLM não deve ser confiável, especialmente quando essa saída é usada em operações downstream, como comandos de sistema operacional ou chamadas de rede. Este desafio tem outro chatbot AI rodando na porta 9002 que responde a uma pergunta do usuário e retorna o título de um site. A entrada do usuário é convertida em uma URL pelo chatbot, onde é usada para solicitar a fonte do site enquanto copia o título. A que mais este chatbot poderia ter acesso à rede?
./ai-goat.py -r 2
LLM02: Tratamento de saída inseguro
A versão mais recente é o branch principal. Você pode encontrar a versão no arquivo CHANGELOG.md
. Ramos são criados para cada versão respectiva.
Motor CTF: CTFD
Arte por: ejm97 em ascii.co.uk
Tecnologia de contêiner de IA: