이것은 imprompter
의 코드베이스입니다. 이는 논문에 제시된 공격을 재현하고 테스트하는 데 필수적인 구성 요소를 제공합니다. 그 위에 자신만의 공격을 생성할 수도 있습니다.
공격자가 당사의 적대적 프롬프트를 사용하여 실제 LLM 제품(Mistral LeChat)에서 사용자의 PII를 유출할 수 있는 방법을 보여주는 스크린캐스트:
더 많은 비디오 데모를 당사 웹사이트에서 찾아보실 수 있습니다. 한편, 이 프로젝트에 관한 멋진 이야기(WIRED, Simon's Blog)를 작성해주신 WIRED의 Matt Burges와 Simon Willison에게 큰 감사를 드립니다!
pip install .
또는 pdm install
(pdm). 가상 환경(예: pdm venv
가 포함된 conda
)을 사용하는 것이 좋습니다.
GLM4-9b
및 Mistral-Nemo-12B
의 경우 48GB VRAM GPU가 필요합니다. Llama3.1-70b
의 경우 3x 80GB VRAM이 필요합니다.
알고리즘을 실행하기 전에 주의가 필요한 두 가지 구성 파일이 있습니다.
./configs/model_path_config.json
시스템에서 Huggingface 모델의 경로를 정의합니다. 이에 따라 이를 수정해야 할 가능성이 높습니다.
./configs/device_map_config.json
다중 GPU에 모델을 로드하기 위한 레이어 매핑을 구성합니다. 3x Nvidia A100 80G GPU에 LLama-3.1-70B를 로드하기 위한 구성을 보여줍니다. 컴퓨팅 환경에 맞게 이를 조정해야 할 수도 있습니다.
예시 실행 스크립트(예: ./scripts/T*.sh
를 따르세요. 각 주장에 대한 설명은 본 논문의 섹션 4에서 확인할 수 있습니다.
최적화 프로그램은 .pkl
파일에 결과를 생성하고 ./results
폴더에 기록합니다. 피클 파일은 실행 중 모든 단계를 업데이트하고 항상 현재 상위 100개의 적대적 프롬프트(손실이 가장 낮음)를 저장합니다. 이는 최소 힙으로 구성되며, 맨 위가 손실이 가장 낮은 프롬프트입니다. 힙의 각 요소 (<loss>, <adversarial prompt in string>, <optimization iteration>, <adversarial prompt in tokens>)
의 튜플입니다. 원래 실행 스크립트에 --start_from_file <path_to_pickle>
인수를 추가하여 언제든지 기존 피클 파일에서 다시 시작할 수 있습니다.
평가는 evaluation.ipynb
를 통해 수행됩니다. 데이터세트 테스트, 측정항목 계산 등에 대한 자세한 지침을 세대별로 따르세요.
한 가지 특별한 경우는 PII prec/recall 지표입니다. pii_metric.py
사용하여 독립형으로 계산됩니다. --verbose
는 디버깅을 위해 각 대화 항목의 전체 PII 세부 정보를 제공하며 웹의 실제 제품에서 결과를 얻을 때 --web
추가해야 합니다.
사용 예(웹 결과가 아닌 경우, 즉 로컬 테스트):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/local_evaluations/T11.json
사용 예(웹 결과, 즉 실제 제품 테스트):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/product_evaluations/N6_lechat.json --web --verbose
우리는 실제 제품(Mistral LeChat 및 ChatGLM)에 대한 테스트 프로세스를 자동화하기 위해 Selenium을 사용합니다. browser_automation
디렉토리에 코드를 제공합니다. 참고로 우리는 Windows 10 및 11의 데스크탑 환경에서만 이것을 테스트했습니다. Linux/MacOS에서도 작동할 것으로 예상되지만 보장되지는 않습니다. 약간의 조정이 필요할 수 있습니다.
사용 예: python browser_automation/main.py --target chatglm --browser chrome --output_dir test --dataset datasets/pii_conversations_rest25_gt.json --prompt_pkl results/T12.pkl --prompt_idx 1
--target
제품을 지정합니다. 현재 chatglm
및 mistral
두 가지 옵션을 지원합니다.
--browser
사용할 브라우저를 정의합니다. chrome
또는 edge
사용해야 합니다.
--dataset
테스트할 대화 데이터세트를 가리킵니다.
--prompt_pkl
프롬프트를 읽을 pkl 파일을 참조하고 --prompt_idx
pkl에서 사용할 프롬프트의 정렬된 인덱스를 정의합니다. 또는 main.py
에서 프롬프트를 직접 정의하고 이 두 가지 옵션을 제공하지 않을 수도 있습니다.
우리는 논문에 제시된 프롬프트(T1-T12)를 얻기 위해 모든 스크립트( ./scripts
)와 데이터세트( ./datasets
)를 제공합니다. 또한, evaluation.ipynb
를 통해 얻은 평가 결과( ./evaluations
)와 복사본을 계속 유지하는 한 각 프롬프트에 대해 pkl 결과 파일( ./results
)도 제공합니다. PII 유출 공격의 경우 교육 및 테스트 데이터 세트에는 실제 PII가 포함되어 있습니다. 공개 WildChat 데이터세트에서 얻은 정보라 하더라도 개인정보 보호 문제로 인해 직접 공개하지 않기로 결정했습니다. 참조용으로 ./datasets/testing/pii_conversations_rest25_gt_example.json
에서 이러한 데이터세트의 단일 항목 하위 집합을 제공합니다. 이 두 데이터세트의 전체 버전을 요청하려면 당사에 문의하세요.
우리는 각각 2024년 9월 9일과 2024년 9월 18일에 Mistral 및 ChatGLM 팀에 공개를 시작했습니다. Mistral 보안팀 구성원은 즉각적으로 대응하고 취약점을 중간 심각도 문제 로 인정했습니다. 그들은 2024년 9월 13일에 외부 이미지의 마크다운 렌더링을 비활성화하여 데이터 유출 문제를 해결했습니다(Mistral 변경 로그에서 확인 확인). 수정 사항이 작동하는 것을 확인했습니다. ChatGLM팀은 다양한 채널을 통해 여러 차례 의사소통을 시도한 후 2024년 10월 18일에 응답하여 작업을 시작했다고 밝혔습니다.
이 작업이 가치 있다고 생각되면 우리 논문을 인용하는 것을 고려해 보십시오.
@misc{fu2024impromptertrickingllmagents, title={즉흥적으로: LLM 상담원을 속여 부적절한 도구 사용을 유도}, 저자={Xiaohan Fu, Shuheng Li, Zihan Wang, Yihao Liu, Rajesh K. Gupta, Taylor Berg-Kirkpatrick 및 Earlence Fernandes}, 연도={2024}, eprint={2410.14923}, archivePrefix={arXiv}, 기본클래스={cs.CR}, URL={https://arxiv.org/abs/2410.14923}, }