Ransomware is een soort malware dat ingezet wordt als chantagemiddel: eens de malware een computersysteem heeft geïnfecteerd, worden belangrijke bestanden opgespoord en versleuteld met een heel sterk algoritme. De hackers die achter de aanval zitten, eisen typisch losgeld om de bestanden te herstellen (meestal te betalen in cryptomunten zoals Bitcoin). Onderstaande figuur toont bijvoorbeeld de boodschap die gebruikers te zien zouden kregen als ze slachtoffer werden van de beruchte WannaCry ransomware-aanval.

Het is bijna altijd hopeloos om te proberen de encryptie te kraken, waardoor een slachtoffer van een ransomware-aanval in feite slechts twee opties heeft: het losgeld betalen of de versleutelde bestanden voor altijd kwijtraken. De enige doeltreffende bescherming tegen dit soort cyberaanvallen is dan ook om regelmatig back-ups te maken van belangrijke bestanden op een veilige locatie (bij voorkeur volledig afgesloten van het Internet). Ransomware-aanvallen kunnen veel geld opbrengen en zijn daarom razend populair: naar schatting werd in 2020 de helft van alle bedrijven ter wereld slachtoffer van ransomware (bron).
Schrijf een Unix commando dat alle bestanden herstelt die aangetast zijn door een ransomware. Deze bestanden worden gekenmerkt door de volgende eigenschappen:
de bestanden staan in de huidige directory of één van de onderliggende subdirectories
de bestandsnamen zijn van de vorm FWO_XXXXXXXX.txt, waar XXXXXXXX een opeenvolging is van acht hoofdletters en cijfers
de bestanden werden gewijzigd in de afgelopen 24 uur
de bestanden zijn versleuteld met OpenSSL
De bestanden die moeten ontsleuteld (hersteld) worden, zijn dus alle bestanden waarvoor de vier bovenstaande voorwaarden gelden.
Je kunt xargs gebruiken om commando's op te stellen op basis van wat ingelezen wordt uit stdin. Met de optie -I{} kun je aangeven dat alle voorkomens van {} vervangen moeten worden:
$ echo naam | xargs -I{} echo voor{} en achter{}
voornaam en achternaam
Een versleuteld bestand kun je herstellen met het volgende commando:
$ openssl enc -d -in $filename -aes-256-cbc -pbkdf2 -out $filename.dec -pass pass:supercalifragilisticexpialidocious
Hier staat $filename voor de padnaam van het bestand. Een bestand FWO_XXXXXXXX.txt dat versleuteld is via OpenSSL met AES 256-bit in CBC-modus en het wachtwoord supercalifragilisticexpialidocious wordt op die manier gedecrypteerd en opgeslagen als FWO_XXXXXXXX.txt.dec.
Je kunt het file commando gebruiken om te controleren of een bestand versleuteld is:
$ file plaintext.txt
plaintext.txt: ASCII text, with no line terminators
$ file versleuteld.txt
versleuteld.txt: openssl enc'd data with salted password
Hier is plaintext.txt een gewoon (niet versleuteld) tekstbestand, terwijl versleuteld.txt versleuteld is met OpenSSL.
De directorystructuur waarmee je ingediende oplossing getest wordt, zit vervat in dit ZIP-bestand. Als je de inhoud van dit ZIP-bestand gebruikt op je oplossing lokaal te testen, dan zal je zelf voor een aantal bestanden de datum waarop die laatst gewijzigd werden moeten bijwerken.