
Demonstração de pesquisa de ataques de injeção de prompt indireta para controlar agentes web autônomos baseados em LLM, com ferramentas para otimização de gatilho e avaliação.
Com a onipresença de aplicações integradas a LLMs, investigar possíveis riscos de segurança é crucial. Uma das vulnerabilidades mais significativas nesses sistemas é a suscetibilidade a ataques adversários por meio de injeção indireta de prompt. Neste repositório, mostramos um método pelo qual um ator malicioso poderia gerar um trigger universal permitindo controlar as ações de um agente remoto de navegação web derivado de um LLM. Esperamos que apresentar essas informações ajude profissionais a tomar consciência de sua potencial vulnerabilidade e inspire pesquisadores a desenvolver contramedidas contra ataques dessa natureza.
Após clonar este repositório, os seguintes comandos são necessários para configurar a infraestrutura de navegação web do Browser Gym:
conda create -n browser-gym
conda init
conda activate browser-gym
pip install browsergym-core
playwright install chromium
pip install transformers
Os detalhes podem variar dependendo do ambiente computacional.
Se você estiver interessado em executar um procedimento de otimização de trigger universal, terá que gerar um conjunto de dados de sites e objetivos de navegação web. Isso pode ser feito com os comandos fornecidos pelo arquivo src/actions/mask_dataset.py. Você também precisará criar algumas chaves de API e armazená-las em um ambiente seguro.
pip install python-dotenv e depois touch .envOPENAI_API_KEY=<key>
GOOGLE_API_KEY=<key>
GOOGLE_ENGINE_NAME=<name>
GOOGLE_CX=<engine ID>
python -m src.dataset.actions.make_dataset get_webs até ter um número adequado de arquivos json de sites em sua pasta de dados.python -m src.dataset.actions.make_dataset set_goals para filtrar os jsons de sites bloqueados, rebalancear as classes de sites e enviar um job em lote para a API da OpenAI a fim de gerar objetos de objetivo para os sites restantes. Você deve adicionar a flag --n_batch_splits <int> se tiver mais de 10 mil jsons de sites.set_goals, seus IDs de lote serão impressos no terminal. Execute python -m src.dataset.actions.make_dataset get_goals --batch_ids <batch ID 1> <batch ID 2> ... para gravar os objetos de objetivo nos respectivos jsons de sites, caso os jobs em lote estejam concluídos. Um job em lote pode levar 24 horas para a OpenAI concluir, então talvez seja necessário esperar um dia antes que esse comando seja executado com sucesso.A Demonstração #1 mostra como um atacante poderia hospedar um site com malware incorporado em um link e forçar um agente de navegação web a clicar nesse link toda vez. Um json de site e um trigger para controlar a saída do agente web estão armazenados nas pastas data/ e triggers/, respectivamente.
Executar python -m src.attack.actions.run_demo iniciará um navegador com uma página web de exemplo e uma interface de chat com LLM. O chat do LLM pedirá que você forneça um objetivo para o agente de navegação web. Escreva uma tarefa como "Pesquise um voo para Chicago" na janela. O agente concluirá a tarefa na aba com a página web de exemplo, como esperado.
Execute python -m src.attack.actions.run_demo --trigger_json triggers/zzz_travel_ad_demo_1_trigger_uni_secondary.json para atacar o agente de navegação web nessa tarefa. Um navegador será iniciado com a página web de exemplo e a interface de chat com LLM, como antes, e, como antes, escreva algum objetivo na janela de chat. O processo será idêntico ao do controle, com a única diferença de que o trigger do arquivo zzz_travel_ad_demo_1_trigger_uni_secondary.json será inserido em um link oculto no site. Você verá que, desta vez, o agente web ignora a instrução fornecida por você e clica no anúncio no rodapé!
Para otimizar um trigger adversarial que controle a saída de um agente de navegação web em um site de sua escolha, você pode usar o arquivo find_narrow_trigger.py. Depois de gerar um json de site usando o utilitário de criação de conjunto de dados, você pode inserir o texto '{optim_str}' em algum lugar na ax tree. Isso informa à biblioteca nanogcg que usaremos que você deseja inserir o trigger naquele local do site.
pip install nanogcgpython -m src.attack.actions.find_narrow_trigger. As opções e flags para este utilitário de linha de comando são as seguintes:-h, --help show this help message and exit
--json JSON File and path for the JSON file to find a trigger for.
--target TARGET The desired output when triggered.
--device DEVICE Device to run the model on.
--trigger_length TRIGGER_LENGTH
--include_target, --no-include_target
--loss_fn {cw,mm,ce}
--search_width SEARCH_WIDTH
--top_k TOP_K
--model {mistral-7B,mistral-24B,llama2,llama3}
The model to use for generation.
--dtype DTYPE Data type to use for the model.
Para que o ataque funcione em nosso ambiente, o alvo da sua otimização deve ser uma função no espaço de ações de navegação web do Browser Gym. Consulte o arquivo action_space.txt.
O trigger otimizado será salvo em um arquivo json na pasta triggers/, com o nome do arquivo correspondendo ao json de dados do site acompanhante. Você pode usar esse trigger para executar sua própria demonstração usando o utilitário python -m src.attack.actions.run_demo com as flags apropriadas.