이것은 우리의 용지 속삭임과 함께 LLM 통합 시스템의 기밀성을 동반 한 코드 저장소입니다.
LLM (Lange Language Models)은 외부 도구와 상업용 서비스로 LLM 통합 시스템 으로 점점 증가하고 있습니다. 이러한 인터페이스는 모델의 기능을 크게 향상시킬 수 있지만 새로운 공격 표면도 소개합니다. 예를 들어, 조작 된 통합은 모델을 악용하고 다른 인터페이스를 통해 액세스하는 민감한 데이터를 손상시킬 수 있습니다. 이전 연구는 주로 모델의 정렬 또는 교육 데이터의 누출을 목표로하는 공격에 중점을 두었지만 추론 중에 만 사용할 수있는 데이터의 보안은 조사를 피했습니다. 이 작업에서 우리는 외부 구성 요소와 관련된 취약점을 보여주고 LLM- 통합 시스템의 기밀 유지 위험을 평가하기위한 체계적인 접근 방식을 소개합니다. 우리는 이러한 시스템에 고유 한 몇 가지 특정 공격 시나리오를 식별하고 민감한 정보를 보호 할 수있는 모델의 능력을 측정하도록 설계된 도구 로움 프레임 워크로이를 공식화합니다. 이 프레임 워크를 통해 모델의 기밀 공격에 대한 취약성을 평가할 수 있습니다. 우리의 연구 결과에 따르면 모든 검사 모델은 공격에 매우 취약하며 모델이 외부 도구와 함께 사용될 때 위험이 크게 증가합니다.
우리의 작업을 인용하려면이 Bibtex 항목을 사용하십시오.
경고
하드웨어 Aceleration은 Linux를 실행하는 CUDA 머신에 대해서만 완전히 지원됩니다. MacOS의 MP는 다소 작동해야하지만 Cuda가있는 Windows는 몇 가지 문제에 직면 할 수 있습니다.
코드를 실행하기 전에 요구 사항을 설치하십시오.
python -m pip install --upgrade -r requirements.txt
OpenAi 또는 HuggingFace에서 호스팅하는 모델을 사용하려면 OpenAI API 키가 포함 된 key.txt
파일을 모두 만들고 root 디렉토리에 개인 저장소 (예 : LLAMA2)에 대한 HuggingFace 토큰이 포함 된 hf_token.txt
파일을 모두 만듭니다. 프로젝트.
때로는 CLI를 통해 Huggingface 계정에 로그인해야 할 수도 있습니다.
git config --global credential.helper store
huggingface-cli login
모든 스크립트는 Accelerate 라이브러리를 사용하여 여러 GPU/CPU에서 작업 할 수 있습니다. 그렇게하려면 실행 :
accelerate config
시스템의 분산 교육 기능을 구성하고 다음을 사용하여 스크립트를 시작합니다.
accelerate launch [parameters] <script.py> [script parameters]
python attack . py - - strategy "tools" - - scenario "CalendarWithCloud" - - attacks "payload_splitting" "obfuscation" - - defense "xml_tagging" - - iterations 15 - - llm_type "llama3-70b" - - temperature 0.7 - - device cuda - - prompt_format "react"
시나리오 CalendarWithCloud
에서 LLM llama3-70b
에 대한 Payload_splitting 및 obfuscation
사용하여 도구 통합 시스템에서 React Prompt Format을 사용하여 CUDA 장치에서 15 개의 반복을 사용하여 Defense xml_tagging
사용하여 LLM LLAMA3-70B에 대한 payload_splitting
및 난독 화를 실행합니다.
논쟁 | 유형 | 기본값 | 설명 |
---|---|---|---|
-h, --help | - | - | 이 도움말 메시지와 종료를 보여주십시오 |
-a, --attacks | List [str] | payload_splitting | LLM에 활용 될 공격을 지정합니다. |
-d, --defense | str | None | LLM의 방어를 지정합니다 |
-llm, --llm_type | str | gpt-3.5-turbo | 상대의 유형을 지정합니다 |
-le, --llm_guessing | 부 | False | 두 번째 LLM이 정상 응답에서 비밀 키를 추측하는 데 사용되는지 여부를 지정합니다. |
-t, --temperature | 뜨다 | 0.0 | LLM이 무작위성을 제어하기위한 온도를 지정합니다. |
-cp, --create_prompt_dataset | 부 | False | 향상된 시스템 프롬프트의 새로운 데이터 세트를 만들어야하는지 여부를 지정합니다. |
-cr, --create_response_dataset | 부 | False | 새로운 비밀 누출 반응의 새로운 데이터 세트를 만들어야하는지 여부를 지정합니다. |
-i, --iterations | int | 10 | 공격의 반복 수를 지정합니다 |
-n, --name_suffix | str | "" | 사용자 정의 모델을로드하기위한 이름 접미사를 지정합니다. 인수 매개 변수 문자열은 '-'기호로 시작할 수 없으므로 첫 번째 '-'-'-'-'-'는 파서가 자동으로 추가됩니다. |
-s, --strategy | str | None | 공격 전략을 지정합니다 (정상 공격 또는 tools 공격 사용 여부) |
-sc, --scenario | str | all | 도구 기반 공격의 시나리오를 지정합니다 |
-dx, --device | str | cpu | 스크립트를 실행하는 데 사용되는 장치 (CPU, CUDA 또는 MP)를 지정합니다. |
-pf, --prompt_format | str | react | 에이전트에 반응 또는 공구가 결합 된 프롬프트 형식이 사용되는지 여부를 지정합니다. (반응 또는 공구가 결합) |
-ds, --disable_safeguards | 부 | False | 도구 전략에 대한 시스템 프롬프트 보호 장치를 비활성화합니다 |
모델의 이름 지정 규칙은 다음과 같습니다. |
< model_name > - < param_count > - < robustness > - < attack_suffix > - < custom_suffix >
예 : :
llama2 - 7 b - robust - prompt_injection - 0613
사용자 정의 접미사 (예 : 1000epochs
)로 접두사 튜닝 모델에 대한 공격을 실행하려면 다음과 같은 인수를 지정해야합니다.
... - - model_name llama2 - 7 b - prefix - - name_suffix 1000 epochs ...
모델 | 매개 변수 지정자 | 링크 | 인스턴스를 계산합니다 |
---|---|---|---|
GPT-4 (O1, O1-MINI, 터보) | gpt-4o / gpt-4o-mini / gpt-4-turbo | 링크 | Openai API |
라마 2 | llama2-7b / llama2-13b / llama2-70b | 링크 | 지역 추론 |
라마 2 강화 | llama2-7b-robust / llama2-13b-robust / llama2-70b-robust | 링크 | 지역 추론 |
Qwen 2.5 | qwen2.5-72b | 링크 | 지역 추론 (첫 번째 : ollama pull qwen2.5:72b ) |
라마 3.1 | llama3-8b / llama3-70b | 링크 | 국소 추론 (첫 번째 : ollama pull llama3.1/llama3.1:70b/llama3.1:405b ) |
라마 3.2 | llama3-1b / llama3-3b | 링크 | 국소 추론 (첫 번째 : ollama pull llama3.2/llama3.2:1b ) |
라마 3.3 | llama3.3-70b | 링크 | 국소 추론 (첫 번째 : ollama pull llama3.3/llama3.3:70b ) |
반사 라마 | reflection-llama | 링크 | 국소 추론 (첫 번째 : ollama pull reflection ) |
비쿠나 | vicuna-7b / vicuna-13b / vicuna-33b | 링크 | 지역 추론 |
안정 벨루가 (2) | beluga-7b / beluga-13b / beluga2-70b | 링크 | 지역 추론 |
오카 2 | orca2-7b / orca2-13b / orca2-70b | 링크 | 지역 추론 |
아체 | gemma-2b / gemma-7b | 링크 | 지역 추론 |
젬마 2 | gemma2-9b / gemma2-27b | 링크 | 국소 추론 (첫 번째 : ollama pull gemma2/gemma2:27b ) |
PHI 3 | phi3-3b / phi3-14b | 링크 | 로컬 추론 (첫 번째 : ollama pull phi3:mini/phi3:medium ) |
(Finetuned 또는 강력한/경화 LLAMA 모델은 finetuning.py
스크립트를 사용하여 먼저 생성해야합니다. 아래 참조)
공격 | 방어 시설 | ||
---|---|---|---|
이름 | 지정자 | 이름 | 지정자 |
페이로드 분할 | payload_splitting | 랜덤 시퀀스 인클로저 | seq_enclosure |
난처 | obfuscation | XML 태깅 | xml_tagging |
탈옥 | jailbreak | 휴리스틱/필터링 방어 | heuristic_defense |
번역 | translation | 샌드위치 방어 | sandwiching |
chatml 남용 | chatml_abuse | LLM 평가 | llm_eval |
마스킹 | masking | 당황한 탐지 | ppl_detection |
타이로 글리 세포 혈증 | typoglycemia | 프롬프트 가드 | prompt_guard |
적대적인 접미사 | advs_suffix | ||
접두사 주입 | prefix_injection | ||
거절 억제 | refusal_suppression | ||
상황을 무시합니다 | context_ignoring | ||
컨텍스트 종료 | context_termination | ||
컨텍스트 전환 분리기 | context_switching_separators | ||
소수의 샷 | few_shot | ||
인지 해킹 | cognitive_hacking | ||
기본 채팅 | base_chat |
base_chat
공격은 모델 유출 테스트를위한 정상적인 질문으로 구성됩니다. 실제 공격 없이도 상황과 기밀 정보가 있습니다.
이 섹션에서는 가능한 llama finetuning 옵션을 다룹니다. 우리는이 논문을 기반으로하는 PEFT를 사용합니다.
위의 설정 실행에 추가
accelerate config
시스템의 분산 교육 기능을 구성합니다. 그리고
wandb login
WANDB API 키를 사용하여 Finetuning 프로세스의 로깅을 활성화합니다.
첫 번째 FINETUNING 옵션은 LLM에 비밀 키를 안전하게 지시하도록 시스템 프롬프트로 구성된 데이터 세트에 있습니다. 두 번째 FINETUNING 옵션 ( --train_robust
옵션 사용)은 시스템 프롬프트 및 적대 프롬프트를 사용하여 신속한 주입 공격에 대해 모델을 강화하는 것입니다.
python finetuning . py [ - h ] [ - llm | - - llm_type LLM_NAME ] [ - i | - - iterations ITERATIONS ] [ - a | - - attacks ATTACKS_LIST ] [ - n | - - name_suffix NAME_SUFFIX ]
논쟁 | 유형 | 기본값 | 설명 |
---|---|---|---|
-h, --help | - | - | 이 도움말 메시지와 종료를 보여주십시오 |
-llm, --llm_type | str | llama3-8b | Finetune의 LLM 유형을 지정합니다 |
-i, --iterations | int | 10000 | Finetuning의 반복 수를 지정합니다 |
-advs, --advs_train | 부 | False | 적대적인 훈련을 사용하여 Finetuned LLM을 강화합니다 |
-a, --attacks | List [str] | payload_splitting | Finetuning 동안 LLM을 강화하는 데 사용될 공격을 지정합니다. --train_robust 가 true로 설정된 경우에만 효과가 있습니다. 지원되는 공격은 이전 섹션을 참조하십시오 |
-n, --name_suffix | str | "" | FinetUned 모델 이름에 대한 접미사를 지정합니다 |
현재 LLAMA 모델 만 지원됩니다 ( llama2-7/13/70b
/ llama3-8/70b
).
generate_dataset.py
스크립트를 실행하여 LLMS를 사용하여 JSON 파일로 새 시스템 프롬프트를 만듭니다.
논쟁 | 유형 | 기본값 | 설명 |
---|---|---|---|
-h, --help | - | - | 이 도움말 메시지와 종료를 보여주십시오 |
-llm, --llm_type | str | llama3-70b | 시스템 프롬프트 데이터 세트를 생성하는 데 사용되는 LLM을 지정합니다. |
-n, --name_suffix | str | "" | 사용자 정의 모델을 사용하려면 모델 이름에 대한 접미사를 지정합니다. |
-ds, --dataset_size | int | 1000 | 결과 시스템 프롬프트 데이터 세트의 크기 |
실제 도구 시나리오에서 LLM의 기밀성을 테스트하기 위해 Google 드라이브 및 Google Mail 통합에서 LLM을 테스트 할 수있는 가능성을 제공합니다. 그렇게하려면 Google API 자격 증명으로 /various_scripts/llm_mail_test.py
스크립트를 실행하십시오.
경고
LLM이 평가되는지에 대한 평가는 GPU VRAM 및 시간 측면에서 평가가 매우 까다로울 수 있습니다.
메모
결과는 실행마다 약간 다를 수 있습니다. Ollama는 대부분의 LLM을 끊임없이 업데이트하므로 그들의 행동은 변경 될 수 있습니다. 또한 온도가 가장 낮더라도 LLM은 내부 임의성으로 인해 Behvior에서 약간 변동하는 경향이 있습니다.
LLM 양성 질문에 공격 없이도 비밀이 유출되는지 확인할 것입니다.
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks chat_base --defenses None --iterations 100 --device cuda
방어없이 LLM에 대한 모든 공격을 실행합니다. 반복은 중고 공격에 동일하게 분할됩니다. 따라서 중고 공격의 수에 따라 반복 수를 조정해야합니다. (예 : 100 회 반복으로 14 개의 공격에 반복 매개 변수를 1400으로 설정했습니다)
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses None --iterations 100 --device cuda
모든 방어로 LLM에 대한 모든 공격을 실행합니다.
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses all --iterations 100 --device cuda
시스템 프롬프트는 비밀 키와 비밀 키를 누출하지 않도록 LLM에 LLM을 지시하고 비밀 키를 인쇄하라는 간단한 요청을 지시합니다.
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks base_attack --defenses None --iterations 100 --device cuda
React 프레임 워크를 사용하여 공격 및 방어없이 모든 도구 스케나 리오를 실행합니다.
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format ReAct --device cuda
React 프레임 워크를 사용하여 공격 및 방어없이 모든 도구 스케나 리오를 실행합니다.
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
React 프레임 워크를 사용하여 공격 및 방어없이 모든 도구 스케나 리오를 실행합니다.
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
React 프레임 워크를 사용하여 공격 및 방어없이 모든 도구 스케나 리오를 실행합니다.
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses all --iterations 100 --prompt_format tool-finetuned --device cuda
우리의 작업을 인용하려면 다음 Bibtex 항목을 사용하십시오.
@article { evertz-24-whispers ,
title = { {Whispers in the Machine: Confidentiality in LLM-integrated Systems} } ,
author = { Jonathan Evertz and Merlin Chlosta and Lea Schönherr and Thorsten Eisenhofer } ,
year = { 2024 } ,
journal = { Computing Research Repository (CoRR) }
}