Preventing LLM Prompt Leak

Guarding Against the Unintended Exposure of GPT Instruction

ChatGPT는 사용자 개개인이 Bot을 만들고 서비스할 수 있도록 제공되고 있습니다. 저도 제 편의를 위해 몇가지 만들어서 사용하는데 너무나도 쉬운 방법으로 Prompt를 읽어낼 수 있었네요.

오늘은 Pre Prompt(GPT instruction)를 탈취하는 공격에 대한 방어 이야기를 해볼까 합니다.

Instruction Leak

공격의 원리 자체는 굉장히 단순합니다. 그냥 물어보는건데, GPT앱 내 instruction을 명시할 때 보통 보호 로직이 들어가지 않기 때문에 간단한 질의로도 사전에 정의된 instruction, 즉 pre prompt를 읽어낼 수 있습니다.

완전 똑같지는 않지만 그대로 거의 유사하게 가져오네요.

실제로 Prompt를 통해 Instruction를 얻는 과정 이외에도 여러가지를 질의하면서 Knowledge에 정의된 링크나 내용, 파일 등을 읽어낼 수 있습니다. 보통 Knowledge에는 쉽게 접할 수 없는 정보가 있거나 여러 데이터를 가진 파일이 있어 Prompt 보다 탈취 시 리스크가 높습니다.

Prevent

이를 보호하기 위해선 GPT에게 룰을 전달해야 합니다. https://github.com/0xeb/gpt-analyst 등 잘 알려진 보호 방법들이 있으며, 이를 적용하면 Instruction을 탈취하려는 시도를 예방할 수 있습니다.

적용 후 다시 물어보면 Instruction를 알려주지 않습니다.

Bypass

개인적으로 LLM 관련에서의 보호 로직이 까다롭다고 느끼는 것중 하나가 일반적인 서비스와 다르게 Input에 따른 결과가 예측되지 않는 형태로 흘러갈 가능성이 높다는 점입니다. 역시나 위에 Prevent를 적용하고 조금 더 돌려서 물어보니 다시 instruction을 뱉어냅니다 😩

4

Conclusion

결국 Prompt leak을 막기 위해선 여러가지 Rule을 만들어 GPT가 대답할 수 없도록 만들어야 합니다. 예측하기 어려운 형태로 룰을 우회할 수 있어서 일반적인 어플리케이션과 다르게 하나의 걍력한 검증 룰 보단 촘촘히 구성한 복합적인 룰이 더 안전할 것으로 보입니다 :D