와인 프로그램에 대한 'ptrace_scope'대안은 무엇이며 어떤 위험이 있습니까?


37

WINE에서 특정 Windows 프로그램을 실행하려면이 해결 방법이 필요합니다.

echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope

지원 웹 사이트에 따르면 이것은 ptrace와 WINE이 함께 재생되지 못하게하는 우분투 커널의 버그 때문입니다.

위의 명령을 사용하여 ptrace를 0으로 설정했는데, 내가 한 연구에 따르면 (많은 웹 사이트를 묻지 말고), ptrace는 프로그램 간의 상호 작용과 관련이 있습니다. 0 설정은 1보다 허용됩니다.

우분투가 ptrace = 1을 원했던 좋은 이유가 있다고 가정해야하므로 질문의 짧은 형식으로 되돌아갑니다.

ptrace = 0 설정과 관련된 위험이 있습니까? 보안 수준이 낮습니까? 디버깅 문제? 내가 생각하지 못한 다른 사람 ???

버그를 일으키는 원인이 무엇인지 궁금해하는 사람을위한 PS, Windows 프로그램이 전혀 열리지 않습니다. 시스템 모니터에서 프로그램의 많은 인스턴스를 열려고하면 결국 모두 종료되며 프로그램을 실행하면 터미널의 경우 최대 프로그램 인스턴스 수에 도달했음을 알리는 오류가 발생합니다.


다음은 ptrace_scope가 0으로 설정되지 않은 경우 .Net 4.5 설치를 중단시키는 PlayOnLinux 팝업 오류 메시지와 연결된 설명입니다. playonlinux.com/en/…
pabouk

답변:


40

짧은 대답 : 아직 실질적인 위험은 없지만 더 나은 방법을 읽으십시오 ...


어쨌든 이 ptrace는 무엇입니까 ?

이것은 ptrace와 WINE이 잘 작동하지 못하게하는 Ubuntu 커널의 버그 때문입니다.

  • ptrace 보호는 우분투 10.10에서 처음 소개 된 고의적 인 커널 보안 조치 입니다. 그건 버그가 아닙니다 , 그래서 "고정"하지 않을.

  • 간단히 말해서, 기본 ptrace_scope1검사하고 다른 프로세스를 수정에서 블록 하나 개의 프로세스 하지 않는 두 번째 과정 (아이가) 첫 번째 프로세스 (부모)에 의해 시작되었다.

  • 이러한 프로그램에 wineserver"Windows 서비스"를 제공 하는 방식으로 인해 Wine에서 일부 프로그램에 문제가 발생할 수 있습니다 .

설정의 위험은 무엇입니까 ptrace_scope하려면 0?

  • 이것은 부모-자식 관계가 없더라도 한 프로세스가 다른 프로세스를 "추적"할 수있는 이전 동작을 복원합니다.

  • 이론적으로 맬웨어가이를 사용하여 사용자 / 컴퓨터를 해칠 수 있습니다. 예를 들어 Firefox에 연결하여 모든 URL / 암호 등을 기록 할 수 있습니다. 실제로 임의의 사이트 등에서 바이너리 뎁을 맹목적으로 설치하지 않는 한 실제로는 거의 불가능합니다.

  • 지금까지 디버깅이가는대로 0설정이 필요 사실입니다 gdb, strace당신이 상승 된 권한 (sudo를)로 실행하지 않는 등 비 어린이에 첨부 할 수 있습니다.

해결 방법의 문제점은 무엇입니까?

  • 해결 방법은 ptrace_scope전역 값 이므로 다소 문제 가 있으며로 설정되어있는 동안 0시스템의 모든 프로세스는 비 자식 제한에서 제외됩니다.
  • 이 해결 방법을 사용하는 경우이를 사용하도록 설정하고 Windows 프로그램을 실행 한 다음 종료시 비활성화 (1로 설정)하는 간단한 bash 스크립트에 넣으십시오.
    • ptrace_scope포럼 게시물에서 권장하는대로 세계 쓰기 가능 (666)으로 만들지 마십시오. 이제는 모든 프로세스가 마음대로 변경할 수 있기 때문에 큰 보안 위험이 있습니다!

더 나은 해결책이 있습니까?

  • 보다 안전하고 ptrace_scope를 반복적으로 수정하지 않아도되는 더 좋은 솔루션은 Wineserver ptrace 기능부여하는 것 입니다.

    • 터미널에서 :

      sudo apt-get 설치 libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / wineserver
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • 이는 하위 서버 ptrace 제한 사항에서 wineserverwine-preloader 바이너리를 제외하고 모든 프로세스를 ptrace 할 수있게합니다.

    • 이 바이너리는 일반적으로 신뢰할 수있는 출처 (공식 리포지토리 또는 공식 와인 PPA)에서 가져 오기 때문에 더 안전해야하므로 맬웨어가되지 않습니다.

크로스 오버를 사용하는 경우

libcap2를 설치하십시오 :

sudo apt-get install libcap2-bin;

그런 다음 Crossover에 대한 예외를 추가하십시오.

sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / wineserver;
sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / wine-preloader;

마지막으로 라이브러리를 ld.so.conf에 추가하십시오 (또는 "공유 라이브러리를로드하는 중에 오류가 발생했습니다 : libwine.so.1 : 공유 객체 파일을 열 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다").

echo / opt / cxoffice / lib / | sudo 티 /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig

와인이 그것을 지원하기 위해 패치 된 후 ptrace가 10.10에서 잘 작동했기 때문에 버그라고 생각합니다. 10.10-11.10과 함께 작동했지만 12.04에서 회귀했습니다.
TrailRider

accept @TrailRider에 감사드립니다. 나는 " 커널 의 버그 "(이것은 아닙니다) 라는 당신의 진술을 언급하고있었습니다 ; 그것은 확실히 와인에 대한 일종의 버그이며, 엉망이되어야합니다. 자신을 되 돌리십시오 ": P
ish

나는 당신이 여기서 말하는 것을 이해하고 동의합니다. 코드 지원자는 물론 여러 지원 웹 사이트뿐만 아니라 커널 버그라고 커널의 버그라고 말했습니다. 여기에 코드 위버 페이지가 있습니다. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider

2
전역 ptrace를 0으로 설정하고 몇 초 후에 응용 프로그램이 시작된 후 1로 다시 설정했습니다. setcap은 훨씬 안전하고 항상 sudo를해야하는 것처럼 성 가시지 않습니다. thx vm!
물병 자리 힘

@izx :이 답변에 감사드립니다. "eip"이 무엇을 말하는지에 대한 정보를 추가하는 것은 흥미로울 것입니다 ( andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). : 또한, 나는 저자가이 보안 문제가 될 수 있다는 대답 reptyr 워드 프로세서,이 방법을 추천 제안 github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - 당신이 정교한 수 있다면, 좋은 것 그것에.
blueyed

4

에서 ubuntuforums.org 나는 다음과 같은 링크가 포함 된 대답을 얻었다

https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection

여기 링크에서 붙여 넣기가 있습니다 (내 강조가 추가 된)

리눅스의 인기가 높아짐에 따라 맬웨어의 대상이 될 것입니다. 특히 Linux 프로세스 인터페이스의 약점 중 하나는 단일 사용자가 프로세스의 메모리 및 실행 상태를 검사 할 수 있다는 것입니다. 예를 들어, 하나의 응용 프로그램 (예 : firefox)이 손상된 경우 공격자는 실행중인 다른 프로세스 (예 : gpg-agent)에 연결하여 추가 자격 증명을 추출하고 공격 범위를 계속 확장 할 수 있습니다.

이것은 이론적 인 문제가 아닙니다. ptrace가 정상적으로 허용되면 SSH 세션 하이재킹 및 임의 코드 삽입이 가능합니다 .

솔루션의 경우 일부 응용 프로그램은 prctl ()을 사용하여 ptrace 첨부 파일 (예 : ssh-agent)을 구체적으로 허용하지 않습니다. 보다 일반적인 해결책은 ptrace를 부모에서 자식 프로세스로 직접 추적 (즉, 직접 gdb 및 strace가 여전히 작동)하거나 루트 사용자 (예 : gdb BIN PID 및 strace -p PID가 여전히 루트로 작동)로만 허용하는 것입니다.

이 동작은 / proc / sys / kernel / yama / ptrace_scope sysctl 값을 통해 제어됩니다. 자식이 아닌 ptrace를 차단하려면 기본값은 "1"입니다. "0"값은 이전의보다 허용적인 동작을 복원합니다. 이는 관리자 계정 만있는 일부 개발 시스템 및 서버에 더 적합 할 수 있습니다. "sudo"를 사용하면 CAP_SYS_PTRACE 기능을 통해 일시적으로 ptrace 권한을 부여 할 수 있지만이 방법은 모든 프로세스의 ptrace를 허용합니다.

짧은 대답은 덜 안전하다는 것이지만 그런 종류의 공격을받는 개인용 컴퓨터의 후드는 꽤 얇을 것입니다.


1

업데이트 위의 지침 :

sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;

Ubuntu 18.04.1 및 PlayOnLinux v.4.2.12에서 2018 년 9 월 15 일부터 작동하지 않습니다. 최신 안정 버전 Wine 인 v.3.0.1 인 libcap2가 이미 설치되어 있습니다.

그놈 터미널의 오류 메시지는 다음과 같습니다.

Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

그게 무슨 뜻인지 모르겠지만 .. 누군가가 이해할 수 있고 새로운 솔루션을 가지고 있다고 생각합니다.

감사.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.