0

나는 BlockInput() 함수와 NVIDIA의 NVAPI 함수를 포함한 일부 데스크탑 관련 리소스에 액세스 할 수 있도록 관리자로 도우미 대화 형 프로세스를 만드는 시스템 서비스를 가지고 있습니다. 이는 서비스에서 실행할 수 없습니다. 관리자의 구성원이 사용자에 있던 로그온 한 경우,이 일을 다음 SE_TCB_NAME 포함표준 사용자가 로그온 할 때 관리 대화 형 프로세스 시작하기

  1. 설정 권한 수준을
  2. WTSGetActiveConsoleSessionId()
  3. 가 WTSQueryUserToken와 세션 ID의 사용자 로그온하기로 활성 세션 ID를 가져옵니다 SecurityImpersonation
  4. Launc와 TokenLinkedToken
  5. 하여 DuplicateTokenEx (()로
  6. GetTokenInformation()) 에 CreateProcessAsUser와 시간 과정()
그러나

, 내가 세션에 로그온 전류가 표준 사용자가 아닌 관리자의 하나가 될 때, 4 단계가 실패, 아마도 표준 사용자 토큰 관리 수준이 없기 때문에 그것과 연결되어 있습니다. 여기서 해결책은 무엇입니까? 나는 관리자 사용자 중 한 명에게 토큰을 가져 가야한다고 가정하지만, 어떻게해야합니까? 그리고 해당 사용자가 로그온 한 사용자가 아닌 경우에도 현재 데스크톱과 상호 작용하는 기능에 계속 액세스 할 수 있습니까?

+1

대상 사용자 세션의 csrss 인스턴스에서 NT Authority \ SYSTEM 사용자 토큰을 복제 해 보셨습니까? 이것은 XP/7에서 작동해야하지만 아직 8에서 시도하지 않았습니다. – hyru

+0

알려진 관리자 구성원 사용자의 토큰을 복제 할 수 있습니까? 표준 사용자 계정에서 데스크톱을 대화 형으로 사용하는 동안 해당 사용자에 대해 UAC가 호출 될 때 알려진 관리자 수준 계정의 암호를 제공하라는 요청을 받게되어 계정이 데스크톱과 상호 작용할 수 있음을 알게되었습니다. 로그인 한 사용자가 표준 사용자입니다. –

+0

@DisplayName : 토큰을 복제하지 않고도 복제 할 수 없습니다. 관리자가 로그인하지 않는 한 관리자가 없습니다. 하지만 당신이하는 일은 위험 할 것입니다 ... BlockInput은 관리자 접근을 필요로하지 않으며, NVAPI 기능을합니까? –

답변

2

자신의 토큰을 복제 한 다음 SetTokenInformation 기능을 사용하여 복제 된 토큰의 세션을 변경하여 대화식 세션에 넣을 수 있습니다.

대화식 세션에서 SYSTEM으로 실행하면 대화 형 사용자가 프로세스를 공격 할 가능성이있어 권한 상승이 가능하기 때문에 권장하지 않습니다. (자세한 내용은 "shatter 공격"을 검색하십시오.) 그러나이 문제는 비 관리자 사용자 세션에서 관리 사용자로 실행되는 프로세스에도 똑같이 적용됩니다.

대화 형 세션에서 비 관리 프로세스를 사용하여 대화식 세션이 필요한 기능을 수행하고 서비스를 사용하여 관리 권한이 필요한 기능을 수행하는 것이 가장 이상적입니다. 두 가지 기능을 모두 필요로하는 기능이 있으면 안됩니다. 그러나 NVAPI가이 규칙을 어기면 그것에 대해 할 수있는 일은별로 없습니다.

이 위험을 최소화하기 위해 대화식 사용자 세션에서 특수하게 생성 된 (적절하게 보안이 설정된) 워크 스테이션으로 프로세스를 시작하는 것을 고려하십시오.

+0

감사합니다. CreateDesktop()을 사용하여 shatter 공격을 피했습니다 (서비스에서 실행되지 않아서이 도우미 프로세스로 인해 오프로드 됨). 도우미 프로세스는 사용자에게 인터페이스를 제공하지 않으므로 안전합니다. 사용자 대면 프로세스는 샌드 박스 처리되고 다른 데스크톱에 있습니다. –

관련 문제