이 페이지에서

멀티미디어 보안 고려 사항

데이터 흐름 다이어그램

이 다이어그램은 신뢰할 수 없는 미디어 소스를 안전하게 처리하는 데 기여하는 Qt Multimedia 의 고수준 데이터 처리 요소를 보여줍니다.

보안 관련 데이터 흐름

가정

다른 Qt 구성 요소와 마찬가지로, Qt Multimedia 는 실행 환경이 올바르게 구성되어 있으며 침해되지 않았다고 가정합니다. 특히, 프로세스 환경, 라이브러리 및 플러그인이 로드되는 검색 경로, 설치된 하드웨어 디코딩 드라이버는 공격자가 아닌 애플리케이션을 배포하는 사람이 제어한다고 가정합니다. Qt 공유 보안 모델에 설명된 바와 같이, 이미 보안이 침해된 프로세스 환경을 필요로 하는 공격은 Qt의 보안 책임 범위에서 제외됩니다.

미디어 콘텐츠 자체는 이러한 가정의 적용 대상이 아닙니다. 미디어 데이터와 이를 참조하는 URL은 신뢰할 수 없는 입력으로 취급되며, 이 페이지의 나머지 부분에서 다루게 됩니다. ‘신뢰할 수 없는 데이터 처리’ 항목도 참조하십시오.

따라서 아래의 몇 가지 사항은 Qt Multimedia 가 이를 방어하기 때문이 아니라, 해당 사항이 애플리케이션 개발자의 책임이며 애플리케이션을 배포할 때 고려해야 할 사항이기 때문에 나열된 것입니다.

위험 요소

이론적으로, 애플리케이션이 사용자가 신뢰할 수 없는 미디어 소스를 재생할 수 있도록 허용하고, 공격자가 위 그림에 표시된 요소 중 어느 하나에 존재하는 취약점을 알고 있는 경우, 공격자는 해당 취약점을 유발하는 미디어 소스를 조작하여 의도된 방식으로 애플리케이션에 제공할 수 있습니다.

아래의 위험 요소는 Qt 공유 보안 모델( Qt Shared Security Model)에 정의된 역할에 따라, 이를 해결할 책임이 있는 주체에 따라 분류되었습니다.

Qt에서 해결하는 위험

  • Qt Multimedia 과 함께 제공되는 타사 라이브러리의 취약점. Qt Multimedia 은 손상된 타사 라이브러리를 차단하려고 시도하지 않으므로, 해당 라이브러리를 최신 상태로 유지하는 것이 애플리케이션을 보호하는 방법입니다. 당사는 제공되는 라이브러리에 대해 보고된 취약점을 추적하고, 패치 릴리스가 제공되는 대로 업데이트하며, 자체적으로 발견한 결함을 업스트림 프로젝트에 보고합니다.
  • Qt Multimedia 자체의 데이터 흐름 요소에 존재하는 결함으로 인해 정의되지 않은 동작이 발생할 수 있습니다. 가장 민감한 영역은 네이티브 및 백엔드 미디어 프레임의 데이터 레이아웃 처리입니다. 당사는 확립된 보안 코딩 관행을 따르고, 해당 코드를 수동 및 자동 테스트로 검증하며, 내부적으로 Qt Multimedia 에 퍼즈 테스트를 수행하여 기존 테스트로는 발견되지 않는 결함을 찾아냅니다.

애플리케이션 개발자가 해결해야 할 위험

  • 여러 Qt Multimedia API는 URL을 소스나 대상으로 받아, 애플리케이션을 대신하여 파일 시스템 또는 네트워크에 접근합니다. 여기에는 QMediaPlayer::setSource, QAudioDecoder::setSource, QSoundEffect::setSource, QMediaRecorder::setOutputLocation 등이 포함됩니다. 따라서 검증되지 않은 URL을 이러한 API에 전달하면, 해당 URL을 제어하는 사람이 어떤 파일을 읽거나 쓸지, 어떤 호스트에 접속할지 결정할 수 있게 됩니다.
  • GStreamer 미디어 백엔드의 경우, QGStreamerVideoSource 또는 QMediaPlayer 에 악의적인 사용자 정의 GStreamer 파이프라인 설명을 전달하면 공격이 발생합니다. GStreamer 파이프라인 설명을 효과적으로 사전 처리하고 유효성을 검증할 수 없는 한, Qt Multimedia 을 통해 신뢰할 수 없는 GStreamer 미디어 파이프라인을 절대 실행하지 않는 것을 강력히 권장합니다.
  • 미디어 백엔드는 해당 플러그인을 실제로 로드할 수 있는 경우에만 사용됩니다. FFmpeg 미디어 백엔드는 FFmpeg 라이브러리에 동적으로 링크되므로, 해당 바이너리가 애플리케이션과 함께 배포되지 않았거나 플러그인 로드 시 동적 링커가 이를 해결할 수 없는 경우, Qt Multimedia 는 경고 없이 사용 가능한 다른 백엔드로 전환됩니다. 나머지 백엔드는 문서화된 우선순위 순서가 아니라 플러그인이 나열된 순서대로 시도되므로, 배포 오류로 인해 해당 애플리케이션에 대해 테스트된 적이 없는 백엔드에서 애플리케이션이 실행될 수 있습니다. 백엔드를 전혀 로드할 수 없는 경우, QMediaDevices, QAudioDevice, QSoundEffect, QAudioSink 및 QAudioSource 만 정상적으로 작동합니다.

운영 환경에 따른 위험

이러한 위험은 Qt Multimedia 자체에서 기인한 것이 아니라 애플리케이션이 실행되는 환경에서 비롯되며, Qt Multimedia 은 이를 감지하거나 방지할 수 없습니다. 애플리케이션 개발자는 애플리케이션을 배포할 때 이러한 위험 요소를 고려해야 합니다.

  • 잘못된 환경 구성 또는 하드웨어 디코딩 드라이버 설정. 환경이 올바르게 구성되었는지, 그리고 하드웨어 디코딩 드라이버가 제대로 설치되어 있고 최신 버전인지 확인하십시오.
  • Qt Multimedia 는 런타임에 미디어 백엔드를 선택하며, ‘백엔드 변경’ 섹션에 설명된 대로 QT_MEDIA_BACKEND 환경 변수를 사용하여 이 선택을 재정의할 수 있습니다. 따라서 애플리케이션 프로세스의 환경에 영향을 미칠 수 있는 사람은 누구나, 애플리케이션을 개발 및 테스트할 때 사용했던 것과는 다른 미디어 백엔드에서 애플리케이션을 실행하게 할 수 있으며, 이로 인해 지원되는 형식 및 프로토콜 세트와 공격 표면이 달라질 수 있습니다.

영향

위에 나열된 취약점을 악용할 경우 다음과 같은 보안상의 결과가 발생할 수 있습니다:

  • 정의되지 않은 동작으로 인해 실제로 메모리 누수, 애플리케이션 충돌 또는 멈춤 현상이 발생할 수 있습니다.
  • 공격자가 힙 손상을 실질적으로 제어할 수 있는 경우 원격 코드 실행이 가능할 수 있습니다.
  • m3u 와 같이 재생 목록 항목에서 서로 다른 프로토콜을 사용할 수 있는 미디어 형식의 경우, 잘못된 설정으로 인해 공격자가 파일 시스템을 읽거나 임의의 네트워크 호스트에 접속할 수 있습니다. 기본적으로 잠재적으로 위험한 프로토콜은 차단 목록에 포함되지만, 다음 중 어느 방법을 통해서든 이 동작을 변경할 수 있습니다:
    • 환경 구성. FFmpeg 미디어 백엔드에서 허용되는 네트워크 프로토콜 구성 항목을 참조하십시오.
    • GStreamer 사용자 정의 파이프라인. 자세한 내용은 Qt Multimedia GStreamer 백엔드 참고 자료( QGStreamerVideoSource) 및 GStreamer 파이프라인 설명 문서를 참조하십시오.
    • Qt Multimedia 에 포함된 것 이외의 미디어 백엔드. 미디어 백엔드는 런타임에 플러그인으로 로드되므로, 애플리케이션의 플러그인 검색 경로에서 발견된 백엔드 플러그인이나 라이브러리 검색 경로에서 발견된 대체된 FFmpeg 바이너리는 위의 기본값 대신 해당 플러그인 또는 바이너리가 빌드될 때 적용된 프로토콜 제한 사항을 따릅니다.

미디어 형식에 따라, 유효한 미디어 소스라 하더라도 반드시 해당 미디어 표준을 엄격하게 준수하는 것은 아니라는 점에 유의하십시오. 또한 소스가 손상되거나 무효화될 수 있는 방법은 다양합니다. Qt Multimedia 및 타사 라이브러리에 대해 각 커뮤니티에서 수동 및 자동 테스트를 수행하고 있음에도 불구하고, 모든 잘못된 형식의 미디어 소스가 올바르게 처리될 것이라고 보장할 수는 없습니다. 고도의 보안 요구 사항이 있는 애플리케이션을 개발할 때는 이러한 제한 사항을 고려해야 합니다.

완화 조치

  • 애플리케이션 자체에서 생성되지 않은 모든 URL은 신뢰할 수 없는 입력으로 간주하고, Qt Multimedia 로 전달하기 전에 유효성을 검증하십시오. 허용되지 않는 URL 스키마 및 호스트의 차단 목록보다는 허용되는 URL 스키마 및 호스트의 허용 목록을 사용하는 것이 좋습니다. 애플리케이션이 이미 미디어 데이터를 보유하고 있거나 직접 확보할 수 있는 경우, QMediaPlayer::setSourceDevice 를 사용하면 데이터 읽기 방식을 애플리케이션이 직접 제어할 수 있습니다.
  • 미디어 백엔드가 사용할 수 있는 프로토콜을 제한하십시오. FFmpeg 미디어 백엔드의 경우, ‘고급 FFmpeg 구성’의 ‘허용된 네트워크 프로토콜 구성’을 참조하십시오.
  • 배포된 애플리케이션이 사용할 수 있는 미디어 백엔드를 제어하십시오. 애플리케이션에 필요한 미디어 백엔드 플러그인만 배포하는 것이 가장 효과적인 제어 방법입니다. 이렇게 하면 ` QT_MEDIA_BACKEND `가 선택할 수 있는 다른 플러그인이 없기 때문입니다. 다른 기본 백엔드를 선택하는 것만으로는 해결되지 않는다는 점에 유의하십시오. ` QT_MEDIA_BACKEND `는 기본값보다 우선하며, 이는 ` Qt Multimedia ` 자체를 소스 코드에서 빌드할 때 ` -default-media-backend ` 구성 옵션으로 설정된 기본값보다도 우선합니다.
  • 배포 테스트의 일환으로 애플리케이션이 실제로 의도한 미디어 백엔드에서 실행되는지 확인하십시오. qt.multimedia.plugin 로깅 카테고리는 어떤 백엔드가 로드되었는지, 그리고 그 전에 어떤 플러그인의 로드가 실패했는지를 보고합니다.
  • Qt Online Installer 에 포함된 Qt Multimedia 바이너리는 FFmpeg 라이브러리 avcodec, avutil, avformat, swscale 및 swresample 에 대해 동적으로 링크되어 있습니다. 따라서 애플리케이션 개발자나 최종 사용자는 Qt 패치 릴리스를 기다리지 않고도 FFmpeg 취약점을 해결하기 위해, 이러한 라이브러리의 바이너리 호환 빌드(즉, 동일한 FFmpeg 메이저 버전의 빌드)를 배포할 수 있습니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.