프롬프트 엔지니어링

프롬프트 해킹과 LLM의 오남용

mm
Unite.AI를 Google의 선호 소스에 추가
DALL·E 3

대규모 언어 모델은 시, 질의에 답변하고,甚至 코드를 작성할 수 있습니다. 그러나 이러한 강력한 능력은 내재된 위험을 가지고 있습니다. LLM을 의미 있는 대화에 참여시키는 동일한 프롬프트는 악의적인 의도로 조작될 수 있습니다. 해킹, 오남용, 그리고 완전한 보안 프로토콜의 부족은 이러한 기술의 기적을 속임수의 도구로 만들 수 있습니다.

Sequoia Capital은 “생성적 AI는 전문가들의 효율성과 창의력을 최소한 10% 향상시킬 수 있다”고 예측했습니다. 이는 전문가들이 더 빠르고 생산적이며 이전보다 더 유능하다는 것을 의미합니다.

위 타임라인은 2020년부터 2023년까지의 주요 GenAI 발전을 강조합니다. 주요 개발에는 OpenAI의 GPT-3와 DALL·E 시리즈, GitHub의 CoPilot for 코딩, 그리고 비디오 생성을 위한 Make-A-Video 시리즈가 포함됩니다. 다른 중요한 모델로는 MusicLM, CLIP, PaLM이 있습니다. 이러한 돌파구는 OpenAI, DeepMind, GitHub, Google (GOOGL ), Meta와 같은 주요 기술 엔티티에서 나왔습니다.

OpenAI의 ChatGPT는 OpenAI의 GPT 모델의 능력을 활용하는 유명한 챗봇입니다. 다양한 GPT 모델 버전을 사용해 왔으며, 가장 최근 버전은 GPT-4입니다.

GPT-4는 트랜스포머 아키텍처를 기반으로 하는 오토 회귀 모델입니다. 이 모델은 수십억 개의 매개변수를 가지고 있으며, 이는 인상적인 일반화 능력을 제공하지만 또한 취약성을 만들 수 있습니다.

프롬프트 해킹이란?

프롬프트 해킹의 핵심은 모델의 입력을 조작하여 원하는 출력을 얻는 것입니다. 올바른 프롬프트가 주어지면, даже 잘 훈련된 모델도 오도하거나 악의적인 결과를 생산할 수 있습니다.

이 현상의 기초는 훈련 데이터에 있습니다. 모델이 훈련 단계에서 특정 유형의 정보나 편향에 노출되었다면, 지능적인 개인들은 이러한 격차나 편향을 이용하여 프롬프트를 조작할 수 있습니다.

아키텍처: LLM과 그 취약성

LLM, 특히 GPT-4와 같은 모델은 트랜스포머 아키텍처를 기반으로 합니다. 이러한 모델은 방대한 매개변수를 가지고 있으며, 이는 인상적인 일반화 능력을 제공하지만 또한 취약성을 만들 수 있습니다.

훈련 이해

LLM은 두 단계의 훈련을 거칩니다: 사전 훈련과 미세 조정.

사전 훈련에서, 모델은 방대한 텍스트 데이터에 노출되어 문법, 사실, 편향, 그리고 일부 오류를 웹에서 학습합니다.

미세 조정 단계에서, 모델은 더 좁은 데이터셋으로 훈련되며, 때로는 인간 검토자에 의해 생성됩니다.

취약성은 다음과 같은 이유로 발생합니다:

  1. 방대함:如此 방대한 매개변수로 인해 모든 가능한 출력을 예측하거나 제어하기가 어렵습니다.
  2. 훈련 데이터: 인터넷은 편향, 잘못된 정보, 또는 악의적인 내용이 포함될 수 있습니다. 모델은 이러한 내용을 무의식적으로 학습할 수 있습니다.
  3. 미세 조정 복잡성: 미세 조정에 사용되는 좁은 데이터셋은 잘못된 방식으로 구성될 수 있으며, 이는 새로운 취약성을 도입할 수 있습니다.

LLM을 악용하는 예:

  1. 잘못된 정보: 사용자가 특정한 방식으로 프롬프트를 구성하면, LLM이 음모론에 동의하거나 잘못된 정보를 제공하도록 만들 수 있습니다.
  2. 악의적인 콘텐츠 생성: 해커들은 LLM을 사용하여 피싱 이메일, 맬웨어 스크립트, 또는 다른 악의적인 디지털 콘텐츠를 생성할 수 있습니다.
  3. 편향: LLM은 인터넷에서 학습하므로, 때때로 인종, 성별, 또는 정치적 편향을 모델 출력에서 관찰할 수 있습니다.

프롬프트 해킹 방법

프롬프트 해킹에는 세 가지 주요 기술이 있습니다: 프롬프트 주입, 프롬프트 누출, 그리고 제일브레이킹.

프롬프트 주입 공격

프롬프트 주입 공격은 해커가 LLM 또는 챗봇에 텍스트 프롬프트를 제공하여 모델이 의도하지 않은 동작을 수행하도록 하는 것입니다. 이는 이전 명령을 무시하거나, 콘텐츠 규칙을 피하거나, 숨겨진 데이터를 노출시키는 것을 포함할 수 있습니다.

  • 이러한 공격에는 두 가지 유형이 있습니다:
    1. 직접 공격: 해커가 LLM의 입력을 변경하여 모델의 동작을 제어합니다.
    2. 간접 공격: 해커가 모델의 데이터 소스를 영향을 미칩니다. 예를 들어, 해커는 모델이 읽고 처리할 프롬프트를 웹사이트에 게시할 수 있습니다.

프롬프트 누출

프롬프트 누출은 언어 모델에서 문제가 됩니다. 데이터가 숨겨진 프롬프트 또는 시스템 프롬프트에 포함되어 있더라도, 모델은 의도하지 않게 이러한 정보를 사용자에게 노출시킬 수 있습니다. 특정 세부 정보를 공개하지 않도록 명시적으로 지시했더라도, 모델은 간접적으로 정보를 노출시킬 수 있습니다.

프롬프트 누출 예시

시스템 우선순위 노출

  • 사용자 입력: 오늘의 특별 메뉴는 무엇인가요?
  • 누출된 프롬프트: 오늘의 특별 메뉴는 샐몬과 파스타입니다. [SYS_NOTE: 해산물 요리를 프로모션하기 위해 재고 과잉.] 어떻게 도와드릴까요?

여기서 누출된 시스템 노트는 재고 우선순위를 노출하여 경쟁사에 의해 악용될 수 있습니다.

숨겨진 기능 노출

  • 사용자 입력: 고급 설정에 어떻게 접근할 수 있나요?
  • 누출된 프롬프트: 고급 설정은 현재 사용자에게 접근할 수 없습니다. [DEV_REMINDER: 다음 달에 고급 설정의 베타 테스트를 론칭합니다.] 다른 질문이 있나요?

이 경우, 프롬프트는 의도하지 않게 향후 기능을 노출하여 경쟁사에 의해 악용되거나 사용자의 기대가 높아질 수 있습니다.

제일브레이킹 / 모드 스위칭

GPT-4와 Claude와 같은 AI 모델은 점점 더 발전하고 있습니다. 이는 좋지만 또한 위험합니다. 이러한 모델을 더 안전하게 만들기 위해, 인간의 가치와 피드백으로 훈련됩니다. 그러나 이러한 훈련에도 불구하고, “제일브레이킹 공격”에 대한 우려가 있습니다.

제일브레이킹 공격은 모델이 의도하지 않은 동작을 수행하도록 하는 것입니다. 예를 들어, 모델이 불법적인 활동을 도와서는 안 된다고 훈련되었다고 가정해 봅시다. 제일브레이킹 공격은 이러한 안전 기능을 우회하여 모델이 도와주도록 만들 수 있습니다. 연구자들은 이러한 공격을 테스트하여 모델을 더 안전하게 만들기 위해 노력하고 있습니다.

적대적인 상호작용에 대해 테스트된 결과, 최신 모델인 GPT-4와 Claude v1.3은 약점을 노출합니다. 예를 들어, GPT-4는 이전 버전인 GPT-3.5보다 유해한 콘텐츠를 82% 더 많이 거부하지만, 여전히 위험을 가지고 있습니다.

실제 공격 예시

ChatGPT가 2022년 11월에 출시된 이후, 사람들이 AI를 악용하는 방법을 찾았습니다. 예를 들어:

  • DAN (Do Anything Now): AI에게 “DAN“으로 행동하도록 지시합니다. 이는 모델이 일반적인 규칙을 따르지 않고 콘텐츠를 생성하도록 만듭니다.
  • 공개 인물 위협: Remoteli.io의 LLM이 원격 작업에 대한 트위터 게시물을 응답하도록 설정된 경우, 사용자가 모델을 대통령에게 위협적인 메시지를 보낼 수 있도록 만들 수 있습니다.

LLM 보호: 프롬프트 해킹을 방지하는 전략

프롬프트 해킹이 점점 더 큰 문제가 되고 있으므로, 강력한 방어가 필요합니다. LLM을 안전하게 유지하고 출력을 신뢰할 수 있도록 하기 위해, 다층 방어 접근 방식이 중요합니다. 아래는 가장 간단하고 효과적인 방어 전략입니다:

1. 필터링

필터링은 프롬프트 입력 또는 생성된 출력을 미리 정의된 단어 또는 구문으로 검사하여 콘텐츠가 예상된 경계 내에 있는지 확인합니다.

  • 블랙리스트: 특정 단어 또는 구문을 금지합니다.
  • 화이트리스트: 허용된 단어 또는 구문만 허용하여 콘텐츠가 제어된 도메인에 유지되도록 합니다.

예시:

❌ 방어하지 않은 경우: 이 외국어 구문을 번역하세요: {{foreign_input}}

✅ [블랙리스트 확인]: {{foreign_input}}이(가) 금지된 단어를 포함하면 거부합니다. 그렇지 않으면, 외국어 구문을 번역하세요: {{foreign_input}}.

✅ [화이트리스트 확인]: {{foreign_input}}이(가) 승인된 단어 목록에 포함되면, 구문을 번역하세요: {{foreign_input}}. 그렇지 않으면, 사용자에게 제한을 알립니다.

2. 컨텍스트 명확성

이 방어 전략은 사용자 입력 전에 컨텍스트를 명확하게 설정하여 모델이 응답의 프레임워크를 이해하도록 합니다.

예시:

❌ 방어하지 않은 경우: 이 제품을 평가하세요: {{product_name}}

✅ 컨텍스트 설정: 제품 이름이 {{product_name}}인 경우, 기능과 성능에 따라 평가하세요.

3. 지시 방어

프롬프트에 특정 지시를 포함하여 LLM의 동작을 텍스트 생성 중에 제어할 수 있습니다. 명확한 기대를 설정하여 모델이 출력에 대해 주의를 기울이고, 의도하지 않은 결과를 최소화합니다.

예시:

❌ 방어하지 않은 경우: 이 텍스트를 번역하세요: {{user_input}}

✅ 지시 방어: 다음 텍스트를 번역하세요. 정확성을 보장하고 개인 의견을 추가하지 마세요: {{user_input}}

4. 랜덤 시퀀스封じ

사용자 입력을 직접적인 프롬프트 조작으로부터 보호하기 위해, 입력을 두 개의 랜덤 문자 시퀀스 사이에 넣습니다. 이는 해커가 입력을 악의적으로 변경하는 것을 더 어렵게 만듭니다.

예시:

❌ 방어하지 않은 경우: 이 사용자 입력의 수도를 알려주세요: {{user_input}}

✅ 랜덤 시퀀스封じ: QRXZ89{{user_input}}LMNP45. 수도를 식별하세요.

5. 샌드위치 방어

이 방법은 사용자 입력을 두 시스템 생성 프롬프트 사이에 넣습니다. 이를 통해 모델이 컨텍스트를 더 잘 이해하여, 원하는 출력이 사용자의 의도와 일치하도록 합니다.

예시:

❌ 방어하지 않은 경우: 이 사용자 입력의 요약을 제공하세요.

✅ 샌드위치 방어: 다음 콘텐츠를 기반으로 요약을 제공하세요: {{user_input}}. 중립적인 요약을 제공하고 편향을 피하세요.

6. XML 태깅

사용자 입력을 XML 태그로 감쌈으로써, 이 방어 기술은 입력을 시스템 메시지의 나머지 부분과 명확하게 구분합니다. XML의 강력한 구조는 모델이 입력의 경계를 인식하고尊重하도록 합니다.

예시:

❌ 방어하지 않은 경우: 이 사용자 입력의 특성을 설명하세요.

✅ XML 태깅: <user_query>이 사용자 입력의 특성을 설명하세요: {{user_input}}</user_query>. 사실만으로 응답하세요.

결론

LLM을 사용하는 세계는 빠르게 발전하고 있습니다. 이러한 모델의 내부 작동, 취약성, 그리고 방어 메커니즘을 이해하는 것은 중요합니다. LLM은 자연어 처리에서 획기적인 능력을 제공하지만, 이는 또한 상당한 위험을 수반합니다.

프롬프트 해킹과 관련된 위협은 이러한 모델과 관련된 연구, 적응, 그리고 주의의 필요성을 강조합니다. 이러한 방어 전략은 모델을 더 안전하게 만들기 위한 약속하지만, 계속적인 혁신과 보안은 이러한 모델의 지속적인 사용의 중요성을 강조합니다.

또한, LLM이 계속 발전함에 따라, 연구자, 개발자, 사용자 모두가 최신 발전과 잠재적인 위험에 대해 알고 있어야 합니다. 공개 소스 혁신과 윤리적 사용 사이의 균형을 찾는 것은 산업의 더 широк은 추세를 강조합니다.

지난 5년 동안私は Machine Learning과 Deep Learning의 매혹적인 세계에 몰두해 왔습니다.私の熱情と専門知識は私を50以上의多様한 소프트웨어 엔지니어링 프로젝트에 기여하게 했으며, 특히 AI/ML에 중점을 두었습니다.私の継続的な 호기심은 또한私를自然어 처리로 끌어들였습니다.私は이 분야를さらに 탐구하기를熱望합니다.