2010-01-17 5 views
2

지난 밤에 게임 서버 플러그인을 작성하여 사용자 계정을 만들고이를 관리자로 설정할 수있었습니다. 이는 큰 문제입니다. 물론 간단한 수정은 게임 서버에 대한 제한된 권한을 가진 기본 사용자 계정을 생성하는 것이므로이 같은 일을 할 수있는 권한이 없습니다.Windows API 및 Administrator 계정의 위험?

Windows API에 이와 같은 거대한 취약성이있는 것이 있는지 알고 싶었습니까? 클라이언트의 게임 서버 계정이 제한된 액세스 계정으로 옮겨 졌을 때 Windows API를 사용하여 컴퓨터를 방해하려는 것에 대해 걱정할 필요가 없습니다. 클라이언트가 플러그인을 사용하여 시스템을 인계하는 것에 대해 걱정할 필요없이 게임 자체에 대해 이미 충분히 악용 할 수있는 악용 사례가 있습니다.

관련 질문 중 일부는 다음과 같을 수 있습니다. C++에서 원격 데스크톱을 사용/사용 중지 할 수 있습니까? C++에서 AD 사용자 그룹 목록을 가져올 수 있습니까? (사용자가 아니지만 전체 목록)

답변

4

지난 밤에 게임 서버 플러그인을 작성하여 사용자 계정을 만들고 관리자로 설정하는 것이 큰 문제입니다.

아니요. 그것이 관리 계정으로 실행되는 것입니다 : 관리자 권한! 그런 일이 일어나지 않게하려면 관리 사용자로 실행하지 마십시오.

IMO 그러나 게임 서버가 로컬 Windows API 기능에 액세스 할 수있는 플러그인을 허용한다는 것은 매우 이상하고 기괴한 것 같습니다. 이는 매우 정통 적이 며 보안 그 자체로 간주됩니다. 특별한 이유가 있습니까? 사물을 넓히는 것이 아니라 게임의 라이브러리 기능이 무엇이든 액세스를 제한하는 것이 어떻습니까?

C++에서 원격 데스크톱을 사용/사용 중지 할 수 있습니까?

예. 일단 관리자라면 쉘 액세스가 가능할 것이므로 netsh firewall set service remotedesktop enable을 프로세스로 실행하는 것은 간단합니다.

+0

정말로 Windows API에 액세스하는 DLL을 제한 할 수 있는지 확실하지 않습니다. 그렇게 할 수있는 유일한 방법은 일종의 에뮬레이션 일 것이고 느리다. – vava

+0

[이 소프트웨어] (http://dev.chromium.org/developers/design-documents/sandbox)는 어떻게 든 쉽게 만들 수 있습니다. – vava

+0

@vava : 이것이 모든 AMXX/Sourcemod 플러그인의 작동 방식입니다. Java 또는 .Net과 마찬가지로 바이트 코드 및 JIT-ed로 컴파일됩니다. 이 때문에 매우 빠르지 만 동시에 API는 Windows/Linux API에 액세스 할 수 없기 때문에 서버 관리자는 바이러스와 같은 것에 대해 걱정할 필요없이 서버에 (크로스 플랫폼!) 플러그인을 설치할 수 있습니다. –

1

일반적으로 서버의 플러그인이 수행 할 수있는 작업에 대한 액세스를 제한하려는 경우 플러그인을 C++로 작성하는 것을 허용하지 않으면 스크립팅 언어를 사용하게됩니다.

C++ 코드의 경우에는 호출 할 수있는 Windows API 이상에 대해 걱정해야합니다. 신뢰할 수없는 사람이 C++로 작성한 플러그인 코드를 게임과 동일한 프로세스에서 실행하게하는 경우 서버에서 플러그 인 코드를 사용하면 게임 서버가 쉽게 중단 될 수 있고 게임 서버가 실행중인 계정에서 수행 할 수있는 파일 액세스를 수행 할 수 있습니다 (게임 데이터 파일 수정 또는 삭제 포함).

더 일반적인 해결책은 동작을 수행하기위한 액세스 만 제공하는 스크립트 언어로 작성된 플러그인을 사용하는 것입니다. 플러그인을 수행 할 수 있고 확실히 플러그인이 액세스 할 수있는 포인터 조작 네가 기대하지 않는 것들.

+0

그래, 잘 알고 롤,하지만이 게임 엔진은 밸브가 아니라 내가 개발 한 것입니다. 그들이 얼마나 나쁘게 망쳐 놨는지 알려주고 싶다면, 그걸로 가라. –

0

서버 플러그인이 관리 권한을 가진 계정을 만들 수 있는지 여부는 선택한 언어 (C 및 C++은 정확히 동일하게 동작 함)에 따라 실제로 결정되지는 않지만 서버 프로세스 자체가 이미 Administrator 권한으로 실행 중인지 여부에 따라 결정됩니다. 서버 프로세스가 일반 사용자로 실행 중이면 관리자 계정을 만들 수 없기 때문에 플러그인을 사용할 수 없습니다.

이 말은 Valve 나 다른 게임 서버 제작자가 그런 문제를 담당하는 것이 아니라 서버를 설치 한 사람입니다.

1

지금 나는 당신이 게임 서버 소프트웨어 (I 다양한 게임 개발자가 게임 서버를 호스팅하는 사람들의 실용적인 측면에 너무 관심이없는 것을 알고) 동작을 제어 할 수없는 이해 :

마이크로 소프트 것 확실히 제한된 사용자 계정이 관리자 유형의 작업을 수행 할 수 있도록 Windows에서 API를 사용하지 않도록하십시오. 내 경험에 비추어 볼 때 대부분의 관리자 유형을 변경하려면 (a) Administrators 그룹의 구성원이거나 (b) 로컬 보안 정책이나 그룹 정책을 통해 구성된 일부 그룹의 구성원이어야 변경이 가능해야합니다. 따라서 ACL을 사용하여 파일 및 정책에 대한 액세스를 제한하여 기본적으로 API에 대한 액세스를 제한 할 수 있어야합니다. 일반적으로 액세스 권한을 얻기 위해 API를 사용할 수있는 방법이있을 때는 일반적으로 Microsoft에서 수정할 보안 버그로 간주됩니다. "windows local privilege escalation"에 대한 모든 웹 검색 결과를 참조하십시오.