Qt Serial Port 보안 고려 사항
이 페이지에서는 모듈을 사용할 때 발생할 수 있는 잠재적인 보안 문제를 설명하고 이를 방지하는 방법을 제안합니다.
포트 이름 확인
QSerialPort 은 포트 이름을 일반 문자열로 받아들이며, 시리얼 장치로 열기 전에 유효성 검사를 수행하지 않습니다.
따라서 공격자가 제어하는 이름을 사용하면 애플리케이션이 임의의 파일, 장치 노드, 심지어 원격 SMB 공유까지 열게 될 수 있습니다. 처음 두 가지 경우, QSerialPort 가 해당 파일이 직렬 장치가 아님을 감지하면 파일이 즉시 닫힙니다. SMB의 경우는 다릅니다. 파일이 열리는 동안 인증 정보가 원격 서버로 전송되므로, 열기 시도가 최종적으로 실패하더라도 정보가 유출될 수 있습니다.
이를 방지하려면, ` QString`로 포트 이름을 매개변수로 받는 API는 사용하지 말고, ` QSerialPortInfo`를 사용하는 API를 우선적으로 사용하십시오:
- 사용자 인터페이스를 개발할 때는 ` QSerialPortInfo::availablePorts()`을 사용하여 사용 가능한 포트를 열거하고, 사용자가 목록에서 선택할 수 있도록 하십시오.
- 임의의 입력 문자열을 처리할 때는 해당 문자열로 ` QSerialPortInfo ` 인스턴스를 생성하고, ` QSerialPortInfo::isNull()`를 사용하여 해당 인스턴스가 기존 포트를 가리키는지 확인하십시오.
입력 및 출력 버퍼 제한
기본적으로 ` QSerialPort `는 입력 및 출력 버퍼의 크기를 제한하지 않습니다. 제한되지 않은 버퍼는 사용 가능한 메모리를 모두 소모할 수 있으며, 이는 메모리가 제한된 임베디드 장치에서 특히 문제가 됩니다.
원격 장치가 애플리케이션이 데이터를 처리하는 속도보다 빠르게 데이터를 전송하면, 읽기 버퍼가 무한정 커질 수 있습니다. QSerialPort::setReadBufferSize()를 사용하여 버퍼 크기를 제한하십시오. 제한에 도달하면 QSerialPort 는 애플리케이션이 버퍼에 저장된 데이터를 처리할 때까지 장치에서 읽기를 중단하므로, 그 사이에 드라이버 자체 버퍼가 오버플로우되면 수신 데이터가 손실될 수 있습니다.
마찬가지로, 애플리케이션이 드라이버가 데이터를 전송할 수 있는 속도보다 빠르게 데이터를 쓰면, 쓰기 버퍼가 무한정 커질 수 있습니다. QSerialPort::setWriteBufferSize()를 사용하여 이를 제한하십시오. 이 경우, 애플리케이션은 QSerialPort::write() 호출의 결과를 확인하여 실제로 수락된 데이터의 양을 파악하고, 나머지 데이터는 나중에 써야 합니다.
잠금 파일(lock files)에 유의하십시오
참고: 이 섹션은 유닉스 계열 시스템에만 적용됩니다.
QSerialPort 는 포트를 열기 전에 다른 프로세스가 이미 해당 포트를 사용하고 있는지 확인하기 위해 잠금 파일을 사용합니다. 이는 유닉스에서 흔히 사용되는 방식이므로, 잠금 파일의 형식과 위치는 잘 알려져 있으며, 이를 보관하는 디렉터리는 대개 모든 사용자가 쓰기 권한을 가집니다.
QSerialPort 는 오래된 잠금 파일을 감지하여 제거하지만, 로컬 공격자는 수명이 긴 프로세스를 생성하고 이를 참조하는 조작된 잠금 파일을 만들 수 있습니다. 이러한 잠금은 결코 오래되지 않으며, 애플리케이션이 시리얼 포트에 접근하는 것을 무기한으로 차단합니다. 공격자는 시리얼 장치 자체를 건드릴 필요가 전혀 없습니다.
이를 방지할 수 있는 유일한 방법은 악의적인 행위자가 시스템에 접근할 수 없도록 보장하는 것입니다.
© 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.