Positionner une ACL à NULL sur un process, thread ou service…

En positionnant une ACL à NULL sur un process, thread ou service, tous les droits sont à accordés à tout le monde…
… ne pas oublier de demander le privilège : SE_SECURITY_NAME (« SeSecurityPrivilege »)

Méthode générique positionnant une ACL NULL sur un HANDLE de processus, thread ou service…

bool nullSdToHandle(PHANDLE monHandle, SE_OBJECT_TYPE monType)
{
	PSECURITY_DESCRIPTOR newSD = NULL;
	ULONG laTaille;
	bool succes = false;

	if(BuildSecurityDescriptor(NULL, NULL, 0, NULL, 0, NULL, NULL, &laTaille, &newSD) == ERROR_SUCCESS)
	{
		switch(monType)
		{
		case SE_KERNEL_OBJECT:
			succes = SetKernelObjectSecurity(*monHandle, DACL_SECURITY_INFORMATION, newSD) != 0;
			break;
		case SE_SERVICE:
			succes = SetServiceObjectSecurity(*reinterpret_cast<SC_HANDLE *>(monHandle), DACL_SECURITY_INFORMATION, newSD) != 0;
			break;
		}
		LocalFree(newSD);
	}
	return succes;
}

Gestion des processus

bool giveProcessByPID(DWORD pid)
{
	bool succes = false;
	HANDLE processHandle = 	OpenProcess(WRITE_DAC | ACCESS_SYSTEM_SECURITY, false, pid);

	if(processHandle != NULL)
	{
		succes = nullSdToHandle(&processHandle);
		CloseHandle(processHandle);
	}
	return succes;
}

Gestion des threads

bool giveThreadByTID(DWORD tid)
{
	bool succes = false;
	HANDLE threadHandle = OpenThread(WRITE_DAC | ACCESS_SYSTEM_SECURITY, false, tid);

	if(threadHandle != NULL)
	{
		succes = nullSdToHandle(&threadHandle);
		CloseHandle(threadHandle);
	}
	return succes;
}

Gestion des services

bool giveServiceByName(LPCTSTR serviceName)
{
	bool succes = false;
	SC_HANDLE scHandle = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE);

	if(scHandle != NULL)
	{
		SC_HANDLE serviceHandle = OpenService(scHandle, serviceName, WRITE_DAC | ACCESS_SYSTEM_SECURITY);
		if(serviceHandle != NULL)
		{
			succes = nullSdToHandle(reinterpret_cast<PHANDLE>(&serviceHandle), SE_SERVICE);
			CloseServiceHandle(serviceHandle);
		}
		CloseServiceHandle(scHandle);
	}
	return succes;
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.