Files
RMM-Hunter/internal/pkg/hunt/detect/scheduledTasks/tasks.go
T

55 lines
1.5 KiB
Go
Raw Normal View History

package scheduledTasks
import (
"fmt"
"rmm-hunter/internal/pkg/hunt/detect/common"
. "rmm-hunter/internal/suspicious"
"strings"
"time"
schTasks "github.com/Kraken-OffSec/Scurvy/core/scheduledTasks"
)
func Detect() []*ScheduledTask {
fmt.Printf("[*] Enumerating Scheduled Tasks \n")
tasks, err := schTasks.ListTasks()
if err != nil {
fmt.Printf("[-] Error enumerating scheduled tasks: %s\n", err.Error())
return []*ScheduledTask{}
}
fmt.Printf(" [>] Dispositioning %d Scheduled Tasks\n", len(tasks))
return compareTasks(tasks)
}
func compareTasks(tasks []schTasks.TaskInfo) []*ScheduledTask {
var suspiciousTasks []*ScheduledTask
for _, task := range tasks {
for _, rmm := range common.CommonRMMs {
rmmLower := strings.ToLower(rmm)
taskNameLower := strings.ToLower(task.Name)
if strings.Contains(taskNameLower, rmmLower) {
fmt.Printf(" [?] Found %s\n", task.Name)
suspiciousTasks = append(suspiciousTasks, &ScheduledTask{
Name: task.Name,
Author: task.Author,
LastRun: task.LastRun.Format(time.RFC3339),
NextRun: task.NextRun.Format(time.RFC3339),
LastResult: task.LastResult,
CreatedDate: task.CreationDate.Format(time.RFC3339),
State: task.State,
Path: task.Path,
Description: task.Description,
ModifiedDate: "",
Enabled: task.Enabled,
})
break
}
}
}
fmt.Printf("[+] Found %d Suspicious Scheduled Tasks\n", len(suspiciousTasks))
return suspiciousTasks
}