OSForensics v8 New Features
Dit is niet de eerste keer dat we een post schrijven over OSForensics. Sterker nog, OSForensics is ondertussen het meest beschreven product op mijn blog. En dat is niet voor niets. OSForensics blijft me elke upgrade verbazen met nieuwe en praktische features. In OSForensics ben ik met name erg benieuwd naar de nieuwe OSF Script Player waarmee we Python scripts kunnen draaien. Maar OSForensics V8 biedt nog meer nieuws. Ook benieuwd? Lees lekker mee:
OSForensics versie 5 https://jarnobaselier.nl/osforensics-v5-review/https://jarnobaselier.nl/osforensics-v5-review/ en versie 6 https://jarnobaselier.nl/osforensics-v6-preview/https://jarnobaselier.nl/osforensics-v6-preview/ heb ik gereviewed. OSForensics 7 heb ik ondertussen het meest gebruikt en nu ben ik gevraagd om OSForensics v8 te reviewen. In deze review ga ik dus niet weer alle aspecten van OSForensics benoemen maar wil ik de belangrijke nieuwe features in het zonnetje zetten. Let op, ik schrijf deze post op basis van de OSForensics Alpha6 build. Uiteraard kunnen bepaalde schermen er in de uiteindelijke versie anders uitzien en kunnen er bepaalde features toegevoegd zijn. Onderdeel van mijn review is uiteraard ook het aanleveren van waardevolle feedback voor de programmeurs. Dus, laten we eens snel gaan kijken naar een aantal nieuwe features. OSForensics V8 beloofd weer heel wat moois. Een korte overview van nieuwe features:
- Python Script Engine
- Booting VM’s
- AmCache Viewer
- Prefetch Viewer
- Android Artifacts
- Clipboard Viewer
Als we OSForensics V8 voor het eerst opstarten dan zien we dezelfde vertrouwde interface:
Deze interface heeft grotendeels dezelfde bekende opties zoals de “Auto Tirage”, “File Name Search”, “Viewers” etc. Maar er staan ook een groot aantal nieuwe zaken tussen. Kun jij ze vinden:
Al met al best een verzameling aan nieuwe features sinds OSForensics V6.
Add Device:
De “Add Device” feature geeft je op een gemakkelijke manier de mogelijkheid om een device aan de case toe te voegen. Een “device” kan verschillende formaten hebben. Fysieke disks, image files, folders, Volume Shadow Copies en Bitlocker Encrypted Drives.
System Information:
System Information is special ingericht voor “live acquisition” doeleinden. System Information geeft de gebruiker een scala aan systeemcommando’s die uitgevoerd kunnen worden op een live systeem zodat actuele data gemakkelijk achterhaald kan worden. Denk hierbij aan de actuele hostnaam, ip gegevens, netwerkgegevens, scheduled tasks, USB informatie, poort informatie enz.
User Activity:
User activity heette vroeger “Recent Activity”. Deze toolkit scant het systeem op het gebruik van diverse bestanden en ingevoerde commando’s en sorteert deze volgens een duidelijke structuur.
Program Artifacts:
De “program artifacts” module bestaat uit 2 submodules, namelijk de “Prefetch Viewer” en de “AmCache Viewer”. Met de Prefetch Viewer kun je potentieel waardevolle forensische informatie bekijken die is opgeslagen door de Prefetcher van het besturingssysteem. De OS Prefetcher is een component die de prestaties van het systeem verbetert door pre-caching van applicaties en bijbehorende bestanden naar het RAM te streamen waardoor de belasting op de schijf wordt verminderd. Om dit te doen verzameld de Prefetcher details over het gebruik van applicaties zoals het aantal keren dat de applicatie is uitgevoerd, de laatste uitvoeringstijd en alle bestanden die de applicatie gebruikt wanneer deze wordt uitgevoerd.
De AmCache Viewer kan het “amcache registercomponent” geanalyseerd worden. De AmCache-hive slaat metagegevens over de installatie en de uitvoering van programma’s op Windows 7 en latere machines. Denk aan timestamps, het bijhouden van de laatste wijziging van een applicatie, naam, beschrijving, uitvoeringspad, SHA-1 hash van executables enz. Deze AmCache artefacten kunnen blijven bestaan, zelfs nadat de toepassingen van het systeem zijn verwijderd. De standaardlocatie van de AmCache %rootdrive%:\Windows\appcompat\Programs\Amcache.hve.
File Viewer:
De file viewer was voorheen ook aanwezig meer niet zo snel toegankelijk als nu vanuit het linker menu. De file viewer geeft de gebruiker gemakkelijk toegang om bestanden vanuit de case images of daarbuiten te openen in de file viewer welke een preview geeft van het bestand en zijn metadata.
Boot Virtual Machine:
Deze functie is ideaal als je een image wilt booten. Hiervoor heb je uiteraard wel een VMplayer nodig zoals VMWare Workstation of VirtualBox. Momenteel worden alleen VMWare 14, 15 en VirtualBox 6 ondersteund als hypervisors.
Het opstarten van een schijfkopie met een functioneel besturingssysteem in een virtuele omgeving geeft de onderzoeker extra mogelijkheden voor het verzamelen en analyseren van bewijsmateriaal in een visuele omgeving. De desktopomgeving kan bekleken worden en (uitvoerbare) bestanden die niet toegankelijk waren voor statische analyse kunnen nu worden geopend binnen de virtuele omgeving. Ook statische images welke niet voorzien zijn van een MBR () kunnen gestart worden doordat OSForensics een MBR aan het image kan toevoegen. Ook NTLDR images, EFI, BootMGR en BCD bootloaders worden ondersteund. Qua images ondersteund deze functie zowel E01, Raw, VMDK, VHD en Split-images. Een belangrijke vereiste is wel dat de hostmachine 64-bit moet zijn. De client (image) kan zowel 32-bit of 64-bit zijn.
Het booten van een image gebeurt in een virtuele omgeving en veranderd de content van de forensische image niet waardoor deze blijft voldoen aan de juridische eisen.
Event Log Viewer:
Do I need to explain this? De Event Viewer doet precies wat het beloofd. Het geeft je op een vertrouwde manier toegang tot de inhoud van de OS logboeken zodat deze events geanalyseerd kunnen worden. Daarnaast geeft de event viewer je de tools om events te sorteren en om gericht te kunnen zoeken.
Web Server Log Viewer:
Ook de Web Server Log Viewer doet precies wat het beloofd. Deze log viewer analyseert IIS, Apache, NGINX logfiles. De viewer toont deze logfiles in een duidelijk leesbare overview en geeft de gebruiker een krachtig filter zodat de waardevolle zaken in deze logfiles snel en effectief gevonden kunnen worden.
Clipboard Viewer:
De clipboard viewer werkt alleen op live systemen (aangezien clipboard data zich in het RAM geheugen bevindt). Met de clipboard viewer is het mogelijk om alle content van het clipboard te bekijken. Tegenwoordig kunnen zich meerdere items bevinden in het clipboard. Deze zijn allemaal terug te vinden en weer te openen in de OSForensics File Editor.
$UsnJrnl Viewer:
Het $UsnJrnl bestand is een speciaal bestand welke alleen aanwezig is op NTFS systemen. Het $UsrJrnl bestand houdt de wijzigingen in bestanden en mappen van het volume bij. Denk aan:
- Wijzigingen van de metagegevens van een bestanden
- Bestandscreatie
- Bestanden verwijderen
- Bestanden overschrijven
Het $UsrJrnl bestand gaat vaak enkele dagen tot een week terug in de tijd en dus is deze informatie zeer nuttig voor het identificeren van verdachte bestanden (bijv. Malware) die niet langer bestaan in het bestandssysteem en dus niet teruggevonden kunnen worden met een standaard forensische controle van het actuele systeem.
Android Artifacts:
OSForensics V8 ondersteund ook het onderzoeken van Android-based telefoons evenals Androin backups. Scan deze apparaten op gebruikerstrends zoals oproepen, berichten, e-mail, browser gegevens, foto’s en contacten.
OSF Script Player:
En dan de module waar ik het echt graag over wil hebben. De OSF Script Player. Om opsporings- en analysetaken van OSForensics te automatiseren kunnen scripts worden ontwikkeld en uitgevoerd in de Script Player. De OST Script Player zorgt voor workflowautomatisering van veelvoorkomende of complexe forensische taken. Dit kan tijd besparen en verhoogt de effectiviteit. Omdat menselijke fouten geminimaliseerd worden. OSF Script Player Scripts zijn geschreven in Python en hebben toegang tot de analyse van OSForensics via de OSForensics Python API die is geïmplementeerd als een Python-module. De OSForensics Python API definieert een lijst met methoden waarmee forensische taken kunnen worden uitgevoerd zonder de bewerking handmatig uit te voeren met behulp van de GUI. Deze methoden kunnen worden aangeroepen binnen de scripts waardoor de geretourneerde gegevens verder kunnen worden gemanipuleerd met behulp van een van de uitgebreide modules van Python. Python AI-modules kunnen bijvoorbeeld worden gebruikt om beeldherkenningsmodellen te trainen met behulp van de afbeeldingen die zijn geretourneerd door OSForensics File Search. De OSF Script Player ziet er als volgt uit:
De knoppen, van links naar rechts hebben de volgende functies:
- New Script – Maak een nieuw OSForensics script
- Open Script – Open een bestaande OSForensics script
- Save Script – Sla je huidige script op
- Run Script – Draai / test je huidige script
- Export Output – Exporteer de output van je script naar een bestand
- Add Output to Case – Voeg de output van je script toe als onderdeel van de case
Laten we eens een script bouwen. Om te beginnen is het belangrijk dat de OSF module wordt geïmporteerd zodat we taken in OSForensics kunnen aanroepen. Zonder deze module zouden we gewoon werken met “Python”. Wanneer je een nieuw script start staat deze import standaard aan:
import osf |
Je kunt in je scripts case items (b.v. een geïmporteerde image) aanroepen en lokale drives. Laten we eens kijken naar een simpel script. Hier bekijken we de content van de “ProgramData” folder in geïmporteerde case image genaamd “Forensic-Image”:
#imports import osf #list files/folders in een image list = osf.ListFiles("Forensic-Image:\\ProgramData\*") print(list) |
Dit genereerd de volgende output:
Nu kunnen we deze output met de knoppen bovenaan exporteren naar een extern bestand of toevoegen aan de case.
Leuk dat we de content kunnen bekijken… maar wellicht is het leuker als we ook kunnen zoeken naar specifieke bestanden. Uiteraard kan dat.
import osf import time # Find files with the name "Malware" in C-Windows osf.FindFileStartScan('c:\\windows', search_string="*malware*") results = [] while osf.FindFileGetResult(results) == False: time.sleep(2) print(results) |
Zoals je ziet definiëren we een scanpad en een searchstring (wildcards zijn toegestaan). Vervolgens worden de resultaten in een tuple (gescheiden middels een komma en geplaatst tussen brackets) geplaatst. Wanneer de scan nog loopt (en osf.FindFileGetResults = false) wordt er gewacht met het uitvoeren van het volgende commando, namelijk het tonen van de resultaten.
Op dezelfde manier kunnen we ook naar deleted files zoeken:
import osf import time # Find Deleted Files osf.DeletedFilesStartScan('Drive-C', quality=osf.FSEARCH_QUALITY_EXCELLENT, min_size=1048576) results = [] while osf.DeletedFilesGetResult(results) == False: time.sleep(2) print(results) |
Wat opvalt in bovenstaande zoekopdracht is de toevoeging van het “min_size” argument om aan te geven hoe groot een resulterend bestand minimaal moet zijn. En daarnaast het “osf.FSEARCH_QUALITY_EXCELLENT” argument om aan te geven hoe goed de kwaliteit van het bestand moet zijn op te kunnen herstellen. Hier heb je de volgende opties:
FSEARCH_QUALITY_EXCELLENT
FSEARCH_QUALITY_GOOD
FSEARCH_QUALITY_MEDIOCRE
FSEARCH_QUALITY_ALL
Dit commando, net zoals vele andere commando’s beschikken over diverse argumenten. Kijk altijd in de “help” files om alle argumenten te bekijken en te weten hoe je een commando exact moet opbouwen.
Met de kracht van Python kunnen we ook alle informatie automatisch (zonder druk op de knop) exporteren naar een extern bestand. Hiervoor gebruiken we de default Python open en write commando’s:
import osf import time # Find Deleted Files osf.DeletedFilesStartScan('Drive-C', quality=osf.FSEARCH_QUALITY_EXCELLENT, min_size=1048576) results = [] while osf.DeletedFilesGetResult(results) == False: time.sleep(2) f = open("C:\\Users\\User\\Desktop\\demofile2.txt", "a") f.write(str(results)) f.close() print(results) |
Let op: Bij mij (gedurende het gebruik van de beta) was het niet mogelijk om iets onder “print(results)” te plaatsen. Dus eerst de resultaten afdrukken en daarna exporteren is niet mogelijk. Let hierop tijdens het schrijven van je scripts.
Het clipboard kunnen we als volgt opvragen:
print(osf.ClipboardGetContents()) |
Bovenstaande voorbeeld laat het clipboard zien van de live computer. Om het clipboard van een image te zien specificeer je deze:
print(osf.ClipboardGetContents(‘Forensic-Image’)) |
Vrijwel alle OSF Processen zijn te beheren. Zo kunnen we een drive (mouted, physical of toegevoegd aan de case) imagen naar een gewenste locatie. In onderstaand voorbeeld doen we dit naar C:\Cases:
import osf import time osf.DriveImageStart('C:\Cases\SSD_500GB.E01', disk='C-Drive') while osf.DriveImageGetProgress() == False: time.sleep(2) |
Start een “mismatch file scan” op een physical, mounted of case drive:
import osf import time #Start een Mismatch File Scan op Drive-C osf.MismatchFilesStartScan("Drive-C:") while osf.MismatchFilesGetResult(results) == False: time.sleep(2) print(results) |
Wanneer je een OSForensics taak start zie je deze in de GUI actief worden. Bovenstaande voorbeeld laat zien dat de resultaten zichtbaar zijn in de GUI evenals in de output van Python.
Op eenzelfde methode kunnen we allerhande scans starten zoals, het scannen naar wachtwoorden:
import osf import time osf.PasswordsStartScan('Drive-C') results = [] while osf.PasswordsGetResult(results) == False: time.sleep(2) print(results) |
System informatie:
import osf # Put your script contents here osf.SysInfoStart("Drive-C", "System Information From Registry") |
En een scan naar user activity:
import osf import time # Scan for User Activity osf.UserActivityStartScan("Drive-C", windows_search=False) results = [] while osf.UserActivityGetResult(results) == False: time.sleep(2) print(results) |
In bovenstaande script scannen we naar User Activity op het toegevoegde case device “Drive-C”. We zoeken naar alle User Activity met uitzondering van de “Windows Search” resultaten.
Uiteraard kun je ook zoeken naar Windows Logins:
import osf import time # Scan for Windows Logins osf.WinLoginStartScan("Drive-C") results = [] while osf.WinLoginGetResult(results) == False: time.sleep(2) print(results) |
Zelfs het draaien van reports is mogelijk v.a. de Python player:
osf.ReportGenerate('C:\forensics\report', template='Case Report - Printer Friendly', generate_pdf=True, pdf_password='Zeer-Sterk-W8woord')) |
Maar de echte kracht van OSForensics Python Player is toch wel het combineren van scripts om geautomatiseerd forensische taken uit te voeren.
In bovenstaande voorbeeld zie deel1 van mijn eigen script. Deze zal binnenkort toegevoegd worden aan de GitHub Repo (op het moment van schrijven nog niet online). Dit script doorloopt automatisch de default procedure welke ik altijd doorloop na het aanmaken van een case en het toevoegen van bijbehorende devices. Dit script is uiteraard prima uit te breiden en te verbeteren… maar voor nu scheelt het alweer veel “klikwerk”. Een voordeel van dit script is ook dat de output meteen in een externe log geplaatst wordt. Zoals je ziet is het gebruik van custom variabelen ook prima mogelijk.
import osf import time import datetime """ OSForensics - Default Project Actions By Jarno Baselier """ """ Custom Variables """ projectdriveA = "Drive-C" projectdriveB = "Drive-D" projectdriveC = "ForensicImage" projectdriveD = "" today = date.today() GlobalLog = "c:\temp\OSForensicsLog" + today + ".txt" # Check for Windows Logons if projectdriveA is not None: osf.WinLoginStartScan(projectdriveA) results = [] while osf.WinLoginGetResult(results) == False: time.sleep(2) f = open(GlobalLog, "a") f.write(str(results)) f.close() print(results) print(results) if projectdriveB is not None: osf.WinLoginStartScan(projectdriveB) results = [] while osf.WinLoginGetResult(results) == False: time.sleep(2) f = open(GlobalLog, "a") f.write(str(results)) f.close() print(results) print(results) if projectdriveC is not None: osf.WinLoginStartScan(projectdriveC) results = [] while osf.WinLoginGetResult(results) == False: time.sleep(2) f = open(GlobalLog, "a") f.write(str(results)) f.close() print(results) print(results) if projectdriveD is not None: osf.WinLoginStartScan(projectdriveD) results = [] while osf.WinLoginGetResult(results) == False: time.sleep(2) f = open(GlobalLog, "a") f.write(str(results)) f.close() print(results) print(results) |
Wil je meer informatie hebben over de OSF Python Script Player definities dan kun je hier de onofficiele OSF module definition documentatie downloaden (helemaal Beta)!
Het is fantastisch om te zien hoe OSForensics iedere keer verbeterd, nieuwe features toevoegt en samenwerkt met de community. Deze nieuwe release van OSForencis is daar een goed voorbeeld van. Binnenkort hoop ik hier wat custom scripts te plaatsen die voor jou en mij bepaalde taken van een digitaal forensisch onderzoek kunnen vergemakkelijken.
Hopelijk vond je deze informatie interessant en heb ik je een kijkje kunnen geven in een aantal features die eraan gaan komen. Uiteraard bedankt ik hierbij ook PassMark Software voor het verstrekken van een beta variant en het vertrouwen in mij om te mogen testen en uiteraard om dit te mogen publiceren. Dit is echt de eerste keer dat deze features online getoond worden… op mijn blogje! Dus best wel een beetje trots! ★★★
Ben jij ook een beetje trots? Like dan deze post of deel hem weder op je eigen webpagina of social media. Elke like en share helpen me met een beetje extra exposure… en dat wordt ENORM gewaardeerd!