프롤로그(이미 알고 계시죠?)

프롤로그(이미 알고 계시죠?)

저는 Intel x86_64 CPU 아키텍처 플랫폼에서 Debian Bullseye Linux 배포판을 실행하고 있습니다. 플랫폼에서 맞춤형 애플리케이션을 실행하세요. 이 애플리케이션은 시스템 서비스로 실행되는 32비트 소프트웨어이며 많은 종속성을 갖고 있으며 그 중 일부는 Qt5 v5.15.2(예: libqt5network5 모듈) 및 openssl1.1의 라이브러리입니다. openssl 및 Qt5의 새 버전에서는 SSLv3 프로토콜이 더 이상 사용되지 않습니다. 그러나 사용자 정의 애플리케이션은 네트워크 통신을 위해 SSLv3 프로토콜만 지원합니다. openssl1.1에 SSLv3 지원을 다시 추가했으며 사용하려고 할 때마다 다음을 수행했습니다.

# openssl s_client -connect <my-ip>:<my-port>

사용자 정의 애플리케이션 로그에 경고가 표시됩니다.

QSslSocket::startServerEncryption Attempted to use an unsupported protocol

이제 내 목표는 SSLv3 프로토콜에 대한 지원을 libqt5network 모듈에 다시 추가하여 경고가 제거되고 올바른 연결이 설정되는 것입니다. 또한 내 사용자 정의 애플리케이션과 호환되려면 32비트 아키텍처의 libqt5network5 모듈이 필요합니다.

지금까지 완료한 단계는 다음과 같습니다.

Qt5 소스 코드를 다운로드하고 커밋을 되돌려 보았습니다(OpenSSL: Dropping support for SSLv2 and SSLv3, commit hash ID: 455951f59074d6457fd2d10720ac3cbdaa966076.). 몇 시간 동안 컴파일하고 makefile 오류로 고생한 끝에 Qt5 라이브러리를 성공적으로 구축했습니다. Qt5용 .deb 패키지를 생성하여 플랫폼의 루트 파일 시스템에 설치했지만 아무 것도 변경되지 않은 것처럼 계속 경고가 표시됩니다. 커밋을 올바르게 되돌리지 못했을 수도 있고 해야 할 일이 더 있을 수도 있습니다. 소스 코드를 추가로 수정하려고 시도했지만 이로 인해 더 많은 컴파일 오류가 발생했습니다.

제 질문은 목표를 달성하려면 Qt5 소스 코드에서 무엇을 변경해야 합니까?입니다. 나는 이 문제로 3주 동안 머리를 긁적거리고 있는데 해결책을 찾을 수 없습니다.

추신: 제 질문에 혼란이 있거나 정보가 부족했다면 죄송합니다. 필요한 모든 정보를 제공할 준비가 되어 있습니다. PS-2: 보안상의 이유로 SSLv3가 더 이상 사용되지 않는다는 것을 알고 있지만 이는 필수 사항이므로 변경할 수 없습니다.

시간 내 주셔서 감사합니다.

답변1

프롤로그(이미 알고 계시죠?)

더 간단한 솔루션이자 유일한 솔루션안전한내 생각에 해결책은 여전히 ​​SSLv3에 의존하는 측면에서 최신 버전의 TLS를 사용하는 것입니다. 이러한 라이브러리의 API는 실제로 변경되지 않았으며 현재 SSL3보다 최신 TLS를 지원합니다. SSL3은 12년 전에 더 이상 사용되지 않습니다(!). 2014년에 비교적 사소한 공격(POODLE)이 발견되었으며, 이를 악용할 수 있는 사용하기 쉬운 여러 도구가 발견되었습니다.

따라서 현재 POODLE 완화 없이 SSL3을 사용하고 있다면 통신을 암호화했다고 할 수 없습니다. 이는 약하게 난독화되어 있으며 메시지를 해독하려면 인터넷 연결만 필요합니다.

엉덩이를 덮다

나는 이것이 요구 사항이라는 것을 이해하지만 책임 있는 소프트웨어 개발자로서 상사나 고객으로부터 "예, 이것은 안전하지 않습니다. 우리는 여전히 Chris가 허점을 지적하는 데 시간과 돈을 투자하기를 원합니다"라는 서면 승인을 받아야 합니다. 간다.뭔가 잘못되면 사선에서 벗어날 수 있습니다.

SSL3 트래픽이 해당 시스템을 떠나지 않도록 동일한 시스템에 TLS 프록시를 설정하는 데 문제가 있는 안전하지 않은 서비스를 실행하는 팀이 동일한 데이터를 최신 TLS1.3 패킷에 넣으면 좋습니다. 보안과 소프트웨어 엔지니어링 문제를 동시에 해결하세요. (물론, 옳은 일은 앱을 고치는 것이지 고치는 것이 아닙니다. 하지만 레거시 소프트웨어가 어떻게 작동하는지 이해합니다.)

그것을하는 방법

라고 한, 프로그램이 사용하고 있는 Qt5 라이브러리를 실제로 교체해야 합니다. 즉, 단순히 설치할 수는 없습니다.일부Qt5 버전을 사용하고 a) 문제가 발생하지 않고 b) 새 버전이 실제로 사용 중인 버전을 대체하기를 바랍니다.

따라서 Qt5 소스 코드를 수동으로 빌드할 필요가 없습니다.필요데비안 메커니즘을 사용하여 호환 가능한 Qt5 패키지를 구축하고 패치를 적용합니다(다시 한번 말씀드리지만 이는 나쁜 생각입니다).

따라서 다음 단계를 따르십시오.

전진, 수동으로 구축한 것을 제거합니다. 그렇지 않으면 문제가 발생할 수 있습니다.

  1. 데비안 개발 도구를 설치합니다:
    sudo apt-get install build-essential fakeroot devscripts
  2. 수정하려는 라이브러리가 포함된 데비안 패키지를 찾으세요.
  3. 가다https://packages.debian.org, 데비안 버전에 적합한 버전에서 찾으십시오.
  4. 패키지 정보 페이지 오른쪽에는 소스 패키지의 .dsc 파일에 대한 링크가 있습니다(파일내 생각엔여기 qtbase-opensource-src가 있으므로 링크는 다음과 같습니다.이것
  5. 이 링크를 복사하세요.
  6. 데비안 개발 머신에서 새 디렉터리를 만들고 cd그 디렉터리로 이동하세요.
  7. dget THE_LINK_YOU_JUST_COPIED
  8. 모든 빌드 종속성이 설치되어 있는지 확인하세요.
    mk-build-deps; sudo apt-get install ./*build-deps*.deb
  9. 하위 폴더에 있는 추출된 소스 코드로 이동하세요.cd debian
  10. 모든 기존 패치를 적용하여 준비합니다.quilt push -a
  11. 새 패치를 시작하세요:quilt new enable_ssl_v3_verybadidea
  12. 어떤 파일을 변경하고 싶은지 알고 있기 때문에:quilt add file1 file2 file3 …
  13. 그 후 파일을 편집하세요.
  14. 패치 변경 사항 제출quilt refresh
  15. 이제 압축을 푼 debian 최상위 디렉토리로 돌아가서 다음을 빌드하세요.
    debuild -b -uc -us
  16. 5.에서 생성한 디렉토리에는 이제 수정한 새로운 qt5 debian 패키지가 있으며 이를 직접 설치한 다음 qt5 패키지를 교체할 수 있습니다. sudo apt-get install ../*.deb이것들을 설치하세요!

왜 그렇게 복잡합니까?

글쎄, 우리는 Qt5를 구축하는 것이 복잡하다는 데 모두 동의할 수 있습니다. 데비안은 여러분을 위해 이 작업을 수행하는 방법을 알아냈으므로 우리는 그들의 스크립트를 사용해야 합니다. 게다가 우리는필요데비안과 호환되려면 라이브러리가 필요하기 때문에 데비안과 똑같이 빌드하세요. 그렇지 않으면 qt5에 의존하는 다른 데비안 패키지의 기능이 중단됩니다.

그래서 우리는 데비안 방식으로 일을 해야 합니다. 장점은 애플리케이션을 배포하려는 모든 컴퓨터에 복사하고 단일 dpkg -i package.deb또는 apt-get install ./package.deb명령을 사용하여 설치할 수 있는 .deb 패키지를 얻을 수 있다는 것입니다.

원하는 대로 파일을 변경할 때 패치를 가져온 다음 데비안 빌드 프로세스를 "새" 소스에 적용하여 빌드가 실제로 안정적인지 확인해야 합니다.

당신은 또한

  • 다른 버그를 수정할 수 있는 데비안 업데이트가 파일을 덮어쓰지 않도록 설치된 패키지를 수정합니다. (이는 설치 방법에 관계없이 적용됩니다.)
  • 수동으로 빌드한 모든 업데이트에 패치를 전달하세요(압축이 풀린 소스의 debian/patches에서 패치 파일을 복사하고 debian/patches/series에 추가하세요).

전체적으로 귀하의 요청으로 인해 귀하는 이제 시스템 Qt5의 사실상의 관리자가 되었습니다.Qt5 구축 방법에 관계없이 완전히. 이것이 경영진이 사용자 시스템의 보안을 손상시키기보다는 다른 솔루션을 찾는 것을 고려해야 한다는 강력한 주장이 아니라면, 잘 모르겠습니다. 다른 회사에서는 그렇게 하지 않기 때문에 다음 급여 협상에서 고려할 사항일 수도 있습니다. 당신에게 이런 일을 하도록 강요하는 것입니다.

관련 정보