Qt 개발자 도구를 안전하게 사용하는 방법
Qt 개발자 도구를 안전하게 실행하기 위한 조언.
개요
Qt 프레임워크는 Qt 애플리케이션 개발을 위한 포괄적인 도구 세트를 제공합니다. 여기에는 qmake 및 qt-cmake와 같은 빌드 시스템 프론트엔드, Meta-Object Compiler (moc), User Interface Compiler (uic), Resource Compiler (rcc)와 같은 컴파일러 및 생성기, Qt Shader Baker(qsb), 그리고 Qt Remote Objects 컴파일러(repc)나 Qt D-Bus XML 컴파일러(qdbusxml2cpp)와 같은 인터페이스 설명용 코드 생성기; qmllint 및 QML 타입 컴파일러와 같은 QML 툴링; 자산 임포터; 그리고 windeployqt, macdeployqt, androiddeployqt와 같은 배포 도구. 전체 목록은 ‘도구 및 유틸리티’를 참조하십시오.
대부분의 도구는 입력 파일을 출력 파일로 변환하는 명령줄 도구이며, 프로젝트 빌드 시스템의 일부로 실행됩니다. 다른 도구들은 백그라운드에서 실행되며, 예를 들어 IDE에서 코드 자동 완성이나 구문 검사를 제공하는 데 사용됩니다.
이 페이지에서는 제공되는 개발자 도구의 보안 모델과 이를 안전하게 사용하는 방법을 설명합니다. 이는 애플리케이션 개발자, Qt, 운영자 또는 기기 제조업체 간에 보안 책임이 어떻게 분담되는지를 설명하는 ‘Qt 공유 보안 모델’의 일부입니다.
개발자 도구의 보안 모델
이 도구들은 복잡한 입력 파일을 효율적으로 처리하도록 설계되었습니다. 도구들은 입력의 일반적인 유효성을 확인하지만, 악의적으로 조작된 입력을 방지하거나 처리하도록 설계되지는 않았습니다. 따라서 입력은 신뢰할 수 있는 것으로 간주됩니다.
Qt 공유 보안 모델의 관점에서 볼 때, 개발자 도구와 이 도구들이 처리하는 프로젝트는 전적으로 개발자의 책임 영역에 속합니다. Qt는 배포하는 도구의 무결성을 책임지며, 사용자는 신뢰할 수 있는 입력만 도구에 제공하는 책임을 집니다.
이것이 중요한 이유
도구는 입력을 적대적인 것으로 간주하지 않고 처리하기 때문에, 악의적이거나 형식이 잘못된 프로젝트는 결과 애플리케이션이 실행되기도 전에 개발, 구성 또는 빌드 단계에서 피해를 입힐 수 있습니다.
특히, 도구들은 다음과 같은 작업을 수행합니다:
- 파일을 읽습니다. 빌드 시스템은 절대 경로나 상대 경로(경로 탐색)를 통해 프로젝트 디렉터리 외부의 파일도 읽을 수 있습니다.
- 파일을 작성합니다. 출력 경로는 입력에서 파생됩니다. 이로 인해 의도된 출력 디렉터리 외부에 파일이 작성되거나, 기존 파일이 덮어쓰일 수 있습니다.
- 외부 프로세스를 호출합니다. 빌드 프론트엔드와 일부 생성기는 컴파일러, 스크립트 또는 기타 실행 파일을 실행합니다. 신뢰할 수 없는 입력은 어떤 프로그램이 어떤 인수로 실행되는지에 영향을 미칠 수 있습니다.
- 나중에 컴파일 및 실행되는 코드 생성. 많은 도구가 C++, Qml 또는 애플리케이션의 일부가 되는 기타 소스 코드를 생성합니다. 조작된 입력은 생성된 출력, 나아가 Qt 애플리케이션이나 기기에 최종적으로 포함되는 코드에 영향을 미칠 수 있습니다.
실질적인 결과로, 신뢰할 수 없는 프로젝트를 빌드하면 빌드 머신에서 임의의 코드가 실행될 수 있으며, 이 코드는 사용자의 권한을 가지고 자격 증명, 서명 키 또는 소스 코드와 같은 해당 환경에 존재하는 모든 항목에 접근할 수 있습니다. 이는 개인 데이터를 노출시키고, 머신을 침해하며, 결국 빌드 중인 애플리케이션이나 기기를 침해하여 모든 사용자에게 피해를 줄 수 있습니다.
이러한 위험은 Qt 도구 때문에만 발생하는 것이 아닙니다. C++에서 널리 사용되는 빌드 시스템인 CMake로 프로젝트를 구성할 때, 프로젝트가 임의의 경로에서 로컬 프로그램을 실행하거나(execute_process()), 추가 확인 없이 네트워크 리소스를 가져올 수 있도록 허용하게 됩니다(FetchContent 모듈). 이것이 바로 IDE에서 프로젝트를 구성하기 전에 때때로 경고를 표시하는 이유이기도 합니다. 예를 들어 Visual Studio Code의 ‘Workspace Trust’ 기능을 참고하십시오.
권장 사항
- 신뢰할 수 있는 프로젝트만 열고 빌드하십시오. 출처를 알 수 없거나 신뢰할 수 없는 소스의 프로젝트는 구성하거나 빌드하지 마십시오. 이는 출처를 알 수 없는 스크립트를 실행하지 않는 것과 같은 이치입니다.
- 신뢰할 수 없는 빌드는 격리하십시오. 완전히 신뢰할 수 없는 프로젝트를 반드시 다루어야 하는 경우, 컨테이너나 가상 머신과 같은 격리된 환경에서 작업하십시오. 최소한의 권한으로, 비밀 정보, 인증 정보 또는 서명 키에 접근할 수 없도록 설정된 상태에서 빌드를 실행하십시오.
- 빌드 중 네트워크 액세스를 제한하십시오. 빌드는 전적으로 로컬에서 수행되도록 하십시오. 프로젝트 빌드에 원격 리소스에 대한 액세스가 필요한 경우, 이는 가용성 문제로 이어질 수 있을 뿐만 아니라(예: 빌드 머신이 원격 서버에 과도한 요청을 보내 차단되는 경우), 빌드 환경과 빌드 결과를 침해할 수 있는 또 다른 공격 경로가 될 수 있습니다.
- 신뢰할 수 있는 출처에서 Qt를 확보하십시오. Qt 및 관련 도구는 공식 채널을 통해서만 설치하고, 보안 수정 사항을 적용받을 수 있도록 항상 최신 상태로 유지하십시오. ‘Qt의 보안’을 참조하십시오.
- 빌드 환경의 신뢰성을 유지하십시오. 예를 들어, `
PATH` 내의 디렉터리와 해당 디렉터리가 가리키는 도구가 신뢰할 수 있는 것인지 확인하여, 개발자 도구가 예기치 않은 실행 파일을 호출하지 않도록 해야 합니다.
범위
이 페이지는 사용자의 컴퓨터에서 실행되는 빌드 시점 개발자 도구를 다룹니다. Qt 프레임워크에는 다음과 같이 서로 다른 위협 모델을 가진 도구들도 포함되어 있습니다:
- 사용자가 최종 사용자 시스템에 설치하여 실행할 수 있는 사용자용 도구 (예: Qt Linguist, Qt Widgets Designer 및 Qt Assistant. 해당 도구에 대한 보안 지침은 각 매뉴얼 페이지를 참조하십시오.
- 라이브러리나 다른 도구에 의해 간접적으로 실행되는보조 도구. 도구 자체와 이를 실행하는 메커니즘 모두 공격 표면의 일부이므로, 이에 대해서는 각별한 주의가 필요합니다.
실행 시점에 신뢰할 수 없는 출처의 데이터를 처리하는 데 대한 일반적인 지침은 ‘신뢰할 수 없는 데이터 처리’를 참조하십시오.
© 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.