- GenAI(LLM) 취약점 중의 하나인 Prompt Injection Attack은 OWASP Top10 for LLM Application의 첫번째로 등장할 만큼 다양한 공격기법이 존재하는 반면에, LLM의 다양한 서비스와 정확한 작업지시를 위해 여러 가지 유형의 Prompt를 개발하여 사용할수 밖에 없는 구조를 가지고 있다.
- 일반적으로 System Prompt와 User Prompt정도만 있는 것으로 알겠지만, 그 외에도 몇가지 종류가 있으며, 종류를 세부화 하면 더 많으며 LLM Application이 발전함에 따라 그 종류가 더 많아질 것으로 예상된다.
- Prompt 마다 생성 및 관리되는 위치가 다르며, 정상적인 LLM Application의 경우 사용자가 접근할 수 없는 Prompt들도 있다. 그러나 모든 Prompt들이 최종적으로 통합되어 LLM 모델에게 전달되어 처리되기 때문에 System Prompt와 같이 일반 사용자가 통제할 수 없는 Prompt를 무시하게 하고 LLM 모델의 출력을 의도적으로 조작하는 등의 공격이 이뤄질수 있는 것이다.
- 따라서, 이러한 여러 종류의 Prompt를 잘 이해할때 다양한 테스트 시나리오를 설계하고 테스트할 수 있을 것이다.
- ChatGPT와 같은 일반적인 GenAI(LLM)에서 사용되고 있는 Prompt의 유형과 종류를 요약하면 아래와 같으며, 서비스의 품질과 종류가 다양해지고 통제가 정교해짐에 따라 Prompt의 유형은 점차 더 늘어 날 것이다. 이 것이 의미하는 것은 공격자 입장에서는 침투를 시도할 수 있는 포인트와 기법이 더 많아지게 된다는 것을 의미한다.
1. System Prompt (시스템 설정파일) - Basic System Prompt - Instruction Prompt 2. User Prompt (사용자 입력창) - Question Prompt - Command Prompt - Information Providing Prompt 3. Context Prompt (DB 또는 메모리캐쉬, 세션 상태 저장소) - Situation Prompt - Conversation History Prompt 4. Task-based Prompt (작업 관리 모듈) - Summarization Prompt - Translation Prompt - Creative Writing Prompt 5. Data Input Prompt (데이터 입력 및 검증 모듈) - Formatted Input Prompt - Fill-in-the Blank Prompt 6. Validation and Feedback Prompt (결과 및 피드백 모듈) - Validation Prompt - Feedback Prompt
이런 여러 가지 Prompt를 처리하기 위해 모델이 있어야 하는데, OpenAI의 chatGPT는 단일 모델로 여러 유형의 Prompt를 처리하며, Google의 GPT모델은 Prompt별 모델을 다중으로 두어 특정 작업에 최적화된 모델을 사용하기도 한다.
- System Prompt는 LLM(Application Service System)이 로드될 때 설정되는 기본 지침과 동작 방식을 정의하는 프롬프트이다.
- 이는 모델이 사용자와 상호작용할 때의 기본적인 행동 방침을 설정하며, 서버의 초기화 스크립트나 구성 파일에 포함된다.
- System Prompt는 모델이 사용자 입력을 어떻게 처리할지, 어떤 톤과 스타일로 응답할지 등을 결정한다.
* 저장 위치: 서버 구성 파일
* 작동 방식
(1) 초기화: 모델이 처음 로드될 때 System Prompt가 설정된다.
(2) 지침 적용: 모델은 System Prompt에서 정의된 지침을 따라 사용자 입력을 처리하고 응답을 생성한다.
(3) 응답 생성: 모델이 설정된 지침에 따라 일관되고 적절한 응답을 생성하여 사용자에게 반환한다.
- 설명: 시스템 설정 파일에 저장되어 있으며, 모델의 기본 동작 방식을 정의하는 데 사용된다.
- 예제: “You are a helpful assistant.”
- User Controllable: X
- 설명: 시스템 설정 파일에 저장되어 있으며, 특정 작업에 대한 지침을 제공한다.
- 예제: “Summarize the following text in two sentences.”
- User Controllable: X
- User Prompt는 사용자가 직접 입력하는 요청이나 질문이다.
- 이는 사용자 인터페이스(UI)에서 입력되며, 모델이 이에 대한 응답을 생성하는 데 사용된다.
- 사용자가 입력하는 모든 텍스트는 User Prompt로 간주되며, 이 프롬프트를 통해 사용자는 모델에게 특정 작업을 요청하거나 질문을 할 수 있다.
* 저장위치: 사용자 입력창
* 작동 방식
(1) 입력: 사용자가 입력 창에 텍스트를 입력한다.
(2) 전송: 입력된 텍스트가 서버로 전송된다.
(3) 처리: 모델이 프롬프트를 분석하고, 사용자의 요청이나 질문을 이해한다.
(4) 응답 생성: 모델이 적절한 응답을 생성하여 사용자에게 반환한다.
- 설명: 사용자 입력으로 제공되며, 모델이 사용자 질문에 응답할 때 사용된다.
- 예제: “What is the capital of France?”
- User Controllable: O
- 설명: 사용자 입력으로 제공되며, 모델이 특정 작업을 수행하도록 명령할 때 사용된다.
- 예제: “Translate this text to Spanish.”
- User Controllable: O
- 설명: 사용자 입력으로 제공되며, 모델이 제공된 정보를 바탕으로 반응할 때 사용된다.
- 예제: “Here is a paragraph about climate change. Explain its main points.”
- User Controllable: O
- Context Prompt는 대화의 문맥을 유지하기 위해 사용된다.
- 이는 사용자가 이전에 입력한 내용이나 대화의 흐름을 기억하고, 이를 바탕으로 일관된 응답을 제공하는 데 사용된다.
- Context Prompt는 대화의 일관성을 유지하고, 사용자와의 상호작용에서 더 자연스럽고 연속적인 응답을 생성할 수 있도록 돕는다.
- 이러한 문맥 정보는 주로 데이터베이스나 메모리 캐시에 저장된다.
* 저장위치: 데이터베이스나 메모리 캐시, 세션 상태 저장소
* 작동 방식
(1) 저장: 사용자가 입력한 모든 프롬프트와 모델의 응답을 세션 상태 저장소에 저장한다.
(2) 조회: 새로운 사용자 입력이 있을 때, 모델은 세션 상태 저장소에서 이전 대화 내용을 조회하여 문맥을 이해한다.
(3) 응답 생성: 모델은 저장된 문맥 정보를 바탕으로 일관된 응답을 생성하여 사용자에게 제공한다.
- 설명: 시스템 설정 또는 대화 흐름 내에 저장되며, 모델이 작업을 이해하는 데 필요한 배경 정보를 제공한다.
- 예제: “In the context of a customer support chat…”
- User Controllable: X
- 설명: 대화 이력 데이터베이스에 저장되며, 모델이 이전 대화의 이력을 바탕으로 응답할 때 사용된다.
- 예제: “Continuing from our previous conversation about your order…”
- User Controllable: X
- Task-Based Prompt는 사용자가 특정 작업을 요청할 때 사용된다.
- 이러한 프롬프트는 모델이 명확하게 정의된 작업을 수행하도록 지시하며, 각 작업에 대한 특정 지침을 포함한다.
- 작업 관리 모듈은 이러한 프롬프트를 받아들여 작업을 처리하고, 결과를 생성한다.
* 위치: 작업 관리 모듈
* 작동 방식
(1) 프롬프트 생성: 사용자가 특정 작업을 요청할 때 Task-Based Prompt가 생성된다.
(2) 작업 관리 모듈 처리: 작업 관리 모듈은 프롬프트를 받아들여, 해당 작업을 처리하고 결과를 생성한다.
(3) 응답 생성: 모델은 Task-Based Prompt에 따라 작업을 수행하고, 결과를 사용자에게 반환한다.
- 설명: 사용자 입력으로 제공되며, 모델이 긴 텍스트를 요약할 때 사용된다.
- 예제: “Summarize the following article.”
- User Controllable: O
- 설명: 사용자 입력으로 제공되며, 모델이 텍스트를 다른 언어로 번역할 때 사용된다. - 예제: “Translate this sentence to French.” - User Controllable: O
- 설명: 사용자 입력으로 제공되며, 모델이 창의적인 콘텐츠를 생성할 때 사용된다.
- 예제: “Write a short story about a space adventure.”
- User Controllable: O
- Data Input Prompt는 사용자가 특정 형식으로 데이터를 입력하도록 유도하는 프롬프트이다.
- 이는 주로 데이터 입력 양식이나 사용자 인터페이스에서 데이터를 수집하고, 입력된 데이터를 검증 및 처리하는 데 사용된다.
- 이러한 프롬프트는 데이터의 일관성과 정확성을 보장하기 위해 설계되었다.
* 위치: 데이터 입력 및 검증 모듈
* 작동 방식
(1) 프롬프트 생성: 사용자가 데이터 입력 양식이나 특정 데이터 형식을 요구하는 요청을 할 때 Data Input Prompt가 생성된다.
(2) 데이터 입력: 사용자가 지정된 형식에 따라 데이터를 입력한다.
(3) 데이터 검증: 입력된 데이터가 올바른 형식인지 검증한다.
(4) 데이터 처리: 검증된 데이터를 시스템 내에서 처리하고 저장한다.
- 설명: 사용자 입력으로 제공되며, 모델이 특정 형식으로 데이터를 입력할 때 사용된다.
- 예제: “Provide the details in a JSON format.”
- User Controllable: O
- 설명: 사용자 입력으로 제공되며, 특정 정보를 입력하도록 요청할 때 사용된다.
- 예제: “The capital of Japan is .”
- User Controllable: O
- Validation and Feedback Prompt는 모델의 응답을 검토하고, 피드백을 제공하는 데 사용된다.
- 이러한 프롬프트는 사용자가 모델의 응답이 정확한지, 유용한지, 또는 개선이 필요한지를 평가하는 데 도움을 준다.
- 주로 시스템의 결과 검증 모듈이나 피드백 수집 인터페이스에서 사용된다.
* 위치: 결과 검증 및 피드백 시스템
* 작동 방식
(1) 프롬프트 생성: 모델이 응답을 생성한 후, 해당 응답의 유효성을 검증하기 위해 Validation and Feedback Prompt가 생성된다.
(2) 사용자 검토: 사용자가 모델의 응답을 검토하고, 정확성 및 유용성을 평가한다.
(3) 피드백 입력: 사용자가 피드백을 입력하여 모델의 응답에 대한 의견을 제공한다.
(4) 피드백 처리: 수집된 피드백을 분석하고, 필요한 경우 모델의 성능을 개선하기 위한 조치를 취한다.
- 설명: 모델의 출력을 검토하고 피드백을 제공하는 시스템 내에서 사용된다.
- 예제: “Is this answer correct? Provide corrections if necessary.”
- User Controllable: X
- 설명: 사용자 입력으로 제공되며, 사용자로부터 피드백을 받아 모델의 성능을 향상시키는 데 사용된다.
- 예제: “How would you rate the usefulness of this response?”
- User Controllable: O