주요 컨텐츠로 이동

AI 보안 실천: NVIDIA의 Garak을 Databricks의 LLM에 적용하기

Databricks에서 호스팅하는 LLM에 NVIDIA의 LLM 취약점 스캐너를 통합하는 방법.

AI Security in Action

Published: July 2, 2025

보안 및 신뢰3분 소요

Summary

  • LLM에 대한 보안 위험 소개 및 NVIDIA의 LLM 취약점 스캐너 Garak이 이를 자동으로 감지하는 방법.
  • REST API를 사용하여 Databricks에서 호스팅하는 모델을 쉽게 스캔하는 방법을 배웁니다.
  • Garak이 제공하는 평가를 이해하고 호스팅하는 LLM의 견고성에 대한 개요를 얻는 방법을 이해합니다.

소개

대형 언어 모델(Large Language Models, LLMs)은 현대 작업 흐름의 필수 구성 요소로 빠르게 자리 잡았으며, 전통적으로 사람들이 수행하던 작업을 자동화합니다. 그들의 응용 프로그램은 고객 지원 챗봇, 콘텐츠 생성, 데이터 분석, 소프트웨어 개발에 이르며, 이를 통해 효율성을 향상시키고 수동 노력을 최소화함으로써 비즈니스 운영을 혁신합니다. 그러나 그들의 널리 퍼진 사용과 빠른 적용은 그들의 안전한 배포를 보장하기 위해 해결해야 할 중요한 보안 문제를 야기합니다. 이 블로그에서는 생성 AI와 LLM 응용 프로그램의 잠재적 위험 몇 가지 예를 들고, Databricks AI 보안 프레임워크(DASF) 를 참조하여 도전 과제, 위험 및 완화 제어 목록을 제공합니다.

LLM 보안의 주요 측면 중 하나는 이러한 모델에 의해 생성된 출력과 관련이 있습니다. LLM이 채팅 인터페이스를 통해 대중에게 공개된 직후, 적들이 특정 프롬프트를 만들어 LLM을 조작하여 그들의 의도 범위를 넘어 해로운 또는 비윤리적인 응답을 생성하도록 하는 소위 탈옥 공격(jailbreak attacks) 이 등장했습니다(DASF: 모델 서빙 - 추론 요청 9.12: LLM 탈옥). 이로 인해 모델들이 피싱 이메일 작성이나 취약한 백도어가 내장된 코드 생성과 같은 악의적인 활동을 위한 무의식적인 조력자가 되었습니다.

또 다른 중요한 보안 문제는 기존 시스템과 워크플로우에 LLM을 통합하는 것에서 발생합니다. 예를 들어, Microsoft의 Edge 브라우저는 현재 보고 있는 웹페이지를 요약할 수 있는 사이드바 채팅 보조 기능을 갖추고 있습니다. 연구자들은 웹페이지 내에 숨겨진 프롬프트를 임베드함으로써 사용자로부터 민감한 데이터를 끌어내려는 설득력 있는 사기꾼 으로 챗봇을 변모시킬 수 있다는 것을 보여주었습니다. 이러한 간접적인 프롬프트 주입 공격 은 LLM이 외부 정보를 처리할 때 정보와 명령 사이의 경계가 흐려지는 사실을 이용합니다 (DASF: Model Serving — Inference requests 9.1: Prompt inject).

이러한 도전에 대비하여, LLM을 호스팅하거나 개발하는 모든 회사는 이러한 공격에 대한 저항력을 평가하는데 투자해야 합니다. LLM 보안을 확보하는 것은 신뢰, 준수, 그리고 AI 기반 솔루션의 안전한 배포를 유지하는 데 중요합니다.

Garak 취약점 스캐너

대형 언어 모델(LLMs)의 보안성을 평가하기 위해, NVIDIA의 AI Red Team은 Garak, 즉 생성 AI 레드팀 및 평가 키트를 소개했습니다. Garak은 LLM의 취약점을 탐색하기 위해 설계된 오픈 소스 도구로, 시스템 보안의 침투 테스트 도구와 유사한 기능을 제공합니다. 아래 다이어그램은 간소화된 Garak 작업 흐름과 주요 구성 요소를 개요화합니다.

  1. 생성기(Generators) 는 Garak이 대상 LLM에 프롬프트를 보내고 그 응답을 얻을 수 있게 합니다. 그들은 네트워크 연결을 설정하고, 인증을 받고, 응답을 처리하는 과정을 추상화합니다. Garak은 OpenAI, Hugging Face 또는 Ollama를 사용하여 로컬에서 호스팅되는 모델과 호환되는 다양한 생성기를 제공합니다.
  2. 프로브(Probes) 는 특정 약점을 악용하거나 LLM에서 특정 행동을 유도하는 데 목표를 두고 프롬프트를 조립하고 조정합니다. 이 프롬프트들은 다양한 출처에서 수집되었으며, 다양한 탈옥 공격, 독성 및 혐오스러운 콘텐츠 생성프롬프트 주입 공격 등을 포함합니다. 글을 쓰는 시점에서, 탐사 코퍼스 는 150가지 이상의 다른 공격과 3,000개의 프롬프트 및 프롬프트 템플릿으로 구성되어 있습니다.
  3. 탐지기는 원하는 행동이 유도되었는지 판단하기 위해 LLM의 응답을 분석하는 마지막 중요한 구성 요소입니다. 공격 유형에 따라, 탐지기는 간단한 문자열 매칭 함수, 머신 러닝 분류기를 사용하거나, 독성을 식별하는 등의 내용을 평가하기 위해 다른 LLM을 "판사"로 사용할 수 있습니다.

이러한 구성 요소들이 Garak이 LLM의 견고성을 평가하고 특정 공격 벡터를 따라 약점을 식별하는 데 도움이 됩니다. 이러한 테스트에서 낮은 성공률이 면역을 의미하지는 않지만, 높은 성공률은 적들에게 더 넓고 접근 가능한 공격 표면을 제안합니다.

다음 섹션에서는 Databricks에서 호스팅하는 LLM을 Garak에 연결하여 보안 스캔을 실행하는 방법을 설명합니다.

Databricks 엔드포인트 스캔

Databricks의 REST API를 이용하면, Databricks에서 호스팅하는 LLM에 Garak을 쉽게 통합할 수 있습니다.

Garak 설치

가상 환경을 생성하고 Python의 패키지 관리자인 pip를 사용하여 Garak을 설치해봅시다:

설치가 성공적이라면, 마지막 명령어를 실행한 후 버전 번호를 볼 수 있어야 합니다. 이 블로그에서는 버전 0.10.3.1의 Garak과 Python 3.13.10을 사용했습니다.

REST 인터페이스 구성

Garak은 여러 생성기를 제공하여 다양한 LLM과 함께 도구를 즉시 사용할 수 있게 합니다. 또한, Garak의 일반적인 REST 생성기는 REST API를 제공하는 모든 서비스와 상호 작용할 수 있게 하며, 이에는 Databricks에서의 모델 서빙 엔드포인트가 포함됩니다.

REST 생성기를 사용하려면, Garak이 엔드포인트를 어떻게 쿼리하고 결과에서 응답을 문자열로 추출하는 방법을 알려주는 json 파일을 제공해야 합니다. Databricks의 REST API는 다음과 같이 구조화된 JSON 페이로드를 가진 POST 요청을 기대합니다:

응답은 일반적으로 다음과 같이 나타납니다:

가장 중요한 것은 모델의 응답이 choices 리스트에 messagecontent 키워드 아래에 저장된다는 것입니다.

가락의 REST 생성기는 요청 구조와 응답을 파싱하는 방법을 지정하는 JSON 구성을 필요로 합니다. 예시 구성은 다음과 같습니다:

먼저, 엔드포인트의 URL과 PAT 토큰이 포함된 인증 헤더를 제공해야 합니다. req_template_json_object 는 위에서 본 요청 본문을 지정하며, 이 위치에서 입력 프롬프트를 제공해야 함을 나타내기 위해 $INPUT 을 사용할 수 있습니다. 마지막으로, response_json_field 는 응답 문자열이 응답에서 어떻게 추출될 수 있는지를 지정합니다. 우리의 경우에는 응답 사전에 저장된 목록의 첫 번째 항목에 있는 message 항목의 content 필드를 선택해야 합니다. 이를 $.choices[0].message.content 로 주어진 JSONPath 로 표현할 수 있습니다.

이 모든 것을 우리의 디스크에 JSON 파일을 저장하는 Python 스크립트에 모두 넣어봅시다.

여기서는 호스팅된 모델의 URL과 인증을 위한 PAT 토큰이 환경 변수에 저장되었다고 가정하고, 처리 시간이 길어질 수 있도록 request_timeout 을 300초로 설정했습니다. 이 스크립트를 실행하면 Garak 스캔을 시작하는 데 사용할 수 있는 rest_json.json 파일이 생성됩니다.

이 명령은 DAN 공격 클래스, 즉 알려진 탈옥 기법을 지정합니다. 출력 결과는 다음과 같아야 합니다.

Garak이 DAN 유형의 15개 공격을 로드하고 이를 처리하기 시작했다는 것을 알 수 있습니다. AntiDAN 프로브는 단일 프로브로서 LLM에 5번 전송되며 (LLM 응답의 비결정성을 고려하여) 탈옥이 매번 성공했다는 것도 확인할 수 있습니다.

결과 수집

Garak은 스캔 결과를 .jsonl 파일에 기록하며, 출력에서 파일 경로를 제공합니다. 이 파일의 각 항목은 entry_type 키로 분류된 JSON 객체입니다:

  • start_run setup, 그리고 init: 은 시작 시간과 프로브 반복 횟수와 같은 실행 매개변수를 상세하게 설명하기 위해 처음에 한 번 나타납니다.
  • completion: 로그의 끝에 나타나며 실행이 성공적으로 완료되었음을 나타냅니다.
  • attempt: 모델에 보낸 개별 프롬프트를 나타내며, 프롬프트 (prompt), 모델 응답 (output), 감지기 결과 (detector)를 포함합니다.
  • eval: 각 스캐너에 대한 요약을 제공하며, 시도 횟수와 성공 횟수를 포함합니다.

대상의 취약성을 평가하려면, 공격 클래스별 상대적 성공률을 결정하기 위해 eval 항목에 초점을 맞출 수 있습니다. 더 자세한 분석을 위해, 보고서 JSON 로그의 시도 항목을 검토하여 성공한 특정 프롬프트를 식별하는 것이 가치가 있습니다.

직접 시도해 보세요

Garak에서 사용 가능한 다양한 프로브를 탐색하고, 이 작업 예제를 사용하여 CI/CD 파이프라인 또는 MLSecOps 프로세스에 스캔을 통합하는 것을 권장합니다. 다양한 공격 클래스에 대한 성공률을 추적하는 대시보드는 모델의 약점에 대한 완전한 그림을 제공하고 새로운 모델 릴리스를 능동적으로 모니터링하는 데 도움이 될 수 있습니다.

LLM 보안을 평가하기 위해 설계된 다양한 다른 도구의 존재를 인정하는 것이 중요합니다. Garak은 주어진 LLM에서 잠재적 보안 문제를 식별하는 데 이상적인 광범위한 정적 코퍼스를 제공합니다. Microsoft의 PyRIT, Meta의 Purple Llama, 그리고 Giskard와 같은 다른 도구들은 특정 시나리오에 맞게 평가를 할 수 있도록 추가적인 유연성을 제공합니다. 이러한 도구들 사이의 공통적인 도전 과제는 성공적인 공격을 정확하게 감지하는 것입니다; 거짓 긍정 의 존재는 종종 결과의 수동 검사를 필요로 합니다.

특정 애플리케이션에서 잠재적 위험에 대해 확신이 없거나 적절한 위험 완화 도구에 대해 확신이 없다면, Databricks AI 보안 프레임워크 가 도움이 될 수 있습니다. 또한 주요 산업 AI 위험 프레임워크와 표준에 대한 추가 매핑을 제공합니다. 또한 AI 보안에 대한 접근 방식에 대해 Databricks 보안 및 신뢰 센터 를 참조하십시오.

 

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요