ИзползванС Π½Π° PowerShell Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° информация Π·Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚

PowerShell Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ инструмСнт Π·Π° автоматизация, ΠΊΠΎΠΉΡ‚ΠΎ чСсто сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ софтуСр ΠΈ спСциалисти ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π° сигурност.
Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° PowerShell Π·Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈ устройства ΠΏΡ€ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΈ Π·Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π° сигурност. Π—Π° Ρ†Π΅Π»Ρ‚Π° Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° напишСм скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС изпълнСн Π½Π° ΠΊΡ€Π°ΠΉΠ½ΠΎΡ‚ΠΎ устройство, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ послСдва ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Π½Π° самия скрипт.

function CSIRT{
param($path)
if ($psversiontable.psversion.major -ge 5)
	{
	$date = Get-Date -Format dd.MM.yyyy_hh_mm
	$Computer = $env:COMPUTERNAME
	New-Item -Path $path$computer$date -ItemType 'Directory' -Force | Out-Null
	$path = "$path$computer$date"

	$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname,
	processid, commandline, parentprocessid

	$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress,
	localport, remoteaddress, remoteport, owningprocess, state
	
	$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress,
	localport, remoteaddress, remoteport, owningprocess, state

	$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname|
	where author -notlike '*ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚*' | where author -ne $null |
	where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*'

	$job = Get-ScheduledJob

	$ADS =  get-item * -stream * | where stream -ne ':$Data'

	$user = quser

	$runUser = Get-ItemProperty "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"

	$runMachine =  Get-ItemProperty "HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

	$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
	$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
	"ScheduledJob", "AlternativeDataStream"


	for ($w = 0; $w -lt $array.count; $w++){
		$name = $arrayName[$w]
		$array[$w] >> $path$name.txt
		}

	}

}

Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°, създавамС функция CSIRT, която Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - ΠΏΡŠΡ‚ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. ПонСТС ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΈ работят Π² PowerShell v5, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΎ, Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° вСрсията Π½Π° PowerShell.

function CSIRT{
		
param($path)# ΠΏΡ€ΠΈ изпълнСниС Π½Π° скрипта Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΡƒΠΊΠ°ΠΆΠ΅ дирСктория Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅
if ($psversiontable.psversion.major -ge 5)

Π—Π° удобство ΠΏΡ€ΠΈ навигация ΠΏΡ€Π΅Π· ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄Π²Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: $date ΠΈ $Computer, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ присвоСни ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π΄Π°Ρ‚Π°.

$date = Get-Date -Format dd.MM.yyyy_hh_mm
$Computer = $env:COMPUTERNAME
New-Item -Path $path$computer$date –ItemType 'Directory' -Force | Out-Null 
$path = "$path$computer$date"

Бписък Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ процСси ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° тСкущия ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: Ρ‰Π΅ създадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° $process, ΠΊΠ°Ρ‚ΠΎ ΠΉ присвоим ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° get-ciminstance с клас win32_process. Използвайки ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Select-Object, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ; Π² нашия случай Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ parentprocessid (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° родитСлския процСс PPID), creationdate (Π΄Π°Ρ‚Π° Π½Π° създаванС Π½Π° процСса), processed (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° процСса PID), processname (ΠΈΠΌΠ΅ Π½Π° процСса) ΠΈ commandline (ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° стартиранС).

$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessid

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ списък Π½Π° всички TCP ΠΈ UDP Π²Ρ€ΡŠΠ·ΠΊΠΈ, Ρ‰Π΅ създадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ $netTCP ΠΈ $netUDP ΠΈ Ρ‰Π΅ ΠΈΠΌ присвоим ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΈΡ‚Π΅ Get-NetTCPConnection ΠΈ Get-NetUDPEndpoint ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

Π‘ΡŠΡ‰ΠΎ Π²Π°ΠΆΠ΅Π½ аспСкт Π΅ Π΄Π° ΡƒΠ·Π½Π°Π΅ΠΌ списъка Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ задания. Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΈΡ‚Π΅ get-ScheduledTask ΠΈ Get-ScheduledJob. Π©Π΅ Π³ΠΈ присвоим Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ $task ΠΈ $job, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² систСмата ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠΌΠ° мноТСство ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π° активност, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½ΠΈΡ‚Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΡŠΡ‚ Select-Object.

$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname| where author -notlike '*Microsoft*' | where author -ne $null | where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*' # $task ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° Π°Π²Ρ‚ΠΎΡ€ΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ β€œMicrosoft”, β€œ*@%systemroot%*”, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ β€žΠΏΡ€Π°Π·Π½ΠΈβ€œ Π°Π²Ρ‚ΠΎΡ€ΠΈ
$job = Get-ScheduledJob

Π’ Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма NTFS ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° понятиСто Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π΄Π°Π½Π½ΠΈ (Alternate Data Streams, ADS). Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ„Π°ΠΉΠ» Π² NTFS ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ с няколко ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½ΠΈ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ADS ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° скриСм Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΏΡ€ΠΈ стандартни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° систСмата. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²Π½Π΅Π΄Ρ€ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈ/ΠΈΠ»ΠΈ Π΄Π° сС скрият Π΄Π°Π½Π½ΠΈ.

Π—Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π΄Π°Π½Π½ΠΈ Π² PowerShell Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° get-item ΠΈ вградСния инструмСнт Windows stream със символа * Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° всички възмоТни ΠΏΠΎΡ‚ΠΎΡ†ΠΈ; Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ създадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° $ADS.

$ADS = get-item * -stream * | where stream –ne ':$Data' 

ПолСзно Ρ‰Π΅ бъдС Π΄Π° ΡƒΠ·Π½Π°Π΅ΠΌ ΠΈ списъка Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, Π²Π»Π΅Π·Π»ΠΈ Π² систСмата; Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ създадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° $user ΠΈ Ρ‰Π΅ ΠΉ Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° quser.

$user = quser

Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΡ†ΠΈΡ‚Π΅, Π·Π° Π΄Π° сС ΡƒΡ‚Π²ΡŠΡ€Π΄ΡΡ‚ Π² систСмата, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° направят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² автозапуск. Π—Π° Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π² автозапуска, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Get-ItemProperty.
Π”Π° създадСм Π΄Π²Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: $runUser – Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Π°Π²Ρ‚ΠΎΠ·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° потрСбитСля ΠΈ $runMachine – Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Π°Π²Ρ‚ΠΎΠ·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π°.

$runUser = Get-ItemProperty 
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty 
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

Π—Π° Π΄Π° сС записва всяка информация Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, създавамС масив с ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ масив с ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.


$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"

И, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ†ΠΈΠΊΡŠΠ» for, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ записани Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

for ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

Π‘Π»Π΅Π΄ изпълнСниС Π½Π° скрипта Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ създадСни 9 тСкстови Ρ„Π°ΠΉΠ»Π°, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° информация.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° спСциалиститС ΠΏΠΎ кибСрсигурност ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ PowerShell Π·Π° обогатяванС Π½Π° информацията, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° справянС с Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си. Добавяйки скрипт Π² Π°Π²Ρ‚ΠΎΠ·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° информация Π±Π΅Π· Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π΄Π°ΠΌΠΏΠΎΠ²Π΅, ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ Ρ‚.Π½.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster