CRIME, BREACH, TIME, LUCKY-13과 같은 공격이 발견된 이후 길이 기반 부채널 공격은 실용적인 것으로 간주되었습니다. 패킷은 암호화되었지만 공격자는 길이 또는 타이밍 정보와 같은 메타데이터를 분석하여 기본 일반 텍스트에 대한 정보를 추론할 수 있었습니다.
Cloudflare는 최근 Ben Gurion 대학교 연구진으로부터 “What Was Your Prompt? A Remote Keylogging Attack on AI Assistants(당신의 프롬프트는 무엇입니까? AI 비서에 대한 원격 키로깅 공격)”이라는 제목의 논문을 작성했다는 소식을 접했습니다. 이 논문에서는 “웹을 통해 AI 비서의 암호화된 응답을 읽을 수 있는 새로운 부채널”에 대해 설명하고 있습니다.
Workers AI 및 AI Gateway 팀은 공개 버그 바운티 프로그램을 통해 이러한 보안 연구진과 긴밀하게 협력하여 LLM 공급자에게 영향을 미치는 취약점을 발견하고 완벽하게 패치를 적용했습니다. 자세한 연구 논문은 여기에서 확인할 수 있습니다.
이 취약성에 관한 경고를 받은 즉시 Cloudflare는 모든 Workers AI 및 AI Gateway 고객을 보호하기 위한 완화 조치를 시행했습니다. Cloudflare가 평가한 바에 따르면 Workers AI 및 AI Gateway 고객에게 눈에 띄는 위험은 없었습니다.
부채널 공격은 어떻게 작동할까요?
이 논문에서는 저자들이 LLM 공급자와 채팅 세션의 스트림을 가로채고, 네트워크 패킷 헤더를 사용하여 각 토큰의 길이를 추론하고, 시퀀스를 추출하여 분할한 다음, 자체 전용 LLM을 사용하여 응답을 추론하는 방법에 대해 설명합니다.
공격을 성공적으로 수행하려면 두 가지의 핵심 요건이 필요합니다. 바로 스트리밍 모드에서 실행할 수 있는 AI 채팅 클라이언트 및 클라이언트와 AI 채팅 서비스 간의 네트워크 트래픽을 캡처할 수 있는 악의적인 행위자입니다. 스트리밍 모드에서는 LLM 토큰이 순차적으로 방출되어 토큰 길이의 부채널을 도입됩니다. 악의적인 행위자는 공용 네트워크 또는 인터넷 서비스 공급자(ISP)를 통해 패킷을 도청할 수 있습니다.
다음은 부채널 공격에 취약한 요청의 예시입니다.
Wireshark를 사용하여 스트리밍 도중 LLM 채팅 세션의 네트워크 패킷을 검사해 보겠습니다.
curl -X POST \
https://api.cloudflare.com/client/v4/accounts/<account-id>/ai/run/@cf/meta/llama-2-7b-chat-int8 \
-H "Authorization: Bearer <Token>" \
-d '{"stream":true,"prompt":"tell me something about portugal"}'
첫 번째 패킷의 길이는 95이며 길이가 4인 토큰 "Port"에 해당합니다. 두 번째 패킷은 길이가 93이며 길이가 2인 토큰 "ug"에 해당하는 등, 이렇게 계속 이어집니다. 네트워크 패킷 길이에서 토큰 봉투일 가능성이 있는 것을 제거하면 암호화된 네트워크 데이터를 스니핑하는 것만으로도 전송된 토큰 수, 시퀀스, 개별 길이를 쉽게 추론할 수 있습니다.
이 취약점은 공격자가 개별 토큰 길이의 시퀀스가 필요하기 때문에 스트리밍을 사용하는 텍스트 생성 모델에만 영향을 미칩니다. 이는 Workers AI와 같이 LLM과 상호 작용하는 가장 일반적인 방법인 스트리밍을 사용하는 AI 추론 공급자가 잠재적으로 취약하다는 것을 의미합니다.
이 방법을 사용하려면 공격자가 동일한 네트워크에 있거나 통신 트래픽을 관찰할 수 있는 위치에 있어야 하며, 이 방법의 정확도는 대상 LLM의 쓰기 스타일을 알고 있는지에 따라 달라집니다. 이상적인 조건에서 연구원들은 자신들의 시스템이 "AI 비서의 응답 중 29%를 재구성하고 55%에서 주제를 성공적으로 추론할 수 있다"고 주장합니다. 다른 부채널 공격과 달리, 이 경우 공격자는 실제에 대해 자신의 예측을 평가할 방법이 없다는 점도 유의해야 합니다. 즉, 완벽에 가까운 정확도를 가진 문장을 얻을 수는 있지만 이는 문장의 접속사 부분에만 해당됩니다.
LLM 부채널 공격 완화
이러한 유형의 공격은 패킷에서 추론한 토큰의 길이에 의존하기 때문에 토큰 크기를 모호하게 만들면 쉽게 완화할 수 있습니다. 연구진은 이러한 부채널 공격을 완화하기 위해 몇 가지 전략을 제안했는데, 가장 간단한 방법은 패킷에서 응답을 추론할 수 없도록 토큰 응답에 임의 길이의 노이즈(랜덤 노이즈)를 추가하여 토큰 길이를 모호하게 만드는 것입니다. Cloudflare는 당사 추론 제품인 Workers AI에 이 완화 기능을 즉시 추가했지만, AI Gateway에도 추가하여 고객이 실행하는 위치에 관계없이 LLM을 보호할 수 있도록 지원하고자 했습니다.
오늘부터 Workers AI와 AI Gateway의 모든 사용자는 이러한 부채널 공격으로부터 자동으로 보호받게 됩니다.
Cloudflare가 취한 조치
이러한 연구 결과와 기술을 악용할 경우 AI 제품에 미칠 수 있는 영향을 알게 된 후, Cloudflare는 이러한 상황에서 항상 해왔던 것처럼 시스템 엔지니어, 보안 엔지니어, 제품 관리자로 이루어진 팀을 구성하고 위험 완화 전략과 이후 단계에 대해 논의하기 시작했습니다. 또한 연구진과의 통화도 진행했는데, 이들은 기꺼이 참석하여 결론을 발표하고 Cloudflare 팀원들의 질문에도 답변해 주었습니다.
연구진은 공격 결과를 검증하는 데 사용할 수 있는 테스트 노트북을 제공했습니다. 노트북의 예제에서는 결과를 재현할 수 있었지만, 다른 프롬프트 응답과 다른 LLM을 사용할 때 테스트 정확도가 크게 달라지는 것을 발견했습니다. 그럼에도 불구하고 이 논문에는 장점과 무시할 수 없는 수준의 위험성이 있습니다.
Cloudflare는 논문에 첫 번째 완화 제안을 반영하기로 결정했습니다. 바로 각 메시지에 랜덤 패딩을 추가하여 스트림의 실제 토큰 길이를 숨기고 네트워크 패킷 크기만을 기준으로 정보를 추론하려는 시도를 어렵게 만드는 것입니다.
이제 Cloudflare 추론 제품인 Workers AI가 보호됩니다
Cloudflare의 서비스형 추론 제품을 사용하면 누구나 Workers AI 플랫폼을 사용할 수 있고 지원되는 Cloudflare AI 모델에 API 호출을 할 수 있습니다. 즉, Cloudflare는 모델에 들어오고 나가는 추론 요청을 감독합니다. 따라서 서비스의 보안을 유지하고 잠재적인 취약점으로부터 보호하는 것은 당사의 사임입니다. Cloudflare는 연구 결과에 대한 통보를 받은 즉시 필요한 수정 사항을 도입했으며, 이제 모든 Workers AI 고객은 이러한 부채널 공격으로부터 자동으로 보호됩니다. 연구진의 윤리적 테스트를 제외하고 이 취약점을 악용한 악의적인 공격은 아직 발견되지 않았습니다.
Workers AI에 대한 Cloudflare의 솔루션은 연구 문서에서 제안한 완화 전략을 변형한 것입니다. 원시 토큰이 아닌 JSON 객체를 스트리밍하기 때문에 공백 문자로 토큰을 추가하는 대신 임의의 가변 길이 문자열 값을 갖는 "p"(패딩용)라는 새로운 속성을 추가했습니다.
SSE 구문을 사용한 스트리밍 응답 예시:
이 방법은 SDK 또는 클라이언트 코드를 수정할 필요가 없고, 최종 사용자에게 변경 사항이 보이지 않으며, 고객이 별도의 조치를 취할 필요가 없다는 장점이 있습니다. JSON 객체에 임의의 가변 길이를 추가하여 동일한 네트워크 수준의 가변성을 도입하면 공격자는 기본적으로 필요한 입력 신호를 잃게 됩니다. 고객은 이러한 보호 기능의 이점을 누리면서도 Workers AI를 평소처럼 계속 사용할 수 있습니다.
data: {"response":"portugal","p":"abcdefghijklmnopqrstuvwxyz0123456789a"}
data: {"response":" is","p":"abcdefghij"}
data: {"response":" a","p":"abcdefghijklmnopqrstuvwxyz012"}
data: {"response":" southern","p":"ab"}
data: {"response":" European","p":"abcdefgh"}
data: {"response":" country","p":"abcdefghijklmno"}
data: {"response":" located","p":"abcdefghijklmnopqrstuvwxyz012345678"}
한 걸음 더 나아가기: 모든 추론 제공자의 사용자를 보호하는 AI Gateway
Cloudflare는 AI 추론 제품에 보호 기능을 추가했지만, 모든 제공자에게 요청을 프록시하는 AI Gateway라는 제품도 보유하고 있습니다. AI Gateway는 사용자와 지원이 제공되는 추론 제공자 사이에서 프록시 역할을 수행하여 개발자가 AI 앱에 대한 제어, 성능 및 가시성을 확보할 수 있도록 지원합니다. 더 나은 인터넷 구축을 지원한다는 Cloudflare의 사명에 따라, 당사는 사용하는 제공자나 이러한 공격을 방지하기 위한 완화 조치의 유무에 관계없이 텍스트 생성 AI를 사용하는 모든 고객에게 도움이 될 수 있는 수정 사항을 신속하게 배포하고자 했습니다. 이를 위해 Cloudflare는 AI Gateway를 통해 프록시된 모든 스트리밍 응답에 가변 길이의 랜덤 노이즈를 더하는 유사한 솔루션을 구현했습니다.
업스트림 추론 제공자가 아직 취약점을 완화하지 않았더라도 이제 AI Gateway 고객은 이러한 부채널 공격으로부터 자동으로 보호됩니다. 추론 제공자가 이 취약점을 패치했는지 확실하지 않은 경우, AI Gateway를 사용하여 요청을 프록시 설정하고, 보호되고 있는지 확인하세요.
결론
Cloudflare의 사명은 기술 스택에 관계없이 모든 인터넷 사용자를 중요하게 생각하며 더 나은 인터넷을 구축하는 것입니다. Cloudflare는 투명하면서도 고객의 조치가 필요 없는 방식으로 AI 제품의 보안을 개선할 수 있게 되어 자랑스럽게 생각합니다.
이러한 취약점을 발견하고 당사가 문제 영역을 이해하는 데 협력해 주신 연구원 여러분께 진심으로 감사드립니다. 만약 여러분이 Cloudflare 제품 보안 강화에 관심이 있는 보안 연구자라면 hackerone.com/cloudflare를 방문하여 당사의 버그 바운티 프로그램을 확인해 주시기 바랍니다.