할로윈 특가사탕 안 주면, 영상을 고친다!세 플랜 모두 인하. 영구 라이선스 $30 할인11월 2일 23:59(태평양 시간)까지

요금 보기

로컬이라고 안전한 것은 아닙니다: AI 어시스턴트와 데스크톱 앱 사이의 채널 지키기

로컬 MCP 연결에도 방어가 필요한 이유와 사용자별 명명된 파이프, 첫 인스턴스 소유, 128비트 토큰, 상수 시간 비교, 실패하면 닫히는 설정을 설명합니다.

핵심 요약

  • AI 어시스턴트와 데스크톱 앱 사이의 로컬 연결이라도 같은 PC의 다른 사용자, 원격 클라이언트, 채널 이름을 먼저 차지한 프로그램이 접근할 수 있습니다.
  • Windows에서 KwaFlux의 채널은 내 계정만 열 수 있고, KwaFlux가 먼저 차지하며, 원격 클라이언트를 거부하는 명명된 파이프입니다. Mac에서는 내 계정에만 권한이 있는 소켓입니다.
  • 모든 연결은 128비트 무작위 토큰으로 시작하며, 토큰은 상수 시간으로 비교되고 로그에 남지 않습니다. 설정에서 토큰을 재설정할 수 있습니다.
  • MCP 서버에 토큰을 전달하는 파일은 소유자 전용 권한으로 원자적으로 기록됩니다. 그 권한을 설정할 수 없으면 KwaFlux는 파일을 게시하지 않습니다.

AI 어시스턴트는 내 컴퓨터 안의 채널로 KwaFlux와 통신합니다. 그래서 다른 누구도 이 채널에 닿을 수 없다고 여기기 쉽지만, 저절로 그렇게 되지는 않습니다. Windows에서 기본 설정으로 만든 명명된 파이프는 어떤 사용자든 읽을 수 있고, 네트워크에서 접근할 수 있으며, 먼저 만드는 프로세스가 차지할 수 있습니다.

KwaFlux는 이 문들을 하나씩 닫았습니다. 이 글에서 그 방법을 살펴봅니다.

이 글에서는 로컬 채널이 뚫리는 세 가지 경로, KwaFlux가 경로마다 쓰는 방어책, 토큰을 MCP 서버에 안전하게 전달하는 방법, 그리고 로컬 채널이 막을 수 없는 것을 알아봅니다.

목차

  1. 로컬 IPC 채널이란?
  2. "로컬"이 무너지는 세 가지 경우
  3. 계층 1: 파이프를 열 수 있는 사람
  4. 계층 2: 연결마다 토큰
  5. 계층 3: 유출 없이 토큰 게시하기
  6. 계층 4: 클라이언트를 통제하는 제한
  7. 채널이 막지 못하는 것
  8. 테스트 방법
  9. 자주 묻는 질문

로컬 IPC 채널이란?

로컬 IPC(프로세스 간 통신) 채널은 같은 컴퓨터의 두 프로그램이 네트워크 스택을 거치지 않고 메시지를 주고받게 해 주는 연결입니다. Windows의 명명된 파이프와 macOS의 Unix 도메인 소켓이 대표적인 예입니다.

KwaFlux의 MCP 구성에서는 AI 어시스턴트가 파일 복구나 변환 같은 작업을 위해 KwaFlux MCP 서버를 실행하고, 그 서버가 이런 채널로 실행 중인 KwaFlux 앱에 연결됩니다. 이 채널이 다른 계층 사이에서 어디에 놓이는지는 컨트롤 플레인 글에서 볼 수 있습니다.

"로컬"이 무너지는 세 가지 경우

위험어떤 모습인가왜 중요한가
PC의 다른 계정가족이 함께 쓰는 컴퓨터, 공용 워크스테이션, 여러 사용자가 접속하는 원격 데스크톱 서버Microsoft 문서에 따르면 명명된 파이프의 기본 보안 설명자는 "Everyone 그룹 구성원과 익명 계정에 읽기 권한"을 줍니다
원격 클라이언트명명된 파이프는 네트워크를 통해 이름으로 열 수 있음Microsoft는 원격 클라이언트를 받는 파이프가 보안 설명자로만 그 클라이언트를 검사한다고 설명합니다
스쿼팅KwaFlux가 시작되기 전에 다른 프로그램이 예상된 이름으로 파이프를 만듦MCP 서버가 요청과 토큰을 사칭 프로그램에 넘기게 됩니다

어느 것도 특별한 공격이 필요하지 않습니다. 모두 기본값에서 비롯됩니다.

계층 1: 파이프를 열 수 있는 사람

KwaFlux는 세 가지 위험에 맞춰 세 가지 설정으로 Windows 파이프를 만듭니다.

  • 내 계정 전용 보안 설명자. 시스템과 관리자에게 모든 권한을, Everyone에게 읽기 권한을 주는 기본값 대신, 파이프의 접근 목록에 현재 사용자를 지정합니다.
  • 첫 인스턴스만. KwaFlux는 FILE_FLAG_FIRST_PIPE_INSTANCE로 파이프를 만듭니다. Microsoft 문서는 이 플래그를 쓰면 "첫 번째 인스턴스 생성은 성공하지만, 다음 인스턴스 생성은 ERROR_ACCESS_DENIED로 실패한다"고 설명합니다. 이미 누군가 그 이름을 차지하고 있으면 KwaFlux가 이를 알아채고, 자기 소유가 아닌 파이프로는 서비스하지 않습니다.
  • 원격 클라이언트 거부. 파이프는 PIPE_REJECT_REMOTE_CLIENTS를 씁니다. Microsoft는 이를 간단히 "원격 클라이언트의 연결은 자동으로 거부된다"고 설명합니다.

macOS에서는 파일 권한이 0600인 Unix 도메인 소켓으로 대기하므로 내 계정만 열 수 있습니다.

참고: MCP 사양의 보안 지침도 로컬 서버에 같은 조언을 합니다. stdio 전송을 써서 MCP 클라이언트만 접근할 수 있게 하고, 서버가 다른 전송 방식을 쓴다면 인증 토큰을 요구하거나 "접근이 제한된" IPC를 쓰라는 것입니다. KwaFlux는 둘 다 합니다. 호스트는 stdio로 MCP 서버에 닿고, MCP 서버는 토큰을 쓰는 제한된 채널로 앱에 닿습니다.

계층 2: 연결마다 토큰

권한은 누가 채널을 열 수 있는지 정합니다. 토큰은 반대편 프로그램이 KwaFlux가 준비한 바로 그 프로그램이라는 것을 증명합니다.

  • 생성. KwaFlux는 시작할 때 운영체제의 암호학적 난수 생성기로 128비트 토큰을 만듭니다.
  • 핸드셰이크. 모든 연결은 토큰을 담은 hello 메시지로 시작해야 합니다. 이 과정이 성공하기 전까지 앱은 그 연결에서 다른 어떤 것도 받지 않습니다.
  • 상수 시간 비교. KwaFlux는 첫 바이트가 틀리든 마지막 바이트가 틀리든 같은 시간이 걸리는 방식으로 토큰을 바이트 단위로 비교합니다. 그래서 응답 시간으로 추측이 얼마나 가까웠는지 새어 나가지 않습니다.
  • 로그에서 제외. 토큰은 KwaFlux 로그와 설정의 활동 목록에 남지 않습니다.
  • 재설정. 설정의 에이전트 액세스 토큰 재설정을 누르면 토큰이 새 무작위 토큰으로 바뀝니다. 현재 에이전트 연결이 끊어지고, 설정된 호스트는 다음 호출 때 새 토큰으로 재연결합니다. 무언가 이전 토큰을 읽었다고 의심되면 쓰세요.

계층 3: 유출 없이 토큰 게시하기

MCP 서버에는 토큰이 필요하며, KwaFlux가 시작할 때 쓰는 작은 제어 파일에서 토큰을 얻습니다. 이 파일을 허술하게 다루면 가장 약한 고리가 되므로 가장 신경 써서 처리합니다.

제어 파일 게시 5단계: 제어 폴더를 만들고, 접근 목록을 현재 사용자로 제한하고, 폴더 소유자가 현재 사용자인지 확인하고, 같은 제한을 건 임시 파일에 토큰을 쓰고, 임시 파일로 제어 파일을 원자적으로 교체함. 권한 단계 중 하나라도 실패하면 KwaFlux는 멈추고 파일을 게시하지 않음
  1. 사용자 프로필 안에 제어 폴더를 만듭니다.
  2. 내 계정으로 제한합니다. 폴더의 접근 목록에는 현재 사용자만 들어가며, 상위 폴더의 더 넓은 권한을 상속하지 않습니다.
  3. 소유자를 확인합니다. KwaFlux는 폴더가 현재 사용자의 것인지 확인하므로, 다른 사람이 미리 심어 둔 폴더는 신뢰하지 않습니다.
  4. 같은 제한을 건 임시 파일에 씁니다.
  5. 제어 파일을 원자적으로 교체합니다. 그래서 읽는 쪽은 이전 파일이나 새 파일 중 하나만 보고, 반쯤 쓰인 파일은 보지 않습니다.

중요한 규칙은 실패했을 때의 처리입니다. 이전 버전은 파일을 먼저 쓰고 나중에 권한을 좁혔으며, 그게 실패해도 경고 로그만 남겼습니다. 이제는 KwaFlux가 권한을 설정하지 못하면 파일을 아예 게시하지 않습니다. 문제가 해결될 때까지 MCP가 작동하지 않는데, 이것이 맞는 절충입니다. 끊긴 연결은 눈에 보이지만, 누구나 읽을 수 있는 토큰은 보이지 않기 때문입니다.

계층 4: 클라이언트를 통제하는 제한

인증을 제대로 통과한 클라이언트에도 제한이 있습니다. 그 뒤의 AI가 읽은 내용에 따라 조종될 수 있기 때문입니다.

제한값
동시 연결8
메시지 하나의 크기64 KiB
유휴 연결5분 뒤 종료
새 작업전체 합쳐 분당 10개, 연결당 6개
작업 제어그 연결의 에이전트가 제출한 작업만
마스터 스위치KwaFlux 설정 하나로 에이전트 접근 전체를 끔

이 제한들은 혼란에 빠지거나 조작된 어시스턴트를 가두기 위한 것이며, 경로와 개인정보 글과 SSRF 글에서 다른 각도로 살펴봅니다.

채널이 막지 못하는 것

경계를 정확히 밝히고 싶습니다. 보안을 부풀려 말하는 것은 아무 말도 하지 않는 것보다 해롭기 때문입니다.

채널의 방어책은 다른 사용자 계정, 다른 컴퓨터, 파이프 이름을 차지해 KwaFlux를 사칭하려는 프로그램을 막습니다. 내 계정으로 이미 실행 중인 악성 코드는 막지 못합니다. 나로 실행되는 프로그램은 이미 내 파일, 브라우저 데이터 등 내가 접근할 수 있는 모든 것을 읽을 수 있고, 어떤 로컬 앱도 그런 프로그램으로부터 스스로를 격리할 수 없습니다. 이런 소프트웨어를 컴퓨터에 들이지 않는 것은 운영체제와 보안 소프트웨어의 몫입니다.

참고: 계층 3의 보안 강화와 토큰 재설정은 Windows에 먼저 적용됩니다. Mac 빌드는 이미 소유자 전용 소켓과 토큰 핸드셰이크를 쓰고 있으며, 나머지 항목이 Mac에 적용되면 이 글을 업데이트하겠습니다.

나중으로 미뤄 둔 변경이 하나 있습니다. 비밀 값 자체가 채널을 오가지 않고 양쪽이 서로를 증명하는 핸드셰이크입니다. 지금 보류한 이유는 이 변경이 양쪽 프로토콜을 동시에 바꾸고, 핸드셰이크 버그가 생기면 모든 사용자의 MCP가 멈추며, 이 방식이 더해 줄 효과의 대부분은 이미 첫 인스턴스 소유와 서버의 앱 실행 확인으로 갖춰져 있기 때문입니다.

테스트 방법

컨트롤 플레인의 요청 처리는 어설션 341개로 검증합니다. 별도의 엔드투엔드 테스트 묶음은 실제 컨트롤 플레인과 실제 MCP 프로세스를 띄워 보안 사례 12개 그룹을 실행하며, 여기에는 이 글에서 설명한 채널 검사와 경로 검사가 포함됩니다. 둘 다 KwaFlux 자동 테스트에 들어 있으므로, 이 규칙 중 하나라도 약하게 만드는 변경은 실패한 테스트로 드러납니다.

마치며

"로컬에서만 대기한다"는 로컬 채널 보안의 출발점이지 끝이 아닙니다. 채널을 열 수 있는 사람을 제한하고, 이름의 소유를 확인하고, 모든 연결을 인증하고, 비밀 값은 신중하게 게시하거나 아예 게시하지 말고, 범위 밖의 것은 솔직하게 밝히세요. KwaFlux는 이렇게 AI 어시스턴트와 앱 사이의 연결을 다룹니다.

신중하게 만든 로컬 MCP 서버

KwaFlux는 내 계정만 열 수 있는 채널로 Codex, Claude, Cursor 등 MCP 앱과 연결됩니다. AI 처리는 사용자 GPU에서 실행되며 미디어 파일이 처리를 위해 업로드되지 않습니다. Windows 10(64비트, 버전 1809 이상), Windows 11, Apple Silicon 탑재 macOS 12 이상에서 실행됩니다. 파일 가져오기와 앱 둘러보기에는 계정이 필요 없습니다. 내보내기, 변환, 파일 복구, 링크에서 파일 다운로드에만 로그인과 유료 플랜이 필요합니다.

KwaFlux 받기 · 플랜 보기

내 실제 영상으로 효과를 확인하세요

KwaFlux를 받고 결제 전에 내 영상으로 효과를 무료로 미리 보세요. 계정이 필요 없고, 내 GPU에서 처리하며 처리를 위해 미디어를 업로드하지 않습니다. 영상 미리보기는 1, 3 또는 5초, 흔들림 보정 미리보기는 5, 15 또는 30초 중에서 고를 수 있습니다.

자주 묻는 질문

Windows 명명된 파이프는 안전한가요?

어떻게 만들었는지에 따라 다릅니다. 기본 보안 설명자로 만든 파이프는 Everyone에게 읽기 권한을 주고 원격 클라이언트를 받습니다. 명시적인 접근 목록, PIPE_REJECT_REMOTE_CLIENTS, FILE_FLAG_FIRST_PIPE_INSTANCE를 쓰면 그 컴퓨터의 내 계정으로 접근이 제한됩니다.

명명된 파이프에 네트워크로 접근할 수 있나요?

네, 기본적으로는 그렇습니다. Windows는 클라이언트가 다른 컴퓨터의 파이프를 이름으로 열 수 있게 하며, 원격 클라이언트를 받는 파이프는 보안 설명자로만 그 클라이언트를 검사합니다. 파이프를 만들 때 PIPE_REJECT_REMOTE_CLIENTS를 넘기면 원격 클라이언트를 거부합니다.

명명된 파이프 스쿼팅이란 무엇인가요?

다른 애플리케이션이 쓸 이름으로 그 애플리케이션이 시작되기 전에 프로그램이 파이프를 먼저 만들어, 클라이언트가 사칭 프로그램에 연결되게 하는 것입니다. FILE_FLAG_FIRST_PIPE_INSTANCE로 파이프를 만들면 진짜 서버가 이름이 이미 쓰이고 있다는 것을 알아챕니다.

토큰은 왜 상수 시간으로 비교하나요?

일반적인 비교는 첫 번째로 틀린 바이트에서 멈추기 때문에, 맞힌 바이트가 많은 추측일수록 시간이 조금 더 걸립니다. 그 차이를 재면 비밀 값이 한 바이트씩 새어 나갈 수 있습니다. 상수 시간 비교는 어느 경우든 같은 시간이 걸립니다.

로컬 MCP 서버를 쓰면 다른 프로그램으로부터 내 데이터가 안전한가요?

일부만 그렇습니다. 잘 만든 로컬 서버는 다른 계정, 다른 컴퓨터, 사칭 프로그램을 막습니다. 하지만 이미 내 계정으로 실행 중인 악성 코드는 막지 못하며, 그런 코드는 내가 읽을 수 있는 것은 무엇이든 읽을 수 있습니다. 로컬 앱이 지킬 수 있는 것과 없는 것을 참고하세요.

참고 자료

  1. Microsoft Learn, "CreateNamedPipeA function" (FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_REJECT_REMOTE_CLIENTS, default security descriptor) (2026-10-25 확인)
  2. Microsoft Learn, "Named Pipe Security and Access Rights" (2026-10-25 확인)
  3. Model Context Protocol, security guidance for implementers (2026-07-28; Local MCP Server Compromise) (2026-07-28 확인)
  • 튜토리얼
  • MCP

KwaFlux 작성자 겸 편집자. 글은 KwaFlux 편집팀이 검토하며, 제품 조사 노트와 공개된 사양을 바탕으로 합니다.