2010-12-09 3 views
4

WTSGetActiveConsoleSessionId 및 WTSQueryUserToken을 사용하여 암호를 사용하지 않고 SYSTEM으로 실행되는 서비스가 launch an application onto the current desktop 일 수 있음을 알고 있습니다. 프로세스를 시작하는 프로그램이 충분한 권한을 가진 경우 LogonUser에 대한 암호가 필요없이 CreateProcessAsUser를 시작합니까?암호없이 CreateProcessAsUser 및 LogonUser

EDIT 1는 : 상황은 this instance에 막연하게 비슷하지만, 난 상관없이이 시간에 시스템에 로그인하지 않은 상태의 사용자로 프로세스를 시작 할 수 있어야합니다.

답변

1

문서화되지 않은 NtCreateToken 함수를 사용할 가능성이 있습니다. 나는 this example project이 그것을 사용한다고 생각한다. 그 짧은 것은 불가능합니다.

0

위조하려는 토큰에 따라 특정 권한, 특히 TCB가 마음에 들게하는 권한이 필요합니다. 서비스에 있습니다. Nebett의 "Windows NT/2000 네이티브 API 참조"에는 예제가 있습니다.

그러나 현재 데스크톱에서 SYSTEM으로 프로세스를 만드는 서비스는 Vista 이후 더 이상 쉽지 않습니다. 개선 된 세션 분리가이 문제입니다. 그러나 파이프의 다른 쪽에서 사용자를 가장 할 수 있으며 현재 스레드가 해당 사용자 (예 : SYSTEM)로 활동할 수 있어야합니다.

+0

SeTcbPrivilege가 충분하지 않습니다. 최신 Windows 버전에서는 lsass.exe만이 SeCreateTokenPrivilege를 필요로합니다. 올바른 보안 컨텍스트에서 실행중인 경우 lsass.exe에서 프로세스 토큰을 복사하지 못합니다. LocalSystem으로 실행중인 서비스에서. – poizan42

0

이론적으로 최소한 사용자는 authentication package을 구현 한 다음이를 사용하여 적절한 토큰을 생성 할 수 있습니다.

또 다른 가능한 옵션은, 당신의 정확한 요구 사항에 따라, 자신의 토큰의 적절하게 수정 유도체를 만들 SetTokenInformation와 함께 CreateRestrictedToken 함수의 SidsToRestrictPrivilegesToDelete 옵션을 사용하는 것입니다.

신뢰할 수없는 코드를 실행하려는 경우이 방법을 신뢰하지 않습니다. 충분히 독창적 인 공격자가 그러한 토큰을 사용하여 부모를 공격하는 것은 불가능할 것이라고는 확신 할 수 없습니다. 프로세스 또는 기타 권한있는 프로세스를 의미합니다. (특히 새로운 로그온 세션을 만들어 제한된 토큰에 할당 할 수 있는지 여부는 확실하지 않으며, 유일한 문제는 아닙니다.)

관련 문제