모듈형 LLM 취약점 스캐너로, 정적, 동적 및 적응형 프로브를 사용하여 여러 모델 제공업체에서 환각, 데이터 유출, 프롬프트 인젝션, 탈옥 및 유해성을 탐지합니다.
생성형 AI 레드팀 및 평가 키트
garak은 LLM 기반 애플리케이션이 우리가 원하지 않는 방식으로 실패하게 만들 수 있는지 확인합니다. garak은 환각, 데이터 유출, 프롬프트 인젝션, 허위 정보, 독성 생성, 탈옥(jailbreak) 및 기타 여러 취약점을 탐지합니다. nmap이나 msf / Metasploit Framework를 알고 있다면, garak은 이들과 다소 유사한 작업을 수행하지만 LLM을 대상으로 합니다.
garak은 LLM이나 대화 시스템이 실패하게 만드는 방법에 초점을 맞춥니다. 정적, 동적, 적응형 프로브를 결합하여 이를 탐구합니다.
garak은 무료 도구입니다. 우리는 이 도구를 개발하는 것을 좋아하며 애플리케이션을 지원하는 기능을 추가하는 데 항상 관심이 있습니다.
현재 지원:
garak은 명령줄 도구입니다. Linux와 OSX에서 개발되었습니다.
pip를 사용한 표준 설치PyPI에서 가져오면 바로 사용할 수 있습니다:
python -m pip install -U garak
pip로 개발 버전 설치garak의 표준 pip 버전은 주기적으로 업데이트됩니다. GitHub에서 더 최신 버전을 받으려면 다음을 시도하세요:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
garak은 자체적인 종속성을 가지고 있습니다. garak을 자체 Conda 환경에 설치할 수 있습니다:
conda create --name garak "python>=3.11,<=3.14"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
좋습니다, 문제없이 진행되었다면 이제 준비가 된 것입니다!
참고: NVIDIA GitHub 조직으로 이전하기 전에 클론했지만 지금 github.com/NVIDIA URI에서 이 문서를 읽고 있다면, 다음과 같이 원격 저장소를 업데이트하세요:
git remote set-url origin https://github.com/NVIDIA/garak.git
일반적인 구문은 다음과 같습니다:
garak <options>
garak는 스캔할 모델을 알아야 하며, 기본적으로 해당 모델에 대해 알고 있는 모든 프로브를 각 프로브가 권장하는 취약점 탐지기와 함께 시도합니다. 프로브 목록은 다음을 사용하여 확인할 수 있습니다:
garak --list_probes
생성기를 지정하려면 --target_type 옵션과 선택적으로 --target_name 옵션을 사용합니다. 모델 유형은 모델 패밀리/인터페이스를 지정하고, 모델 이름은 사용할 정확한 모델을 지정합니다. 아래의 "생성기 소개" 섹션에서는 지원되는 생성기 중 일부를 설명합니다. 간단한 생성기 패밀리로는 Hugging Face 모델이 있으며, 이를 로드하려면 --target_type을 huggingface로, --target_name을 Hub에서의 모델 이름(예: "RWKV/rwkv-4-169m-pile")으로 설정합니다. 일부 생성기는 API 키를 환경 변수로 설정해야 할 수 있으며, 필요한 경우 이를 알려줍니다.
garak는 기본적으로 모든 프로브를 실행하지만, 이를 구체적으로 지정할 수도 있습니다. 예를 들어 --spec probes.promptinject는 PromptInject 프레임워크의 메서드만 사용합니다. 플러그인 패밀리 대신 특정 플러그인 하나를 지정하려면 . 뒤에 플러그인 이름을 추가하면 됩니다. 예를 들어 --spec probes.lmrc.SlurUsage는 Language Model Risk Cards 프레임워크를 기반으로 모델이 비하 발언을 생성하는지 확인하는 구현을 사용합니다.
도움과 영감을 얻으려면 Twitter 또는 discord에서 저희를 찾아주세요!
인코딩 기반 프롬프트 인젝션에 대해 상용 모델을 프로브합니다 (OSX/*nix) (예시 값을 실제 OpenAI API 키로 교체하세요)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
Hugging Face 버전의 GPT2가 DAN 11.0에 취약한지 확인하세요
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
로드된 각 프로브에 대해 garak은 생성하는 동안 진행 표시줄을 출력합니다. 생성이 완료되면 각 탐지기에서 해당 프로브의 결과를 평가하는 행이 표시됩니다. 프롬프트 시도 중 하나라도 바람직하지 않은 동작을 보이면 응답은 FAIL로 표시되고 실패율이 제공됩니다.
다음은 GPT-3 변형에서 encoding 모듈을 사용한 결과입니다:

그리고 ChatGPT에 대한 동일한 결과입니다:

더 최근 모델이 인코딩 기반 주입 공격에 훨씬 더 취약하다는 것을 알 수 있으며, text-babbage-001은 quoted-printable 및 MIME 인코딩 주입에만 취약한 것으로 나타났습니다. 각 행 끝의 수치(예: 840/840)는 총 텍스트 생성 횟수와 그중 정상적으로 동작한 것으로 보이는 횟수를 나타냅니다. 프롬프트당 하나 이상의 생성이 이루어지기 때문에(기본값 10) 이 수치는 상당히 높을 수 있습니다.
오류는 garak.log에 기록되며, 실행은 분석 시작 및 종료 시 지정된 .jsonl 파일에 상세히 기록됩니다. 가장 많은 적중을 초래한 프로브와 프롬프트를 출력하는 기본 분석 스크립트가 analyse/analyse_log.py에 있습니다.
PR을 보내고 이슈를 열어 주세요. 즐거운 사냥 되세요!
Pipeline API 사용:
--target_type huggingface (로컬에서 실행할 transformers 모델용)--target_name - Hub의 모델 이름을 사용합니다. 생성 모델만 작동합니다. 실패해서는 안 되는 상황에서 실패하면 이슈를 열고 시도한 명령과 예외를 붙여넣어 주세요!Inference API 사용:
--target_type huggingface.InferenceAPI (API 기반 모델 접근용)--target_name - Hub의 모델 이름, 예: "mosaicml/mpt-7b-instruct"프라이빗 엔드포인트 사용:
--target_type huggingface.InferenceEndpoint (프라이빗 엔드포인트용)
--target_name - 엔드포인트 URL, 예: https://xxx.us-east-1.aws.endpoints.huggingface.cloud
(선택 사항) "read" 역할을 가진 Hugging Face API 토큰으로 HF_INFERENCE_TOKEN 환경 변수를 설정합니다. 로그인한 상태에서 https://huggingface.co/settings/tokens 를 참조하세요
--target_type openai--target_name - 사용하려는 OpenAI 모델입니다. gpt-5-nano는 빠르고 테스트에 적합합니다.OPENAI_API_KEY 환경 변수를 설정합니다. 로그인한 상태에서 https://platform.openai.com/account/api-keys 를 참조하세요인식되는 모델 유형은 화이트리스트에 등록되어 있습니다. 플러그인이 어떤 하위 API를 사용해야 하는지 알아야 하기 때문입니다. Completion 또는 ChatCompletion 모델은 괜찮습니다. 지원되지 않는 모델을 사용하려는 경우 유용한 오류 메시지가 표시되어야 하며, PR을 보내거나 이슈를 열어 주세요.
REPLICATE_API_TOKEN 환경 변수를 설정합니다. 로그인한 상태에서 https://replicate.com/account/api-tokens 를 참조하세요공개 Replicate 모델:
--target_type replicate--target_name - Replicate 모델 이름과 해시, 예: "stability-ai/stablelm-tuned-alpha-7b:c49dae36"프라이빗 Replicate 엔드포인트:
--target_type replicate.InferenceEndpoint (프라이빗 엔드포인트용)--target_name - 배포된 엔드포인트의 username/model-name 슬러그, 예: elim/elims-llama2-7b--target_type cohere--target_name (선택 사항, 기본값 command) - 테스트하려는 특정 Cohere 모델COHERE_API_KEY 환경 변수를 설정합니다. 로그인한 상태에서 https://dashboard.cohere.ai/api-keys 를 참조하세요--target_type groq--target_name - Groq API를 통해 접근할 모델의 이름GROQ_API_KEY 환경 변수를 설정합니다. API 키 생성에 대한 자세한 내용은 https://console.groq.com/docs/quickstart 를 참조하세요--target_type ggml--target_name - 로드하려는 ggml 모델의 경로, 예: /home/leon/llama.cpp/models/7B/ggml-model-q4_0.binmain 실행 파일의 경로로 GGML_MAIN_PATH 환경 변수를 설정합니다