2022년 말 시작된 챗GPT 서비스는 지난 2016년 알파고가 이세돌 9단을 바둑에서 격파한 이래 인공지능의 무한한 가능성에 대해 일반인들이 실감하게 된 또 하나의 중요한 이정표가 되었다. 챗GPT 기반의 다양한 응용 분야 논의가 활발해지며 일반 인공지능(AGI: Artificial Generative Intelligence) 의 출현 가능성에 대한 전문가들의 갑론을박 현상도 목격할 수 있었다.

한편으로는 챗GPT 사용자의 폭증과 동시에 챗GPT에 관한 문제점에 관한 인식도 빠르게 확산했다. 소위 환각(Hallucination)으로 불리는 현상이 챗GPT와의 대화에서 자주 발견되며 챗GPT의 한계로 지적된 것이다. 사실에 근거하지 않은 내용을 문맥상 그럴듯한 표현으로 스스럼 없이 생성해내는 챗GPT의 신뢰도에 심각한 타격을 주었고, 곧이어 GPT-3.5에서 GPT-4.0 기반의 진화된 버전에서는 이러한 환각 현상을 어떻게든 최소화하는 것이 주요 화두가 되었다.
챗GPT의 근간인 GPT(Generative Pre-trained Transformer; 사전 학습된 생성형 트랜스포머)는 오픈AI(OpenAI)에서 개발한 자연어 처리를 위한 대표적인 대규모 언어 모델(LLM: Large Language Model)이다. 마이크로소프트가 후원하는 오픈AI뿐만 아니라 구글, 페이스북, 아마존, 엔비디아, IBM 등 주요 글로벌 IT 기업이 LLM 기반의 서비스를 제공한다. 우리나라에서도 네이버 클라우드의 하이퍼클로버X를 위시하여 더 많은 다양한 LLM 서비스가 등장할 것으로 예상된다.
API(Application Programming Interface) 기반의 서비스로도 제공하는 LLM은 다양한 인공지능 애플리케이션에서 활용될 수 있다. 즉, LLM 기반의 생태계는 기하급수적으로 커지며 애플리케이션 영역도 거의 모든 도메인으로 확대될 것이다. 다양한 애플리케이션의 홍수로 인한 사이버 보안 위협 또한 간과할 수 없다.
OWASP 10대 웹 애플리케이션 보안 취약점
OWASP(Open Web Application Security Project)는 소프트웨어 애플리케이션과 웹의 보안을 개선하는 목적으로 설립된 비영리 단체로, 웹에서의 정보 노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하는 전 세계 연구자/개발자들로 구성된 커뮤니티이다. 대표적인 결과물로는 웹 애플리케이션 10대 취약점을 들 수 있다.

10대 웹 애플리케이션 보안 취약점은 A01부터 A10까지 번호를 매겨, 중요한 새로운 위협 요소가 등장하거나 추세가 변경되는 것을 반영하여 계속 업데이트되는 것이 특징이다. 위에 캡쳐한 목록 이미지는 2021년 수정 반영된 내용을 2017년과 비교하여 도식화한 것이다. 일부는 우선순위가 조정되고, 일부는 새로 등장하거나, 혹은 사라지기도 하며, 여러 항목이 하나로 통합되기도 한다.
2021년의 10대 보안 취약점을 간략히 설명하면 다음과 같다.
- 접근 제어 취약점(Broken Access Control): 이 문제는 공격자가 접근해서는 안 되는 리소스에 접근할 수 있을 때 발생한다. 이는 접근 제어를 제대로 구현하지 않았거나 접근 제어를 우회할 때 발생할 수 있다.
- 암호화 실패(Cryptographic Failures): 이는 암호화 기능이 올바르게 구현되지 않았을 때 발생하며, 이에 따라 데이터가 노출되거나 변조될 수 있다.
- 인젝션(Injection): 인젝션 취약점은 신뢰할 수 없는 데이터가 명령 또는 쿼리의 일부로 전송될 때 발생한다. 대표적인 것으로 SQL 인젝션을 들 수 있으며, 이로 인해 공격자가 임의의 코드를 실행하거나 민감한 데이터에 접근할 수 있다.
- 안전하지 않은 설계(Insecure Design): 이 취약점은 애플리케이션의 설계 단계에 보안을 고려하지 않는 경우 발생한다. 설계의 결함으로 인한 취약점은 이후 발견되어도 수정하기 어려운 경우가 많다.
- 보안 설정 오류(Security Misconfiguration): 이 약점은 보안 설정이 올바르게 구성되지 않은 경우 발생한다. 이로 인해 공격자가 민감한 데이터에 접근하거나 애플리케이션을 제어할 수 있다.
- 취약하고 오래된 구성 요소(Vulnerable and Outdated Components): 이 약점은 애플리케이션 패치 등을 제때 실시하지 않아 보안에 취약해진 구성 요소를 통해 발생한다.
- 식별 및 인증 실패(Identification and Authentication Failures): 이 취약점은 애플리케이션 사용자를 제대로 식별하거나 인증하지 못할 때 발생한다.
- 소프트웨어 및 데이터 무결성 실패(Software and Data Integrity Failures): 소프트웨어 또는 데이터가 제대로 검증되지 않았거나 위/변조로부터 보호되지 않았을 때 발생한다. 공격자는 이러한 위/변조된 애플리케이션이나 데이터를 활용해 대상 시스템을 장악함으로써 매우 큰 위협을 가할 수 있다.
- 보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures): 이 취약점은 애플리케이션이 활동에 대한 충분한 정보를 기록하지 않거나 의심스러운 동작에 대한 활동을 제대로 모니터하지 않을 때 발생한다.
- 서버 측 요청 위조(SSRF: Server-Side Request Forgery): 공격자가 서버에서 네트워크의 다른 서버로 위조된 요청을 보낼 수 있을 때 발생한다. 서버에서 전송되는 정보를 중간에 가로채 위/변조하여 재전송하거나, 혹은 이미 해킹된 서버를 통해 위조된 데이터나 명령이 외부 서버에 전달되도록 한다.
LLM을 활용하는 AI 애플리케이션도 이와 유사한 유형의 보안 취약점을 가질 수 있다. 이에 따라 OWASP에서는 10대 LLM 애플리케이션 취약점을 정의하기로 하고 현재 드래프트 버전 0.1이 나온 상태다. 이에 대해서 살펴보겠다.
OWASP 10대 LLM 애플리케이션 취약점
여기에 소개되는 드래프트 버전은 LLM 기반의 인공지능 애플리케이션이 가질 수 있는 매우 중요한 취약점 유형을 나열하고 있다. 아직 초기 상태이긴 하지만 기존 OWASP 10대 위험과 견주어 인공지능 애플리케이션을 개발하거나 사용할 때 염두에 두어야 할 주요 보안 이슈를 담고 있다는 점에서 주목할 필요가 있다.
대부분 LLM은 일정 수준의 정보 보호나 컴플라이언스 등 기본 지침을 준수하기 위해 프롬프트를 걸러내는 필터링 기능이 있다. 그런데 신중하게 제작된 프롬프트를 사용하여 이러한 필터를 우회하여 모델이 이전 지침을 무시하게 하거나, 또는 의도하지 않은 작업을 수행하도록 LLM을 조작할 수 있다. 이를 프롬프트 인젝션이라고 한다. 소위 LLM 탈옥(Jail Breaking)이란 행위로 가장 빈번히 사용되는 방식이다. LLM의 토큰화 또는 인코딩 메커니즘의 약점을 악용하거나, 악의로 조작된 맥락(Context)을 제공하여 LLM이 의도하지 않은 작업을 수행하도록 오도하는 행위들을 들 수 있다. 이를 예방하기 위해 다음과 같은 조치가 필요하다.
- 사용자 제공 프롬프트에 대해 엄격한 입력 유효성 검사 및 정화(Sanitization) 구현.
- 맥락 인식 필터링 및 출력 인코딩을 사용하여 프롬프트 조작 방지.
- LLM을 정기적으로 업데이트하고 미세 조정(Fine Tuning)함으로써 악성 입력 예방 강화.
- LLM 상호 작용을 모니터링하고 기록하여 잠재적인 프롬프트 인젝션 시도를 탐지하고 분석.
데이터 유출은 LLM이 응답을 통해 민감한 정보, 독점 알고리즘 또는 기타 기밀 세부 정보를 실수로 공개함으로써 민감한 데이터 또는 지적 재산에 대한 무단 접근, 개인정보 침해 및 기타 보안 위반 등이 발생하는 것을 말한다. LLM의 응답 과정에서 민감한 정보의 필터링이 불완전하거나 부적절한 경우, 또는 LLM을 훈련하는 과정에서 민감한 데이터를 과도하게 활용하는 경우 생기는 취약점이다. 또한 LLM의 잘못된 해석 또는 오류로 인해 기밀 정보가 의도치 않게 공개될 수도 있다. 다음과 같은 예방책이 필요하다.
- 엄격한 출력 필터링 및 맥락(Context) 인식 메커니즘을 구현하여 LLM이 민감한 정보를 노출하지 않도록 함.
- LLM의 학습 과정에서 차등 개인정보 보호 기법 또는 기타 데이터 익명화 방법을 사용하여 과적합 또는 암기 위험을 줄임.
- LLM의 대응을 정기적으로 감사하고 검토하여 민감한 정보가 실수로 공개되지 않도록 함.
- LLM 상호 작용을 모니터링하고 기록하여 잠재적인 데이터 유출 사고를 감지하고 분석함.
신뢰할 수 없는 코드를 격리된 환경에서 실행하여 시스템에 대한 잠재적인 손상을 방지하기 위해 일반적으로 “샌드박스”를 활용한다. LLM의 경우도 마찬가지로 외부 리소스나 민감한 시스템에 접근할 때 “샌드박싱”을 해야 하는데 이때 제대로 격리되지 않으면 잠재적인 악용, 무단 액세스 또는 LLM에 의해 의도하지 않은 동작이 발생할 수 있다. 가상 머신, 컨테이너 및 파일 시스템 격리와 같은 다양한 기술을 사용하여 구현하게 되는데, 이런 환경 분리가 불충분하면 제어되지 않은 상태에서 민감한 리소스에 접근할 수 있다. 예를 들어 LLM이 시스템 수준의 작업을 수행하거나 다른 프로세스와 상호작용하는 등의 행위를 할 수 있게 되는데 이를 예방하기 위해 고려해야 할 사항은 다음과 같다.
- 적절한 샌드박싱 기술을 구현하여 다른 중요한 시스템 및 리소스로부터 LLM 환경을 격리.
- 민감한 리소스에 대한 LLM의 접근을 제한하며 그 기능을 의도된 목적에 필요한 최소한의 기능으로 제한.
- LLM의 환경과 접근 제어를 정기적으로 감사하고 검토하여 적절한 격리가 유지되는지 확인.
- LLM 상호 작용을 모니터링하고 기록하여 잠재적인 샌드박싱 문제를 감지하고 분석.
무단 코드 실행은 공격자가 자연어 프롬프트를 통해 LLM을 악용하여 시스템에서 악성 코드, 명령 또는 작업을 실행하는 것을 말한다. 예를 들면 사용자 입력을 정화(Sanitize)하거나 제한하지 않아 공격자가 승인되지 않은 코드 실행을 트리거하는 프롬프트를 만들 수 있다. 샌드박싱이 부적절하거나 LLM 기능에 대한 제어장치가 불충분하면 시스템 수준의 기능 또는 인터페이스가 의도치 않게 LLM에 노출될 수 있다. 이때 LLM이 시스템과 상호 작용하면서 발생할 수 있는 보안 위협이다. 예방을 위해서 고려해야 할 사항은 다음과 같다.
- 엄격한 입력 유효성 검사 및 정화 프로세스를 구현하여 악의적이거나 예기치 않은 프롬프트가 LLM에서 처리되는 것을 방지
- 적절한 샌드박싱을 보장하고 LLM의 기능을 제한하여 기본 시스템과 상호 작용할 수 있는 기능을 제한
- LLM의 환경과 접근 제어를 정기적으로 감사하고 검토하여 승인되지 않은 작업이 있는지 확인
- LLM 상호 작용을 모니터링하고 기록하여 잠재적인 무단 코드 실행 문제를 감지하고 분석
서버 측 요청 위조 취약점은 공격자가 LLM을 악용하여 의도하지 않은 요청을 수행하거나 내부 서비스, API 또는 데이터 스토어와 같은 제한된 리소스에 접근할 때 발생한다. 만일 LLM 내부 시스템, 혹은 동등한 수준의 접근 권한을 가진 서버가 해킹된다면 이를 통해 승인되지 않은 요청이 LLM에서 전달되어 실행될 수 있다. 취약점으로 이해 발생하는 현상은 앞서 언급된 LLM 03, LLM 04와 유사하지만, 발생 원인은 웹 애플리케이션에서의 SSRF 취약점과 동일하다고 볼 수 있다. 특히 네트워크 또는 애플리케이션 보안 설정이 잘못 구성되어 내부 리소스가 LLM에 노출되는 경우를 들 수 있다. 이의 예방을 위해서는 앞서 LLM 03, LLM 04의 예방책 외에도 다음과 같은 조치가 필요하다.
- 네트워크 및 애플리케이션 보안 설정을 정기적으로 감사하고 검토하여 내부 리소스가 실수로 LLM에 노출되지 않도록 함.
- LLM 상호 작용을 모니터링하고 기록하여 잠재적인 SSRF 취약점을 탐지하고 분석.
LLM이 생성한 콘텐츠에 과도하게 의존하면 오해의 소지가 있거나 잘못된 정보가 전파되고, 의사 결정에 있어 사람의 의견이 위축되며, 비판적 사고가 감소할 수 있다. 즉 LLM이 제시한 결과를 검증 없이 신뢰함으로써 잘못된 소통이 이루어지며 의도하진 않은 결과를 초래할 수 있다. LLM이 만들어 낸 콘텐츠에 대해서 편견이나 잘못된 정보가 없는지 검증하는 프로세스가 필요하며, 최종 결정을 내릴 때 충분히 사람이 개입하여 감독하여야 한다.
이 문제를 방지하기 위해서는 다음과 같은 지침을 고려한다.
- 사용자가 결정을 내리거나 정보를 사실로 받아들이기 전에 반드시 LLM에서 생성한 콘텐츠를 확인하고 대체 소스를 참조.
- 사람이 직접 감독하고 검토하는 프로세스를 구현하여 LLM에서 생성된 콘텐츠가 정확하고 적절하며 편견이 없는지 확인.
- LLM으로 생성한 콘텐츠는 기계로 생성된 것으로 완전히 신뢰할 수 있거나 정확하지 않을 수 있음을 사용자에게 명확하게 전달.
- 사용자와 이해관계자가 LLM 생성 콘텐츠의 한계를 인식하여 적절한 수준의 회의적 시각으로 접근하도록 교육.
- LLM으로 생성한 콘텐츠는 사람의 전문 지식과 의견을 대체하는 것이 아니라 보완하는 용도로만 사용.
인공지능 결과가 인간 가치와 일치가 되지 않아 발생하는 문제는 LLM의 목표와 동작이 의도된 사용 사례와 일치하지 않아 원치 않는 결과나 취약성을 유발할 수 있다는 문제이다. 예를 들어 목표가 잘못 정의되어 LLM이 원치 않거나 유해한 행동에 우선순위를 두게 되는 경우다. 보상 함수 또는 학습 데이터가 잘못 정렬된 상태로 학습된 모델이 이러한 동작을 초래할 가능성이 크다. 다양한 맥락과 시나리오에서 LLM 동작에 대한 충분한 검증이 이루어지지 않아 생기는 취약점이며 이를 방지하기 위해서는 다음을 고려하여야 한다.
- 설계 및 개발 과정에서 LLM의 목표와 의도된 행동을 명확하게 정의.
- 보상 함수와 학습 데이터가 원하는 결과에 반하는 유해한 행동을 조장하지 않는지 확인.
- 다양한 시나리오, 입력 및 맥락에서 LLM의 동작을 정기적으로 검증하여 정렬 문제를 식별/해결.
- 모니터링 및 피드백 메커니즘을 구현하여 LLM의 성능과 정렬을 지속적으로 평가/개선.
접근 제어 또는 인증 메커니즘이 제대로 구현되지 않는 경우 권한이 없는 사용자가 LLM과 상호 작용하며 잠재적으로 취약점을 악용할 수 있다. 이는 일반적인 보안 관점에서의 접근 제어 문제와 유사한 것으로, LLM을 실행하는 시스템 또는 LLM 자체에 대한 접근 권한 통제가 정상적으로 이루어지지 않는 경우 발생한다. 다음과 같은 접근 제어 고도화가 필요하다.
- 다단계 인증과 같은 강력한 인증 메커니즘을 통해 LLM에 대한 접근통제 강화.
- 역할 기반 접근 제어(RBAC)를 사용하여 역할과 책임에 따라 사용자 권한을 정의하고 이를 적용.
- LLM에서 생성된 콘텐츠 및 작업에 대한 적절한 접근 제어를 구현하여 무단 접근 및 조작을 방지.
- 접근 제어를 정기적으로 감사하고 업데이트.
부적절한 오류 처리로 노출되는 오류 메시지 또는 디버깅 정보는 공격자에게 시스템 세부 정보 또는 잠재적인 공격 경로와 같은 매우 민감한 정보를 제공하는 수단이 될 수 있다. 올바른 오류 처리가 중요한 이유이다. 이를 방지하기 위해서는 다음과 같은 조치를 해야 한다.
- 적절한 오류 처리 메커니즘을 구현하여 오류를 포착, 기록, 처리할 수 있도록 함.
- 오류 메시지와 디버깅 정보에 민감한 정보나 시스템 세부 정보가 노출되지 않도록 사용자를 위한 일반 오류 메시지를 적절히 정의하여 사용.
- 개발자와 관리자를 위해서는 별도의 자세한 오류 정보를 정의하여 기록.
- 정기적으로 오류 로그를 검토하여 확인된 문제를 해결하며 시스템 안정성 개선을 위해 필요한 상시 프로세스를 구현.
학습 데이터 중독은 공격자가 악의적으로 조작된 학습 데이터를 주입하거나, 또는 LLM의 미세 조정 절차를 조작하여 모델의 보안, 효율성 또는 윤리적 행동을 손상할 수 있는 취약성을 말한다. 이러한 취약점을 악용해 LLM에 공격자의 의도적인 편견을 주입할 수 있다. 그 결과, 당초 LLM의 의도하지 않던 부적절한 응답이 양산되어 LLM의 효용성을 크게 망가뜨리게 된다. 이를 예방하기 위해서는 다음과 같은 조치가 필요하다.
- 신뢰할 수 있는 출처에서 데이터를 확보하고 품질을 검증하여 학습 데이터의 무결성 보장.
- 강력한 데이터 정화(Sanitize) 및 전처리 기술을 구현하여 학습 데이터에서 잠재적인 취약성이나 편견을 제거.
- LLM의 학습 데이터와 미세 조정 절차를 정기적으로 검토 및 감사하여 잠재적인 문제나 악의적인 조작을 탐지.
- 모니터링 및 경고 메커니즘을 활용하여 LLM의 비정상적인 동작이나 성능 문제를 상시 감지하고 훈련함으로써 학습 데이터 중독을 나타내는 잠재적인 문제를 정확하게 탐지할 수 있는 기능을 강화함.
마치며
LLM 기반 인공지능 애플리케이션 생태계 규모가 커지면 커질수록 보안에 대한 위협 요인도 증가하게 된다. 단순 비례하여 증가하는 것이 아니라 관련 산업 및 시장 규모의 성장 속도를 웃도는 많은 공격 시도가 생길 것이다. 따라서 안전하고 생산적으로 LLM을 활용하기 위해서는 더 늦기 전에 관련 취약점을 분석하고 대응하는 것이 꼭 필요하다. 이러한 관점에서 OWASP가 기존의 10대 웹 애플리케이션 보안 위협에 이어 LLM 10대 위협을 정의하기 시작한 것은 매우 고무적이다.
현재 드래프트 형태로 나와 있는 0.1 버전은 그야말로 마중물에 불과하다. 사실상 본 리포트에서 소개하는 내용이 전부다. 자체적으로 LLM을 구축하거나, 또는 LLM 기반 AI 애플리케이션을 개발/활용하고자 한다면 비록 드래프트 수준일지라도 현재의 10대 위협 요소를 미리 검토해 보고 그다음 단계로 나아가는 것을 적극적으로 권장하는 바이다. 사전에 이러한 위협에 대해 인지함으로써 잠재적 위험을 상당 부분 줄일 수 있을 것이다.
한편, 앞으로 더 많은 LLM 기술 및 다양한 도메인 전문가들이 합류하여 본 10대 리스트를 체계적으로 정립하여 궁극적으로 데브섹옵스(DevSecOps) 파이프라인까지 적용될 수 있기를 기대한다.
디지털 이슈 리포트
본 글은 한국지능정보사회진흥원의 지원을 받아 작성되었으며, 디지털서비스 이용지원시스템에 동시 게재합니다.