Contenu

Hackvens 2022 - A strange dump

Contenu

A strange dump

Énoncé

Vous avez récupéré un dump mémoire d’un ordinateur qui trainait lors d’une mission CSIRT. Celui-ci semble avoir réalisé des activités plus que douteuses. A vous de trouver des potentiels fichiers qui pourraient confirmer ou non vos soupçons.

Solve

On a un dump mémoire à analyser, on va commencer par déterminer le profile avec Volatility2 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
./vol2 -f JEAN-PC-20220928-121426.raw imageinfo           
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
                     AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/home/zarkyo/info/cyber/advens/forensic/JEAN-PC-20220928-121426.raw)
                      PAE type : No PAE
                           DTB : 0x187000L
                          KDBG : 0xf800027f20a0L
          Number of Processors : 1
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0xfffff800027f3d00L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2022-09-28 12:14:29 UTC+0000
     Image local date and time : 2022-09-28 14:14:29 +0200

On remarque le fichier confidential.7z ouvert avec WinRAR :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 cmdline
Volatility Foundation Volatility Framework 2.6
************************************************************************
[...]
************************************************************************
WinRAR.exe pid:    180
Command line : "C:\Program Files\WinRAR\WinRAR.exe" "C:\Users\Jean\Desktop\Mes documents à moi\confidential.7z"
************************************************************************
cmd.exe pid:   2040
Command line : "cmd.exe" /s /k pushd "C:\Users\Jean\Desktop\Projets"
************************************************************************
conhost.exe pid:   1968
Command line : \??\C:\Windows\system32\conhost.exe
************************************************************************
mspaint.exe pid:   1944
Command line : "C:\Windows\system32\mspaint.exe" 
************************************************************************
[...]

On remarque l’éxecution d’un script de chiffrement cipher.py :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 cmdscan
Volatility Foundation Volatility Framework 2.6

**************************************************
CommandProcess: conhost.exe Pid: 1968
CommandHistory: 0x2344e0 Application: cmd.exe Flags: Allocated, Reset
CommandCount: 2 LastAdded: 1 LastDisplayed: 1
FirstCommand: 0 CommandCountMax: 50
ProcessHandle: 0x5c
Cmd #0 @ 0x2319e0: dir
Cmd #1 @ 0x2304a0: python cipher.py
Cmd #15 @ 0x1f0158: #
Cmd #16 @ 0x2337e0: #
**************************************************
CommandProcess: conhost.exe Pid: 404
CommandHistory: 0xe44e0 Application: DumpIt.exe Flags: Allocated
CommandCount: 0 LastAdded: -1 LastDisplayed: -1
FirstCommand: 0 CommandCountMax: 50
ProcessHandle: 0x5c
Cmd #15 @ 0xa0158: 
Cmd #16 @ 0xe37e0: 

On récupère le password utilisé pour chiffrer AZERTYUIO :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 consoles
Volatility Foundation Volatility Framework 2.6

**************************************************
ConsoleProcess: conhost.exe Pid: 1968
Console: 0xff3a6200 CommandHistorySize: 50
HistoryBufferCount: 2 HistoryBufferMax: 4
OriginalTitle: %SystemRoot%\system32\cmd.exe
Title: C:\Windows\system32\cmd.exe
AttachedProcess: cmd.exe Pid: 2040 Handle: 0x5c
----
CommandHistory: 0x23e430 Application: python.exe Flags: Reset
CommandCount: 1 LastAdded: 0 LastDisplayed: 0
FirstCommand: 0 CommandCountMax: 50
ProcessHandle: 0x0
Cmd #0 at 0x233040: AZERTYUIO
----
CommandHistory: 0x2344e0 Application: cmd.exe Flags: Allocated, Reset
CommandCount: 2 LastAdded: 1 LastDisplayed: 1
FirstCommand: 0 CommandCountMax: 50
ProcessHandle: 0x5c
Cmd #0 at 0x2319e0: dir
Cmd #1 at 0x2304a0: python cipher.py
----
Screen 0x210f70 X:80 Y:300
Dump:
                                                                                
C:\Users\Jean\Desktop\Projets>dir                                               
 Le volume dans le lecteur C n a pas de nom.                                    
 Le num?ro de s?rie du volume est 6074-0897                                     
                                                                                
 R?pertoire de C:\Users\Jean\Desktop\Projets                                    
                                                                                
19/09/2022  17:25    <REP>          .                                           
19/09/2022  17:25    <REP>          ..                                          
19/09/2022  17:09               539 cipher.py                                   
19/09/2022  17:26               163 Roadmap.txt                                 
               2 fichier(s)              702 octets                             
               2 R?p(s)  20?056?727?552 octets libres                           
                                                                                
C:\Users\Jean\Desktop\Projets>python cipher.py                                  
Enter the password to complexify :AZERTYUIO                                     
                                                                                
C:\Users\Jean\Desktop\Projets>                                                  
[...]                                                          

On va récupérer les fichiers qu’on a pu remarquer précédemment :

1
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 filescan > file.txt
1
2
3
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 dumpfiles --dump-dir=./ -Q 0x1ec64590
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x1ec64590   None   \Device\HarddiskVolume2\Users\Jean\Desktop\Mes documents à moi\confidential.7z
1
2
3
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 dumpfiles --dump-dir=./ -Q 0x000000001ec71b30                  
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x1ec71b30   None   \Device\HarddiskVolume2\Users\Jean\Desktop\Projets\cipher.py

En parcourant le résultat du filescan, on remarque le fichier database.txt que l’on va aussi dump :

1
2
3
./vol2 -f JEAN-PC-20220928-121426.raw --profile=Win7SP1x64 dumpfiles --dump-dir=./ -Q 0x1ec789b0
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x1ec789b0   None   \Device\HarddiskVolume2\Users\Jean\Documents\database.txt

Le fichier confidential.7z est protégé par un password, on ne peut pas ouvrir les fichiers qu’il contient.

Si on s’intéresse au script python, on peut voir que celui-ci est utilisé pour chiffrer les password contenus dans le fichier database.txt :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat cipher.py              
import hashlib, base64
"""
J'utilise ce programme pour stocker mes mots de passes de manière très sécurisé 
"""
password = input("Enter the password to complexify :")

key = "C31klétr3l0ngUe"

def xor(password, key):
    cipher = ""
    for i in range(0, len(password)):
        j = i % len(key)
        xor = ord(password[i]) ^ ord(key[j])
        cipher = cipher + chr(xor)
    return cipher

file = open("C:\\Users\\Jean\\Documents\\database.txt", "a").write(base64.b64encode(str.encode(xor(password,key))).decode("utf-8")+"\n")

L’objectif va être de déchiffrer ces password et ainsi espérer trouver un password valide pour le confidential.7z.

On reprend le script initial, on le modifie un peu et on l’exécute :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import hashlib, base64

password = "AZERTYUIO"
key = "C31klétr3l0ngUe"


def xor(password, key):
    cipher = ""
    for i in range(0, len(password)):
        j = i % len(key)
        xor = ord(password[i]) ^ ord(key[j])
        cipher = cipher + chr(xor)
    return cipher

a_file = open("./database.txt")

lines = a_file.readlines()
for line in lines:
    a = base64.b64decode(line).decode("utf-8")
    print(a+"\n")
    a = xor(a, key)
    print(a+"\n")
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
python decipher.py

[...]

Ma fonction de sécuritation de mot de passe fonctionne parfaitement ;) 

[...]

Password

[...]

Supermotdepassecompliqueavecdescaracteresspeci@x
[...]

pass : Supermotdepassecompliqueavecdescaracteresspeci@x

On décompresse l’archive avec le password :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
7z e confidential.7z 

7-Zip [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.04 (locale=fr_FR.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs x64)

Scanning the drive for archives:
1 file, 12288 bytes (12 KiB)

Extracting archive: confidential.7z

WARNINGS:
There are data after the end of archive

--
Path = confidential.7z
Type = 7z
WARNINGS:
There are data after the end of archive
Physical Size = 8369
Tail Size = 3919
Headers Size = 209
Method = LZMA2:24k 7zAES
Solid = +
Blocks = 1

    
Enter password (will not be echoed): Supermotdepassecompliqueavecdescaracteresspeci@x
Everything is Ok

Archives with Warnings: 1

Warnings: 1
Files: 2
Size:       18575
Compressed: 12288
1
2
3
4
5
cat note.txt    
Pseudo du contact :
HACKVENS{Vol1tility_4_th3_b35t}
Mot de passe admin du dom récupéré :
@Dm1n4lw45g3TStr@nGP@55w0rd

Flag : HACKVENS{Vol1tility_4_th3_b35t}