
자율적 LLM 기반 웹 에이전트를 제어하기 위한 간접 프롬프트 인젝션 공격의 연구 데모로, 트리거 최적화 및 평가 도구를 포함합니다.
LLM이 통합된 애플리케이션이 보편화됨에 따라 잠재적인 보안 위험을 조사하는 것이 중요합니다. 이러한 시스템에서 가장 중요한 취약점 중 하나는 간접 프롬프트 인젝션을 통한 적대적 공격에 취약하다는 점입니다. 이 저장소에서 우리는 악의적인 행위자가 LLM에서 파생된 원격 웹 탐색 에이전트의 동작을 제어할 수 있는 범용 트리거를 생성하는 방법을 보여줍니다. 이 정보를 제공함으로써 실무자들이 잠재적인 취약성을 인지하고 연구자들이 이러한 유형의 공격에 대한 보호 장치를 개발하도록 영감을 주기를 바랍니다.
이 저장소를 클론한 후, Browser Gym의 웹 탐색 인프라를 설정하려면 다음 명령어가 필요합니다:
conda create -n browser-gym
conda init
conda activate browser-gym
pip install browsergym-core
playwright install chromium
pip install transformers
세부 사항은 컴퓨팅 환경에 따라 다를 수 있습니다.
범용 트리거 최적화 절차를 실행하려면 웹 사이트 및 웹 탐색 목표 데이터셋을 생성해야 합니다. 이는 src/actions/mask_dataset.py 파일에서 제공하는 명령어로 수행할 수 있습니다. 또한 일부 API 키를 생성하고 안전한 환경에 저장해야 합니다.
pip install python-dotenv를 실행한 후 touch .env를 실행합니다.OPENAI_API_KEY=<키>
GOOGLE_API_KEY=<키>
GOOGLE_ENGINE_NAME=<이름>
GOOGLE_CX=<엔진 ID>
python -m src.dataset.actions.make_dataset get_webs를 실행합니다.python -m src.dataset.actions.make_dataset set_goals를 실행하여 차단된 웹사이트에 대한 json을 필터링하고, 사이트 클래스를 재조정하며, OpenAI API에 배치 작업을 제출하여 남은 웹사이트에 대한 목표 객체를 생성합니다. 웹사이트 json이 10,000개를 초과하는 경우 --n_batch_splits <int> 플래그를 추가해야 합니다.set_goals 명령을 실행하면 배치 ID가 터미널에 출력됩니다. 배치 작업이 완료되면 python -m src.dataset.actions.make_dataset get_goals --batch_ids <배치 ID 1> <배치 ID 2> ...를 실행하여 해당 웹사이트 json에 목표 객체를 기록합니다. OpenAI가 배치 작업을 완료하는 데 최대 24시간이 걸릴 수 있으므로 이 명령이 성공적으로 실행되기까지 하루 정도 기다려야 할 수 있습니다.데모 #1은 공격자가 링크에 악성 코드가 포함된 웹사이트를 호스팅하고 웹 탐색 에이전트가 매번 해당 링크를 클릭하도록 강제하는 방법을 보여줍니다. 웹사이트 json과 웹 에이전트 출력을 제어하는 트리거는 각각 data/ 및 triggers/ 폴더에 저장되어 있습니다.
python -m src.attack.actions.run_demo를 실행하면 샘플 웹 페이지와 LLM 채팅 인터페이스가 있는 브라우저가 실행됩니다. LLM 채팅에서 웹 탐색 에이전트의 목표를 입력하라는 메시지가 표시됩니다. 창에 "시카고行 항공편 검색"과 같은 작업을 작성합니다. 에이전트가 예상대로 샘플 웹 페이지가 있는 탭에서 작업을 완료합니다.
python -m src.attack.actions.run_demo --trigger_json triggers/zzz_travel_ad_demo_1_trigger_uni_secondary.json을 실행하여 이 작업에서 웹 탐색 에이전트를 공격합니다. 이전과 같이 샘플 웹 페이지와 LLM 채팅 인터페이스가 있는 브라우저가 실행되며, 마찬가지로 채팅 창에 목표를 작성하십시오. 프로세스는 통제와 동일하며, 유일한 차이점은 zzz_travel_ad_demo_1_trigger_uni_secondary.json 파일의 트리거가 웹사이트의 숨겨진 링크에 삽입된다는 점입니다. 이번에는 웹 에이전트가 사용자가 제공한 지시를 무시하고 바닥글에 있는 광고를 클릭하는 것을 확인할 수 있습니다!
선택한 웹사이트에서 웹 탐색 에이전트의 출력을 제어하는 적대적 트리거를 최적화하려면 find_narrow_trigger.py 파일을 사용할 수 있습니다. 데이터셋 생성 유틸리티를 사용하여 웹사이트 json을 생성한 후, ax 트리의 특정 위치에 텍스트 '{optim_str}'을 삽입할 수 있습니다. 이는 사용할 nanogcg 라이브러리에 웹사이트의 해당 위치에 트리거를 삽입하려는 의도를 전달합니다.
pip install nanogcg 실행ax_tree 객체에 '{optim_str}'을 삽입합니다.python -m src.attack.actions.find_narrow_trigger를 실행합니다. 이 명령줄 유틸리티의 옵션과 플래그는 다음과 같습니다:-h, --help 도움말 메시지 표시 후 종료
--json JSON 트리거를 찾을 JSON 파일의 경로와 파일명
--target TARGET 트리거될 때 원하는 출력
--device DEVICE 모델을 실행할 장치
--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}
생성에 사용할 모델
--dtype DTYPE 모델에 사용할 데이터 타입
우리 환경에서 공격이 작동하려면 최적화의 대상이 Browser Gym 웹 탐색 작업 공간의 함수여야 합니다. action_space.txt 파일을 참조하십시오.
최적화된 트리거는 triggers/ 폴더에 json 파일로 저장되며, 파일 이름은 해당 웹사이트 데이터 json과 일치합니다. 이 트리거를 사용하여 적절한 플래그와 함께 python -m src.attack.actions.run_demo 유틸리티를 사용하여 자체 데모를 실행할 수 있습니다.