Add files via upload
parent
5f1773ecf7
commit
4cb0c57e52
|
@ -0,0 +1,178 @@
|
||||||
|
#Process Monitor
|
||||||
|
#Author: @r3dQu1nn
|
||||||
|
#Queries the processes at a set interval to see what processes have been started since that interval time
|
||||||
|
#Thanks to @Alyssa (ramen0x3f) for the code snippets! Big thanks to @i_am_excite for the powershell code!
|
||||||
|
#Big thanks to raffi for the on heartbeat help!
|
||||||
|
|
||||||
|
#Global Variables
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
include(script_resource("ProcessMonitor.ps1"));
|
||||||
|
|
||||||
|
#Register Alias for Process Monitor
|
||||||
|
beacon_command_register("ProcessMonitor",
|
||||||
|
"Start/Stop and Change the Interval Time for Process Monitor",
|
||||||
|
"Synopsis: ProcessMonitor [Start/Stop] [Time]\n" .
|
||||||
|
"Options: 1m, 5m (default), 10m, 20m, 30m. If no time supplied, default of 5m is used.");
|
||||||
|
|
||||||
|
#Process Monitor alias
|
||||||
|
alias ProcessMonitor {
|
||||||
|
if ( $2 eq 'Start' && $3 eq '1m' ) {
|
||||||
|
if (-exists script_resource("ProcessMonitor.ps1")) {
|
||||||
|
$bid = $1;
|
||||||
|
$timer = "Start";
|
||||||
|
$interval = "1m";
|
||||||
|
blog($1, "\c9Process Monitor Started! Time Interval is set to " . $interval);
|
||||||
|
blog($1, "\c4Run ProcessMonitor [Stop] to stop ProcessMonitor from running continuously.");
|
||||||
|
blog($1, "\cBDepending on your sleep time, results might come before or after checkin.");
|
||||||
|
bpowershell_import!($1, script_resource("ProcessMonitor.ps1"));
|
||||||
|
bpowerpick!($1, 'Get-Proc 1');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
berror($1, "\c4ProcessMonitor.ps1 does not exist!");
|
||||||
|
show_message("ProcessMonitor.ps1 does not exist!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( $2 eq 'Start' && $3 eq '5m' ) {
|
||||||
|
if (-exists script_resource("ProcessMonitor.ps1")) {
|
||||||
|
$bid = $1;
|
||||||
|
$timer = "Start";
|
||||||
|
$interval = "5m";
|
||||||
|
blog($1, "\c9Process Monitor Started! Time Interval is set to " . $interval);
|
||||||
|
blog($1, "\c4Run ProcessMonitor [Stop] to stop ProcessMonitor from running continuously.");
|
||||||
|
blog($1, "\cBDepending on your sleep time, results might come before or after checkin.");
|
||||||
|
bpowershell_import!($1, script_resource("ProcessMonitor.ps1"));
|
||||||
|
bpowerpick!($1, 'Get-Proc 5');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
berror($1, "\c4ProcessMonitor.ps1 does not exist!");
|
||||||
|
show_message("ProcessMonitor.ps1 does not exist!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( $2 eq 'Start' && $3 eq '10m' ) {
|
||||||
|
if (-exists script_resource("ProcessMonitor.ps1")) {
|
||||||
|
$bid = $1;
|
||||||
|
$timer = "Start";
|
||||||
|
$interval = "10m";
|
||||||
|
blog($1, "\c9Process Monitor Started! Time Interval is set to " . $interval);
|
||||||
|
blog($1, "\c4Run ProcessMonitor [Stop] to stop ProcessMonitor from running continuously.");
|
||||||
|
blog($1, "\cBDepending on your sleep time, results might come before or after checkin.");
|
||||||
|
bpowershell_import!($1, script_resource("ProcessMonitor.ps1"));
|
||||||
|
bpowerpick!($1, 'Get-Proc 10');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
berror($1, "\c4ProcessMonitor.ps1 does not exist!");
|
||||||
|
show_message("ProcessMonitor.ps1 does not exist!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( $2 eq 'Start' && $3 eq '20m' ) {
|
||||||
|
if (-exists script_resource("ProcessMonitor.ps1")) {
|
||||||
|
$bid = $1;
|
||||||
|
$timer = "Start";
|
||||||
|
$interval = "20m";
|
||||||
|
blog($1, "\c9Process Monitor Started! Time Interval is set to " . $interval);
|
||||||
|
blog($1, "\c4Run ProcessMonitor [Stop] to stop ProcessMonitor from running continuously.");
|
||||||
|
blog($1, "\cBDepending on your sleep time, results might come before or after checkin.");
|
||||||
|
bpowershell_import!($1, script_resource("ProcessMonitor.ps1"));
|
||||||
|
bpowerpick!($1, 'Get-Proc 20');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
berror($1, "\c4ProcessMonitor.ps1 does not exist!");
|
||||||
|
show_message("ProcessMonitor.ps1 does not exist!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( $2 eq 'Start' && $3 eq '30m' ) {
|
||||||
|
if (-exists script_resource("ProcessMonitor.ps1")) {
|
||||||
|
$bid = $1;
|
||||||
|
$timer = "Start";
|
||||||
|
$interval = "30m";
|
||||||
|
blog($1, "\c9Process Monitor Started! Time Interval is set to " . $interval);
|
||||||
|
blog($1, "\c4Run ProcessMonitor [Stop] to stop ProcessMonitor from running continuously.");
|
||||||
|
blog($1, "\cBDepending on your sleep time, results might come before or after checkin.");
|
||||||
|
bpowershell_import!($1, script_resource("ProcessMonitor.ps1"));
|
||||||
|
bpowerpick!($1, 'Get-Proc 30');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
berror($1, "\c4ProcessMonitor.ps1 does not exist!");
|
||||||
|
show_message("ProcessMonitor.ps1 does not exist!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( $2 eq 'Stop' ) {
|
||||||
|
$timer = "Stop";
|
||||||
|
$interval = "5m";
|
||||||
|
blog($1, "\cBProcess Monitor has Stopped.");
|
||||||
|
}
|
||||||
|
else if ( $2 is $null ) {
|
||||||
|
blog($1, "\c4Please provide 'Start' then a correct time interval to Start Process Monitor.");
|
||||||
|
show_message("Please provide 'Start' then a correct time interval to Start Process Monitor.");
|
||||||
|
}
|
||||||
|
else if ( $3 != '1m' || $3 != '5m' || $3 != '10m' || $3 != '20m' || $3 != '30m' ) {
|
||||||
|
blog($1, "\c4Please provide a correct time interval to Start Process Monitor.");
|
||||||
|
show_message("Please provide a correct time interval to Start Process Monitor.");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$timer = "";
|
||||||
|
$interval = "5m";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Process Monitor heartbeat checks
|
||||||
|
on heartbeat_1m {
|
||||||
|
if ( $timer eq 'Start' && $interval eq '1m' ) {
|
||||||
|
bpowerpick!($bid, 'Get-Proc 1');
|
||||||
|
}
|
||||||
|
else if ( $timer eq 'Stop' ) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
on heartbeat_5m {
|
||||||
|
if ( $timer eq 'Start' && $interval eq '5m' ) {
|
||||||
|
bpowerpick!($bid, 'Get-Proc 5');
|
||||||
|
}
|
||||||
|
else if ( $timer eq 'Stop' ) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
on heartbeat_10m {
|
||||||
|
if ( $timer eq 'Start' && $interval eq '10m' ) {
|
||||||
|
bpowerpick!($bid, 'Get-Proc 10');
|
||||||
|
}
|
||||||
|
else if ( $timer eq 'Stop' ) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
on heartbeat_20m {
|
||||||
|
if ( $timer eq 'Start' && $interval eq '20m' ) {
|
||||||
|
bpowerpick!($bid, 'Get-Proc 20');
|
||||||
|
}
|
||||||
|
else if ( $timer eq 'Stop' ) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
on heartbeat_30m {
|
||||||
|
if ( $timer eq 'Start' && $interval eq '30m' ) {
|
||||||
|
bpowerpick!($bid, 'Get-Proc 30');
|
||||||
|
}
|
||||||
|
else if ( $timer eq 'Stop' ) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
function Get-Proc {
|
||||||
|
<#
|
||||||
|
.DESCRIPTION
|
||||||
|
Cobaltstrike has a great general function for processes: the 'ps' command. Use that if you need to dump ALL the processes w/ arch.
|
||||||
|
|
||||||
|
This solution will show the running processes that have a creation date within the past 1 hour, giving more SA to the operator/analyst than just looking through an entire process list
|
||||||
|
|
||||||
|
Both solutions have their place. It is up to you to know how to use which when you need it.
|
||||||
|
|
||||||
|
Module info for process list has also been removed because nobody used it in the two years that the survey script was around. If you need to do IR on a box, there are better ways to do so
|
||||||
|
than by clogging up the screen in a survey.
|
||||||
|
#>
|
||||||
|
|
||||||
|
param
|
||||||
|
(
|
||||||
|
[Parameter(Mandatory = $True)]
|
||||||
|
[string]$Time
|
||||||
|
)
|
||||||
|
|
||||||
|
$test3 = gwmi win32_process | sort -Property ProcessID
|
||||||
|
$q = get-date
|
||||||
|
|
||||||
|
"`n[+] Processes created in the past $Time minutes`n"
|
||||||
|
"{0,-8}{1,-8}{2,-20} {3,-20} {4}" -f "PID","PPID","PID Name","PPID Name","Owner"
|
||||||
|
|
||||||
|
foreach ($i in $test3){
|
||||||
|
$qq = [Management.ManagementDateTimeConverter]::ToDateTime($i.creationdate)
|
||||||
|
if ($qq -gt $q.addminutes(-$Time)){
|
||||||
|
$z = $i.ParentProcessId
|
||||||
|
"{0,-8}{1,-8}{2,-20} {3,-20} {4}" -f $i.ProcessId, $i.ParentProcessId, $( if($i.processname.length -gt 20){ $i.processname.substring(0,20)} else{$i.processname}), $($test3 | where {$_.processid -eq $z}).caption , $i.GetOwner().user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue