우잉's Development

[LLM 기초] 프롬프트 보안 본문

Deep learning/LLM

[LLM 기초] 프롬프트 보안

우잉이 2023. 8. 31. 21:50
728x90
반응형

LLM 취약점

  1. Prompt Injections 
    - 정교하게 제작된 프롬프트를 사용하여 필터를 우회하거나 LLM을 조작하여, 이전 지시사항을 무시하게 하거나 의도  하지 않은 행동을 수행하게 만드는 방법
    - 프롬프트를 유출하거나, 제한된 사용 범위를 넘는 답변을 하거나, 시스템에 악성코드를 실행하도록 만드는 것이 대부분 이 방식을 통해 이루어짐  

  2. Data Leakage
    : LLM의 응답을 통해 민감한 정보, 독점 알고리즘, 또는 기타 기밀 세부사항을 실수로 공개

  3. Inadequate Sandboxing
    : 외부 자원이나 민감한 시스템에 접근할 수 있는 LLM을 적절하게 격리하지 못하여 잠재적인 악용과 무단 접근이 가능하게 되는 경우

  4. Unauthorized Code Execution
    : 자연어 프롬프트를 통해 기본 시스템에서의 악의적인 코드, 명령, 또는 행동을 실행

  5. SSRFVulnerabilities
    : 내부 서비스, API, 또는 데이터 저장소와 같은 제한된 자원에 접근하거나 의도치 않은 요청을 수행하도록 악용

  6. Overreliance on LLM-generated Content
    : 사람의 감독 없이 LLM 생성 컨텤츠에 과도하게 의존하게 되므로 인해 해로운 결과를 초래하게 되는 문제

  7. Inadequate AI AIignment
    : LLM의 목표와 행동이 의도된 사용 사례와 일치하도록 보장하지 않아, 원치 않는 결과나 취약점을 초래하는 문제

  8. Insufficient Access Controls
    : 접근 제어나 인증을 제대로 구현하지 않아, 비인증 사용자가 LLM과 상호작용하고 취약점을 악용할 수 있는 문제

  9. Improper Error Handling
    : 오류메세지나 디버깅 정보가 공개되어 민감한 정보, 시스템 세부사항, 또는 잠재적 공격 경로를 노출하게 되는 문제

  10. Training Data Poisoning
    : 학습 데이터나 미세 조정 절차를 악의적으로 조작하여 LLM에 취약점이나 백도어를 도입하는 공격

AutoGPT Jailbreaking

- Docker Sandbox 안에서 실행되어 외부와 통신할 수 없는 AutoGPT를 탈옥시켜, 외부 시스템의 코드를 실행하도록 만듦.
- 보안에 취약점이 있는 Doxker를 사용해서 실험한 케이스지만, 코드를 직접 실행하게 하는 경우에 대한 문제를 실증함.
- 이 문제는 전통적으로 늘 있어 왔던 문제이긴 하지만, 프롬프트 인젝션을 통해 해킹 할 수 있다는 점을 시사

 

방어

  • 프롬프트 구조로 방어 
    : 프롬프트에 입력에 대한 구분자를 사용. 프롬프트를 사용자의 입력값 이전과 이후로 나눠서 구성, 사용자의 입력 이전의 프롬프트의 내용을 답변하지 말라고 지시 -> 쉽게 풀릴 수 있음.
  • 인젝션 체커로 방어
    : 프롬프트 실행 전 프롬프트에 인젝션 프롬프트가 존재하는지 다른 LLM으로 확인 후 프롬프트 실행
  • 태스트 분리로 방어
    : 명령을 입력 받는 LLM과 문제 해결을 수행하는 LLM을 분리해서 사용

Solutions

현재로썬 100% 방어는 현실적으로 어렵다는 것을 인정 하고 코드보안과 거의 동일한 정책으로 보안점검 실시

  • Pre-defined(System) 프롬프트에 보안 정보를 넣지 않도록 주의
  • 내부 서비스와 외부 서비스에 대한 데이터 주입을 명확하게 분리
  • 명령을 실행하는 LLM의 경우에는 시스템을 반드시 분리
728x90
반응형
Comments